[CTF]

[DREAMHACK] SingleByteXor

준제 2023. 8. 28. 21:19

https://dreamhack.io/wargame/challenges/559

 

SingleByteXor

어느날, 살인사건이 일어났다. 살인 사건의 유일한 증거물은 쓰여있는 쪽지에는, 다음과 같이 적혀있었다. 54586b6458754f7b215c7c75424f21634f744275517d6d 크립이에게 주어진 단서는, 쪽지의 내용과 이것이

dreamhack.io

주어진대로 구현하면 되는 간단한 문제이다. cyberchef 등 외부 사이트를 이용해도 쉽게 해결된다.

 


 

주어진 배열은 16진수임을 쉽게 알 수 있다. 16진수 숫자 2개가 하나의 아스키코드를 이룬다고 생각하고, 2글자씩 묶어 PW배열에 저장한다. 이것으로 flag는 23글자임을 알 수 있다.

PW = [0x54, 0x58, 0x6b, 0x64, 0x58, 0x75, 0x4f, 0x7b,
      0x21, 0x5c, 0x7c, 0x75, 0x42, 0x4f, 0x21, 0x63,
      0x4f, 0x74, 0x42, 0x75, 0x51, 0x7d, 0x6d]

XOR 연산의 크기는 한 바이트로 주어졌다. 이를 int 범위로 나타내면 1~256이므로 이 범위만큼 반복문을 실행한다. 리스트 각각의 원소에 대해 XOR 연산을 하고 합친다. 이때 XOR연산은 C++와 Python3에서 모두 기호 ^ 를 사용한다.

 

# ANSWER PY3

PW = [0x54, 0x58, 0x6b, 0x64, 0x58, 0x75, 0x4f, 0x7b,
      0x21, 0x5c, 0x7c, 0x75, 0x42, 0x4f, 0x21, 0x63,
      0x4f, 0x74, 0x42, 0x75, 0x51, 0x7d, 0x6d]

for i in range(1, 256):
    for j in range(0, 23):
        print("{}".format(chr(PW[j] ^ i)), end="")
    print("\n")

 

같은 코드를 C++로 작성한 것은 아래와 같다.

 

// ANSWER C++

#include <stdio.h>
#include <algorithm>

char PW[25] = {0x54, 0x58, 0x6b, 0x64, 0x58, 0x75, 0x4f, 0x7b, 0x21, 0x5c, 0x7c, 0x75, 0x42, 0x4f, 0x21, 0x63, 0x4f, 0x74, 0x42, 0x75, 0x51, 0x7d, 0x6d};


int main(){
    for (int i = 1 ; i < 256 ; i ++){
        for (int j = 0 ; j < 23 ; j ++){
            printf("%c", PW[j] ^ i);
        }
        printf("\n");
    }
}

코드 실행 결과 일부 발췌

더보기

<코드 실행 결과 전체 출력>


UYjeYtNz ]}tCN bNuCtP|l

VZifZwMy#^~w@M#aMv@wSo

W[hg[vLx"_vAL"`LwAvR~n

P\o`\qK%XxqFK%gKpFqUyi

Q]na]pJ~$YypGJ$fJqGpTxh

R^mb^sI}'ZzsDI'eIrDsW{k

S_lc_rH|&[{rEH&dHsErVzj

\PclP}Gs)Tt}JG)kG|J}Yue

]QbmQ|Fr(Uu|KF(jF}K|Xtd

^RanREq+VvHE+iE~H[wg

_S`oS~Dp*Ww~ID*hDI~Zvf

XTghTyCw-PpyNC-oCxNy]qa

YUfiUxBv,QqxOB,nByOx\p`

ZVejV{Au/Rr{LA/mAzL{_sc

[WdkWz@t.SszM@.l@{Mz^rb

DH{tHe_k1LleR_1s_dReAm}

EIzuId^j0MmdS^0r^eSd@l|

FJyvJg]i3NngP]3q]fPgCo

GKxwKf\h2OofQ\2p\gQfBn~

@LpLa[o5HhaV[5w[`VaEiy

AM~qM`Zn4Ii`WZ4vZaW`Dhx

BN}rNcYm7JjcTY7uYbTcGk{

CO|sObXl6KkbUX6tXcUbFjz

L@s|@mWc9DdmZW9{WlZmIeu

MAr}AlVb8Eel[V8zVm[lHdt

NBq~BoUa;FfoXU;yUnXoKgw

OCpCnT`:GgnYT:xToYnJfv

HDwxDiSg=@`i^S=Sh^iMaq

IEvyEhRf<Aah_R<~Ri_hL`p

JFuzFkQe?Bbk\Q?}Qj\kOcs

KGt{GjPd>Ccj]P>|Pk]jNbr

txKDxUo[|\UboCoTbUq]M

uyJEyTnZ}]TcnBnUcTp\L

vzIFzWmY~^W`mAmV`Ws_O

w{HG{VlX_Val@lWaVr^N

p|O@|Qk_xXQfkGkPfQuYI

q}NA}Pj^yYPgjFjQgPtXH

r~MB~Si]zZSdiEiRdSw[K

sLCRh\{[RehDhSeRvZJ

|pCLp]gS tT]jg Kg\j]yUE

}qBMq\fuU\kJf]k\xTD

~rANr_eQ vV_he Ie^h_{WG

s@Os^dP
wW^id
Hd_i^zVF

OcXnY}QA

yuFIuXbV qQXob NbYoX|P@

zvEJv[aUrR[laMaZl[SC

{wDKwZ`TsSZm`L`[mZ~RB

dh[ThEKlLErSDrEaM]

eiZUiD~JmMDs~R~EsD`L\

fjYVjG}InNGp}Q}FpGcO_

gkXWkF|HoOFq|P|GqFbN^

`l_PlA{OhHAv{W{@vAeIY

am^Qm@zNiI@wzVzAw@dHX

bn]RnCyMjJCtyUyBtCgK[

co\SoBxLkKBuxTxCuBfJZ

l`S\`MwCdDMzw[wLzMiEU

maR]aLvBeEL{vZvM{LhDT

nbQ^bOuAfFOxuYuNxOkGW

ocP_cNt@gGNytXtOyNjFV

hdWXdIsG`@I~s_sH~ImAQ

ieVYeHrFaAHr^rIHl@P

jfUZfKqEbBK|q]qJ|KoCS

kgT[gJpDcCJ}p\pK}JnBR

+$5;a<5a#45=-

*%4:`=4`"54<,

67?/

('6 8b?6 b  76>.

/ 1 ?e81 e' 019)

.!0
>d90
d&
108(

-"3 =g:3 g% 23;+

,#<f;2f32:*

#,=3i4=
i+<
=5%

"-<2h5< h*= <4$

!.?1k6k)?7'

 />0j7> j(? >6&

'(97m09m/891!

&)86l18l.980 

%*;5o2; o-: ;3#

:2"

;%+q ,%q3$%-=

-$p2%$,<


96
')s.'s1&'/?

 87 &(r/&r0'&.>

?0 !/(!u7 !)9

 .t ) t6! (8

=2#-w
*#w5"#+;

<3",v +"v4#"*:

3<-#y$-y;,- %5

2=,"x%,x:-$4

1>/!{&/{9./ '7

0?. z'.z8/.
&6

!1

69(&|!(|>)(  0


5:+%"+=*+#3

4;*$~#*~<+*"2

48 8/A<"/A/"1

59
9.@=#.@.#0

6: :-C> -C- 3

7;,B?!,B,!2

0<<+E8&+E+&5

1==*D9'*D*'4

>)G:$)G)$7

3? ?(F;%(F(%6


<0 0'I4*'I '*9

1&H5+&H
&+8

>22%K6(%K %(;

?33$J7)$$):

844#M0.#M#.=

95 5"L1/"L"/<

:6
!,?

;7 7 N3- N  ->



%))>
3>P>3  

&**= S.0=S=0#

'++R/1<R<1"

 ,,;U6;U;6% 

!--:T) 7:T:7

W*
49W94' 

#//8 V+ 58V85&


)

; (

.""5[&85[58+

/##4Z'94Z49*

($$ 3]  >3]> -

)%2\!?2\2 ,

*&& 1_" <1_1
< /

+''
0^#
=0^0 =
.

ÔØëäØõÏû¡ÜüõÂÏ¡ãÏôÂõÑýí

ÕÙêåÙôÎú ÝýôÃΠâÎõÃôÐüì

ÖÚéæÚ÷Íù£Þþ÷ÀÍ£áÍöÀ÷Óÿï

×ÛèçÛöÌø¢ßÿöÁÌ¢àÌ÷ÁöÒþî

ÐÜïàÜñËÿ¥ØøñÆË¥çËðÆñÕùé

ÑÝîáÝðÊþ¤ÙùðÇʤæÊñÇðÔøè

ÒÞíâÞóÉý§ÚúóÄɧåÉòÄó×ûë

ÓßìãßòÈü¦ÛûòÅȦäÈóÅòÖúê

ÜÐãìÐýÇó©ÔôýÊÇ©ëÇüÊýÙõå

ÝÑâíÑüÆò¨ÕõüËÆ¨êÆýËüØôä

ÞÒáîÒÿÅñ«ÖöÿÈÅ«éÅþÈÿÛ÷ç

ßÓàïÓþÄðª×÷þÉĪèÄÿÉþÚöæ

ØÔçèÔùÃ÷­ÐðùÎíïÃøÎùÝñá

ÙÕæéÕøÂö¬ÑñøÏ¬îÂùÏøÜðà

ÚÖåêÖûÁõ¯ÒòûÌÁ¯íÁúÌûßóã

Û×äë×úÀô®ÓóúÍÀ®ìÀûÍúÞòâ

ÄÈûôÈåßë±ÌìåÒß±óßäÒåÁíý

ÅÉúõÉäÞê°ÍíäÓÞ°òÞåÓäÀìü

ÆÊùöÊçÝé³ÎîçÐݳñÝæÐçÃïÿ

ÇËø÷ËæÜè²ÏïæÑܲðÜçÑæÂîþ

ÀÌÿðÌáÛïµÈèáÖÛµ÷ÛàÖáÅéù

ÁÍþñÍàÚî´Ééà×Ú´öÚá×àÄèø

ÂÎýòÎãÙí·ÊêãÔÙ·õÙâÔãÇëû

ÃÏüóÏâØì¶ËëâÕØ¶ôØãÕâÆêú

ÌÀóüÀí×ã¹ÄäíÚ×¹û×ìÚíÉåõ

ÍÁòýÁìÖâ¸ÅåìÛÖ¸úÖíÛìÈäô

ÎÂñþÂïÕá»ÆæïØÕ»ùÕîØïËç÷

ÏÃðÿÃîÔàºÇçîÙÔºøÔïÙîÊæö

ÈÄ÷øÄéÓç½ÀàéÞÓ½ÿÓèÞéÍáñ

ÉÅöùÅèÒæ¼ÁáèßÒ¼þÒéßèÌàð

ÊÆõúÆëÑå¿ÂâëÜÑ¿ýÑêÜëÏãó

ËÇôûÇêÐä¾ÃãêÝоüÐëÝêÎâò

ôøËÄøÕïہüÜÕâïÃïÔâÕñÝÍ

õùÊÅùÔîڀýÝÔãî€ÂîÕãÔðÜÌ

öúÉÆú×íكþÞ×àíƒÁíÖà×óßÏ

÷ûÈÇûÖìØ‚ÿßÖáì‚Àì×áÖòÞÎ

ðüÏÀüÑë߅øØÑæë…ÇëÐæÑõÙÉ

ñýÎÁýÐêބùÙÐçê„ÆêÑçÐôØÈ

òþÍÂþÓé݇úÚÓäé‡ÅéÒäÓ÷ÛË

óÿÌÃÿÒè܆ûÛÒåè†ÄèÓåÒöÚÊ

üðÃÌðÝçӉôÔÝêç‰ËçÜêÝùÕÅ

ýñÂÍñÜæÒˆõÕÜëæˆÊæÝëÜøÔÄ

þòÁÎòßåыöÖßèå‹ÉåÞèßû×Ç

ÿóÀÏóÞäЊ÷×ÞéäŠÈäßéÞúÖÆ

øôÇÈôÙã׍ðÐÙîãÏãØîÙýÑÁ

ùõÆÉõØâ֌ñÑØïâŒÎâÙïØüÐÀ

úöÅÊöÛáՏòÒÛìáÍáÚìÛÿÓÃ

û÷ÄË÷ÚàԎóÓÚíàŽÌàÛíÚþÒÂ

äèÛÔèÅÿˑìÌÅòÿ‘ÓÿÄòÅáÍÝ

åéÚÕéÄþʐíÍÄóþÒþÅóÄàÌÜ

æêÙÖêÇýɓîÎÇðý“ÑýÆðÇãÏß

çëØ×ëÆüȒïÏÆñü’ÐüÇñÆâÎÞ

àìßÐìÁûϕèÈÁöû•×ûÀöÁåÉÙ

áíÞÑíÀúΔéÉÀ÷ú”ÖúÁ÷ÀäÈØ

âîÝÒîÃù͗êÊÃôù—ÕùÂôÃçËÛ

ãïÜÓïÂøÌ–ëËÂõø–ÔøÃõÂæÊÚ

ìàÓÜàÍ÷ÙäÄÍú÷™Û÷ÌúÍéÅÕ

íáÒÝáÌö˜åÅÌûö˜ÚöÍûÌèÄÔ

îâÑÞâÏõÁ›æÆÏøõ›ÙõÎøÏëÇ×

ïãÐßãÎôÀšçÇÎùôšØôÏùÎêÆÖ

èäרäÉóǝàÀÉþóßóÈþÉíÁÑ

éåÖÙåÈòƜáÁÈÿòœÞòÉÿÈìÀÐ

êæÕÚæËñşâÂËüñŸÝñÊüËïÃÓ

ëçÔÛçÊðĞãÃÊýðžÜðËýÊîÂÒ

”˜«¤˜µ»áœ¼µ‚á£´‚µ‘½­

•™ª¥™´Žºà½´ƒŽà¢Žµƒ´¼¬

–š©¦š·¹ãž¾·€ã¡¶€·“¿¯

—›¨§›¶Œ¸âŸ¿¶Œâ Œ·¶’¾®

œ¯ œ±‹¿å˜¸±†‹å§‹°†±•¹©

‘®¡°Š¾ä™¹°‡Šä¦Š±‡°”¸¨

’ž­¢ž³‰½çšº³„‰ç¥‰²„³—»«

“Ÿ¬£Ÿ²ˆ¼æ›»²…ˆæ¤ˆ³…²–ºª

œ£¬½‡³é”´½Š‡é«‡¼Š½™µ¥

‘¢­‘¼†²è•µ¼‹†èª†½‹¼˜´¤

ž’¡®’¿…±ë–¶¿ˆ…ë©…¾ˆ¿›·§

Ÿ“ ¯“¾„°ê—·¾‰„ꨄ¿‰¾š¶¦

˜”§¨”¹ƒ·í°¹Žƒí¯ƒ¸Ž¹±¡

™•¦©•¸‚¶ì‘±¸‚쮂¹¸œ° 

š–¥ª–»µï’²»Œï­ºŒ»Ÿ³£

›—¤«—º€´î“³º€î¬€»ºž²¢

„ˆ»´ˆ¥Ÿ«ñŒ¬¥’Ÿñ³Ÿ¤’¥­½

…‰ºµ‰¤žªð­¤“žð²ž¥“¤€¬¼

†Š¹¶Š§©óŽ®§ó±¦§ƒ¯¿

‡‹¸·‹¦œ¨ò¯¦‘œò°œ§‘¦‚®¾

€Œ¿°Œ¡›¯õˆ¨¡–›õ·› –¡…©¹

¾± š®ô‰© —šô¶š¡— „¨¸

‚޽²Ž£™­÷Šª£”™÷µ™¢”£‡«»

ƒ¼³¢˜¬ö‹«¢•˜ö´˜£•¢†ªº

Œ€³¼€­—£ù„¤­š—ù»—¬š­‰¥µ

²½¬–¢ø…¥¬›–øº–­›¬ˆ¤´

Ž‚±¾‚¯•¡û†¦¯˜•û¹•®˜¯‹§·

ƒ°¿ƒ®” ú‡§®™”ú¸”¯™®Š¦¶

ˆ„·¸„©“§ý€ ©ž“ý¿“¨ž©¡±

‰…¶¹…¨’¦ü¡¨Ÿ’ü¾’©Ÿ¨Œ °

Іµº†«‘¥ÿ‚¢«œ‘ÿ½‘ªœ«£³

‹‡´»‡ª¤þƒ£ªþ¼«ªŽ¢²

´¸‹„¸•¯›Á¼œ•¢¯Áƒ¯”¢•±

µ¹Š…¹”®šÀ½”£®À‚®•£”°œŒ

¶º‰†º—­™Ã¾ž— ­Ã­– —³Ÿ

·»ˆ‡»–¬˜Â¿Ÿ–¡¬Â€¬—¡–²žŽ

°¼€¼‘«ŸÅ¸˜‘¦«Å‡«¦‘µ™‰

±½Ž½ªžÄ¹™§ªÄ†ª‘§´˜ˆ

²¾‚¾“©Çºš“¤©Ç…©’¤“·›‹

³¿Œƒ¿’¨œÆ»›’¥¨Æ„¨“¥’¶šŠ

¼°ƒŒ°§“É´”ª§É‹§œª¹•…

½±‚±œ¦’ȵ•œ«¦ÈЦ«œ¸”„

¾²Ž²Ÿ¥‘˶–Ÿ¨¥Ë‰¥ž¨Ÿ»—‡

¿³€³ž¤Ê·—ž©¤Êˆ¤Ÿ©žº–†

¸´‡ˆ´™£—Ͱ™®£Í£˜®™½‘

¹µ†‰µ˜¢–̱‘˜¯¢ÌŽ¢™¯˜¼€

º¶…ж›¡•ϲ’›¬¡Ï¡š¬›¿“ƒ

»·„‹·š ”γ“š­ ÎŒ ›­š¾’‚

¤¨›”¨…¿‹Ñ¬Œ…²¿Ñ“¿„²…¡

¥©š•©„¾ŠÐ­„³¾Ð’¾…³„ Œœ

¦ª™–ª‡½‰Ó®Ž‡°½Ó‘½†°‡£Ÿ

§«˜—«†¼ˆÒ¯†±¼Ò¼‡±†¢Žž

 ¬Ÿ¬»Õ¨ˆ¶»Õ—»€¶¥‰™

¡­ž‘­€ºŽÔ©‰€·ºÔ–º·€¤ˆ˜

¢®’®ƒ¹×ªŠƒ´¹×•¹‚´ƒ§‹›

£¯œ“¯‚¸ŒÖ«‹‚µ¸Ö”¸ƒµ‚¦Šš

¬ “œ ·ƒÙ¤„º·Ù›·Œº©…•

­¡’¡Œ¶‚Ø¥…Œ»¶Øš¶»Œ¨„”

®¢‘ž¢µÛ¦†¸µÛ™µŽ¸«‡—

¯£Ÿ£Ž´€Ú§‡Ž¹´Ú˜´¹Žª†–

¨¤—˜¤‰³‡Ý €‰¾³ÝŸ³ˆ¾‰­‘

©¥–™¥ˆ²†Ü¡ˆ¿²Üž²‰¿ˆ¬€

ª¦•𦋱…ߢ‚‹¼±ß±Š¼‹¯ƒ“

«§”›§Š°„Þ£ƒŠ½°Þœ°‹½Š®‚’


Process finished with exit code 0

이중 출력 형식과 일치하는 DH{tHe_k1LleR_1s_dReAm}가 flag이다.