逆向学习笔记(2)-分析Android程序

  • A+
所属分类:笔记

静态分析Android程序

代码定位技巧

  1. 入口分析法 在反编译出的AndroidManifest.xml文件中找主Activity,然后查看其所在类的OnCreate()的代码,追踪软件的执行流程。
  2. 信息反馈法 先运行程序,然后讲程序运行时给出的反馈信息作为突破口来寻找关键代码。程序中用到的字符串会存储在String.xml文件中或者被硬编码到程序代码中。
  3. 特征函数法 弹出注册码错误的提示信息需要调用Toast.MakeText().Show()方法, 在反汇编代码中直接搜索“Toast” 定位调用代码。如果代码中使用了按钮, 必然会为其注册按钮响应事件。 在反编译代码中搜索OnClickListener()就可以列出所有的按钮事件。

动态分析Android程序

动态分析框架

DroidBox:主要用于对敏感API与系统网络流量进行监控, 以及对程序进行简单的模糊测试(Fuzz Testing )。(过时)

MobSF:同时支持Android、iOS、Windows平台上的软件分析, 它的测试框架同时支持静态分析、动态分析WebAPI测试。

动态分析技巧

  1. 代码注入法 先反编译Android程序,然后在反汇编出来的smali文件中添加Log调用的代码,最后再重新打包程序运行,查看输出结果。
  2. 栈跟踪法 工程量大的时候,代码注入法就会显得非常乏力(不断地手动注入Log输出代码)。栈跟踪法主要操作是手动向反汇编后的smli文件中添加用于输出栈跟踪信息的代码,采用栈跟踪法时只需要知道大概的代码注入点, 而且注入代码后的反馈信息比Log注入要详细得多
  3. Method Profiling(方法剖析) 在程序运行时记录每个被调用的API的名称,只需查看API的调用序列, 就可以了解这段代码的用途。
  4. UI检查 dumpsys命令:使用该命令可以打印当前系统中运行的所有程序的组件信息。  

动态注入

动态注入指将一段程序或一个完整的可执行文件加载到目标程序中。

动态注入与Hook的区别:Hook会修改原方法或原函数的指针,让其去执行Hook的方法。而动态注入则是将一段代码程序写到目标程序的内存空间中,然后修改目标程序的指令指针。

软件保护技术

软件水印技术,混淆技术,防篡改技术,反调试技术,运行环境检测。

软件混淆技术

代码混淆:对源码进行静态修改的源码混淆,基于源码模板展开的模板混淆。

编译期混淆:编译期泪淆分为编译器前端在进行原生代码分析时采取的前端混淆, 以及在编译原生代码并生成中间代码IR时采取的IR混淆。

二进制混淆:典型的有生成DEX文件后对其进行反编译,对DEX文件进行二次混淆。

  1. 源码混淆
  2. 模板混淆
  3. AST混淆
  4. IR混淆
  5. DEX混淆 DEX编译时混淆方法ProGuard,proguard-android.txt 与 proguard-rules.pro 用于存放ProGuard的配置信息,描述DEX文件中的哪些类和方法将参与混淆、 哪些不参与混淆。
  6. DEX二次混淆 不仅提供了ProGuard所具有的基本混淆能力,还支持DEX的流程混淆字符串混淆

资源保护

资源保护主要应用在三个方面:App资源被篡改,游戏素材资源被窃取,游戏脚本资源被破解。

完整性校验

反调试技术

方法:在程序启动过程中检查是否被调试器附加,自身进程的父进程是否存在异常,进程列表中是否有正在运行的调试器等。

软件壳

Android平台上的软件壳:

第一代壳(压缩壳,加密壳)(动态加载型壳):对本地的DEX文件,so库,资源文件进行加密在运行时进行动态还原。

第二代壳(保护壳)(代码抽取型壳):在DEX方法执行前解密,执行后加密,防止内存Dump的方式对DEX文件进行脱壳。

第三代壳(虚拟执行壳)(代码混淆壳):基于LLVM Pass的虚拟执行壳使用指令变换,花指令混淆,指令膨胀,代码流程混淆等。

动态加载型壳

  1. 缓存脱壳法 一些软件壳没有处理DEX优化时缓存的路径,将优化结果放到了默认的 /data/dalvik-cache目录下,只需在该目录下的ODEX文件取出进行deodex操作即可脱壳。
  2. 内存Dump脱壳法
  3. Hook脱壳法 Hook脱壳法与单纯的内存重组脱壳法不同之处在于:
  4. 系统定制脱壳法  

已有的事,后必再有,已行的事,后必再行。

——玄易子

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: