【APP逆向31】rpc小应用之DYM

  • 前言:逆向算法

    • Java层,Python去还原。
    • so层
      • 硬核分析
      • frida-rpc,代码注入到手机,主动调用脚本 -> 主动调用so中的方法(APP运行+frida运行)【手机】
      • 安卓程序调用so,调用并获取结果【手机】
      • unidbg调用so,代码创建设备,再用设备调用so文件 -> jar -> 代码执行
  • 1.目标:逆向登录接口中的sign参数

  • 2.入口

  • 3.hook校验

    • 3.1:通过hook与抓包对比,我们可以确定我们的猜测是正确的。
Java.perform(function () {

    var Crypt = Java.use("com.yoloho.libcore.util.Crypt");

    Crypt.encrypt_data.implementation = function (j2,str,i3) {
        console.log(j2,str,i3)
        return this.encrypt_data(j2,str,i3);
    }


});

// frida -UF -l  7.hook_sign.js

  • 4.通过rpc脚本调用so中的方法,返回我们需要的sign值
    • 4.1:脚本
import frida

rdev = frida.get_remote_device()
session = rdev.attach("大姨妈")

scr = """
rpc.exports = {   
    // xx方法名,方便后续python调用
    xx:function(j2,str,j3){
         var res;
          
         // 找到类,并且自行方法,返回结果
         Java.perform(function () {
            var Crypt = Java.use("com.yoloho.libcore.util.Crypt");  
            res = Crypt.encrypt_data(j2,str,j3);
         });

         return res;
    }
}
"""
script = session.create_script(scr)
script.load()


# Python语法调用
sign = script.exports.xx(0, "dd4d356229c14b2b2a65cac7b15efccb52313d4euser/login13388889999Izwi7Fk7u8Ge5O7yV3U27g==", 85)
print(sign)
  • 4.2:通过对比抓包,查看是否正确

  • 4.3:至此,我们通过Frida,hook,python调用等技术,在不硬核破解so总加密方法的情况下获取到了sign的生成结果。此方法的缺点:

    • 4.3.1:需要依赖Frida,手机设备
    • 4.3.2:批量操作时,速度比较慢,而且可能需要多台设备(手机,电脑)通过队列去生成sign值
posted @ 2025-02-14 17:14  Tony_xiao  阅读(58)  评论(0)    收藏  举报