0x1 条件:
这是最基本 : "一部 iPhone 6s 手机" 和 "一台 MBP"。
请出 checkra1n 越狱,永久越,真香
1.png (295.29 KB, 下载次数: 73)
下载附件
2019-11-29 16:03 上传
越不了机器,还是日比去算了。。。。
0x2基础:
请移步学习完:
零基础一行代码快速破解iOS某App https://www.chinapyg.com/thread-135910-1-1.html
2.png (653 KB, 下载次数: 85)
下载附件
2019-11-29 15:48 上传
学习完后,相信你对 Frida,对 Theos-tweak 越狱开发有一定了解了,不懂一定要问,不能纸上谈兵
0x3目标介绍:
这是一款用来隐藏手机相册里私密照片和视频的软件,双层密码加密安全保护隐私。
目标在我手机安装了比较久,我也是正版用户,非常喜爱它。就以它为目标,有感觉,你才会日,对不对??
0x4准备工作:
吊大们没提到的,我在这都作个小小讲解:
先打开App 显示手机进程序:frida-ps -U >>>得到: PV
3.png (29.15 KB, 下载次数: 79)
下载附件
2019-11-29 15:49 上传
利用 Frida 脚本,一键脱壳:
中转端口:iproxy 2222 22
5.png (44.59 KB, 下载次数: 85)
下载附件
2019-11-29 15:49 上传
执行脱壳:python2 dump.py PV
6.png (113.06 KB, 下载次数: 71)
下载附件
2019-11-29 15:49 上传
打开 Info.plist >>>查看>>得到: com.camerasideas.photovault
4.png (81.53 KB, 下载次数: 75)
下载附件
2019-11-29 15:49 上传
0x5 神器再出场:
刚开始 Frida ,我也是比较生疏,反正就是各种查。。。。
像飘总说的:选择用关键字在作死的边缘反复进行试探:
frida-trace -U -f com.camerasideas.photovault -m "*[* *FreeTrial*]"
理解*号作用:"*[* *FreeTrial*]" >>>看作: "aa[bb cc]" >>> 一个模糊:"*[* *]",就是三部分,“*FreeTrial*”其实就是一个:* (注意:字符区分大小写)
我试探的关键字有:pro ,member,ad 等。。。。
最后试出:
frida-trace -U -f com.camerasideas.photovault -m "-[GADAdLoader adSource]"
frida-trace -U -f com.camerasideas.photovault -m "-[GADInternalBannerView adSource]"
frida-trace -U -f com.camerasideas.photovault -m "-[GADRewardBasedVideoAd adSource]"
返回0,可以去掉广告,我要的是全功能,无奈打开IDA
frida-trace -U -f com.camerasideas.photovault -m "*[* *viewDidLoad*]"
7.png (112.58 KB, 下载次数: 71)
下载附件
2019-11-29 15:49 上传
还是无法通过修改,在百般无奈,何无办法时,我求助了C版。
根据C吊多年的实践经验:IAP内购会有个凭据receipt
8.png (145.58 KB, 下载次数: 70)
下载附件
2019-11-29 15:49 上传
下面高朝:
经过一波操作后,最终过滤:
frida-trace -U -f com.camerasideas.photovault -m "*[*IapReceiptManager* *]"
9.png (137 KB, 下载次数: 83)
下载附件
2019-11-29 15:49 上传
发现一处调用了 -[PV.IapReceiptManager init] 方法。
IDA 打开,飞向光明之巅。。。
10.png (347.22 KB, 下载次数: 71)
下载附件
2019-11-29 15:49 上传
C版根据经验,快速得出结果:
creantan 17:58:22
这个初始化值可以改改,主动调用set方法,永久会员:setIsPermanentMember
经过一番操作,C版改好了最终脚本:
[JavaScript] 纯文本查看 复制代码var hook = ObjC.classes['PV.IapReceiptManager']["- init"];
Interceptor.attach(hook.implementation, {
onEnter: function(args) {
console.log('\n【++++++++++++++++】:\n')
},
onLeave: function(retval) {
var IapReceiptManager = ObjC.chooseSync(ObjC.classes['PV.IapReceiptManager'])[0];
console.log('log:'+IapReceiptManager+"\n")
IapReceiptManager["- setIsPermanentMember:"](0x1)
}
});
11.png (61.77 KB, 下载次数: 68)
下载附件
2019-11-29 15:49 上传
附送日地址的脚本:
[JavaScript] 纯文本查看 复制代码Interceptor.attach(Module.findBaseAddress('PV').add(0x2B645C), {
onEnter: function(args) {
console.log(Thread.backtrace(this.context, Backtracer.ACCURATE).map(DebugSymbol.fromAddress).join("\n"))
},
onLeave: function(retval) {
retval.replace(0);
}
});
现在 Frida 跑,全功能通过,成了永久会员
现在,要写个永久hook,搬出theos,吊大的C版代码又为我写好了
[Objective-C] 纯文本查看 复制代码@interface IapReceiptManager : NSObject
- (void)setIsPermanentMember:(bool)arg1;
@end
%hook IapReceiptManager
- (id)init {
id iapReceiptManager = %orig;
[iapReceiptManager setIsPermanentMember:YES];
return iapReceiptManager;
}
%end
%ctor {
NSLog(@"[+] PV Hooked");
%init(IapReceiptManager = objc_getClass("PV.IapReceiptManager"));
}
新建工程
code1.png (84.82 KB, 下载次数: 77)
下载附件
2019-11-29 15:58 上传
编绎打包
code2.png (154.04 KB, 下载次数: 83)
下载附件
2019-11-29 15:58 上传
最后丢到 iPhone 执行
2019_11_29_10_50_IMG_0004.PNG (267.84 KB, 下载次数: 83)
下载附件
2019-11-29 15:59 上传
2019_11_29_11_49_IMG_0008.PNG (103.92 KB, 下载次数: 72)
下载附件
2019-11-29 15:59 上传
2019_11_29_10_54_IMG_0006.PNG (154.31 KB, 下载次数: 74)
下载附件
2019-11-29 15:59 上传
0x6 总结:
这波修改像不像一字节标记破解,哈哈,虽然过程复杂点,但乐在其中!
这全程看似都是我在操作,其背后那股强大的支持力量,就是C版在帮助我,让我学习到了很多东西,在此也分享给大家我学习到的东西!
我希望能举一反三,能继续努力,写出吊B的代码。真心感谢吊大的C版,谢谢!