Security Tech
OWASP - MASTG UnCrackable-LEVEL 3 (2)
작성자 - 5rocks_1. verify method 분석
- check.check_code에 어떤 값이 들어가는지 확인하는 함수
public void verify(View view) {
String obj = ((EditText) findViewById(owasp.mstg.uncrackable3.R.id.edit_text)).getText().toString();
AlertDialog create = new AlertDialog.Builder(this).create();
if (this.check.check_code(obj)) {
create.setTitle("Success!");
create.setMessage("This is the correct secret.");
} else {
create.setTitle("Nope...");
create.setMessage("That's not it. Try again.");
}
create.setButton(-3, "OK", new DialogInterface.OnClickListener() { // from class: sg.vantagepoint.uncrackable3.MainActivity.3
@Override // android.content.DialogInterface.OnClickListener
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
});
create.show();
}
2. check_code 메서드 분석
- 사용자의 입력 값을 검증하는 부부은 native 함수로 되어 있기때문에 libfoo.so 파일을 분석 해야함을 확인
public class CodeCheck {
private static final String TAG = "CodeCheck";
private native boolean bar(byte[] bArr);
public boolean check_code(String str) {
return bar(str.getBytes());
}
}
3. libfoo.so 파일 분석
- IDA를 통해 CodeCheck_bar 함수 존재함을 확인 후 디컴파일하여 분석 시도
- sub_10E0 함수 : secret string으로 해당 함수의 v8을통해 받아오는 것을 확인
- (*((unsigned __int8 *)& qword_15038 + v7) ^ *((unsigned __int8 *)v8 + v7)) ) 해당 값들이 서로 xor 연산하는 것을 확인
3-1. qword_15038 함수 분석
- qword_15038 함수 분석 --> MainActivity.init에서 실행함을 확인
- qword_15038 값: pizzapizzapizzapizzapizza
- MainActivity에서 init 함수 호출 시 xorkey를 통해 연산 확인
3-2. sub_10E0 함수 분석
- 해당 함수 깊은 분석 필요 - 수정필요
- v8 값을 받아 특정 연산 진행
- 해당 함수 연산이 끝난이후 xmmword_34 rdata 값에 해당 secret key로 추정되는 함수 확인
4. 풀이
- Frida를 통해 사용자 입력 검증에 사용되는 v8의 값을 출력
Java.perform(function () {
var base = Module.findBaseAddress("libfoo.so");
var addr = base.add(0x10e0);
Interceptor.attach(addr, {
onEnter: function (args) {
this.key_ptr = args[0];
},
onLeave: function () {
if (this.key_ptr && !this.key_ptr.isNull()) {
var data = Memory.readByteArray(this.key_ptr, 24);
console.log(hexdump(data, { length: 24 }));
}
}
});
});
- 해당 값과 xorkey를 xor 연산 진행
(function () {
var key = "pizzapizzapizzapizzapizz";
var a1 = [
0x1D, 0x08, 0x11, 0x13, 0x0F, 0x17, 0x49, 0x15,
0x0D, 0x00, 0x03, 0x19, 0x5A, 0x1D, 0x13, 0x15,
0x08, 0x0E, 0x5A, 0x00, 0x17, 0x08, 0x13, 0x14
];
var result = "";
for (var i = 0; i < 25; i++) {
var c = key.charCodeAt(i % 24) ^ a1[i];
result += String.fromCharCode(c);
}
console.log("solve:", result);
})();
- p는 제외하고 답 입력
[SM G973N::PID::16413 ]-> solve: making owasp great againp
- 풀이 완료
'Security Tech' 카테고리의 다른 글
웹 LLM 공격 (0) | 2025.06.30 |
---|---|
MITM RELAY 를 활용한 TCP 패킷 변조 (0) | 2025.06.30 |
[Mobile] QuarkEngine 툴 소개 및 사용법 (0) | 2025.05.31 |
함수 프롤로그/에필로그 분석 (0) | 2025.05.31 |
스택 구조 그리기 (0) | 2025.04.30 |
Contents