老衲看了那么多篇文章、这个不错 get一下、学习学习~
准备工作
工具下载
以下工具包括 Folx 都打包好上传 盘了,这里下载。
-
EasySIMBL-Bundle-Template
一个扩展包 XCode 模板,类似于开发 iOS 在 XCode 新建工程时选的 。
把 文件夹拖到 目录下即可,如图所示。
EasySIMBL 安放地址
破解 Hopper
问题分析
Folx 有个很方便的功能下载 Youtube 视频,只要把 Youtube 视频的 URL 输入就可以下载(而且速度还不错,暂时没验证需不需要科学上 )。然而这是个付费功能,只要点下 OK 按钮就会跳出讨钱页。
Folx
Folx 叫你交保护费
听说有小伙伴因为种种原因弄不到 Youtube 的 URL面提供一个。
https://www.youtube.com/watch=QFH747sK200
逆向分析
打开 Hopper,选择 直接粗暴读取二进制可执行文件来破解,如图所示。
Hopper 界面
选择 Applications 文件夹中的 Folx,右键,并找到可执行文件,类似于 win 平台的 文件,在这里:
打开 Folx![Uploading 7_151717.png . . .] 可执行文件
等 Hopper 缓过神来,界面就差不多长这样。由于个人使用习惯,隐藏了底部和右边栏,可以在右上角的三个按钮选择是否开启。
左边栏是导航,可以看到使用 Objc 的方框语法列出了许多方法,还要啥 class-dumpbr> 中间区域是汉莫拉比法典,记载了一些上古语言,讲述了一些你不需要了解的事,直接无视就行。
Hopper 界面
OK 我们的目的是要破解 YouTube 下载功能,那么把 当做关键词来搜索应该不会错,所以在左边栏的搜索框中输入 ,可以得到许多和 Youtube 相关的类和方法:
搜索 Youtube
我们来猜一下这都是些什么东西。(十秒逆向九秒猜)
- FolxYouTubeHelper:看上去没有什么特别的东西,应该不是我们要找的。
- AppDelegate:看上去也只是一个干杂货的,负责弹框之类,应该也不是我们要找的。
- SDUrl:看上去像是个下载辅助的东西,应该还不是我们要找的。
- FolxNewEditTask:看上去是负责新建下载任务相关的类,估计会包含验证之类的东西,我们可以尝试从这个入手。
在搜索栏中查找 ,可以得到一整列表,这东西有点肥,看上去方法很多,其实基本每个 都有 和 两个方法。
此处无图
在 的方法中看到一个 方法,应该是新建任务完成的方法,也就是 的点击方法。选中该方法,一探究竟。
done 方法
在顶部栏点击伪代码按钮可以把上古语言翻译成类似于 Objc 的代码,极大提高可阅读性。代码中还保留了许多汇编的特征,例如 、 之类的寄存器,可以简单理解为变量。如果你认可我葬爱家族,那么这样的代码对你来说应该没有任何阅读压力。
伪代码按钮
得到 [FolxNewEditTask purchased] 的伪代码:
伪代码
在方法的开头就是一个判断语句,由 区分出两个判断条件。
前一条件首先是一个 Objc 下消息机制的方法调用,由前一句 可以猜测应该是判断当前的下载类型,记得 Folx 提供了三个下载类型,而 Youtube 是第三个类型,就是 成立。
下载类型
后一个条件的关键词在于 ,这就很明显了。purchase 的消息对象是 rbx,前两句 可以知道 FolxNewEditTask 对象应该有个 purchased 方法,判断交没交保护费,如果交了就走 else 语句,没交的话就弹出交钱框,就是底下的 。
不过我们的重点在于判断交保护费的方法,在左侧栏搜索,果然 FolxNewEditTask setPurchased purchased` 应该是一个成员属性。
purchased 方法
这样我们就不用管它判断的机制是什么,只要这个方法返回 就对了,办法就是把 FolxNewEditTask 的 purchased 方法换成我们自己的 purchased 方法,这样不仅是 YES,要返回大象都可以。
Hook
打开 XCode,新建一个 。
新建工程
工程名无所谓,最重要的是 ,也就是我们要破解的 App 的 ,在 Folx.app 的包内容中可以找到 文件,然后找到 Folx 的 Bundle ID。
我一般用如下结构存放文件,其中 组下存放原 App 中类的头文件,而 组下存放我们自制的对应类。
思维僵化的项目结构
首先在 Sources 下创建 文件,然后把里面的代码都删了,填入如下内容。
虽然我们创建了 ,假装我们知道 FolxNewEditTask 的一切,其实我们只需要知道 FolxNewEditTask 有 purchased 这么一个方法,但这就够了,因为我们只需要一个 flag。当然正经点的做法是使用 导出 头文件来使用,学习 class-dump。
接着在 中创建 FolxNewEditTask+Hook 的.h 和.m 文件。在 文件中填入代码如下:
在 文件中填入如下代码:
- 方法是我们自制的保护费管理员,不管什么情况下都会返回 YES。
- 中我们调用 方法把 FolxNewEditTask 原本的 purchased 方法和我们自制的 purchased 方法交换。
接着就是要在 Folx 程序启动的时候调用偷天换日大法。找到 或者,里面已经提供好了 方法,搞 Objc 开发的都应该知道 方法是在类载入内存的时候调用,也是偷换方法的最佳时机。
首先得导入我们的头文件:
其次在 方法后加上一行来调用偷换方法。
用 + 来编译一下,显示 这样扩展就已经安装好了。我们可以打开 来管理扩展。
mySIMBL 管理扩展界面
因为在扩展的方法中我们打印了一些信息,因此可以打开 来查看,这个是系统自带程序,在 里找找。在 Consolo 里搜索 来过滤其他不必要信息。
然后就是见证奇迹了,运行 Folx 吧。
在 Console 中接收到这么一条消息就表示扩展已经成功执行:
Console 接收 NSLog 信息
接下来去测试一下 Youtube 功能是不是能使用。
点击 OK 之后讨厌的讨钱窗口没有跳出来,而是直接开始下载了,那么就算破解成功了:
Folx 开始下载 Youtube 视频
根据我的猜测也有可能因为某些科学原因没法下载,因为公司都是科学上 的,所以我才不会开 4G 去验证呢。
更暴力的方法
正如标题所说,,而没说 Mac 和 XCode 玩转 Mac 逆向。
Hopper 掌握了机器码,就拥有了生杀大权,所谓汇编、伪代码都是解析给程序员看的,虽然说使用 Hook 方法替换原方法可以自定返回值,甚至可以返回大象!但是我们不需要大象,如果只是一个 的事,汇编的修改是不是就够了呢br> 当然,首先我们在 mySIMBL 里把方才所写的 Folx 扩展禁用掉,然后把 Folx 关了,回到 Hopper 中。
依旧在左侧栏中搜索找到 方法,并选择汇编代码。
选择汇编代码
其实 的 Objc 代码只有一两行,对应的汇编代码其实也不长,就 7 行:
寄存器是返回值寄存器,相当于被放在 里的值最后都会被 。
在第 3 行出现过一次,mov 指令可以理解为赋值语句,意义是将 的值赋予 。
我们不用管 是什么,我们要的结果是 ,也就是 ,只需要确保在 ret 指令的时候 rax 的值是 0x01 即可。
因此选中 一行,选择 -,输入如下指令:
回车
修改汇编代码
选择 – 来生成新的可执行文件 Folx,替换掉原来的文件即可。
结尾
没有结尾。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!