【原創】Android VMP加殼 POC


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

我個人把dalviki指令分為這么幾類:

  • 算數運算指令。
  • 引用類指令。如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/ADVMP

 

ADVMP-master.zip


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM