2013-08-18 2 views
0

심하게 난독 화 된 응용 프로그램의 경우 deobfuscator에서 작업 중입니다. 코드를 단순화하기 위해 제거하고 싶은 많은 중복 메소드가 있습니다. 불행히도, 나는 이것을 할 수있는 asm과 바이트 코드에 대한 충분한 지식이 없기 때문에 누군가가 asm을 호출하여 호출되는 메소드를 확인하는 방법에 대해 나에게 알려줄 수 있습니까?ASM을 사용하여 메소드가 호출되는지 확인

+6

대답은 분명합니다 : ASM과 바이트 코드에 대한 더 많은 지식을 얻으십시오. 둘 다 [documentation] (http://download.forge.objectweb.org/asm/asm4-guide.pdf) [available] (http://docs.oracle.com/javase/specs/jvms/se7/html/ jvms-6.html). 'javap -c'로 응용 프로그램 (또는 임의의 자바 코드)을 디 컴파일하고 그것의 출력을 파고 또한 도움이 될 것입니다. – millimoose

+0

응용 프로그램에서 리플렉션을 사용하여 해당 메서드를 호출하는 경우 메서드가 호출되는지 여부를 감지하는 것은 불가능합니다. – zapl

+0

리플렉션을 사용하지 않습니다. 그 정도는 알고 있습니다. –

답변

1

클래스에 의해 호출되는 메소드 목록을 수집하는 것은 간단합니다. ASM 색소폰 API를 사용하는 경우

public void visitMethodInsn(int opcode, String owner, String name, String desc) 

그리고 방법 이름, 소유자 및 서명을 수집하십시오.

트리 API를 사용하는 경우 동일한 정보를 MethodInsnNodes에서 사용할 수 있습니다.

선언/정의 된 클래스 목록을 생성하는 것은 똑같이 똑바로 진행됩니다. 각 메소드는 visitMethod 또는 tree api의 메소드 노드를 호출하게됩니다.

관련 문제