728x90

exe파일과 txt파일 하나씩 있네요. 

이름 입력 형식이 자유니 이름에 따라 serial넘버가 만들어지는것 같네요. 자세한건 디버거로 확인해봅시당

 

v6배열을 확인해보면 0 -> 16, 1 -> 32, 2 -> 48 이렇게 배정되어  있고 루프로 3개씩 반복되니 v7[0] ^ 16, v7[1] ^ 32, v7[2] ^ 48, v7[3] ^ 0x16 이렇게 반복되네요.

sprintf에서 Buffer의 주소와 연산 값을 넣어주고, 입력값(v7)과 string compare한 후에 correct와 wrong으로 분리됩니다.

정적 디버깅으로 코드의 흐름을 대충 알아봤고 이제 동적 디버깅으로 자세히 알아봅시다.

 

우선 연산값을 보기 위해 for문 안에 breakpoint를 하나 걸어주고, 하나하나씩 실행해보며 확인해보겠습니다.

 

우선 첫 변수 name의 입력값은 AAAA로 넣어주었습니다. 입력값이 stack에 잘 들어가는것이 보입니다. 굿

 

 

입력값 "AAAA"의 1번 루프

 

ecx와 edx에 어떤 값을 넣어주는것을 확인할 수 있습니다.

각각 0x10, 0x41이 들어가있습니다. 0x41은 입력값 'A'의 ascii값이고 0x10은 v6[0]값이라고 생각할 수 있습니다. 

또한 다음으로 ecx, edx의 xor값을 ecx에 넣어줍니다. 

잘 들어가있네요 

 

xor된 값을 넣어주고 compare연산 후 루프로 돌아갑니다. 

compare연산은 ebp와 ecx에서 진행하는데 각각 1, 4로 1은 현재 진행한 문자 개수, 4는 총 문자의 개수로 생각할 수 있습니다. 확인은 입력값을 바꿔보면서 할 수 있는데, 과정은 노가다이므로 과감히 생략합니다! 

 

입력값 "AAAA"의 2번 루프

ecx값이 전엔 0x10이였지만 지금은 0x20인 걸 알수있죠. 배열 v6의 값인건 확실합니다. 이후 4번의 루프(입력이 4글자이므로) 끝나고 stack을 확인해보면, 

 

0x0019fe08에 \x42\x42\x42\x42, 즉 "AAAA"가 들어있음을 알 수 있고

0x0019fe6c엔 \x35\x31 (0x51), \x36\x31 (0x61), \x37\x31(0x71), \x35\x31 (0x51) 이 들어가있음을 알 수 있습니다.

(문자열 연산이므로 바이트코드로 들어가지 않아서 ascii로 계산합니다. 뒤에서 2개씩 끊어서 ascii로 변환해보면 값을 알 수 있습니다.)

 

serical을 입력하면 다음과 같은 방식처럼 하나하나 compare연산을 합니다. jnz연산은 총 3번이 있는데 

1, 2번째의 연산은 입력값(serical)과 연산된 값을 비교하는 연산입니다.

(A를 비교한다 하면 A가 ascii값이 0x41이고 4와 1을 하나씩 비교합니다)

3번째 연산은 길이를 계산하여 다하면 루프에서 탈출시켜줍니다. 

 

 

이렇게 연산이 끝나고, correct와 wrong으로 갈라집니다..

 

 

역연산은 어렵지 않습니다. xor은 xor로 상쇄되기 때문이죠! 

 

#include <stdio.h>
int main()
{
	unsigned int arr[8] = { 0x5B,0x13,0x49,0x77,0x13,0x5E,0x7D,0x13 };
	unsigned int ans[8] = { 0 };
	int num[3] = { 16,32,48 };
	int j = 0;
	for (int i = 0; i < 8; i++,j++)
	{
		if (j > 2)
			j = 0;
		ans[i] = arr[i] ^ num[j];
	}
	for (int i = 0; i < 8; i++)
		printf("%c", ans[i]);
}

 

 

 

(ida를 업데이트했더니 아주 이쁘게 잘 분석하네요.  아주 좋아요~)

728x90

'reversing > reversing.kr' 카테고리의 다른 글

[reversing.kr] Replace  (0) 2024.02.16
[reversing.kr] Music Player  (1) 2024.02.15
[reversing.kr] Easy_CrackMe  (0) 2020.11.29

+ Recent posts