Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.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? Так это ж не просто линкер, это ещё и упаковщик, причём жётский, для демосценеров...

Цитата ЫукпШ @
Olly - дибаггером по-шагово.
Тогда, возможно, станет понятно, что произошло.
Так, я ж писал об этом:
Цитата 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 @
У всех этих образов нахрен испохаблен заголовок модуля.
Да, тем не менее, они запускаются (у многих, кроме меня... или кроме мною слинкованной проги, она у тебя же тоже не пашет?)

Автор: Qraizer 26.01.18, 12:50
У меня не пашет, но у меня на работе интегрёвое видео, а дома я не пробовал.

Автор: Jin X 26.01.18, 13:22
Цитата Qraizer @
У меня не пашет
Не пашут ни мои тесты, ни интры?

Автор: 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" (или т.п.)
И всё заработало! Ппц...

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)