Сейчас на форуме: tyns777, zds (+3 невидимых)

 eXeL@B —› Программирование —› Несоответсвие между кодом программы в FASM и кодом в OllyDbg
Посл.ответ Сообщение

Ранг: 5.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 31 октября 2009 15:28 · Поправил: Corsag21
· Личное сообщение · #1

Здравствуйте. У меня проблема. Пишу программу и в отладчике увидел несоответсвие между кодом программы в FASM и кодом в OllyDbg

Код в FASM
Code:
  1. format pe gui 4.0
  2. entry start
  3. include 'win32ax.inc'
  4.  
  5. section '.data' data readable writeable
  6. hProc       dd ?
  7. PID         dd ?
  8. numberRead  dd ?
  9. hWnd        dd ?
  10. len         dd 0xFF
  11. ipBase      dd ?
  12. ipBuf       dd ?
  13.  
  14. ent equ 006e587fh
  15. PROCESS_VM_READ equ 0010
  16.  
  17. section '.code' code readable executable
  18. start:
  19. invoke FindWindow,'MraWClass',NULL
  20. mov [hWnd],eax
  21. invoke GetWindowThreadProcessId,[hWnd],PID
  22. invoke OpenProcess,\
  23.                 PROCESS_VM_READ,\  ; __in DWORD dwDesiredAccess PROCESS_VM_READ (0x0010)
  24.                 FALSE,\            ; __in BOOL bInheritHandle
  25.                 [PID]              ; __in DWORD dwProcessId
  26. mov [hProc],eax
  27. ;cmp eax,0
  28. ;je error
  29. invoke    GlobalAlloc,GMEM_MOVEABLE or GMEM_ZEROINIT,len
  30. mov [ipBuf],eax
  31. mov [ipBase],ent
  32. invoke ReadProcessMemory,[hProc],[ipBase],[ipBuf],len,numberRead
  33. invoke CloseHandle,[hProc]
  34. ;jmp finish
  35.  
  36. ;error:
  37. ;invoke MessageBox,NULL,'Error','Error',NULL
  38. ;invoke ExitProcess,0
  39.  
  40. ;finish:
  41. ;invoke MessageBox,NULL,ipBuf,ipBuf,NULL
  42. invoke ExitProcess,0
  43.  
  44. section '.idata' import data readable writeable
  45. library kernel32, 'KERNEL32.DLL',\
  46.         user32,   'USER32.DLL'
  47.  
  48. import kernel32,\
  49.        ExitProcess, 'ExitProcess',\
  50.        OpenProcess, 'OpenProcess',\
  51.        GlobalAlloc, 'GlobalAlloc',\
  52.        ReadProcessMemory, 'ReadProcessMemory',\
  53.        CloseHandle, 'CloseHandle'
  54.  
  55. import user32,\
  56.        FindWindow, 'FindWindowA',\
  57.        GetWindowThreadProcessId, 'GetWindowThreadProcessId',\
  58.        MessageBox, 'MessageBoxA'


А вот листинг из отладчика OllyDbg
Code:
  1. 00402000 > $  6A 00         PUSH 0
  2. 00402002   .  E8 0A000000   CALL mra_hack.00402011
  3. 00402007   .  4D            DEC EBP
  4. 00402008   .  72 61         JB SHORT mra_hack.0040206B
  5. 0040200A   .  57            PUSH EDI
  6. 0040200B   .  43            INC EBX
  7. 0040200C   .  6C            INS BYTE PTR ES:[EDI],DX                 ; I/O command
  8. 0040200D   .  61            POPAD
  9. 0040200E   .  73 73         JNB SHORT mra_hack.00402083
  10. 00402010      00            DB 00
  11. 00402011   .  FF15 DE304000 CALL DWORD PTR DS:[<&USER32.FindWindowA>>; \FindWindowA
  12. 00402017   .  A3 0C104000   MOV DWORD PTR DS:[40100C],EAX
  13. 0040201C   .  68 04104000   PUSH mra_hack.00401004                   ; /pProcessID = mra_hack.00401004
  14. 00402021   .  FF35 0C104000 PUSH DWORD PTR DS:[40100C]               ; |hWnd = 00040550 ('orsagosh93@mail.ru',class='MraWClass')
  15. 00402027   .  FF15 E2304000 CALL DWORD PTR DS:[<&USER32.GetWindowThr>; \GetWindowThreadProcessId
  16. 0040202D   .  FF35 04104000 PUSH DWORD PTR DS:[401004]               ; /ProcessId = DB4
  17. 00402033   .  6A 00         PUSH 0                                   ; |Inheritable = FALSE
  18. 00402035   .  6A 0A         PUSH 0A                                  ; |Access = CREATE_THREAD|VM_OPERATION
  19. 00402037   .  FF15 72304000 CALL DWORD PTR DS:[<&KERNEL32.OpenProces>; \OpenProcess
  20. 0040203D   .  A3 00104000   MOV DWORD PTR DS:[401000],EAX
  21. 00402042   .  68 10104000   PUSH mra_hack.00401010                   ; /MemSize = 401010 (4198416.)
  22. 00402047   .  6A 42         PUSH 42                                  ; |Flags = GHND
  23. 00402049   .  FF15 76304000 CALL DWORD PTR DS:[<&KERNEL32.GlobalAllo>; \GlobalAlloc
  24. 0040204F   .  A3 18104000   MOV DWORD PTR DS:[401018],EAX
  25. 00402054   .  C705 14104000>MOV DWORD PTR DS:[401014],6E587F
  26. 0040205E   .  68 08104000   PUSH mra_hack.00401008
  27. 00402063   .  68 10104000   PUSH mra_hack.00401010
  28. 00402068      FF            DB FF
  29. 00402069      35            DB 35                                    ; CHAR '5'
  30. 0040206A      18104000      DD mra_hack.00401018
  31. 0040206E   .  FF35 14104000 PUSH DWORD PTR DS:[401014]               ; |pBaseAddress = 6E587F
  32. 00402074   .  FF35 00104000 PUSH DWORD PTR DS:[401000]               ; |hProcess = 00000028
  33. 0040207A   .  FF15 7A304000 CALL DWORD PTR DS:[<&KERNEL32.ReadProces>; \ReadProcessMemory
  34. 00402080      FF            DB FF
  35. 00402081      35            DB 35                                    ; CHAR '5'
  36. 00402082      00104000      DD mra_hack.00401000
  37. 00402086   .  FF15 7E304000 CALL DWORD PTR DS:[<&KERNEL32.CloseHandl>; \CloseHandle
  38. 0040208C   .  6A 00         PUSH 0                                   ; /ExitCode = 0
  39. 0040208E   .  FF15 6E304000 CALL DWORD PTR DS:[<&KERNEL32.ExitProces>; \ExitProcess
  40.  


Почему после ReadProcessMemory идет
00402080 FF DB FF
00402081 35 DB 35 ; CHAR '5'

Если я правильно понимаю, то "DB" - это данные. Откуда они беруся в местах, где я их не писал?



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

Создано: 31 октября 2009 15:34
· Личное сообщение · #2

OllyDbg криво анализовал опкод PUSH.
Как правило: PUSH DWORD PTR DS:[401014] в машинном коде так: FF35 14104000
Так вот ОллиДбг во время анализа почему-то считал опкод PUSH DWORD PTR DS:[401000] как DB FF, DB 35 и DD 401000.

А какая версия самого отладчика?



Ранг: 281.8 (наставник), 272thx
Активность: 0.250.01
Статус: Участник
Destroyer of protectors

Создано: 31 октября 2009 15:42
· Личное сообщение · #3

Там олька не прально проанализировала, там идёт команда:

00402068 FF35 18104000 PUSH DWORD PTR DS:[401018]

Corsag21 пишет:
Откуда они беруся в местах, где я их не писал?

Как эт не писал? А кто ReadProcessMemory вызывал? Залезь в MSDN и узнаешь, что при использовании этой функи передаётся 5 параметров:

Code:
  1. BOOL WINAPI ReadProcessMemory(
  2.   __in   HANDLE hProcess,
  3.   __in   LPCVOID lpBaseAddress,
  4.   __out  LPVOID lpBuffer,
  5.   __in   SIZE_T nSize,
  6.   __out  SIZE_T *lpNumberOfBytesRead
  7. );


И у тя тоже так же:
0040205E . 68 08104000 PUSH mra_hack.00401008
00402063 . 68 10104000 PUSH mra_hack.00401010
00402068 FF35 18104000 PUSH DWORD PTR DS:[401018]
0040206E . FF35 14104000 PUSH DWORD PTR DS:[401014]
00402074 . FF35 00104000 PUSH DWORD PTR DS:[401000]
//Ну вот, а теперь вызываем функу
0040207A . FF15 7A304000 CALL DWORD PTR DS:[<&KERNEL32.ReadProces>]



Ранг: 5.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 31 октября 2009 16:26 · Поправил: Corsag21
· Личное сообщение · #4

OllyDbg v 1.10

Спасибо. Теперь понятно, что это отладчик направильно опкод распознал. А то я думал, что fasm криво скомпилировал.

Опа. В отладчике сделал right_click->Analysis->During next analysis, treat selection as->doubleword. И снова Analyse code. Все встало как надо.




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 02 ноября 2009 01:13
· Личное сообщение · #5

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

-----
EnJoy!




Ранг: 5.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 ноября 2009 06:45
· Личное сообщение · #6

Понятно. По теме вопросов больше нет. Можно закрывать тему


 eXeL@B —› Программирование —› Несоответсвие между кодом программы в FASM и кодом в OllyDbg
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати