본문 바로가기

40./42. iOS

[DVIA] 10. Binary Patching

[DVIA] 10. Binary Patching


모바일 애플리케이션의 실행 파일을 패치함으로써 애플리케이션의 기능을 영구적으로 변경 가능하다. 



101. Login Method 1


DVIA 모바일 애플리케이션에서 바이너리 패치 문제 중 첫번째 "Login Method 1"는 계정과 비밀번호로 인증하는 기능이다. 계정과 비밀번호가 틀려도 로그인 가능하면 성공이다.


계정과 비밀번호에 aa로 인증 시도하였으나, Oops 경고창을 확인했다.


# 진행 단계 #

1. 테스트 실행 (로그인 불가능)

2. Snoop-it을 이용하여 동적 Object-C Class/Object-C Method 호출 확인

3. IDA(Disassembler)를 이용하여 Object-C Method 동작 확인

4. Hex Editor를 이용하여 바이너리 패치

5. 실행권한 및 소유자 변경

6. 동작확인



iDevice에서 Snoop-it 실행하고, DVIA를 선택한다.


DVIA를 실행하고 메뉴에서 Binary Patching을 선택한다. Snoop-it에서 DVIA내 Object-C Class 호출을 트레킹하여 아래와 같이 초록색 동그라미로 표시해 준다. Binary Patching 메뉴를 선택하면 호출되는 Object-C Class는 UIViewController 내 ApplicationPatchingVC, ApplicationPatchingDetailsVC임을 확인 가능하다. 


ApplicationPatchingDetailsVC Object-C Class에서 -(void)loginMethod1Tapped:(id)arg0;라는 Object-C Method가 로그인 버튼(Login Method 1) 클릭시 동작하는 기능임을 추측한다. 


이제 DVIA를 실행파일을 추츨하러 iDevice에서 터미널로 접근하다.

실행 파일의 위치는 ps를 이용하여 확인 가능하다.


# ps -ef | grep Damn


실행 파일 추출 전, otool 명령어를 이용하여 암호화 여부를 확인한다.

#otool -l /Application/DamnVulnerableIOSApp.app/DamnVulnerableIOSApp | grep crypt

만일 cryptid가 1이면 AppStore에 올릴때 Apple에서 암호화한것이므로 Clutch와 같은 툴을 이용하여 암호를 해독한 후 추출해야한다.


WinSCP를 이용하여 추출하였으나 다른 방법도 무방하다.


이제 디스어셈블러를 이용하여 분석을 할 것이다.

일단 IDA를 실행하여 이전에 추출한 실행파일을 올린다. (사용한 IDA버전은 6.5)


IDA 좌측에 Functions Windows에서 Function name을 검색한다. 이전에 확인한 ApplicationPatchingDetailsVC내 loginMethod1Tapped를 검색한다.


loginMethod1Tapped 메소드는 아래 이미지와 같이 동작한다.

(열심히 이미지 수정을 하였으나, 업로드 이미지가 똥이다.ㅡㅡ)

일단 상단에서 계정이 Admin인지 확인을 하고 분기문(BEQ)를 이용하여 나눠진다.

만일 Admin이 맞다면 그다음 비밀번호가 This!sA5Ecret인지 확인한다.

비밀번호 또한 맞다면 로그인 성공 페이지를 보며주고, 둘다 틀리다면 로그인 실패 페이지를 보여준다.


첫번째 분기문에서 스페이스를 누르면 아래와 같이 주소 정보를 확인 가능하다
__text:0001F3C6    BEQ    loc_1F42C


Hex Editor를 이용하여 해당 주소 값을 변경한다. (BEQ -> BNQ)

BEQ loc_1F42C == 31D0

BNQ loc_1F42C == 31D1


두번째 분기문에서 스페이스를 눌러서 아래와 같이 주소 정보를 확인한다.

__text:0001F41E    BEQ    loc_1F438


Hex Editor에 주소 검색을 이용하여 쉽게 주소 위치 검색 가능하다.


Hex Editor를 이용하여 해당 주소 값을 변경한다. (BEQ -> BNQ)

BEQ loc_1F42C == 31D0

BNQ loc_1F42C == 31D1


이제 변경한 실행파일을 다시 iDevice에서 넣는다.


실행 권한과 사용자를 변경한다.

# chmod 755 DamnVulnerableIOSApp

# chown mobile.staff DamnVulnerableIOSApp


이제 로그인 시 계정과 비밀번호에 aa만 넣어도 로그인 인증이 성공한다.




102. Check For Jailbreak



Login Method 1과 동일


103. Show alert


Show alert문제는 I love Google이라고 출력되는 경고창을 I Love Apple로 변경하라는 문제이다. 


# 진행 단계 #

1. 테스트 실행 (I love Google)

2. 실행 파일 추출 Hex Editor를 이용하여 바이너리 패치

3. 실행권한 및 소유자 변경

4. 동작확인


실행 파일 위치 확인 및 추출한다.

# ps -ef | grep Damn


Hex editor에서 I love Google을 검색(Text String)하여 I love apple!로 변경한다. Google과 Apple의 문자열 길이다 다르기 때문에 친절하게 느낌표(!)를 넣었다. 


실행 권한을 부여한다.

# chmod 755 


Show alert을 이용하여 I love Apple! 문자열을 확인한다.


014. kill Application



Login Method 1과 동일








'40. > 42. iOS' 카테고리의 다른 글

iRET, Snoop-it 동시 설치  (0) 2014.11.23
iNalyzer5  (0) 2014.11.23
[DVIA] 03. Runtime Manipulation  (0) 2014.09.11
[DVIA] 02. Jailbreak Detection  (5) 2014.09.11
[DVIA] 01. Insecure Data Storage  (0) 2014.09.10