2012-08-01 2 views
2

누구나 OSX의 메모리에서 실행 파일을 실행하는 것에 대해 알고 있습니까? 이와 비슷한 내용 :메모리에서 실행 파일을 시작하는 방법은 무엇입니까?

char *exeFile[size]; 
loadFromFile(exeFile, "/path/to/data"); 
execute(exeFile); 

보안상의 이유로 알려드립니다. 예를 들어, 실행하기 전에 exe를 암호화하고 해독하는 것이 가능합니다.

+0

AFAIK는 불가능합니다. 'exec()'(물론'fork() '이후) 호출을 사용할 수 있지만 실행 파일을 암호화 할 수는 없습니다. – trojanfoe

+0

UPX exe 압축기가 가능하므로 이진 데이터의 압축을 풀고 실행합니다. –

+0

이것은 실행 파일 자체의 코드입니다. 실행 파일을로드하는 동안 부모 프로세스가 수행하는 작업이 아닙니다. – trojanfoe

답변

4

글쎄, 네가 할 수는 있지만 그 복잡한 일은 할 수 있습니다. 현재 작업 코드에 액세스 할 수는 없지만 사용중인 다른 사람은 알고 있습니다. 열쇠는 "NSCreateObjectFileImageFromMemory()"입니다.이 기능은 더 이상 사용되지 않지만 Skype와 같은 몇 가지 큰 응용 프로그램에서는 평판이 좋기 때문에 언제든지 곧 사라질 것입니다 (YMMV).

vm_allocate를 사용하여 페이지 크기의 배수 인 메모리 버퍼를 할당해야합니다. 현재 프로세스와 동일한 아키텍처의 mach-o 실행 파일을 여기에 복사하십시오. 개체 이미지를 반환하는 NSCreateObjectFileImageFromMemory()를 호출합니다. 그런 다음 NSLinkModule, NSLookupSymbolInModule 및 NSAddressOfSymbol을 연속적으로 호출합니다. 마지막 함수는 호출 할 실제 함수 포인터를 얻습니다.

대부분의 정보는 사용자에게 필요한 정보를 제공하며, 검색하면 검색하는 코드를 찾을 수 있습니다. 행운을 빕니다!

+0

데이비드 감사합니다, 좋은 지침이었습니다. 출발점. –

관련 문제