1. Cycript란?
- javascript와 Obj-C를 결합한 스크립트의 인터프리터
- 실행중인 프로세스에 attach하여 Property를 변경하고 함수를 동적으로 호출할 수 있다.
- 나는 cycript를 이용하여 로그인을 우회하는 것을 예시로 보여줄 것이다.
2. 환경 세팅
- MethodSwizzlingDemo 라는 앱을 이용하여 로그인을 우회하는 2가지 방법에 대해 해볼 생각이다. 그러기 위해서는 우회할 앱과 cycript가 설치되어 있어야 한다.
2.1 cycript 설치
- cycript 설치는 간단하다. Cydia에서 cycript 검색 후 설치해주면 끝!
2.2 MethodSwizzlingDemo 앱 설치
- 아래에 첨부한 파일을 다운로드 받는다.
- cydia Impactor를 다운받아 해당 ipa를 설치해준다. (자세한 설치 과정은 검색을 통해 진행)
- 만약 설치 중 에러로 인해 설치가 안된다면 제 포스팅을 참고해서 진행해주시면 됩니다. ( http://rootable.tistory.com/entry/Cydia-Impactor%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-ipa-%EC%84%A4%EC%B9%98 )
- 설치가 완료된다면 아래와 같은 화면을 볼 수 있다.
3. 앱 분석
- 입력창 2개와 버튼 2개가 있다. 입력창 2개는 ID와 PW 입력하는 창인듯 하고 아래는 로그인하는 method인 것을 알 수 있다.
- 버튼에 Login Method 1과 Login Method 2라고 써져있는 것을 보아 2가지 방법으로 로그인할 수 있는 것을 알 수 있다.
- 아래 사진과 같이 임의의 ID와 PW 입력 후 버튼을 눌러보면 둘다 동일하게 아래와 같은 에러가 뜨는 것을 볼 수 있다.
- 이제 cycript를 이용하여 ID와 PW를 몰라도 Login을 할 수 있도록 Login 로직을 우회해보겠다.
4. Login 관련 함수 확인
Step 1) ps 명령어를 통해 현재 실행 중인 앱의 PID 확인
해당 명령어를 통해 PID가 3478인 것을 확인할 수 있다.
Step 2) cycript 를 실행시키며 p 옵션을 통해 해당 프로세스에 attach
정상적으로 attach가 되어 cy#에 커서가 있음을 볼 수 있다.
Step 3) Login하는 메소드 확인
(1) printMethods 함수 정의
- http://iphonedevwiki.net/index.php/Cycript_Tricks <- 해당 링크에 접속하면 cycript에서 사용할 수 있는 많은 함수들을 볼 수 있다.
- 해당 함수를 이용해서 확인하는 방법은 아래와 같은 에러가 뜨며 진행되지 않았다.
(2) ViewController.messages 이용
- ViewController.messages 를 입력하면 메소드를 확인할 수 있다 하였지만 나의 경우는 나타나지 않았다. (아무 반응 없음)
(3) class-dump-z 이용
- 앱스토어를 통해 설치한 앱의 경우 암호화가 적용되어 있으므로 clutch를 통해 복호화 후 아래 과정 진행 (내가 진행한 앱은 직접 설치한 것이므로 암호화가 되어있지 않으므로 그냥 진행)
- class-dump-z [앱 이름] > [덤프파일 이름]
- 덤프한 파일이 길기 때문에 tail 명령어로 끝부분을 보니 validateLogin 함수와 pushLoginPage 함수가 있는 것을 볼 수 있다.
5. 로그인 우회
- 위에서 확인한 두 함수(validateLogin, pushLoginPage)를 이용하여 Login을 우회할 것이다.
5.1) 로그인 검증 결과를 무조건 True로
- validateLogin 함수는 함수명과 BOOL을 리턴하는 함수인 것을 통해 login을 검증하는 함수임을 추측할 수 있다. 따라서 Cycript를 이용하여 항상 True를 리턴하도록 변경하였다.
- 참고한 블로그에서는 ViewController.messages를 이용하였지만 더 이상 Cycript에서 messages를 지원하지 않는다고 한다. prototype를 이용하자.
- 해당 코드 입력 후 Login Method 1을 클릭하면 아래와 같이 로그인에 성공하는 것을 볼 수 있다.
5.2) 로그인 성공 화면을 강제 호출
- pushLoginPage는 로그인 성공 후 호출하는 화면이다. 해당 화면을 아래 코드를 통해 강제로 호출하면 로그인을 우회할 수 있다.
- 해당 코드 입력 시 바로 로그인 성공 페이지로 넘어가는 것을 확인할 수 있다.
(확인할 사항)
- 현재 뷰 사라지도록 : [xxxViewController dismissViewControllerAnimated:YES completion:nil]
- 원하는뷰 나타나도록 : [xxxViewController presentViewController:newViewController animated:YES completion:nil]
-
참고)
http://apollo89.com/wordpress/?p=5890
http://apollo89.com/wordpress/?p=5996
wildpointer.qiniudn.com/MethodSwizzlingDemo.ipa
http://hyunmini.tistory.com/70
'Hacking > Mobile' 카테고리의 다른 글
디버깅 탐지기능 확인 (0) | 2018.05.25 |
---|---|
[IOS] anti-debugging protection bypass (0) | 2018.05.04 |
Cydia Impactor를 이용한 ipa 설치 (0) | 2018.04.30 |
[아이폰] 아이폰5(IOS 10.3.3) 탈옥 및 진단환경 세팅 (1) | 2018.04.02 |
[OWASP] UnCrackable App for Android Level 2 (feat. IDA 동적디버깅) (0) | 2018.02.27 |