分析Android程序

静态分析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. 系统定制脱壳法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿航的博客

我比你有钱,请不要打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值