Посл.ответ |
Сообщение |
Ранг: 1.8 (гость) Активность: 0=0 Статус: Участник
|
Создано: 20 февраля 2007 23:39 · Личное сообщение · #1
вопрос в том что олли не показывает откуда вызвалась
0044FE58 / 55 PUSH EBP
0044FE59 |. 8BEC MOV EBP,ESP
0044FE5B |. 83C4 E0 ADD ESP,-20
0044FE5E |. 53 PUSH EBX
0044FE5F |. 56 PUSH ESI
0044FE60 |. 33D2 XOR EDX,EDX
0044FE62 |. 8955 E0 MOV DWORD PTR SS:[EBP-20],EDX
0044FE65 |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
0044FE68 |. BB D8275500 MOV EBX,DNIPRO~2.005527D8
0044FE6D |. 33C0 XOR EAX,EAX
0044FE6F |. 55 PUSH EBP
0044FE70 |. 68 E8004500 PUSH DNIPRO~2.004500E8
0044FE75 |. 64:FF30 PUSH DWORD PTR FS:[EAX]
0044FE78 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
0044FE7B |. E8 2433FEFF CALL DNIPRO~2.004331A4
0044FE80 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0044FE83 |. 8078 47 00 CMP BYTE PTR DS:[EAX+47],0
0044FE87 |. 75 24 JNZ SHORT DNIPRO~2.0044FEAD
0044FE89 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0044FE8C |. 8B10 MOV EDX,DWORD PTR DS:[EAX]
0044FE8E |. FF52 4C CALL DWORD PTR DS:[EDX+4C]
0044FE91 |. 84C0 TEST AL,AL
0044FE93 |. 74 18 JE SHORT DNIPRO~2.0044FEAD
0044FE95 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0044FE98 |. F680 CC020000 >TEST BYTE PTR DS:[EAX+2CC],8
0044FE9F |. 75 0C JNZ SHORT DNIPRO~2.0044FEAD
0044FEA1 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0044FEA4 |. 80B8 17020000 >CMP BYTE PTR DS:[EAX+217],1
0044FEAB |. 75 21 JNZ SHORT DNIPRO~2.0044FECE
0044FEAD |> 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20]
0044FEB0 |. A1 E4185500 MOV EAX,DWORD PTR DS:[5518E4]
0044FEB5 |. E8 526DFBFF CALL DNIPRO~2.00406C0C
0044FEBA |. 8B4D E0 MOV ECX,DWORD PTR SS:[EBP-20]
0044FEBD |. B2 01 MOV DL,1
0044FEBF |. A1 F80A4100 MOV EAX,DWORD PTR DS:[410AF8]
0044FEC4 |. E8 57D1FBFF CALL DNIPRO~2.0040D020
0044FEC9 |. E8 AE3BFBFF CALL DNIPRO~2.00403A7C
0044FECE |> E8 2D83FBFF CALL <JMP.&user32.GetCapture> ; [GetCapture
0044FED3 |. 85C0 TEST EAX,EAX
0044FED5 74 11 JE SHORT DNIPRO~2.0044FEE8
0044FED7 |. 6A 00 PUSH 0 ; /lParam = 0
0044FED9 |. 6A 00 PUSH 0 ; |wParam = 0
0044FEDB |. 6A 1F PUSH 1F ; |Message = WM_CANCELMODE
0044FEDD |. E8 1E83FBFF CALL <JMP.&user32.GetCapture> ; |[GetCapture
0044FEE2 |. 50 PUSH EAX ; |hWnd
0044FEE3 |. E8 1086FBFF CALL <JMP.&user32.SendMessageA> ; SendMessageA
0044FEE8 |> E8 CB85FBFF CALL <JMP.&user32.ReleaseCapture> ; [ReleaseCapture
0044FEED |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0044FEF0 |. 8088 CC020000 >OR BYTE PTR DS:[EAX+2CC],8
0044FEF7 |. E8 FC82FBFF CALL <JMP.&user32.GetActiveWindow> ; [GetActiveWindow
0044FEFC |. 8945 E4 MOV DWORD PTR SS:[EBP-1C],EAX
0044FEFF |. A1 20FA5400 MOV EAX,DWORD PTR DS:[54FA20]
0044FF04 |. 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX
0044FF07 |. A1 DC275500 MOV EAX,DWORD PTR DS:[5527DC]
0044FF0C |. 8B48 6C MOV ECX,DWORD PTR DS:[EAX+6C]
0044FF0F |. A1 DC275500 MOV EAX,DWORD PTR DS:[5527DC]
0044FF14 |. 8B40 70 MOV EAX,DWORD PTR DS:[EAX+70]
0044FF17 |. 33D2 XOR EDX,EDX
0044FF19 |. E8 2629FCFF CALL DNIPRO~2.00412844
0044FF1E |. A1 DC275500 MOV EAX,DWORD PTR DS:[5527DC]
0044FF23 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
0044FF26 |. 8950 6C MOV DWORD PTR DS:[EAX+6C],EDX
0044FF29 |. A1 DC275500 MOV EAX,DWORD PTR DS:[5527DC]
0044FF2E |. 66:8B40 38 MOV AX,WORD PTR DS:[EAX+38]
0044FF32 |. 66:8945 EE MOV WORD PTR SS:[EBP-12],AX
0044FF36 |. 33D2 XOR EDX,EDX
0044FF38 |. A1 DC275500 MOV EAX,DWORD PTR DS:[5527DC]
0044FF3D |. E8 0E180000 CALL DNIPRO~2.00451750
0044FF42 |. A1 DC275500 MOV EAX,DWORD PTR DS:[5527DC]
0044FF47 |. 8B40 3C MOV EAX,DWORD PTR DS:[EAX+3C]
0044FF4A |. 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX
0044FF4D |. 33C0 XOR EAX,EAX
0044FF4F |. E8 B8A4FFFF CALL DNIPRO~2.0044A40C
0044FF54 |. 8945 F4 MOV DWORD PTR SS:[EBP-C],EAX
0044FF57 |. 33D2 XOR EDX,EDX
0044FF59 |. 55 PUSH EBP
0044FF5A |. 68 C8004500 PUSH DNIPRO~2.004500C8
0044FF5F |. 64:FF32 PUSH DWORD PTR FS:[EDX]
0044FF62 |. 64:8922 MOV DWORD PTR FS:[EDX],ESP
0044FF65 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0044FF68 |. E8 3BFEFFFF CALL DNIPRO~2.0044FDA8
0044FF6D |. 33D2 XOR EDX,EDX
0044FF6F |. 55 PUSH EBP
0044FF70 |. 68 27004500 PUSH DNIPRO~2.00450027
0044FF75 |. 64:FF32 PUSH DWORD PTR FS:[EDX]
0044FF78 |. 64:8922 MOV DWORD PTR FS:[EDX],ESP
0044FF7B |. 6A 00 PUSH 0
0044FF7D |. 6A 00 PUSH 0
0044FF7F |. 68 00B00000 PUSH 0B000
0044FF84 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0044FF87 |. E8 B4AAFEFF CALL DNIPRO~2.0043AA40
0044FF8C |. 50 PUSH EAX ; |hWnd
0044FF8D |. E8 6685FBFF CALL <JMP.&user32.SendMessageA> ; SendMessageA
0044FF92 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0044FF95 |. 33D2 XOR EDX,EDX
0044FF97 |. 8990 34020000 MOV DWORD PTR DS:[EAX+234],EDX
0044FF9D |> 8B03 /MOV EAX,DWORD PTR DS:[EBX]
0044FF9F |. E8 AC330000 |CALL DNIPRO~2.00453350
0044FFA4 |. 8B03 |MOV EAX,DWORD PTR DS:[EBX]
0044FFA6 |. 80B8 8C000000 >|CMP BYTE PTR DS:[EAX+8C],0
0044FFAD |. 74 0F |JE SHORT DNIPRO~2.0044FFBE
0044FFAF |. 8B45 FC |MOV EAX,DWORD PTR SS:[EBP-4]
0044FFB2 |. C780 34020000 >|MOV DWORD PTR DS:[EAX+234],2
0044FFBC |. EB 14 |JMP SHORT DNIPRO~2.0044FFD2
0044FFBE |> 8B45 FC |MOV EAX,DWORD PTR SS:[EBP-4]
0044FFC1 |. 83B8 34020000 >|CMP DWORD PTR DS:[EAX+234],0
0044FFC8 |. 74 08 |JE SHORT DNIPRO~2.0044FFD2
0044FFCA |. 8B45 FC |MOV EAX,DWORD PTR SS:[EBP-4]
0044FFCD |. E8 26FDFFFF |CALL DNIPRO~2.0044FCF8
0044FFD2 |> 8B45 FC |MOV EAX,DWORD PTR SS:[EBP-4]
0044FFD5 |. 8B80 34020000 |MOV EAX,DWORD PTR DS:[EAX+234]
0044FFDB |. 85C0 |TEST EAX,EAX
0044FFDD |.^74 BE JE SHORT DNIPRO~2.0044FF9D
0044FFDF |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
0044FFE2 |. 6A 00 PUSH 0
0044FFE4 |. 6A 00 PUSH 0
0044FFE6 |. 68 01B00000 PUSH 0B001
0044FFEB |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0044FFEE |. E8 4DAAFEFF CALL DNIPRO~2.0043AA40
0044FFF3 |. 50 PUSH EAX ; |hWnd
0044FFF4 |. E8 FF84FBFF CALL <JMP.&user32.SendMessageA> ; SendMessageA
0044FFF9 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0044FFFC |. E8 3FAAFEFF CALL DNIPRO~2.0043AA40
00450001 |. 8BD8 MOV EBX,EAX
00450003 |. E8 F081FBFF CALL <JMP.&user32.GetActiveWindow> ; [GetActiveWindow
00450008 |. 3BD8 CMP EBX,EAX
0045000A |. 74 05 JE SHORT DNIPRO~2.00450011
0045000C |. 33C0 XOR EAX,EAX
0045000E |. 8945 E4 MOV DWORD PTR SS:[EBP-1C],EAX
00450011 |> 33C0 XOR EAX,EAX
00450013 |. 5A POP EDX
00450014 |. 59 POP ECX
00450015 |. 59 POP ECX
00450016 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
00450019 |. 68 2E004500 PUSH DNIPRO~2.0045002E
0045001E |> 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00450021 |. E8 7AFDFFFF CALL DNIPRO~2.0044FDA0
00450026 . C3 RETN
жму ctrl-r на выделеной строчке
00448FDC DD DNIPRO~2.0044FE58
004492C0 DD DNIPRO~2.0044FE58
00449F58 DD DNIPRO~2.0044FE58
0044FE58 PUSH EBP (Initial CPU selection)
00464D74 DD DNIPRO~2.0044FE58
004684F8 DD DNIPRO~2.0044FE58
004AF054 DD DNIPRO~2.0044FE58
004FE51C DD DNIPRO~2.0044FE58
00523404 DD DNIPRO~2.0044FE58
00524D08 DD DNIPRO~2.0044FE58
0052515C DD DNIPRO~2.0044FE58
0052C804 DD DNIPRO~2.0044FE58
0052CD20 DD DNIPRO~2.0044FE58
005381DC DD DNIPRO~2.0044FE58
0053B054 DD DNIPRO~2.0044FE58
00540900 DD DNIPRO~2.0044FE58
00540BB0 DD DNIPRO~2.0044FE58
0054CFCC DD DNIPRO~2.0044FE58
а там нету CALL-ов, как в таком случае можно отследить ОТКУДА вызвалась процедура
| Сообщение посчитали полезным: |
|
 Ранг: 240.5 (наставник) Активность: 0.19↘0 Статус: Участник Author of ACKiller
|
Создано: 20 февраля 2007 23:51 · Личное сообщение · #2
Feldsher пишет:
ОТКУДА вызвалась процедура
Смотришь в стек.
Адрес может и не быть известен для дизассемблера, если, например, метод виртуальный - цепочка вызовов не известна до времени вызова. Но в этом-то и преимущество отладчика, что можно внаглую подсмотреть адрес
| Сообщение посчитали полезным: |
 Ранг: 120.9 (ветеран), 5thx Активность: 0.08↘0 Статус: Участник Programmer and reverser
|
Создано: 20 февраля 2007 23:55 · Поправил: Executioner · Личное сообщение · #3
можно еще попробовать пройти до RET, нажать F8 (для выхода из процедуры) и посмотреть, что было инструкцией выше
----- Уважайте других и пишите грамотно. | Сообщение посчитали полезным: |
Ранг: 495.3 (мудрец) Активность: 0.3↘0 Статус: Участник
|
Создано: 21 февраля 2007 01:09 · Личное сообщение · #4
Бывает такая ситуация в защите:
Вызывающий чистит стек делает jmp на некую функцию, но тогда из этой процедуры уже не будет возврата.
В крайнем случае, можно трейсом отследить.
----- Всем привет, я вернулся | Сообщение посчитали полезным: |
 Ранг: 240.5 (наставник) Активность: 0.19↘0 Статус: Участник Author of ACKiller
|
Создано: 21 февраля 2007 01:25 · Личное сообщение · #5
Bitfry
Ну в данном случае понятно, что это функция с возвратом:
Feldsher пишет:
044FE58 / 55 PUSH EBP
0044FE59 |. 8BEC MOV EBP,ESP
0044FE5B |. 83C4 E0 ADD ESP,-20
Видно, что это построено компилятором, а не вручную, а компилер, думаю, не будет сохранять старое ebp, если оно никому не нужно. Ну и безвозвратных ф-й у известных языков я что-то не припомню..
| Сообщение посчитали полезным: |
Ранг: 495.3 (мудрец) Активность: 0.3↘0 Статус: Участник
|
Создано: 21 февраля 2007 08:59 · Личное сообщение · #6
HoBleen, скорее всего для данной ситуации ответ ты уже дал:
Смотришь в стек.
Но для повышения квалификации я добавил, как ещё может быть.
HoBleen пишет:
Видно, что это построено компилятором, а не вручную, а компилер, думаю, не будет сохранять старое ebp, если оно никому не нужно. Ну и безвозвратных ф-й у известных языков я что-то не припомню..
В любую из процедур можно вбахать ExitProcess или ExitThread или jmp на систему или ret после чистки стека и т.п.
ИМХО сложностей с этим не возникнет даже на бейсике =)... Хотя врать не буду, сам только на Асме пишу.
----- Всем привет, я вернулся | Сообщение посчитали полезным: |
 Ранг: 240.5 (наставник) Активность: 0.19↘0 Статус: Участник Author of ACKiller
|
Создано: 21 февраля 2007 09:28 · Личное сообщение · #7
Bitfry пишет:
В любую из процедур можно вбахать ExitProcess или ExitThread или jmp на систему или ret после чистки стека и т.п.
Компилер полюбому сохранит адрес возврата в стеке => его можно будет узнать даже если ты оттуда потом ускачешь на самовпиханных jmp'ах.
Такое может быть в протах, где вначале после колла идет мусор, а в колле адрес возврата подменяется на настоящий код.
ЗЫ Просто я говорил про данный случай, а так конечно да)
| Сообщение посчитали полезным: |
 Ранг: 115.8 (ветеран) Активность: 0.08↘0 Статус: Участник
|
Создано: 21 февраля 2007 11:01 · Личное сообщение · #8
Feldsher пишет:
а там нету CALL-ов
сталкивался недавно с подобным в СИ'шной проге
встаешь на любую строчку (005381DC DD DNIPRO~2.0044FE58 ) и еще раз ctrl+R и видишь свои CALL'ы.
по крайней мере у меня прокатывало.
----- Ни одно доброе дело не должно остаться безнаказанным !!! | Сообщение посчитали полезным: |
Ранг: 310.8 (мудрец), 29thx Активность: 0.43↘0 Статус: Участник
|
Создано: 22 февраля 2007 00:14 · Личное сообщение · #9
[EXE]_cutor пишет:
встаешь на любую строчку (005381DC DD DNIPRO~2.0044FE58 )
Наличие много раз продублированных адресов подозрительно - компилятор прооптимизировал бы, наверное. Не исключено, что все-таки прот, который навесил на каждый вызов мусор, а адрес спрятал.
| Сообщение посчитали полезным: |
Ранг: 495.3 (мудрец) Активность: 0.3↘0 Статус: Участник
|
Создано: 22 февраля 2007 04:42 · Поправил: Bitfry · Личное сообщение · #10
HoBleen пишет:
Компилер полюбому сохранит адрес возврата в стеке => его можно будет узнать даже если ты оттуда потом ускачешь на самовпиханных jmp'ах.
Чисто теоретически.
Представь себе, что перед вызовом кода, который представлен здесь, в исходнике стоит что-то вроде этого:
asm
mov ECX,ESP
sub ECX,[начальное состояние стека]
@@loop
mov DWORD PTR [ESP],0
ADD ESP,-4
ADD ECX,-4
jnz @@loop
jmp _0044FE58
end;
(это грубо, но суть должна быть ясна)
А здесь для отвода глаз (и возможно финализации) твориться куча всякой ерунды и потом где-нибудь в 0043AA40 просто jmp ExitProcess.
----- Всем привет, я вернулся | Сообщение посчитали полезным: |
Ранг: 310.8 (мудрец), 29thx Активность: 0.43↘0 Статус: Участник
|
Создано: 23 февраля 2007 07:56 · Личное сообщение · #11
Bitfry пишет:
jmp _0044FE58
Bitfry пишет:
Чисто теоретически.
Только теоретически. Там DD DNIPRO~2.0044FE58 , нет никаких JMP
Поэтому скорее, там
MOV EAX, dword prt [00448FDC]
CALL EAX
Либо там прот, который "замазал" CALL в DD. Надо ждать автора
| Сообщение посчитали полезным: |