실습/[Android Hacking 실습]

FridaLab 1번 문제 풀이

환석이 2023. 3. 17. 00:31

안드로이드 해킹에 관해서 실습을 해보기 위해  FridaLab을 이용해 보았다.

 


 

APK 파일 출처 : https://rossmarks.uk/blog/fridalab/ 

 

FridaLab

I was struggling with a recent test using frida, knowing it could do what I want but unsure how. After lots of googling and trial and error I eventually got it working. So I decided

rossmarks.uk

 

위 APK파일을 Nox에 설치하여 실행해보게 되면 , 

위와 같은 최초 화면을 획득할 수 있다.

 

 

CHECK를 누르게 되면 ,

위와 같이 , 모든 문항이 빨간색으로 표시되는 것을 확인할 수 있다. 

아직 아무런 문제를 해결 하지 못했기 때문에 위처럼 표시됨을 알 수 있고, 앞으로 문제를 해결해 나가면서 초록색으로 변화되는 화면을 볼 수 있을 것이다. 


 

1번 문제 

1. Change class challenge_01's variable 'chall01' to : 1

 

문제를 풀기 전 JEB라는 디컴파일러를 이용해서 FridaLab.apk 파일을 디컴파일 하여 분석해 보기로 했다.

디컴파일 :https://hwan2story.tistory.com/14

 

디컴파일(Decompile)과 APK 디컴파일

디컴파일(Decompile) - 컴퓨터 프로그램을 이루는 소스 코드나 실행 파일 등을 원래의 형태로 분해하여 해석할 수 있는 형태로 변환하는 것을 말합니다. - 디컴파일을 수행하면, 소스 코드나 리소스

hwan2story.tistory.com

 

최초 FridaLab.apk를 실행했을때 모습이다. 

jeb 초기화면

필자는 이 프로그램을 처음 사용하였기에 무슨 말 인지 전혀 이해를 하지 못했다. 

 

그래도 먼저 Manifest.xml 파일에 접근해, 정보를 얻어보기로 했다.

Manifest.xml

<?xml version="1.0" encoding="UTF-8"?>
<manifest android:compileSdkVersion="28" android:compileSdkVersionCodename="9" android:versionCode="1" android:versionName="1.0" package="uk.rossmarks.fridalab" platformBuildVersionCode="1" platformBuildVersionName="1.0" xmlns:android="http://schemas.android.com/apk/res/android">
  <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28"/>
  <application android:allowBackup="true" android:appComponentFactory="android.support.v4.app.CoreComponentFactory" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme">
    <activity android:name="uk.rossmarks.fridalab.MainActivity">
      <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
      </intent-filter>
    </activity>
  </application>
</manifest>

캡쳐실력 부족으로 내용을  복사해 봤다.

 

위 구문 중

<acrivity android:name ="uk.rossmarks.fridalab.MainActivity">라는 구문을 보았는데 ,

이는 uk -> rossmarks -> fridalab -> MainActivity 식으로 이어져 있다는 것을 알게 되었다.

 

uk.rossmarks.fridalab.MainActivity

 

본격적으로 1번 문제에 대해서 보기로 하자.

 

사실 별 다르게 찾을 거 없이 손쉽게 눈으로 확인할 수 있었다.

challenge_01

 

challenge_01

 

분석대상 클래스를 들어오게 되니, 바이트코드로 표시된 부분을 확인 할 수 있었다.

 

 

그중 친절하게 JEB가 안내한 challenge_01을 디컴파일 하기 위해 위 옵션을 실행해 보았다.

 

 

Challenge_01 디컴파일 모습

디컴파일된 challenge_01 코드를 확인할 수 있었다. 

 

이쯤에서 문제를 다시 이해해 보면 , 

 

 Change class challenge_01's variable 'chall01' to : 1

 

class challenge_01's의 변수 'chall01'을 1로 변경하여라"라는 문제였다. 

 

이 문제를 해결하기 위해서는 frida를 이용해 변수를 변경하는 스크립트를 생성해 바꿔주면 된다. 

 

다음은 내가 사용한 js스크립트 코드이다.

setImmediate(function() { //JavaScript의 내장 함수 중 하나로, 주어진 함수를 다른 콜백 함수들이 처리되기 전에 즉시 실행
  Java.perform(function() { //frida 라이브러리의 함수 중 하나로, Java 객체나 클래스를 조작할 수 있는 함수입니다.
    
  var chall_01 = Java.use("uk.rossmarks.fridalab.challenge_01"); // java.use를 통해 challenge_01 클래스를 가져옵니다.
  chall_01.chall01.value = 1; //가져온 클래스의 chall01 속성을 1로 변경하는 코드입니다.
    
   
  });
});

 

Java.use : 링크삽입예정

 

먼저 cmd를 이용해 frida서버를 백그라운드에서 돌린다

 

//이미 예전에 서버를 설치 후 가동 시킨 거라 과정이 없습니다..

 

로컬에서 frida가 정상적으로 작동하는 것을 확인

 

이후 아까 만든 js코드가 있는 위치인 "C:\Users\tjrgh\sekurity\android"로 이동한다

 

chal01.js

아까 만들어 둔 chal01.js를 frida를 이용해야 하는데 , 

 

frida -U -l "C:\Users\tjrgh\sekurity\android\chal01.js" FridaLab

-U 옵션은 USB 연결을 사용하여 장치에 연결하겠다는 것을 의미합니다.
-l 옵션은 스크립트 파일의 경로를 지정하는 데 사용됩니다. 이 옵션 다음에는 스크립트 파일의 경로가 지정됩니다.

 

추후 frida옵션들을 정리한 글을 써볼 생각이다.

 

chal01.js 성공 !

cmd하단에 challenge_01 solved라는 문구를 확인할 수 있다. 

 

이제 처음의 FridaLab앱을 확인해 check를 다시 눌러보면?

이렇게 초록색으로 변한 모습을 볼 수 있다.