본문 바로가기
Write Up/CTF

Wandere bits write up

by wlgpdnjs 2018. 1. 29.


argv로 입력값을 받으면 wapint 함수에서 연산을 한 후에 16진수 문자열로 반환된다. 처음에는 안에 연산과정을 분석해보려했는데 2진수로 바꾼후 뭘 하는지 잘 모르겠어서 변환값과 입력값이 1대1로 대응되는걸 보고 그냥 변환표를 만드는게 빠를것 같아서 표를 만들기로 했다.



처음에 A로 채워서 넣으면 2진수로 A(65)로 저장되어 있는 걸 보고 A(01000001)가 82(100000010)로 변환되길래 2진수로 바꾼후 뒤집는 줄 알았는데 B에서 바로 막혀버렸다....ㅠ 보수로도 해보고 더하기 빼기도 해봤는데도 규칙을 모르겠....



A는 82로 바뀌는데 마지막 값을 +1 해준다.


A ~ Z, a ~ ~, 0 ~ 9를 집어넣어서 compare에 들어가는 값을 보면 표 작성 가능



#A ~ Z
check1=['82','81','83','88','8a','89','8b','84','86','85','87','8c','8e','8d','8f','a0','a2','a1','a3','a8','aa','a9','ab','a4','a6','a5']
dic={}
cnt=65
for i in check1:
    dic[i]=chr(cnt)
    cnt=cnt+1
#a ~ ~
check2=['92','91','93','98','9a','99','9b','94','96','95','97','9c','9e','9d','9f','b0','b2','b1','b3','b8','ba','b9','bb','b4','b6','b5','b7','bc','be','bd']
cnt=97
for i in check2:
    dic[i]=chr(cnt)
    cnt=cnt+1
#0 ~ 9
check3=['30','32','31','33','38','3a','39','3b','34','36']
cnt=0x30
for i in check3:
    dic[i]=chr(cnt)
    cnt=cnt+1

tmp="82a386a3b7983198313b363293399232349892369a98323692989a313493913036929a303abe"
encrypted=[str(tmp[i:i+2]) for i in range(0,len(tmp),2)]

flag=""
for i in encrypted:
    flag+=dic[i]
print flag

'Write Up > CTF' 카테고리의 다른 글

HackCTF - DNA  (0) 2019.07.29
welcome to droid  (0) 2018.02.05
[Secuinside2017]snake  (0) 2018.01.14
[CTF]encrypt  (0) 2018.01.14
[CODEGATE2017]HelloProtector  (0) 2018.01.07