HackCTF keygen
2022. 3. 14. 04:05ㆍ0x02 Reverse Engineer/0x03. Etc
728x90
유동적인 키 값을 사용해서 인증이 가능하도록 구현하였다.
[python2버전]
#!-*-encoding:utf-8-*-
from pwn import *
import string
import time
import random
enc_flag = "OO]oUU2U<sU2UsUs" # K는 제외 마지막 값은 사용되지 않아도 됨
flag_len = len(enc_flag)
def shuffle():
dummy = []
for i in range(0x21,0x7F):
dummy.extend(chr(i))
shuffle_table = random.sample(dummy,94)
shuffle_string = ''.join(s for s in shuffle_table)
print("Make random data = {}".format(shuffle_string))
return shuffle_string
test = "drd<&jG$_XJ9c^tB" # 16자리
def patch_encode(dummy,enc_flag):
flexible_val = 72
table = ""
offset = 0
while(True):
for i in range(0, len(dummy)):
tmp = ((ord(dummy[i])+12) * flexible_val + 17) % 70 + 48
try:
if(tmp == ord(enc_flag[offset])):
print('current offset {} / calc val {} / dummy = {}'.format(offset, flexible_val,dummy[i]))
flexible_val = tmp
table += dummy[i]
offset += 1
if(offset == len(enc_flag)):
print('Made Keygen by sangsoo = {}'.format(table))
print('Double check....')
challenge_encode(table,enc_flag)
pwn(table)
exit(0)
except IndexError as e:
break
# For debug
def challenge_encode(dummy,enc_flag):
val = 72
table = ""
for i in range(0,len(dummy)):
tmp = ((ord(dummy[i]) + 12) * val + 17) % 70 + 48
val = tmp
table+=chr(tmp)
if(table==enc_flag):
print("succeed via the local")
else:
print('Try harder = {} vs {}'.format(table,enc_flag))
def pwn(generated_data):
p = remote('ctf.j0n9hyun.xyz',9004)
p.sendline(generated_data) # 개행 자동 추가
p.interactive()
if __name__ == "__main__":
patch_encode(shuffle(), enc_flag)
[결과 1]

[결과 2]

[결과 3]

첫바이트는 A,d 만 조건에 만족함을 확인할 수도 있었다.
'0x02 Reverse Engineer > 0x03. Etc' 카테고리의 다른 글
HackCTF babymips (0) | 2022.03.14 |
---|---|
어셈 복습 Decimal to Binary (0) | 2021.07.07 |
Credential leak from Chrome browser [MacOS Version] (0) | 2021.06.27 |
[HTB] Bombs Landed (0) | 2021.03.24 |
lyl -3부 (0) | 2020.04.30 |