문제 설명

문제 풀이

파일은 다음과 같다.

이 부분을 살펴보아야 할 것 같다.

이 두 부분이 수상한데 아래는 30 단어가 넘으면 나오는 문장 같으니 위를 먼저 봐본다.
일단 입력한 값이 어떻게 되는지부터 확인해보자.
네임은 한자릿수라고 하니 한자릿수만 입력해주자.
다음과 같이 입력해주었다.

더 입력해주라고 뜬다.
아까 CMP문을 살펴보자.


해당 부분의 EAX 값을 확인해보니 내가 입력한 자릿수가 들어간 것을 확인할 수 있다...
이 부분을 1로 바꿔주자.
그리고 새로 저장하고 파일을 다시 열어주자.
45B850부분을 자세하게 살펴봐야한다. Ctrl+G로 찾아가주자.

이 부분이다. 이 부분에서는 name값을 이용하여 시리얼 번호를 만드는데, 이 코드를 이용하여 C코드를 짜면 위의 과제가 해결될 것이다.
코드는 다음과 같다.
#include <stdio.h>
int main(void)
{
ㅤㅤint ESI = 0, EDX = 0;
ㅤㅤfor (int i = 0x30; i <= 0x7A; i++) { //from 0 to z
ㅤㅤㅤㅤESI = i * 0x772; //IMUL ESI, ESI, 0x772
ㅤㅤㅤㅤEDX = ESI; //MOV EDX, ESI
ㅤㅤㅤㅤEDX *= ESI; //IMUL EDX, ESI
ㅤㅤㅤㅤESI += EDX; //ADD ESI, EDX
ㅤㅤㅤㅤESI *= 0x474; //IMUL ESI, ESI, 0x474
ㅤㅤㅤㅤESI += ESI; //ADD ESI, ESI
ㅤㅤㅤㅤEDX = ESI;
ㅤㅤㅤㅤprintf("%c >> %X\n", i, EDX); //생성된 시리얼 출력
ㅤㅤ}
ㅤㅤreturn 0;
}
이제 입력해주면된다.

'Reverse Engineering > CodeEngn Basic' 카테고리의 다른 글
| [리버싱] CodeEngn Basic RCE L19 (0) | 2024.10.08 |
|---|---|
| [리버싱] CodeEngn Basic RCE L18 (0) | 2024.10.06 |
| [리버싱] CodeEngn Basic RCE L13 (0) | 2024.10.06 |
| [리버싱] CodeEngn Basic RCE L12 (0) | 2024.10.06 |
| [리버싱] CodeEngn Basic RCE L16 (0) | 2024.09.29 |