遇到问题解决后要及时写下来解决方案,好记性不如烂笔头
背景
移动安全技术分析涉及到方方面面的技术细节,一次完整的技术分析流程可能涉及到多种多样的分析技巧,本文主要是对这些分析技巧进行一个阶段性总结,以及一些经验的分析和一些未解问题的探索
分析思路
如何快速定位到具体的算法位置?
- 通过字符串定位
- 这是最基础的定位方式。缺点: 有可能被抹除或者加密
- 通过UI界面定位
- 比如可以先定位Activity,然后定位UI元素,再定位OnClick等函数(也可以直接进行Hook),具体一步步跟着走。缺点:链路太长
- 通过LOG定位
- 可以通过打开APP全局Log开关,观察Log日志寻找突破口。缺点:日志打印可能较多
- 从开发的角度入手
- 比如发送网络请求的参数定位,可以从各类网络框架入手,这块可以更深入
分析经验
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框架如何定位关键算法位置