서론

탈옥된 단말에는 파일을 전송하고, 그 파일을 실행시킬 수 있다.

2장 iOS해킹 기초 에서는 간단하게 hello world를 출력하는 프로그램을 탈옥단말에서 실행시키는 것을 실습하게 되어있다. 책에 있는 방법을 따라가면서 실습을 진행하려고 하였으나, 책이 12년도에 출판된 책이라서 OS환경이 달라 똑같이 진행하는데는 무리가 있었고, 다른 방법을 찾아가면서 실습을 마칠 수 있었다.


본론

탈옥 단말에서 hellow world를 출력하는 프로그램을 실행하기 위한 순서는 아래와 같다.

1. hellow world를 출력하는 소스 코드 작성

2. 컴파일

3. 파일전송을 통해 탈옥단말로 파일 전송

4. 파일 실행


1. hellow world를 출력하는 .c 파일 작성

처음에 소스코드가 간단하기 때문에 vi로 작성하였다.


2. 컴파일

gcc로 컴파일 하여 실행파일을 만들어냈다.


3. sftp를 이용하여 파일전송

책에서는 scp를 이용한 방법으로 써져있었지만, FileZilla로 sftp를 이용하여 파일을 전송하였다.


4. 파일실행

파일을 실행했더니, 아래와 같은 에러 문구가 나오고 실행이 되지 않았다.

이유를 곰곰히 생각해보니, 파일이 arm cpu에서 실행될 수 없는 파일이라는 것을 깨닫게 되었고, 직접확인해본 결과

file의 타겟 cpu타입이 다르다는 것을 확인할 수 있었다.

file 명령어를 통해 확인해 본 결과로 컴파일된 test라는 프로그램은 Mach-O 64-bit바이너리이고, 타겟 cpu는 x86_64였다.


문제 해결을 위해 arm cpu를 타깃으로 컴파일할 수 있는 방법에 대해서 여러가지 찾아보았으나, 책에서 제시하고 있는 llvm-gcc는 OS버전이 올라가면서 경로에서 찾을 수 없었다. arm cpu를 타깃으로 컴파일할 수 있는 arm-eabi-gcc를 설치하고 컴파일 해보니 arm타깃으로 컴파일이 되기는 하나 ELF파일 형식을 가지고 있어서 실행이 될 것같지는 않았다.

한 가지 들었던 생각은 어찌됐건 XCode에서 앱을 만들면 ipa안에 실행 바이너리가 들어있으니까, llvm-gcc가 XCode안에 들어있지 않을까 하고 생각하기는 했지만 찾을 수는 없었고, 조언을 통해 XCode로 컴파일을 하는 방법을 시도해보았다.

 

iOS 앱 프로젝트를 하나 생성한 후 Supporting Files안에 있는 main.m을 위의 사진과 같이 만들어서 실행 바이너리를 얻을 수 있었다.


한 가지 유의할 점은 앱을 빌드할 때 타깃이 시뮬레이터인경우 생성되는 바이너리는 타깃 cpu가 x86_64로 생성된다. 생각해보면 시뮬레이터는 컴퓨터에서 돌아가는 환경이니 당연한 결과인 것 같고, 원하는 arm 타깃 바이너리를 만들기 위해서는 실 디바이스를 연결해서 빌드하는 과정이 필요했다.


이렇게 생성한 바이너리를 동일한 3, 4과정을 거쳐 실행을 한 결과 아주 잘 동작하는 것을 확인할 수 있었다!


결과

정리하고 나니 삽질의 흔적이 많이 보이지는 않지만 저 mach-o arm 실행 바이너리를 얻기위해 많은 것을 시도했다. 이 과정을 통해서 컴파일러들에 대해서 조금은 더 알게되었고 막연했던 무언가가 윤곽이 보이는 것 같은 느낌이든다. 

지금은 간단하게 hellow world를 출력하는 코드를 삽입한 것일 뿐이지만, 특정 위치의 파일을 읽어 온다거나 어떤 메모리의 덤프를 뜬다거나 하는 코드 또한 동작시킬 수 있을 것 같고, 나중에 꼭 쓰게될 기술일거라고 생각한다.

다음 블로깅에는 삽입한 코드를 특정 이벤트 발생 시 실행 시킬수 있는 plist를 작성해서 실습을 진행해볼 예정이다. 


'Study > iOS' 카테고리의 다른 글

iOS Hooking#2(Frida)  (0) 2017.04.19
iOS Hooking#1(Logos)  (1) 2017.04.18
자주쓰는 데이터형 변환  (0) 2016.06.01
[iOS/GCC] __attribute__((constructor)) / __attribute__((desstructor))  (0) 2016.05.13
[iOS] MD5해시 생성 / SHA256해시 생성  (0) 2016.05.09

+ Recent posts