截止9月24日懸賞正式結束了,我不出意外的沒有破解成功,到再整個過程中自己收獲滿滿。有破解成功的大神還請指導一二。
歷史篇章
1.首篇地址~思路預測
http://www.lxweimin.com/p/93b0b4e7e091
2.第一戰地址
http://www.lxweimin.com/p/96facd4e0dee
最后的進展
- 通過多種方式了解到了VM就是傳說中的虛擬機保護技術,還扒到了阿里的VM作者深深膜拜了下 。
- 通過內存dump找到了VM的指令區域,不過代碼插畫很多,沒研究明白。惡補了很多虛擬機保護技術的資料,但卻沒有和這套賽題的相關內容對應上,至此沒了思路,期間找到了很多的switch case但不能確定是不是VM的dispatcher,無法確認vmcontext對應那個。找到了一出vmcore interpreter看名字是核心解釋器,但沒有找到這個解釋器的調用入口。而且解釋器代碼很長,跳轉很多,也沒理清頭緒。
需要研究克服的幾個難點
- 突破反調試進行動態調試
不能突破反調試的話,靜態分析效率比較低,且容易受到混淆代碼干擾,始終找不到真正的虛擬化代碼bytecode的位置,會不會core.bin就是呢?如果能突破他的反調試,也許能理清下思路。但這個代碼中函數是用的被動注冊,沒有jni_onload入口,后來找到了initarray,但按照網上的方法也沒有成功斷點。這塊是下一步的學習重點。 - 學習ida及其他分析工具
單一工具比較受限,而且工具不熟練,很多常用功能不熟悉,這些都回影響到效率和思路,下一步要加強工具的使用,嘗試更多的工具,如od。 - 學習ELF文件格式規范
深入研究ELF的格式規范定義,嘗試進行文件修復,內存dump出來的指令代碼缺少section說明等描述信息,直接拖放到ida中會不識別,需要手動修復或修補,才能更好的進行分析。 - 深入學習虛擬機保護技術
虛擬機保護技術簡單來說就是將核心的代碼(反匯編后的)進行轉換,轉換成自定義的字節碼(這個過程使用虛擬機編譯器進行編譯生成),將該字節碼插入到文件的適當位置,然后在核心代碼原位置插入虛擬機解釋器的指令入口地址。運行期有虛擬機的解釋器對字節碼進行解釋執行。需要加深理解,并能和賽題中的進行對應理解。
圖片發自簡書App