反编译iPhone应用程序


34

我一直在搜索这个网站和更多,但我没有太多的运气。我想反编译一个应用程序,看看它的工作原理,我已经尝试了多个程序。我尝试过Hopper,IDA和其他一些最终没有做任何事情的程序。 Hopper和IDA都产生汇编代码(我相信这就是它,我不太熟悉逆向工程和类似的东西),它给我函数名并产生不可读的代码。我有包含Hex-Rays的IDA Pro(Hex-Rays应该是一个反编译器),但IDA Pro中的Hex-Rays选项卡产生更多不可读的垃圾。

IDA Pro的:

IDA Pro

我用IFUNBOX从我的手机提取从IPA应用程序文件。我可能在这里做了一些错误,所以如果任何人有任何反编译应用程序的经验或将汇编代码转换为人类可读代码的经验,那将会非常好而且有帮助。

谢谢。

  0

IDA为iPhone应用程序生成ARM反汇编。这些可能会帮助你: [1](http://stackoverflow.com/questions/5719341/arm-disassembler-cross-compiler-for-examining-ios-compilation) [2](http://reverseengineering.stackexchange .com/questions/1594/possible-for-reverse-engineering-an-ipa-file-to-its-source) [3](http://resources.infosecinstitute.com/ios-application-security-part- 26-patching-ios-applications-using-ida-pro-hex-fiend /) [4](http://reverseengineering.stackexchange.com/questions/3654/how-to-decompile-an-objective-c- static-library-for-ios) 18 4月. 142014-04-18 11:03:26

  0

提示:Hex-Rays与Hex视图不一样 19 4月. 142014-04-19 02:45:26

  0

我意识到只要我发布这个,但我因为理由忘了编辑它。无论哪种方式,Hex-Rays插件都不会显示在插件菜单中。 23 4月. 142014-04-23 19:28:21

  0

如果您正在寻找一个简单的教程来解密iOS二进制文件并再次提交,请查看http://reverseengineeringapps.blogspot.de。 13 12月. 142014-12-13 15:52:17

-1

iPhone应用程序严重防止反编译。您通过某个文件管理器从您的手机中复制“该”应用程序(您可以省去自己的麻烦,因为所有应用程序都在您的计算机上的iTunes中备份),但本身不会自动解密它。由于此加密,IDA/HexRays显示无法读取的代码。

从iPad/iPhone获取可分解代码的唯一方法是通过破解它并安装内存自卸车。可能不需要补充,但苹果公司强烈反对 - 他们可能会使您的保修失效。

+14

我真的不认为建议人们放弃在这个SE上是个好主意。毕竟,我们现在都在抨击** **。希望他能从这个项目中学到很多东西,并在另一端找到一个更有能力的逆向工程师。考虑到熟悉某种组装,这不是一件不可能或非常艰难的任务。 18 4月. 142014-04-18 18:50:57

  0

@PeterAndersson我觉得可以建议不要做一些可能导致设备丢失的事情,以及在获得另一台设备时所花的钱,因为这种情况下设备实际上是不可修复的,苹果公司也拒绝这么做。 (这是,请记住,这个问题的未来受众可能会有不同的经验,从新手到专家,在监狱和反编译,并提供一个公平的警告,似乎是一个不错的主意) 19 4月. 142014-04-19 07:36:17


37

iOS应用程序受Apple的DRM系统保护。该系统加密应用程序的某些部分。就我所知,加密的关键是每个设备或每个设备平台的唯一性。我没有花费太多费用,所以我不知道加密密钥是什么,但我怀疑它是GID keyUID key。我会怀疑这是后者。

为了解密应用程序,您需要一个越狱设备才能在其上运行您自己的未签名代码。请注意,越狱您的设备可能会使Apple保修失效。通常有三种通用的转储应用程序明文的方法,它们都依赖于应用程序加载到内存时必须由加载程序解密的事实。其中两个需要你安装OpenSSH,可以通过Cydia获得。你可以使用任何能够提供shell并且可以远程访问的东西,但SSH很好,标准并且提供了一种拉取和推送二进制文件的好方法。

请注意,所有设备上的默认根密码都是“高山”,因此请务必改变这一点。我建议,除非你真的知道自己在做什么,否则将研究设备只保存在本地网络上,不要将其暴露于互联网。

  • 的最简单的方法是使用用于裂化的应用,如Crackulous或离合器,其将转储的应用程序的解密版本为你提出的申请。这种方法很简单,但不可靠和无趣,因为它可能会教你至少。

  • 第二种方法是使用调试器,并在加载之后或之前将其附加到应用程序。然后破坏调试器并将应用程序的代码部分转储为闪存。然后,将该转储粘贴回加密的应用程序,覆盖加密的部分。您可能还想更新任何加密标志。这种方法会告诉你更多有关正在发生的事情。

  • 第三种方法在我看来是目前最好的。它由Stefan Esser编写的动态库DumpDecrypted组成。这个库被添加为一个库,它被加载器强制加入到所有创建的进程中。在加载时,库会将解密版本的二进制文件转储为闪存。此方法要求您有能力为iOS构建库,这通常意味着您需要SDK。它只解密由加载器加载的FAT二进制文件的一部分,因此您可能会得到一个或多个保持加密的代码段,但它们都应该为不同的平台执行相同的功能。这种方法非常可靠,因为额外的库很难被应用程序发现,除非它专门寻找它。你可以通过重命名库等来解决这个问题。

一旦应用程序在设备上解密,您可以通过使用例如SCP或SFTP通过SSH服务器将其拉回。然后你可以使用Hex-Rays ARM反编译器或者Hopper来开始反编译。

Here's关于使用iOS应用程序的简短论文。我认为Pedram Amini's old 2009 article是一个很好的介绍正在发生的事情。

  0

由于苹果倾向于跺脚在监狱破碎的设备和它们的所有者上下了很大功夫,我宁可不建议一个自己承认的Total Beginner去尝试一下。接下来你知道,这个人的iPhone已经死了,Apple会拒绝帮助。 18 4月. 142014-04-18 19:02:39

  0

这是一个很好的观点。 18 4月. 142014-04-18 19:09:13

  0

我的手机实际上已经越狱,并且已经越狱了几年(不过,这些年来我已经升级了不同的iPhone)。我知道大部分我在做什么,但我从来没有探索过这个领域,所以是的,当谈到逆向工程和那种性质的事情时,你可以称我为初学者。 @PeterAndersson - 感谢您的好评! 23 4月. 142014-04-23 19:31:55