개인적으로 뷰 조작을 할 때 많이 쓰긴 하지만 이 외에도 사용 방법이 많음.

전부 다 쓸 순 없지만 링크라도 잘아서 설명하겠음.

 

1. 설치

iOS 버전이 올라가면서 10 버전 이후로 cycript사용이 잘 안됬음.

그래서 cycript를 사용할 수 있는 다른 방법을 찾아 사용 중임.

난 iOS 12.5.4(iphone6)를 사용하고 있는데 다른 버전은 될지 잘 모르겠음.

 

i) Cydia에서 New curses, readline, adv-cmds 설치

New Curses : https://en.wikipedia.org/wiki/Ncurses

 

ncurses - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Text-based user interface API ncurses (new curses) is a programming library providing an application programming interface (API) that allows the programmer to write text-based user int

en.wikipedia.org

뭔가 맞아 보이는지는 잘 모르겠는데 substrate로 귀속되는 라이브러리로 터미널에서 GUI를 만들 수 있게 해주는 것 같긴 함.

확실한 건 터미널과 관련한 기능들이 있는 라이브러리 기는 함.

readline : 입력한 명령줄을 편집할 수 있도록 하는 응용 프로그램에서 사용할 기능 세트를 제공함. Emacs, vi 등을 사용할 수 있음.

adv-cmds : 아이폰에서 터미널을 사용할 수 있게 해 줌.

 

ii) ssh 연결하여 명령어 실행

위부터 순서대로 해주면 됨

wget http://apt.saurik.com/debs/cycript_0.9.594_iphoneos-arm.deb                                                

wget http://www.tateu.net/repo/files/net.tateu.cycriptlistenertweak_1.0.0_iphoneos-arm.deb

wget http://www.tateu.net/repo/files/net.tateu.cyrun_1.0.5_iphoneos-arm.deb

dpkg -i cycript_0.9.594_iphoneos-arm.deb

dpkg -i net.tateu.cycriptlistenertweak_1.0.0_iphoneos-arm.deb net.tateu.cyrun_1.0.5_iphoneos-arm.deb

cyrun -n SpringBoard -e

 

이렇게 하면 설치가 되는데 오류가 나는 경우가 있음. 이럴 때 마지막에 실행해준 cyrun -n SpringBoard -e를 꺼주면 되는데 kill을 사용해도 되고 cycript가 실행 중인 경우도 있으므로 확인하여 꺼주면 대부분 됨.

 

2. 사용방법

 

i) 실행

cyrun -n (아이폰에서 보이는 앱 이름) -e -d

cyrun -d (앱 번들 ID) -e -d

cycript -p (프로세스 번호)

 

프로세스 번호 같은 경우는 실행 중인 경우에만 사용이 가능함.

 

ii) 사용

사용방법은 이미 여러 곳에서 나와있지만 몇 가지 복붙해서 먼저 올려보겠음. (설명 생략)

- Bundle ID, Bundle DisplayName, Bundle ExecutableName 확인

NSBundle.mainBundle.infoDictionary.allKeys()

NSBundle.mainBundle.infoDictionary.CFBundleName

NSBundle.mainBundle.infoDictionary.CFBundleIdentifier

NSBundle.mainBundle.infoDictionary.CFBundleDisplayName

 

- View 계층 확인

UIApp.keyWindow.rootViewController    // root view controller 확인

UIApp.keyWindow.rootViewController._printHierachy().toString()

UIApp.keyWindow._autolayoutTrace.toString()    // simplified recursiveDescription

 

- subviews 확인

UIApp.keyWindow.subviews()    // keyWindow의 subviews 확인. 아래 예시는 #으로 구분되는 2개의 subviews를 가지고 있음

#주소.subviews()    // 특정 주소 값을 가지는 view의 subviews 확인. 아래 예시는 #으로 구분되는 1개의 subview를 가지고 있음

UIApp.keyWindow.subvies()[index]._viewDelegate()    // 해당 뷰를 담당하는 controller 출력. 아래 예시는 keyWindow의 첫 번째 subview를 담당하는 controller가 UIApplicationRotationFollowingController 임을 나타냄.

 

- 상태 표시줄 숨기기 / 표시하기(안 되는 경우가 많음)

[[UIApplication SharedApplication] setStatusBarHidden:YES]

[[UIApplication SharedApplication] setStatusBarHidden:NO]

 

- 아이콘 badge number 조작(안 되는 경우가 많음)

var a = [UIApplication sharedApplication]

[a setApplicationIconBadgeNumber:100];

 

- Print Methods

(1) printMethods 함수 만들어서 수행

// Usage:
// for InstanceMethods: printMethods('className')
// for ClassMethods: printMethods('className', true)
function printMethods(className, isa) {
  var count = new new Type("I");
  var classObj = (isa != undefined) ? objc_getClass(className)->isa :
  objc_getClass(className);
  var methods = class_copyMethodList(classObj, count);
  var methodsArray = [];
  for(var i = 0; i < *count; i++) {
  var method = methods[i];
  methodsArray.push({selector:method_getName(method),
  implementation:method_getImplementation(method)});
  }
  free(methods);
  return methodsArray;
}

==> 실행결과(DVIA-v2 앱에 대해서 test)

출력된 결과는 보기 힘드니, Online Javascript Beautifier를 활용(ex.  https://beautifier.io/).

 

(2) _methodDescription() 메서드 활용

UIApp.keyWindow.rootViewController._printHierachy() 명령어로 뷰 계층 확인 후 관심 클래스의 주소 값에 대하여 다음 명령어 수행

#<주소 값>._methodDescription(). toString()    // 이 방법의 경우 알고자 하는 클래스의 method 뿐만 아니라 다른 클래스의 메서드들도 출력해주다 보니 쓸모없는 정보들이 너무 많이 출력됨

 

 

- Print Current ViewController

function currentVC() {
  var app = [UIApplication sharedApplication]
  var keyWindow = app.keyWindow
  var rootController = keyWindow.rootViewController
  var visibleController = rootController.visibleViewController
  if (!visibleController){
  return rootController
  }
  return visibleController.childViewControllers[0]
}

==> 실행결과

복붙 : https://hackcatml.tistory.com/52

 

Cycript(iOS 12.4)

cyrun을 이용하면 ios 12에서도 cycript 사용이 가능. - Cycript 및 Cyrun 설치 및 구동 wget http://apt.saurik.com/debs/cycript_0.9.594_iphoneos-arm.deb wget http://www.tateu.net/repo/files/net.tateu.cyc..

hackcatml.tistory.com

 

개인적 hackcatml 사이트에서 많이 보고 공부했었음.

정말 저분 respect 함

문제 시 해당 내용 바로 삭제하겠습니다. 

 

무튼 저런 기법 말고 간단히 뷰 조작을 하고 싶은 사람도 많을 거임.

 

[UIApp.keyWindow.subviews()[1] removeFromSuperview]
[UIApp.keyWindow setHidden:YES] 

 

cycript 실행 후 위의 두 가지 명령어로 superview와 hiddenview를 제거하고 사용할 수 있음.

탈옥이 된 단말기에서 탐지를 했으나 view를 내리고 사용할 수 있다면 그것도 탈옥 우회 중 하나임.

 

여러 방법이 있고 이게 주로 쓰인다 말하기는 어렵겠지만 제가 진단 시에 자주 사용하는 방법임.

 

끝!

 

 

'IOS' 카테고리의 다른 글

sftp 연결  (0) 2022.02.15
SSH 터미널 접근 방법  (1) 2022.02.15
jailbreak 후 도움되는 트윅  (0) 2022.02.14
burpsuite 연결  (0) 2022.02.10
fiddler 연결  (0) 2022.02.10

+ Recent posts