지난 포스팅(DVIA Jailbreak Detection 1)에 이어서 포스팅하겠습니다.

 

Jailbreak Test 1만 우회를 했었고, Jailbreak Test2 로직 분석 및 우회를 하겠습니다.

 

IDA로 실행파일을 뜯어보면,

 

jailbreak Test2 Tapped:라는 함수를 확인할 수 있습니다. 여기서 탈옥 여부 확인 후 showAlertForJailbreakTestisJailbroken 함수에서 Alert띄워주는 것 같네요.

 

인자로 boolean형을 받고 리턴타입은 없는 것을 확인할 수 있습니다.

 

인자로받은 값을 이용해서 탈옥폰인지 순정폰인지 Alert을 띄워주네요

 

그럼 Frida를 통해 인자값을 변조하도록 하겠습니다.

 

Frida 공홈에 들어가면 기본적으로 나와있는 소스인데, 해당 소스를 통해 앱이 가지고 있는 클래스명을 전부확인이 가능합니다.

 

실행시키면 다음과 같이 IDA에서 확인했던, Jailbreak클래스를 확인할 수 있습니다.

 

위에서 확인했던 클래스 내에 선언되어 있는 함수를 확인하는 소스입니다.

 

IDA에서 확인했던 jailbreakTest2Tapped:를 확인할 수 있네요.

 

이처럼 showAlertForJailbreakTestisJailbroken 함수를 찾아저 해당 함수명을 다 적어줘야 합니다.

앞뒤의 특수문자 - , : 까지 다 적어줘야 프리다에서 후킹이 가능합니다.(이부분에서 한참고생했네요...)

 

IDA에서 클래스 및 함수명까지 확인했는데 굳이 프리다로 또 찾아가는 이유는?

비교해 보면 IDA로 보는 함수명과 프리다로 출력한 함수명이 조금다른것을 볼 수 있는데요, 이 차이 때문에 Frida가 Method를 찾지 못하므로 정확하게 적어주셔야 합합니다.

 

결론적으로, showAlertForJailbreakTestIsJailbroken: 함수를 후킹하는 코드입니다.

 

다만, 후킹할때 args[2]를 변조했는데 IDA에서 확인한 함수 인자는 한개밖에 없었습니다.

이유는

Frida공홈에서 확인이 가능한데, args[2]부터가 실제 파라미터이고 0,1은 self,selector로 정의되어 있다고 합니다.

 

자세한 내용은 다음 블로그에서 확인이 가능합니다.

https://www.letmecompile.com/objective-c-런타임runtime-내부-동작-분석/

DVIA라는 iOS 점검 실습용이 있는데, 실습용으로도 좋고 평소 안드로이드만 하다보니 iOS이 너무 약해서 공부할겸 풀어보고 있는데 괜찮은 앱인 것 같아 포스팅하려 합니다.

 

http://damnvulnerableiosapp.com/

 

DVIA (Damn Vulnerable iOS App) - A vulnerable iOS app for pentesting

A vulnerable iOS app for pentesting

damnvulnerableiosapp.com

앱 다운로드 주소는 다음과 같고, 현재 v2까지 나와있는데 v1부터 풀어보도록 하겠습니다.

 

앱 설치 후에 왼쪽 상단 [Menu] - [Jailbreak Detection]으로 들어갑니다.

 

그럼 다음과 같은 화면을 볼 수 있는데, Jailbreak Test 1,2를 각각 클릭하면 탈옥여부를 탐지하여 Alert창을 띄워줍니다.

 

그럼 실행파일을 IDA를 통해 분석해보겠습니다.

함수명 중 "jail"이란 문자가 들어간 함수명을 검색했을 때 왼쪽상단과 같이 출력됩니다. Test1,2가 있는것으로 보아 각각 Test1,2를 클릭했을 때 실행되는 함수로 추측이 가능합니다.

 

소스코드 중 빨간 네모박스 위의 $OBJC_CLASS_$_DamnVulnerableAppUtilities의 isJailbroken함수로 넘어가네요.

 

즉, jailbreakTest1Tapped: 함수에서 isJailbroken함수를 호출하는 것을 알 수 있습니다.

 

isJailbroken함수를 살펴보면 bool return형을 가진 함수고 내부 탈옥탐지 로직을 확인할 수 있습니다.

위 사진에서는 Cydia.app만 보이지만 소스코드를 더 살펴보면 /bin/bash, apt, 등등이 있는지 확인하는 것을 알 수 있습니다.

 

그 후에 해당 파일이 존재하면 true(탈옥), 존재하지 않다면 false(미탈옥)을 리턴해서 탈옥여부를 확인합합니다.

 

Frida를 통해 리턴함수를 조작하여 탈옥탐지를 우회하도록 하겠습니다.

 

if (ObjC.available) {

try {
var className = "JailbreakDetectionVC";    # 후킹할 클래스 명
var funcName = "- isJailbroken";   # 후킹할 클래스 내 함수명(앞의 -도 적어주셔야 합니다.) 
var hook = eval('ObjC.classes.' + className + '["' + funcName + '"]');

 

Interceptor.attach(hook.implementation, {
onLeave
: function(retval) { console.log("[*] Class Name: " + className);  #onLeave함수를 통해 함수호출후 리턴값 조작 
console
.log("[*] Method Name: " + funcName);
console
.log("\t[-] Type of return value: " + typeof retval);
console
.log("\t[-] Original Return Value: " + retval);
newretval
= ptr("0x0")  
retval
.replace(newretval)   # true를 false로 변조하여 탈옥탐지 우회 시 
console
.log("\t[-] New Return Value: " + newretval) } });

}

catch(err) { console.log("[!] Exception2: " + err.message); } }

else { console.log("Objective-C Runtime is not available!"); }

위 소스파일을 js파일로 저장한 후, 파일을 저장한 경로에서 frida -U -l [js파일].js DVIA를 통해 실행하면

 

다음과 같이 탈옥탐지 우회가 가능합니다.

 

iOS는 Android와 다른 부분이 꽤 존재하는데 이부분때문에 상당히 시간이 많이 걸렸네요... 차후에 Try&Err과 주의점(?)도 포스팅 하겠습니다.

 

Frida가 Android는 자료가 많아지는데 iOS는 아직 많이 없는 것 같아 차근차근 올려보겠습니다.

 

 

출처 : https://blog.attify.com/bypass-jailbreak-detection-frida-ios-applications/

현재(2019.07.10) 기준으로 Unc0ver 앱을 통해 iOS 12.1.2 버전까지 탈옥이 가능한데요, 현재 제가 가지고 있는 단말기가 12.0.1이라 Unc0ver를 통해 탈옥하겠습니다.

(용량 늘린다고 괜히 파일 건드렸다가 펌웨어 복구 못하고 작년 당시 최신 펌웨어를 받아서 한동안 안쓰다가 이제 다시 가져왔네요.. )

 

Unc0ver앱으로 탈옥이 가능한 iphone 기종은 다음과 같습니다. 

일단 필요한게 Unc0ver ipa 파일과, cydia impactor가 필요합니다.

 

https://github.com/pwn20wndstuff/Undecimus/releases

 

pwn20wndstuff/Undecimus

unc0ver jailbreak for iOS 11.0 - 12.1.2. Contribute to pwn20wndstuff/Undecimus development by creating an account on GitHub.

github.com

해당 github에서 Unc0ver ipa파일을 다운받고, 

 

http://www.cydiaimpactor.com/

 

Cydia Impactor

Cydia Impactor Cydia Impactor is a GUI tool for working with mobile devices. It has features already, but is still very much a work-in-progress. It is developed by saurik (Twitter and website). You can use this tool to install IPA files on iOS and APK file

www.cydiaimpactor.com

요기서 impactor 받아주시면 됩니다.

 

두개 다 다운받았다는 가정하에 Impactor를 실행하고 ipa파일을 드래그로 끌어다 줍니다.

 

그럼 다음과 같이 Apple ID를 입력하라고 나오는데 ID/PW를 입력하고 넘어가주면 됩니다.

 

그럼 iphone에 Unc0ver앱이 설치된 것을 확인할 수 있습다.

 

다만, 환경설정 > 일반 > 프로파일 및 기기 관리 > [설치시 로그인했던 ID] > unc0ver 상단 신뢰 에서 앱에 대한 신뢰 설정을 해줘야 실행이 가능합니다.

 

앱을 실행하여 하단의 Jailbreaking 버튼을 눌러주면 몇번 재부팅되면서 탈옥이 됩니다.!

(저의 경우 탈옥이 되지 않고 계속 꺼져서 비행기모드를 설정하고 시도했더니 몇번만에 탈옥이 되었습니다.)

 

탈옥 후에 시디아가 설치되었습니다~

iOS에서 Fridump를 사용하다가 자꾸 에러가 발생하네요.

 

Can't connect to App. Have you connected the device? 에러인데. 다음과 같은 상황에서 발생합니다.

 

1. Frida가 연결되지 않은 경우

-> frida-ps -U를 통해 먼저 동작하는지 확인하고 실행하시면 정상적으로 동작합니다.

 

2. iOS 앱 이름이 한글이며 파이썬 2.x를 사용중인 경우

-> 파이썬 2.x의 경우 문자열 인코딩이 골치가 아픕니다.ㅠ 하지만 예전에는 파이썬 2.x에서만 Fridump가 동작했는데 이제는 파이썬3.x에서도 동작한다고 하네요! 파이썬 3.x으로 갈아타시고 최신버전의 fridump 다운 받으신 후 다시 시도하시면 정상적으로 동작합니다~

 

https://github.com/Nightbringer21/fridump

 

Nightbringer21/fridump

A universal memory dumper using Frida. Contribute to Nightbringer21/fridump development by creating an account on GitHub.

github.com

※ Frida-ps -U로 앱이름을 출력할 때 한글이름이 깨지는 경우가 발생하면, Clutch로 보시면 정상적으로 출력되는 것을 확인할 수 있습니다.

 

https://github.com/KJCracks/Clutch/releases

 

KJCracks/Clutch

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

github.com

 

'Mobile' 카테고리의 다른 글

DVIA (Jailbreak Detection ... Frida)  (3) 2019.08.27
iOS 12 - 12.1.2 Jailbreak(with. Unc0ver)  (1) 2019.07.10
Waiting for USB device to appear...(With.Frida)  (0) 2019.05.08
Uncrackable3-2  (1) 2019.05.08
Ghidra Installation  (0) 2019.04.10

iOS에서 Frida를 통해 메모리 덤프를 할일이 있었는데요.

 

잘되던 Frida가 갑자기 iOS와 연결하자 Waiting for USB device to appear...만 뜨고 연결이 되질 않았습니다..ㅠ

 

Windows 10에서 Frida를 사용할때 생기는 일종의 버그아닌 버그라고 합니다. 맨처음 iOS단말을 연결할 때 자체 드라이버를 설치하여 나중에 itunes를 설치해도 windows10에서 설치한 드라이버가 남아서 그렇다고 합니다.

 

해결방법은 수동으로 삭제를 해줘야 해요.

 

https://blog.do9.kr/337

 

[Windows 10 Problem] Waiting for USB device to appear...

문제 발생 Windows 10에서 Frida를 USB를 통해 연결하여 사용하려고 할 때 다음과 같은 메시지 이후 정상적으로 동작하지 않는 문제가 있다. > frida-ps -U Waiting for USB device to appear... (-D 옵션을 이용..

blog.do9.kr

다음 사이트를 참고하여 해결했습니다.

 

해결 방법

1. [컴퓨터 관리] > [장치 관리자]

2. [범용 직렬 버스 장치]에 보면 [Apple Mobile Device USB Composite Device], [Apple Mobile Device USB Device] 디바이스 제거

(제거 시, 이 장치의 드라이버 소프트웨어도 삭제)

3. iTunes 설치 파일을 열어서(압축 프로그램 이용) AppleMobileDeviceSupport6464.msi 파일 실행하여 설치

4. 설치 후 장치 관리자 다시 확인해보면 [범용 직렬 버스 컨트롤러]에 [Apple Mobile Device USB Driver]가 추가됨을 확인

5. frida 다시 시도 및 정상 실행 확인

 

주의사항으로는 드라이버 삭제하실 때는 iOS단말을 연결해야 드라이버가 보이고, 삭제하고 단말을 다시 연결하시면 혹은 삭제후에 단말은 연결한 채로 재부팅하시면 windows에서 다시 자체 드라이버를 설치하므로 단말을 제거하고 itunes의 드라이버로 설치하셔야 합니다.

 

'Mobile' 카테고리의 다른 글

iOS 12 - 12.1.2 Jailbreak(with. Unc0ver)  (1) 2019.07.10
Can't connect to App. Have you connected the device?(with.Frida)  (0) 2019.05.08
Uncrackable3-2  (1) 2019.05.08
Ghidra Installation  (0) 2019.04.10
Android Burp 인증서 설치(Android 7.0)  (2) 2019.03.11

기존에 Uncrackable3에 대해 분석하다가 이제서야 풀이를 올리네요

 

기존에 분석했던 내용은 아래에 있습니다.

https://taesun1114.tistory.com/entry/Uncrackable31?category=729990

 

Uncrackable3-1

저번에 Uncrackable3를 도전했었는데 당시에 다운받았던 앱이 오류가 있었던 건지 실행하면 바로 종료가 되어 분석을 하지 못했는데 며칠전 다시 다운받아 설치해보니 이번엔 잘돌아가네요 :) (당시에 앱 자체의..

taesun1114.tistory.com

앞서 프리다 및 xposed를 탐지하고 있고 루팅체크하는 것을 확인하였고, 돌아와서 소스코드를 확인해보면 this.check.check_code()를 통해서 문자열이 맞는지 확인하고 있습니다.

 

확인해보니 네이티브 함수를 호출하네요

 

libfoo.so파일 내 CodeCheck_bar함수를 기드라를 통해 분석해 보겠습니다.

첫번째 빨간 박스에서 무언가 하고 두번째 빨간 박스의 if문을 통해 문자열의 길이가 0x18이라는걸 알 수 있습니다.

 

첫번째 네모박스의 함수를 통해 문자열 혹은 키값을 생성한후 local_38이라는 변수에 저장해둔 후 3번째 네모박스의 함수에서 최종 문자열을 만들거나 비교를 하는 것으로 보이네요.

 

첫번째 네모박스 함수에 들어와서 분석해 보겠습니다. 뭔가 코드가 되게 긴걸 보실 수 있는데.... 

 

uVar1, uVar2, *puVar3을 통해 하는 행위는 분석을 어렵게 하기 위한 더미코드로 보여요(의미없는 행위들을 몇번이고 반복합다.)

 

더미코드라고 생각한 이유는 인자로받은 puParm1은 두고 로컬변수만 가지고 행위를 한 후 어디에 값을 넣는다던가 하는 행위가 없어서 더미코드라고 생각했습니다.

 

더미코드를 지나 쭉 내려오다보면 이제서야 puParm1에 무언가를 넣는코드를 보실 수 있습니다.

함수를 따라가 볼게요

 

함수를 통해 전달받은 uVar1과 0xb4와 xor연산을 한 후, 리턴해 주네요. 다시 함수를 따라가 봅니다.

 

xor하는 값만 다르고 계속 함수를 호출하는데요. 몇번이고 동일한 코드를 지나서 계속 함수를 따라 들어가다 보면.

 

최초에 0xe7을 리턴하는 것을 알 수 있습니다. 그러면 여기서부터 차례로 올라가볼게요 실력은 없고 시간은 많으니 이렇게라도 찾아볼게요

 

0xe7을 시작으로 xor해주면 다음과 같이 나옵니다.

 

이게 하나의 값이고 앞에서 보셨듯이 길이가 0x18(24)니까.. 24번 반복해주면 키값을 얻을 수 있어요 ....

 

소스코드에 보면 xorkey라는 값이 있는데 위에서 노가다로 획득한 키와 이값을 xor해줘야 됩니다.

 

다음과 같이 xor해주면 키값이 출력되는 것을 확인할 수 있습니다. 

 

프리다로 풀려고 했는데.. so파일 분석하다 보니 그냥 키값을 추출하게 되었네요....

지난 달 3월 미국에서 열린 RSA에서 미국의 NSA에서 Ghidra라는 리버싱 툴을 공개했습니다.

 

기드라에 대한 자세한 사항은 다음에서 확인하실 수 있습니다.

 

https://ghidra-sre.org/

 

Ghidra

Getting Help Ghidra provides context-sensitive help on menu items, dialogs, buttons and tool windows. To access the help, press F1 or Help on any menu item or dialog. Visit our Wiki Issue Tracker

ghidra-sre.org

 

위 주소에서 소스파일을 다운로드 하신 후, 압축을 푸시면 사용하실 수 있습니다.

 

다만 JDK11버전 이상에서만 구동이 된다고 하네요.

 

위 그림처럼 ghidraRun.bat 파일을 실행하여 기드라를 실행합니다.

위 그림전에 CMD창이 뜨면서 무언가 입력하라고 뜨는데 JDK설치된 폴더 경로를 입력해주시면 됩니다. (bin폴더 전까지만)

그리고 실행하면 다음과 같이 나오는데 상단 탭의 File에서 프로젝트를 생성하고 분석하고자 하는 파일을 드래그앤드롭로 프로젝트 안에 넣어줍니다.

그리고 다시 드래그앤 드롭으로 파일을 빨간 박스처진 용(?)그림에다가 놓아주세요

그럼 다음과 같은 화면을 볼 수 있습니다.

Yes를 클릭하고....

 

추가적으로 선택하고 싶은 메뉴가 있으면 선택 아니면 디폴트로 Analyze를 클릭합니다.

약간의 시간이 지나고 분석이 완료되고 어셈블리를 확인하면 옆에 디컴파일 내용도 같이 띄워줍니다. 오...

 

Uncrackable 3의 so파일을 분석한 화면인데요. 왼쪽이 그리다 오른쪽이 아이다로 같은 내용을 디컴파일했을 때 출력되는 화면입니다.

 

 

'Mobile' 카테고리의 다른 글

Waiting for USB device to appear...(With.Frida)  (0) 2019.05.08
Uncrackable3-2  (1) 2019.05.08
Android Burp 인증서 설치(Android 7.0)  (2) 2019.03.11
Objection(with. iOS SSL Pinning)  (0) 2019.03.11
Cydia 에러(Could not connect to the server)  (0) 2019.02.25

안드로이드 7.0 이상부터는 기존에 http://burp 혹은 인증서를 sdcard에 넣어서 설치하는 식으로는 인증서 설치가 불가능합니다.


가장 큰 이유는 사용자 인증서와 시스템 인증서의 권한 차이인데요. 7.0으로 업데이트 되면서 기존에 사용하는 방법은 사용자 인증서로 인증서 설치가 되기 때문에 시스템에 넣어줘야합니다.


테스트는 녹스플레이어에서 진행했습니다. 현재 7.1.2 버전까지 지원하네요 :)




일단 기존에 버프에서 인증서를 추출한 뒤, openssl을 이용해서 시스템폴더에 알맞은 형식으로 변환해 주어야 합니다.


다음 명령어를 입력하여 인증서 변환 및 해쉬값을 추출합니다.

openssl x509 -inform DER -in <추출한 인증서> -out cacert.pem 
openssl x509 -inform PEM -subject_hash_old -in cacert.pem




제 버프 인증서의 해쉬값은 9a5ba575인데요 해당 <해쉬값>.0으로 파일이름을 변환합니다.



후에 에뮬레이터에 인증서를 넣어줘야 하는데 위치는 /system/etc/security/cacerts/입니다.


다만 system폴더에 접근하려면 권한이 필요한데 mount명령을 이용해 권한을 넣어준 후 인증서 파일을 넣어줍니다.


adb root


adb mount


adb push 9a5ba575.0 /system/etc/security/cacerts/



adb에 접속하여 확인한 결과 인증서가 들어간 것을 확인할 수 있습니다.


인증서를 넣어준후 에물레이터 리부팅하면 시스템폴더에 버프 인증서가 들어간 것을 확인할 수 있습니다 :)




버프로 ssl통신도 확인이 가능합니다 :)



출처 : https://blog.ropnop.com/configuring-burp-suite-with-android-nougat/



-----------------------------------------------------------19.08.19 추가--------------------------------------------------------------

위의 방법 외에도 frida를 이용하여 후킹 후에 진행하는 방법이 있음.


위 방법도 결국엔 루팅이 기본조건이므로 프리다로 우회하던 위 방법고 같이 인증서를 넣어주던 선택해서 진행.


[후킹코드]


Java.perform(function() {

    var array_list = Java.use("java.util.ArrayList");
    var ApiClient = Java.use('com.android.org.conscrypt.TrustManagerImpl');

    ApiClient.checkTrustedRecursive.implementation = function(a1, a2, a3, a4, a5, a6) {
        // console.log('Bypassing SSL Pinning');
        var k = array_list.$new();
        return k;
    }

}, 0);


처 : https://j-a-l.tistory.com/143?category=809384

 


'Mobile' 카테고리의 다른 글

Uncrackable3-2  (1) 2019.05.08
Ghidra Installation  (0) 2019.04.10
Objection(with. iOS SSL Pinning)  (0) 2019.03.11
Cydia 에러(Could not connect to the server)  (0) 2019.02.25
Android Method Trace(With.Frida)  (2) 2019.01.29

검색 중 좋은 툴이 있어 소개차 포스팅 합니다.


바로 Objection이라는 툴인데요. ssl pinning을 비롯한 여러 유용한 기능이 담겨 있는 툴이라 앱 분석 시 사용하면 좋을 것 같네요.


다만.... 다른 모듈 의존도가 너무 높고, 참조하는 모듈 버전에 따라서 Objection을 실행해도 기능이 동작하지 않는 에러(버그?)가 있어서...


일단 Objection Github입니다.


https://github.com/sensepost/objection


해당 URL에 들어가서 소스코드를 받아서 소스코드에 포함된 setup.py를 실행시켜서 설치하셔도 되고, pip3를 이용해서 설치하셔도 됩니다.


https://github.com/sensepost/objection/wiki/Installation


파이썬 3.7에서 개발했다고 나와있고 프리다 기반으로 동작한다고 하네요.


저는 설치할때 에러가 좀 많이 발생해서... 최신버전은 포기하고


1.2.4버전을 받아서 사용하고 있습니다.


현재 최신버전에서는 의존 모듈 이슈가 많아서 다음 버전에서 패치하겠다고 하네요


https://github.com/sensepost/objection/wiki/Installation



해당 사진은 GitHub메인에 있는 사진을 가져온 건데 ios 및 android ssl pinning을 지원하고, 해당 툴에서 db파일 및 keychain을 확인하는게 간편합니다.



깃헙메인에 걸려있는 동영상을 보시면 좋은 기능이 많이 있다는 것을 확인하실 수 있겠네요!


다만 사용해본결과 Android보다는 iOS에서 더 잘 작동되는 것 같습니다.


설치 시 여러 이슈 및 타 모듈 의존도만 조금 낮아지면 엄청 유용할 툴인 것 같네요!


'Mobile' 카테고리의 다른 글

Ghidra Installation  (0) 2019.04.10
Android Burp 인증서 설치(Android 7.0)  (2) 2019.03.11
Cydia 에러(Could not connect to the server)  (0) 2019.02.25
Android Method Trace(With.Frida)  (2) 2019.01.29
Android Socket 통신 확인(with.Frida)  (2) 2019.01.18

Cydia에서 앱 다운로드 시, 다음과 같은 에러가 발생하면서 다운이 되지 않을때.


Could not connect to the server


다만 해당 에러 메시지가 빨간줄로 쳐져 있지 않아서 많이 해맸음ㅠ


해당 에러는 hosts파일 에러로 새로 hosts 파일을 넣어주면된다.


iPhone 내 hosts 파일 위치 : /etc/hosts


출처 : https://pastebin.com/pKQiBAJx

'Mobile' 카테고리의 다른 글

Android Burp 인증서 설치(Android 7.0)  (2) 2019.03.11
Objection(with. iOS SSL Pinning)  (0) 2019.03.11
Android Method Trace(With.Frida)  (2) 2019.01.29
Android Socket 통신 확인(with.Frida)  (2) 2019.01.18
apktool first type is not attr  (0) 2018.10.04

+ Recent posts