저번에 프리다를 공부하면서 작성했던 글 중에 익명 클래스의 메소드는 후킹하지 못하고 다른 방법으로 후킹했었다.
해당 글에서 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
를 체크해제 한 후 사용하면 각 익명 클래스 번호를 알 수 있다.
맨 처음에 보여 주었던 소스코드와 비교하면 어떤 점이 다른지 한 눈에 알 수 있다. 익명 클래스의 번호가 어떻게 부여되어 있는지 알 수 있고, 클래스 객체를 가져올 때 주석을 참고할 수 있다.