【原创】Android VMP加壳 POC
介紹
這個(gè)殼的核心——字節(jié)碼解釋器,它參考了dalvik虛擬機(jī)的解釋器。不需要hook、注入。目前只支持算數(shù)運(yùn)算指令。
我個(gè)人把dalviki指令分為這么幾類(lèi):
- 算數(shù)運(yùn)算指令。
- 引用類(lèi)指令。如const-string、invoke-kind,這類(lèi)指令需要引用dex的資源。
- 其他指令
解釋執(zhí)行算數(shù)運(yùn)算指令較為簡(jiǎn)單。
引用類(lèi)指令的實(shí)現(xiàn)需要解析dex文件的格式,把class、method、field、string等數(shù)據(jù)解析一遍,保證可以找到這些數(shù)據(jù),那么引用類(lèi)指令的解釋執(zhí)行就可以實(shí)現(xiàn),這個(gè)是我準(zhǔn)備要做的。
雖然現(xiàn)在還比較簡(jiǎn)陋,但是能運(yùn)行了,下面有源碼放出
關(guān)于dalvik虛擬機(jī)如何解釋執(zhí)行opcode我有一些分析,有興趣的可以瞅瞅~
dalvik虛擬機(jī)解釋執(zhí)行字節(jié)碼
【分析】生成dalvik解釋器原文件的腳本:gen-mterp.py
dalvik虛擬機(jī)啟動(dòng)過(guò)程(一共有3篇)
這個(gè)殼叫advmp,最初的名字是avmp,意思是Android VMP,但是想了想不敢稱(chēng)VMP啊,因?yàn)殡m然代碼中字節(jié)碼實(shí)現(xiàn)了解釋執(zhí)行,但是也要結(jié)合dalvik,而且代碼中借鑒了dalvik的源碼,所以中間加了個(gè)D,向dalvik致敬。
例子
壓縮包中有一個(gè)buwaishell.jar文件,可以用它來(lái)加殼,是不是有點(diǎn)激動(dòng),想試一試!
可惜你想多了,它目前只對(duì)一個(gè)APK有效,就是壓縮包中的 AndroidHelloWorld.apk文件,在命令行下使用命令"java -jar buwaishell.jar -s .\AndroidHelloWorld.apk -o .",然后就會(huì)生成一個(gè)AndroidHelloWorld.shelled.apk文件。
那么buwaishell.jar到底做了什么哪?它把APK中的一個(gè)方法變成了native,然后把這個(gè)方法的指令抽取了出來(lái),這個(gè)指令很簡(jiǎn)單,就是一個(gè)加法指令,然后當(dāng)APK運(yùn)行的時(shí)候會(huì)在解釋器里執(zhí)行抽取出來(lái)的指令,然后得出正確的結(jié)果。
[*例子:advmp.zip.*]
源碼目錄說(shuō)明
AdvmpTest:測(cè)試用的項(xiàng)目。
base:Java項(xiàng)目。里面是一些工具類(lèi)代碼。
control-centre:Java項(xiàng)目??刂萍庸塘鞒?。
separator:Java項(xiàng)目。抽離方法指令,然后將抽離的指令按照自定義格式輸出,并同時(shí)輸出C文件。
template/jni:C代碼。里面包含了解釋器的代碼。
ycformat:自定義的文件格式,用于保存抽取出來(lái)指令等數(shù)據(jù)。
源碼
GitHub:https://github.com/zylc369/ADVMP
?
ADVMP-master.zip
轉(zhuǎn)載于:https://www.cnblogs.com/develop/p/4397397.html
總結(jié)
以上是生活随笔為你收集整理的【原创】Android VMP加壳 POC的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MySQL 5.6 双机热备
- 下一篇: 科技创业公司的效率工具箱