笛里谁知壮士心,沙头空照征人骨。这篇文章主要讲述Android 逆向初探相关的知识,希望能为你提供帮助。
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px;
font: 11.0px Helvetica;
color: #000000 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px;
font: 11.0px Helvetica;
color: #000000;
min-height: 13.0px }
span.s1 { }
span.Apple-tab-span { white-space: pre }
逆向分析是一门技术,也是一门艺术。
由于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 如何学习安卓逆向
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px;
font: 11.0px Helvetica;
color: #000000 }
span.s1 { }学习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)信息反馈法。指先运行程序,然后根据程序运行时给出的反馈信息作为突破口寻找关键代码。
【Android 逆向初探】2)特征函数法。搜索Android SDK 中提供的相关API 函数。
3)顺序查看法。 逐行向下分析代码。
4)代码注入法。 属于动态调试方法,手动修改apk文件的反汇编代码,加入Log输出,配合LogCat 查看程序执行到特定点时的状态数据。
5)栈跟踪法。属于动态调试方法,输出运行时的栈跟踪信息,然后查看栈上的函数调用序列来理解方法的执行流程。
6)Method Profiling 。属于动态调试方法,主要用于热点分析和性能优化,该功能除了可以记录每个函数占用的CPU时间外,还能够跟踪所有的函数调用关系。
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px;
font: 11.0px Helvetica;
color: #000000 }
span.s1 { }
推荐阅读
- win7激活码64位分享制作详细说明
- Android端 APP 内存分析使用工具进行APP的内存分析
- Android项目架构之业务组件化
- Android中的沉浸式状态栏效果
- Android自定义View——动态进度条
- 问题AndroidStudio导入项目一直卡在Building gradle project infod的最快速解决方案
- Android6.0中的权限
- RxAndroid/java小记
- Android之Service的细枝末节