Android逆向系列--分析思路&经验

遇到问题解决后要及时写下来解决方案,好记性不如烂笔头

背景

移动安全技术分析涉及到方方面面的技术细节,一次完整的技术分析流程可能涉及到多种多样的分析技巧,本文主要是对这些分析技巧进行一个阶段性总结,以及一些经验的分析和一些未解问题的探索

分析思路

如何快速定位到具体的算法位置?

  1. 通过字符串定位
  • 这是最基础的定位方式。缺点: 有可能被抹除或者加密
  1. 通过UI界面定位
  • 比如可以先定位Activity,然后定位UI元素,再定位OnClick等函数(也可以直接进行Hook),具体一步步跟着走。缺点:链路太长
  1. 通过LOG定位
  • 可以通过打开APP全局Log开关,观察Log日志寻找突破口。缺点:日志打印可能较多
  1. 从开发的角度入手
  • 比如发送网络请求的参数定位,可以从各类网络框架入手,这块可以更深入

分析经验

P0

  • 开始研究分析之前,最好先整理一下需求,真正弄清楚需要找到的点,然后先收集相关资料,再开展分析
  • 尽量从开发的角度入手去查找问题的结果,似懂非懂的函数一定要google其作用!!!
  • 其实关键思路就是寻找输入以及确定输出,可以分割成每一个小部分,然后进行分析

P1

  • 通过 uiautomatorviewer.bat 工具 定位到相应的信息
    • 如果发现通过public.xml中的id值查找不到结果,可以直接使用R.xxx.xxx进行查找id值
    • 获取手机当前屏幕的activity命令:adb shell dumpsys activity top
    • 当想要寻找一个控件所对应的类时,可以通过查找其对应的xml文件中的信息,因为如果是自定义的空间View类,都是使用全类名限定命名空间
  • 有时候HOOK成功但是没反应有可能是方法没被调用,此时可以清空app的缓存然后重新打开进行尝试
  • 一个类的变量初始化一定要找全所有的初始化地方,否则会绕很多弯
  • smali注入的时候,as生成的smali代码需要注意将其中的代码路径全部替换掉
    (jeb)找到关键点后一定要备注一下关键词
    规则1: 标识符重要程度排序 E:关键词 > W:关键词 > D:关键词 > I:关键词 > V:关键词
    规则2: 暂时不详的同一使用 V标识符
    规则3: 接口实现统一使用I标识符
  • 如果有中间结果的,最好需要保存一份中间结果,以防止以后出错恢复现场难度增大
  • 可以使用具有不同特征的插桩法,定位关键的位置

问题探索

有没有一种更加通用的定位关键函数的方式方法?
欢迎评论区讨论

参考

定位到小红书Sign算法 --本文讲解通过OKHttp框架如何定位关键算法位置

你可能感兴趣的:(Android逆向分析,逆向分析,安全)