在之前的章节中,我们讨论了逆向工程iOS和Android应用程序。我们主要使用了开源工具,只有一个例外------Hopper Disassembler。一旦您开始逆向工程现实世界的移动应用程序,无论是在Android还是iOS上,您可能会发现一些替代工具。这些替代工具也可以是开源的,也可以是商业的(闭源)。
到目前为止,我们使用的所有开源工具,比如APKTool、Ghidra和Radare2,都是免费使用的,而闭源的Hopper Disassembler是商业可用的。因此,在本章的剩余部分,让我们考虑一下当我们谈论商业可用工具时,我们所指的闭源是什么意思。
不同的逆向工程工具提供不同(独特)的功能。通常,选择使用哪个工具以及用途会成为个人选择。例如,我更喜欢使用Hopper Disassembler来进行所有iOS二进制逆向工程,而不是Ghidra。这主要是因为我觉得使用Hopper比使用Ghidra更舒适。某人更喜欢Radare2而不是Ghidra的另一个原因可能是他们更喜欢在命令行界面上工作,而不是在一个窗口中查看所有反汇编代码。
这些工具提供的功能和支持之间有很多相似之处,但也存在关键差异,这可能使得一种工具在某种特定工作中比另一种更合适。 为了帮助您理解一种工具相对于另一种工具的优缺点,在本章中,我们将涵盖以下主题:
- 一些用于逆向工程的常见开源工具
- 一些用于逆向工程的常见商业(闭源)工具
- 逆向工程案例研究和逆向工程工具所需的功能
技术要求
我们将继续使用在上一章中使用的Ubuntu虚拟机设置。本章没有额外的技术要求。
移动应用程序逆向工程工具
在选择用于移动应用程序的逆向工程工具时,有几个选项可供选择。移动应用程序通常具有dex或Mach-O(OS-x)二进制文件,这些文件通常是逆向工程的主要关注点。一个支持移动设备架构并能够对移动应用程序进行反编译、反汇编和修补的工具将是渗透测试的正确选择。然而,有时会遇到更复杂的问题需要解决,进行了一些高级混淆,并且外部库文件也需要进行逆向工程。在这种情况下,逆向工程工具需要具备这些高级功能。
让我们来看一些常用的开源和商业可用的逆向工程工具,这些工具可以用于移动应用程序。
开源移动应用程序逆向工程工具
开源工具的源代码是公开可用的,供其他人检查、修改和增强。以下列表提供了一些常用的用于逆向工程的开源工具的信息:
- Ghidra:可能是用于移动应用程序逆向工程最常见和最先进的开源免费工具。Ghidra的一些关键功能包括汇编、反汇编和反编译。Ghidra支持多种处理器指令集和可执行文件格式。 官方GitHub存储库链接:github.com/NationalSec...
- Radare2框架:一个多架构和多平台的工具,能够汇编和反汇编可执行文件,还可以执行二进制图形差分并提取信息。更详细的功能列表可以在官方Radare2页面上找到:www.radare.org/r/。 官方GitHub存储库链接:github.com/radareorg/r...
- JADX(仅适用于Android应用程序):与iOS二进制文件不同,相对来说,逆向工程Android应用程序更容易。这主要是因为dex文件可以很容易地转换为Java代码。用于此目的最常用的工具之一是JADX。这基本上是一个Java反编译器;它可以从APK、dex、aar、aab等文件中将Dalvik字节码反编译为Java类。 官方GitHub存储库链接:github.com/skylot/jadx...
接下来,让我们看一下商业工具。
商业移动应用程序逆向工程工具
有很多非常有用和先进的逆向工程工具作为商业工具可用。这些工具通常是闭源的,并且具有不同的许可模型。让我们看一下一些著名的商业逆向工程工具。 以下列表提供了一些常用的闭源工具的信息,用于逆向工程:
- Hopper:一种逆向工程工具,用于反汇编、反编译和调试iOS(ARM)可执行文件(以及多个其他可执行文件/二进制文件)。Hopper Disassembler也有免费版本,使用时间受限制。在撰写本章时,您可以在官方网站购买个人许可证,价格为99-129美元,具体取决于您选择的许可模型的时间。拥有更便宜的个人许可证使得该工具在移动应用程序渗透测试人员中非常受欢迎。 官方网站链接:www.hopperapp.com/
- IDA:一种广泛使用的逆向工程工具,具有反汇编器和调试器的功能。专业版本(IDA PRO)是最先进和功能最强大的逆向工程工具之一。还有其他版本可用,如IDA Home和IDA Free。IDA Pro和IDA Home之间的主要区别在于支持的处理器和调试器。可以在官方网站上找到所有IDA版本之间的差异详细列表:hex-rays.com/ida-pro/#ma... IDA Free是一个具有一些基本IDA功能的二进制代码分析工具。IDA有三种类型的许可证:命名许可证、计算机许可证和浮动许可证。有关IDA许可证类型的更多详细信息,请访问此处:hex-rays.com/licenses/。 所有IDA工具和许可证的价格细节也可以在官方网站上找到:hex-rays.com/cgi-bin/quo... IDA Pro支持大量的处理器类型和二进制格式,但采用昂贵的许可模型。这使得它更适用于高级逆向工程需求。官方网站链接:hex-rays.com/ida-pro/。
- Binary Ninja:一个交互式的反汇编器、反编译器和二进制分析平台。这是另一个在渗透测试人员和逆向工程师中非常受欢迎的工具。它还有一个演示/试用版本,但有限制。许可证可用于个人(非商业)、商业和企业。有关定价的更多详细信息,请访问此处:binary.ninja/purchase/。 Binary Ninja的许可成本介于Hopper Disassembler和IDA之间。 官方网站链接:binary.ninja/。
- JEB Decompiler:一个逆向工程平台,可进行代码和文档文件的反汇编、反编译、调试和分析,可以手动操作或作为分析管道的一部分。JEB Decompiler也有一个可用于非商业用途的社区版。许可证分为三种类型:JEB Android、JEB Pro和JEB Floating。有关定价的更多详细信息,请访问www.pnfsoftware.com/jeb/buy。 官方网站链接:www.pnfsoftware.com/。 重要提示 以上列出的开源和商业逆向工程工具列表并非详尽无遗。这些只是最常用和著名的逆向工程工具。 在进行移动应用程序的逆向工程时,工具的选择主要取决于以下因素:
- 要逆向工程的移动应用程序类型------iOS、Android还是两者都有。
- 逆向工程的目的是什么?这可以是出于以下任何原因:
- 绕过应用程序中的一个或多个安全控制。
- 理解应用程序特定部分背后的逻辑。
- 发现与代码质量、实现的安全控制等相关的应用程序安全问题。
- 分析存储在应用程序包和应用程序二进制文件中的字符串和静态内容。
- 编写利用程序。
- 是否需要修补二进制文件并创建具有修改代码的应用程序? 现在我们已经了解了常用的开源和商业逆向工程工具,让我们还了解一下在渗透测试中这些工具所需的能力。
案例研究:渗透测试期间的逆向工程
在渗透测试期间进行移动应用程序的逆向工程的主要原因之一是分析源代码中是否有硬编码的敏感信息,这些信息可以被恶意行为者进一步利用。其他原因可能包括绕过安全控制,如SSL pinning、root/jailbreak检测和基于角色的客户端访问控制。但是,根据应用程序类型和渗透测试,您可能需要花更多精力对逆向工程的应用程序进行更深入的分析。
让我们来看一个案例研究。在对一个金融科技应用程序进行渗透测试时,注意到该应用程序向特别生成的URL端点发送了一些关键请求。这些端点对于每个请求都是唯一的,事实上,在生成HTTP(s)请求之前就生成了它们。为了找到该应用程序生成这些URL的方法,我们可以采取以下方法之一:
- 逆向工程应用程序以找到生成这些URL的逻辑(或函数)。
- 在运行时进行仪器分析应用程序。在这种方法中,我们将一段代码注入到应用程序的运行过程中,然后分析其行为。执行运行时仪器分析的常用工具之一是Frida(frida.re/)。
通过反汇编应用程序二进制文件并分析在特定步骤期间的逻辑流程,发现该应用程序创建了用户ID和会话ID的SHA-256哈希。然后,将此哈希用作URL的一部分。以下是最终的唯一URL和HTTP(s)请求:
最终唯一的URL:
ruby
https://[已删除的域名]/user/admin/escalate/FFDC52D453CF836BAC761D7463B85A7AB6EF4DB511366A27684734E7154C461A
最终HTTP(s)请求:
makefile
POST /user/admin/escalate/FFDC52D453CF836BAC761D7463B85A7AB6EF4DB511366A27684734E7154C461A HTTP/1.1
Host: ://[已删除的域名]
Cookie: session=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c3JfMTIzIiwiaWF0IjoxNDU4Nzg1Nzk2LCJleHAiOjE0NTg4NzIxOTZ9.-LzT9cobGUNslZ4JSELQFwSxp5JpT5o6KtMO8ySR-20
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: application/json
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 276
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Te: trailers
Connection: close
p_web_site_id=3982358328326&p_language=EN&p_show_form_in_div=N&p_format=HTML&p_print=JSONP&p_joblocation=WWW&p_current_host=gdx9tof61hm58kkaz4k0dp3qnht8hx
解决这样的挑战需要逆向工程工具中良好的反汇编、搜索和去混淆功能。开源工具如Ghidra和Radare2可以很好地解决这个问题。
在渗透测试期间所需的逆向工程能力可能与恶意软件分析期间所需的逆向工程能力有所不同。在渗透测试中,通常进行逆向工程是为了解决一个难题或探索一些功能。然而,在恶意软件分析中,逆向工程是为了探索应用程序的每一个部分,并了解所有隐藏的功能和代码。
案例研究:恶意软件分析期间的逆向工程
另一个需要更高级逆向工程技能的领域是恶意软件分析。恶意软件研究人员花费数天甚至数周的时间来查看反汇编和反编译的二进制文件,以推断应用程序的流程。让我们看另一个案例研究。
在分析恶意软件移动应用程序时,注意到该应用程序在很大程度上会根据国家、语言和安装的应用程序等因素修改其行为。对于在美国使用英语的设备,并安装了金融/银行应用程序的设备,该应用程序会尝试读取短信和交易历史记录。然而,在不同国家的不同设备上,并安装了约会应用程序时,它会尝试向其他应用程序的流量中注入广告。如果应用程序仅在一个设备上使用,就无法注意到这种行为变化。
然而,通过对反汇编的应用程序二进制文件及其相关库进行深入分析,发现了应用程序的这种行为。在此分析过程中,IDA Pro 被用于其功能,如引用搜索、将当前代码状态填充到数据库中以及伪代码生成。其他工具,如 Binary Ninja,也可以提供其中一些功能。
在这种情况下,基本的反汇编和搜索功能可能不足以满足需求,因此我们可能需要选择一款更高级、更有能力的逆向工程工具。此外,请注意,在这种情况下,相关的库文件也被进行了逆向工程。
有许多类似的情况,需要逆向工程工具提供更高级的功能,或者需要工具支持不同类型的架构。界面选择也是一些人更喜欢某种工具的重要原因之一。