Windows环境下的frida配置与ipa砸壳

2020.6.1 补充

首先祝各位儿童节快乐

在我fork了仓库和读了代码之后,发现frida-ios-dumpFileNotFoundError的原因在于,使用了chmodzip这两个Windows平台下不预置的命令,权限的设置在Windows下没什么必要。zip也暂时注释掉了,理论上我改过的版本在Windows平台下不会有比在macOS下更多的报错大概。如果有兴趣的话,链接放在文末了,也可以直接进我Github仓库测试。

问题出现在后面。我现在对frida-ios-dump与iOS 13.5的兼容性存疑。dump出来的.fid替换进ipa无法正常运行。文件我都用IDA分析完,拿010Editor改好了!就是跑不起来!最后发现砸壳这步就翻车,我气死了 我又尝试了Clutch砸壳,结果是直接报Segmentation Fault: 11,在Github上也有相关issue。目前来看,这两种方式都没法在iOS 13.5环境下正常运作。dumpdecrypted我没试,不确定效果如何。cycript我还没装,这两天捣鼓ipa搞的我头都大,还快到期末,懒了

以下是原文章。


上传到App Store的ipa包都经过了苹果的加密处理,必须要先砸壳才能使用IDA等工具进行分析。有不少教程用的都是Clutch,但这个在Windows平台下好像没法用(更正:我会用了,但是他崩了),所以就用frida来做了。

环境的搭建

使用frida砸壳,需要在Windows和已越狱iOS设备上搭建frida。PC机上还需要有Python环境。Python环境也就一个安装包的事这里就直接掠过了。

Windows端

整个搭建过程还是挺无脑的,也就一行代码的事:

pip install frida-tools

等一会环境就装好了!因为frida官网是这么指导的啊

实际直接执行上面那行的话,可能会报缺wheel这个包:

pip install wheel

同时,由于国内众所周知的网络环境, 有一个包可能无法正常下载,导致Building wheel for frida (setup.py)这里直接无提示卡死。在等了半个小时后, 出现了报错信息:

报错

后边还有一句更直接的:

[WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

https://pypi.org/project/frida/ 用下载工具下载对应文件,注意frida版本,Python版本,OS和指令集完全对应。之后把下好的.egg文件放到用户目录,重新运行安装命令,frida环境就装好了。

iOS端

iOS端的配置主要用的是Cydia。我的设备为iOS 13.5,unc0ver越狱。

要装的插件只有Frida for A12+ devices(我是A12X,按需要装对应版本)。fridahttps://build.frida.re这个源。

砸壳

砸壳过程中,PC与iOS设备通过USB连接。网上查到的多篇教程用了USB接口到网卡localhost的映射,而且都是macOS专属,对于为什么要这么做本Windows用户暂且蒙在太鼓里

砸壳用的工具是frida-ios-dump,直接clone

git clone https://github.com/AloneMonkey/frida-ios-dump.git

cd进目录。装依赖,然后看可砸壳App。

pip install -r requirements.txt --upgrade
python .\dump.py -l

砸壳则是

python .\dump.py <App名|BundleID>

在砸壳过程中被砸壳的App要保持运行状态。不然放多久进度也不会动,如果进度卡住了就kill掉python进程重新砸壳,别问我怎么知道的

按理说这样就会自己生成砸壳后的.ipa文件了,但我操作过程中途会报FileNotFoundError,而且无法生成文件。不仅如此,运行的最后会报拒绝访问,如果直接重新运行,会一上来就拒绝访问。试了几次也不行。我怀疑是在哪里出了问题,操起我的半吊子Python,直接看源码。

在阅读源码后得知,砸壳得到的文件位于%temp%\Payload文件夹,在程序的开始会尝试删除这个文件夹再建个新的,在程序结束时会删掉这个文件夹作为清理。然而,Windows是不允许对%temp%中的文件夹进行删除的,这就导致了拒绝访问的情况发生。由于某些原因,Python 3.8库中缺失subprocess.py,导致无法创建子进程去生成ipa包。最后ipa没生成出来,dump出来的资源还被干了。砸了个寂寞

虽然说解密的可执行文件已经通过.fid形式被dump出来了而且也没被删 我还是决定小改一下这个程序。subprocess暂时不去改了其实是因为不会,把几个shutil.rmtree()先改成pass,让他别删临时文件,差不多脚本就能用了。

几个.fid文件就是解密的可执行文件,删掉后缀扔到对应的地方。和BundleName一样的那个.fid扔到app根目录,剩下的丢到对应的Frameworks里面。之后对Payload文件夹整体打个zip包,脱壳的ipa就到手了。

后记

打算针对Windows优化一下这个.py (挖坑不填小能手

那我先fork一下丢在这里好了ヾ(•ω•`)o https://github.com/feightwywx/frida-ios-dump

本文链接:

https://www.direcore.xyz/archives/5/
1 + 8 =
10 评论
    1Chrome 94Windows 10
    10月16日 回复

    不用啦,推荐个新轮子
    https://github.com/a97077088/fd

      .direwolfSafari 15OSX
      10月16日 回复

      @1 感谢分享xd

    1Chrome 94Windows 10
    10月8日 回复

    [WinError 5] 拒绝访问。: 'C:\Users\joshua\AppData\Local\Temp\tmp79uel22j\Payload\pinduoduo.fid'

    老哥这个怎么解决啊

      .direwolfChrome 94Windows 10
      10月12日 回复

      @1 挺奇怪的,按理说我把获取%Temp%的部分都换成调用Python给的实现了,应该不会出现这个问题的)如果拒绝访问,那删除的时候应该也访问不到,如果这样你可以自己到路径下把包拿出来)

    1Chrome 90Windows 10
    4月29日 回复

    不行欸大佬,还是拒绝访问

    路人Chrome 75Windows 7
    2020年10月13日 回复

    你这小子优化的脚本真的问题一大堆,庆哥原本的工具脚本在Windows下运行非常好,因为你优化的脚本原本还以为我有问题,结果你这小白真的完全不行,代码错的离谱..............

      .direwolfSafari 13OSX
      2020年10月29日 回复

      @路人 抱歉给您带来不便。原代码使用了zip来打包,用了chmod来设置权限,在我运行时,因为权限问题他还没法删temp下的Payload文件夹。如果原代码在我这能跑,我何必去改?我承认我传GitHub的代码完成度低,但您一个论据没有,上来就指摘我完全不行、错的离谱是否有失偏颇?

    路人Chrome 85Windows 7
    2020年10月13日 回复
    import paramiko

    ImportError: No module named paramiko

    某魏Chrome 77Android N
    2020年06月19日 回复

    太强了,我之前就是用frida砸壳然后遇到了各种莫名其妙的坑,最后只能换了clutch

      .direwolfChrome 85Windows 10
      2020年08月31日 回复

      @某魏 Clutch在iOS 13.5跑不起来()