Search

[CodeEngn] Basic RCE L07

Tags
reversing
Category
CodeEngn
Last Edited time
2022/01/07 12:50
Visibility
Public

1. 문제

1) 문제 확인
컴퓨터 C 드라이브의 이름이 CodeEngn 일경우 시리얼이 생성될때 CodeEngn은 'ß어떤것'으로 변경되는가
C
복사
키젠 로직을 파악하면 될듯
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); }
C
복사
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
Python
복사
정답은 저게 아닌 CodeEngn ⇒ EqfgEngn 이렇게 바뀌므로 8바이트만 입력하면 된다

4. 몰랐던 개념