| Посл.ответ | 
Сообщение | 
 Ранг: 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. Надо ждать автора   
  | Сообщение посчитали полезным:   |