天天看點

微信逆向分析(二)——逆向分析的方法

上一篇,聊到逆向分析是找偏移,有依據地找,效率會快。這一篇聊下找偏移方法。隻說概念,具體的細節,後續會配合實戰再展開細說。

找偏移的方法

1、記憶體

逆向的目的,是找功能或者資料在記憶體的位址。最直接的方法,就是在記憶體裡面搜尋。

對于資料:可以直接在記憶體搜尋。

對于功能:如果知道代碼的特征碼,也可以直接在記憶體尋找。

(所謂代碼的特征碼,具體是一串字元串,在記憶體是唯一的,可以用來搜尋定位)。

2、界面

帶界面的軟體,一般流程就是:

1、軟體生成界面,界面上會有按鈕,編輯框這些控件。

2、使用者操作界面,點選按鈕或者輸入文字等等。

3、軟體接收到使用者的操作,調用對應的功能。

4、調用的功能對資料進行處理。

5、處理結果顯示在界面上。

如果知道這個流程在代碼裡面是怎麼實作的,就能找到對應的功能和資料。

3、日志

軟體運作的過程,是沒辦法像視訊那樣可以倒放。

想了解軟體的運作過程,需要在軟體裡面埋下标記。

當軟體運作過程,經過做标記的位置,就可以輸出資訊。(也就是所謂的日志)

而逆向分析,通過日志找到标記,能知道對應的功能在哪裡。

4、字元串

代碼裡面寫的字元串,編譯成軟體的過程,會被當作全局資料,存在固定的地方。

而字元串可能有對應的功能,比如 send msg,可能出現在發送資訊的功能附近。

通過搜尋字元串,看看哪裡用了這個字元串,就可以找到對應的功能。

5、系統函數

寫代碼的過程中,需要用到一些比較基礎的功能。(比如讀寫檔案,收發網絡資訊)

這個時候直接用系統提供的接口就可以了。

這些接口是公用的,是以偏移固定的。

通過攔截這些接口,就可以定位了。

6、第三方庫

軟體可以看成由多個子產品組成的,像搭積木那樣。

而這些子產品大多通用的,比如:界面子產品,日志子產品。

為了加快開發速度,一般會使用别人寫好的第三方子產品。

如果第三方子產品是開源的,相當知道軟體的一部分代碼。

通過第三方的代碼,可以推算出軟體還沒解開的另一部分。

下一篇,找到偏移之後,聊聊利用偏移寫代碼的思路。

繼續閱讀