상세 컨텐츠

본문 제목

FridaLab_08

CTF

by ser-ser 2025. 4. 18. 16:09

본문

FridaLab_08: 버튼 텍스트 변경하기

 

FridaLab의 여덟번째 문제는 'CHECK'버튼의 텍스트를 'Confirm'으로 변경하는 연습을 다룹니다. 이번 포스팅에서는 08번 문제를 풀며 프리다로 버튼의 텍스트 값을 수정하는 방법을 알아보겠습니다.


문제 설명

문제: Change 'CHECK' button's text value to 'confirm'

  • 해석: 앱의 'CHECK' 버튼의 텍스트를 'Confirm'으로 변경해야 합니다.

소스코드 확인 (chall08)

chall08() 메서드가 어디에 있는지 확인하기 위해 jadx-gui를 사용하겠습니다.

  • MainActivity 클래스에서 chall08() 메서드를 확인합니다.


  • 소크코드 분석 (chall08)
    public boolean chall08() {
        return ((String) ((Button) findViewById(R.id.check)).getText()).equals("Confirm");
    }
    • findViewById(R.id.check)
      • ID가 R.id.check인 뷰(버튼)를 찾습니다.
    • getText()
      • 버튼의 텍스트를 가져옵니다.
    • equals("Confirm")
      • 버튼 텍스트가 "Confirm"과 동일하면 true를 반환합니다.
    • 목표
      • R.id.check 버튼의 텍스트를 "Confirm"으로 변경하여 chall08()이 true를 반환하도록 합니다.


  •  

소스코드 확인 (R.id.check)

  • chall08() 메서드의 findViewById(R.id.check)코드의 'check'을 클릭하여 버튼의 소스코드를 확인합니다.
  • 소스코드 확인 (R.id.check)
    public static final int check = 0x7f07002f;
    • R.id.check
      • 버튼의 고유 ID로, 값은 0x7f07002f입니다.
    • 목표
      • 이 ID를 사용해 버튼을 찾아 텍스트를 수정합니다.

프리다 자바스크립트 작성

프리다를 사용해 R.id.check 버튼을 찾아 텍스트를 "Confirm"으로 변경하겠습니다.

    Java.choose("uk.rossmarks.fridalab.MainActivity", {
      onMatch: function (instance) {
        var c_08_CheckID = instance.findViewById(0x7f07002f);
        var klass = Java.use("android.support.v7.widget.AppCompatButton");
        var c_08_Check = Java.cast(c_08_CheckID, klass);
        var String = Java.use("java.lang.String");
        c_08_Check.setText(String.$new("Confirm"));
      },
      onComplete: function () {
        console.log("movement!!!!!!!");
      },
    });

 

🔶 추가된 코드 설명

  • Java.choose("uk.rossmarks.fridalab.MainActivity", {...})
    • MainActivity 인스턴스를 찾아 버튼 조작을 수행합니다.
  • var c_08_CheckID = instance.findViewById(0x7f07002f)
    • R.id.check(0x7f07002f)로 버튼 뷰를 찾습니다.
  • var klass = Java.use("android.support.v7.widget.AppCompatButton")
    • 버튼의 실제 클래스(AppCompatButton)를 불러옵니다.
  • var c_08_Check = Java.cast(c_08_CheckID, klass)
    • findViewById로 반환된 뷰를 AppCompatButton 타입으로 캐스팅하여 버튼 메서드 호출을 준비합니다.
  • var String = Java.use("java.lang.String")
    • Java String 클래스를 불러옵니다.
  • c_08_Check.setText(String.$new("Confirm"))
    • 버튼의 텍스트를 "Confirm"으로 설정합니다.
  • onComplete: function() { console.log("movement!!!!!!!") }
    • 실행 완료 시 "movement!!!!!!!"를 출력합니다.

실행

  • 스크립트 저장 및 실행
    • 위 코드를 FridaLab_08.js로 저장합니다.
    • CMD에서 py3 환경에 접속한 뒤 frida -U -l FridaLab_08.js FridaLab을 입력합니다.
    • 스크립트 실행 후 버튼 텍스트가 "Confirm"으로 변경됩니다.
    • 콘솔에 "movement!!!!!!!"가 출력됩니다.
    • FridaLab 앱에서 'Confirm' 버튼을 클릭하면 08번 문제가 초록색으로 바뀌며 해결됨을 확인할 수 있습니다.

문제 해결 과정에서의 주의점

  • 뷰 타입 캐스팅
    • findViewById는 일반 View 객체를 반환하므로, AppCompatButton으로 캐스팅해야 setText 메서드를 호출할 수 있습니다.
  • 정확한 ID 사용
    • R.id.check(0x7f07002f)를 정확히 지정해야 올바른 버튼을 찾을 수 있습니다.
  • 클래스 경로
    • android.support.v7.widget.AppCompatButton은 앱에서 사용하는 버튼 클래스이므로, 다른 환경에서는 실제 클래스 경로를 확인해야 할 수 있습니다.

이번 포스팅에서는 FridaLab 08번 문제를 풀며 프리다로 버튼의 텍스트를 동적으로 변경하는 방법을 배웠습니다.

 

'CTF' 카테고리의 다른 글

암호 복호화  (0) 2025.04.20
루팅 탐지 우회  (0) 2025.04.19
FridaLab_07  (1) 2025.04.17
FridaLab_06  (1) 2025.04.17
FridaLab_05  (0) 2025.04.17

관련글 더보기