【Mac】简单记录下对某软件限制使用的分析
#### 限制使用 具体表现在:程序位置必须在应用程序目录,不能为其他目录
**有图有真相,先看图**
**然后看看真相后面隐藏了什么,上代码图**
- 先说说*applicationWillFinishLaunching*这个函数是干嘛的,是载入程序时调用的,看字面意思也看得出来,注意,只有正常加载完这个函数程序才会正常启动。
- 再来说是下面他干的事情
```
v3 = objc_msgSend(&OBJC_CLASS___NSBundle, "mainBundle", a3);
v4 = (void *)objc_retainAutoreleasedReturnValue(v3);
v5 = v4;
v6 = objc_msgSend(v4, "bundlePath");
v7 = (void *)objc_retainAutoreleasedReturnValue(v6);
v8 = v7;
v9 = objc_msgSend(v7, "stringByDeletingLastPathComponent");
v10 = (void *)objc_retainAutoreleasedReturnValue(v9);
```
这几句话就是获取当前程序的运行目录
```
v11 = objc_msgSend(v10, "lowercaseString");
v12 = (void *)objc_retainAutoreleasedReturnValue(v11);
v13 = (unsigned __int64)objc_msgSend(v12, "isEqualToString:", CFSTR("/applications"));
```
上面这几句呢,是把获取到的目录转成小写,在和*/applications*比较是否一致
```
if ( v13 )
{
if ( (unsigned __int8)+(&OBJC_CLASS___NeatNsUtils, "wasLaunchedAsLoginItem")
&& !(unsigned __int8)+(&OBJC_CLASS___NeatNsUtils, "getSettingAutoStart") )
{
objc_msgSend(NSApp, "terminate:", 0LL);
}
}
else
{
+(
&OBJC_CLASS___NeatNsUtils,
"showMessage:description:",
CFSTR("NeatDownloadManager should run from Applications folder."),
CFSTR("Please CopyNeatDownloadManager.appto \r\n /Applications folder and then run it."));
objc_msgSend(NSApp, "terminate:", 0LL);
}
```
如果对比是在应用程序目录,就进行一系列的操作,这里我就不展开了
**重点是**,如果对比结果为否,就是不在应用程序目录,那就弹窗
> CFSTR("NeatDownloadManager should run from Applications folder."),
CFSTR("Please CopyNeatDownloadManager.appto \r\n /Applications folder and then run it."));
这就是上面第一张图的结果了,至于解除限制也简单,把最后这个跳转NOP掉就好了 本帖最后由 best_919 于 2020-7-27 17:51 编辑
吾道一以贯之 发表于 2020-7-27 10:07
支持大佬,现在的idm在下载b视频时,好多都没声音,有解决办法吗?
将B站视频播放方式改成 FLASH 就OK;默认 H5 播放器是下载不了声音的.
原贴https://www.52pojie.cn/thread-1249351-1-1.html
整改后的软件下载链接https://tmwl.lanzouj.com/b015pd4fe
烦请版主看看这个整改后的是否适合发帖.
刚刚发送消息上限了,不知道这样回复是否合适
如果不合适还请给个提醒 重新编辑 膜拜大佬!{:1_921:} 学习了,膜拜大佬 支持大佬! 膜拜大佬,有点深 值得学习 大佬的技术 学习了,大佬{:1_893:} 666厉害
大佬牛批!!!! 技艺高超