Frida定位和还原简单参数

分析其signature参数的生成逻辑:
在这里插入图片描述
首先使用jadx搜索大法,此处先搜索signature,发现有太多搜索结果:
在这里插入图片描述
考虑到生成的逻辑,有可能是通过比如"signature=加密参数"这样的方式来赋值的,那么我们尝试搜索一下**"signature**,发现定位到了关键代码:
在这里插入图片描述
经观察可以发现signature生成的位置:
在这里插入图片描述
尝试hook一下这个地方:

var d_d_test = Java.use('com.iCitySuzhou.suzhou001.d.d')
d_d_test.a.overload('java.lang.String', 'java.lang.String').implementation = function(s1,s2){
    console.log('enter d_d_test!' + '传入的参数s1为:' + s1 + ',传入的参数s2为'+ s2)
    return this.a(s1,s2)
    }

在这里插入图片描述
然后点入com.huolang.framework.b.a.a里面,看到:
在这里插入图片描述

再尝试hook一下这个函数:

var a_a_test = Java.use('com.hualong.framework.b.a')
a_a_test.a.implementation = function(s1){
    console.log('enter a_a_test!' + '传入的参数为:',s1)
    let return_value = this.a(s1)
    console.log('a_a_test.a的返回值为',return_value)
    return this.a(s1)
}

输出结果:
在这里插入图片描述
看到加密结果为a58414330d87cad53bf77b0d7d20c508,此时比对一下抓包工具里的加密结果:
在这里插入图片描述
可以看到加密结果是一样的,因此我们定位到了加密的关键代码在com.huolang.framework.b.a.a里。
接下来可以尝试在Frida中用java代码还原一下:

//此处构造传入的str对象
var str_input = Java.use('java.lang.String').$new('IMEI867686020611446-IMSI460024281539610&&1647162519&&f1190aca-d08e-4041-8666-29931cd89dde')       
//此处构造instance对象
var instance = Java.use('java.security.MessageDigest').getInstance("MD5")
//此处构造StringBuffer对象
var StringBuffer = Java.use('java.lang.StringBuffer').$new()
//此处构造Integer对象,源代码里没有$new(),这里也保持一致
var Integer = Java.use('java.lang.Integer')
//与源代码保持一致
instance.update(str_input.getBytes())
var digest = instance.digest()
//用js代码来写源代码中的循环
var len_digest = digest.length
for(let i=0;i<len_digest;i++){
    StringBuffer.append(Integer.toString((digest[i] >>> 4) & 15,16)).append(Integer.toString(digest[i] & 15,16))
}
console.log(StringBuffer.toString())

输出结果看一下,发现结果一致,说明还原正确:
在这里插入图片描述
在这里插入图片描述
这段代码同样也可以用python还原:

import hashlib

str_input = 'IMEI867686020611446-IMSI460024281539610&&1647162519&&f1190aca-d08e-4041-8666-29931cd89dde'
signature = ''
instance = hashlib.md5()
instance.update(bytearray(str_input.encode('utf8')))
digest = instance.digest()
for i in digest:
    signature = signature + format((i>>4)&15,'x') + format(i&15,'x')

print('signature为:',signature)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值