逆向學習筆記02

爲什麼OD找不到的字符串,IDA能找到?

OD字符串搜索插件實現原理:
1.搜索進程模塊的每一行彙編代碼,尋找push、mov、lea指令
2.找到後,判斷指令後面接的是不是字符串,判斷的思路是:如果後面接的參數是以’\0’結束的,就說明是字符串,否則不是。

找不到是由於算法的缺陷

1.因爲查找的某字符串可能是在結構體中,然而在字符串變量之前,可能存在其它的字符串變量,當遍歷到前面字符串的結尾符時,就會停止搜索。而且當要搜索的字符串之前存在結尾符的話就會搜索不到。
2.ida搜索字符串的方法
ida是直接搜索PE文件中所有的字符串信息,因此能搜索到。

讓OD和IDA都搜索不到字符串的方法

在 VS中,把字符串定義爲局部變量,定義爲全局變量,可以搜索到,如下定義字符串就不會搜索到:
char str[]={0xD7,0xA2,0xB2,0xE1,0xCA,0xA7,0xB0,0xDC,0x00};

註釋與標籤

1.註釋是在彙編窗口中顯示的,標籤是在內存窗口中顯示的
2.call+addr,在OD中跳轉到addr,在addr處添加標籤後函數名會更改,內存窗口中的地址右邊會有函數名,

按F8卡住,解決方法

1.點擊線程窗口,回覆所有線程

多線程代碼(易語言線程特徵)

00403E04 . 56 push esi ; CM.00403DF8
00403E05 . 57 push edi ; CM.00403DF8
00403E06 . 53 push ebx
00403E07 . E8 ADDAFFFF call CM.004018B9
00403E0C . 5B pop ebx
00403E0D . 5F pop edi ; CM.00403DF8
00403E0E . 5E pop esi ; CM.00403DF8

找到調用地方

1.運行到函數頭部,右鍵選中第一行代碼,右鍵find ref-》selected command
2.選中棧頂的函數地址,點擊enter

局部變量

1.[local.1]函數的局部變量1
2.[local.2]函數的局部變量2

保存ida修改後的exe文件

意義是:當遇到有混淆的代碼時,有時需要在ida中進行修改,修改後OD就方便調式。
弊端:修改後無法撤回,而OD可以
注意:修改的時候要注意,修改的字節數要跟修改前的字節數相同,不然會報錯。
操作:Edit->Patch program->assemble->在instruction中輸入修改後的內容,接着edit->Patch program->Apply patch to input files

XH補丁製作工具使用

1.在內存地址處輸入要修改的地址
2.在修改指令處輸入要修改的指令,點擊添加-》生成補丁
3.打開打了補丁後的程序和要破解的程序
4.關掉所有殺毒軟件,運行打了補丁後的程序,點擊破解即可

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章