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

+ Recent posts