首页 > 代码库 > Android 逆向初探(一)

Android 逆向初探(一)

<style>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 }</style>

   逆向分析是一门技术,也是一门艺术。

  由于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 逆向初探(一)