cycript 의 소개는
위 사이트에 되어 있다. 아이폰 소스는 못 보는 것인줄 알았는데, 역시 방법은 다 있기 마련이다.
위 사이트에서 설명을 보고 http://www.cycript.org/debs/ 로 가면
cycript_0.9.461_iphoneos-arm.deb
mobilesubstrate_0.9.3069-1_iphoneos-arm.deb
libffi_1:3.0.10-5_iphoneos-arm.deb
이 있다. cydia에서 mobilesubstrate는 검색되고 설치가 되는데, libffi 는 검색이 안되어, 여기서 다운 받아 설치했다.
다운 받은 deb 파일은 /var/mobile 에서 아래와 같이 설치했다.
# dpkg -i libffi.deb
Selecting previously deselected package libffi.
(Reading database ... 5599 files and directories currently installed.)
Unpacking libffi (from libffi.deb) ...
Setting up libffi (1:3.0.10-5) ...
# dpkg -i cycript.deb
(Reading database ... 5605 files and directories currently installed.)
Preparing to replace cycript 0.9.461 (using cycript.deb) ...
Unpacking replacement cycript ...
Setting up cycript (0.9.461) ...
# ps -ef | grep Spring
501 32 1 0 0:49.08 ?? 2:35.45 /System/Library/CoreServices/SpringBoard.app/SpringBoard
# cycript -p 32
예제를 따라하기 위해 위와 같이 했다.
cy# UIApp
@"<SpringBoard: 0x1fd79aa0>"
cy# UIApp->_uiController.window
@"<SBAppWindow: 0x1fdd5390; baseClass = UIWindow; frame = (0 0; 320 480); layer = <CALayer: 0x1fdea940>>"
cy# UIApp->_uiController.window.subviews
@["<SBUIRootView: 0x1fdeabe0; frame = (0 0; 320 480); layer = <CALayer: 0x1fdeac60>>","<SBAppContextHostView: 0x2091c320; frame = (0 0; 320 480); clipsToBounds = YES; hidden = YES; layer = <CALayer: 0x2091eba0>> enabled: yes, context array: (n)","<SBAppContextHostView: 0x20b4d890; frame = (0 0; 320 480); clipsToBounds = YES; hidden = YES; layer = <CALayer: 0x20b497a0>> enabled: yes, context array: (n)"]
cy# UIApp->_uiController.window.subviews[0].subviews
@["<UIView: 0x1fdeade0; frame = (0 0; 320 480); autoresize = W+H; layer = <CALayer: 0x1fdeaeb0>>"]
cy# UIApp->_uiController.window.subviews[0].subviews[0].image.size
TypeError: Result of expression 'UIApp.$cyi._uiController.window.subviews[0].subviews[0].image' [undefined] is not an object.
안 되는 부분이 있어서, 일단 넘어가고 다른 앱을 보기로 한다. 설치파일을 첨부하였다.
cycript_0.9.461_iphoneos-arm.deb 20-Sep-2012 23:06 288K
libffi_1:3.0.10-5_iphoneos-arm.deb 19-Mar-2012 00:30 12K
mobilesubstrate_0.9.3069-1_iphoneos-arm.deb 03-Nov-2009 00:53 33K
cy# var app = [UIApplication sharedApplication]
@"<UIApplication: 0x1eaf90>"
cy# app.keyWindow.recursiveDescription
위까지 진행하고 한글이 나오면 알아볼 수 없을 것이다. 이 때는 아래와 같이 python을 이용해 문자열을 변환해 확인한다.
>>> print(u'탈옥폰에서는 실행할 수 없습니다.'.encode('utf-8'))
b'xedx83x88xecx98xa5xedx8fxb0xecx97x90xecx84x9cxebx8ax94 xecx8bxa4xedx96x89xedx95xa0 xecx88x98 xecx97x86xecx8axb5xebx8bx88xebx8bxa4.'
>>> print(u'xedx83x88xecx98xa5xedx8fxb0xecx97x90xecx84x9cxebx8ax94 xecx8bxa4xedx96x89xedx95xa0 xecx88x98 xecx97x86xecx8axb5xebx8bx88xebx8bxa4.'.encode('iso8859-1').decode('utf-8'))
탈옥폰에서는 실행할 수 없습니다.
FM 대로 실습할 수 있는 자료이다.
http://www.securitylearn.net/2013/06/26/penetration-testing-of-iphone-applications-part-5/
설명이 잘 되어있다.
서뷰 뷰를 사용하고 있다면, 아래와 같이 없앨 수 있다. 서뷰 뷰는 alertview 와 imageview가 해당한다.
[UIApp.keyWindow.subviews[1] removeFromSuperview]
[UIApp.keyWindow.subviews[0] removeFromSuperview]
또한 윈도우가 여러개 일 경우 완전히 없애지는 못해도, 숨김 옵션으로 밑의 window를 볼 수 있다.
UIApp.delegate 로 메일 메소드에는 접근할 수 있으나, 다른 윈도우에 종속된 경우 윈도우를 선택해 controller 의 메소드를 접근할 수 있다.
[UIApp.windows[2] setHidden:YES]
function printMethods(className) { var count = new new Type("I"); var methods = class_copyMethodList(objc_getClass(className), 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); free(count); return methodsArray; }
댓글 달기