2015-04-03 110 views
4

我在分析IDA Pro中的簡單二進制文件時遇到問題。分析從IDA Pro中的內存轉儲中獲取的二進制文件

運行程序時,我使用WinDbg將其部分內存(例如,內存中未解壓縮的代碼段)轉儲到文件中。

我想用IDA分析它,但是當試圖加載二進制文件時 - 它只會顯示其原始數據。

當然,這個二進制文件並不是一個完整的PE文件,所以我並不期望深入分析,只是一種更好的方式來閱讀反彙編。

所以問題是 - 我如何讓IDA反彙編二進制文件?

謝謝! :)

回答

5

選擇一個合適的地址,然後按c即MakeCode(Ea); IDA將原始字節轉換成代碼和拆解

粘貼下面是一個簡單的自動化與IDC腳本,但IDAS自動化恕我直言欠佳,所以你應該在用戶界面的C手動按下堅持

:dir /b 
foo.dmp 
foo.idc  
:xxd foo.dmp 
0000000: 6a10 6830 b780 7ce8 d86d ffff 8365 fc00 j.h0..|..m...e.. 
0000010: 64a1 1800 0000 8945 e081 7810 001e 0000 d......E..x..... 
0000020: 750f 803d 0850 887c 0075 06ff 15f8 1280 u..=.P.|.u...... 
0000030: 7cff 750c ff55 0850 e8c9 0900 00   |.u..U.P.....  
:type foo.idc 
#include <idc.idc> 
static main (void) { 
     auto len,temp,fhand; 
     len = -1; temp = 0; 
     while (temp < 0x3d && len != 0) { 
       len = MakeCode(temp); 
       temp = temp+len; 
     } 
     fhand = fopen("foo.asm","wb"); 
     GenerateFile(OFILE_LST,fhand,0,0x3d,0x1F); 
     fclose(fhand); 
     Wait(); 
     Exit(0); 
} 
:f:\IDA_FRE_5\idag.exe -c -B -S.\foo.idc foo.dmp 

:head -n 30 foo.asm | tail 
seg000:00000000 ; Segment type: Pure code 
seg000:00000000 seg000   segment byte public 'CODE' use32 
seg000:00000000     assume cs:seg000 
seg000:00000000 assume es:nothing, ss:nothing, ds:nothing, fs:no thing, gs:nothing 
seg000:00000000     push 10h 
seg000:00000002     push 7C80B730h 
seg000:00000007     call near ptr 0FFFF6DE4h 
seg000:0000000C     and  dword ptr [ebp-4], 0 

使用WinDbg,你可以從命令行這樣

拆卸右:CDB -c 「?.dvalloc/b 6000 2000; .readmem foo.dmp60001000升0n61;ü60001000 60001040; q」 計算

0:000> cdb: Reading initial command '.dvalloc /b 60000000 2000;.readmem foo.dmp 60001000 l?0n61;u 60001000 60001040;q' 
Allocated 2000 bytes starting at 60000000 
Reading 3d bytes. 
60001000 6a10   push 10h 
60001002 6830b7807c  push offset kernel32!`string'+0x88 (7c80b730) 
60001007 e8d86dffff  call 5fff7de4 
6000100c 8365fc00  and  dword ptr [ebp-4],0 
60001010 64a118000000 mov  eax,dword ptr fs:[00000018h] 
60001016 8945e0   mov  dword ptr [ebp-20h],eax 
60001019 817810001e0000 cmp  dword ptr [eax+10h],1E00h 
60001020 750f   jne  60001031 
60001022 803d0850887c00 cmp  byte ptr [kernel32!BaseRunningInServerProcess (7c885008)],0 
60001029 7506   jne  60001031 
6000102b ff15f812807c call dword ptr [kernel32!_imp__CsrNewThread (7c8012f8)] 
60001031 ff750c   push dword ptr [ebp+0Ch] 
60001034 ff5508   call dword ptr [ebp+8] 
60001037 50    push eax 
60001038 e8c9090000  call 60001a06 
6000103d 0000   add  byte ptr [eax],al 
6000103f 0000   add  byte ptr [eax],al 
quit: 

OllyDbg的1.10視圖 - >文件 - >(掩蓋任何文件) - > foo.dmp - >右擊 - >拆卸

+0

謝謝!不能相信它是 - 很容易^^「 – woottoow 2015-04-04 19:45:28

+0

我已經更新了答案,並提供了有關如何在windbg/ollydbg中反彙編任意字節的信息,並將答案標記爲已回答,如果您覺得已經回答 – blabb 2015-04-04 21:00:40

相關問題