【原創】Android VMP加殼 POC

介紹
這個殼的核心——字節碼解釋器,它參考了dalvik虛擬機的解釋器。不須要hook、注入。目前只支持算數運算指令。

我我的把dalviki指令分爲這麼幾類:php

  • 算數運算指令。
  • 引用類指令。如const-string、invoke-kind,這類指令須要引用dex的資源。
  • 其餘指令


解釋執行算數運算指令較爲簡單。
引用類指令的實現須要解析dex文件的格式,把class、method、field、string等數據解析一遍,保證能夠找到這些數據,那麼引用類指令的解釋執行就能夠實現,這個是我準備要作的。
雖然如今還比較簡陋,可是能運行了下面有源碼放出

關於dalvik虛擬機如何解釋執行opcode我有一些分析,有興趣的能夠瞅瞅~
dalvik虛擬機解釋執行字節碼
【分析】生成dalvik解釋器原文件的腳本:gen-mterp.py
dalvik虛擬機啓動過程(一共有3篇)

這個殼叫advmp,最初的名字是avmp,意思是Android VMP,可是想了想不敢稱VMP啊,由於雖然代碼中字節碼實現瞭解釋執行,可是也要結合dalvik,並且代碼中借鑑了dalvik的源碼,因此中間加了個D,向dalvik致敬。

例子
壓縮包中有一個buwaishell.jar文件,能夠用它來加殼,是否是有點激動,想試一試!
惋惜你想多了,它目前只對一個APK有效,就是壓縮包中的 AndroidHelloWorld.apk文件,在命令行下使用命令"java -jar buwaishell.jar -s .\AndroidHelloWorld.apk -o .",而後就會生成一個AndroidHelloWorld.shelled.apk文件。
那麼buwaishell.jar到底作了什麼哪?它把APK中的一個方法變成了native,而後把這個方法的指令抽取了出來,這個指令很簡單,就是一個加法指令,而後當APK運行的時候會在解釋器裏執行抽取出來的指令,而後得出正確的結果。
[*例子:advmp.zip.*]

源碼目錄說明
AdvmpTest:測試用的項目。
base:Java項目。裏面是一些工具類代碼。
control-centre:Java項目。控制加固流程。
separator:Java項目。抽離方法指令,而後將抽離的指令按照自定義格式輸出,並同時輸出C文件。
template/jni:C代碼。裏面包含了解釋器的代碼。
ycformat:自定義的文件格式,用於保存抽取出來指令等數據。

源碼
GitHub:https://github.com/zylc369/ADVMPjava

 

ADVMP-master.zipgit

相關文章
相關標籤/搜索