728x90
1. 문제
1) 문제 확인
컴퓨터 C 드라이브의 이름이 CodeEngn 일경우 시리얼이 생성될때 CodeEngn은 'ß어떤것'으로 변경되는가
키젠 로직을 파악하면 될듯
2) 코드흐름 파악
// positive sp value has been detected, the output may be wrong!
BOOL __userpurge sub_401056@<eax>(int a1@<ebp>, int a2, int a3, int a4, int a5)
{
char v6; // dl
if ( *(_DWORD *)(a1 + 16) == 101 )
{
GetDlgItemTextA(*(HWND *)(a1 + 8), 104, String, 37);// String = input
GetVolumeInformationA(
0,
VolumeNameBuffer,
0x32u,
&VolumeSerialNumber,
&MaximumComponentLength,
&FileSystemFlags,
0,
0);
lstrcatA(VolumeNameBuffer, "4562-ABEX");
v6 = 2;
do
{
++*(_DWORD *)VolumeNameBuffer;
++*(_DWORD *)&VolumeNameBuffer[1];
++*(_DWORD *)&VolumeNameBuffer[2];
++*(_DWORD *)&VolumeNameBuffer[3];
--v6;
}
while ( v6 );
lstrcatA(byte_402000, "L2C-5781");
lstrcatA(byte_402000, VolumeNameBuffer);
if ( lstrcmpiA(byte_402000, String) )
MessageBoxA(*(HWND *)(a1 + 8), "The serial you entered is not correct!", "Error!", 0);
else
MessageBoxA(*(HWND *)(a1 + 8), "Yep, you entered a correct serial!", "Well Done!", 0);
}
else if ( *(_DWORD *)(a1 + 16) != 2 )
{
return 0;
}
return sub_40112D(a1, a2, a3, a4, a5);
}
- GetDlgItemTextA : 박스에 입력한 값이 String에 들어감
- GetVolumeInformationA : 지정된 루트 디렉토리와 연관된 파일 시스템 정보를 가져옴
- 첫번째 인자가 바로 리소스 정보를 얻고 싶은 루트 디렉토리 path이다. NULL이면 현재 디렉토리 루트를 가져온다
중요 API는 위 두개이다. 내 볼륨의 이름은 HDD_DATA이다. 요걸 가져와서 키젠을 한다
2. 접근방법
키젠 로직을 코드로 짠다음 돌리면 된다
3. 풀이
drive = "Code"
buf = ""
for i in range(4):
buf += chr(ord(drive[i]) + 2)
buf = buf + "Engn" + "4562-ABEX"
key = "L2C-5781"
key += buf
print(key)
===================================
L2C-5781EqfgEngn4562-ABEX
정답은 저게 아닌 CodeEngn ⇒ EqfgEngn 이렇게 바뀌므로 8바이트만 입력하면 된다
4. 몰랐던 개념
728x90
'워게임 > CodeEngn' 카테고리의 다른 글
[CodeEngine] Basic RCE L09 (0) | 2020.12.29 |
---|---|
[CodeEngn] Basic RCE L06 (0) | 2020.12.28 |
[CodeEngn] Basic RCE L05 (0) | 2019.05.17 |
[CodeEngn] Basic RCE L04 (0) | 2019.05.16 |
[CodeEngn] Basic RCE L03 (0) | 2019.05.16 |
Uploaded by Notion2Tistory v1.1.0