Frida를 이용한 훅스크립트 자동 생성 기능 2차 내용이다.
완벽한 자동화를 목표했으나, 하면 할수록 넘어야할 산이 매우 많은 것을 느끼고 있다.
개발 2차시에 큰 목표는 다음과 같다.
- 다중 Class/Method 후킹 스크립트 생성
- Arg/Ret 입력/출력 시 데이터형에 따른 이슈 확인
이번에도 추가된 주요 기능만을 설명하겠다.
다중 함수 후킹 코드는 기본 후킹 코드을 세분화하여 필요한 횟수만큼 반복하는 형태로 구현하였다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # self.target 은 타겟 Class정보를 Dic{}형태로 가진 List[] 변수 for i in range(len(self.target)): tClass = self.target[i]['class'] tMethod = self.target[i]['method'] mode = self.target[i]['mode'] if self.target[i]['exe'] > 0: exe = 'true' hcode += self.hook_head % (i, tClass, i, i, tMethod, i, i, tClass, tMethod, i, i, tMethod, i, tMethod, tMethod, tMethod) if (mode%2) == 0: hcode += self.hook_arg_input if mode > 2: hcode += self.hook_tail % (exe, tMethod, tMethod, 'true') else: hcode += self.hook_tail % (exe, tMethod, tMethod, 'false') |
후킹한 함수의 Argument Type이 object인 경우 해당 클래스 인스턴스의 멤버변수 정보(type, name, value)를 출력하는 기능이다.
arguments[index].class.getDeclaredFields() 해당 함수 실행 시 클래스멤버변수 정보를 배열로 반환한다.
# getDeclaredMethods( )는 클래스멤버함수 정보를 반환
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | if(String(typeof(arguments[index])) == "object"){ var var_name; var var_type; ownVars = arguments[index].class.getDeclaredFields(); for(var i in ownVars){ var_name = String(ownVars[i]).split('.'); var_name = var_name[var_name.length-1]; if(var_name!='$change' && var_name!='serialVersionUID') { var_type = String(ownVars[i]).split(' '); var_type = var_type[var_type.length-2]; arg_dump += gubunja + " L (" + var_type + ") " + var_name + " = " + String(eval("arguments[index]."+var_name+"['value']")); } } } |
'Mobile 진단 > Android' 카테고리의 다른 글
Frida를 이용한 훅스크립트 자동 생성 Tool 1 (0) | 2018.09.15 |
---|---|
HMAC-SHA256 구현 코드 및 공략 포인트 (0) | 2018.09.06 |