zoukankan      html  css  js  c++  java
  • Allatori混淆动态调试分析

    Allatori混淆动态调试分析

    0x00 前言

    在家的某天正刷的抖音小姐姐的时候,朋友突然给我扔来一个jar包说是有后门叫我调试分析一下并且把后门去掉。起初以为也没多大事,只要查看代码中疑似后门的地方去掉并且重新打包就好了,但是现实总是残酷的,jd-gui打开jar包,META-INFMETA-INF.MANIFEST.MF

    文件中定义的入口点方法除了定义了一些变量以外,并没有调用任何代码,这下就尴尬了。

    而后想拿IDEA进行动态调试jar包,而这些混淆后的类中只有变量的定义,这下无从下手了,随后又试了recaf等反编译工具都不行。思索许久,找到了方法能进行动态调试。思索一个问题,在Java中植入后门的话目前我所能知道的实际上也就2种方法,一个就是解压缩文件落地到指定目录,然后使用反射调用落地的这个exe。第二种则是直接调用JNI或JNA加载dll文件实现加载shellcode。

    0x01 Allatori 混淆器

    先来看看这个混淆器是如何进行混淆的。

    官网:http://www.allatori.com/

    原理

    在混淆的使用进行加密,并且在Class类中会生成一个静态的解密方法,在使用到字符串的地方,调用解密方法解密,参数就是加密后的字符串。

    使用

    该混淆器分为两种方式分别是强加密方式 和快速混淆方式,强加密方式会获取调用堆栈。

    下载 Allatori-7.1-Demo.zip
    然后进入目录 Allatori-7.7-Demo utorialstep01files

    • Clean.bat:清除 log.xml 以及生成混淆的文件
    • config.xml:混淆的配置文件
    • mousegestures-1.2.jar、test.jar:被混淆的 jar 包
    • MouseGesturesOriginal.bat:混淆前 jar 的测试命令
    • MouseGesturesObfuscated.bat:混淆后 jar 的测试命令
    • RunAllatori.bat:执行生成混淆 jar 的命令

    官方默认对除了 public 修饰的类、方法、区域放开,其余的都会混淆处理。

    修改config.xml文件:

    <config>
        <input>
            <jar in="CVE-2020-14882-Gui_Exoloit.V2.2.jar" out="obf-test.jar"/>
            <jar in="mousegestures-1.2.jar" out="obf-mousegestures-1.2.jar"/>
        </input>
    
        <keep-names>
            <class access="protected+">
                <field access="protected+"/>
                <method access="protected+"/>
            </class>
        </keep-names>
    
        <property name="log-file" value="log.xml"/>
    </config>
    
     <jar in="CVE-2020-14882-Gui_Exoloit.V2.2.jar" out="obf-test.jar"/>
    

    这里面填写需要混淆和输出的jar包

    混淆完成后,扔到jd-gui里面

    发现部分代码已经查看不了。

    0x02 调试分析

    jar包调试可查看该篇文jar包调试技巧,这里拿个自写的POC工具进行调试。存在后门jar包在此不做演示。

    JDB动态调试

    JDB是 The Java Debugger 的简称,它可以用来debug一个Java程序,同时它是 JPDA 的一个参考实现,只是这个实现是基于命令行的。只要熟记几个命令,在受限环境下debug还是很好用的。并且在安装JDK的时候会自带该命令。

    启动调试模式

    java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 -jar .obf-test.jar
    

    调试连接

    jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=5005
    

    在jdb命令行执行命令即可进行断点调试。

    classes   //加载已经类名
    

     stop in com.nice0e3.Processor.auto  //断点设置
     step //执行当前行
    

    加载到这里已经可以看到调用了com.nice0e3.Processor.vuln_12_2()方法

    stop in com.nice0e3.Processor.vuln_12_2
    step
    

     eval  com.nice0e3.HttpClient.getRandomUserAgent() //该功能相当于IDEA调试中的ALT+F8的表达式求值功能
    

    移除后门

    在调试中找到加载后门的方法,并将类进行反编译把方法中执行后门的方法删除即可,一般都为void方法,删除为空方法即可。不影响正常使用。

    分析得知该后门为远程请求文件 , 反射调用java.lang.ProcessBuilder执行cmd.exe /c C:windows empxxx.exe进行执行后门程序。

    0x03 结尾

    在使用该方法前,咨询了一下我的几个做安卓逆向的朋友该情况的解决方法。但回答都是进行远程调试,拿到混淆的字段或方法等,写脚本继续批量反编译。该方法比较麻烦没有进行尝试。即便去除后门后,建议工具等东西还是在虚拟机里运行较为恰当。

  • 相关阅读:
    SpringBoot集成beetl模板快速入门
    小记---idea springboot 报错没有get或者set方法
    android在style中使用自定义属性 error: style attribute not found.
    ieda使用 在jsp页面中,有时候会出现不能智能显示方法 idea pageContext.setAttribute
    ieda使用 在jsp页面中,有时候会出现不能智能显示方法 idea pageContext.setAttribute
    logback的使用和logback.xml详解,在Spring项目中使用log打印日志
    classpath和classpath*区别
    SpringBoot项目在IntelliJ IDEA中实现热部署
    idea 警告:Warning:java: 源值1.5已过时, 将在未来所有发行版中删除
    linux 删除文件后 df 查看磁盘空间并没有释放
  • 原文地址:https://www.cnblogs.com/nice0e3/p/14711602.html
Copyright © 2011-2022 走看看