IOS Cycript

Hacking/Mobile 2018. 4. 30. 17:05
반응형

1. Cycript란?

 - javascript와 Obj-C를 결합한 스크립트의 인터프리터

 - 실행중인 프로세스에 attach하여 Property를 변경하고 함수를 동적으로 호출할 수 있다.

 - 나는 cycript를 이용하여 로그인을 우회하는 것을 예시로 보여줄 것이다.


2. 환경 세팅

 - MethodSwizzlingDemo 라는 앱을 이용하여 로그인을 우회하는 2가지 방법에 대해 해볼 생각이다. 그러기 위해서는 우회할 앱과 cycript가 설치되어 있어야 한다.


2.1 cycript 설치

 - cycript 설치는 간단하다. Cydia에서 cycript 검색 후 설치해주면 끝!


2.2 MethodSwizzlingDemo 앱 설치

 -  아래에 첨부한 파일을 다운로드 받는다.

MethodSwizzlingDemo.ipa


 - 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

반응형
블로그 이미지

rootable

,