Frida是一个动态代码插桩工具,允许开发者在运行时修改和调试应用程序
-
import ...
:这行代码表示导入所需的模块或库,但具体的导入内容在图片中被省略了。 -
rdev = frida.get_remote_device()
:这行代码获取一个远程设备实例,通常用于连接到非本地设备,如通过USB连接的Android设备。 -
session = rdev.attach("com.shizhuang.duapp")
:这行代码将Frida会话附加到指定的应用程序上。在这里,"com.shizhuang.duapp"
是目标应用程序的包名,Frida会话将用于与这个应用程序进行交互。 -
scr = """..."""
:这是一个多行字符串,通常用于定义要注入到目标应用程序中的JavaScript代码。在图片中,具体的脚本内容被省略了。 -
script = session.create_script(scr)
:这行代码使用之前定义的脚本内容创建一个Frida脚本对象。 -
def on_message(message, data): ...
:这是一个回调函数的定义,用于处理从目标应用程序发送回Frida的消息。message
参数通常包含脚本执行的结果或错误信息,而data
参数可能包含额外的数据。 -
script.on("message", on_message)
:这行代码设置了一个事件监听器,当脚本发送消息时,将调用on_message
函数。 -
script.load()
:最后,这行代码加载并注入之前创建的脚本到目标应用程序中。
src里面是js的代码
直接运行
点击出发机制运行 666 999 666 999
深入分析次方法:
开始去so层搞c代码
反编译so文件,看看他的C代码是如何实现的。
IDA出来吧!!!
先找exports,
基于frida去hook so文件中某个JNI函数。 模拟器无法完成so中的JNI函数(app中只提供了arm32,6架构 )
so层的hook代码
总结:
=
sign
的计算方法如下:
- 把 url中的参数放入map中
- 把
uuid、platform、v、loginToken
放入map中 - 对map中的元素按key进行排序
- 把map中的元素按keyvalue形式拼接成字符串
- 在字符串末尾拼接一个常量字符串
- 计算字符串的md5
newSign
的计算方法跟sign
比较相似,只是最后是先对构建的字符串AES加密,然后再计算md5,加密部分是在libJNIEncrypt.so
中实现