2010-07-01 2 views
0

파일로 응용 프로그램 실행 파일을 읽기하지만 난 NSFileHandle이는 folowing 코드 아무것도 반환하여 다시 아무것도 없어 :아이폰 : 나는 여러 methodes를 통해 주요 응용 프로그램을 읽기 위해 노력했다

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) ; 
} 

을하지만 난 다시 아무것도 없어 그래서 내 질문은 그것이 가능한 읽기 가능 쓰기에 대한 실행 파일에 액세스하는 것입니다 예, 그렇다면 어떻게 할 수 있을까요? 감사합니다.

답변

2

이전 버전의 iPhone OS에서는 응용 프로그램 번들에 파일을 쓰거나 변경할 수 있었지만 그 이후에는 응용 프로그램을 실행할 수 없었습니다 (번들 서명이 적절하지 않아서). 현재 버전에서는 응용 프로그램 번들에 파일을 쓰거나 변경할 수 없습니다.

2

"번들 경로"는 디렉토리 인 (Info.plist, 실행 파일 및 앱 리소스 포함) 인 MyApp.app를 가리 킵니다. 이 유효한 UTF-8 데이터가 아니기 때문에

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

당신은 UTF-8 문자열로 읽을 수 없습니다 : 당신은 응용 프로그램의 바이너리를 원하는 경우, 실행 파일 경로를 사용합니다.

+0

+1 NSBundle은 앱 번들 내에서 파일을 찾는 데 필요한 모든 방법을 제공합니다. 그러나 실행 파일 자체를 읽는 데 유효한 이유가 없습니다. 따라서, 그렇게하려는 시도조차도 사과에 의해 앱이 거부 될 수 있다고 생각합니다. – TechZen

+0

잠재적으로 유효한 이유 (DRM)가 많이 있지만, 나는 그곳에서 약간 carfully해야한다. (바이너리는 암호화되어있다.) 또한 정적 분석을 통해 실행 파일을 읽는 지 확인하기가 쉽지 않습니다. 그리고 하루가 끝날 때 바이너리는 주소 0x1000에로드/복호화되므로 메모리를 읽을 수 있습니다. –

0

실행 파일을 읽으려는 시도가 과거에 나를 거부 한 것으로 확인되었습니다.

원래 실행 파일이 수정되었는지 (불법 복제를 탐지하기 위해) 확인하려고 시도한 코드가있었습니다. 이 코드는 처음에 받아 들여졌지만, iPad 초기 출시 전쯤에 나는 그렇게하는 것에 대한 거절을 받았습니다. 나는 불법 복제 수준에 영향을 미치지 않았으므로 그 이후로 코드를 삭제했습니다.

관련 문제