防止你的iPhone程序遭盗版(入门篇)

摘要:
首先,让我们简单介绍一下原理:大多数用于破解苹果应用程序验证和安装的方法现在都会移动一个文件,即中的“Info.plist”。app文件夹,即程序信息文件。代码非常简单,不再详细解释它的含义。1.检查信息中是否存在密钥SignerIdentity。plist一个完整的程序不会有这个密钥名。苹果没有给你添加,你也没有自己添加。如果是的话,你从哪里得到的结果=零){//这是破解的应用程序}2.检查三个文件是否具有NSString*bundlePath=[[NSBundlemainBundle]bundlePath];BOOLfileExists=[[NSFileManagerdefaultManager]文件存在路径:];如果(!FileExists2){///这是破解的应用程序}BOOLFileExists3=[[NSFileManagerdefaultManager]fileExistsAtPath:];如果(!

转载自:http://www.devdiv.com/%E9%98%B2%E6%AD%A2%E4%BD%A0%E7%9A%84iPhone%E7%A8%8B%E5%BA%8F%E9%81%AD%E7%9B%97%E7%89%88_%E5%85%A5%E9%97%A8%E7%AF%87_-weblog-215400-12864.html

老大让研究app遭盗版了怎么判断,找到一片文章,没测试过,不知道咋测试!先收藏下!

首先简单介绍一下原理:

现在大多数的破解苹果验证安装app的办法都会动一个文件, 就是在.app文件夹下的”Info.plist”, 也就是那个程序信息文件.

代码很简单, 不再详细解释什么意思了

1. 检查Info.plist 是否存在 SignerIdentity这个键名(Key).
破解的程序是不会有这个键名的, 苹果没给你加, 你自己没有加, 如果有, 那是哪儿来的呢?? 嘻嘻….

if ([[[NSBundle mainBundle] infoDictionary] objectForKey: @”SignerIdentity”] != nil) {

  // 这就是被破解过的app

}

2. 检查3个文件是否存在

NSString* bundlePath = [[NSBundle mainBundle] bundlePath];

BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:(@”%@/_CodeSignature”, bundlePath)];

if (!fileExists) {

// 这就是被破解过的app

}

BOOL fileExists2 = [[NSFileManager defaultManager] fileExistsAtPath:(@”%@/CodeResources”, bundlePath)];

if (!fileExists2) {

/// 这就是被破解过的app

}

BOOL fileExists3 = [[NSFileManager defaultManager] fileExistsAtPath:(@”%@/ResourceRules.plist”, bundlePath)];

if (!fileExists3) {

// 这就是被破解过的app

}

 

3. 对比文件修改时间是否一致, 看看你的程序是不是被二进制编辑器修改过了

NSString* bundlePath = [[NSBundle mainBundle] bundlePath];

NSString* path = [NSString stringWithFormat:@"%@/Info.plist", bundlePath];

NSString* path2 = [NSString stringWithFormat:@"%@/程序名字", bundlePath];

NSDate* infoModifiedDate = [[[NSFileManager defaultManager] fileAttributesAtPath:path traverseLink:YES] fileModificationDate];

NSDate* infoModifiedDate2 = [[[NSFileManager defaultManager] fileAttributesAtPath:path2 traverseLink:YES] fileModificationDate];

NSDate* pkgInfoModifiedDate = [[[NSFileManager defaultManager] fileAttributesAtPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@”PkgInfo”] traverseLink:YES] fileModificationDate];

if([infoModifiedDate timeIntervalSinceReferenceDate] > [pkgInfoModifiedDate timeIntervalSinceReferenceDate]) {

//Pirated

}

if([infoModifiedDate2 timeIntervalSinceReferenceDate] > [pkgInfoModifiedDate timeIntervalSinceReferenceDate]) {

//Pirated

}

如果以上3条都没挡住丫挺的步伐, 请等我出高级篇吧 :) 恭喜发财!


PS:

本人用的就是越狱过后的机器,

用 phoneView 打开看了一下,上述的检测方法好像有点儿过时了~

不过获取设备中 userDefaults 物理文件的修改时间还是具有一些参考价值的。

免责声明:文章转载自《防止你的iPhone程序遭盗版(入门篇)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何拒绝搜索引擎对站点内文件的访问Gradle 插件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WINCE快捷方式详解(转载)

1.WINCE快捷方式结构 WINCE的快捷方式和WIN2K,XP的不同,只是一个后缀名为.LNK的文本文件.其格式如下: 数字#路径 比如,有个快捷方式写法如下: 23#\Windows\ToolViewer.exe 指的是指向WINDOWS文件夹下的Toolviewer.exe可执行文件.数字究竟代表的是什么意思,我也不太清楚;有一说法是#后的ACS...

跟阿铭学Linux习题答案

第一章:走进Linux 1、简述它的发展历史,列举几种代表性的发行版 Linux之前是Unix,由于Unix收费昂贵,so,Richard Stallman 发起了开发自由软件的运动,并成立了自由软件基金会(Free Software Foundation,FSF)和GNU 项目和协议GPL(是GNU General Public License)。之后一...

上传大文件的解决方案

需求: 项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在20G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以20G来进行限制。 PC端全平台支持,要求支持Windows,Mac,Linux 支持所有浏览器。 支持文件批量上传 支持文件夹上传,且要求在服务端保留层级结构。文件夹数量要求支持到10W。 支持大文件断点续传,要求...

RedisDesktopManager软件窗口不显示

一、问题描述 在一次打开RDM的时候,只显示了更新提示窗口,而主窗口却并没有显示(双屏都没有显示), 通过Alt + Tab检查发现,软件是正常打开的。 二、解决办法 首先按alt+tab键,确保该窗口处于激活位置(或者任务栏选中这个RDM) 然后再按alt+space键,激活控制菜单(注意快捷键别被占用,如:uTool快键键就是这个) 再按m键(按住不...

如何扩展 Create React App 的 Webpack 配置

CreatereactApp(以下简称 CRA)是创建react应用的一个脚手架,它与其他脚手架不同的一个地方就是将一些复杂工具(比如webpack)的配置封装了起来,让使用者不用关心这些工具的具体配置,从而降低了工具的使用难度。 但是对于一些熟悉webpack的开发者来说,他们可能想对 webpack 配置做一些修改,这个时候应该怎么办呢? 其实我们可以...

项目选题报告(团队)

项目名称——“听说” 一、团队分工 - 周龙荣 2015级计算机5班031502543 负责方向:登录界面设计+界面交互+需求分析 掌握C语言,C++等编程语言,学习过php等编程语言,参加福州大学服务外包与软件设计大赛并获校二等奖。曾开发过数据库系统,有网页界面设计方面经验,有较强的团队意识,良好的组织协调能力。 李家鹏 2015级计算机6班0315...