【Android安全-基于trace 进行数据流分析的一些实践】此文章归类为:Android安全。
声明
在前面逆向vmp的时候 handle分析写的是欲仙欲死,于是乎有了这篇文章,这篇文章的的灵感来源于https://bbs.kanxue.com/thread-270799.htm,由于vmp带来的代码膨胀,寻常的调试 f5 已经对无能为力了,既然寄存器跟踪不了 那我们来跟踪数据吧。
这里选用excel 作为trace 的一个后端,之所以用它,是因为我在b站看到了EXCEL 2024电竞大赛的相关视频 ,看的我是一愣一愣的,它主要有这几个优点
1.结果可视化
2.搜索速率强大
3.奇奇怪怪的功能丰富,不用自己造轮子
1.指令集
2、内存读写
3.寄存器
4.值分析(写不明白)
这里选用的libEncryptor 中的ttEncrypt算法进行实验 trace下来后开始分析。
可以看到7w条trace 如果是调试 那么你的键盘已经按烂了
数据分析有两种 一种是参数跟踪到结果 一种是结果跟踪到参数,这里用的是结果跟踪到参数 从下往上找。
先看看结果在哪
可以看到v9 长度为 v11 应该就是传出的结果了0x790103e700 excel根据地址从下往上搜索
那么现在的问题变成了 谁填写了这个地址
继续搜索memacc
填写这个地址的是个 aes算法
于是乎 问题变成了参数是怎么来
跟踪第一个参数 0x793b65fb60
发现 是由memcpy 赋值
于是乎问题变成了79011daa00 怎么来的
于是乎问题变成了78527c4960怎么来的
ida 查看这个地址
sha512
于是乎 原文怎么生成的
跟踪到 6ac4
一个填充算法
向上继续跟踪
又是一次sha512
继续向上
得知是由rand生成
说一下大致流程
rand 随机数 -> sha512 ->填充算法-> sha512 -> key
在完成整个trace后 可以发现基于数据流的分析可以让程序流程无从遁形 大大提高了逆向工程的效率,对比逆向vmp的handle的效率,数据流分析的效率大大提高的,我仅仅是用了excel的搜索功能,就将整个流程分析的差不多了。不想去逆向vmp的兄弟可以自己动手试试
这种trace的分析更像是ttd的一种简化版本 或者说没有ce的无赖之举,但是在trace过程中我尝试过值分析,但是带来的却是trace速度减慢,非常慢,我如果想知道一个值是指针还是地址 还是常数 ,字符串有没有什么更好的办法,利用frida的try catch 机制去强制读写 带来的却是性能的成倍削弱,在引用了缓存机制后,又发现缓存更新又是一个大麻烦,有没有大佬捞一手
num: number;
addr: NativePointer;
offset: NativePointer;
asm: string;
mem_acc: string;
reg_analyse: string;
func_analyse: string;
X0: NativePointer;
X1: NativePointer;
X2: NativePointer;
X3: NativePointer;
X4: NativePointer;
X5: NativePointer;
X6: NativePointer;
X7: NativePointer;
X8: NativePointer;
X9: NativePointer;
X10: NativePointer;
X11: NativePointer;
X12: NativePointer;
X13: NativePointer;
X14: NativePointer;
X15: NativePointer;
X16: NativePointer;
X17: NativePointer;
X18: NativePointer;
X19: NativePointer;
X20: NativePointer;
X21: NativePointer;
X22: NativePointer;
X23: NativePointer;
X24: NativePointer;
X25: NativePointer;
X26: NativePointer;
X27: NativePointer;
X28: NativePointer;
FP: NativePointer;
LR: NativePointer;
SP: NativePointer;
NZCV: NativePointer;
PC: NativePointer;
num: number;
addr: NativePointer;
offset: NativePointer;
asm: string;
mem_acc: string;
reg_analyse: string;
func_analyse: string;
X0: NativePointer;
X1: NativePointer;
X2: NativePointer;
X3: NativePointer;
X4: NativePointer;
X5: NativePointer;
X6: NativePointer;
X7: NativePointer;
X8: NativePointer;
X9: NativePointer;
更多【Android安全-基于trace 进行数据流分析的一些实践】相关视频教程:www.yxfzedu.com