Index
문제
실행 파일(exe)이 주어지고, 실행하면 사용자 입력을 받고 프로그램이 종료된다.
문제풀이
main
함수이다. if
조건문 안의 sub_140001000
함수를 확인해보자.
for
문 안의 if
조건문을 역연산하여 false
반환을 하도록 만들어야 한다.
if ( (unsigned __int8)(-5 * *(_BYTE *)(a1 + i)) != byte_140003000[i] )
마이너스를 곱해주는 연산이다. -5
의 자료형이 unsigned int
자료형이므로, 0xfb
로 사용된다.
F2
로 브레이크 포인터를 걸고 F9
로 실행시켰다. 프로그램이 실행되면서 0x7ff69e223000
배열에 문자가 저장된 걸 확인할 수 있다.
if 조건문의 어셈블리어이다. imul
명령어로 0xfb
를 곱해준다. 그리고 1byte
만 사용할 수 있도록 0xff를 and
연산한다. 이 흐름을 그대로 구현하여, ascii 문자값을 모두 브루트포싱하여 식에 맞는 값을 저장하고 출력한다.
파이썬 풀이 코드
str = [0xAC, 0xF3, 0x0C, 0x25, 0xA3, 0x10, 0xB7, 0x25, 0x16, 0xC6, 0xB7, 0xBC, 0x07, 0x25, 0x02, 0xD5, 0xC6, 0x11, 0x07, 0xC5]
result = []
for i in range(0, len(str)):
for bt in range(33,127):
if ((-5 * bt) & 0xff == str[i]):
result.append(bt)
for i in result:
print(chr(i), end='')
실행 결과
Uploaded by N2T