点击上方蓝字关注我们
随着Android设备的急剧增长和逆向工具链的成熟,Android App的安全性问题日益突出,其中二次打包问题较为严重。
恶意攻击者利用反编译工具对App进行源码反编译、植入广告SDK、插入钓鱼页面,重打包和重签名后,恶意篡改后的App通过非法渠道流入市场。终端用户如果使用这些App,会有隐私数据泄漏、资金财产被盗取的风险。
本文将介绍自己的一次Android逆向入门实战经历,分别是在native层和so层进行攻击。以后有机会向大家介绍Android防护相关。
CrackMe是一些公开给别人尝试破解的小程序。在这里我们以两个CrackMe.apk为例进行说明。
AndroidKiller_v1.3.1IDA PRO 6.8
IntelliJ IDEA
我们在native层对App 1进行攻击,共有三种方法:正向分析法、Smali修改法、IDA动态调试法。
2. 伪Java中寻找关键代码,其跳转关键句在if..else语句,其中调用了getMD5str()函数,要搞定这个CrackMe需了解该函数。
3. 将getMD5str()函数复制到IDEA中,去掉冗余代码,尝试对伪代码进行调试。传进一个字符串"kevin",输出"EBCD3075"。至于getMD5str()函数的具体功能是什么,不是很重要,有兴趣的同学可以反编译后分析下。
使用Android Killer将Java代码转换为Smali代码,修改Smali代码,重打包重签名,随便输入什么均可Crack掉。
修改前:"if-eq vA, vB, :cond_" ##如果vA等于vB则跳转到:cond_
修改后:
"if-ne vA, vB, :cond_" ##如果vA不等于vB则跳转到:cond_
使用IDA动态调试Smali代码,当输入用户名时,在Smali中设置断点,可以直接读出相应的密码。
我们在so层对App 2进行攻击。攻击步骤如下:
2. 此时native函数GetNative只有声明,具体实现在libegg.so文件中。JNI接口作为Java层和Native层交互的桥梁,使得Java层和Native层之间可以互相调用。
3. 使用IDA动态调试或直接ALT+T进行搜索GetNative。根据跳转和传送指令可知其密码。
如果想要系统学习网络安全技术
不妨加入知识星球课程
《60天入门网络安全渗透测试》
从入门到案例,贴合实战
轻松易懂、好玩实用
限时领取
知识星球
活动优惠券
跟着60天入门学习路线一起学
期待你的到来!
往期推荐
从入门到入狱的技术,可以学,别乱用!
网络安全学习方向和资源整理(建议收藏)
一个web安全工程师的基础学习规划
资源 | 渗透测试工程师入门教程(限时领取)
5年老鸟推荐10个玩Python必备的网站
推荐十个成为网络安全渗透测试大佬的学习必备网站!
那些社工师不为人知的秘密。。。
更多内容请关注公众号
网络安全自修室
点个在看你最好看