Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Assembler > Crinkler - не работает слинкованный код :(( |
Автор: Jin X 24.01.18, 11:55 |
Кто-нибудь знает такого зверя, как crinkler? Пишу элементарный код (hello world), линкую crinkler'ом, запускаю – тишина. Смотрю диспетчер задач – висит, грузит 1 ядро по полной. Что я делаю не так? Прикрепляю примеры (на fasm, nasm, masm, uasm с bat-никами для компиляции через link и crinkler, результаты в папке out). p.s. Пробовал на 2-х компах с Win10 x64, а также в VMware с Win7 x86, WinXP. Не работает ни один из примеров (кроме слинкованных обычным link'ом, разумеется). crinkler_test.zip (, : 92) Добавлено x64dbg вызывает исключение ещё до entry point, а Оля при запуске анимации бесконечно крутиться в разных циклах (распаковывает? хеширует?) Вообще, странная штука. Если я меняю в entry point (определяемом hiew) первую инструкцию на int3, ud2 или cli, прога либо слетает (в Win10, причём втихую), либо просто молча висит в процессах (Win7). Только XP ругается (сбрасывает прогу с сообщением об исключении). При зависании (Win7) проц уже не грузится и объём занятой памяти вместо 100 Мб всего 100 Кб. Добавлено Установка опций /hashtries:1 /hashsize:1 (или /hashtries:0), отключение антивиря и запуск от админа не помогают... Вернее, так: при установке опции /hashsize:1 (/hashtries на это не влияет) примерно через 10 происходит следующее (тут я только вожу мышкой, ничего не нажимаю). https://cloud.mail.ru/public/Jd4Q/xtE76eyak |
Автор: Jin X 24.01.18, 12:50 |
При запуске на XP (VMware) с ключом /hashsize:1 через несколько секунд получаем исключение, см. скрины. crinkler_crash_screen1.png (, : 550) crinkler_crash_screen2.png (, : 550) Добавлено Понятно... 10-ка почему-то при встрече с ud2 вообще не выдаёт исключений. И в Process Explorer'е происходит то же самое, что и на видео... Короче, тупо слетает прога через 10 секунд при задании ключа /hashsize:1 и всё... Добавлено И 7-ка (установленная на VMware) тоже молчит при встрече с ud2 (не уничтожаю процесс). Так что, с entry point и PE-форматом всё ок, прога нормально загружается, нормально запускается... |
Автор: Qraizer 24.01.18, 14:50 |
Поведение здорово смахивает на ситуацию с исчерпанием стека. Добавлено P.S. Если с этим сталкивается ядро, когда только создаёт процесс, пробует прогрузить DLLки и только лишь подготавливается к передаче управления в entry point, то вполне объяснимо и отсутствие диагностики, и игнор трапов на старте, до которых дело просто не доходит. Добавлено P.P.S. Попробуй DEP отключить. |
Автор: Jin X 24.01.18, 17:40 |
Да не... я ж говорю, что в entry point управление передаётся, см. выше. Иначе не слетала бы прога при замене в EP первых байт на int3/ud2. А в x64dbg недоработка просто какая-то... DEP отключил для процесса – не помогло. Но я и не рассчитывал. Попробуй запустить вот эти интры. У тебя какие запускаются? И какой камень? У меня ни одна не пашет. На 7-ке VMware "humppatunneli" показывает полосу загрузки, затем только мигающий кубик, "sugarcube" – чёрный экран, затем слетает, а "sound my windows" глючит (см. скрин). На XP VMware не пашет ничего (вылетает с сообщением об исключении). На ноуте (там тоже 10 x64) работает "humppatunneli" (но при выходе выдаёт исключение), "sugarcube" показывает только начальную картинку, "sound my windows" жутко тормозит (ну это может из-за слабой видеокарты - интегрированной). "Shoot The Code" не пашет (хотя автор пишет, что на Intel может не работать). Хотя и там, и там Core i5. DEP включен везде, включая 7-ку и XP в VMware. А вот мои "test"ы не пашут ни там, ни тут, на в VMware... Вот я запустил свой test через Olly (с /hashsize:1), он остановился на попытке записи (stosb) по адресу 0053C000, при этом ESP=01C3FF84 (далековато). Короче, он пишет, пишет, а потом ба-бац и "усё, рехламент". Собственно, мне не очень интересно копаться в этих дербрях. Тут вопрос в том, что слинкованная прога должна работать (ну хотя бы где-то: на ноуте или VMware), а она не пашет. Почему? Что нужно сделать (какие ключи задать или что-то ещё), чтобы заработала? А 10-ка (в т.ч. на ноуте) и 7-ка (VMware) не выдают сообщений и на таком коде тоже: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> format PE GUI 4.0 include 'win32axp.inc' .code start: ud2 invoke ExitProcess, 0 .end start intros.zip (, : 98) the_sound_my_windows.png (, : 508) Добавлено Читаю сейчас про опции, короче... |
Автор: ЫукпШ 24.01.18, 18:32 |
Цитата Jin X @ Кто-нибудь знает такого зверя, как crinkler? Пишу элементарный код (hello world), линкую crinkler'ом, запускаю – тишина. Смотрю диспетчер задач – висит, грузит 1 ядро по полной. Что я делаю не так? Посмотри на дикую разницу в размерах исполняемых модулей. Как будто не слинковалось с библиотеками. Можно посоветовать протрассировать программу Olly - дибаггером по-шагово. Тогда, возможно, станет понятно, что произошло. |
Автор: Jin X 24.01.18, 19:53 |
Разницу между чем и чем? test_link и test_crinkler? Так это ж не просто линкер, это ещё и упаковщик, причём жётский, для демосценеров... Так, я ж писал об этом: Цитата Jin X @ Вот я запустил свой test через Olly (с /hashsize:1), он остановился на попытке записи (stosb) по адресу 0053C000, при этом ESP=01C3FF84 (далековато). Короче, он пишет, пишет, а потом ба-бац и "усё, рехламент". |
Автор: Qraizer 25.01.18, 12:35 |
Короче. Идей нет, кроме одной. У всех этих образов нахрен испохаблен заголовок модуля. В них нет вообще ничего, ни одной секции, даже кодовой. Любые циферки, как-либо количественно характеризующие образ, хранят абсолютно неадекватные значения, более-менее приличные только качественные значения, типа версии подсистемы для запуска или типа бинарного кода. Точка входа выставлена в 5Ch, т.е. в зарезервированную под null pointer область, что скорее всего немедленно вызывает трап. И была бы мессага по этому поводу, но, видать, этот трап каким-то образом перехватывается кадром SEH, уже настроенным на упакованный образ заранее подготовленным в нём обработчиком, поэтому он получает управление и начинает творить свои тёмные дела по распаковке. Всё, что я смог увидеть в нормальном отладчике – зацикливание в цикле loop, размером с три/четыре десятка байт, со значением что-то типа 0FFFEXXXXh в ECX. Думаю, без кернел-отладчика тут не обойтись. В своё время SoftIce-ом я творил чудеса, но с XP за него не брался, да и испохабился он. |
Автор: Jin X 26.01.18, 11:10 |
Да, тем не менее, они запускаются (у многих, кроме меня... или кроме мною слинкованной проги, она у тебя же тоже не пашет?) |
Автор: Qraizer 26.01.18, 12:50 |
У меня не пашет, но у меня на работе интегрёвое видео, а дома я не пробовал. |
Автор: Jin X 26.01.18, 13:22 |
Не пашут ни мои тесты, ни интры? |
Автор: Qraizer 26.01.18, 14:34 |
Ну, интры, вроде, проходят дальше твоих примеров, но я не уверен. Надо дома попробовать, на нВидии. |
Автор: Jin X 26.01.18, 15:44 |
Вот в ветке разработчика вопрос вчера задал... http://www.pouet.net/prod.php?post=816387 |
Автор: Qraizer 03.02.18, 21:33 |
Блин, забыл совсем. Дома, на нВидии, все интры работают. |
Автор: Jin X 05.02.18, 08:23 |
Ответ найден! Проблема была в lib'ах от MASM32. Надо просто заменить путь на "C:\Program Files (x86)\Windows Kits\10\Lib\10.0.15063.0\um\x86" (или т.п.) И всё заработало! Ппц... |