IDA+OD双剑合璧=逆向无敌
生活随笔
收集整理的這篇文章主要介紹了
IDA+OD双剑合璧=逆向无敌
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
標 題:
【原創】IDA+OD雙劍合璧=逆向無敵
作 者: Tennn
時 間: 2015-12-12,22:25:19
鏈 接: http://bbs.pediy.com/showthread.php?t=206437
我這一周學<軟件逆向>是薛老師講課,?大多挺深,我就列出一個典型的吧。?
準備工具:?ollydbg??ida???vs2012??
---------------------------------
我們先把目標程序winasm_0.exe拖入peid?
主界面
那我們去輸入表看看
也好像沒什么特別值得關注的。
、那好?簡單測試下程序???看有什么狀況發生?
看?彈出對話框?那我們該想到什么?API斷點!messagebox相關!
不急我們把它拖入OD??直接ctrl+A分析
入口點:
習慣性的我把它上下一翻、發現:
這不是我們要找的字符串嗎?(
PS:
如果我沒翻到?步驟應該會是:搜索字符串 下API斷點 其它... )
我們截取關鍵代碼分析:
代碼: CPU?Disasm 地址????????十六進制數據????????????指令???????????????????????????????????????Profile??Comments獲取輸入內容 00401066??|.??E8?BF000000???CALL?<JMP.&USER32.GetDlgItemTextA>???????;???????????\USER32.GetDlgItemTextA 0040106B??????A3?13114000???MOV?DWORD?PTR?DS:[401113],EAX????????????;???????????MOV?DWORD?PTR?DS:[401113],EAX 比較eax 00401070??|.??83F8?05???????CMP?EAX,5????????????????????????????????; 00401073??|.??75?13?????????JNE?SHORT?00401088???????????????????????; 比較?fubar? 00401075??|.??BE?2A334000???MOV?ESI,OFFSET?0040332A??????????????????; 0040107A??|.??BF?41304000???MOV?EDI,OFFSET?00403041??????????????????;???????????ASCII?"fubar" 0040107F??|.??B9?06000000???MOV?ECX,6????????????????????????????????; 00401084??|.??F3:A6?????????REPE?CMPS?BYTE?PTR?DS:[ESI],BYTE?PTR?ES:?;??????????? 看ZF標志以決定轉移與否 00401086??|.??74?19?????????JE?SHORT?004010A1????????????????????????; 00401088??|>??6A?00?????????PUSH?0???????????????????????????????????;???????????/Type?=?MB_OK|MB_DEFBUTTON1|MB_APPLMODAL 0040108A??|.??68?1F334000???PUSH?OFFSET?0040331F?????????????????????;???????????|Caption?=?"?try?again" 0040108F??|.??68?0F334000???PUSH?OFFSET?0040330F?????????????????????;???????????|Text?=?"no,?not?really." 00401094??|.??6A?00?????????PUSH?0???????????????????????????????????;???????????|hOwner?=?NULL 00401096??|.??E8?95000000???CALL?<JMP.&USER32.MessageBoxA>???????????;???????????\USER32.MessageBoxA 0040109B??|.??33C0??????????XOR?EAX,EAX??????????????????????????????; 0040109D??|.??C9????????????LEAVE????????????????????????????????????; 0040109E??|.??C2?1000???????RETN?10??????????????????????????????????; 那好?我們暫且就這樣分析?在地址 00401066?處F2斷點???F9運行!
那此時肯定會彈出對話框??我們隨便輸入點什么?以”15PB“為例??再點擊 check!
會在剛剛所設斷點處停下來:
F8單步走走試試?
首先肯定是獲取我們輸入的字符” 15PB“而后?繼續F8單步?會發現?下不去了?!!
左下角有提示?:” 訪問沖突?正在寫入到[00401113]....去跳過異常程序“
首先?根據提示?我們就可以判斷” 內存訪問異常“(這個沒有標準?按逆向經驗及知識面有各自的判斷 )
好辦?!暴力破解,這個個人最喜歡了?不費腦子!
左鍵選中
代碼: CPU?Disasm 地址????????十六進制數據????????????指令???????????????????????????????????????Profile??Comments 0040106B??????A3?13114000???MOV?DWORD?PTR?DS:[401113],EAX????????????;???????????MOV?DWORD?PTR?DS:[401113],EAX左鍵單擊選中-右鍵-編輯-填充為NOP(有些OD可以直接DEL)?? 左鍵單擊選中-右鍵-復制所有修改到可執行文件-”忽視所有警告“ 在所彈出窗口-右鍵-保存文件-確定-重名為”1“(保存在桌面)
我們再點擊”1.exe“,再次輸入”15pb“??點擊check!
依然出錯!?
為什么?
我們再重復?拖入OD:
附件 101838
我們看紅色選中框.這時估計就會有人提問了?上面不就有嗎?為什么留在這兒說?故意充版面??
不不不!?一步一步來??我這篇逆向文章面向大部分人(普通人)??大牛們當然可以一眼定乾坤!
普通人可不一樣?所以?我得一點一點來?敘述要通俗易懂?盡量營造出菜鳥思維
如果我直接這樣~這樣~這樣~這樣!再這樣~那還寫什么啊
廢話不多說?我們分析代碼:
代碼: CPU?Disasm 地址????????十六進制數據????????????指令???????????????????????????????????????Profile??Comments eax與5相比較? 00401070????83F8?05?????????CMP?EAX,5????????????????????????????????; 判斷ZF標志位???若zf=0??跳轉至地址“00401088”??顯然是錯的 00401073????75?13???????????JNE?SHORT?00401088???????????????????????; 00401075????BE?2A334000?????MOV?ESI,OFFSET?0040332A??????????????????; 0040107A????BF?41304000?????MOV?EDI,OFFSET?00403041??????????????????;???????????ASCII?"fubar" ecx?一般做循環比較次數?6??等等?與上面那個5有什么關系??字符串自帶反斜杠0?如果去掉呢?就是長度5?!?我們再往下分析 0040107F????B9?06000000?????MOV?ECX,6????????????????????????????????; esi與字符串“fubar”相比較??? 00401084????F3:A6???????????REPE?CMPS?BYTE?PTR?DS:[ESI],BYTE?PTR?ES:?; JE???結果很顯然了 00401086????74?19???????????JE?SHORT?004010A1????????????????????????; 00401088????6A?00???????????PUSH?0???????????????????????????????????; 0040108A????68?1F334000?????PUSH?OFFSET?0040331F?????????????????????;???????????ASCII?"?try?again" 0040108F????68?0F334000?????PUSH?OFFSET?0040330F?????????????????????;???????????ASCII?"no,?not?really." 00401094????6A?00???????????PUSH?0???????????????????????????????????; 00401096????E8?95000000?????CALL?<JMP.&USER32.MessageBoxA>???????????;???????????跳轉至?USER32.MessageBoxA 關掉OD?我們用字符串”fubar“去試試??為什么??你再想想看
附件 101839
OK?~?成功!
看到這里估計就會有人說了??就這么點?也想混優秀精華?沒什么好看的?哼~!?
回帖嘲諷下樓主?再右上角?深藏功與名。
----------------------
樓主為了保住節操?亦為了不被嘲諷?遂再花點時間
那么我們再進入節奏??我們從上面分析得到了那些關鍵信息?”內存訪問異常!在不可寫處寫數據“ ”PEID導入表可疑函數:SetUnhandledExceptionFilter:設置異常處理函數“
那么我們把它拖入IDA分析此函數如何?
選中函數”SetUnhandledExceptionFilter“回車-主窗口”空格“鍵
我們再左鍵點擊紅色框選中處
來到?
?依然?左鍵點擊上圖紅色框選中處?
來到真正的異常處理回調函數
我們左鍵單擊此行
代碼: .data:0040334A?TopLevelExceptionFilter?db?',0????????;?DATA?XREF:?DialogFunc+E1o 做如下操作:
按”c“鍵??將數據轉換為代碼??
按”d“鍵?轉換dword類型
可得到:
此時?我們看見完整的反匯編代碼??可以開始真正的分析了?。
我們知道SetUnhandledExceptionFilter是設置異常處理函數?那么?我們自己制作一個demo如何??那我們又要獲得那些信息呢?獲取異常中斷值
獲取esi?即?第一條指令
代碼: .data:0040334E?????????????????push????esi
說干就干?(ctrl+F5運行)
代碼: long???__stdcall???callback(_EXCEPTION_POINTERS*???pexcp)??? {???//異常printf("%p\n",pexcp->ExceptionRecord->ExceptionCode);??printf("%p\n",pexcp->ContextRecord->Esi);???//ESI輔助分析getchar();return???EXCEPTION_EXECUTE_HANDLER;??? }int?_tmain(int?argc,?_TCHAR*?argv[]) {SetUnhandledExceptionFilter(callback);?unsigned?ueax,uebx,uecx,uedx,uebp;__asm??//使用__asm進行內聯匯編{//使用mov指令將eax寄存器的內容保存到ueax變量mov?ueax,?eax??mov?uebx,?ebxmov?uecx,?ecxmov?uedx,?edxmov?uebp,ebp}printf("eax=%x\tebx=%x\tecx=%x\tedx=%x\nuebp=%x\n",?ueax,?uebx,?uecx,?uedx,uebp);//設置異常int?*f?=0;*f?=?9;system("pause");return?0; } 來我們回到IDA反匯編代碼:
代碼: ta:0040334A?????????????????enter???0,?0 .data:0040334E?????????????????push????esi????????;將結構體壓入堆棧 .data:0040334F?????????????????mov?????esi,?[ebp+arg_0]?;?取結構體EXCEPTION_POINTERS?pexcp .data:00403352?????????????????lodsd???????????????????;?取pexcp->ExceptionRecord??此時esi+4 .data:00403353?????????????????mov?????eax,?[eax]??????;?將pexcp->ExceptionRecord->ExceptionCode內容給eax .data:00403353?????????????????????????????????????????;?即EAX=?C0000005?從demo得到 .data:00403355?????????????????and?????eax,?0DEADFFh???;?EAX=5 .data:0040335A?????????????????shl?????eax,?5??????????;?EAX=A0 .data:0040335D?????????????????mov?????ebx,?eax????????;?EBX=A0 .data:0040335F?????????????????lea?????eax,?[eax+402FAEh]?;?40304E??即?magic .data:00403365?????????????????mov?????esi,?[esi]??????;?取?pexcp->ContextRecord .data:00403367?????????????????mov?????[esi+9Ch],?eax??;?取pexcp->ContextRecord+9c?即pexcp->ContextRecord->edi .data:0040336D?????????????????add?????eax,?2DCh???????;?eax=2ac .data:00403372?????????????????mov?????[ebx+esi],?eax??;?pexcp->ContextRecord->esi=2ac .data:00403375?????????????????mov?????eax,?400FDFh????;?eax=400fdf .data:0040337A?????????????????add?????eax,?ebx????????;?eax=40107f .data:0040337C?????????????????mov?????[esi+0B8h],?eax?;??pexcp->ContextRecord->esi+b8 .data:0040337C?????????????????????????????????????????;?即??pexcp->ContextRecord->eip=40107f?即做完異常處理函數后跳轉到地址40107f? .data:00403382?????????????????xor?????eax,?eax .data:00403384?????????????????dec?????eax .data:00403385?????????????????pop?????esi 分析完畢?那么此時根據所分析得到數據回到OD??ctrl+G?地址”40107f“?:
得到
耶~!?我們分析得到極其有用的三條數據(慣例?紅色高亮!)
代碼: CPU?Disasm 地址????????十六進制數據????????????指令???????????????????????????????????????Profile??Comments 00401073???/75?13???????????JNE?SHORT?00401088???????????????????????; 00401075???|BE?2A334000?????MOV?ESI,OFFSET?0040332A??????????????????; 0040107A???|BF?41304000?????MOV?EDI,OFFSET?00403041??????????????????;???????????ASCII?"fubar" 0040107F???|B9?06000000?????MOV?ECX,6????????????????????????????????; 00401084???|F3:A6???????????REPE?CMPS?BYTE?PTR?DS:[ESI],BYTE?PTR?ES:?; 00401086???|74?19???????????JE?SHORT?004010A1????????????????????????; 00401088???\6A?00???????????PUSH?0???????????????????????????????????; 0040108A????68?1F334000?????PUSH?OFFSET?0040331F?????????????????????;???????????ASCII?"?try?again" 0040108F????68?0F334000?????PUSH?OFFSET?0040330F?????????????????????;???????????ASCII?"no,?not?really." 00401094????6A?00???????????PUSH?0???????????????????????????????????; 00401096????E8?95000000?????CALL?<JMP.&USER32.MessageBoxA>???????????;???????????跳轉至?USER32.MessageBoxA 0040109B????33C0????????????XOR?EAX,EAX??????????????????????????????; 0040109D????C9??????????????LEAVE????????????????????????????????????; 0040109E????C2?1000?????????RETN?10??????????????????????????????????; 004010A1????68?B90B0000?????PUSH?0BB9????????????????????????????????; 004010A6????FF75?08?????????PUSH?DWORD?PTR?SS:[EBP+8]????????????????; 004010A9????E8?76000000?????CALL?<JMP.&USER32.GetDlgItem>????????????;???????????跳轉至?USER32.GetDlgItem 為什么??不說~!算是我留的作業吧?不太難 ?好好思考下
我們將它提取出來更好地去分析
代碼: CPU?Disasm 地址????????十六進制數據????????????指令???????????????????????????????????????Profile??Comments 循環比較5次?(忽視反斜杠0) 0040107F????B9?06000000?????MOV?ECX,6????????????????????????????????; 與字符串magic相比較??我們剛剛不是分析出來了么? 00401084????F3:A6???????????REPE?CMPS?BYTE?PTR?DS:[ESI],BYTE?PTR?ES:?; 跳轉至地址“004010A1” 00401086????74?19???????????JE?SHORT?004010A1????????????????????????; 來?我們把字符串”magic“輸入試試?
成功!
看到這里又會有熟悉IDA的人說了?這傻×(友善地 )?不知道可以F5?以及結構體分析么??
我當然知道? ??你不覺得經過上面的曲曲折折的分析?自己又不知不覺的提高了么(此話面對菜鳥?也包括我自己?哈哈 )
------------------------------
物盡其用?我們做如下操作:
shift+F9?或菜單欄:
再?按”INS“?-"ADD?STANDARD?STRUCTURE"-添加結構體?以”EXCEPTION_POINTERS“?為例(其實也有用到)?
再來到異常處理函數?選中指令”無腦“?按”T“:
或直接?F5?得到代碼??就不貼圖了?
完。
-------
標題有點霸氣?勿噴哈哈~ ??回宿舍睡覺?估計關門了?要敲門。。。。
----------------
程序: winasm_0.rar.*轉載請注明來自看雪論壇@PEdiy.com
作 者: Tennn
時 間: 2015-12-12,22:25:19
鏈 接: http://bbs.pediy.com/showthread.php?t=206437
我這一周學<軟件逆向>是薛老師講課,?大多挺深,我就列出一個典型的吧。?
準備工具:?ollydbg??ida???vs2012??
---------------------------------
我們先把目標程序winasm_0.exe拖入peid?
主界面
那我們去輸入表看看
也好像沒什么特別值得關注的。
、那好?簡單測試下程序???看有什么狀況發生?
看?彈出對話框?那我們該想到什么?API斷點!messagebox相關!
不急我們把它拖入OD??直接ctrl+A分析
入口點:
習慣性的我把它上下一翻、發現:
這不是我們要找的字符串嗎?(
PS:
如果我沒翻到?步驟應該會是:
我們截取關鍵代碼分析:
代碼: CPU?Disasm 地址????????十六進制數據????????????指令???????????????????????????????????????Profile??Comments獲取輸入內容 00401066??|.??E8?BF000000???CALL?<JMP.&USER32.GetDlgItemTextA>???????;???????????\USER32.GetDlgItemTextA 0040106B??????A3?13114000???MOV?DWORD?PTR?DS:[401113],EAX????????????;???????????MOV?DWORD?PTR?DS:[401113],EAX 比較eax 00401070??|.??83F8?05???????CMP?EAX,5????????????????????????????????; 00401073??|.??75?13?????????JNE?SHORT?00401088???????????????????????; 比較?fubar? 00401075??|.??BE?2A334000???MOV?ESI,OFFSET?0040332A??????????????????; 0040107A??|.??BF?41304000???MOV?EDI,OFFSET?00403041??????????????????;???????????ASCII?"fubar" 0040107F??|.??B9?06000000???MOV?ECX,6????????????????????????????????; 00401084??|.??F3:A6?????????REPE?CMPS?BYTE?PTR?DS:[ESI],BYTE?PTR?ES:?;??????????? 看ZF標志以決定轉移與否 00401086??|.??74?19?????????JE?SHORT?004010A1????????????????????????; 00401088??|>??6A?00?????????PUSH?0???????????????????????????????????;???????????/Type?=?MB_OK|MB_DEFBUTTON1|MB_APPLMODAL 0040108A??|.??68?1F334000???PUSH?OFFSET?0040331F?????????????????????;???????????|Caption?=?"?try?again" 0040108F??|.??68?0F334000???PUSH?OFFSET?0040330F?????????????????????;???????????|Text?=?"no,?not?really." 00401094??|.??6A?00?????????PUSH?0???????????????????????????????????;???????????|hOwner?=?NULL 00401096??|.??E8?95000000???CALL?<JMP.&USER32.MessageBoxA>???????????;???????????\USER32.MessageBoxA 0040109B??|.??33C0??????????XOR?EAX,EAX??????????????????????????????; 0040109D??|.??C9????????????LEAVE????????????????????????????????????; 0040109E??|.??C2?1000???????RETN?10??????????????????????????????????; 那好?我們暫且就這樣分析?在地址 00401066?處F2斷點???F9運行!
那此時肯定會彈出對話框??我們隨便輸入點什么?以”15PB“為例??再點擊 check!
會在剛剛所設斷點處停下來:
F8單步走走試試?
首先肯定是獲取我們輸入的字符” 15PB“而后?繼續F8單步?會發現?下不去了?!!
左下角有提示?:” 訪問沖突?正在寫入到[00401113]....去跳過異常程序“
首先?根據提示?我們就可以判斷” 內存訪問異常“(這個沒有標準?按逆向經驗及知識面有各自的判斷 )
好辦?!暴力破解,這個個人最喜歡了?不費腦子!
左鍵選中
代碼: CPU?Disasm 地址????????十六進制數據????????????指令???????????????????????????????????????Profile??Comments 0040106B??????A3?13114000???MOV?DWORD?PTR?DS:[401113],EAX????????????;???????????MOV?DWORD?PTR?DS:[401113],EAX
我們再點擊”1.exe“,再次輸入”15pb“??點擊check!
依然出錯!?
為什么?
我們再重復?拖入OD:
附件 101838
我們看紅色選中框.這時估計就會有人提問了?上面不就有嗎?為什么留在這兒說?故意充版面??
不不不!?一步一步來??我這篇逆向文章面向大部分人(普通人)??大牛們當然可以一眼定乾坤!
普通人可不一樣?所以?我得一點一點來?敘述要通俗易懂?盡量營造出菜鳥思維
如果我直接這樣~這樣~這樣~這樣!再這樣~那還寫什么啊
廢話不多說?我們分析代碼:
代碼: CPU?Disasm 地址????????十六進制數據????????????指令???????????????????????????????????????Profile??Comments eax與5相比較? 00401070????83F8?05?????????CMP?EAX,5????????????????????????????????; 判斷ZF標志位???若zf=0??跳轉至地址“00401088”??顯然是錯的 00401073????75?13???????????JNE?SHORT?00401088???????????????????????; 00401075????BE?2A334000?????MOV?ESI,OFFSET?0040332A??????????????????; 0040107A????BF?41304000?????MOV?EDI,OFFSET?00403041??????????????????;???????????ASCII?"fubar" ecx?一般做循環比較次數?6??等等?與上面那個5有什么關系??字符串自帶反斜杠0?如果去掉呢?就是長度5?!?我們再往下分析 0040107F????B9?06000000?????MOV?ECX,6????????????????????????????????; esi與字符串“fubar”相比較??? 00401084????F3:A6???????????REPE?CMPS?BYTE?PTR?DS:[ESI],BYTE?PTR?ES:?; JE???結果很顯然了 00401086????74?19???????????JE?SHORT?004010A1????????????????????????; 00401088????6A?00???????????PUSH?0???????????????????????????????????; 0040108A????68?1F334000?????PUSH?OFFSET?0040331F?????????????????????;???????????ASCII?"?try?again" 0040108F????68?0F334000?????PUSH?OFFSET?0040330F?????????????????????;???????????ASCII?"no,?not?really." 00401094????6A?00???????????PUSH?0???????????????????????????????????; 00401096????E8?95000000?????CALL?<JMP.&USER32.MessageBoxA>???????????;???????????跳轉至?USER32.MessageBoxA 關掉OD?我們用字符串”fubar“去試試??為什么??你再想想看
附件 101839
OK?~?成功!
看到這里估計就會有人說了??就這么點?也想混優秀精華?沒什么好看的?哼~!?
回帖嘲諷下樓主?再右上角?深藏功與名。
----------------------
樓主為了保住節操?亦為了不被嘲諷?遂再花點時間
那么我們再進入節奏??我們從上面分析得到了那些關鍵信息?
那么我們把它拖入IDA分析此函數如何?
選中函數”SetUnhandledExceptionFilter“回車-主窗口”空格“鍵
我們再左鍵點擊紅色框選中處
來到?
?依然?左鍵點擊上圖紅色框選中處?
來到真正的異常處理回調函數
我們左鍵單擊此行
代碼: .data:0040334A?TopLevelExceptionFilter?db?',0????????;?DATA?XREF:?DialogFunc+E1o 做如下操作:
按”c“鍵??將數據轉換為代碼??
按”d“鍵?轉換dword類型
可得到:
此時?我們看見完整的反匯編代碼??可以開始真正的分析了?。
我們知道SetUnhandledExceptionFilter是設置異常處理函數?那么?我們自己制作一個demo如何??那我們又要獲得那些信息呢?
代碼: long???__stdcall???callback(_EXCEPTION_POINTERS*???pexcp)??? {???//異常printf("%p\n",pexcp->ExceptionRecord->ExceptionCode);??printf("%p\n",pexcp->ContextRecord->Esi);???//ESI輔助分析getchar();return???EXCEPTION_EXECUTE_HANDLER;??? }int?_tmain(int?argc,?_TCHAR*?argv[]) {SetUnhandledExceptionFilter(callback);?unsigned?ueax,uebx,uecx,uedx,uebp;__asm??//使用__asm進行內聯匯編{//使用mov指令將eax寄存器的內容保存到ueax變量mov?ueax,?eax??mov?uebx,?ebxmov?uecx,?ecxmov?uedx,?edxmov?uebp,ebp}printf("eax=%x\tebx=%x\tecx=%x\tedx=%x\nuebp=%x\n",?ueax,?uebx,?uecx,?uedx,uebp);//設置異常int?*f?=0;*f?=?9;system("pause");return?0; } 來我們回到IDA反匯編代碼:
代碼: ta:0040334A?????????????????enter???0,?0 .data:0040334E?????????????????push????esi????????;將結構體壓入堆棧 .data:0040334F?????????????????mov?????esi,?[ebp+arg_0]?;?取結構體EXCEPTION_POINTERS?pexcp .data:00403352?????????????????lodsd???????????????????;?取pexcp->ExceptionRecord??此時esi+4 .data:00403353?????????????????mov?????eax,?[eax]??????;?將pexcp->ExceptionRecord->ExceptionCode內容給eax .data:00403353?????????????????????????????????????????;?即EAX=?C0000005?從demo得到 .data:00403355?????????????????and?????eax,?0DEADFFh???;?EAX=5 .data:0040335A?????????????????shl?????eax,?5??????????;?EAX=A0 .data:0040335D?????????????????mov?????ebx,?eax????????;?EBX=A0 .data:0040335F?????????????????lea?????eax,?[eax+402FAEh]?;?40304E??即?magic .data:00403365?????????????????mov?????esi,?[esi]??????;?取?pexcp->ContextRecord .data:00403367?????????????????mov?????[esi+9Ch],?eax??;?取pexcp->ContextRecord+9c?即pexcp->ContextRecord->edi .data:0040336D?????????????????add?????eax,?2DCh???????;?eax=2ac .data:00403372?????????????????mov?????[ebx+esi],?eax??;?pexcp->ContextRecord->esi=2ac .data:00403375?????????????????mov?????eax,?400FDFh????;?eax=400fdf .data:0040337A?????????????????add?????eax,?ebx????????;?eax=40107f .data:0040337C?????????????????mov?????[esi+0B8h],?eax?;??pexcp->ContextRecord->esi+b8 .data:0040337C?????????????????????????????????????????;?即??pexcp->ContextRecord->eip=40107f?即做完異常處理函數后跳轉到地址40107f? .data:00403382?????????????????xor?????eax,?eax .data:00403384?????????????????dec?????eax .data:00403385?????????????????pop?????esi 分析完畢?那么此時根據所分析得到數據回到OD??ctrl+G?地址”40107f“?:
得到
耶~!?我們分析得到極其有用的三條數據(慣例?紅色高亮!)
代碼: CPU?Disasm 地址????????十六進制數據????????????指令???????????????????????????????????????Profile??Comments 00401073???/75?13???????????JNE?SHORT?00401088???????????????????????; 00401075???|BE?2A334000?????MOV?ESI,OFFSET?0040332A??????????????????; 0040107A???|BF?41304000?????MOV?EDI,OFFSET?00403041??????????????????;???????????ASCII?"fubar" 0040107F???|B9?06000000?????MOV?ECX,6????????????????????????????????; 00401084???|F3:A6???????????REPE?CMPS?BYTE?PTR?DS:[ESI],BYTE?PTR?ES:?; 00401086???|74?19???????????JE?SHORT?004010A1????????????????????????; 00401088???\6A?00???????????PUSH?0???????????????????????????????????; 0040108A????68?1F334000?????PUSH?OFFSET?0040331F?????????????????????;???????????ASCII?"?try?again" 0040108F????68?0F334000?????PUSH?OFFSET?0040330F?????????????????????;???????????ASCII?"no,?not?really." 00401094????6A?00???????????PUSH?0???????????????????????????????????; 00401096????E8?95000000?????CALL?<JMP.&USER32.MessageBoxA>???????????;???????????跳轉至?USER32.MessageBoxA 0040109B????33C0????????????XOR?EAX,EAX??????????????????????????????; 0040109D????C9??????????????LEAVE????????????????????????????????????; 0040109E????C2?1000?????????RETN?10??????????????????????????????????; 004010A1????68?B90B0000?????PUSH?0BB9????????????????????????????????; 004010A6????FF75?08?????????PUSH?DWORD?PTR?SS:[EBP+8]????????????????; 004010A9????E8?76000000?????CALL?<JMP.&USER32.GetDlgItem>????????????;???????????跳轉至?USER32.GetDlgItem 為什么??不說~!算是我留的作業吧?不太難 ?好好思考下
我們將它提取出來更好地去分析
代碼: CPU?Disasm 地址????????十六進制數據????????????指令???????????????????????????????????????Profile??Comments 循環比較5次?(忽視反斜杠0) 0040107F????B9?06000000?????MOV?ECX,6????????????????????????????????; 與字符串magic相比較??我們剛剛不是分析出來了么? 00401084????F3:A6???????????REPE?CMPS?BYTE?PTR?DS:[ESI],BYTE?PTR?ES:?; 跳轉至地址“004010A1” 00401086????74?19???????????JE?SHORT?004010A1????????????????????????; 來?我們把字符串”magic“輸入試試?
成功!
看到這里又會有熟悉IDA的人說了?這傻×(友善地 )?不知道可以F5?以及結構體分析么??
我當然知道? ??你不覺得經過上面的曲曲折折的分析?自己又不知不覺的提高了么(此話面對菜鳥?也包括我自己?哈哈 )
------------------------------
物盡其用?我們做如下操作:
shift+F9?或菜單欄:
再?按”INS“?-"ADD?STANDARD?STRUCTURE"-添加結構體?以”EXCEPTION_POINTERS“?為例(其實也有用到)?
再來到異常處理函數?選中指令”無腦“?按”T“:
或直接?F5?得到代碼??就不貼圖了?
完。
-------
標題有點霸氣?勿噴哈哈~ ??回宿舍睡覺?估計關門了?要敲門。。。。
----------------
程序: winasm_0.rar.*轉載請注明來自看雪論壇@PEdiy.com
總結
以上是生活随笔為你收集整理的IDA+OD双剑合璧=逆向无敌的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第一次使用OD和IDA动静结合找出软件的
- 下一篇: 使用IDA PRO+OllyDbg+PE