Загрузчик приложений
Может кто-то знает ссылку на статью, в которой подробно описывается работа загрузчика, или сам может
-
Спасибо, что разъяснили свою позицию, а то мне стало неловко, отнимаю у людей время.
Я то пенсионер, вот и развлекаюсь...
В последнее время мне стало не интересно просто переводить программу, важно, чтобы возникали сложности - крякозяблики, не исправимые без вмешательства в код программы и другое подобное. Собственно со съемом защиты кода я встречался, но там обошлось малой кровью.
Перевод строк в главном окне программы, если не превышать размер оригинала, работает нормально. Но если перевести подсказку к кнопкам "Start", "Pause", то подсказка отображается правильно, но приложение не работает.
Переводил непосредственно в шестнадцатеричном редакторе.
После перевода в Radialix приложение не работает. Если вручную добавить секцию в конец файла - приложение работает, но если изменить ссылку в отладчике или шест. редакторе , то приложение не работает. (любое изменение кода в файле приводит к не работоспособности, если изменить код в отладчике после загрузки, то все нормально)24 марта 2019 - 17:10 / #11 -
Цитата: NNK_RTRНо если перевести подсказку к кнопкам "Start", "Pause", то подсказка отображается правильно, но приложение не работает.
Хм, действительно. Перевел только подсказку "Start" и программа больше не работает, точнее кнопка пуска. Нужно ломать...24 марта 2019 - 17:43 / #12 -
NNK_RTR, возможно вам будет интересно следующее.
1. Программа создает копию самой себя в памяти.
2. Вычисляет хеш файла (или процесса ?).
3. Затем вычисляет хеш каждой секции в файле.
4. На базе полученных хешей (8 значений, релокации не учитываются) вычисляет общий хеш.
5. Сравнивает значения хешей файла и общего по секциям.
6. Если все ок, дешифрует и перезаписывает криптованный участок кода.
7. Наконец запускает свою модифицированную копию из памяти.
По ходу операций с хешами выполняются еще дополнительные проверки с установкой флагов валидности, поэтому простое исправление условий перехода не работает.
По виду хеши походят на MD5 (длина 32 символа), но это что-то другое или какая-то самопальная дурь.
Дальнейшая инфа на базе файла WinAPIOverride64.exe, версия 6.6.5, CRC32=8869C3AD (отладчик x64dbg, ОС Windows 10 x64).
Все хеши вычисляются в функции по адресу 00007FF68D7D0397 (@10F797).
Валидный хеш исполняемого файла - A357D3FECB10F60D36B54C61972245C0.
Валидные хеши секций:.text - 1DD072B0387A09061918D61696FE941B .rdata - 3ABBD1F6128786AF3972E5D90192CB75 .data - 30BDECB183524DF42B30C4D5C1353087 .pdata - 70D727DDA503543747FE22C857C76DA9 text - 04ED7D5700CF692B0EBE80EAC3E4A356 data - 502BB638BDA76A612230EAE1E62B70A6 .tls - FE81C98ECB23F4A1068BBE63C0A71096 .rsrc - F1775F9DEE9D57E2D070C94446A4F346
Общий хеш вычисляется по адресу 00007FF68D6E3C0B (@2300B) и далее идет сравнение хешей. Причем, если бряк по этому адресу включен, то общий хеш вычисляется неправильно (программа не работает). Если бряк отключить, то все ок (программа работает). Я первый раз с такой хренью сталкиваюсь и как это бороть без понятия. Может какие настройки в отладчике надо изменить?
Чтение криптованного участка кода происходит по адресу 00007FF68D6D02F0 (@F6F0).
Также все ключевые строки, по которым можно определить важные места в коде и начать раскручивать алго в обратном направлении, зашифрованы. Но это легко определяется, именно с них я начал ковыряние в коде. Строки представляют собой хрень вида: "9z2S#~_Pf57UEe7+Zi5R$&"lHlGTu!&wzv". И им подобные.
В общем поковыряйте пока, может кто еще подойдет. У меня пока больше никаких мыслей, беру отгулы.
На сайте версия программы 6.6.6. Что-то стремно эту версию у себя запускать.27 марта 2019 - 00:46 / #13 -
1 апреля 2019 - 03:23 / #14
-
Сейчас я пробую в первую очередь снять защиту от трассировки, от бряков и в целом от отладчика. Иначе не получается отследить логику программы. Сложность в том, что в файле сохранить изменения нельзя, приходится при каждом запуске изменять код в отладчике. Заметил, что аппаратную контрольную точку программа не замечает (или делает вид), пытаюсь отследить разницу в выполнении программы при установке аппаратной и обычной контрольной точки
Признаюсь, моя активность значительно снизилась, чему способствует изучение методов защиты программ...1 апреля 2019 - 10:09 / #15 -
Цитата: NNK_RTRпытаюсь отследить разницу в выполнении программы при установке аппаратной и обычной контрольной точки
Зачем? Берите мои данные патча и переводите.
Сильно не гонял, но после перевода строк в коде работает.Цитата: NNK_RTRмоя активность значительно снизилась, чему способствует изучение методов защиты программ...
Сколько на свете программистов, столько и способов защиты. Каждый создает их по своему, исходя из знаний и опыта. Если хотите разобраться с этой программой, начните со способов выявления отладчика, а именно: как программно можно определить, что программа запущена под отладчиком. Например, вызвать функцию IsDebuggerPresent и т.д.1 апреля 2019 - 16:37 / #16 -
Берите мои данные патча
Хотите сказать, что если применить ваш патч и сохранить изменения на диске программа работает? Тогда подробней.Сохраняйте промежуточные патчи
После сохранения изменений на диск программа не работает, поэтому я вынужден изменять код непосредственно в отладчике после загрузки приложения. Разумеется, я не делаю этого каждый раз вручную - использую многострочный ассемблер (плагин) для сохранения и восстановления измененийЦитата: Krigвыявления отладчика
С отладчиком программа борется весьма активно и разными способами. В том числе, непосредственно с ollydbg - выявляет его наличие.
Проверяет время выполнения некоторого участка кода, проверяет флаг ловушки (TF), причем хитрым способом:
PUSHFD
...
POP EAX
Причем первая команда может быть далеко от второй и в промежутке могут быть другие команды изменяющие стек или другие флаги, в том числе команды CALL и RET. Впечатление, что программист, кроме использования некоторых стандартных алгоритмов, "запутывал" программу вручную.Сообщение отредактировал NNK_RTR 2 апреля 2019 - 16:052 апреля 2019 - 11:16 / #17 -
Цитата: NNK_RTRТогда подробней.
О чем?2 апреля 2019 - 22:45 / #18 -
Цитата: KrigОдин из вариантов обхода
Стыдно конечно, но я никогда не встречался с подобной записью.
Что это? Шестнадцатеричный дамп?Сообщение отредактировал NNK_RTR 3 апреля 2019 - 10:343 апреля 2019 - 10:25 / #19 -
Цитата: NNK_RTRДальнейшая инфа на базе файла WinAPIOverride64.exe, версия 6.6.5, CRC32=8869C3AD (отладчик x64dbg, ОС Windows 10 x64).
Это означает, что
1) Операционная система у меня Windows 10, 64-разрядная.
2) Разбирал я 64-разрядную версию 6.6.5 программы, а именно файл WinAPIOverride64.exe.
3) Анализ выполняю в отладчике x64dbg.Цитата: NNK_RTRЧто говорит символ @, я подумал, что это и есть смещение в файле
Да, это смещение, но в файле WinAPIOverride64.exe, версия 6.6.5.Цитата: NNK_RTRСтыдно конечно, но я никогда не встречался с подобной записью.
Что это? Шестнадцатеричный дамп?
Да че, стыд? Я тоже не все знаю и понимаю, сижу порой на форумах, читаю, читаю и нифига не понимаю... Как там Ленин говорил: "Учится, учиться и еще раз учиться!"
Да, это последовательность байт для поиска в шестнадцатеричном редакторе. Сверху исходная последовательность, а снизу показаны байты на замену. Символами || над исходной последовательностью указаны байты, которые при поиске в шестнадцатеричном редакторе нужно заменить на маску, т.е. вместо этих конкретных байт могут быть какие-угодно байты, поэтому при поиске их не нужно учитывать. Слева от байт замены написана версия файла программы. Открываете файл нужной разрядности. Вводите в поиске последовательность байт, находите её и заменяете соответствующие байты. Потом сохраняете изменения в файле. Если вам трудно или ничего не понятно, скажите, я вам предоставлю готовые файлы.4 апреля 2019 - 00:34 / #20