导读

0x00.交个朋友

0x01.iOS砸壳历史回顾

0x02.frida-ios-dump简介

0x03.TB插件改造思路

0x04.改造Python代码

0x05.添加GUI交互代码

0x06.复用JavaScript代码

0x07.新鲜出炉TBMachoDumper

0x08.下篇再见

0x09.定制服务

0x0A.关于刘柏江

0x00.交个朋友

手游从业者模拟器玩家请关注云游模拟器PantaWin;

Android开发者请关注云游模拟器PantaWin/PantaMac/PantaLinux;

iOS越狱开发者请关注晓文框架Textobot;

Android插件开发者请关注飞度框架Fridobot;

移动调试器重度用户请关注利达调试器LidaDbg;

我们的产品推荐使用git下载和更新,在码云搜索geekneo即可。

0x01.iOS砸壳历史回顾

iOS的第三方App如果是从官方渠道AppStore下载的,那么每一个App包含的MachO可执行文件和动态库均为加密状态,反映到头部数据结构如下:

cryptid为1代表是加密状态,这样的文件我们是没办法通过IDA静态分析代码的。所以逆向分析目标App的关键一步就是解密这些加密状态的MachO文件。

我研究iOS越狱开发是从iOS 7开始的,到现在iOS 13,一共将近6年时间了。我的感受是,iOS的基础软件架构是几乎没变的,但是基础硬件架构和系统实现策略变化挺大。反映到我们今天聊的砸壳这个话题,那就是一个工具变迁史了。所有的砸壳原理都是一样的,那就是等待dyld加载完目标MachO并且内核已经解密完之后第一时间拿到代码执行权限,将内存中的原始数据根据上述cryptoff/cryptsize的值覆盖加密数据从而得到解密后的MachO。所有的砸壳方案变化的只是实现策略。

最开始我使用dumpdecrypted.dylib这个github上非常有名的开源砸壳工具,配合DYLD_INSERT_LIBRARIES这个动态库预加载机制,简直好用得不要不要的。但是随着iOS的安全性和复杂性不断增加,这个库越来越不好用了,比如没办法解密Bundle和Appex文件、沙盒限制、签名限制等等。

dumpdecrypted.dylib不好使了之后,我就通过lldb调试器解密MachO,这个方案用了挺长一段时间。原理就是通过debugserver -x backboard的方式冷启动目标App,然后lldb挂接,通过mem read读取解密后的数据写入临时文件,再通过辅助工具将这些临时数据覆盖至加密文件得到新的解密后文件,最后将cryptid标志改为0。这样也可以达到砸壳的目的,但是操作步骤实在太繁琐,比如有多个模块需要解密时,那是敲命令敲到手软并且也容易出错。而且这个方案就算封装出一些基于lldb的砸壳脚本,使用门槛也太高,不太方便分享给大多数人用。

再后来偶然发现了AloneMonkey兄弟写的frida-ios-dump,试用了一下,好评如潮,简单、易用、强大、完善。他借助Frida的JavaScript运行时,更完整的实现了解密逻辑,这是迄今为止最完整好用的砸壳方案。期间也看到有朋友在用其他砸壳工具比如AppCrackr、Clutch、Crackulous之类的,我没有用过就不予置评了。

0x02.frida-ios-dump简介

本质上,frida-ios-dump就是借助Frida用JavaScript把上述lldb解密的手动过程自动化了。它的流程如下:

dump.py获取用户选择的目标App信息,然后加载dump.js并调用Frida拉起目标App远程注入解密脚本。

dump.js做的核心工作就是加载App内的每一个MachO文件,然后逐一dump,而 dump依赖的C函数均通过Frida反射获得,解密利用的原理前文已经表述过了。

0x03.TB插件改造思路

Textobot核心运行时已经包含了完整的Frida、Python,所以我们要改造frida-ios-dump为一个TB插件是非常容易的,90%的代码都可以复用。我们改造的目标如下:

  1. MachO砸壳不依赖电脑;
  2. 可以可视化操作;

基于上述目标,我们需要将原始的命令行输入改成GUI界面操作,原始的SCP文件传输改成保存在手机本地文件系统。GUI界面操作可以通过Textobot导出的API TB_gui函数来实现。通过这样重构之后,我们就只需要通过Textobot插件管理器就可以在iPhone手机上解密目标App的所有MachO文件了。

0x04.改造Python代码

这里主要是删除frida-ios-dump依赖的SSH/SCP相关的操作,如下图所示代码:

改成直接存在本地文件系统,如下图所示代码:

还有一个必须改造的点是删除原始代码的threading.Event同步等待操作,因为Textobot插件是事件驱动的,如果当前运行的Python代码一直不返回,那么将永远收不到新的事件。

0x05.添加GUI交互代码

本篇文章我们只是简单罗列新添加的GUI交互处理代码,下一篇文章我们详细介绍Textobot插件体系的GUI事件模型。下述代码完成了目标App的选择和调用原始的frida-ios-dump解密入口。

0x06.复用JavaScript代码

最核心的砸壳工作已经由frida-ios-dump/dump.js帮助我们实现了,我们直接原封不动的使用就好:

0x07.新鲜出炉TBMachoDumper

TBMachoDumper的插件源码请前往码云,搜索geekneo就可以找到了。有些平台不允许放网址,你懂的。

执行Textobot Editor - Pack命令,我们就得到TBMachoDumper.tb插件,通过Install命令安装至手机,打开Textobot管理器Plugin/Manager选中tbmachodumper,点击Die切换插件状态为Run,我们就可以美滋滋的砸壳了。

0x08.下篇再见

到此,我们分析了砸壳的原理和历史、frida-ios-dump的流程,罗列了改造的TBMachoDumper核心源码。下一篇我们详细介绍Textobot的GUI事件模型,我敢打赌,这一定是你迄今为止没看到过的“奇葩设计”,这样的模式估计也只有资深逆向/安全专家的脑洞能开到这里。届时,朋友们就可以用Python写可交互的iOS越狱插件了,也能看懂TBMachoDumper这样Magic的GUI操作代码了。我们下篇再见。

0x09.定制服务

我们团队虽小,但个个都是一顶三的技术精英,因此技术能力是严重过剩的。所以如果您有任何关于iOS/Android底层的疑难杂症、云游模拟器挂机/二次开发、晓文/飞度插件定制等方面的个性化需求,欢迎通过私信联系我们。

0x0A.关于刘柏江

8年移动互联网从业经验、精通iOS/Android底层开发/攻防对抗、GikDbg/KiwiVM原作者、几维安全联合创始人/股东。

我的自媒体账号将围绕PantaEmu、Textobot、Fridobot、LidaDbg为用户朋友们传道、授业、解惑。欢迎各位朋友关注、点赞、转发,谢谢大家。

python调用按键精灵插件_Textobot-用交互式TB插件在iPhone上砸壳更美滋滋相关推荐

  1. python调用按键精灵插件_按键精灵——办公常用脚本集锦

    这是奔跑的键盘侠的第123篇文章 临时起意,想想按键精灵的官方视频教程虽然比较有条理,但是毕竟内容有限,甚至重点是在讲游戏挂机.其实很多人都不怎么玩游戏,应用场景一旦转移至办公,很多人可能就有点苍白了 ...

  2. python调用按键精灵插件_按键精灵——如何实现办公自由(四)

    这是奔跑的键盘侠的第174篇文章 作者|我是奔跑的键盘侠 来源|奔跑的键盘侠(ID:runningkeyboardhero) 转载请联系授权(微信ID:ctwott) 前面写的几篇,不知道大家是否能看 ...

  3. python调用按键精灵插件_按键精灵自动寻路系列换算地图坐标寻路法

    金猪脚本(原飞猪脚本)以按键精灵教学为主,涉及UiBot,Python,Lua等脚本编程语言,教学包括全自动办公脚本,游戏辅助脚本,引流脚本,网页脚本,安卓脚本,IOS脚本,注册脚本,点赞脚本,阅读脚 ...

  4. python调用按键精灵插件_[LOG]VC++项目导入大漠插件

    0x00 前言 大漠综合插件(dm.dll)采用vc6.0编写,是一款集前后台,文字识别,图色,键鼠,窗口,内存,DX,Call等功能于一身的综合插件. 大漠综合插件(dm.dll)主要用于按键精灵. ...

  5. python调用按键精灵插件_谈一谈火车采集器的插件使用

    ​ 火车采集器.火车浏览器这两款软件大家在平常工作中应该经常使用吧,有数据采集需求和各类公司运营人员想必都亲自使用过这个软件吧! 今天小编就与大家分享下两款软件所支持的插件,并讲解下每款插件的功能.一 ...

  6. python调用按键精灵插件_【师兄带你学Python-1】你会涮火锅吗?

    大家好,我是狐狸博士.从今天起,我来和大家聊聊Python自学以及助力咱们科(Rí)研(Cháng)工作的那些事儿.如果你想事半功倍.想按时下班.想按时毕业,再或者你想成为大神玩转数据,请千万不要错过 ...

  7. python调用按键精灵插件_【一日一技】python模块的懒加载

    在编写python项目时,通常将需要使用的模块直接通过import关键字导入到项目中,如果后续逻辑变动了,这个模块不需要使用,此时这个模块就白引入了,此时可以利用 import 方法实现模块的懒加载. ...

  8. python调用按键精灵插件_开发中IDE的选择?如何在VsCode上配置CC++,Java,Python环境...

    前言 工欲善其事必先利其器,这也是老生常谈的事情了.在做日常开发中,让我感受到一个顺手的开发工具的重要性.截至目前对于不同语言自己也使用过很多开发工具,有一些简单的编辑器例如:notepad++.Ed ...

  9. python游戏脚本之调用按键精灵插件模拟输入(二)

    我们准备在python中调用按键精灵的大漠插件来完成模拟驱动的鼠标键盘操作.大漠 综合 插件 (dm.dll)采用vc6.0编写,识别速度超级快! 采用COM接口编写,适用于所有语言调用. 网上相关教 ...

  10. Python实现按键精灵功能

    Python实现按键精灵功能 1.利用screenshot(),crop()截取匹配图像 2.利用imread(),imwrite()分割图片,提高匹配精度 3.利用locateAllOnScreen ...

最新文章

  1. Go 学习笔记(44)— Go 标准库之 os(获取文件状态、获取/修改文件权限、创建、删除目录和文件、获取进程ID、设置获取环境变量)
  2. [转]Git忽略提交规则 - .gitignore配置运维总结
  3. oracle form 头行合计,FORM主从块头行金额汇总
  4. 在C++ Builder中用socket api来写网络通讯程序(同时支持TCP和UDP协议)
  5. java ognl表达式_java -------ognl表达式入门
  6. vue获取input的属性_vuejs 中如何优雅的获取 Input 值
  7. switch芯片和phy芯片的区别_感应式芯片卡CPU卡的FM1208-9和FM1208-10有什么区别,你知道吗?...
  8. mac Git本地服务器配置
  9. 解决在IDEA 的Maven下 出现 Cannot access in offline mode 问题
  10. 5-9 第五天 微信 JS-SDK-使用微信官方的WEB调试工具
  11. JAVA冰箱评测开题报告,家用冰箱毕业论文 开题报告
  12. 中兴交换机配置telnet连接_锐捷核心三层交换机配置入门教程,适合新手小白
  13. python 对 文件内容 搜索_python 文件查找及内容匹配方法
  14. python脚本课程_python选课脚本
  15. 从购买服务器到网站搭建成功保姆级教程~超详细
  16. 【BLE MESH】PB-ADV入网详解
  17. unity制作mmd视频
  18. ng-options用法详解
  19. 编译原理课程实践——实现一个初等函数运算语言的解释器或编译器
  20. 基于GPS与经纬度距离计算

热门文章

  1. Windows 10操作系统常用快捷键介绍
  2. 单片机c语言程序编写步骤,Proteus运行Keil编写的51单片机C语言步骤
  3. 相似度系列8:unify-BARTSCORE: Evaluating Generated Text as Text Generation
  4. 存储过程 生成拼音码与五笔码
  5. SQL SERVER RBAC权限管理表
  6. int.prase和int.tryprase
  7. 大学英语综合教程二 Unit 8 课文内容英译中 中英翻译
  8. STM32---ADC模数转换详解
  9. 实验七 磁盘调度算法的模拟与实现
  10. 计算机导论真题(一)