2010-08-18 4 views
0

Java로 작성하는 난독 화 프로그램의 경우 특정 주소에서 값을 가져 오는 방법을 찾아야합니다. 예를 들어, 16 진수 편집기에서 연 프로그램에서 주소 0000001F는 16 진수 값 "00"입니다. 또한 특정 메모리 주소에 쓸 수 있습니까? 예를 들어 0000001F에 쓰고 "00"에서 "FF"로 변경하면Java를 사용하여 주소에서 값을 얻으려면 어떻게해야합니까?

+0

특정 메모리 주소에 쓰기를 할 때, 실행중인 프로세스를 의미합니까? 코드가 VM에서 실행되도록 제한되므로 Java에서이 작업을 수행 할 수 없습니다. 오히려 이미 알고 있다는 확신이 들기 때문에 질문을 잘못 이해했을 수도 있습니다. – Gangadhar

+4

네이티브 코드없이 직접 메모리 액세스를 사용할 수 없다는 것을 충분히 알지 못하는 언어로 난독 화기를 작성하고 있습니까? 흥미 롭 군. –

답변

1

첫 번째 질문에 대답하려면 파일을 이진 스트림으로 열고 원하는 파일을 읽을 수 있습니다. 클래스 로더 방식에서는 그다지 효과가 없을 것입니다.하지만 파일을 조작하고 런타임에 JVM에서 유효하고로드되는 클래스로 변환하는 사용자 정의 클래스 로더가 있다면 이론적으로 가능합니다. 클래스 로더 자체가 이런 방식으로 난독 화되지 않기 때문에 요점은 무엇인지 궁금해 할 것입니다.

두 번째 질문에 답하려면 Java로 메모리 주소에 직접 쓸 수 없습니다. JNI를 통해 함수를 호출 할 수 있습니다 (JVM 메모리 할당 외).

당신이하고 싶은 일에 대해 잘못된 언어를 사용하고있는 것처럼 들립니다.

1

잘못된 언어를 사용하고 있습니다. C 또는 C++은 (대부분의 시스템에서) 운영 체제 라이브러리를 쉽게 호출하고 특정 위치의 메모리에 액세스하려고하기 때문에 더 나은 선택입니다.

대부분의 POSIX 호환 운영 체제는 현재 프로세스 주소 공간의 특정 위치에 메모리를 매핑 할 수있는 mmap을 구현합니다.

관련 문제