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.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 <AppName on home icon> -e -d 또는
cyrun -b <AppBundleID> -e -d
- 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.recursiveDescription().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://bachs.tistory.com/entry/iOS-Hooking3Cycript
https://sevencho.github.io/archives/c12f47b1.html
https://gist.github.com/laprasdrum/667213ab364ef2536a30f3bdb79c77bb
'Information Security > iOS' 카테고리의 다른 글
iOS TouchID Bypass(DVIA-v2) (0) | 2020.07.23 |
---|---|
DVIA-v2 Jailbreak Detection Test3 (0) | 2020.07.14 |
DVIA-v2 Jailbreak Detection Test2 (0) | 2020.07.10 |
Frida iOS Method Trace (1) | 2020.07.09 |
Clutch(iOS 12.4) (2) | 2020.07.08 |