이유는 간단하다. frida로는 objc_msgsend 함수를 후킹하면 objc_msgsend 함수가 많이 사용되기 때문에 오버헤드가 걸려서 앱이 죽기 때문이다. 또한, objc_msgsend 함수를 후킹하면 ObjectiveC의 어떤 함수가 호출되었는지 알 수 있기 때문에 앱 분석에 필요해 만들게 되었다.
Step 1. xcode에서 Logos Tweak으로 새 프로젝트를 생성한다.
Step 2. Tweak 이름과 식별자를 지정한다.
Step 3. 프로젝트가 생성 된 후, build settings을 각자 환경에 맞게 해준다.
(1) Deployment Info 부분에 iOS 버전을 Tweak을 설치할 모바일 버전으로 설정한다.
(2) Code Signing Identity를 iOS Developer로 설정한다.
(3) Development Team을 설정해준다.
(4) Library Search Paths를 /opt/theos/vendor/lib로 설정하고 libinspectivec.dylib 파일을 /opt/theos/vendor/lib에 위치시키면 된다.
이외에도 build시 오류나는 것들은 오류 메시지를 보고 설정해주면 된다.
Step 4. objcSendHooking.xm에 objc_msgsend hook을 위한 코드 작성한다.
#include "InspCWrapper.m"
%ctor {
enableCompleteLogging();
}
코드 분석 : %ctor은 tweak의 constructor로 앱이 생성되면 %ctor 함수를 호출하여 초기화하는 역할을 한다. enableCompleteLogging()는 현재 thread의 모든 메시지가 로깅되는 것을 가능하게 한다.
Step 5. InspCWrapper.m을 InspectiveC 오픈소스에서 다운받아 아래와 같이 위치시켜준다.
Step 6. 마지막으로 objcSendHooking.plist에서 objc_msgSend 후킹을 원하는 앱의 이름을 적어준다.
Step 7. build를 성공하면 아래와 같이 .deb파일과 .zip 파일이 생긴다.
Step 8. 모바일 단말을 ssh로 연결 후 /var/mobile에 .deb파일을 옮긴뒤 dpkg -i 파일명.deb파일을 통해 Tweak을 설치한다.
Step 9. cydia에서 설치완료된 항목에 objcSendHooking을 확인할 수 있다.
Step 10. 앱을 실행시키고 난 후 /var/mobile/Containers/Data/Application/App-Hex/Documents/InspectiveC에 들어가보면 아래와 같이 objc_msgSend 함수가 후킹된것을 확인할 수 있다.
처음에는 xcode가 아니라 cmd에서 theos를 설치하고 make package까지 했는데 라이브러리 위치를 잘못잡아서 build가 계속해서 실패했다. 그러나, 당시에는 어느곳에 lib를 위치해야할지 몰라서 theos가 잘못된줄 알고 thoes 재설치만 10번을 넘게한것같다..ㅎㅎ 자료도 많이 없고 맨땅에 헤딩하는 느낌이 들어서 일주일 내내 이것만 붙잡고 있었다. 그러다 쉬려는 타임에 xcode를 구경해볼까 하다가 Logos Tweak 프로젝트 생성을 알게 되었고 마침내 Tweak까지 만들 수 있었다. 일주일을 넘어가면서 포기할까도 생각했지만 하루하루 하다보니 오류가 나 실패하더라도 조금씩 나아가는게 느껴졌다. 역시 포기는 배추나 셀때 하는 말이라는게 입증된 일주일이였던것같다. Tweak 만드는 과정이 재밌었고 해낸것이 뿌듯했다. 앞으로 이거 가지고 앱 분석 열심히 해야겠다. 모바일 문제 풀러 가야겠다!
참고자료) https://developer.apple.com/documentation/objectivec/1456712-objc_msgsend
https://hackcatml.tistory.com/166