앱을 추출할 경우 암호화가 되어 있어서 분석하기에 어려움이 있음.

그래서 복호화해서 추출해야 함.

 

몇 가지 방법이 있는데 포스팅해볼까 함.

 

1. Clutch

사실 Clutch는 iOS 12 이전 버전에서 주로 사용하던 복호화 툴이었음.

 

하지만 직접 빌드할 경우 가능하다고 해서 퍼와봄.

https://github.com/KJCracks/Clutch

 

GitHub - KJCracks/Clutch: Fast iOS executable dumper

Fast iOS executable dumper. Contribute to KJCracks/Clutch development by creating an account on GitHub.

github.com

 

Clutch
0.79MB

※출처 : https://hackcatml.tistory.com/49#google_vignette

아래에 파일도 함께 올림.

 

저 파일을 device의 /usr/bin 아래로 넣어줌.

Clutch -i <------ 왼쪽에 명령어를 넣으면 설치된 앱 목록을 볼 수 있음.

이후 Clutch -d <앱 번호>를 넣으면 앱이 복호화됨.

 

/private/var/mobile/Documents <--------이 경로에 복호화돼서 생성됨.

 

이후 ipa파일을 추출해서 분석하면 됨.

 

2. CrackerXI+

소스 : https://iphonecake.com/app/

cydia에서 소스 추가 후에 CrackerXI+에서 복호화하면 됨.

위와 같이 복호화를 하면 되는데 /private/var/mobile/Documents 아래에 CrackerXI+ 폴더 내에 ipa가 생성됨.

 

3. frida-ios-dump

전꺼는 안 되는 경우도 있는데 이건 웬만해선 됨.

Linux나 MacOS에서 하는 게 편하지만 Windows에서 하려면 수정이 필요함.

http://egloos.zum.com/playgame/v/2241145

 

iOS 앱 덥프 (frida-ios-dump)

* frida-ios-dump.py - 다운로드: https://github.com/AloneMonkey/frida-ios-dump - Clutch 가 최신 iOS에서 동작하지 않으므로 대용으로 frida-ios-dump 를 사용 - 리눅스 용 스크립트로 윈도우에서 돌리기 위해 몇 가지 수

egloos.zum.com

위 링크를 들어가면 Windows에서 사용 가능하도록 수정하는 방법이 있음.

 

하지만 전 MacOS에서 해보겠음.

 

우선 cydia에서 frida와 openssh를 설치해줌.

frida 소스 : https://build.frida.re

 

소스 추가 후에 트윅을 설치해줌.

 

컴퓨터에 frida툴을 설치해줘야 함.

중요한 게 python이 깔려있어야 함.

python3.x 버전을 설치해줘야 하는데 이후 bash_profile설정이 필요함.

i)

sudo vim ~/.bash_profile

 

ii)

alias python='python3'

# Setting PATH for Python 3.6
# The original version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/3.6/bin:${PATH}"
export PATH

 

아래는 bash_profile에 추가해줘야 함.

 

이제 frida-ios-dump를 pc에 설치하는 순서임.

pip3 install frida-tools

여기부터 frida-ios-dump설치임.

cd ~

git clone https://github.com/AloneMonkey/frida-ios-dump.git

cd frida-ios-dump/

sudo pip3 install -r requirement.txt --upgrade

 

여기에서 dump.py를 수정해 줘야 함.

User = 'root'

Password = 'alpine'

Host = '아이폰 IP 주소'

Port = 22

KeyFileName = None

 

이후 decrypt 진행.

앱 리스트 출력 : python3 dump.py -l

이후 추출을 하면 됨.

앱 추출 : python3 dump.py "추출할 앱 이름"

큰따옴표 같이 넣어서 이름을 넣거나 Identifier의 이름을 큰따옴표 없이 넣어도 됨.

-o <-----옵션으로 추출할 때 이름을 바꿀 수 있음.

이렇게 하면 frida-ios-dump 폴더 내에 앱이 추출됨

 

끝!

'IOS' 카테고리의 다른 글

application analisys (Flex3 beta)  (0) 2022.02.17
application analisys (IDA)  (1) 2022.02.17
sftp 연결  (0) 2022.02.15
SSH 터미널 접근 방법  (1) 2022.02.15
cycript 설치 및 사용  (0) 2022.02.14

탈옥된 아이폰을 사용했으며 usb 터널링이 되어있는 상태임. (SSH 터미널 접근 방법 참고)

 

1. 3utools

iDevice > Files

위의 경로로 들어가면 이용 가능함.

 

2. iFunbox

장치 > 빠른 도구 상자 > 원시 파일 시스템

위의 경로를 들어가면 이용 가능함.

 

3. WinSCP

WinSCP는 실행하면 처음 이 창부터 뜸.

항목에 맞게 127.0.0.1/root/alpine을 넣어줌.

그럼 로그인되면서 이런 창을 확인할 수 있음.

 

4. FileZilla

위 항목에 맞게 127.0.0.1/root/alpine을 넣어줌.

빠른 연결은 누르면 위와 같이 연결되는 것을 확인할 수 있음.

 

--------------------------------------------------------------------------------------------------------------------------------

 

바이너리 패치 시에 유용하게 쓰임.

 

끝!

'IOS' 카테고리의 다른 글

application analisys (IDA)  (1) 2022.02.17
Application decrypt & extraction  (0) 2022.02.17
SSH 터미널 접근 방법  (1) 2022.02.15
cycript 설치 및 사용  (0) 2022.02.14
jailbreak 후 도움되는 트윅  (0) 2022.02.14

SSH 터미널을 접근할 때 난 putty를 주로 쓰는 편이지만 mobaxterm도 괜찮으니 써볼까 함.

 

우선 일전에 iOS 탈옥 후 몇 가지 설치해야 할 트윅에 관해 말했음.

 

먼저 SSH 터미널을 연결하기 전 usb 터널 연결을 해주는 게 좋음.

 

개인적으로 ifunbox를 쓰고 있으나 더 쉬운 방법도 마지막에 보여줄 예정임.

ifunbox를 다운받아 아이폰을 연결하면 정상적으로 연결됨.

하지만 openssh 트윅이 설치되지 않았으면 연결되지 않을 수 있음.

이렇게 바로 연결되는 경우도 있지만 안 되는 경우 터미널 포트에 22를 넣으면 됨.

(연결을 자동으로 쓴 지 오래돼서 가물가물 하나 127.0.0.1:22, 127.0.0.1:2222, 22 세 가지 중 하나를 넣으면 됐음.)

 

저렇게 하면 연결 준비는 다 한 거임.

 

모든 아이폰의 root 비밀번호는 alpine임.

ID : root

PW : alpine

 

그럼 ssh연결을 해보겠음.

 

1. putty

putty를 처음 연결하면 저런 창이 뜨는데 Host Name에 127.0.0.1, Port에 22를 넣고 Open을 누르면 됨.

이런 창이 뜨는데 전에 얘기한 root/alpine을 넣으면 됨.

 

2. mobaxterm

처음 켜면 이런 창이 뜰 텐데 Session을 누르면 됨.

이렇게 뜨면 SSH를 누른 후 Remote host에 127.0.0.1을 넣은 후 OK 클릭!

그럼 이런 화면이 보일 텐데 전과 마찬가지로 root/alpine으로 로그인해주면 됨.

로그인하면 처음에 패스워드를 저장할 거냐 물어보는데 편의에 따라 진행.

 

3. 3utools

개인적으로 이게 가장 쉬웠음.

 

Toolbox에서 Find tool에 Open SSH Tunnel을 검색.

그럼 이렇게 뜨는데 아래 있는 Open SSH Tunnel을 눌러주면 바로 연결됨.

이런 게 뜨면 SSH Client를 눌러주면 되는데 아이디와 비밀번호가 Default로 입력되어 있어서 따로 입력할 필요가 없음.

그럼 3utools가 알아서 putty로 연결해줌.

 

4. Openssh

 

윈도우에서 이 방법을 선호하는 사람을 많이 보진 못함.

하지만 나는 CLI환경에서 Openssh 가장 유용하게 사용하고 있음.

 

$ ssh [USER]@[HOSTNAME] -p [PORT]

 

아이폰을 예로 명령어를 써주면

 

$ ssh root@127.0.0.1 -p 22

 

위와 같이 입력해서 접근할 수 있음.

 

설치방법은  CentOS 7 은

 

yum install openssh-server openssh-clients openssh-askpass

 

위 명령어로 설치할 수 있는데 Linux에 따라서 sudo apt-get이 있으며

 

Windows는 설정 -> 앱 -> 선택적 기능 관리 -> 기능 추가 -> OpenSSH로 설치 가능함.

 

끝!

 

'IOS' 카테고리의 다른 글

Application decrypt & extraction  (0) 2022.02.17
sftp 연결  (0) 2022.02.15
cycript 설치 및 사용  (0) 2022.02.14
jailbreak 후 도움되는 트윅  (0) 2022.02.14
burpsuite 연결  (0) 2022.02.10

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

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

 

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