티스토리 뷰
IPA의 Binary Patch를 통해서 ARM Assembly로 구성된 코드 자체를 수정해 내가 의도한 실행흐름으로 바꾸게 된다. Binary Patch를 하게되면 무결성 검증에 걸리기 때문에 무결성 검증이 기본적으로 우회가 되어있어야 한다.
( 무결성 검증 이전의 동작에 대해서는 Binary Patch를 통해서 수행이 가능하다. )
Binary Patch를 수행하는 과정을 살펴보자.
사용한 앱은 DVIA에서 제공하는 앱이며, Runtime Manipulation Login Method1에 대해서 진행했다.
1. IPA 추출(Decrypt)후 Binary File을 IDA에 올린다.
IPA 파일를 CrackerXI를 통해서 Decrypt한 후 추출한다.


왼쪽에 정상적으로 복호화된 API를 확인할 수 있다.
2. Patch할 곳을 찾고 RVA를 파악한다.

isLoginValidated 함수의 반환값을 통해 결과가 달라진다는 것을 확인할 수 있다.

기본적으로 무조건 0을 반환하도록 되어있다. Binary Patch를 통해 반환 값을 1로 변경해보자. 우선 이 부분의 RVA를 파악해본다.

MOV W0, #0 을 MOV W0, #1로 수정할 것이므로 해당 명령어의 RVA를 찾으면된다.


SpaceBar를 눌러서 해당 명령어의 주소를 0x100007774인 것을 확인할 수 있다. Base Address가 0x100000000임으로 0x7774가 RVA가 된다.
3. Patch할 곳을 바꿀 명령어의 HEX값을 구한다.

armconverter
armconverter.com
에서 ARM 명령어를 HEX값으로 바꿀 수 있다.
4. HEX Viewer로 Binary File을 열고 2번에서 봐둔 RVA를 확인한다.
IDA로 봤을 때랑 동일한 HEX값인지 확인하는 것도 잊지 말자!!


어째서 이렇게 다르지.... 마지막 3Byte는 똑같긴하다.. 다른앱에서는 똑같았는데 ㅠ_ㅠ Ctrl + F를 통해서 해당 Binary의 주변 HEX값들을 비교하며 찾았다.
5. 3번에서 구한 HEX값을 해당 위치에 덮어써서 Patch를 진행한다.


수정한 Binary File을 다시 IDA에 올려서 정상적으로 변경됐는지 확인한다.
( Binary File이 커지면 이를 확인하기 어려울 것 같다...? IDA 여는것만 한세월ㅠㅠ )
6. 3uTools로 원본 Binary File과 수정한 Binary File을 iphone에 넣는다.

7. SSH를 통해 iphone에 접속해 다음 명령어들을 수행한다.
ldid -e [원본 Binary File] > ch4njun.xml
chmod +x [수정된 Binary File]
ldid -Sch4njun.xml [수정된 Binary File]
이 과정을 거치지 않으면 수정한 APP이 켜자마자 꺼진다.

8. 3uTools로 수정한 Binary File을 PC로 추출한다.
9. 추출한 Binary File을 기존 IPA 폴더에 덮어쓰고 압축후 확장자를 .ipa로 변경한다.
( 반드시 최상위에 payload 디렉토리가 와야한다. )



10. 생성된 IPA 파일을 3uTools를 사용해 iphone에 설치한다.
11. 설치된 APP을 실행하면 return 1에 의해서 Login에 성공하는 것을 확인할 수 있다.
SUCCESS !
'IOS > Hacking' 카테고리의 다른 글
[IOS] Local Data Storage 종류와 저장 위치 (+API) (Feat. objection) (0) | 2020.08.20 |
---|---|
[IOS] objection 사용하기 (Application Runtime Analyze Tool) (0) | 2020.08.12 |
[IOS] lldb를 이용한 IOS Application 동적 디버깅 ( + Cheat Sheet) (0) | 2020.08.06 |
[IOS] 탈옥 탐지(Jailbreak) 코드 예시. (2) | 2020.07.10 |
[IOS] IPA 추출방법. (IOS 12.4.7/12.4.8) (0) | 2020.07.08 |