개인적으로 뷰 조작을 할 때 많이 쓰긴 하지만 이 외에도 사용 방법이 많음.
전부 다 쓸 순 없지만 링크라도 잘아서 설명하겠음.
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
뭔가 맞아 보이는지는 잘 모르겠는데 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
개인적 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 |