前言
上一篇,聊到逆向分析是找偏移,有依據地找,效率會快。這一篇聊下找偏移方法。只說概念,具體的細節,后續會配合實戰再展開細說。
找偏移的方法
1、內存
逆向的目的,是找功能或者數據在內存的地址。最直接的方法,就是在內存里面搜索。
對於數據:可以直接在內存搜索。
對於功能:如果知道代碼的特征碼,也可以直接在內存尋找。
(所謂代碼的特征碼,具體是一串字符串,在內存是唯一的,可以用來搜索定位)。
2、界面
帶界面的軟件,一般流程就是:
1、軟件生成界面,界面上會有按鈕,編輯框這些控件。
2、用戶操作界面,點擊按鈕或者輸入文字等等。
3、軟件接收到用戶的操作,調用對應的功能。
4、調用的功能對數據進行處理。
5、處理結果顯示在界面上。
如果知道這個流程在代碼里面是怎么實現的,就能找到對應的功能和數據。
3、日志
軟件運行的過程,是沒辦法像視頻那樣可以倒放。
想了解軟件的運行過程,需要在軟件里面埋下標記。
當軟件運行過程,經過做標記的位置,就可以輸出信息。(也就是所謂的日志)
而逆向分析,通過日志找到標記,能知道對應的功能在哪里。
4、字符串
代碼里面寫的字符串,編譯成軟件的過程,會被當作全局數據,存在固定的地方。
而字符串可能有對應的功能,比如 send msg,可能出現在發送信息的功能附近。
通過搜索字符串,看看哪里用了這個字符串,就可以找到對應的功能。
5、系統函數
寫代碼的過程中,需要用到一些比較基礎的功能。(比如讀寫文件,收發網絡信息)
這個時候直接用系統提供的接口就可以了。
這些接口是公用的,所以偏移固定的。
通過攔截這些接口,就可以定位了。
6、第三方庫
軟件可以看成由多個模塊組成的,像搭積木那樣。
而這些模塊大多通用的,比如:界面模塊,日志模塊。
為了加快開發速度,一般會使用別人寫好的第三方模塊。
如果第三方模塊是開源的,相當知道軟件的一部分代碼。
通過第三方的代碼,可以推算出軟件還沒解開的另一部分。
下一篇,找到偏移之后,聊聊利用偏移寫代碼的思路。
