Frida's Palette 프로젝트 소개

소개

Frida라는 도구는 앱 분석에서 동적 디버깅을 할 때 항상 사용하는 후킹 도구이다.

사실 IDA로 동적분석을 하면 Frida로 할 수 있는 모든 것을 할 수 있지만, 앱에 디버거블 세팅이 되어있어야 한다는 점과 각 동작이 Frida보다 비용이 훨씬 크다는 점에서 Frida를 자주 사용하게 된 것이라 생각한다.

그럼 이 Frida로 분석하는 것은 편한가? 그건 또 아니다. 매번 비슷한 스크립트를 만들게 되는 문제가 생기기도 하고, 스크립트 폴더 위치까지 들어가서 명령어를 입력하기까지 해야한다.

이런 작업에서 해방되기 위해 모든 스크립트를 한곳에서 관리하고, GUI 딸깍으로 후킹하는 도구를 만들고 싶다.

초기 목표

첫번째 마일스톤

안드로이드 앱에 대해서만 지원하고 GUI 없이 번들링된 스크립트 구조만 잡기

그 이후

GUI 추가

스크립트 vsc로 연결

안드로이드 특: 직접 후킹이 아니라 android_dlopen_ext에서 후킹해야한다.

원하면 그 안에서 후킹하도록 해야함 (체크박스로 플래그 컨트롤?)

그런데 모든걸 그냥 복사붙여넣기가 아니라 한번 파싱하고 거기에 맞게 재배치 하는 형식으로 스크립트가 쌓여야된다.

raw 스크립트를 볼 수 있도록 해야함.

자동로드


기능…을 정리해보자

  • 어떤 함수든 하나의 인터페이스로 후킹
  1. 후킹 타이밍
  • 그냥 바로 후킹
  • android_dlopen_ext 의 leave. 하지만 init_array는 후킹할 수 없음
  • 그냥 dlopen
  • NEEDED 에 세팅된 로더가 자동으로 올려주는 라이브러리.
  • init_array (동적링커의 call_constructor 주소 알아야함)

이 타이밍의 중요성은 Process.findModuleByName(“libmsaoaidsec.so”) 이런 명령을 실행했을때 NULL이 안나오게 하는것이다.

  1. 정보 획득
  • 어떤 정보를 획득할 것인가? x0? x1? 같은 레지스터? readPointer? readPointer.readPointer?
  1. 출력
  • 여러 정보들을 획득 후 출력할때 어떻게 출력하나? hexdump? string? BackTrace?
  • 컬러에 맞게 출력돼야함 그런데 일반적으로 만약
  • 출력조건?
  1. detach 타이밍
  • 히트 수?
  • 어떤 값이 나올때까지?

자체 엔진같은 느낌으로 돌리기?
일반 후킹, dlopen, android_dlopen_ext, NEEDED, init_array?
이런거 그냥 돌아가게 해놓고 배열에 추가하면 이 타입 아래에 후킹하도록 추가됨

NEEDED같이 후킹 타이밍 잡기 어려운애들은 대신 로드하는 파일이 있어야함

python으로 여러개의 파일을 불러와서 스크립트 문자열로 붙여서 실행시키면 모듈화가 가능할듯

파이썬 레이어와 js 레이어를 구분하는 느낌으로 해야될듯.
아니면 frida-compile이라는 걸 사용해서 js 모듈들을 합쳐야합.

Comments

ESC
Type to search...