Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

CIDY

[Reverse_Engineering] 문제풀이(rev-basic-3) 본문

Hack/DreamHack

[Reverse_Engineering] 문제풀이(rev-basic-3)

CIDY 2022. 7. 17. 03:18

 

얘도 검증조건 찾는 문제인 것 같다.

 

 

함수보러가자...

 

 

간단한 문제다. 브루트포스로 해결해보자.

 

checktable = [0x49, 0x60, 0x67, 0x74, 0x63, 0x67, 0x42, 0x66, 0x80, 0x78, 0x69, 0x69, 0x7B, 0x99, 0x6D, 0x88, 0x68, 0x94, 0x9F, 0x8D, 0x4D, 0x0A5, 0x9D, 0x45]

arr = "A" * len(checktable)
arr = list(map(ord, arr))

check = 1

for i in range (24):
  if checktable[i] != ((i ^ arr[i]) + 2*i):
    check = 0

if check == 1:
  print("Correct")
else:
  print("Wrong")

 

python으로 표현하면 이렇고, 

 

checktable = [0x49, 0x60, 0x67, 0x74, 0x63, 0x67, 0x42, 0x66, 0x80, 0x78, 0x69, 0x69, 0x7B, 0x99, 0x6D, 0x88, 0x68, 0x94, 0x9F, 0x8D, 0x4D, 0x0A5, 0x9D, 0x45]

flag = ""
for i in range(len(checktable)):
	for j in range (0x100):
		if checktable[i] == ((i ^ j)+2*i)&0xff :
			flag += chr(j)

print(flag)

 

이렇게 플래그를 얻을 수 있다.