台球游戏中的B(l)utter逆向案例分析
星球链接 https://t.zsxq.com/kNlj4
1.分析样本
首先我们先分析一下抓包:有个sign值 是32位 我们大概率猜测是md5.

接着分析apk把apk后缀改成 zip 我们在lib目录下发现有 libapp.so 和 libflutter.so的特征,所以他就是一个flutter写的app。

360加固 ,在用reflutter的时候 重签名安装后会闪退所以我们今天使用一个新的工具:B(l)utter

2.B(l)utter
项目地址:worawit/blutter:Flutter 移动应用程序逆向工程工具 (github.com)

3.使用工具逆向
具体使用
把 libapp.so 和 libflutter.so 复制到 blutter 文件目录 新建一个 arm64-v8a(这个叫啥都无所谓)

打开x64 Native Tools

因为我这个是第二次运行了 所以编译会快一些,不用去下载一些东西。

在文件夹里 会多出 这些文件:

用 Script file进行导入ida_script的文件ida_script/addNames.py,符号就被全部恢复出来

因为之前 我们已经猜测是md5了所以直接在ida中搜索 md5关键词

我们一 一去测试 去hook:
最后发现 在 crypto$src$md5MD5SinkupdateHash_bee9f0 里面我们发现了提交数据包的明文:

代码如下:
var addr = Module.findBaseAddress('libapp.so');
console.log(addr); //0xb696387d
var funcAddr = addr.add(0xBEE9F0);//hook地址
console.log(funcAddr); //0xb6980000
// get_info(funcAddr)
Interceptor.attach(funcAddr, {
onEnter: function (args) {
console.log("hook到了------------------")
this.x1 = args[1];
console.log('args0:',args[0])
console.log('args1:',args[1])
console.log('args2:',hexdump(args[2]))
console.log('args3:',hexdump(args[3]))
console.log('args4:',hexdump(args[4],{length:1000}))
// console.log('args5:',args[5])
// console.log('args6:',args[6])
// console.log('args7:',args[4])
// console.log('args8:',args[8])
// console.log('args2:',hexdump(args[2]))
},
onLeave: function (retval) {
console.log("--------------------")
// console.log(Memory.readCString(this.x1));
// console.log(Memory.readCString(retval));
console.log('返回值:', hexdump(retval))
}
})
hook结果:

4.验证

所以今天的案例就到这里了!结束 my_wx = 15232101239

作者:带带弟弟学爬虫__