行业新闻

工具推荐 | GDA:中国首款现代交互式反编译器

工具推荐 | GDA:中国首款现代交互式反编译器

简介(新版)

GDA 是一个完全用 C++ 编写的 Dalvik 字节码反编译器。与其他应用反编译器不同,GDA 不依赖于 Java VM,支持 APK、DEX、ODEX、OAT、JAR、AAR 和 CLASS 文件。

项目地址:https://github.com/charles2gan/GDA-android-reversing-Tool

简介:http://www.gda.wiki:9090/introducation.php

一、主窗口

打开GDA,将我们要分析的APK文件拖到软件UI上:

1.目标文件的基本信息;
2.DEX文件使用的API
3.查看DEX中的所有字符串;
4.查看所有方法使用的所有字符串;
5.提取DEX文件中的所有URL(Pro版本);
6.查看AndroidManifest文件;
7.可编辑的十六进制查看器;
8.恶意行为检测;
9.漏洞扫描(专业版);
10.隐私泄漏扫描(专业版);
11.展开权限,查看权限所属的模块/方法;
12.点击进入入口函数(方法);
13.连接Android设备进行内存转储;
14.搜索和访问历史记录,双击可查看;
15.目标文件中各元素的比例分布;
16.DEX头,点击“DexClass*”项显示相应头,每个色块代表不同的区域头。当鼠标在其上移动时,将显示提示。在偏移区域中单击鼠标右键并跳转到参考位置;
17.加壳的识别;
18.点击代码中的相关对象时,显示该对象的索引值;
19.点击代码中的相关对象时,会显示该对象的包名;
20.单击代码中的相关对象时,将显示该对象的名称。

二、快捷键

快捷键说明

快捷键描述F5

切换java和smali代码

F

通过数据流分析跟踪参数和返回值

X

交叉引用、定位调用者(字符串、类、方法、字段、Smali、Java)

Esc/<-/Backspace

返回上次访问

->

转至下一次访问

G

通过输入偏移量跳转到某个地方

N

重命名变量/方法/类名

S

按给定字符串搜索所有元素

C

注释。只支持Java代码

DoubleClick

双击method/str/field/class名称查看对象

M

将光标置于 Smali 代码行并按“M”键编辑指令

UP\bigtriangleup

按“向上”键访问树控件中的向上方法

Down\bigtriangledown

按“向下”键访问树控件中的向下方法

D

转储方法的二进制数据,仅支持Smali模式

Enter

编辑框修改生效

H

以十六进制显示数据

Ctrl+H

弹出搜索历史窗口

Ctrl+A

全选

Ctrl+C

复制

Ctrl+V

粘贴,仅适用于可编辑框

Ctrl+X

Ctrl+F

找出当前窗口的字符串

Ctrl+S

将修改保存到 GDA 数据库文件中

三、Android恶意软件静态分析示例

本节通过一个恶意软件示例文件介绍GDA的基本用法。

A.总结分析

总结分析就是对整个APK做一个简单的了解。下面是一个Android恶意软件的例子来说明GDA的用法。

  1. 首先,我们将恶意软件样本拖入 GDA。然后我们就可以看到它的基本信息了。

我们可以根据呈现的信息判断APK是否被加壳。如果 APK 未加壳,则 DexHeader 下方不会显示任何内容。

  1. 然后我们可以检查我们的APK的权限。正如我们在基础信息的底部看到的,APK 启用了很多危险的权限e.g. READ_SMS, SEND_SMS, READ_CALL_LOG, READ_PHONE_STATE等等。

  1. 通过点击工具栏中红色标记的按钮,我们可以查看APK的签名信息。

  1. 此外,AndroidManifest树形控件顶部的 可以引导您分析Activity, Service, Receive和AndroidManifest.xml 中的其他配置信息。

  1. 接下来,我们可以点击树框中的MalScan 来扫描 APK 的恶意行为。下图显示恶意软件有很多恶意操作。

如果我们想进一步分析方法会做什么,可以双击method@xxxxxx查看方法代码,比如点击"#Sending message:”下面的“[method@000197]: com.itcast.cn112.a.a” 。该方法下的代码将会如图显示。

当然,如果我们要分析 Smali 代码,只需按F5

从图中我们可以看出,这个方法会访问短信。

此外,我们还可以看到 DEX 使用的字符串和 API。AllStrings将显示 DEX 中的所有字符串,并将AppStrings通过方法代码显示引用的字符串。实际上,AppStrings 是一个更有用的字符串。string@区域还支持交叉引用(X)、编辑(右键单击)和双击操作。

AllAPI的method@区域支持交叉引用功能。

B、JAVA伪代码分析

这里主要展示一些java代码中的交互操作。下面简单介绍一下GDA的基本使用。

  1. 从入口点开始,点击入口按钮查看入口方法。

如果反编译内容太大,需要在当前代码中搜索感兴趣的关键字,可以按ctr+f启动搜索框。

现在,如果我们要标记已识别的方法、字段或类。我们可以重命名它们。例如,双击a.d()将显示下图。很明显,它是用来记录信息的,所以我们将方法名重命名为'log',GDA会升级所有引用的位置。

然后,我们以相同的方式重命名所有可识别的方法。

如果我们想要做进一步的描述,可以使用注释(C)。

当我们需要分析当前方法的调用者时。我们可以通过交叉引用来查看它们。

当我们想知道在哪里使用字符串时。您可以将鼠标放在双引号之间并按 X 以查看参考方法。

至此,基本的使用已经完成,如有问题,欢迎留言。并欢迎报告错误。

四、辅助工具

1. XML 解码器

自行实现的解码功能可以绕过Anti-decoding技术:

2. 算法工具

该工具支持以下算法:

哈希算法:md2 md4 md5 sha sha1 sha224 sha256 sha384 sha512

对称加密:des idea rc2 rc4 rc4-40 rc2-40 rc2-64 bf cast5 aes (128 192 256),模式如ecb cbc ofb cfb,其他模式如(cfb1 cfb8)

非对称加密:RSA

编码算法:base62、base64 3.

alg-tool 接受 3 种类型的输入作为密钥、明文和密文。简单来说,1.我们可以直接输入字符串作为源数据,也可以2.输入“hex:”如下图所示的二进制数据。3.我们可以双击文本框弹出文件对话框,然后选择一个文件作为输入。

3.Dumper

更多详情,请访问以下链接:https : //zhuanlan.zhihu.com/p/26341224

4.搜索工具(S)

关闭