某投诉软件flutter逆向分析signature

so层分析工具

Binary Ninja


image.png
  • 这个工具真用不习惯,还是建议用ida

参看资料

https://blog.csdn.net/A_fanyifan/article/details/139727512
https://blog.csdn.net/weixin_51111267/article/details/131733067

目标app

6buR54yr5oqV6K+JMy4wLjDniYjmnKw=

过抓包检测

  • flutter 有ssl证书校验,常规方式无法抓到包,通过frida 把它内置的ssl校验hook掉
  • 使用反编译工具打开libflutter.so文件,搜索ssl_server、ssl_client


    image.png
  • 根据代码引用、在sub_6dbd94中进行调用,将次hook掉即可
function hook_ssl() {
    Java.perform(function () {
    var base = Module.findBaseAddress("libflutter.so");
    var ssl_crypto_x509_session_verify_cert_chain = base.add(0x6dbd94);
    console.log("找到函数偏移地址:",ssl_crypto_x509_session_verify_cert_chain)
    Interceptor.attach(ssl_crypto_x509_session_verify_cert_chain, {
        onEnter: function(args) {
            console.log("hook 开始!")
        },
        onLeave: function(retval) {
            console.log("返回值: " + retval);
            retval.replace(0x1);
            console.log("解除ssl验证成功\n---------------------");
      }
  });
}
    )};
setTimeout(hook_ssl,1690)   // 设置延时找对hook时机(太快函数还没加载出来,太慢app已经发起请求了)
image.png

dump出dart文件分析

  • reflutter 工具. https://github.com/Impact-I/reFlutter
  • 根据reflutter教程,将apk重新打包,并且安装
    1、 pip install reflutter
    2、 reflutter app.apk
    image.png

    3、通过reflutter 会生成一个release.RE.apk 文件,此文件还需要进行签名,才能安装上去
    4、使用uber-apk-signer.jar 对release.RE.apk 进行签名 https://github.com/patrickfav/uber-apk-signer
    java -jar uber-apk-signer.jar --allowResign -a release.RE.apk
    
    5、将签名好的apk,安装到手机,打开并且运行。app无法联网没问题,我们只需要将生成的dump.dark pull下来分析即可
    adb pull /data/data/包名/dump.dark
    

frida 分析

1、根据抓包,猜测此signature是sha256加密
搜索sha256 相关的字段,定位函数偏移


image.png

image.png
  • hook
        var funcAddr = addr.add(0x00000000001bb974);

        Interceptor.attach(funcAddr, {
            onEnter: function (args) {
                this.x1 = args[1];
                console.log('hash256Str args0:', hexdump(args[0]))
                console.log('hash256Str args1:', hexdump(args[1]))

            },
            onLeave: function (retval) {
                console.log("*******************")
                console.log('hash256Str返回值:', hexdump(retval))
            }
        })
image.png

2、验证


image.png

over

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容