728x90

chall04문제와 다른점은, string이 전달되지 않으면 통과했던것도 취소시킨다는 것 입니다. 항상 전달해 줘야 합니다.

 

 

728x90

'Android > FridaLab' 카테고리의 다른 글

[FridaLab] chall_4  (0) 2020.12.24
[FridaLab] chall_3  (0) 2020.12.24
[FridaLab] chall_2  (0) 2020.12.24
[FridaLab] chall_1  (0) 2020.12.17
frida 사용법 및 RSA 키 유출 예제  (0) 2020.10.06
728x90

chall04함수를 호출하되 인자를 스트링으로 "frida"를 달라고 하네요 

static함수가 아니므로 chall02문제처럼 함수를 호출하고, 인자도 같이 넘겨주면 됩니다.

 

Java.perform(function(){
    var main;
    Java.choose('uk.rossmarks.fridalab.MainActivity', {
    onMatch: function(called_class) {
        main = called_class;
    },
    onComplete: function() {}
    });
    main.chall04("frida");

});

 

728x90

'Android > FridaLab' 카테고리의 다른 글

[FridaLab] chall_05  (0) 2020.12.24
[FridaLab] chall_3  (0) 2020.12.24
[FridaLab] chall_2  (0) 2020.12.24
[FridaLab] chall_1  (0) 2020.12.17
frida 사용법 및 RSA 키 유출 예제  (0) 2020.10.06
728x90

매개변수도 없으니깐 오버로딩하기 딱 좋은 함수네요. 합시다

 

Java.perform(function(){
    var main;
    Java.choose('uk.rossmarks.fridalab.MainActivity', {
    onMatch: function(called_class) {
        main = called_class;
    },
    onComplete: function() {}
    });
    main.chall03.overload().implementation = function () {
		return true;
    };
});

오버로딩은 일시적이므로 pause를 맞추고 check를 해야합니다. 

 

 

(JavaScript) 오버라이딩과 오버로딩

안녕하세요. 이번 시간에는 자바스크립트에서 오버라이딩(overriding)과 오버로딩(overloading)의 차이에 대해 알아보겠습니다! 자바스크립트 강좌를 안 쓰려고 했는데 자꾸 쓰게 되네요. 자바스크립

www.zerocho.com

script = process.create_script(chall03)
script.load()
input("check chall03 \n")

728x90

'Android > FridaLab' 카테고리의 다른 글

[FridaLab] chall_05  (0) 2020.12.24
[FridaLab] chall_4  (0) 2020.12.24
[FridaLab] chall_2  (0) 2020.12.24
[FridaLab] chall_1  (0) 2020.12.17
frida 사용법 및 RSA 키 유출 예제  (0) 2020.10.06
728x90

chall02함수를 실행시키기만 하면 통과인데 chall01문제처럼 static이 아니라 java.use를 사용할 수 없습니다.

이런 경우는 java.choose로 함수를 불러온 후 실행시키면 됩니다

 

Java.perform(function(){
    var main;
    Java.choose('uk.rossmarks.fridalab.MainActivity', {
    onMatch: function(called_class) {
        main = called_class;
    },
    onComplete: function() {}
    });
    main.chall02();
});

 

 

MainActivity안에 있는 chall02함수를 잡기 위해서 java.choose로 Mainactivity클래스를 잡은 후, onMatch, onComplete로 class의 임의의 이름을 지정해줍니다. 그리고 해당 클래스 안에 들어가 해당 이름의 함수를 실행시키면 됩니다.

 

static값이 아닐때 접근하는 방법을 알려주는 문제네요

 

728x90

'Android > FridaLab' 카테고리의 다른 글

[FridaLab] chall_05  (0) 2020.12.24
[FridaLab] chall_4  (0) 2020.12.24
[FridaLab] chall_3  (0) 2020.12.24
[FridaLab] chall_1  (0) 2020.12.17
frida 사용법 및 RSA 키 유출 예제  (0) 2020.10.06
728x90

challenge_01클래스의 변수 'chall01'을 1로 바꿔라네요. 우선 그 이유를 보기 위해서 디컴파일 해보면, 

 

 

chall01의 int형 값을 가져왔을때 1이면 통과하네요.

challenge_01이라는 클래스를 우클릭해서 선언부분으로 들어가보면, 

 

이렇게 chall01에 아무값도 들어가 있지 않네요. static 선언이 되어있으므로 java.use를 사용합니다. 

import frida

jscode = """
Java.perform(function(){
    var challenge_01 = Java.use('uk.rossmarks.fridalab.challenge_01');
    challenge_01.chall01.value = 1;
});
"""

process = frida.get_usb_device().attach('uk.rossmarks.fridalab')
script = process.create_script(jscode)
script.load()

728x90

'Android > FridaLab' 카테고리의 다른 글

[FridaLab] chall_05  (0) 2020.12.24
[FridaLab] chall_4  (0) 2020.12.24
[FridaLab] chall_3  (0) 2020.12.24
[FridaLab] chall_2  (0) 2020.12.24
frida 사용법 및 RSA 키 유출 예제  (0) 2020.10.06
728x90
pip install frida==12.7.0
pip install frida-tools==2.2.0

cmd에서 진행하면 된다. (파이썬은 당연히 깔려있어야겠죠)

글고 위에 설치한 버전은 제가 생각할때 가장 호환성이 좋은 버전이다. (ubuntu 20.04 대신 18.04를 쓰는거랑 같은거)

 

그리고 후킹을 하기 위해선 안드로이드 기기와 frida가 소통할 매개가 있어야 하므로 위에서 받은 frida 버전과 일치하는

frida-server를 다운받아줘야 하는데, 보통은 다들 자기 안드로이드 기기의 cpu가 어떤 종류인지 모르므로(나도 모름)

아래 명령어를 통해 확인해주자. 아, 그리고 adb설치는 따로 설명을 안할꺼니깐 구글링으로 하면 될듯

adb shell getprop ro.product.cpu.abi
adb shell getprop ro.product.cpu.abi2

둘중 하난 무조건 반응이 오고 x86이던 arm이던 결과값에 맞는 frida-server파일을 다운받아주자.

 

Releases · frida/frida

Clone this repo to build Frida. Contribute to frida/frida development by creating an account on GitHub.

github.com

위 링크에 frida파일들이 있는데 다른건 필요없고 server파일만 다운받아주자.

 

난 nox 가상환경에서 작업을 했고, (공기계에서 할려고 했는데 루팅이 문제가 아니라 커널을 다른걸로 덮지 않는이상 

selinux가 해제가 불가능해서 포기하고 가상환경에서 했다. 물론 공기계가 저명한 s시리즈(삼성)이면 널린게 커스텀 롬이라 그냥 덮어씌우면 해결된다. 내껀 듣보라서 없더라)

nox환경설정에서  root활성화를 하고

 

usb디버깅까지 켜준다. (개발자 옵션은 디바이스 정보에서 빌드번호를 5번 터치하면 활성화된다.)

그리고 추가적으로 root권한으로 접근할수 있는 파일접근앱을 설치해준다. (난 예전부터 rootexplorer을 사용했다.)

 

이제 아까 다운받은 frida-server파일을 드래그 앤 드롭으로 안드로이드에 넣어준다.

아마 nox에선 pictures 폴더로 들어갈것이다.

이 폴더에선 파일 권한에 손대지 말자. 오류나더라..

 

frida-server파일을 이제 root권한으로 /data영역에 넣어줄것이다.

경로는 /data/local/tmp 이고, 이 파일은 절대경로이므로 없는 폴더는 생성해주자. (중간에 root권한을 허용해주는 팝업이 뜰것이다.)

권한은 755로 충분하지만, 차피 가상환경이므로 그냥 777로 설정해놨다.

 

 

 

이제 안드로이드 기기에선 설정이 끝났다. 윈도우로 돌아가서, 

adb connect 127.0.0.1:62001

명령을 실행해준다.(위 ip와 포트는 nox플레이어 공통)

 

adb shell

위 명령을 통해 안드로이드랑 연결을 해준다. 여기서 연결이 안되면 안드로이드쪽에서 디버깅 설정에 문제가 생긴것.

 

위 사진처럼 뜨면 (이름은 달라도 상관 ㄴ) 성공한것이다.

 

이제 터미널을 2개를 열어놓고 시작할것인데, 하나는 안드로이드 shell과 연결한 터미널, 하나는 윈도우 터미널이다.

shell쪽에선 frida-server을 실행, 진행중인 프로세스들을 확인할것이고, 윈도우쪽에선 frida함수 명령만 실행한다.

뭔말인지 적는 나도 잘 모르겟으므로 일단 읽어보자.

 

cd /data/local/tmp
ls     (frida-server파일 있는지 확인)
./frida-server(파일명) &      (백그라운드로 frida-sever 실행
ps | grep server    (frida-server 실행 확인)

3번째 줄에서 뭔 오류가 떠도 4번째 줄의 결과값에 frida-server가 있다면 계속 진행해도 좋다.

 

 

이제 안드로이드에서 후킹할 앱의 프로세스명을 알아내야 하는데, 

adb devices

명령을 통해 

연결한 ip와 포트를 알아내고, 

 

frida-ps -D "127.0.0.1:62001"               ("ip주소:port")    

 

보인다 보여

 

 

(이제 밑의 내용은 owasp의 keystore문제를 예로 설명합니다)

 

대충 내가 후킹할 앱을 디컴해서 취약점을 본 후 코드를 작성했다고 가정해보자.

Java.perform(function(){
  var Cipher = Java.use("javax.crypto.Cipher"); //load the Cipher class into a variable to access the init method
  Cipher.init.overload('int', 'java.security.Key').implementation  = function(opmode, key){ //hook the init method
    if (opmode == 1) //encrypt opmode
    {
      var RSAPublicKey = Java.use("java.security.interfaces.RSAPublicKey"); //load the RSA interfaces into variables
      var RSAKey = Java.use("java.security.interfaces.RSAKey");
      var casted_RSAPublicKey = Java.cast(key, RSAPublicKey);  //cast the key to obtain the public key and the exponent
      var casted_RSAKey = Java.cast(key, RSAKey); //cast the key to obtain the modulus
      var base64 = Java.use("android.util.Base64"); //load base64 class to encode byte array to base64 string
      console.log("[*] Method 'init' is called with ENCRYPT_MODE opcode");
      console.log("[*] Public key in Base64 format: " +  base64.encodeToString(key.getEncoded(), 0));
      console.log("[*] Exponent of the public key: " + casted_RSAPublicKey.getPublicExponent());
      console.log("[*] Modulus of the public key: " + casted_RSAKey.getModulus());
    }
    return this.init(opmode, key);
  }
});

위 코드의 이름은 keystore.js이다.

 

이제 이 코드를 frida를 통하여 앱에 후킹해보자.

 

frida -U sg.vp.owasp_mobile.omtg_android(프로세서 명) -l keystore.js(코드) --no-pause

 

이렇게 RSA키가 후킹을 통해 유출되었다. 물론 아직 코드가 완성되지 않아서 후작업을 해야한다.

728x90

'Android > FridaLab' 카테고리의 다른 글

[FridaLab] chall_05  (0) 2020.12.24
[FridaLab] chall_4  (0) 2020.12.24
[FridaLab] chall_3  (0) 2020.12.24
[FridaLab] chall_2  (0) 2020.12.24
[FridaLab] chall_1  (0) 2020.12.17
728x90

drive.google.com/file/d/1xMCWp-cSqSglQlsyxegvVYXGhF3SqrCi/view?usp=sharing

 

twrp_g610l.tar

 

drive.google.com

twrp는 리커버리파일이고, 설치하면 일단 정상적인 부팅은 모든 파티션을 날려야 가능하다. 백업은 미리 해두길..

그리고 처음엔 마운트가 안되는 문제는 모든 저장소의 형식을 fat > ext4 포맷으로 변환해주면 해결된다.

 

drive.google.com/file/d/1qGfHHieS5v_EAaAKsyDeA0GFGdXD21vM/view?usp=sharing

 

Odin v3.12.3.zip

 

drive.google.com

이건 플래싱 툴 :o

728x90

'Android' 카테고리의 다른 글

cSploit 분석 계획  (0) 2020.08.18
OMTG-DATAST-001-BadEncryption  (0) 2020.07.23
Uncrackable_1(작성중)  (0) 2020.07.11
728x90

https://github.com/cSploit/android/releases

 

 

Releases · cSploit/android

cSploit - The most complete and advanced IT security professional toolkit on Android. - cSploit/android

github.com

cSploit 이라는 해킹툴(앱) 이고, 오픈소스라 코드를 파보기로 했다.

 

해당앱은 내가 중1? 때 처음 접했고, 초기버전은 dsploit이라는 앱이였다.

2014년도쯤은 안드로이드 기기가 보안에 취약하여 루트권한을 따는건 일도 아니였고, SELinux는 권한만 있으면 해제할수 있었다.

 

다음은 라우더에 접속한 화면이고, 연결되어있는 네트워크는 학교전역 AP무선 네트워크라, 실제 앱 실행을 해보진 않았다. 혹시나 이 앱을 실행하고 싶으면, 자신의 개인 네트워크에서 하는걸 추천한다. 잘못 건드렸다가 쇠고랑 찰수도 있다.

 

cSploit은 네트워크를 기반으로 공격을 수행하는 앱이고, 기초 지식 없이도 간단한 공격은 가능하다.

기초 지식이 단단한 사람이 이 앱을 사용한다면, 꽤나 쓸만한 앱인듯.

cSploit의 꽃(?)은 MITM이라 할 수 있는데, 단일 ip에 접속하여 네트워크 통신 내용을 읽고 수정도 가능하다.

임의로 리다이렉션도 가능하고, 사용하고 있는 세션까지 즉 해당 아이피가 웹이랑 통신하는 모든 내용을 볼 수 있다.

또한, 해당 기기의 취약점도 분석가능하여 거의 이 앱 하나면 안드로이드폰 하나는 쉽게 해킹할 수 있다.

 

물론 이건 6년전의 얘기고, 현재의 스마트폰은 보안이 훨신 좋아졌다. 

하지만 보안이 좋아졌다는 말은 이 앱의 공격을 막을 수 있다는게 아니라 이 앱을 실행할수 없게 되었다.

SELinux는 커널을 수정하지 않는 이상 임의로 비활성화할 수 없고, 요즘폰들은 루트권한 하나 따기도 어렵다.

 

중1땐 코드를 따로 공부하진 않아서 그냥 이 앱을 갖고 놀기만 했지만, 지금은 코드를 해석할 능력이 있다고 생각한다. 

따라서, jadx를 가지고 이 앱의 코드를 파해쳐보기로 했다.

 

나오는 함수마다 글을 한개씩 올리겟다

728x90

'Android' 카테고리의 다른 글

[twrp] sm-g610l android 8.1.0 (odin)  (0) 2020.10.05
OMTG-DATAST-001-BadEncryption  (0) 2020.07.23
Uncrackable_1(작성중)  (0) 2020.07.11

+ Recent posts