Java 리버싱과 관련된 문제
코드만 천천히 따라가면 그렇게 어렵지 않다.
반응형
문제에서 주어지는 파일은
EZrev.class 파일이다.
.class 파일은 바로 내용을 확인할 순 없고
디컴파일을 해야한다.
http://www.javadecompilers.com/
.class 파일을 온라인으로 디컴파일 해주는 사이트가 있다.
해당 사이트에서
파일을 업로드하고 Decompile 버튼을 눌러주면 된다.
import java.util.Arrays;
//
// Decompiled by Procyon v0.5.36
//
public class EZrev
{
public static void main(final String[] array) {
if (array.length != 1) {
System.out.println("L");
return;
}
final String s = array[0];
if (s.length() != 31) {
System.out.println("L");
return;
}
final int[] array2 = s.chars().toArray();
for (int i = 0; i < array2.length; ++i) {
if (i % 2 == 0) {
array2[i] = (char)(array2[i] ^ 0x13);
}
else {
array2[i] = (char)(array2[i] ^ 0x37);
}
}
for (int j = 0; j < array2.length / 2; ++j) {
if (j % 2 == 0) {
final int n = array2[j] - 10;
array2[j] = (char)(array2[array2.length - 1 - j] + 20);
array2[array2.length - 1 - j] = (char)n;
}
else {
array2[j] = (char)(array2[j] + 30);
}
}
if (Arrays.equals(array2, new int[] { 130, 37, 70, 115, 64, 106, 143, 34, 54, 134, 96, 98, 125, 98, 138, 104, 25, 3, 66, 78, 24, 69, 91, 80, 87, 67, 95, 8, 25, 22, 115 })) {
System.out.println("W");
}
else {
System.out.println("L");
}
}
}
디컴파일 결과는 이렇게 나온다.
어떤 입력에 따라서 W 또는 L 을 프린트하는데
Win 과 Lose 의 약자인듯 하다.
Win이 나오게끔 하는 입력을 찾아야 한다.
우선은 입력값의 길이가 31을 만족해야 한다.
그런다음, 입력값의 길이만큼 for 문을 진행하면서
짝수번째 있는 값은 0x13과 XOR,
홀수번째 있는 값은 0x37과 XOR 을 한다.
그 다음으로 입력값 길이의 절반만큼 for 문을 진행하면서
짝수번째 있는 값은 뭔가 이것저것 연산을 하고,
홀수번째 있는 값은 해당 값에 +30을 해준다.
어떻게 돌아가는지 대충 알았으니
쉬운 Python을 이용해서 역으로 계산하는 코드를 짜주면 된다.
arr = [130, 37, 70, 115, 64, 106, 143, 34, 54, 134, 96, 98, 125, 98, 138, 104, 25, 3, 66, 78, 24, 69, 91, 80, 87, 67, 95, 8, 25, 22, 115]
for i in range(15):
if(i%2 == 0):
arr[i], arr[30-i] = arr[30-i]+10, arr[i]-20
else:
arr[i] -= 30
for i in range(31):
if(i%2 == 0):
arr[i] ^= 0x13
else:
arr[i] ^= 0x37
for i in range(31):
print(chr(arr[i]), end="")
이렇게 하나씩 거꾸로 써내려가면 아주 쉽다.
코드를 실행시키면
플래그가 잘 출력되는것을 볼 수 있다.
반응형
'CTF > 리버싱' 카테고리의 다른 글
[2022 화이트햇 콘테스트] 나-1 - 리버싱 / IDA / Pwntool (88) | 2023.12.14 |
---|---|
[2021CCE] Read For Me - 리버싱 / WebAssembly / Burp Suite (154) | 2023.08.15 |
[angstromCTF] zaza - 리버싱 / IDA (86) | 2023.05.22 |
[Space Heroes CTF] Galactic Federation - 리버싱 / IDA (69) | 2023.05.11 |
[Space Heroes CTF] Acheron - 리버싱 / IDA (44) | 2023.04.30 |