别人的 App 不好用?自己改了便是。嘿嘿嘿 篇
2017-07-01 22:45
190 查看
前言
我们团队里会互相分享买来的电子书,毕竟一本三四百,一人一本实在是太过于昂贵。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/iBookCopy process 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 不好用?自己改了便是。嘿嘿嘿 篇
- 批驳:单元測试自己測效果不好,别人測效果才好
- 判断ios app 第一次启动 别人的 嘿嘿
- 密码发生器 在对银行账户等重要权限设置密码的时候,我们常常遇到这样的烦恼:如果为了好记用生日吧,容易被破解,不安全;如果设置不好记的密码,又担心自己也会忘记;如果写在纸上,担心纸张被别人发现或
- Volley框架的搭建,可以直接用到自己的APP中(参考别人的代码搭建的)
- 批驳:单元测试自己测效果不好,别人测效果才好
- 批驳:单元测试自己测效果不好,别人测效果才好
- 密码发生器(在对银行账户等重要权限设置密码的时候,我们常常遇到这样的烦恼:如果为了好记用生日吧,容易被破解,不安全;如果设置不好记的密码,又担心自己也会忘记;如果写在纸上,担心纸张被别人发现或弄丢了)
- 关于如果自己一个人负责测试一个app的思考
- Google 更新自己的APP 链接
- 【译】自己动手写Django app,第三部分【完】
- 【译】自己动手写Django app,第四部分【全剧终】
- 让别人感到他们自己很重要
- 把"严"留给自己,把"宽"给予别人
- 别问楼主是什么,自己看嘿嘿,mark
- 字符串匹配 wchar To char,摘抄别人的,自己改改,完成了自己的匹配。
- 实用的PPT添加注释小技巧(自己能看到而别人不能)
- 自己看别人看了没用,UNICODE下连接数据库
- 使用FIR.im发布自己的移动端APP