상세 컨텐츠

본문 제목

FridaLab_01

CTF

by ser-ser 2025. 4. 10. 17:46

본문

프리다 01번 문제: 클래스 변수 변경하기

FridaLab의 첫 번째 문제는 간단하지만 프리다의 기본적인 후킹 기술을 연습하기에 딱 좋습니다. 이번 포스팅에서는 01번 문제를 풀어보면 클래스 내부 변수 값을 변경하는 방법을 단계별로 다뤄보겠습니다.


문제 설명

문제: Chage class challenge_01's variable 'chall01' to: 1

  • 해석: challenge_01 클래스에 있는 변수 chall01의 값을 1로 변경해야 합니다.

jadx를 사용하여 소스코드 분석

먼저, FridaLab 앱의 소스코드를 분석하기 위해 jadx-gui를 사용합니다.

 

  • jadx에서 파일 열기
    • jdsx-gui를 실행한 뒤, '파일 열기'를 클릭하고 다운로드를한 FridaLab.apk 파일을 선택해서 opne을 클릭합니다.


  • 클래스 확인
    • 왼쪽 소스코드 트리에서 uk.rossmarks.fridalab 패키지를 찾아 challenge_01 클래스를 클릭합니다.
  • 소스코드 확인
    package uk.rossmarks.fridalab;
    
    public class challenge_01 {
        static int chall01;
    
        public static int getChall01Int() {
            return chall01;
        }
    }

    • 목표: chall01의 값을 1로 변경하면 getChall01Int()가 1을 반환하게 되고, 앱의 'CHECK' 버튼을 눌렀을 때 문제가 해결된 것으로 인식됩니다.
    • 특징: chall01은 static 변수로, 인스턴스 생성 없이 클래스 자체에서 접근 가능합니다. 따라서 프리다로 이 변수를 직접 수정하면 됩니다.

 


프리다 자바스크립트 작성

이제 프리다를 사용해 chall01 값을 1로 변경하는 스크립트를 작성합니다.

setImmediate(function() {
    Java.perform(function() {
        var c_01 = Java.use("uk.rossmarks.fridalab.challenge_01");
        c_01.chall01.value = 1;
        console.log("movement");
    });
});

 

  • setImmediate: 스크립트를 즉시 실행하지 않고다음 이벤트 루프에서 실행하도록 예약합니다. 안드로이드 메인 스레드의 안정성을 보장하기 위해 사용됩니다.
  • Java.perform: 안드로이드의 Java 런타임에 접근해 Java 작업을 수행할 수 있게 합니다.
  • Java.use("uk.rossmarks.fridalab.challenge_01"): challenge_01 클래스를 프리다에서 사용할 수 있도록 불러옵니다. c_01 변수에 클래스 객체를 저장합니다.
  • c_01.chall01.value = 1:
    • chall01은 static 변수이므로 인스턴스 없이 클래스에서 직접 접근 가능합니다.
    • .value는 프리다에서 필드(변수)의 값을 읽거나 수정할 때 사용하는 속성입니다.
    • 이 줄은 chall01의 값을 0에서 1로 변경합니다.
  • console.log("movement"): 코드가 정사적으로 실행되었음을 확인하기 위한 출력입니다.

실행

  • 스크립트 저장 및 실행
    • 위 코드를 FridaLab_01.js로 저장합니다.
    • CMD에서 frida -U -l FridaLab_01.js uk.rossmarks.fridalab을 입력해 스크립트를 FridaLab에 적용합니다.


  • 오류 발생과 해결
    • 오류 메시지
      Failed to spawn: unble to find process with name'uk.rossmarks.fridalab'
    • 원인: 'uk.rossmarks.fridalab'는 패키지 이름이지 프로세스 이름이 아닙니다. 프리다 명령어에서 -l 옵션은 실행 중인 프로세스 이름을 요구합니다.


  • 해결 (프로세스 이름 확인)
    • CMD에서 frida-ps -U를 입력해 실행 중인 프로세스 이름을 확인합니다.
    • 결과에서 FridaLab 관련 프로세스 이름은 FridaLab으로 확인이 됩니다.


  • 수정된 명령어로 재실행
    • 올바른 프로세스 이름을 사용해 frida -U -l FridaLab_01.js FridaLab으로 다시 실행합니다.
    • 콘솔에 movement가 출력되면 스크립트가 정상 적용된 것입니다.
    • FridaLab 앱에서 'CHECK'를 클릭하면 01번 문제가 초록색으로 바뀌며 해결됨을 확인할 수 있습니다.

이번 포스팅에서는 FridaLab의 첫 번째 문제를 풀며 프리다를 사용해 클래스 내부의 static 변수를 변경하는 방법을 배웠습니다. jadx를 사용하여 소스코드 분석을 시작으로 스클비트 작성, 실행 과정에서 발생한 오류 해결까지 다뤄보았습니다.

'CTF' 카테고리의 다른 글

FridaLab_03  (0) 2025.04.15
FridaLab_02  (0) 2025.04.10
16주차 CTF  (2) 2025.02.18
15주차 CTF  (1) 2025.02.09
14주차 CTF  (0) 2025.02.04

관련글 더보기