iPhone:将应用程序可执行文件读取为文件

iPhone:将应用程序可执行文件读取为文件,iphone,objective-c,nsbundle,Iphone,Objective C,Nsbundle,我试着通过几种方法阅读主应用程序,但什么也没有得到 使用NSFileHandle,它不返回任何内容,代码如下: NSFilemanager *filemanager = [ filemanager defaultmanager ] ; NSString *myfile = [ [ NSBundle mainBundle ] bundlePath ] ; if ( [ filemanager isReadableFileAtPath:myfile ] ) NSLog(@" myfile

我试着通过几种方法阅读主应用程序,但什么也没有得到 使用NSFileHandle,它不返回任何内容,代码如下:

NSFilemanager *filemanager = [ filemanager defaultmanager ] ;
NSString *myfile = [ [ NSBundle mainBundle ] bundlePath ] ;
if ( [ filemanager isReadableFileAtPath:myfile ] ) 
    NSLog(@" myfile is readable ") ;
if ( [ filemanager isWritableFileAtPath:myfile ]) 
    NSLog(@"myfile is wrieable ") ;
NSFileHandle *filehandle= [ NSFileHandle fileHandleForReadingAtPath:myfile ] ;
if (myfile == nil) {
    [ filehandle closeFile ] ;
}else {
    NSData *filedata = [ filehandle readDataToEndOfFile ] ;
    NSString *filestrdata = [ [ NSString alloc ] initWithData:filedata encoding:NSUTF8StringEncoding ] ;    
    NSLog(@"string data \n %@ " , filedata) ;
}
但我什么也没得到,所以我的问题是,有没有可能访问可执行文件进行读写,如果有,我们怎么做?
谢谢

在以前版本的iPhone操作系统中,您可以在应用程序包中写入/更改文件,但此后您的应用程序将无法启动(因为您的包签名不再正确)。在当前版本中,根本不可能在应用程序包中写入/更改文件。

在以前版本的iPhone操作系统中,可以在应用程序包中写入/更改文件,但此后无法启动应用程序(因为包签名不再正确)。在当前版本中,根本无法在应用程序包中写入/更改文件。

包路径”指向MyApp.app,它是一个目录(包含Info.plist、可执行文件和应用程序的资源)。如果需要应用程序的二进制文件,请使用可执行路径:

NSString * path = [[NSBundle mainBundle] executablePath];
NSData * filedata = [NSData dataWithContentsOfFile:path];
您将无法将其作为UTF-8字符串读取,因为它不是有效的UTF-8数据。

捆绑路径”指向MyApp.app,它是一个目录(包含Info.plist、可执行文件和应用程序的资源)。如果需要应用程序的二进制文件,请使用可执行路径:

NSString * path = [[NSBundle mainBundle] executablePath];
NSData * filedata = [NSData dataWithContentsOfFile:path];

您将无法将其作为UTF-8字符串读取,因为它不是有效的UTF-8数据。

我可以确认,过去尝试读取可执行文件导致我被拒绝


我最初有一段代码,试图确定可执行文件是否被修改(以检测盗版)。虽然该代码最初被接受,但在iPad首次发布时,我因为这样做而遭到拒绝。我已经删除了该代码,因为它实际上对盗版水平没有任何影响。

我可以确认,过去尝试读取可执行文件导致我被拒绝


我最初有一段代码,试图确定可执行文件是否被修改(以检测盗版)。虽然该代码最初被接受,但在iPad首次发布时,我因为这样做而遭到拒绝。我已经删除了该代码,因为它实际上对盗版水平没有任何影响。

+1 NSBundle提供了在应用程序包中查找文件所需的所有方法。但是,没有有效的理由读取可执行文件本身。因此,我猜即使是这样做的尝试也可能会被苹果拒绝。有很多潜在的正当理由(即DRM),但我认为你必须有点谨慎(比如二进制文件是加密的)。检查您是否通过静态分析读取可执行文件也不容易。在一天结束时,您的二进制文件将在地址0x1000处加载/解密,因此您可以只读取内存。+1 NSBundle提供了在应用程序包中查找文件所需的所有方法。但是,没有有效的理由读取可执行文件本身。因此,我猜即使是这样做的尝试也可能会被苹果拒绝。有很多潜在的正当理由(即DRM),但我认为你必须有点谨慎(比如二进制文件是加密的)。检查您是否通过静态分析读取可执行文件也不容易。在一天结束时,您的二进制文件将在地址0x1000处加载/解密,这样您就可以读取内存了。