• 【原创】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

  • 相关阅读:
    CentOS6.5 [ERROR] /usr/libexec/mysqld: Can't create/write to file '/var/lib/mysqld/mysqld.pid' (Errcode: 2)
    linux防火墙
    Linux磁盘分区与LVM详解
    LVM分区扩展空间
    linux 分区方法(超过2T的硬盘)
    linux异常处理:selinux配置错误导致无法重启
    linux网卡配置文件
    Zabbix4.0系统clone、mass update使用
    Zabbix系统配置日志监控告警--关键字触发
    Zabbix4.0系统配置事件通知
  • 原文地址:https://www.cnblogs.com/develop/p/4397397.html
Copyright © 2020-2023  润新知