zoukankan      html  css  js  c++  java
  • 【原创】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

  • 相关阅读:
    一起学Windows phone 7开发(四. DeepZoom)
    设计模式Observer(观察者模式)
    今天挺开心
    设计模式Singleton(单例模式)
    PointFromScreen和PointFromScreen的用法和区别
    设计模式Adapter(适配器模式)
    设计模式Abstract Factory(抽象工厂)
    C++多线程信号量,互斥
    linux bash 几个命令
    大小端存储
  • 原文地址:https://www.cnblogs.com/develop/p/4397397.html
Copyright © 2011-2022 走看看