반응형

문제 : https://github.com/OWASP/owasp-mstg/tree/master/Crackmes



문제를 보면 앱 어딘가에 secret string이 있다고 한다. 그것을 추출해낼 방법을 찾아보라고 한다.


루팅폰에서 앱 설치 후 실행시키면 아래와 같은 메시지가 뜨며 OK를 누를 시 앱이 종료된다.


따라서 이를 분석하여 루팅탐지부터 우회해야 한다.



Launcher Activity의 onCreate에 가면 루팅탐지 시 나타난 "Root detected!"라는 문구가 하드코딩되어 있는 것을 볼 수 있다.

따라서 c.a() , c.b(), c.c() 함수에 뭔 짓(?)을 하면 될거라 생각된다.


간단하게 smali 코드에서 if문을 반대로 동작하도록 하면 풀릴 거라 생각하고 if-nez 두개를 if-eqz로 바꿨다. 


하지만 풀리지 않았다.

루팅폰의 경우 3가지 조건에 다 걸릴 수도 있지만 1개만 걸릴 수도 있기 때문에 log를 출력시켜 걸리는 함수만 조건문을 반대로 작동하게 하기로 하였다.


각 조건문에 log를 출력하도록 아래와 같이 smali 코드를 작성하였다. (v1 부분의 문자열만 first, second, third로 변경하였다.)


const-string v1, "first"

const-string v2, "WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW"

invoke-static {v1,v2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I


그 결과 로그캣으로 봤을 때 하나도 보이지 않아 먼저 첫번째 조건문을 우회해야겠다 생각하였고 첫번째 조건문만 if-nez를 if-eqz로 바꾸고 다시 묶어 실행시키고 로그캣으로 봤다.



위와 같이 출력이 되며 루팅탐지가 우회되어 잘 접근되었다.

들어가면 아래와 같이 Secret String을 입력하라는 창이 뜬다.


임의의 문자를 입력하면 Nope... 이라는 메시지가 뜨는데 이를 코드에서 확인해보면 verify 라는 함수에 있는 것을 볼 수 있다.



조건 문이 if(a.a(v0)) 가 되면 Success가 뜨는 것으로 보아 a.a 함수를 확인해보면 답이 될 듯 하다.


a.a 함수에 따라 들어가면 입력한 문자열과 sg.vantagepoint.a.a.a 함수에 문자열 2개를 넣은 것과 비교를 한다.


따라서 sg.vantagepoint.a.a.a에 따라 들어가면 AES 암호화 혹은 복호화와 관련한 것이 보이는데 그 결과를 return시키고 있다.



따라서 smali 코드에 해당 리턴값을 출력시키면 답이 될거라 생각하였다.

아래와 같은 smali코드를 return 전에 입력해주었다.


const-string v3, "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"

new-instance v4, Ljava/lang/String;

invoke-direct {v4,v0}, Ljava/lang/String;-><init>([B)V

invoke-static {v3,v4}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I


간단히 설명하면 v4를 새로 생성해준 뒤 리턴값이 들어있는 v0를 v4에 넣어주고 해당 값을 로그에 찍어주었다.



로그에 보이는 I want to believe를 입력하고 검증 버튼을 누르면 문제 해결!


반응형
블로그 이미지

rootable

,
반응형

Find the Flag!!

Download Sharif_CTF.apk


문제를 보면 위와 같이 apk파일을 주고 Flag를 찾으라고 한다.

해당 파일을 안드로이드에 설치하고 실행시키면 Serial Number를 입력하라고 하고 잘못된 값을 넣으면 Just Keep Trying :-) 이라는 문구가 뜬다.



해당 문구를 AstroGrep으로 검색한 결과 a.smali에 존재한다고 떴다.


해당 코드를 보면 v2가 1이고 this.a.e가 unknown이 아니면 문제가 풀릴 것으로 예상된다.


v2는 this.a.IsCorrect(v0); 이므로 해당 함수로 접근해보면 아래와 같이 Native 코드 내에 선언되어있음을 알 수 있다.


그 바로 위에 adnjni라는 라이브러리를 호출하고 있는 것을 알 수 있다.

따라서 디컴파일 후 /lib/armeabi 폴더에 들어가면 libadnjni.so 가 있는 것을 볼 수 있다. 이를 분석해보자.


IDA로 열어보면 유일하게 문자열인 것과 v12부터의 배열을 비교하는 것을 볼 수 있다.

따라서 v12부터의 값을 ascii로 변경시키면 답이 나올거라 생각한다.


해당 값을 ascii converter를 이용하여 변환시켜 주었다.

그 결과값을 APP에 넣고 Login 버튼을 누르면 답이 출력된다.





반응형
블로그 이미지

rootable

,
반응형
Flag is a serial number.
문제는 위와 같이 간단하게 되어있고 apk 파일을 하나 주는 듯 하다.
( Android CTF 문제를 찾아보다가 출처에 있는 글에서 문제를 퍼왔다. )

suCTF.apk


귀차니즘으로 인해 직접 사진을 찍지는 않겠지만 우측 상단의 설정 아이콘을 누르면 라이센스를 입력하라고 하는데 잘못된 키를 입력하면 아래와 같이 뜬다.


알람에 뜬 문구를 strings.xml에서 찾아본 결과 존재하지 않았다.

소스코드에 하드코딩 되어있는지 찾아보기 위해 astrogrep으로 검색한 결과 MainActivity에 존재함을 확인하였다.



MainActivity에서 checkLicenceKey 함수를 보면 이미 라이센스를 가지고 있거나 없으면 KeyVerifier.isValidLicenceKey 함수를 거친 결과가 true이면 해당 앱을 정상적으로 모두 사용할 수 있다고 한다.


해당 함수에 들어가면



3개의 string을 받아 encrypt 함수에 넣고 그 결과가 "29a002..." 와 동일하면 true를 리턴시켜준다.


encrypt 함수를 보자.



여기서는 전달받은 3개의 string을 처리하는 것으로 확인된다.

먼저 3개의 string이 무엇인지 확인하자.


맨 처음 MainActivity로 돌아가면 3개의 string은 아래와 같음을 알 수 있다.

① 사용자의 입력값 ② SecurityKey ③ SecurityIv 


그렇다면 사용자의 입력값은 우리가 정할 수 있는데 2번과 3번은 어디서 얻을 수 있을까?



여기저기 찾아본 결과 setSecurityKey와 setSecurityIv가 있는 getConfig라는 함수를 찾았다.

이것을 보면 Database에서 해당 값을 가져오는 것을 알 수 있다.


DB명을 알기 위해 SEELCT_QUERY를 찾아보면 데이터를 가져오는 db의 이름은 db.db, table 이름은 config 임을 알 수 있다.



astrogrep으로 db.db를 검색한 결과 assets 폴더에 존재함을 확인하였고 DB Browser를 통해 보면 아래와 같은 데이터를 확인할 수 있다.



getConfig() 함수를 통해 SecurityIv는 5번째 열, SecurityKey는 6번째 열임을 확인하였으므로 해당 값들은 아래와 같다. (0부터 시작이므로 5번쨰, 6번째다)

SecurityIv = a5efdbd57b84ca36

SecurityKey = 37eaae0141f1a3adf8a1dee655853714


윽.. 암호화 알아보기 귀찮아서 일단 여기까지!
다음에 또 AES 암호화관련된 문제 있으면 이어서 풀겠다아



출처 : http://hackability.kr/entry/2014SUCTF-Reverse-200-Commercial-Application

반응형
블로그 이미지

rootable

,
반응형

IOS 버전 10.3 이전의 경우 burp 인증서를 설치하면 알아서 신뢰까지 해준다.


But 10.3 이후는 수동으로 설치한 인증서일 경우 직접 신뢰를 해주어야한다.


[ 설정 > 일반 > 정보 > 인증서 신뢰 설정 ] 에서 진행하시면 됩니다~


참고 : 

https://support.apple.com/ko-kr/HT204477

https://support.portswigger.net/customer/en/portal/articles/1841109-installing-burp-s-ca-certificate-in-an-ios-device

반응형
블로그 이미지

rootable

,