1. 문제
Name이 CodeEngn 일때 Serial을 구하시오
(이 문제는 정답이 여러개 나올 수 있는 문제이며 5개의 숫자로 되어있는 정답을 찾아야함, bruteforce 필요)
Ex) 11111
Plain Text
복사
키젠값 찾는거일듯
2. 접근방법
int __stdcall sub_4011E2(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
int v5; // esi
int name_size; // ecx
int v7; // eax
if ( Msg == 2 )
{
PostQuitMessage(0);
}
else if ( Msg == 513 )
{
ReleaseCapture();
SendMessageA(hWnd, 0xA1u, 2u, 0);
}
else if ( Msg == 273 && !HIWORD(wParam) && wParam == 109 )
{
ExitProcess(0);
}
if ( Msg == 273 && !HIWORD(wParam) && wParam == 113 )
ShowWindow(hWnd, 6);
if ( Msg != 273 )
return DefWindowProcA(hWnd, Msg, wParam, lParam);
if ( !HIWORD(wParam) && wParam == 0x70 )
MessageBoxA(0, Text, Caption, 0);
if ( !HIWORD(wParam) && wParam == 108 )
{
if ( !GetDlgItemTextA(hWnd, 106, input_name, 64) || !GetDlgItemTextA(hWnd, 107, input_serial, 64) )
return MessageBoxA(0, aPleaseFillIn1M, Caption, 0);
v5 = 0;
name_size = lstrlenA(input_name);
v7 = 1;
do
{
v5 = ((int)(unsigned __int8)byte_403037[v7] >> 1)
+ (unsigned __int8)byte_403037[v7] * (unsigned __int8)byte_403037[v7]
+ v5
- (unsigned __int8)byte_403037[v7];
++v7;
--name_size;
}
while ( name_size );
if ( change_hex(input_serial) == v5 )
MessageBoxA(0, " Good Job, I Wish You the Very Best", Caption, 0);
else
MessageBoxA(0, " You Have Enter A Wrong Serial, Please Try Again ", Caption, 0);
}
return 0;
}
C
복사
GetDigItemTextA 함수로 Name와 serial 입력값을 가져온다. 그다음 name에 대한 키젠을 생성하여 v5에 저장한다. 그리고 change_hex() 함수를 호출하여 입력한 시리얼 키 값을 16진수로 변환한다.
이건 그냥 디버깅해서 v5에 담긴 값을 시리얼로 입력하면 끝이다
3. 풀이
4. 몰랐던 개념
ez