APP新版已加固,方法失效

亲邻开门APP逆向

辣鸡软件,全是广告,直接开干。此方案是我在正常使用了几个月后做的总结,之前有在其他人博客进行相关思路的回复。

注:很多人一上来可能就是Charles,Fiddler等工具抓包,结果啥都抓不着,这是因为Flutter的接口请求,可以设置不走代理,所以拦截不到对应的关键接口,如开门。

准备

目标:亲邻开门App 4.7.7 最新版本

环境:安卓(已Root),Windows,WSL2

工具:Reflutter,Blutter,BurpSuite,Frida,IDA

Flutter应用抓包流程

ReFlutter 逆向APK文件,并且选择1,填写Windows的IP进行逆向:

reflutter

使用ReFlutter建议使用的uber-apk-signer进行签名,然后安装到手机中:

sign

启动BurpSuite,根据Reflutter所给配置设置对接代理配置

brup设置

启动APP,登入即可获取到对应的接口,点击开门即可抓取到对应的开门接口

成功抓取到登入接口

登入接口

成功抓取到开门接口

开门接口

分析及模拟发包

首先复制为curl直接执行,可执行成功

CURL执行

分析接口,直接通过POST接口,后面跟着各个参数

sessionId,appChannel,doorControlId,communityId,version 这几个参数可以看出来基本上算是固定参数,就是对应的用户sessionid,哪个小区,开哪个门,sessionId目前测试下来,如果每天调用应该是不会失效的

timestamp,nonce,sign 这几个参数比较重要,nonce和timestamp可以算随机值,sign看着是一个比较明显的MD5,那么如何拼接得到的sign值呢?经过各种排列组合,最终失败告终,猜测可能有其他的常量值在过程中使用,因此sign的获取就是我们的目标。

Blutter IDA启动~

注:在几个月前我使用blutter逆向时,可以直接通过上面Reflutter逆向后的应用进行后续分析,这样便可以边抓包,边frida分析,然而今天在我测试的时候,Blutter无法逆向Reflutter逆向之后的应用,因此在这一步之后的应用都是基于原有的安装包

安装包直接通过压缩工具解压,从原安装包的lib目录中提取libapp.so,然后使用blutter反编译即可获得frida脚本及ida方法名添加脚本

python3 blutter.py ../../qinlin/so/arm64-v8a ../out

将libapp.so 拖入ida中,并将addNames.py脚本执行可获取对应的方法名称

脚本执行

直接搜索对应sign方法,可以看出确实使用的MD5加密,我们可以获取到以下这些关键方法

方法

分析md5Encrypt方法:

md5Encrypt

安卓机启动frida-server,使用frida脚本讲hook convert_cb9128方法,然后点击开门,成功抓取了加密串,将此串进行MD5加密即可得到对应的sign

hook

结局

总结思路:首先我们使用reflutter逆向抓包,分析api,得到了对应接口及参数,并且通过这些信息能进行一定程度的加密猜测。通过blutter配合ida,以及对应方法名的猜测,我们可以基本确定使用的是MD5加密,直接hook对应的加密方法,由于blutter支持的不足,无法输出,因此我们进一步分析,其中有涉及到:

AllocateUtf8EncoderStub_65fd58,convert_cb9128,convert_cbba24,hexEncode_9687b4这几个方法,反正不差时间,逐个测试,最终在convert_cb9128这个方法中看到了比较关键的原始串,将此串加密即可得到对应的sign。

分析完成之后,自己用Golang写了程序,并且部署在内网,结合homeassitant外网访问实现了手机背部轻敲3下开门~

整个折腾过程,多次尝试,多次放弃,最终发现Flutter应用无法抓包的特点,随后查阅了相关资料,了解到了Reflutter及Blutter两款神器,最终在两款工具的帮助下成功逆向。

并没有结束!

是的,在上面的事情做完之后,剩下了一个最重要的问题,SessionId的续期,原本我以为只要我每天在固定时间开门一次,即可实现SessionId的自动续期,然而在正常运行3天之后,出现了过期的情况,好在通过各种分析,最后得到了解决~具体的SessionId续期方案便不在此叙述,感兴趣的自行分析。

Last modification:October 8, 2025
If you think my article is useful to you, please feel free to appreciate