遇到了某个金融app,有各种检测,觉得可以分享一下。
声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途给予盈利等目的,否则后果自行承担!
打开apk,因为用的是kernelSu隐藏的root,一切正常,没有闪退,没有报错。
开启代理抓包,网络连接失败,抓不到登录包。不出意外是存在证书或者代理检测。
一把梭哈,先上LSPosed插件,算法助手pro,非常的好用,继承了很多功能
勾选网络环境的几个
burp尝试抓包,成功抓到数据包。
如上图所示,刚过了一座山,又有一条河。请求包和响应包都加密了。接下来我们寻找加密的位置和算法。
要寻找加密位置,有几种思路。
-
fuzz定位加密方法:假设apk采用了通用的加密算法,那我们frida hook加密算法的脚本 或者借助算法助手的算法分析定位。
-
我们发送请求是需要点击按钮的,我们可以hook按钮,然后根据调用栈找到相应按钮事件的代码位置,然后分析上下文
-
如果类名未混淆,根据开发的命名习惯,objection搜索类中带有encrypt、security等字段,然后批量hook这些,查看是哪个类相应了。
apk脱壳
fart脱壳,或者其他脱壳办法
有一个免费的在线脱壳网站,挺好用的,需要微信注册登录
https://nop.gs/
脱完可以看了,搜索关键词,找到了几个类,优先看自定义的加密类
查看哪些类引用了这些类
依次查看后,确定是下图的类是请求包的加密类,算法sm国密系列
最后得出请求包加密的组成部分
SM2(“要加密的字符串”, “密钥”) + 分隔符 + SM3(“要加密的字符串”)
通过hook 加密函数,可得到明文的信息。
第一次构造数据包
我根据得到的算法,开始构造自己的数据包。然后我就开始了漫长的测试,失败,再测试。一度让我怀疑人生,直到我对比了我SM3的hash和请求包中的hash,二者完全不一样。
我恍然大悟,丫的开发他魔改了加密算法!!!
一阵头秃,只能去看分析加密算法了。定睛一看,哦吼,是native层的,在so里面。
也是十分幸运,so中函数名没进行混淆
然而,我浅薄的so功底,着实有些捉襟见肘,跟着跟着就找不到了。不过,我们没必要这么死板。要构造加密请求包不一定要完全复现出加密步骤,可以通过frida hook,然后rpc调出去,又或者根据通过unidbg模拟环境主动调用so函数。
这些留到下期再说。
往期推荐
价值$5,825赏金的tomcat信息泄露(CVE-2024-21733)
代码审计 | API批量分配导致的普通用户垂直越权到admin
原文始发于微信公众号(进击的HACK):一键过某金融apk抓包检测并定位加密位置(一)