台球游戏中的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
作者:带带弟弟学爬虫__