
문제에는 해당 바이너리를 분석하라고 되어있는데, 막상 첨부파일엔 .exe파일밖에 없다.
따라서, IDA를 이용해서 정적 분석을 해보고, 안되면 OllyDBG로 동적 분석을 진행하겠다.

main()함수의 내용이다.
사실 rev-basic-3랑 겉으로 보기에는 구조가 똑같아 보인다.
어셈블리를 완벽하게 해석하진 않았지만, 문자열들과 aInput 등이 보인다.
눈으로 당장 확인 가능한 문자열이 Input, %256s, Correct, Wrong 등이 있는 것을 보아,
Input을 통해 어떤 값을 입력 받고,
그 값이 올바른 값이면 Correct, 아니면 Wrong을 출력하는 프로그램이라고 유추가 가능하다.
이번에도 rev-basic-2와 같이 sub_140001000() 함수를 확인해 보겠다.

__int64 __fastcall sub_140001000(__int64 a1)
{
int i; // [rsp+0h] [rbp-18h]
// i를 0부터 27(0x1C-1)까지 반복 (총 28회)
for (i = 0; (unsigned __int64)i < 0x1C; ++i)
{
if (((unsigned __int8)(16 * *(_BYTE *)(a1 + i)) | ((int)*(unsigned __int8 *)(a1 + i) >> 4)) != byte_140003000[i])
return 0; // 불일치하면 실패
}
return 1; // 모두 일치하면 성공
}
입력은 28글자(0x1C)
각 바이트(x)에 대해
out = (16 * x) | (x >> 4)
이 값이 byte_140003000[i]와 완전히 같아야 "Correct"가 출력됨