Yozzang의 해킹일기 💻
article thumbnail
Published 2022. 9. 29. 00:05
FridaLab (Challenge 5) Wargame/FridaLab
728x90

이번 포스트에서는 FridaLab의 Challenge 5 문제에 대해 다루겠다.


문제를 실행하면 다음과 같다.

FridaLab

## 문제 해석 : 

Challenge 5의 문제 코드는 다음과 같다.

public void chall05(String str) {
    if (str.equals("frida")) {
        this.completeArr[4] = 1;
    } else {
        this.completeArr[4] = 0;
    }
}

Main함수에서 이미 "notfrida"라는 인자를 가진 chall05 함수를 호출하고 있으며 해당 함수를 "frida"라는 인자로 재호출하면 되는 것으로 보인다.

## 문제 풀이 :  

우선 우리가 삽입할 JS code를 실행해줄 JSInjector를 작성해보겠다.

### JSInjector : 

import frida,sys
import argparse

def on_message(message, data):
   if message['type'] == 'send':
      print(message['payload'])
   elif message['type'] == 'error':
      print(message['stack'])

def get_messages_from_js(message, data):
   print (message['payload'])

def get_script(script_name):
   with open("./"+script_name, 'r') as f:
      script = f.read()
   return script

help_script = """
HELP
"""

package_name = "com.Early.touch_touch"

parser = argparse.ArgumentParser(description=help_script)
parser.add_argument('--script', required=True, help='JS File to Inject')
args = parser.parse_args()

device=frida.get_usb_device()
p1=device.spawn([package_name])

process_session=device.attach(p1)

device.resume(p1)

script = process_session.create_script(get_script(args.script))
script.on('message',on_message)
script.load()

sys.stdin.read()

이어서 공격 코드를 작성해보겠다.

### 공격 코드 : 

console.log("[+] Inject Success!") // 연결 확인

Java.perform(function () {
	// chall01
	var challenge_01_class = Java.use('uk.rossmarks.fridalab.challenge_01');

	challenge_01_class.chall01.value = 1;

	// chall02
	var MainActivity_class_c2;

	Java.choose('uk.rossmarks.fridalab.MainActivity', {
		onMatch: function (classInstance) { // 찾으면 실행
			MainActivity_class_c2 = classInstance; // 클래스 정체 초기화
		},

		onComplete: function () { }
	});

	MainActivity_class_c2.chall02();

	// chall03
	var MainActivity_class_c3 = Java.use('uk.rossmarks.fridalab.MainActivity')

	MainActivity_class_c3.chall03.implementation = function () {
		console.log('Hooking Function Called!')
		return true;
	}

	// chall04
	Java.choose('uk.rossmarks.fridalab.MainActivity', {
		onMatch: function (classInstance) {
			classInstance.chall04("frida");
		},

		onComplete: function () { }
	})

	// chall05
	var MainActivity_class_c5 = Java.use('uk.rossmarks.fridalab.MainActivity');
	MainActivity_class_c5.chall05.implementation = function (arg1) {
		this.chall05('frida');
	}
})

 

### 실행 결과 :

공격 성공

이로써 FridaLab Challenge 5의 Crack를 마치겠다.

'Wargame > FridaLab' 카테고리의 다른 글

FridaLab (Challenge 6)  (0) 2022.09.30
FridaLab (Challenge 4)  (0) 2022.09.28
FridaLab (Challenge 3)  (0) 2022.09.27
FridaLab (Challenge 2)  (0) 2022.09.26
FridaLab (Challenge 1)  (0) 2022.09.25
profile

Yozzang의 해킹일기 💻

@요짱

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!