본문 바로가기
Hack/Mobile

[iOS] Frida에서 Fat Binary File Offset 잡기

by Becoming a Hacker 2022. 4. 24.
반응형

먼저 Fat Binary란 하나의 실행 파일이 여러 아키텍처에서 적용될 수 있도록 구성된 파일이며, 아래의 그림과 같이 Fat Binary는 Fat Header와 Fat Architecture로 구성되어 있습니다. 각각의 Architecture는 각각의 실행 코드를 가르키고 있으며, OS에서 로드 시 해당 Architecture에 맞는 Mach-O Format이 로딩됩니다.

Fat Binary

 

IDA에서 Fat Binary인 IPA를 실행할 경우 아래 그림과 같이 어떤 Architecture를 이용할 것인지 묻는 알림 창이 뜹니다. 현재 실행되고 있는 Architecture를 클릭한 뒤, 분석이 마무리될 때까지 기다립니다. (여기선 ARM64)

 

아이폰에서 Frida를 이용하여 Hooking을 하기 위해서는 Offset을 구해야하는데 Fat Binary의 경우 아래에 위치한 Offset과 실제 Frida에서 사용하는 Offset에서 차이가 발생하게 됩니다.

 

이때 0x1xxxxxxxxx에 위치한 주소 값에서 "0x1000000000"을 뺀 값을 Offset으로 입력하면 Frida Hooking이 정상적으로 걸리게 됩니다.

var base = Module.FindBaseAddress("test")
var fun1 = base.add(0x20CF8)

Interceptot.attach(fun1,{
	onEnter:function(args){
    	console.log("Frdia Hooking")
	}
})

 

너무나도 당연한 이야기지만, Fat Binary를 처음 보는 경우 어떻게 Offset 잡아야할 지 고민하는 경우도 있어 포스팅을 하게 되었습니다.

댓글