-
1.目标:逆向登录接口中的sign参数
-
2.入口
-
3.hook校验
- 3.1:通过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 fridardev = 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值