JNI 레벨에서 JVM 클래스를 덤프하는 Windows용 프록시 DLL입니다.
일부 Java 프로그램은 클래스를 동적으로 로드하고 실행하여 코드를 숨기기 위해 리플렉션을 사용합니다. 메모리에서 덤프할 수 있지만 실행 직후에 언로드되면 어떻게 될까요? rt.jar
편집하고 다양한 반사 방법에 후크를 배치할 수 있습니다. 하지만 프로그램이 바이트코드 수준 후크를 우회하고 네이티브 클래스 로딩 방법을 직접 사용한다면 어떻게 될까요?
이 프로젝트는 귀하의 모든 투기 요구 사항에 대한 보편적인 솔루션을 목표로 합니다. 안정적으로 액세스할 수 있는 가장 낮은 JNI 수준에 연결하면 모든 클래스가 로드되는 동안 덤프됩니다.
DefineClass*
만 후크합니다. JNI에서 자체 클래스 로더를 구현하여 이 방법을 우회할 수 있습니다. 최신 릴리스를 다운로드하세요. java.exe
옆에 있는 Java bin
디렉토리에 version.dll
배치합니다. 모든 프로세스에 영향을 주지 않도록 별도의 Java 설치를 사용할 수도 있습니다. 데스크탑에서 JVMDUMP
라는 새 디렉터리를 만듭니다.
수정된 Java 설치로 프로그램을 실행하면 후킹 결과가 포함된 메시지 상자가 표시됩니다. OK
누르면 로드된 모든 클래스가 데스크탑의 디렉토리 아래에 저장됩니다.
Error 2
발생합니다.JVMDUMP
에 액세스할 수 없습니다.간편하고 안정적으로 JVM에 삽입할 수 있는 간단한 프록시 DLL 구현입니다. 자세한 내용은 참고자료를 확인하세요.
메소드를 코드로 리디렉션하는 후크를 설치합니다. mhook에 의해 구동됨.
클래스 덤핑 논리.
빠르고 간단한 Java 클래스 파서. 각 후크된 바이트 버퍼의 클래스 이름을 구문 분석하고 이를 사용하여 적절한 이름으로 파일을 저장합니다.