APP新版已加固,方法失效
亲邻开门APP逆向
辣鸡软件,全是广告,直接开干。此方案是我在正常使用了几个月后做的总结,之前有在其他人博客进行相关思路的回复。
注:很多人一上来可能就是Charles,Fiddler等工具抓包,结果啥都抓不着,这是因为Flutter的接口请求,可以设置不走代理,所以拦截不到对应的关键接口,如开门。
准备
目标:亲邻开门App 4.7.7 最新版本
环境:安卓(已Root),Windows,WSL2
工具:Reflutter,Blutter,BurpSuite,Frida,IDA
Flutter应用抓包流程
ReFlutter 逆向APK文件,并且选择1,填写Windows的IP进行逆向:
使用ReFlutter建议使用的uber-apk-signer进行签名,然后安装到手机中:
启动BurpSuite,根据Reflutter所给配置设置对接代理配置
启动APP,登入即可获取到对应的接口,点击开门即可抓取到对应的开门接口
成功抓取到登入接口
成功抓取到开门接口
分析及模拟发包
首先复制为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方法:
安卓机启动frida-server,使用frida脚本讲hook convert_cb9128方法,然后点击开门,成功抓取了加密串,将此串进行MD5加密即可得到对应的sign
结局
总结思路:首先我们使用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续期方案便不在此叙述,感兴趣的自行分析。
117 comments
学习学习
认真学习下
学习一下
广告确实烦人,学习一下
学习一下
open open 开门开门
学习下
学习一下
感谢,学习一下
研究下怎么抓包,就能接HA了,学习下
困扰得很,开门反应也慢。来学习下。
学习一下
这破软件广告太多了,来学习一下看怎么把广告屏蔽了
学习一下
学习一下OωO
学习一下
学习下
您好,学习一下,这个软件广告太多了
学习一下
学习中,赞
抓了好久亲邻开门了
学习学习
学习一下,编程小白,想绕过这个毒瘤app
open the door!
学习一下、从panfake过来找教程的
想问下大佬、上面内容提到那个生成sign的加密串,那frida是需要保持运行的吗,后面可以脱离手机使用吗
这个教程主要是逆向了sign的生成过程,sign是接口请求中最难得到的一个部分,其他的都是显式的参数,比如你的楼栋号啥的,抓包都能复用,只有这个sign是可能变化的,所以只要你得到sign的获取过程了,那么你就可以通过接口调用去执行对应操作。
大佬 能不能说下SessionId续期,纯小白好不容易搞好sign
抓包仿照APP启动时候的接口调用 他怎么调你怎么调就行
我这开门请求正常,但是发别的请求*(checkLogin 和 app/user/login 都试了) 就响应 您还没有登录,或者登录已超时,请重新登录
学习一下
open the door
open open 开门开门
学习一下
学习学习
学习学习下,谢谢
学习一下
学习学习下,谢谢
学习一下
来学习一下大佬的方法
学习一下
来学习一下,毒瘤APP
想看看
又看不到了
全他妈是广告也是服了
不错,过来学习了
来参观学习辣
试试
学一下
学习学习
搞搞事情
学习学习
感谢感谢
试试
来学习一下
来开门了
多谢探索,学习一下。
学习学习
OK
学习
请求阅读
学习学习
我也来学习一下|´・ω・)ノ
学习一下
感谢,学习一下
学习了解一下 最近在关注这个
可以给个提示吗? 保活是只和某个关键的请求相关 ,还是需要多个呢?
具体哪些接口只有软件的开发人员知道,你可以自己测试,最简单的就是它调用了什么你就调用什么
恩 想排除下错误答案的 感谢回答 我自己试试
同样被垃圾软件困扰,前来学习
学习一下 想介入 Homeassistant 做自动化
插个眼
芝麻开门 学习一下
芝麻开门~
看看大佬抓包分析的全过程,学习一下
开门
OωO
芝麻开门
用了旧版的mobileapi.qinlin...的接口,但是过个十几天cookie就会失效,打开app就需要重新登录,不知道咋整了。。看了抓包文件,不知道哪个能保活cookie
试试抓下新版的app
抓了新版的,是多了些请求,但感觉都没啥用哇..没看到类似于expire相关的字段,大佬能不能提示下...(╯‵□′)╯︵┴─┴
每日模拟APP请求接口
求续签的方案,作者老大!
续token
大佬,给我看一下
也是在用这个门禁,这个app真是垃圾,布局很差,还好多广告
纯构式毒瘤软件
看看大哥
估计看不懂 还是想看看
学习学习
学习学习
学习一下
求看看
学习一下
怎么解决有效期问题?半小时失效
抓包观察哈
看看看看
给作者点赞
open open 开门开门
从panFake那看到就一直在等LZ的教程了
很牛逼
学习下
学习一下
学习下大佬
学习学习
学习
看看~~~
看看看看
研究了好几天了,过来学习下
想看看
我就看看
看看看看
留名
技术交流
研究一天了还是不知道咋抓包..来学习下
看看大哥
open open 开门开门