Tag: 逆向工程

反向工程iOS应用程序-iOS 11版(第1部分)

尽管已经有很多关于“逆向工程iOS应用”的博客文章,教程甚至是youtube视频,但每次Apple发行新的iOS版本时,“游戏”都会改变。 研究人员必须找到一种新方法来越狱iOS的新发行版,并且我们必须更新工具以与新越狱环境一起工作。 对于最新的iOS 11越狱尤其如此,基于Ian Beer的async_wake漏洞的LiberiOS和Electra越狱技术与以前的越狱技术截然不同,并且大多数(全部?)现有工具在这些越狱时都被破坏了。 我将重点关注LiberiOS,因为这是我测试过的唯一一次越狱。 也是因为我是乔纳森·莱文(Jonathan Levin)的工作及其对社区的贡献的忠实拥护者。 LiberiOS越狱就是所谓的无KPP越狱(KPP代表内核补丁保护)。 基本上,这意味着KPP保护的内核区域没有任何修改,并且大多数越狱工具(如Clutch,dumpdecrypted)以及依赖Cydia Substrate的所有调整都尚未更新以使用此方法。 这篇文章的篇幅太长了,所以我决定将其分为两部分: 第1部分 :将帮助您设置设备并解密iOS应用 第2部分 :将帮助您转储应用程序的类,分解其指令并操纵运行时以更改应用程序的行为 教学大纲 第1部分 越狱您的设备(外部链接) 设置iTunnel 设置bfinject 使用bfinject decrypt解密Starbucks iOS应用 第2部分 使用class-dump转储星巴克应用程序的类 使用Hopper拆卸星巴克应用程序 使用bfinject cycript运行时操作 要开始重新使用iOS应用,您需要越狱的设备。 在本文中,我假设您使用的是iOS 11,因此让我们开始越狱设备。 我喜欢iClarified教程,并且它们对于在iOS 11–11.1.2上越狱您的iPhone / iPod / iPad(iDevice)来说是一个很棒的教程: 请按照iClarified的教程在此处使用LiberiOS越狱iDevice。 现在您的iDevice已越狱,我们可以开始对iOS应用进行逆向工程! 设置iTunnel 尽管LiberiOS的Dropbear SSH版本启用了wifi连接,但我发现USB更快,更可靠。 要使用照明电缆通过USB通过SSH进入设备,您需要设置iTunnel (或类似工具)。 从此处下载最新版本的iTunnel 提取.zip文件的内容 将itnl二进制文件复制到/usr/local/bin 将libmd.dylib库复制到/usr/local/lib 您也可以将两个文件都放在一个文件夹中,并使用./前缀执行itnl命令。 设置bfinject 正如我之前所说,许多现有工具无法像以前的越狱一样工作,但是感谢Bishop Fox,我们现在可以通过执行以下操作在LiberiOS中使用Clutch : 在桌面上创建一个名为bfinject的文件夹 […]

如何使用iOS应用反向工程创建自己的Snapchat API客户端

抽象 动机 去年,我不得不在Snapchat的移动应用程序上使流程自动化,以便与脚本中的其他帐户进行交互。 由于Snapchat不提供任何公共API,因此我决定创建自己的客户端。 这个想法是创建一个非常可扩展的客户端以直接与其API进行交互,而不仅仅是半自动化地使用该应用程序。 为什么这么复杂? 在我之前,许多优秀的程序员为Snapchat创建了开源客户端(可以在Github上轻松找到源代码)。 问题在于Snapchat安全团队做得很好。 该API使用许多非常复杂的令牌来检查客户端请求的完整性,没有人找到一种方法来重现这些令牌后面的算法以模拟真实应用。 诀窍是什么? 对我们来说幸运的是,Snapchat是一个移动应用程序,并且由于您拥有客户端,因此您可以使用逆向工程技术来了解该应用程序的工作原理,并找到一种可以利用它的方法,从而发挥自己的优势。 经过数天的研究以了解该应用程序,我能够编写一个调整并将iOS设备用作身份验证服务。 以下是其工作方式的简化方案。 最终结果 使用这项技术和一些优化措施,我每天每台设备能够向Snapchat的API发送超过1000万个请求。 由于最终的架构是多设备支持就绪,因此规模几乎是无限的。 直接使用Snapchat应用作为身份验证提供程序的好处在于,几乎所有更新(甚至是主要版本)都不会破坏您的客户端,而且比尝试解密高安全性令牌要简单得多。 实际上,该客户在没有任何维护的情况下工作了一年很好,并且现在仍在工作。

Xcode,终极的调试和破解工具

调试一直是我在计算机上的一部分经验,甚至在学习编码之前也是如此。 但是,展开二进制文件和修改程序行为的满意度从未如此轻松。 通常,调试包括从十六进制编辑器来回切换到调试器,应用程序,终端,计算器等,更不用说程序退出了,您必须遵循很长的配方,直到调试会话突然结束。 不好… 但是几个月前,以破解适用于macOS的Twitter为借口,我决定最小化此问题并优化此流程。 这就是Xcode进行救援的时候。 设定 首先,我们需要创建一个以Cocoa框架为目标的Xcode项目。 调试 我们将使用嵌入式lldb控制台进行动态调试。 想象一下,适用于macOS的Twitter是我们要调试的应用程序。 通常,我们需要运行lldb并从调试器启动该进程,相反,每次我们单击Run按钮时,Xcode都会为您执行此操作。 为此,请在我们框架方案的“运行”配置中选择Twitter应用程序作为可执行文件。 这样,将编译我们的框架,并在进程附加了lldb的情况下启动Twitter应用程序。 注入代码 到目前为止,我们所做的可能已经足够了,我们可以轻松地创建针对应用程序的调试会话,还可以利用Xcode提供的自动完成功能。 但是注入代码呢? 代码注入通常涉及编译动态库并修补二进制文件,以便它链接到我们的库。 尽管如此,调试注入的代码仍然是一项繁琐的任务,并且尽管我们始终可以使部分代码自动化,但该过程缓慢而重复。 现在,借助Xcode灵活的配置方案和一些魔术,我们可以轻松修补正在检查的应用程序的运行时,而无需修改其二进制文件(双赢)。 例如,让我们注入一些代码,记录每次对viewDidLoad调用。 Cocoa Framework项目模板创建一个名为nameOfTheProject.h的头文件。 我们将创建其各自的.m文件,并将混乱的逻辑放入其中。 照原样,Xcode将编译我们的框架,并在调试器附加到其过程的情况下启动Twitter应用程序。 链接这两者就像使用环境变量运行过程一样容易,该环境变量迫使位于给定路径上的库加载。 这个环境变量是DYLD_INSERT_LIBRARIES ,是我们库${TARGET_BUILD_DIR}/${TARGET_NAME}.framework/Versions/A/${TARGET_NAME}的路径。 在方案的“运行”配置的“ 参数”选项卡中设置环境变量后,单击“运行”按钮。 我们的代码应该已经正确注入到Twitter流程中。 还不够好? Xcode提供的所有其他调试工具也都可用,从视图层次结构到内存图调试器。 加起来 无论您是否进行逆向工程,我都建议您尝试一下,也可以使用TwitterX来获得有关此设置功能的更多信息。