首页 > 代码库 > Android 逆向初探(一)
Android 逆向初探(一)
逆向分析是一门技术,也是一门艺术。
由于Web安全相对于二进制安全,更容易入门,所以在最早的时候选择了相对简单的路。但随着接触这一行的时间变长,感觉局限于 Web 而抵触二进制实在太狭隘,所以我决定投入到Android安全的学习研究中。
0x1 安卓安全的大致细分
应用层Apk逆向、安卓设备框架、内核驱动等逆向、基于安卓的硬件产品逆向等。
1)移动APP漏洞审计挖掘
APP接口安全。把App看作web的前端页面来分析,就会有web相关的一些漏洞,比如逻辑漏洞,注入,xss漏洞等。但是除此之外移动APP有它自己的特点,自然会引入一些独特的问题,例如安卓里的组件漏洞、敏感信息泄露这些。
2)移动应用逆向、加固、破解
这部分大致是PC平台的扩展,现在流行的第三方加固方案有:邦邦加固、爱加密、娜迦、腾讯、360加固等,不过加密水平参差不齐,有些还是很好破解的。这块也是黑产聚集地,例如重打包、破解的利益链条。
3)平台攻防、平台漏洞挖掘、平台加固方案(例如ARM TrustZone)
漏洞挖掘包括Android、iOS系统和芯片、设备及驱动本身的各种漏洞挖掘,例如权限提升漏洞等,KeenTeam就做的这块。有些时候系统本身漏洞不好挖,就挖各种设备驱动的漏洞,柿子捡软的捏。
4)反病毒木马(检测以及杀毒)
和PC类似。
那么我目前学习的内容就是Android的破解加固相关。
0x2 如何学习安卓逆向
<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; color: #000000 } span.s1 { }</style>学习java基础,最好有Android开发基础,比如熟悉四大组件,NDK开发等。
学习c语言基础,了解常用的函数。
学习了解常见的apk内文件格式(dex,xml,so)
学习常用Java,Android开发工具的使用(Eclipse,Android Studio)
学习常用Android逆向工具的使用(Android Killer,Jeb,apktool,jadx,Ida Pro)
学习了解smali语言,能够进行一定的编辑和修改
学习了解Arm语法
学习网络抓包,了解常用抓包工具的使用,BurpSuite,Fidller
了解常用的加解密算法和编码,Aes,Rsa,Des,Tea,Base64,md5
常用的安卓程序调试与反调试手段-调试器检测与反检测/脱壳/反混淆
0x3 常用的破解手段
通过敏感字段,直接搜索关键点进行爆破
算法分析,尝试还原算法
网络验证,尝试网络抓包篡改数据
静态分析
动态调试
Xposed,cydiasubstrate对关键点进行hook
0x4 如何定位关键代码
1)信息反馈法。指先运行程序,然后根据程序运行时给出的反馈信息作为突破口寻找关键代码。
2)特征函数法。搜索Android SDK 中提供的相关API 函数。
3)顺序查看法。 逐行向下分析代码。
4)代码注入法。 属于动态调试方法,手动修改apk文件的反汇编代码,加入Log输出,配合LogCat 查看程序执行到特定点时的状态数据。
5)栈跟踪法。属于动态调试方法,输出运行时的栈跟踪信息,然后查看栈上的函数调用序列来理解方法的执行流程。
6)Method Profiling 。属于动态调试方法,主要用于热点分析和性能优化,该功能除了可以记录每个函数占用的CPU时间外,还能够跟踪所有的函数调用关系。
<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; color: #000000 } span.s1 { }</style>
Android 逆向初探(一)