期待了很久的精灵宝可梦总算发布了,出于对它的热爱特地问朋友借了个美区的Apple ID下下来准备试玩一番。可是万万没想到的是,我大天朝居然被锁区了。
本着迫切想要玩到它的心情,想了片刻。试试看破解吧,把自己的地理位置改到美国去不就行了嘛!其实这是我第一次尝试iOS逆向,其中过程也是各种心酸,尝试过的人都懂的。
这次主要是想讲下重签名的问题,我直接拿了虾神的半成品,就接下去做了后面的部分。其实前面的部分也很简单,就只是利用Method Swizzle对CLLocation类做了重载,修改了地理位置。接下来就是把该类打包成dylib动态库之后重新注入到app中就可以了。
把项目下载下来我们可以看到这么一个类:
接下来我们需要做这么几步
1.对动态库进行签名,编译后把动态文件注入到pokemongo.app文件中
2.修改pokemongo.app中的bundle id和描述文件mobileprovision
3.然后对修改好的app文件重新签名
1. 签名 dylib
找到下载好的项目,打开LocationFaker这个项目,把虾神的签名和bundle id改成自己的签名之后编译,也就是修改target中的Code sign和描述文件。这个时候会碰到个问题,会遇到iOSOpenDev权限的问题。很简单,在命令行中输入sudo xcodebuild-license,之后一直往下看然后同意该协议就行了。
http://stackoverflow.com/a/14797884
还没完,等你做到这一步的时候又会碰到个麻烦,如果你使用的是最新版本的xcode的话会发现苹果已经把private framework给去掉了,这意味着你不能编译动态库了。一番研究后得知这个是苹果更新了iOS9.3之后才把这个framework给去掉的,也就是说在iOS9.2的时候还是有的。接下来就跑到这里去下载iOS9.2的SDK,解压后找到里面的PrivateFrameworks复制到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/PrivateFrameworks 。这个时候再重新编译就OK了。记住我们设置的签名和描述文件,等下会派上用场。
总算编译成功了,在Product文件夹中会生成一个dylib文件,这个就是我们最终生成的动态库。为了确保是否已经把签名打进去了,我们可以用codesign 工具做检查。
命令如下: codesign -vv -d LocationFaker.dylib
签名已经成功了!如果不成功的话可以用codesign再签一次,具体codesign的用法可以去看这篇文章
2. 注入到pokemongo.app
找到pokemon_unsigned压缩包进行解压
得到Payload这个文件夹,里面有一个虾神帮我们准备好的app文件,右键查看包内容:
接下来我们需要修改下面三个文件,
1.描述文件
2.plist文件,修改bundle id
3.替换动态文件库
知道了接下来该做什么就简单了,找到刚刚签名时用到的描述文件
在哪里?(在Xcode--Preference--Account--右下角detail--找到描述文件)。替换app里的描述文件,记得名字一定要一样。之后再修改Info.plist中的bundle id,再把我们刚刚签名成功的动态库,名字也必须和app中的一样。
PS: 这里值得注意的是各个文件的名称必须一致,bundle id和描述文件必须相匹配。
好,注入动态库的操作就完成了!接下来就是重签ipa文件了
3. 重签ipa文件
重签名工具推荐使用codesign,或者iReSign。我比较偷懒用的是iReSign,
重签名需要用到3个文件,
1.已签名好的pokemongo.app 并且转成ipa。其实就是把所在的Payload文件夹压缩成zip,之后把后缀改成ipa就行了。
2.签名所对应的描述文件
3.签名所对应的证书
重签名成功后会都出来一个Payload-resigned的zip文件,之后再重复上面的第一步把Payload转成ipa后就是我们最终的ipa文件了。
然后通过iTools安装即可!或者直接通过Xcode安装app文件也是可以的。