저번에 프리다를 공부하면서 작성했던 글 중에 익명 클래스의 메소드는 후킹하지 못하고 다른 방법으로 후킹했었다.

해당 글에서 onClick() 메소드를 후킹하지 못해서 다른 방법으로 루팅 탐지를 우회했었다. 알아보니 onClick() 메소드는 DialogInterface.OnClickListener() 에 의해 생성된 익명 클래스에 속한 메소드이기 때문에 sg.vantagepoint.uncrackable1.MainActivity 뒤에 $ 와 함께 번호를 입력해야 한다고 한다. 따라서 onClick() 메소드를 후킹 하는 스크립트를 작성하면 아래와 같다.
Java.perform(function() {
console.log("[*] START...")
var mClass = Java.use("sg.vantagepoint.uncrackable1.MainActivity$1")
mClass.onClick.implementation = function() {
console.log("[*] Clicked ")
}
})
$ 뒤에 오는 번호는 해당 클래스에 존재하는 익명 클래스 순서대로 부여되는데, jadx 로 apk 파일을 분석할 때 옵션에서 inline anonymous classes 를 체크해제 한 후 사용하면 각 익명 클래스 번호를 알 수 있다.


맨 처음에 보여 주었던 소스코드와 비교하면 어떤 점이 다른지 한 눈에 알 수 있다. 익명 클래스의 번호가 어떻게 부여되어 있는지 알 수 있고, 클래스 객체를 가져올 때 주석을 참고할 수 있다.