别人的 App 不好用?自己改了便是。嘿嘿嘿 篇
来源:互联网 发布:淘宝田径精英 编辑:程序博客网 时间:2024/09/21 09:05
前言
我们团队里会互相分享买来的电子书,毕竟一本三四百,一人一本实在是太过于昂贵。PDF 私下看就好,Kindle 可以通过破解 DRM 的方式,然而 iBooks 上的书籍,一直没有什么好的方式。
最近我发现了一个软件叫做 iBooks Copy,他的未注册版本,只会 copy 出原书的 1/3 内容。完整版本请付费 $20+。 我试了一下 Swift 官方指南,没问题。再试了一下 《Core Image For Swift》,结果失败了。我就开始想是不是没付费的问题呢?
但又不想花一百多做一个不知道结果的尝试,于是能不能 Hack 一下呢?
lldb 挂载
先看一下这个软件的主界面:
点击 Convert 的时候,会弹出来购买对话框。于是我们的下手点,应该就是 Convert 的响应函数。然而 经过 Class-Dump,我懵逼了。
他貌似把重要的函数做了 MD5,那么我只能运行的时候找我想要的 Selector 了。
lldb 挂载 mac 应用比 iOS 简单太多,直接:
lldb /Applications/iBookCopy.app/Contents/MacOS/iBookCopyprocess launch
需要暂停的时候就:
Control + C
为了验证是否工作正确,以及他会不会傻逼到把注册信息丢到 NSUSerDefault,我们随手 po 了一下。
po [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]
发现,就算有我们也看懂不懂,它加密了。
我们通过 Window 找到 ContentView,对他执行 _subtreeDescription
,这个相当于 iOS 的 printHierarchy
方法。轻松找到了 Button 实例.
结果对其运行 Action 的时候,却死也打不出来 Selector:
有知道怎么解决的朋友,希望和我说一下。
好吧,换方向。
反编译 nib
我们知道,xib 是可读取的 xml,而 nib 是对应编译好的结果。我只要反编译 nib 了,就能知道那个 Button 的对应点击 Outlet。
经过搜了一下,发现有前辈做好了解决方案:https://www.dropbox.com/s/eyjt1337wpkrp9n/Compiled%20Nib%20Opener.nib.zip?dl=0
我们只需要右键选择显示包内容,把其中的 keyedobjects.nib
替换成它包中在语言文件夹下的 MMMainController.nib
,返回到外面双击打开即可。
我们看到了,startAndStopButtonOnClicked:
回到 class-dump 出来的头文件,发现,妈蛋被那堆 md5 晃瞎了眼,看漏了。。。
ida 分析
直接用 ida 打开对应方法,因为是 x64 架构,我们的 f5 大法没法用了。那就用传统方案吧。在 IDA-View 视图。
可以看到这个方法分了好几部分:
- 最上面是点击事件,和初始化方法。
- 左侧那一大块处理的是有关在转换中又点击了 Convert 的事件
- 最下面是方法结束的处理
- 右侧是开始转换的真正事件响应。
仔细看右边的三个框:
解读一下:
if ([a55dc69742234b29a344bcc29159a07f a409400facd64585b641b8e3eaffd69a]) { [self a0c19915aa804b03bc1d2d7fea69a4ad];} else { [self a565787783594a8c89ddd096b22dae7b];}
分别看一下两个方法:
第一张图上可以看到 checkItunesRunning 说明已经是 iBooksCopy 业务代码了,而第二张图上可以看到 MMRegHintController,说明是要弹出来这个对话框的。
那么,我可以猜测,我只要让这个方法永远返回 True 即可。
Dylib Hook
其实,可以通过 ida 直接改返回值为 1,但对 ida 不是很熟悉,怕玩脱了,就用了更加熟悉的方案。
首先,我们需要创建一个 mac library 项目,用于生成 dylib。
然后写上对应代码:
我们给它添加了一个叫做 FuckYou 的方法,并作了 IMP 交换。为了保证工作正常,加了两行 Log。
然后,把编译生成的 libWTF.dylib 丢入 /Applications/iBookCopy.app/Contents/MacOS/
,执行 yolo iBookCopy libWTF.dylib
。
最后,双击打开,发现破解成功。
后记
写这篇文章的目的,并不是教大家如何破解软件。而是想告诉大家第三方途径或者说盗版 Mac 应用有多么可怕。这么简单几步,就能在神不知鬼不觉的情况下 Hook Dylib。
于是,我就可以监听全部键盘事件了;
于是我可以监听全部网络请求了;
于是我可以偷着打开摄像头了
想想看,这是个多么可怕的事情?
希望大家支持正版。
BTW
还是无法正常生成 CoreImage for Swift 这本书,但是可以生成完整的 Swift 官方文档。说明这个软件也就这么回事吧,罢了罢了。
- 别人的 App 不好用?自己改了便是。嘿嘿嘿 篇
- 别人的 App 不好用?自己改了便是。嘿嘿嘿 篇
- 别人的 App 不好用?自己改了便是。嘿嘿嘿 篇
- 今天把版面给整了一下.嘿嘿!用的都是别人的代码,不过看上去舒服多了
- 自己改别人的《Java超级玛丽》
- 嘿嘿,去空格的几个方法,自己验证了哦~
- 数据库优化 载别人的!嘿嘿
- 别人对自己不好,自己对自己好一点
- 参考了别人的暴力代码 自己的错误在与 思路并不复杂 但是自己的map并没有请空 这个错误 要改
- 开通博客了,本来想自己独立开个博客的,不过太麻烦了。嘿嘿
- 一直使用的DNS不好用了
- 用Hexo + github搭建自己的博客 --- 再也不用羡慕别人了!
- 用Hexo + github搭建自己的博客 --- 再也不用羡慕别人了!
- 一年没写CSDN,以后要经常来看自己的了,原来自己写的也有人看过啊,嘿嘿。
- 你是否将自己的命运交由别人了
- 开始有自己的blog,嘿嘿
- ORACLE数据库的导入导出(网上看了无数教程,感觉不好用,自己便总结了一下)
- 别人的App
- C#中string类型与int类型的转换
- androidStudio中无法获取versionName
- 浙江三体会壁球比赛落幕 杭州代表队夺得两项冠军
- 解决搭建LAMP时编译php :cant' find libmysqlclient_r
- Android曲线图
- 别人的 App 不好用?自己改了便是。嘿嘿嘿 篇
- 别人的 App 不好用?自己改了便是。嘿嘿嘿 篇
- 各种技能树
- flash AS3.0实现进度条与播放暂停按钮的同步
- 别人的 App 不好用?自己改了便是。嘿嘿嘿 篇
- Windows环境下搭建SVN服务器
- Marlin-1.1.3固件Configuration.h文件解析
- 浙江省第八届微型党课大赛圆满落幕
- 51Nod-1467-旋转绳