문제는 다음과 같다.

DIE로 열어보았을때 패킹은 되어있지 않았다.

프로그램을 실행하면 다음과 같이 뜬다.
디버거에서 문자열을 검색했다.

바로 성공 메시지가 보이지만 사용자의 입력을 받아오는 부분을 찾고 싶기 때문에 Enter your name부분으로 갔다.

아마 43C3D8부분이 출력함수 인것 같다.

43D758이 입력 함수 이다.
코드의 흐름을 쭉 따라가다 보면 암호화 과정이 나온다.

우선 412430을 호출하면 Name의 문자열 길이가 eax에 저장된다.
현재로썬 값이 8이다. 0x8
이 값을 스스로 더하고 (x2) 0x10
그값에 문자열 길이를 더한다. 0x18
그후 shl을 통해 2배곱을 해준다. 0x60
이 값을 제곱한다. 0x2400
이값에 0x60만큼 곱한다. 0xd8000
0x17을 더한다. 0xd8017
이 후 password를 입력받고 password는 문자로 입력받은 숫자를 숫자로 변환하여 저장한다.
예를 들어 1234면 4d2
그 후 이전에 0xd8017을 가져와서 0xace80을 곱한다. E4B88D80
이 값에 d8017을 더한다. E4C60D97
C++로 나타내면 다음과 같다.
#include <iostream>
int main()
{
char input[100];
std::cin.getline(input, 100);
int len = strnlen_s(input, 100);
int result = len;
int dummy = result;
result += dummy;
result += dummy;
result = result << 2;
int dummy2 = result;
result *= dummy2;
result *= dummy2;
result += 0x17;
dummy2 = result;
dummy = result * 0xace80;
result = dummy2;
result += dummy;
std::cout << std::hex << result << std::endl;
}

E4C60D97이 나오려면 10진수로 3838184855이다.

사실 위의 코드를 보면 알겠지만 CodeEngn에서 알파벳 값은 전혀 중요하지 않다. 오직 길이만으로 Password를 생성한다.
그러므로 같은 8자리 글자면 패스워드는 동일하다.
