[드림핵] rev-basic-5

리안·2024년 1월 21일

Reversing

목록 보기
2/13

이 문제를 풀었다

언제나 그랬듯이 문자열 참조해서 jump 하기 바로 직전 함수에 접근해보았다.

cmp rax, 18 -> 24번 반복한다.

실행시키며 확인한 것은 입력한 첫번째 문자와 두번째 문자를 더한 값이 AD이면 반복, 두번째 문자와 세번째 문자를 더한 값이 D8이면 반복... 이런 식으로 문자열을 검증한다는 것이었다.

처음엔 아니... 더해서 그 값이 나오는 걸 어케 찾아 이랬는데

하하 24번째 값이 00이다. 그럼 마지막 문제는 4C+00, 즉 4C일 것이다.
계산기 놓고 계산해보다가 그럼 거꾸로 나오는 것도 거꾸로 나오는 거고... 귀찮아서 코드 돌렸다.

import java.util.Scanner;

public class rev {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] dump= {0xAD, 0xD8, 0xCB, 0xCB, 0x9D, 0x97, 0xCB, 0xC4, 0x92, 0xA1, 0xD2, 0xD7, 
				0xD2, 0xD6, 0xA8, 0xA5, 0xDC, 0xC7, 0xAD, 0xA3, 0xA1, 0x98, 0x4C, 0x00};
		int[] result=new int[dump.length];
		int index=dump.length-2;
		result[dump.length-1]=dump[dump.length-1];
		
		for(int i=dump.length-2;i>=0;i--) {
			result[index]=dump[i]-result[index+1];
			index--;
		}
		
		for(int i=0;i<result.length;i++) {
			System.out.print((char)result[i]);
		}
	}
}

짜잔~! 끝이다.
흠... 분석 다 쓰는 거 이제 스킵하려고 했더니 너무 짧아지네

flag: DH{All_l1fe_3nds_w1th_NULL}

0개의 댓글