seKUrity_Study : Andriod

[andriod 실습] frida lab 1번 2번

Sapphire. 2023. 3. 19. 07:35

 

먼저 녹스 - frida를 연결하는 adb 서버를 실행시켜 프리다 서버 프로그램을 adb 쉘에서 작동시켜 줘야 한다.

근데 필자의 컴퓨터에는 DOCKER가 실행중에 있어서 녹스를 설치하게 되면 wsl2와 오류를 일으켜 실행되지 않는 문제가 발생한다.

이를 고치기 위해 녹스를 삭제 한 후에  wsl을 다시 활성화 시켜도 문제가 생기는 일이 벌어저 포맷까지 했었다...

미래의 내가 그리고 이 글을 볼 누군가가 나처럼 스트레스 받지 않았으면 하는 마음 해경방법을 적어본다.

 

powershell - 관리자 권한으로 실행 후 다음을 복붙한다.

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

 

본인은 여기까지 해서도 분명 bios에서 가상화를 켜놨음에도 불구하고 가상화가 활성화 되어있지 않다면서 진행되지 않아서 추가로

  1. bcdedit /set hypervisorlaunchtype auto 

명령어도 넣었을때 docker가 다시 살행되었다.

근데 이를 해도 진행되지 않고 바이오스 타령을 한다면 다음을 확인하길 바란다.

  1. 장치 관리자
  2. 동작 -> 레거시 하드웨어 추가
  3. 목록에서 직접 선택한 하드웨어 설치 선택 -> 다음
  4. 시스템 장치 선택 -> 다음
  5. 제조업체 에서 Microsoft 선택 -> 모델 에서 Microsoft Hyper-V 가상화 인프라 드라이버 선택
  6. 설치
  7. 시스템 재시작

외국 포럼같은 곳에서도 잘 찾아봐야 나오고 심지어 한국어로 표시된 자료는 많지 않아서 애먹었다.

그런데 이는 영구적인게 아니라 다시 녹스를 사용하기 위해 깔면 충돌이 일어나기 때문에

도커를 개별 서버로 실행시켜 외부로 접속하는걸 추천한다

도커와 문제되지 않는 블루스택도 실행해 보았으나 블루스택은 무슨 이유에서인지 adb shell 이 열리지 않았다..

(열린다고 해도 frida sever가 작동할지도 의문이다. ) 

 

도움을 받은 사이트 :  https://devsub.tistory.com/m/10


들어가기 전에 frida 문법

 

https://velog.io/@yjok/%ED%94%84%EB%A6%AC%EB%8B%A4-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95

 

프리다 기본 문법

현재 스레드가 가상머신에 연결되어 있는지 확인하고 function을 호출한다.변수와 메소드에 접근할 수 있는 클래스 객체를 반환한다. (인스턴스가 아닌 클래스 객체를 반환함에 주의한다.).implement

velog.io

읽어둔다면 js 코드를 작성할때 큰 도움이 될것으로 보인다

 

adb 서버 실행하기 

 

녹스가 깔린 폴더에서 cmd를 실행 시켜 준 뒤에 nox_adb.exe shell 이라고 쳐서 adb 쉘에 진입되는지 확인

https://github.com/frida/frida/releases 이곳에사 버전에 맞는 frida server를 다운받아 녹스가 있는 폴더에 넣기

다시 녹스폴더에서 cmd를 켠뒤  ox_adb push ./frida-server-16.0.11-android-x86.xz /data/local/tmp

로 xz 파일을 저기에 넣어주고

xz -d frida-server-16.0.11-android-x86.xz 를 해서 압축을 풀어주고

./frida-server-16.0.11-android-x86 & 로 실행 후 백그라운드에 넣어준다

(두번째 실행할때는 adb shell에서 cd data/local/tmp 한다음 ./frida-server-16.0.11-android-x86 & 으로 실행만 시켜주면 된다.)

그다음 파워쉘에서 frida-ps -Uai 하면 다음과 같이 출력되어야 한다

그리고 이 이후로 문제를 풀때마다 JS파일을 보낼때 쓰는 명령어는

 

frida -U -l <JSNAME.js> Fridalab

 

1번문제

 

 

challenge_01의 변수 chall01을 1로 만드는게 목적인것 처럼 보인다 

스태틱 변수로 초기값을 지정하지 않아 0으로 되어있다.

Java.use 를 사용해서 스태틱 변수의 값을 1로 바꿔주었다.

// fridalab.js
setImmediate(function() {
    Java.perform(function() {
      // Challenge 01
      var chall_01 = Java.use("uk.rossmarks.fridalab.challenge_01");
      chall_01.chall01.value = 1;
      console.log("\nchallenge_01 solved!");
    });
  });

그리고 파워쉘에서 실행시켜주면 

문제 1 해결완료!

 

2번문제 

 

 

메인엑티비티에 들어가서 컨트롤 f로  chall02를 검색하면 다음과같이 instance 메소드로 선언된 chall02를 볼수 있다.

이 메소드를 실행하면 completeArr[1]에 1 값이 들어가도록 되어있고, 그것을 이용해서 감지하는것으로 보인다 

 

js로 코드를 작성해 주자

setImmediate(function() {
  Java.perform(function() {
    // Challenge 01 (생략)
    
    // Challenge 02
    Java.choose("uk.rossmarks.fridalab.MainActivity", {
      "onMatch": function(chall_02) {
        chall_02.chall02();
      },
      "onComplete": function() {
        console.log("\nchallenge_02 solved!");
      }
    })
  });
});

1, 2번 모두 해결된 것을 볼 수 있다.