好友
阅读权限30
听众
最后登录1970-1-1
|
本帖最后由 QingYi. 于 2022-1-9 19:48 编辑
首先抓包看看有什么数据,其他的数据都没什么,我们来看看这个signature
打开"jd龟",它告诉我们这里关键词
猜一猜,是上面这个
果然也是bs64加密
如果这个是null就等于null 否则就是后面那个鬼东东,怎么可能是null呢,我们往上看看
其实他就是一个反射
这个GAME_SIGNATURE本质上就是signature,像极了宏定义
于是乎我们去com.hoge.android.jni.Utils这个类下面找找,发现他是在so里面无疑了
没错,它的名字是这样的,前面前缀lib
把它抓出来,丢进去IDA中看看
在导出函数里面搜索signature,点进去
第一个是env,第二个也没用到,不用管,第三个第三四个是传进去的参数,再点进去signature
看见了sha算法,再点进去,确实有蛮像
现在我们使用Frida来Hook 这个函数,首先要找到这个地址
在这个界面按下tab键就可以跳到arm汇编代码了,前面这块就是地址
代码如下:
[Python] 纯文本查看 复制代码 # -*- coding: UTF-8 -*-
import frida, sys
jsCode = """
Java.perform(function(){
var resPtr = null;
// find the address of the "so" file
var soAddr = Module.findBaseAddress("libm2o_jni.so");
// printf
send('soAddr: ' + soAddr);
// function address
var sha1Addr = soAddr.add(0xA8E8 + 1);
send('sha1Addr: ' + sha1Addr);
Interceptor.attach(sha1Addr, {
onEnter: function (args) {
// 进入函数时的操作
send(Memory.readCString(args[0]));
send(args[1].toInt32());
resPtr = args[2];
},
onLeave: function(retval){
// 退出函数时的一系列操作
var buffer = Memory.readByteArray(Memory.readPointer(resPtr), 60);
console.log(hexdump(buffer, {
offset: 0,
length: 60,
header: true,
ansi: false
}));
}
});
});
""";
def message(message, data):
if message["type"] == 'send':
print(u" {0}".format(message['payload']))
else:
print(message)
process = frida.get_remote_device().attach("海博TV")
script= process.create_script(jsCode)
script.on("message", message)
script.load()
sys.stdin.read()
看不懂的去翻下官方文档就能懂了
res:
compare:
组限定长度为n的包,不懂的看下c语言官方api,前面定死,后面传来的
v4 和 a1 a2 有关系,a2是传的第一个,也就是版本号,v11 也就和a3有关系,自己琢磨琢磨 从反射那一段到汇编这一块的流程
后面getBytes 再进行b64 编码 完事了. |
免费评分
-
查看全部评分
本帖被以下淘专辑推荐:
- · 超值仓库|主题: 832, 订阅: 385
- · 加密解密|主题: 27, 订阅: 14
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|