지난 포스팅(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 버튼을 눌러주면 몇번 재부팅되면서 탈옥이 됩니다.!

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

 

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

+ Recent posts