2011-11-06 2 views
3

Windows를 사용하여 파일을 메모리로 읽어 들이고 (바이트 배열로 데이터 보관) 파일 시스템에서 원본 파일을 삭제하고 메모리에서 실행할 수 있습니까?exe ​​파일을 메모리에 읽어 실행하십시오


편집

내 목표는 역 enginering에서 내 자바 코드를 보호하는 것입니다.

나는 내 암호화 된 jar 파일을 가져 와서 해독하고 실행하는 C++의 실행기를 작성했습니다. 작은 문제는 파일 시스템 어딘가에서 암호 해독 된 jar 파일을 작성해야하기 때문에 쉽게 캡처하고 디 컴파일 할 수 있습니다 ...이를 방지 할 수있는 방법이 없습니까?

+4

웹에서 NX 비트 및 DEP (데이터 실행 방지)에 대한 더 많은 연구를하고 싶을 수도 있습니다. – Hossein

+1

이러한 기능의 핵심은 무엇입니까? –

+6

코드를 "보호"하기 전에 코드를 실제로 보호 할 수있는 방법이 없다는 것을 알아야합니다. 당신은 공격자가 그것을 얻기가 더 어렵게 만들 수는 있지만 불가능하게 만들 수는 없습니다. – Sylence

답변

8

아니요, 그렇게 할 수 없습니다. "내 기억의 덩어리를 가져 와서 그 부분 만 새로운 프로세스의 이미지로 사용하라"는 시스템 호출은 없습니다.

메모리에 코드를로드하고 현재 프로세스 내에서 코드로 이동할 수 있지만 모든 재배치를 처리해야하기 때문에 추한 일입니다. 자바 특정 부분에 관해서

:

당신이 할 수있는 embed a Java interpreter within your C++ 실행. 암호화 된 Jar 파일에서 클래스를로드하는 Java 용 클래스 로더 (JVM에 대한 C++ 인터페이스를 통해)를 작성할 수 있습니다. 이렇게하면 암호화되지 않은 Jar 파일을 디스크에 쓰지 않아도됩니다. 디버거를 가진 사람이라면 누구나 메모리에 표시 될 것입니다 ...

+0

고맙습니다. 이미 커스텀 클래스 로더를 사용하려고했지만, 스프링과 IoC에 문제가 있습니다. – blow

+0

임베디드 JVM과 원시 클래스 로더를 사용하면 암호화되지 않은 Jar를 쓸 필요없이 작동 할 수 있습니다. 나는 당신이 스프링과 IoC를 "보통"클래스 로더로로드 할 수있을 것이라고 생각한다. 그렇다면 커스텀 네이티브로드로로드하는 것보다 쉽다. – Flexo

관련 문제