728x90
이번 포스트에서는 FridaLab의 Challenge 2 문제에 대해 다루겠다.
문제를 실행하면 다음과 같다.
## 문제 해석 :
Challenge 2의 문제 코드는 다음과 같다.
private void chall02() {
this.completeArr[1] = 1;
}
chall02 함수를 실행하면 되는 것으로 보인다. 단 chall02가 private라는 점을 주의해야 한다.
## 문제 풀이 :
우선 우리가 삽입할 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;
Java.choose('uk.rossmarks.fridalab.MainActivity', {
onMatch: function (classInstance) { // 찾으면 실행
MainActivity_class = classInstance; // 클래스 정체 초기화
},
onComplete: function () { }
});
MainActivity_class.chall02();
})
### 실행 결과 :
이로써 FridaLab Challenge 2의 Crack를 마치겠다.
'Wargame > FridaLab' 카테고리의 다른 글
FridaLab (Challenge 6) (0) | 2022.09.30 |
---|---|
FridaLab (Challenge 5) (0) | 2022.09.29 |
FridaLab (Challenge 4) (0) | 2022.09.28 |
FridaLab (Challenge 3) (0) | 2022.09.27 |
FridaLab (Challenge 1) (0) | 2022.09.25 |