HackCTF keygen

2022. 3. 14. 04:050x02 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
CRACKME constant ver 01 write up  (0) 2020.07.04