0x1 条件:
这是最基本 : "一部 iPhone 6s 手机" 和 "一台 MBP"。
请出 checkra1n 越狱,永久越,真香
越不了机器,还是日比去算了。。。。
0x2基础:
请移步学习完:
零基础一行代码快速破解iOS某App https://www.chinapyg.com/thread-135910-1-1.html
学习完后,相信你对 Frida,对 Theos-tweak 越狱开发有一定了解了,不懂一定要问,不能纸上谈兵
0x3目标介绍:
这是一款用来隐藏手机相册里私密照片和视频的软件,双层密码加密安全保护隐私。
目标在我手机安装了比较久,我也是正版用户,非常喜爱它。就以它为目标,有感觉,你才会日,对不对??
0x4准备工作:
吊大们没提到的,我在这都作个小小讲解:
先打开App 显示手机进程序:frida-ps -U >>>得到: PV
利用 Frida 脚本,一键脱壳:
中转端口:iproxy 2222 22
执行脱壳:python2 dump.py PV
打开 Info.plist >>>查看>>得到: com.camerasideas.photovault
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*]"
还是无法通过修改,在百般无奈,何无办法时,我求助了C版。
根据C吊多年的实践经验:IAP内购会有个凭据receipt
下面高朝:
经过一波操作后,最终过滤:
frida-trace -U -f com.camerasideas.photovault -m "*[*IapReceiptManager* *]"
发现一处调用了 -[PV.IapReceiptManager init] 方法。
IDA 打开,飞向光明之巅。。。
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)
}
});
附送日地址的脚本:
[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"));
}
新建工程
编绎打包
最后丢到 iPhone 执行
0x6 总结:
这波修改像不像一字节标记破解,哈哈,虽然过程复杂点,但乐在其中!
这全程看似都是我在操作,其背后那股强大的支持力量,就是C版在帮助我,让我学习到了很多东西,在此也分享给大家我学习到的东西!
我希望能举一反三,能继续努力,写出吊B的代码。真心感谢吊大的C版,谢谢!
|