Key 값이 5D88-53B4-52A87D27-1D0D-5B09 일때 Name은 무엇인가
힌트 : Name은 두자리인데.. 알파벳일수도 있고 숫자일수도 있고..
정답인증은 Name의 MD5 해쉬값(대문자)
먼저 문제 파일을 다운로드하고 압축을 푸는데 Advance RCE L06문제가 같이 들어있네요.
어쨌든 프로그램을 실행시켜보겠습니다.
Name이 두 자리라고 해서 두 글자를 입력했는데 더 입력하라고 하네요.
이 부분은 직접 수정해야 하는 것 같습니다.
어쨌든 ExeinfoPE를 이용해서 정적 분석을 진행해보겠습니다.
패킹이 되어있지는 않네요.
이제 OllyDBG를 이용해서 동적 분석을 진행해보겠습니다.
먼저 이 부분을 수정해서 Name에 두 자리를 입력할 수 있도록 합니다.
그리고 코드를 분석하다 보면 시리얼을 만드는 부분을 찾을 수 있습니다.
사실 이 문제는 Basic RCE L17과 같은 문제입니다.
하지만 Name이 두 글자라는 차이가 있습니다.
이 부분에 주의해서 분석해서 C언어 코드로 만들고 그 코드에 무차별적인 대입을 통해서 Name값을 구해보겠습니다.
#define _CRT_SECURE_NO_WARNINGS
#include <limits.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int a = 0, b = 0;
int i, j, k;
for (i = 0; i <= 0xFF; i++)
{
for (j = 0; j <= 0xFF; j++)
{
for (k = 0; k <= 1; k++)
{
if (k == 0)
{
a = i;
}
else
{
a = j;
}
a += b;
a *= 0x772;
b = a;
b *= a;
a += b;
a *= 0x474;
a *= 0x2;
b = a;
}
if (b >= 0x5D880000 && b <= 0x5D88FFFF)
{
printf("%X%X -> %X\n", i, j, b);
}
a = 0;
b = 0;
}
}
return 0;
}
이 코드를 실행시키면
이런 결과가 나옵니다.
두 가지 결과가 나오는데 0x93은 정상적인 방법으로 입력할 수 없는 값이므로 0x43과 0x36을 문자로 변환한 C6이 Name값이 될 것입니다.
정답 인증은 Name값의 MD5 해시값이므로 변환시켜주겠습니다.
hash darling, hash!
Flag: 7e8b9f5cab4a8fe24fad9fe4b7452702
'CodeEngn Write Up > Advance' 카테고리의 다른 글
CodeEngn Advance RCE L11 Write Up (4) | 2022.08.19 |
---|---|
CodeEngn Advance RCE L09 Write Up (7) | 2022.06.01 |
CodeEngn Advance RCE L07 Write Up (8) | 2022.05.28 |
CodeEngn Advance RCE L06 Write Up (2) | 2022.05.19 |
CodeEngn Advance RCE L05 Write Up (2) | 2022.05.19 |