sweetchip's blog


안녕하세요.


요즘 학교 6시간 연강에 고통받으랴 회사일 개인연구.. 등등에 고통받고 있느라 블로그를 잘 못하게 되네요..


얼마전에 IOS에 대해서 연구를 하고싶은게 있어서(라고 썻지만 가지고 놀려고..) 아이패드를 구입하게 되었는데 IOS 앱 바이너리를 추출해보고 싶었습니다.


우선 아이패드의 운영체제인 IOS 8 기준으로 앱스토어에서 다운로드 받은 어플리케이션들은 모두 암호화 되어있다고 합니다.


그래서 실행할 경우 언패킹 과정을 거쳐 메모리에 원본 바이너리를 올린 뒤에 실제 프로그램 루틴이 실행 된다고 하는데, 자세한 원리는 아래 링크를 참고해보시면 되겠습니다.


[IOS Tutorial #1] IOS App 암호화 해제하기 (Decrypting IOS App Binary Encryption) On IOS 6.1.3

- http://repo.kr/0x04-ios-penetration-testing/decrypting-ios-app-binary-encryption-on-ios-6-1-3/



자, 이제 앱 원본 바이너리를 추출해 봅시다.


/*

* 이 포스팅은 IOS 연구를 하시는 분들을 위하여 작성된 게시물 입니다.

* 해당 포스팅을 이용하여 불법적으로 상업적인 이득을 취하거나 그 외 법적으로 문제가 발생할 경우 책임은 본인에게 있음을 알려드립니다.

*/


먼저 준비물은 맥북(Mac os가 설치된 컴퓨터), Root 권한을 얻은 아이폰이나 아이패드 등의 IOS가 설치된 기기가 필요합니다.


또한 아래는 IOS 8.1 기준으로 진행한 방법입니다.


우선 바이너리를 추출하고 복호화 하는 방법은 여러가지가 있지만 그 중 대표적인 방법은 실행된 바이너리를 GDB로 붙여서 메모리 덤프를 해서 실행 파일로 만드는 것입니다.


하지만 이 과정도 상당히 귀찮은 면이 많기때문에 stefan esser 라는 외국 짱짱해커분이 만들어두신 dumpdecrypted 로 비교적 쉽게 덤프가 가능합니다.


https://github.com/stefanesser/dumpdecrypted 의 프로젝트를 다운로드 받고 make 명령어로 dylib 파일을 생성합니다.


sweetchip@sweetchipui-MacBook-Pro:~/Desktop/dump$ git clone git://github.com/stefanesser/dumpdecrypted

Cloning into 'dumpdecrypted'...

remote: Counting objects: 31, done.

remote: Total 31 (delta 0), reused 0 (delta 0), pack-reused 31

Receiving objects: 100% (31/31), 6.50 KiB | 0 bytes/s, done.

Resolving deltas: 100% (15/15), done.

Checking connectivity... done.


sweetchip@sweetchipui-MacBook-Pro:~/Desktop/dump$ ls

dumpdecrypted


sweetchip@sweetchipui-MacBook-Pro:~/Desktop/dump$ cd dumpdecrypted/


sweetchip@sweetchipui-MacBook-Pro:~/Desktop/dump/dumpdecrypted$ ls

Makefile README dumpdecrypted.c


sweetchip@sweetchipui-MacBook-Pro:~/Desktop/dump/dumpdecrypted$ make

`xcrun --sdk iphoneos --find gcc` -Os -Wimplicit -isysroot `xcrun --sdk iphoneos --show-sdk-path` -F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/Frameworks -F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/PrivateFrameworks -arch armv7 -arch armv7s -arch arm64 -c -o dumpdecrypted.o dumpdecrypted.c

`xcrun --sdk iphoneos --find gcc` -Os -Wimplicit -isysroot `xcrun --sdk iphoneos --show-sdk-path` -F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/Frameworks -F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/PrivateFrameworks -arch armv7 -arch armv7s -arch arm64 -dynamiclib -o dumpdecrypted.dylib dumpdecrypted.o


sweetchip@sweetchipui-MacBook-Pro:~/Desktop/dump/dumpdecrypted$ ls

Makefile README dumpdecrypted.c dumpdecrypted.dylib dumpdecrypted.o


sweetchip@sweetchipui-MacBook-Pro:~/Desktop/dump/dumpdecrypted$ scp ./dumpdecrypted.dylib root@[192.168.0.44]:/var/root

The authenticity of host '192.168.0.44 (192.168.0.44)' can't be established.

RSA key fingerprint is 7b:dd:df:de:4c:3d:cb:93:04:91:b2:99:88:37:6e:c3.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.0.44' (RSA) to the list of known hosts.

root@192.168.0.44's password:

dumpdecrypted.dylib 100% 193KB 192.9KB/s 00:00


그리고 만들어진 파일을 scp로 제 아이패드에 복사시킵니다.


그후 아이패드 SSH에 접속합니다.


hyeonseong-won-ui-iPad:~ root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /private/var/mobile/Containers/Bundle/Application/00000000-0000-0000-0000-000000000000/appname.app/appname mach-o decryption dumper

mach-o decryption dumper


DISCLAIMER: This tool is only meant for security research purposes, not for application crackers.


[ ] detected 32bit ARM binary in memory.

[ ] offset to cryptid found: @0xb9a08(from 0xb9000) = a08

[ ] Found encrypted data at address 00004000 of length 13877248 bytes - type 1.

[ ] Opening /private/var/mobile/Containers/Bundle/Application/00000000-0000-0000-0000-000000000000/appname.app/appname for reading.

[ ] Reading header

[ ] Detecting header type

[ ] Executable is a plain MACH-O image

[ ] Opening appname.decrypted for writing.

[ ] Copying the not encrypted start of the file

[ ] Dumping the decrypted data into the file

[ ] Copying the not encrypted remainder of the file

[ ] Setting the LC_ENCRYPTION_INFO->cryptid to 0 at offset a08

[ ] Closing original file

[ ] Closing dump file

hyeonseong-won-ui-iPad:~ root# ls

Application Support appname.decrypted Library dumpdecrypted.dylib


/private/var/mobile/Containers/Bundle/Application/ 경로에 보시면 현재 설치된 앱 바이너리들이 있는데 이는 find 명령어 등으로 정확한 위치를 알아내신 뒤,


위와같이 커맨드를 입력합니다. 그러면 자동으로 디크립션된 앱을 통째로 덤프 떠주면서 마지막으론 appname.decrypted 라는 파일을 뱉어냅니다.


그 후 IFunBox 등의 유틸이나 scp 등을 이용하여 프로그램을 추출하시면 복호화된 원본 바이너리를 얻을 수 있습니다.


이 과정으로 GDB를 붙이는 것에 비하여 비교적 간단하게 어플을 가져올 수 있었습니다.


끝!



참고 링크 1 : http://blog.l4ys.tw/2014/01/dump-ios-app-headers.html

참고 링크 2 : https://github.com/stefanesser/dumpdecrypted


신고

Comment 10

  • 2015.04.06 22:45 수정 답글

    비밀댓글입니다

    • 2015.04.10 15:17 신고 수정

      PPT는 본인이 했던 연구나 공부했던 자료를 발표하는 것이라 보시면 되겠습니다. 제가 지원할 당시 BOB 연구원님께서 최대한 본인을 자랑[?]할 수 있는 기회라고 하셨던 기억이 나네요.
      좋은결과 있으시길 바라겠습니다. :)

    • 안녕하세요..
      2015.04.10 20:53 신고 수정

      와우, 답변 감사합니다.
      그런데 배운게 많이 없는상태에서 지원을 하게되면
      합격은 어려울정도로 경쟁률이 쎈가요??
      기간이 얼마 남지 않은거같아 당장 뭘 준비해야될지도 모르겠고
      초조한 마음만 드네요 ..

    • 2015.04.11 18:09 신고 수정

      2기는 4:1, 3기는 9:1로 기억하고 있습니다.
      일단 BOB에서는 기본적으로 해킹과 프로그래밍 지식이 먼저 필요하다고 보는것 같습니다. 프로그래밍, 웹 해킹, 시스템 해킹등 보안 분야와 관련된 부분을 공부해보시면 좋을것 같습니다.

  • 2015.04.11 11:24 수정 답글

    비밀댓글입니다

    • 2015.04.11 18:11 신고 수정

      그래도 일단 PPT같은건 준비하시는게 좋습니다.
      본인이 어느정도까지 공부한 상태이고 앞으로 더 많은걸 공부할 수 있다는 것을 보여주시면 될 것 같습니다.
      또한 아직 기간이 좀 남아있다면 그 동안 더 많은 연구를 해서 다른 지원자 분들과는 다른 차별점을 만들어 보는게 좋을것 같습니다.

  • 2015.04.15 19:40 수정 답글

    비밀댓글입니다

    • 2015.04.18 13:17 신고 수정

      우선 BOB는 해킹 및 보안 그리고 프로그래밍, 포렌식, 네트워크, 운영체제등 이런 분야를 가르치는 곳입니다.
      지금 부터라도 위 분야 및 위 분야와 관련되어 있는 선수지식 등을 공부하시면서 준비하시면 좋을 것 같습니다.
      그리고 PPT 주제는 정말 자유입니다. 제가 추천드리는건 자기 자신을 가장 자랑할 수 있는 부분(본인이 진행한 연구, 공부 등)을 주제로 발표하시는것을 추천드립니다.

    • 2015.04.18 19:25 수정

      비밀댓글입니다

    • 2015.04.18 20:29 신고 수정

      평가는 제가 아닌 멘토님들이 하시는 거라서 차이가 상당히 클 것 같아서 발표 주제에 대해서는 제가 따로 말씀을 드릴 수 없을것 같네요.
      또한 면접 + PPT 이므로 PPT도 비중이 큰건 사실이지만 복합적으로 들어간다고 보시면 되겠습니다.
      주제는 책에 있는 것을 정리한 내용 보다는 본인이 연구했던 주제로 잡는게 가장 좋다고 보고있습니다. (제 생각입니다.)