Android 진단 시 유용하게 사용중인 frida를 이용하여 좀더 편리하게 작업하고자 후킹 자동화 코드를 개발하게 되었다.
# 어디까지나 내가 쓰기 편하기 위해 만든 내 입맛 맞춤용이다.
이러한 코드를 개발하게된 계기는 house 라는 반자동화(?) 모듈을 사용하는데 너무나도 훌륭한 모듈이지만 몇가지 기능이 아쉬워 직접 개발해보게 되었다.
그래서 house 코드들을 참고/분석하여 짜집기 식으로 개발하고 있다. (house 추천!!)
#house URL : https://github.com/nccgroup/house
코드 실행 시 다음의 입력을 요구하며, 요구에 맞게 선택하면 관련 기능의 스크립트를 자동으로 생성하여 Attach 하게된다.
- class명을 입력하면 class내 method 목록이 나열되며, 목록 중 후킹 대상 method 선택(입력)
- method argument 타입 등의 정보는 자동으로 인식
- method arg와 ret 데이터를 조회만 할것인지 조작까지 할 것인지 선택
- arg와 ret 데이터 중 어떤 정보를 조작할지 선택
- 후킹 함수의 실행 여부 선택(함수 실행을 못하도록 제한하는 경우를 고려)
아직 개선이 많이 필요한 코드이기에 전체 코드가 아닌 주요 부분만 포스트 하도록 하겠다.
Class 내 선언된 Method 정보(권한, 리턴타입, 함수명, 인자타입) 확인
1 2 3 4 5 6 7 8 9 10 | Java.perform(function() { var method = "Methods:"; var hook = Java.use("%s"); var ownMethod = hook.class.getDeclaredMethods(); ownMethod.forEach(function(value){ method += String(value) + "/"; }); send(method); hook.$dispose; }); |
후킹 대상 함수의 실행 콜 스택을 나열
1 2 3 | function getCaller(){ return clazz_Thread.currentThread().getStackTrace().slice(2,5).reverse().toString(); } |
후킹 대상 함수를 지정 시 overload 함수가 있는지 알수 있으며, 반복문을 통해 모두 후킹
# 특정 함수만으로 제한하도록 구현할까 하다 우선 모두 후킹하도록 구현
1 2 3 4 5 6 | hook0 = Java.use("클래스명"); var overloadz_hook0 = eval("hook0.메서드.overloads"); var count_over_hook0 = overloadz_hook0.length; for (var i = 0; i < count_over_hook0; i++) hget_hook = eval('overloadz_hook0[i]'); |
후킹 대상 함수의 리턴 타입
1 | var ret_type = String(hget_hook.returnType['className']); |
동적으로 데이터를 입력하고 스크립트에서 받기
1 2 | #python code script.post({'type': 'input', 'payload': data}) |
1 2 3 4 5 6 7 | //hook script while (true){ var op = recv('input', function(value) { recv_data = value.payload; }); op.wait(); } |
'Mobile 진단 > Android' 카테고리의 다른 글
Frida를 이용한 훅스크립트 자동 생성 Tool 2 (0) | 2018.09.30 |
---|---|
HMAC-SHA256 구현 코드 및 공략 포인트 (0) | 2018.09.06 |