![]() |
eXeL@B —› Вопросы новичков —› Зацикливание (EBFE) и как отладить процесс подключаемый к основному |
Посл.ответ | Сообщение |
|
Создано: 19 февраля 2009 02:10 · Личное сообщение · #1 Привет, кто знаком с защитой Crypkey или просто с техникой зацикливания в реверсинге, поясните пожалуйста сл. ситуацию. Есть прога, при запуске она создает файл cksXX.tmp, которому впоследствии передается управление над ней и он становится отладчиком данной проги используя CreateDebugEvent, ContinueDebugEvent, WriteProcessMemory Мне надо отлаживать именно этот cksXX.tmp а не саму прогу, поэтому для этого сразу после создания этого файла на диске в коде основной проги надо как-то зациклить отладчик чтобы он остановился на месте передачи управление в cksXX.tmp 1. попробовал изменять файл cksXX.tmp на диске, сразу после его создания основной программой, во время ее выполнения 2. попробовал патчить этот файл прямо в памяти основной проги во время выполнения Результат один, программа зацикливается, только почему-то не в пропатченном месте, где должен вызываться cksXX.tmp, а где-то в недрах ntdll и выйти отсюда я уже не могу. Вобщем, в двух словах, я не знаю как мне отладить процесс, который подключается к тому, что уже отлаживается через OllyDebug но надеюсь кто-то может пояснить мне как это сделать. Спасибо ![]() P.S. Скорее всего это вопрос к Archer'u, как человеку знакомому с CrypKey. ![]() |
|
Создано: 19 февраля 2009 12:01 · Личное сообщение · #2 |
|
Создано: 19 февраля 2009 20:13 · Личное сообщение · #3 А чо сразу Archer, я так, не при делах. А если серьёзно-то статья тут лежит, в принципе хорошая, по ней вполне можно сделать. Непонятно, где он у тебя застревает в нтдлл, если там циклов нет. Видимо, аттачишься олькой. Дык она при аттаче стопится в нтдлл-это нормально, надо отпустить на выполнение и остановить руками уже. Ещё олька аттачится иногда коряво, надо заново запускать ольку перед аттачем. Короче, не совсем понятен вопрос, где оно у тебя застряло и что ты сделал. ![]() |
|
Создано: 19 февраля 2009 23:06 · Личное сообщение · #4 http://exelab.ru/rar/dl/CRACKLAB.rU_52.rar Это читал. В связи с этим собственно и возник вопрос. После создания CRYPKEY debugger (файл cksXX.tmp) основная прога пишет в него код, который теперь будет ее парсить, т.е. заменять в ней места СС на реальный код. Вот этот "парсер" я и попытался отладить двумя вышеописаными способами. 1. пока основная прога висит в Olly, пошел во временную папку, нашел там свежесозданный cksXX.tmp, открыл его, переписал первые 2 байта на EBFE (прыжок на себя), сохранил, в Olly нажал F9, потом F12 но остановился в NTDLL (7C90EB94h) а не на цикле EBFE 2. второй способ - дописал байты EBFE в код "парсера" в основной проге еще до записи их cksXX.tmp, но оказываюсь там же Если я правильно понял, мне надо не F9 нажимать а CTRL+F8 и суметь вовремя остановить цикл на EBFE? Как-то это непрофессионально, или я не понимаю намеков? ![]() |
|
Создано: 19 февраля 2009 23:12 · Поправил: artemiusgreat · Личное сообщение · #5 А вообще в данном туториале непонятна одна фраза вот здесь: "А теперь можно запустить OD и приаттачиться к cksXX.tmp. Затем надо приостановить процесс, жмем F9 и затем F12, теперь мы на EP лоадера." Я не понимаю что значит приаттачиться к процессу? Это ведь можно только DLL, при чем здесь Olly Debug, как им можно приаттачиться к чему-то? ![]() |
|
Создано: 20 февраля 2009 11:44 · Личное сообщение · #6 |
|
Создано: 20 февраля 2009 19:23 · Личное сообщение · #7 |
|
Создано: 20 февраля 2009 22:21 · Личное сообщение · #8 Сдается мне, автор создал тему в разделе "Вопросы новичков" а не "Я крут, т.к. хакнул 5000 прог и знаю дебаггер наизусть" 1. Мануал по дебаггеру читал, но запоминать все его функции и нужные и ненужные как-то нерационально (я бы даже сказал, не побоюсь сего слова, невозможно), да и запоминается все в основном уже при использовании 2. В разработке Windows не участвовал, увы, но зато писал под него, в том числе и подобие виндового Task Manager, поэтому кое-что о процессах и тредах мне, как это ни странно, известно ![]() Поэтому собственно и возник вопрос, Olly ведь работает в Ring3 а поэтому оказаться в адресном пространстве процесса можно лишь в качестве подгруженной в него DLL, дочернего процесса или WriteProcesMemory. Вот я и подумал что возможно в мануале что-то другое имелось в виду, решил уточнить чтобы на пустом месте не гадать несколько дней ![]() kioresk пишет: Меню «File» — «Attach» Большое спасибо. Все бы так писали а не описывали теретические возможности Гугла и мануалов ![]() ![]() |
|
Создано: 27 февраля 2009 02:01 · Личное сообщение · #9 Матриализовалось еще некоторое кол-во вопросов ![]() Простите что я юн и зелен ![]() 1. Хотелось бы поинтересоваться, если в CRYPKEY запакован не основной ЕХЕ а подключаемая DLL, надо ли в ней после распаковки восстанавливать таблицу импорта, ОЕР и производить еще какие-то изменения? 2. Как понять что таблица импорта неправильная? ![]() |
|
Создано: 27 февраля 2009 11:52 · Поправил: kioresk · Личное сообщение · #10 1. Хотелось бы поинтересоваться, если в CRYPKEY запакован не основной ЕХЕ а подключаемая DLL, надо ли в ней после распаковки восстанавливать таблицу импорта, ОЕР и производить еще какие-то изменения? С CrypKey дел не имел, но обычно достаточно просто понять чем скомпилирован файл и проверить указан ли OEP в секции кода/похож ли он на нормальный/нет ли редиректа с OEP на другой код. Например: 1. для Delphi либо в конце секции .CODE (для старых версий), либо во 2-й секции .itext (если кратко, то можно найти OEP, если посмотреть конец секции .text — там будет ссылка на процедуру в .itext, после которой расположен OEP). 2. для Borland C — в начале секции кода перед строкой «C++HOOK». 3. для Microsoft C — на OEP'е часто идет push 58/60/70. Обычно достаточно просто сравнить в Ida нормальный файл и подопытный и все станет понятно. 2. Как понять что таблица импорта неправильная? С импортом тоже самое. Смотришь где он расположен в нормальном файле и сравниваешь со своим. У Delphi/Borland C импорт обычно храниться отдельно в секции .idata, у Miscrosoft C — в секции .rdata (Thunk'и или указатели на функции хранятся в самом начале файла, а IAT или директория импорта — почти в самом конце секции). Открой файл в PE Tools, посмотри что указано в таблице импорта (Directories — Import Directory), т.е. где он храниться и просмотри сам импорт (...), т.е. сколько библиотек/функций используется. У упакованных файлов в импорте обычно хранятся только пара функций (нужных для распаковки файла и заполнения импорта) вроде GetModuleHandle/LoadLibrary/GetProcAddress/VirtualAlloc. П.С. Еще не забывай, что у библиотеки обязательно должны быть релоки (relocation table) и если файл был запакован и изменена TLS, то ее тоже надо подправить. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Зацикливание (EBFE) и как отладить процесс подключаемый к основному |