Сейчас на форуме: YDS, _MBK_, user99 (+9 невидимых)

 eXeL@B —› Основной форум —› Исследование Girder 3.3.10
<< . 1 . 2 . 3 . 4 . >>
Посл.ответ Сообщение

Ранг: 28.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 06 ноября 2005 05:02
· Личное сообщение · #1

Доброго времени суток всем!
Я в крэкерском искусстве пока новичок, поэтому очень надеюсь, что кто-нибудь из профессионалов уделит моей проблеме немного внимания. Суть в следующем. Я хочу исследовать программу Girder версии 3.3.10. Это программа для обработки команд с ИК-пульта и управления компьютером. О программах такого типа уже был разговор на форуме, правда, в другом аспекте. Найти её можно по этой ссылке: promixis.com/download.php?ID=673 . И вот столкнулся с такой ситуацией: не могу определить, запакован ли исполняемый файл. Программа вроде бы написана на Дельфи (в пользу этого говорят большой размер exe-файла, и в Restorator'е формочку какую-то видно, и названия процедур и свойств), а PEid пишет: "Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks [Overlay]". Запускал ProtectionID 5.0 - результат: "Armadillo [unknown version] detected !". PE-Scan 1.4a отвечает, что "no recognised packer/encryptor found" (вроде как отсутствуют распознаваемые пакеры - несколько радует), а DeDe 3.50 при нажатии кнопки "Процесс" сначала выводит сообщение "DConsoleapplication compiled with runtime packages found", затем при загрузке цели очень надолго останавливается (я так и не дождался окончания загрузки). В этой связи у меня вопрос: как мне решить, упакована программа или нет? И, если это действительно Armadillo, то что против него можно в дальнейшем предпринять? Если у кого-то есть время и желание, подскажите, пожалуйста.




Ранг: 500.6 (!), 7thx
Активность: 0.260
Статус: Участник

Создано: 19 декабря 2005 21:10
· Личное сообщение · #2

[U]Serge пишет:
OllyDbg is unable to activate memory breakpoint on address range 00000000..00000000. Breakpoint is completely removed


У меня с Олей такая херня уже давно, незнаю как вылечить.
А ачалось всё с установки сервис пака 2, до этого было ОК.



Ранг: 88.0 (постоянный)
Активность: 0.070
Статус: Участник

Создано: 19 декабря 2005 22:25
· Личное сообщение · #3

[U]Serge
То в принципе ручной способ нахождения OEP. Используй скрипт.

Там дальше ещё больше будет отличий от туторной статьи. Например там таких call-ов не будет. Будут jmp-ы. Просто понажимай F7 от оеп пока первый такой jmp не появится.



Ранг: 28.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 19 декабря 2005 22:43
· Личное сообщение · #4

rep0A пишет:
Используй скрипт


Какой именно? Тот, который в туторе (для Армы 4.20) или Armadillo Standard Unpack? Судя по предыдущим сообщениям, это не слишком навороченная Арма, может, с ней и Standard справится?

rep0A, ещё вопрос: какого размера должен получиться дамп до добавления импорта (сохранённый Лордом) и какого размера после добавления импорта в ImpRec'е?



Ранг: 88.0 (постоянный)
Активность: 0.070
Статус: Участник

Создано: 19 декабря 2005 23:11 · Поправил: rep0A
· Личное сообщение · #5

[U]Serge
Вроде оба справляются.

После дампа: 3.362.816 б.
После восстановления импорта: 3.375.104 б.
Это у меня, у тебя возможно будет немного подругому.

Линк на распакованный если что:
http://rapidshare.de/files/9469433/Girder_cr.rar.html http://rapidshare.de/files/9469433/Girder_cr.rar.html



Ранг: 28.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 19 декабря 2005 23:45
· Личное сообщение · #6

rep0A, спасибо большое за ссылку, но хочется самому достичь результата...
Я тебя не слишком расспросами достал? Ты извини, если что... Просто консультируюсь как у более опытного, закалённого в боях с Армадиллой товарища ;)
А сам пока окончательно запутался.

rep0A пишет:
Например там таких call-ов не будет. Будут jmp-ы.


А у меня и CALL'ы откуда-то взялись.
Применил стандартный скрипт. Вот фрагмент кода, начиная с найденной OEP:

00588C2C PUSH EBP <-OEP
00588C2D MOV EBP,ESP
00588C2F ADD ESP,-18
00588C32 PUSH EBX
00588C33 PUSH ESI
00588C34 XOR EAX,EAX
00588C36 MOV DWORD PTR SS:[EBP-18],EAX
00588C39 MOV DWORD PTR SS:[EBP-14],EAX
00588C3C MOV DWORD PTR SS:[EBP-10],EAX
00588C3F MOV EAX,Girder.00588864
00588C44 CALL Girder.00406DE0
00588C49 MOV EBX,Girder.0058EF74
00588C4E XOR EAX,EAX
00588C50 PUSH EBP
00588C51 PUSH Girder.00588EA8
00588C56 PUSH DWORD PTR FS:[EAX]
00588C59 MOV DWORD PTR FS:[EAX],ESP
00588C5C MOV EDX,Girder.00588EC0
00588C61 MOV EAX,Girder.00588ED0
00588C66 CALL Girder.005887D4
00588C6B LEA EDX,DWORD PTR SS:[EBP-10]
00588C6E MOV EAX,Girder.00588ED8
00588C73 CALL Girder.00588630
00588C78 MOV EAX,DWORD PTR SS:[EBP-10]
00588C7B MOV EDX,Girder.00588EC0
00588C80 CALL Girder.00403FC8
00588C85 JNZ SHORT Girder.00588C9E
00588C87 PUSH Girder.0058EF70
00588C8C PUSH 0
00588C8E PUSH 0
...

Как видишь, целых четыре вызова, и только один условный переход в самом конце.

А если следовать твоим указаниям:
rep0A пишет:
Просто понажимай F7 от оеп пока первый такой jmp не появится.


Первый JMP при пошаговом проходе появляется только здесь (их тут целых 4):

00406CE0 JMP DWORD PTR DS:[58F2DC]
00406CE6 MOV EAX,EAX
00406CE8 JMP DWORD PTR DS:[58F2D8]
00406CEE MOV EAX,EAX
00406CF0 JMP DWORD PTR DS:[58F2D4]
00406CF6 MOV EAX,EAX
00406CF8 JMP DWORD PTR DS:[58F2D0]
00406CFE MOV EAX,EAX
00406D00 PUSH EBX
...

Я, может, не там копаю? Поправь, если не так.



Ранг: 88.0 (постоянный)
Активность: 0.070
Статус: Участник

Создано: 20 декабря 2005 00:19
· Личное сообщение · #7

[U]Serge пишет:
Первый JMP при пошаговом проходе появляется только здесь (их тут целых 4):

Ну да. Теперь ПКМ и Follow in Dump->Memory Adress. Дальше как в туторе.




Ранг: 500.6 (!), 7thx
Активность: 0.260
Статус: Участник

Создано: 20 декабря 2005 20:45
· Личное сообщение · #8

[U]Serge пишет:
00406CE0 JMP DWORD PTR DS:[58F2DC]
00406CE6 MOV EAX,EAX
00406CE8 JMP DWORD PTR DS:[58F2D8]
00406CEE MOV EAX,EAX
00406CF0 JMP DWORD PTR DS:[58F2D4]
00406CF6 MOV EAX,EAX
00406CF8 JMP DWORD PTR DS:[58F2D0]


00406CE0 - FF25 DCF25800 JMP DWORD PTR DS:[<&kernel32.GetModuleHa>; kernel32.GetModuleHandleA
00406CE6 8BC0 MOV EAX,EAX
00406CE8 - FF25 D8F25800 JMP DWORD PTR DS:[<&kernel32.LocalAlloc>>; kernel32.LocalAlloc
00406CEE 8BC0 MOV EAX,EAX
00406CF0 - FF25 D4F25800 JMP DWORD PTR DS:[<&kernel32.TlsGetValue>; kernel32.TlsGetValue
00406CF6 8BC0 MOV EAX,EAX
00406CF8 - FF25 D0F25800 JMP DWORD PTR DS:[<&kernel32.TlsSetValue>; kernel32.TlsSetValue





Ранг: 28.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 21 декабря 2005 01:27
· Личное сообщение · #9

NIKOLA
Ага, до этих вызовов я уже догадался.

rep0A пишет:
Если ты поставишь ret в ту процедуру и импорт не перенаправится в тело армы, то потом вылезет MessageBox с сообщением что произошла ошибка импорта и программа будет закрыта или чтото в этом роде. Чтобы окно не появлялось надо "занопить" прыжок.
Нашёл так: bp MessageBoxA


rep0A, а как поставить брекпойнт на функцию через bp? Внизу, через Command Bar? Но там для bp приведён следующий формат:

bp address, string - Break with condition [останов по условию]

ИМХО, больше бы подошла команда bpx, но как с ней ни мучался - не могу никуда её толком пристроить, чтобы сработала как надо. Запускаю её перед последним переходом на OEP (перед постановкой брекпойнта на OEP), потом стартую - и вот снова появляется сообщение о невозможности импорта.
Как правильно сделать, и, главное, КОГДА по ходу действия надо поставить останов на MessageBoxA?




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 21 декабря 2005 07:32
· Личное сообщение · #10

[U]Serge пишет:
bp address, string - Break with condition [останов по условию]

Условие там не обязательный параметр...

-----
Yann Tiersen best and do not fuck




Ранг: 88.0 (постоянный)
Активность: 0.070
Статус: Участник

Создано: 21 декабря 2005 20:29
· Личное сообщение · #11

[U]Serge пишет:
Как правильно сделать, и, главное, КОГДА по ходу действия надо поставить останов на MessageBoxA?

Вот когда ты записал ret в начало той процедуры и снял бряк на память, вот тогда и надо ставить bp MessageBox в низу в CommandBar-е. Если не сработает, попробуй поставить бряк не на первый байт("B"->2раза ЛКМ на бряке и поменять бряк с начала на ret).

[U]Serge пишет:
а как поставить брекпойнт на функцию через bp? Внизу, через Command Bar?

Да.

NIKOLA пишет:
00406CE0 - FF25 DCF25800 JMP DWORD PTR DS:[<&kernel32.GetModuleHa>; kernel32.GetModuleHandleA

Вот так сразу и было? Не надо было рет в процедуре прописывать?




Ранг: 500.6 (!), 7thx
Активность: 0.260
Статус: Участник

Создано: 21 декабря 2005 21:06
· Личное сообщение · #12

Парни, чегото я немогу вас понять, на чём застряли то?

rep0A пишет:
Вот так сразу и было? Не надо было рет в процедуре прописывать?


Я ничего и ни где не прописовал. Я так понимаю реч идёт про мессагу, всплывающее при
востановлении иат?



Ранг: 88.0 (постоянный)
Активность: 0.070
Статус: Участник

Создано: 21 декабря 2005 23:50 · Поправил: rep0A
· Личное сообщение · #13

NIKOLA пишет:
Я ничего и ни где не прописовал. Я так понимаю реч идёт про мессагу, всплывающее при
востановлении иат?

Хм, странно... Вот этого точно небыло? В принципе об этом и речь.



Ранг: 88.0 (постоянный)
Активность: 0.070
Статус: Участник

Создано: 21 декабря 2005 23:53
· Личное сообщение · #14

Забыл приаттачить...

255b_Girder.PNG.zip




Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

Создано: 22 декабря 2005 00:06
· Личное сообщение · #15

rep0A пишет:
Вот так сразу и было? Не надо было рет в процедуре прописывать?

какой рет ? %) сие всегда мэджик джампом называли )




Ранг: 500.6 (!), 7thx
Активность: 0.260
Статус: Участник

Создано: 22 декабря 2005 22:34
· Личное сообщение · #16

rep0A

Вот мини тутор. Всё что написано ниже, касается конкретно этой проги (см. назв. темы).

Загружаем Girder.exe в Олю. В отладчике на вкладке
Options>Debugging options>Exeptioons ставим везде галочки.
Запускаем по ф9, появиться наг. В главном окне олли
Go to>Expression пишем CreateThread и жмём ОК.
Попали в системную функцию. Ставим бряк на конец этой функции (RET).
В наге жмём ОК. Остановились на бряке. Выходим по ф7, попали в
арму, выходим из этой функции по ф7. Скролим вниз пару строчек,
видим это:

003DCA81 PUSH DWORD PTR DS:[ESI+C]
003DCA84 SUB ECX,EDX
003DCA86 CALL ECX
003DCA88 JMP SHORT 003DCAA4
003DCA8A CMP EDI,1
003DCA8D JNZ SHORT 003DCAA7
003DCA8F PUSH DWORD PTR DS:[ESI+4]
003DCA92 PUSH DWORD PTR DS:[ESI+8]
003DCA95 PUSH EBX
003DCA96 PUSH EDX
003DCA97 MOV EDX,DWORD PTR DS:[EAX+78]
003DCA9A XOR EDX,DWORD PTR DS:[EAX+4C]
003DCA9D XOR EDX,DWORD PTR DS:[EAX+30]
003DCAA0 SUB ECX,EDX
003DCAA2 CALL ECX <================= ставим бряк сюда.
003DCAA4 MOV DWORD PTR SS:[EBP-4],EAX
003DCAA7 MOV EAX,DWORD PTR SS:[EBP-4]
003DCAAA POP EDI
003DCAAB POP ESI
003DCAAC POP EBX
003DCAAD LEAVE
003DCAAE RETN


Видим две команды CALL ECX, нас интересует только вторая команда
перед RET, ставим на неё бряк и ф9, остановились и ф7. Мы на ОЕП:

00588C2C PUSH EBP
00588C2D MOV EBP,ESP
00588C2F ADD ESP,-18


Теперь займёмся импортом. Нам нужно найти один правильный вызов
любой апи, на первом кале, выделяем его и Follow, попали сюда:

00406DE0 PUSH EAX
00406DE1 PUSH 0
00406DE3 CALL Girder.00406CE0


выше видем:

00406DAB CALL Girder.00406CD8 ; JMP to kernel32.GetModuleFileNameA

на этом адресе опять Follow и попадае сюда:

00406CD8 JMP DWORD PTR DS:[58F2E0] ; kernel32.GetModuleFileNameA

выделяем этот адрес и Follow in Dump>Memory Address. В окне дампа
выделяем первые четыре байта и Breakpoint>Hardware, on write>Dword.
Перезапускаем олю (Ctrl+F2) и ф9 (бряк с CreateThread пока можно снять,
что бы не мешал). Появится наг. В наге жмём ОК, остановились здесь:

77C36FA3 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>

это нам не интересно, ещё раз ф9, остановились здесь:

003D9925 MOV ECX,DWORD PTR SS:[EBP-359C]
003D992B MOV DWORD PTR DS:[EAX],ECX
003D992D MOV EAX,DWORD PTR SS:[EBP-26F0]; Girder.0058F2E0 <==== здесь остановились
003D9933 ADD EAX,4
003D9936 MOV DWORD PTR SS:[EBP-26F0],EAX
003D993C JMP 003D958E


Убераем старый бряк Debug>Hardware breakpoints> Delete и ставим новый
Breakpoint>Hardware, on execution на строчку выше того места где остановились, а именно:

003D992B MOV DWORD PTR DS:[EAX],ECX

Перезапускаем олю (Ctrl+F2) и ф9. В наге опять ОК и остановились здесь:

003D992B MOV DWORD PTR DS:[EAX],ECX

Теперь, выделяем регистр EAX (в окне регистров) и Follow in Dump. Вокне дампа у нас
начало таблицы (ИАТ). Сейча нам нужно найти, так называемый (по Нарвахе), магический прыжок.
Здесь я не буду об'яснять как его найти, я его определяю на глаз. Если кому интересно,
потрассеруйте весь этот цикл. Вот участок кода:

003D97D0 JMP 003D9941
003D97D5 CMP DWORD PTR SS:[EBP-359C],0
003D97DC JNZ SHORT 003D9820 <============== магич. прыжок
003D97DE MOVZX EAX,WORD PTR SS:[EBP-3598]
003D97E5 TEST EAX,EAX
003D97E7 JE SHORT 003D97F8


Нопим его. Идём обратно на то место, где остановились и ниже видим:

003D9941 CALL DWORD PTR DS:[3E30A4] ; kernel32.GetTickCount
003D9947 SUB EAX,DWORD PTR SS:[EBP-2B60]
003D994D MOV ECX,DWORD PTR SS:[EBP-2B5C]
003D9953 IMUL ECX,ECX,32
003D9956 ADD ECX,7D0
003D995C CMP EAX,ECX
003D995E JBE SHORT 003D9967 <==== здесь нужно исправить на JMP
003D9960 MOV BYTE PTR SS:[EBP-26CC],1
003D9967 CMP DWORD PTR SS:[EBP-281C],0


см.коментарий. Отпускаем по ф9. Появится окно с ошибкой "Cannot find import" и т.д.
ни вкоем случае не закрывайте это окно. Теперь копируем всю таблицу
Binary>Binary Copy и сохраняем в текстовый файл, вот теперь можно закрыть окно.
Делаем рестарт (снимаем хардварный бряк) и ф9 , опять появиться наг. В главном окне олли
Go to>Expression пишем CreateThread и жмём ОК ну и доходим до ОЕП.
Идём, в окне дампа, на начало нашей таблицы и вставляем из текстового файла,
нашу сохранённую таблицу и дампим, потом запускаем импрек ну и дальше как обычно.
Если захочется отрезать лишнии секции, после дампа ребуильдим ресурсы>отрезаем
секции>вставляем ребулд.секцию ресурсов>цепляем ИАТ импреком.
Всё.



Ранг: 88.0 (постоянный)
Активность: 0.070
Статус: Участник

Создано: 23 декабря 2005 00:52
· Личное сообщение · #17

Большое спасибо за тутор! Много стало более понятным.
В принципе я всё делал также до
NIKOLA пишет:
ставим новый
Breakpoint>Hardware, on execution на строчку выше того места где остановились, а именно:

003D992B MOV DWORD PTR DS:[EAX],ECX


Если вместо этого проскролить наверх пока не будет

00CB9770 FF15 8033CC00 CALL DWORD PTR DS:[CC3380] ; msvcrt._stricmp,

поставить бряк(Breakpoint->Hardware, on exetution) на Call чуть выше, тоесть на 00CB975A, перезапустить прогу,брякнутся на 00CB975A,нажать F7,нажать пробел, ввести ret, снять бряк и запустить(F9), то получится тотже эффект.

NIKOLA пишет:
Теперь копируем всю таблицу
Binary>Binary Copy и сохраняем в текстовый файл

А вот до этого не додумался. Вместо этого искал переход отвечающий за это окно и нопил его.



Ранг: 28.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 23 декабря 2005 20:09
· Личное сообщение · #18

А я сделал так, как делал rep0A. Мне этот вариант пока кажется более простым. Хотя надо будет и второй способ попробовать.
У меня пока вот какая проблема. Сделал всё по первому варианту, вроде бы получилось. Единственное, что не могу, так это занопить вызов MessageBoxA. Вернее, я поставил точку останова по этой функции, нашёл её адрес, заменяю на nop-ы, а она всё равно вылезает. За три дня уже все варианты перепробовал. Вчера случайно как-то получилось, сделал дамп, а импорт не успел, на работу бежать надо было. Повторить фокус не удалось, как ни мучался. Вот такой вопрос: по какому адресу правильнее делать NOP? Пробовал нопить по написанному rep0A адресу, получается, только размер файла другой выходит. Но ведь у меня может быть другой адрес этого джампа? Вызов процедуры (у меня) я привёл в аттаче.

635e_Cantfindimport.zip.zip



Ранг: 88.0 (постоянный)
Активность: 0.070
Статус: Участник

Создано: 24 декабря 2005 00:45 · Поправил: rep0A
· Личное сообщение · #19

[U]Serge
Я могу конечно расказать как найти нужный переход, но намого легче делать как NIKOLA
NIKOLA пишет:
Теперь копируем всю таблицу
Binary>Binary Copy и сохраняем в текстовый файл, вот теперь можно закрыть окно.
Делаем рестарт (снимаем хардварный бряк) и ф9 , опять появиться наг. В главном окне олли
Go to>Expression пишем CreateThread и жмём ОК ну и доходим до ОЕП.
Идём, в окне дампа, на начало нашей таблицы и вставляем из текстового файла,
нашу сохранённую таблицу и дампим, потом запускаем импрек ну и дальше как обычно.




Ранг: 28.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 25 декабря 2005 19:44
· Личное сообщение · #20

rep0A пишет:
Я могу конечно расказать как найти нужный переход

Расскажи, если не сложно. Хочу попробовать оба способа.
Попробовал делать по тутору (by NIKOLA). Как нашли OEP, вроде понятно. А вот дальше не очень:
NIKOLA пишет:
Теперь займёмся импортом. Нам нужно найти один правильный вызов
любой апи, на первом кале, выделяем его и Follow

Просьба прокомментировать подробнее с учётом недостатка опыта Вашего покорного слуги ;)
Выделяем сам CALL (команду) или вызов апи? Если апи, то как его найти?
Надо ли делать рестарт перед этим и затем всё снова до первого CALL ECX, или после нахождения OEP возвращаемся (Ctrl+G) на первый CALL ECX?




Ранг: 500.6 (!), 7thx
Активность: 0.260
Статус: Участник

Создано: 25 декабря 2005 19:58 · Поправил: NIKOLA
· Личное сообщение · #21

[U]Serge пишет:
Выделяем сам CALL (команду) или вызов апи?


Тибе нужно найти где вызывается любая апи, а именно

JMP DWORD PTR DS:[хххххххх]


[U]Serge пишет:
Если апи, то как его найти?


и так всё разжованно, читай внимательней, порядок прохождения описан.
Я не знаю, как ещё подробней описать.




Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

Создано: 26 декабря 2005 00:16
· Личное сообщение · #22

[U]Serge пишет:
Просьба прокомментировать подробнее с учётом недостатка опыта Вашего покорного слуги ;)

ты лучше попытайся понять что и зачем делается, а не методом тыка действуй ;)

NIKOLA пишет:
Появится окно с ошибкой "Cannot find import" и т.д.
ни вкоем случае не закрывайте это окно. Теперь копируем всю таблицу
Binary>Binary Copy и сохраняем в текстовый файл, вот теперь можно закрыть окно.

а зачем ? лучше сразу читать эту иат импреком, потом пофиг что будешь делать с процессом и когда появится дамп, импорт то уже в импреке будет правильный, останется только фиксдамп нажать.



Ранг: 28.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 26 декабря 2005 02:23
· Личное сообщение · #23

NIKOLA, извини за глупый вопрос. Я тебя неправильно понял, думал, что ты говоришь про первый CALL, который был ранее, а ты имел в виду первый CALL, который идёт сразу после OEP. Сорри.

Mario555 пишет:
ты лучше попытайся понять что и зачем делается

Именно этим я сейчас и занимаюсь, поэтому вожусь так долго. Проблема в том, что я чего-то, может быть, недопонимаю или неправильно понимаю (как в случае с этим CALL-ом). Но я пытаюсь разобраться и до всего дойти сам, а если что-то становится непонятным, то спрашиваю. Бывает и так, что пока дождусь ответа, сам уже разберусь (так было, например, в случае с бряком на MessageBoxA. Команду ввёл, забыл Enter нажать, бряк и не сработал ;). Ты абсолютно прав, понимание - это главное. Сабж с данной защитой - это только частный случай. Универсального способа для распаковки всех программ с армой вроде бы пока ещё не придумали, поэтому важно знать технику самого процесса, понимать его суть. В принципе, я почти разобрался с тем порядком, который предложил NIKOLA, сейчас разбираюсь с финальной частью, с таблицей IAT.



Ранг: 88.0 (постоянный)
Активность: 0.070
Статус: Участник

Создано: 26 декабря 2005 16:52
· Личное сообщение · #24

[U]Serge пишет:
Расскажи, если не сложно. Хочу попробовать оба способа.


Брякнулись на меседжбоксе. Теперь нажимаем Debug->Execute till user code и ОК в меседжбоксе. Оказались в арме. Из окна ошибки мы узнали что ошибка произошла в функции ARMDEBUG= и поэтому ставим бряк на 5CBDA2:

005CBDA2 |. 68 EC465F00 PUSH Girder.005F46EC ; ASCII "ARMDEBUG="

Перезапускаем прогу и оказываемся на адресе 5CBDA2. Теперь несколько раз нажимаем F8 и замечаем что прога запускается в этом call-е:

005CBDCE |> E8 CDF7FFFF CALL Girder.005CB5A0

Ставим на него бряк и перезапускаем прогу. После того как мы на нём оказались жмём F7, видим что в call-e всего один вызов. Входим в него(F7). Теперь упорно жмём F8 пока не окажемся здесь:

005CB4D5 > E8 61E8FFFF CALL Girder.005C9D3B

Ещё раз нажимаем F8. Вылезает наг. Жмём в нём на OK. Ещё несколько раз нажимаем на F8 замечаем что прога запускается тут:

005CB4FC . FF15 54AA5F00 CALL DWORD PTR DS:[5FAA54]

Смотрим что сверху и видим этот прыжок:

005CB4F5 . 75 11 JNZ SHORT Girder.005CB508

Ставим на него бряк, перезапускаем прогу и восстанавливаем импорт как раньше. Только вместо окна с ошибкой о импорте брякаемся на 5CB4F5. Смотрим что стоит ниже: Jump is taken. Теперь нажимаем пробел, вводим nop. Осталось только дойти до ОЕП и сдампить.

Только мучится если можно сделать раз в 20 легче и быстрее.



Ранг: 28.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 26 декабря 2005 19:22
· Личное сообщение · #25

rep0A пишет:
Только мучится если можно сделать раз в 20 легче и быстрее

А я уже сделал по тутору от NIKOLA (кстати, NIKOLA, респект тебе за тутор, отлично всё изложил). Только ненужные секции пока выкидывать не пробовал (попробую обязательно). Теперь хочу с другим методом разобраться. Ведь легче разбираться, когда проводишь аналогии типа: "...ага, в этом методе мы это сделали вот так, а здесь добились того же самого вот так...". ИМХО, так материал лучше усваивается.




Ранг: 500.6 (!), 7thx
Активность: 0.260
Статус: Участник

Создано: 26 декабря 2005 19:50
· Личное сообщение · #26

Mario555 пишет:
лучше сразу читать эту иат импреком


Согласен.

rep0A

Есть желание заинлайнить гирдера?



Ранг: 88.0 (постоянный)
Активность: 0.070
Статус: Участник

Создано: 26 декабря 2005 21:17
· Личное сообщение · #27

NIKOLA
Конечно. Сейчас пробовал... Если убираю наг, то вылезает ошибка что типа вирус. Если и ошибку убираю, то вылезает ещё одна. Вообщем запутался сильно.

Если знаешь как инлайнить, то напиши. Буду очень рад.




Ранг: 500.6 (!), 7thx
Активность: 0.260
Статус: Участник

Создано: 26 декабря 2005 21:24
· Личное сообщение · #28

rep0A

Ты по туторам делаеш?



Ранг: 88.0 (постоянный)
Активность: 0.070
Статус: Участник

Создано: 26 декабря 2005 21:42 · Поправил: rep0A
· Личное сообщение · #29

NIKOLA

Пока нет. На инглише я не очень гут шпрехаю, поэтому читаю их туторы в последнюю очередь. Может есть русские туторы?




Ранг: 500.6 (!), 7thx
Активность: 0.260
Статус: Участник

Создано: 27 декабря 2005 00:21
· Личное сообщение · #30

rep0A пишет:
Может есть русские туторы?


Нету, а я тибе хотел на испанском предложить.



Ранг: 28.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 30 декабря 2005 00:13
· Личное сообщение · #31

Сколько ни мучался, размер полученного exe-файла получается не таким, как у других (после дампа нормально, а после импорта: 3 371 008 байт). Главное, что размер отличается в МЕНЬШУЮ сторону на 4 кБ. Не знаю, чем объясняется. Может, функций каких-то нет в импорте или ещё чего-нибудь?


<< . 1 . 2 . 3 . 4 . >>
 eXeL@B —› Основной форум —› Исследование Girder 3.3.10
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати