Flutter逆向基础

参考文章
Flutter 逆向基础
本文只是一些不是很常被提到的知识,作为一些补充

工具

一般来说是用 reFlutter 和 blutter 比较多

reFlutter 的原理是通过 patch 使得应用自己吐出 dart 类信息。但是其产生的类信息只存在偏移,对与分析的帮助有限,所以一般只在 blutter 不能使用的时候使用。

分析基础

通过工具只能产生一定的辅助偏移,其余的工作,由于 dart 已经被编译为 native 代码,需要手动分析。

blutter 的输出

可以先从 blutter 的输出入手。这里拿一个之前某个朋友让我分析的样本为例,使用正确的方法运行 blutter 了之后就能输出不少东西

objs.txt
对应着所有的类还有他们的偏移

ida_script
这里面放着的是用于给 ida 添加信息的,所以要保留
分析完之后就要执行这个脚本添加信息。

blutter_frida.js
用于 frida hook,不再赘述

pp.txt

首先,dart 的 object 也是被序列化的
Flutter 逆向基础
加载的时候又 libflutter 对这个序列化的信息进行反序列化,然后被加载到内存中的 dart object pool
Flutter 逆向基础
所以,这里 pp.txt 就有用了, 他给出了一些 object 对于 object pool 的偏移

Obj pool

第一行写了 pool 的基址,然后接下来所有的 obj 都是对于基址的偏移。

对于 arm64,对于 flutter 来说,引用这些 obj 的汇编代码是有固定模式的
Flutter 逆向基础

对于 X5,这个寄存器是不确定的,可能是别的寄存器。但是 LDR 偏移的操作,是固定的,而且都会有 LSL#12 这样的操作。

不过这里的信息更多是一些基本知识,对于 IDA 来说还有更方便的方法。还记得之前使用的 ida 脚本吗?添加完毕之后,选择 LocalTypes 选项卡,就能看到完整的,存在于 IDA 中的 pp 了
Flutter 逆向基础
当然,刚才所说的汇编代码还是有用的,基本上就是当你在读汇编的时候,能够意识到这个地方是在加载 obj pool 中的 obj

正文完
 0
评论(没有评论)