启动恶意软件分析的一个好方法是确定与 C&C 服务器的通信协议 。这可以说明很多恶意功能 。里面有一个字符串 , 对应于我们在钓鱼电子邮件中看到的网站:
文章插图
恶意 APK 中字符串中 C&C 服务器的地址
然而 , 当我们试图找到对此字符串的一些引用时 , 分析失败:
文章插图
IDA 中没有对 C&C 服务器字符串的引用
我们的目标是创建对该字符串的引用 , 以定位执行 C&C 通信的代码 。
Flutter -re-demo 和 reFlutter 可以用来处理 Flutter 应用程序 , 其主要思想是使用运行时快照来创建 Dart 对象并查找对它们的引用 。reFlutter 的主要目的是收集函数的名称 , 而 flutter re-demo 允许我们处理在应用程序执行期间收集的内存转储 。
然而 , 除了内存快照之外 , 还需要一些更多的运行时信息 。Flutter 运行时使用堆来创建对象 , 并将指向已创建对象的指针存储在一个称为对象池的特殊区域中 。指向该池的指针被传递到寄存器 X27 中的方法 。我们需要找到对象池的位置 。
flutter-re-demo 使用 Frida 收集内存转储并获取对象池地址 。如果我们使用在 flutter-re-demo 存储库中可用的 dump_flutter_memory.js 脚本运行 APK , 我们会看到所需的地址:
文章插图
带有所需地址的 Frida 脚本输出
现在我们已经拥有了开始一个高效的逆向工程所需的所有元素 。
在用 map_dart_vm_memory.py 加载转储文件并运行 create_dart_objects.py 脚本后 , 我们现在至少可以看到一些对象:
文章插图
脚本创建的对象
有一个名为 create_dart_objects.py 的脚本 , 用于创建 dart 对象 。该脚本通过遍历对象池、解析记录和创建对象来工作 。脚本没有关于这些对象的信息 , 脚本会为它们创建以下描述对象格式的结构:
文章插图
这里的 NNN 被 "class id" 取代 , 如下所示:
由 create_dart_objects.py 创建的结构
在 Flutter 应用程序逆向工程时 , 研究人员注意到最后一个字段(unk)经常被用作指针 。可以考虑将该字段从简单的 Qword 转换为 OFFSET QWORD 。这可能会给带来一些误报 , 但也可能非常有助于创建参考 。因此 , 我们决定更改由脚本创建的 unkin 结构的字段类型 。以下是对原始脚本的更改:
文章插图
对 dart_obj_create.py 脚本的更改
研究人员提到的存储库包含一个用于创建对 Dart 对象引用的脚本:add_xref_to_art_objects.py 。当运行它时 , 该脚本会遍历代码并创建对 create_Dart_objects.py 脚本创建的 Dart 对象的引用 。不过此时仍然只有一个对我们感兴趣的字符串的引用 , 即来自对象池的引用:
文章插图
没有对 C&C 服务器 URL 的引用
我们的第一个想法是 , 也许根本没有交叉引用?不过这不可能 , 存在几个交叉引用 , 例如 , 这个对象就具有引用:
文章插图
几个从函数到对象的引用
这是从函数中引用的对象:
引用在函数代码中的外观
通过浏览 add_xref_to_dart_objects.py 的代码 , 我们可以看到文件 dart_obj_xref.py 。该文件还遍历代码 , 尝试根据寄存器 X27 提取对数据的引用 , 计算这些引用的偏移量 , 最后创建 IDA 引用 。对代码的分析表明 , 原始脚本支持访问该对象的两种 ARM 代码变体:
代码是否使用了一些其他指令来引用寄存器 X27?让我们检查一下 。为了方便起见 , 让我们修改脚本 , 并为用 X27 处理的每条指令添加一条注释:
推荐阅读
- 陈美霖|深扒细节,张波贪图的不是叶诚尘的美貌,而是令人发指的虚荣心!
- 刘诗诗|刘诗诗吴奇隆婚变风波升级!男方被扒更多黑料,不止是立场问题!
- 浩室舞|新版“黄蓉”一亮相,就把影视圈的“遮羞布”,扒得一干二净
- |深扒李诞公司劣迹艺人,卡姆吸毒,孟川被禁,如今House冒犯红线
- |江疏影私生子风波升级!除了狗仔爆料,更多蛛丝马迹被扒!
- |解决夏季肥水鱼难钓!四方面入手有效针对,走出有鱼钓不到的困境
- 江疏影|这一次,江疏影被扒了个底朝天!网友:没想到这么乱!
- 浩室舞|脱口秀演员House致歉,表演时言论引用不当比喻,李诞黑历史也被扒
- 浩室舞|脱口秀演员House道歉,表演时引用不当比喻,李诞黑历史也被扒
- 江疏影|37岁江疏影被扒了个底朝天,原来我们全错了