hook某智赢md5加密算法
1.手机端启动frida服务
>>>adb shell >>>su >>>cd /data/local/tmp >>>./frida-server-16.0.1-android-arm64
2.hook某智赢encodemd5加密算法
Attach 方式:
适应场景:Attach 方式是在目标应用程序已经运行的过程中动态地连接并注入 Frida 的 Agent 代码
需要对已经运行的应用程序进行 Hook,即动态地连接到正在运行的进程。
需要在应用程序运行时拦截和修改特定的方法调用。
需要实时监视和修改应用程序的行为,例如参数修改、返回值篡改等。
需要对应用程序进行调试和分析,以查找潜在的问题和漏洞。
import frida import sys # 连接手机设备 rdev = frida.get_remote_device() # 包名:com.che168.autotradercloud # 车智赢+ session = rdev.attach("车智赢+") scr = """ Java.perform(function () { //找到类替换 反编译的首行+类名:com.autohome.ahkit.utils下的 var SecurityUtil = Java.use("com.autohome.ahkit.utils.SecurityUtil"); //替换类中的方法 SecurityUtil.encodeMD5.implementation = function(str){ console.log("参数:",str); var res = this.encodeMD5(str); //调用原来的函数 console.log("返回值:",res); return str; } }); """ script = session.create_script(scr) def on_message(message, data): print(message, data) script.on("message", on_message) script.load() sys.stdin.read()
运行该py文件,手机打开软件进行登录(随便输入个账号密码即可),操作可能就会触发hook函数
结果如下
Spawn 方式
适应场景:Spawn 方式是在目标应用程序启动时直接注入 Frida 的 Agent 代码
需要在应用程序启动的早期阶段进行 Hook。
需要访问和修改应用程序的内部状态,例如应用程序的全局变量、静态变量等。
需要 Hook 应用程序的初始化过程,以实现对应用程序的自定义初始化逻辑。
需要在应用程序的上下文中执行代码,并与其他模块或库进行交互。
import frida import sys rdev = frida.get_remote_device() # 写成spawn 里面放包名 pid = rdev.spawn(["com.che168.autotradercloud"]) session = rdev.attach(pid) scr = """ Java.perform(function () { // 包.类 var SecurityUtil = Java.use("com.autohome.ahkit.utils.SecurityUtil"); SecurityUtil.encodeMD5.implementation = function(str){ console.log("明文:",str); var res = this.encodeMD5(str); console.log("md5加密结果=",res); return res; } }); """ script = session.create_script(scr) def on_message(message, data): print(message, data) script.on("message", on_message) script.load() rdev.resume(pid) sys.stdin.read()
JS方式
# 只需要写js代码,然后用命令hook #### 写好hhok的代码 Java.perform(function () { // 包.类 var SecurityUtil = Java.use("com.autohome.ahkit.utils.SecurityUtil"); SecurityUtil.encodeMD5.implementation = function(str){ console.log("明文:",str); var res = this.encodeMD5(str); console.log("md5加密结果=",res); return res; } }); ### 执行hook,需要命令 attach方案:frida -UF -l hook.js spwan方案:frida -U -f com.che168.autotradercloud -l hook.js # 注意:输入q + 再点击回车则退出
使用python还原加密算法
# java代码是 public static final String encodeMD5(String str) { char[] cArr = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; try { byte[] bytes = str.getBytes(); MessageDigest instance = MessageDigest.getInstance("MD5"); instance.update(bytes); byte[] digest = instance.digest(); int length = digest.length; char[] cArr2 = new char[(length * 2)]; int i = 0; for (byte b : digest) { int i2 = i + 1; cArr2[i] = cArr[(b >>> 4) & 15]; i = i2 + 1; cArr2[i2] = cArr[b & bx.m]; } return new String(cArr2).toLowerCase(); } catch (Exception e) { e.printStackTrace(); return null; } } # python代码重写(python中的MD5加密) # 加密前:1234567 # 加密后:fcea920f7412b5da7be0cf42b8c93759 # ## python 代码 import hashlib res=hashlib.md5(b'1234567').hexdigest() print(res) # fcea920f7412b5da7be0cf42b8c93759