2010年5月16日 星期日

[轉]防止iPhone App 糟盜版

http://auauau.javaeye.com/blog/658973

原文: http://b.imi.im/?p=356

先澄清一下, 我也是盗版用户(先自己抽两嘴巴, 但是我已经花了$200买app, 买觉得值得的程序, 而不是apple推崇的冲动式购买, 装盗版是先预览一下这个程序是不是值得买). 在中国做软件, 想不被盗版, 不太现实.
不想自己辛辛苦苦写出来的程序被盗版? 接着看.

首先简单介绍一下原理:

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

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

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

Java 代码
  1. if ([[[NSBundle mainBundle] infoDictionary] objectForKey: @”SignerIdentity”] != nil) {
  2. // 这就是被破解过的app
  3. }


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

Java 代码
  1. NSString* bundlePath = [[NSBundle mainBundle] bundlePath];
  2. BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:(@”%@/_CodeSignature”, bundlePath)];
  3. if (!fileExists) {
  4. // 这就是被破解过的app
  5. }
  6. BOOL fileExists2 = [[NSFileManager defaultManager] fileExistsAtPath:(@”%@/CodeResources”, bundlePath)];
  7. if (!fileExists2) {
  8. /// 这就是被破解过的app
  9. }
  10. BOOL fileExists3 = [[NSFileManager defaultManager] fileExistsAtPath:(@”%@/ResourceRules.plist”, bundlePath)];
  11. if (!fileExists3) {
  12. // 这就是被破解过的app
  13. }

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

Java 代码
  1. NSString* bundlePath = [[NSBundle mainBundle] bundlePath];
  2. NSString* path = [NSString stringWithFormat:@"%@/Info.plist", bundlePath];
  3. NSString* path2 = [NSString stringWithFormat:@"%@/程序名字", bundlePath];
  4. NSDate* infoModifiedDate = [[[NSFileManager defaultManager] fileAttributesAtPath:path traverseLink:YES] fileModificationDate];
  5. NSDate* infoModifiedDate2 = [[[NSFileManager defaultManager] fileAttributesAtPath:path2 traverseLink:YES] fileModificationDate];
  6. NSDate* pkgInfoModifiedDate = [[[NSFileManager defaultManager] fileAttributesAtPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@”PkgInfo”] traverseLink:YES] fileModificationDate];
  7. if([infoModifiedDate timeIntervalSinceReferenceDate] > [pkgInfoModifiedDate timeIntervalSinceReferenceDate]) {
  8. //Pirated
  9. }
  10. if([infoModifiedDate2 timeIntervalSinceReferenceDate] > [pkgInfoModifiedDate timeIntervalSinceReferenceDate]) {
  11. //Pirated
  12. }

沒有留言:

張貼留言