吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 266|回复: 4
上一主题 下一主题
收起左侧

[MacOS逆向] Infuse PRO之密码保存

[复制链接]
跳转到指定楼层
楼主
nmweizi 发表于 2024-9-22 13:46 回帖奖励
本帖最后由 nmweizi 于 2024-9-22 13:55 编辑

Infuse支持 Apple 全家桶播放视频,支持所有常用格式的视频文件。同时,Infuse 还是一款剧集管理工具,能够自动下载元数据,还能保持影视资源库的整洁有序。支持网盘、ftp等文件存储。

infuse pro的破解网上已经很多了,在此不再赘述。仅就密码保存方式分析。

密码保存方法

infuse使用钥匙串保存密码,当重签名后,密码不能被保存到钥匙串中,错误提示。

2024-05-05 18:16:34.591 Infuse[45870:6800841] OSStatus error: [-34018] Security error has occurred.

跟踪报错,分析

可以找到是ObjC.classes.UICKeyChainStore["+ storeUsername:andPassword:forService:"]方法,用于保存用户名、密码。
跟踪这个函数调用,可以看到具体调用了

实际具体调用的函数是SecItemAdd, 其是macOS 和 iOS 系统中 Security 框架的一部分,用于将钥匙串项(如密码、证书、密钥等)添加到系统钥匙串中。

函数定义

OSStatus SecItemAdd(   CFDictionaryRef attributes,   CFTypeRef *result);

参数说明
> attributes 一个包含钥匙串项属性的字典(CFDictionaryRef),用于指定添加项的各种信息。包括要存储的数据类型(密码、证书等)、服务名、账号名等。
> result 一个可选参数。如果你希望返回新添加项的引用,可以传递一个指向 CFTypeRef 的指针。如果你不需要此项引用,可以传入 NULL。

函数替换

既然重签名后不能使用,找到一个类似函数替换即可。

SecKeychainAddGenericPassword
定义如下

OSStatus SecKeychainAddGenericPassword (
   SecKeychainRef keychain,
   UInt32 serviceNameLength,
   const char *serviceName,
   UInt32 accountNameLength,
   const char *accountName,
   UInt32 passwordLength,
   const void *passwordData,
   SecKeychainItemRef *itemRef
);

注意事项

权限问题:在 macOS 应用中使用此 API 时,可能需要申请适当的权限。如果应用启用了沙箱(App Sandbox),则需要在 Entitlements 文件中启用钥匙串访问权限。

隐私提示:当应用第一次访问钥匙串时,macOS 可能会提示用户进行授权。

调用参数

t2 username
t3 password
t4 devicename

具体实现

const objectForKeyedSubscript = ObjC.classes.UICKeyChainStore["+ storeUsername:andPassword:forService:"];
    Interceptor.attach(objectForKeyedSubscript.implementation, {
        onEnter(args) {
            mylog("patch storeUsername:andPassword:forService:");
            var t2 = new ObjC.Object(args[2]);
            var t3 = new ObjC.Object(args[3]);
            var t4 = new ObjC.Object(args[4]);
            passwordAdd(t4.toString(), t2.toString(), t3.toString());
            mylog("run passwordAdd");
        },
        onLeave: function (retval) {
            mylog("patch storeUsername:andPassword:forService:  end");
        }
    })

passwordadd函数实现

    mylog("serviceName:", serviceName);
    var serviceNameUtf8 = Memory.allocUtf8String(serviceName);
    mylog("serviceNameUtf8:", serviceNameUtf8);
    var serviceNameLength = serviceName.length;
    var accountNameUtf8 = Memory.allocUtf8String(accountName);
    var accountNameLength = Memory.readUtf8String(accountNameUtf8).length;
    var passwordUtf8 = Memory.allocUtf8String(password);
    var passwordLength = Memory.readUtf8String(passwordUtf8).length;

    var itemRefPtr = Memory.alloc(Process.pointerSize);
    var keychainPtr = NULL;
    var SecKeychainAddGenericPassword = new NativeFunction(Module.findExportByName('Security', 'SecKeychainAddGenericPassword'), 'int', ['pointer', 'uint32', 'pointer', 'uint32', 'pointer', 'uint32', 'pointer', 'pointer']);

    var status = SecKeychainAddGenericPassword(keychainPtr, serviceNameLength, serviceNameUtf8, accountNameLength, accountNameUtf8, passwordLength, passwordUtf8, itemRefPtr);

读取密码

有写就有读,读取方法同写方法类似,大家可以找找看。

免费评分

参与人数 2吾爱币 +2 热心值 +1 收起 理由
kingscu + 1 热心回复!
KeviseBY + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
KeviseBY 发表于 2024-9-23 08:02
学习了,不错,感谢分享
3#
squallzcy 发表于 2024-9-23 09:31
求一个Apple tv可以用的infuse pro,之前在小黄鱼上买过一次,结果用了没多久就提示要输入账号密码才能继续用了。唉
4#
justlook 发表于 2024-9-23 09:33
squallzcy 发表于 2024-9-23 09:31
求一个Apple tv可以用的infuse pro,之前在小黄鱼上买过一次,结果用了没多久就提示要输入账号密码才能继续 ...

拼了一个买断的授权,一年多了了,偶尔需要track下,然后车主也很热情。目前看稳。
5#
squallzcy 发表于 2024-9-23 14:11
justlook 发表于 2024-9-23 09:33
拼了一个买断的授权,一年多了了,偶尔需要track下,然后车主也很热情。目前看稳。

羡慕有稳定车
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-9-23 15:19

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表