iOS 진단시 앱을 정적진단 하려고 할때, 앱은 암호화 되어있다.
그래서 복호화 할때 사용하는 툴이 Clutch.
근데 iOS 11 에는 Clutch가 동작하지 않는다.
iOS 10에 Clutch2를 사용할수 있었는데 11은 지원을 하지 않는것 같다.
억지로 실행해보면 bad CPU 어쩌구 저쩌구...
그러면 복호화된 앱을 추출할수 없는건인가?
찾아보니 bfinject라는 툴이 있었다.
긴가민가 하면서 설치를 해보았다.
당연히 준비물은 iOS11 버전의 탈옥된 아이폰이다

[그림 1] bfinject github
파일은 https://github.com/BishopFox/bfinject 에서 다운받아주고
압축을 풀어보면 아래와 같은 파일들이 보인다

[그림 2] bfinject.zip
그중 bfinject.tar 파일을 따로 압축해제 하자

[그림 3] bfinject.tar
압축해제한 파일들이다.
이중 bfinject파일은 수정해야한다.
bfinject가 11.3.1 electra에 호환되지 않기때문에
호환되는 코드로 변경해주어야 한다.
https://gist.github.com/svedm/93bb792ddb22fedf5ab487b1dbf2e897
여기에 나오는 코드로 싹 변경해준다.
이제 위 폴더에 있는 파일들을 탈옥된 아이폰에 전송해준다
파일 전송하는 법은 여러가지가 있는데
그중 winscp를 이용하여 전송한다.
https://winscp.net/eng/docs/lang:ko
여기서 알맞는 파일 다운로드 받으시고 설치하면 된다.
설치다하고 실행해서 PC와 탈옥된 아이폰과 연결을 해보자.

[그림 4] winscp 접속 시도
연결할때 주의점은...
PC와 아이폰이 같은 망에 있어야 합니다.
집일경우 공유기에서 나오는 유선이 PC에 연결 / 탈옥된 아이폰으론 wi-fi연결
(PC도 아이폰과 같은 wi-fi여도 무방)
호스트이름엔 아이폰에서 연결한 wi-fi ip를 입력
(설정 - wi-fi - 연결된 wifi 오른쪽에 i 모양 클릭)
기본 ID/PW는 root/alpine
로그인 버튼 누르면 경고창뜨는데 그냥 예 합시다.

[그림 5] winscp 연결
왼쪽은 PC / 오른쪽은 아이폰 폴더

[그림 6] iphone 루트 폴더
최상위 폴더로 올라가서 폴더 하나 생성.
글쓴이는 jb라고 생성. 생성하고 더블클릭!

[그림 7] bfinject 폴더 생성
jb안에 bfinject라고 폴더 생성. 더블클릭
이 bfinject 폴더안에 아까 다운받은 bfinject 파일을 드래그 해준다.

[그림 8] bfinject 파일 아이폰으로 복사
이제 putty를 통해 ssh 연결을 하여 bfinject를 사용해본다.
https://www.putty.org/ 에서 알아서 다운받으시고 실행 한다음
winscp연결할 때와 같이 아이폰 ip를 입력해준다.

[그림 9] putty 연결 시도
Open 클릭

[그림 10] ssh 로그인
login as 는 ID = root
password = alpine
처음로그인하면 아마 winscp와 같이 경고창하나 뜰텐데 상관말고 예 누릅시다.
패스워드 입력하는데 아무런 반응 안뜬다고 당황하지말고 입력제대로 했으면 엔터치자.
위와같은 화면이 나오면 로그인 성공.
정상적으로 작동하는지 확인해봅시다.
테스트로 starbucks 앱을 해봅니다.
| cd /jb/bfinject bash bfinject -P Starbucks -L decrypt | cs |
1. bfinject 폴더로 경로 이동2. bfinject 실행.
-P : appname
-L : features(cycript, decrypt, test, ispy)
[ 옵션궁금하면 bash bfinject로 확인)

[그림 11] bfinject decrypt 명령어 실행
Success 나온거 보니
정상적으로 잘 작동된거같다.

[그림 12] Decrytption Complete!
앱에서도 완료했다고 팝업이 뜬다. Yes를 눌러주자
이제 복호화 된 ipa파일을 PC로 가져오자
위에 연결된 winscp 에서 아이폰경로를 /var/mobile/Containers/Data/Application/로 변경한다.

[그림 13] decrypted-app.ipa
이상한 코드로 된 폴더중 날짜를 최신으로해서 제일 최근폴더에 접근후
Documents 폴더를 클릭하면 안에 decrypted-app.ipa가 있다.
IDA로 확인해보자

[그림 14] 암호화 된 app

[그림 15] 복호화 된 app
function이 잘나오고 암호화된 app에서는 오류가 발생하나
복호화된 app 에서는 오류가 안나는걸로 봐서는 복호화가 잘된거같다.
아마 조금더 시간지나면 clutch 같은 편리하게 설치할수있겠지 않을까 싶다.
출처 : https://ivrodriguez.com/reverse-engineer-ios-apps-ios-11-edition-part1/
----------
오류
-----------
잘 됐다!!! 라고 생각하는순간

[그림 1] Failed-Tweaks
이런 오류가 뜨는건 Electra로 탈옥할때 Tweaks 토글을 켜놔서 그렇다는거같다.

[그림 2] Tweaks 해제
위와 같이 Tweaks를 해제한 다음 탈옥을 해야 bfinject를 정상적으로 실행할 수 있다.