[iOS]《PV 私密相册》优雅破解 初学教程

[iOS]《PV 私密相册》优雅破解 初学教程

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版,谢谢!