<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Reversing on My Life</title><link>https://dig06161.github.io/tags/reversing/</link><description>Recent content in Reversing on My Life</description><generator>Hugo -- 0.145.0</generator><language>ko-kr</language><lastBuildDate>Wed, 31 May 2023 09:00:00 +0900</lastBuildDate><atom:link href="https://dig06161.github.io/tags/reversing/index.xml" rel="self" type="application/rss+xml"/><item><title>[Dreamhack] REV Small Counter</title><link>https://dig06161.github.io/2023/05/31/dreamhack-rev-Small_Counter/</link><pubDate>Wed, 31 May 2023 09:00:00 +0900</pubDate><guid>https://dig06161.github.io/2023/05/31/dreamhack-rev-Small_Counter/</guid><description>드림핵 리버싱 Small Counter 문제풀이</description><content:encoded><![CDATA[<p>이번 문제는 Dreamhack CTF Season 3 Round #4 (🌱Div2)에 출제된 리버싱 문제이다. 오랜만에 풀어보는 리버싱 문제인데, 리눅스 기반 ELF 바이너리다. 일단 실행시켜보자.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">root</span><span class="err">@</span><span class="n">dig06161</span><span class="o">-</span><span class="k">virtual</span><span class="o">-</span><span class="nl">machine</span><span class="p">:</span><span class="o">/</span><span class="n">home</span><span class="o">/</span><span class="n">dig06161</span><span class="o">/</span><span class="n">file</span><span class="o">/</span><span class="n">dreamhack</span><span class="o">/</span><span class="n">Small_Counter</span><span class="err">#</span> <span class="p">.</span><span class="o">/</span><span class="n">chall</span>
</span></span><span class="line"><span class="cl"><span class="o">---</span><span class="n">Counter</span><span class="o">---</span>
</span></span><span class="line"><span class="cl"><span class="mi">10</span>
</span></span><span class="line"><span class="cl"><span class="mi">9</span>
</span></span><span class="line"><span class="cl"><span class="mi">8</span>
</span></span><span class="line"><span class="cl"><span class="mi">7</span>
</span></span><span class="line"><span class="cl"><span class="mi">6</span>
</span></span><span class="line"><span class="cl"><span class="mi">5</span>
</span></span><span class="line"><span class="cl"><span class="mi">4</span>
</span></span><span class="line"><span class="cl"><span class="mi">3</span>
</span></span><span class="line"><span class="cl"><span class="mi">2</span>
</span></span><span class="line"><span class="cl"><span class="mi">1</span>
</span></span><span class="line"><span class="cl"><span class="o">---</span><span class="n">END</span><span class="o">---</span>
</span></span><span class="line"><span class="cl"><span class="n">root</span><span class="err">@</span><span class="n">dig06161</span><span class="o">-</span><span class="k">virtual</span><span class="o">-</span><span class="nl">machine</span><span class="p">:</span><span class="o">/</span><span class="n">home</span><span class="o">/</span><span class="n">dig06161</span><span class="o">/</span><span class="n">file</span><span class="o">/</span><span class="n">dreamhack</span><span class="o">/</span><span class="n">Small_Counter</span><span class="err">#</span> 
</span></span></code></pre></div><p>10부터 1까지 출력한다. 여기서 flag를 출력하는 부분을 찾아 실행해야 할 것 같다. 우선  ghidra를 통해 바이너리를 열어보자. main함수의 어셈블리와 디컴파일 코드는 다음과 같다.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="mh">0x0000555555555494</span> <span class="o">&lt;+</span><span class="mi">0</span><span class="o">&gt;:</span>     <span class="n">endbr64</span> 
</span></span><span class="line"><span class="cl">   <span class="mh">0x0000555555555498</span> <span class="o">&lt;+</span><span class="mi">4</span><span class="o">&gt;:</span>     <span class="n">push</span>   <span class="n">rbp</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x0000555555555499</span> <span class="o">&lt;+</span><span class="mi">5</span><span class="o">&gt;:</span>     <span class="n">mov</span>    <span class="n">rbp</span><span class="p">,</span><span class="n">rsp</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x000055555555549c</span> <span class="o">&lt;+</span><span class="mi">8</span><span class="o">&gt;:</span>     <span class="n">sub</span>    <span class="n">rsp</span><span class="p">,</span><span class="mh">0xf0</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555554a3</span> <span class="o">&lt;+</span><span class="mi">15</span><span class="o">&gt;:</span>    <span class="n">mov</span>    <span class="n">DWORD</span> <span class="n">PTR</span> <span class="p">[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0x4</span><span class="p">],</span><span class="mh">0x0</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555554aa</span> <span class="o">&lt;+</span><span class="mi">22</span><span class="o">&gt;:</span>    <span class="n">lea</span>    <span class="n">rax</span><span class="p">,[</span><span class="n">rip</span><span class="o">+</span><span class="mh">0xb53</span><span class="p">]</span>        <span class="err">#</span> <span class="mh">0x555555556004</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555554b1</span> <span class="o">&lt;+</span><span class="mi">29</span><span class="o">&gt;:</span>    <span class="n">mov</span>    <span class="n">rdi</span><span class="p">,</span><span class="n">rax</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555554b4</span> <span class="o">&lt;+</span><span class="mi">32</span><span class="o">&gt;:</span>    <span class="n">call</span>   <span class="mh">0x555555555090</span> <span class="o">&lt;</span><span class="n">puts</span><span class="err">@</span><span class="n">plt</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555554b9</span> <span class="o">&lt;+</span><span class="mi">37</span><span class="o">&gt;:</span>    <span class="n">mov</span>    <span class="n">DWORD</span> <span class="n">PTR</span> <span class="p">[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0x4</span><span class="p">],</span><span class="mh">0xa</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555554c0</span> <span class="o">&lt;+</span><span class="mi">44</span><span class="o">&gt;:</span>    <span class="n">jmp</span>    <span class="mh">0x5555555555a0</span> <span class="o">&lt;</span><span class="n">main</span><span class="o">+</span><span class="mi">268</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555554c5</span> <span class="o">&lt;+</span><span class="mi">49</span><span class="o">&gt;:</span>    <span class="n">mov</span>    <span class="n">eax</span><span class="p">,</span><span class="n">DWORD</span> <span class="n">PTR</span> <span class="p">[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0x4</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555554c8</span> <span class="o">&lt;+</span><span class="mi">52</span><span class="o">&gt;:</span>    <span class="n">mov</span>    <span class="n">esi</span><span class="p">,</span><span class="n">eax</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555554ca</span> <span class="o">&lt;+</span><span class="mi">54</span><span class="o">&gt;:</span>    <span class="n">lea</span>    <span class="n">rax</span><span class="p">,[</span><span class="n">rip</span><span class="o">+</span><span class="mh">0xb41</span><span class="p">]</span>        <span class="err">#</span> <span class="mh">0x555555556012</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555554d1</span> <span class="o">&lt;+</span><span class="mi">61</span><span class="o">&gt;:</span>    <span class="n">mov</span>    <span class="n">rdi</span><span class="p">,</span><span class="n">rax</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555554d4</span> <span class="o">&lt;+</span><span class="mi">64</span><span class="o">&gt;:</span>    <span class="n">mov</span>    <span class="n">eax</span><span class="p">,</span><span class="mh">0x0</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555554d9</span> <span class="o">&lt;+</span><span class="mi">69</span><span class="o">&gt;:</span>    <span class="n">call</span>   <span class="mh">0x5555555550b0</span> <span class="o">&lt;</span><span class="n">printf</span><span class="err">@</span><span class="n">plt</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555554de</span> <span class="o">&lt;+</span><span class="mi">74</span><span class="o">&gt;:</span>    <span class="n">cmp</span>    <span class="n">DWORD</span> <span class="n">PTR</span> <span class="p">[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0x4</span><span class="p">],</span><span class="mh">0x3</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555554e2</span> <span class="o">&lt;+</span><span class="mi">78</span><span class="o">&gt;:</span>    <span class="n">jne</span>    <span class="mh">0x55555555559c</span> <span class="o">&lt;</span><span class="n">main</span><span class="o">+</span><span class="mi">264</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555554e8</span> <span class="o">&lt;+</span><span class="mi">84</span><span class="o">&gt;:</span>    <span class="n">movabs</span> <span class="n">rax</span><span class="p">,</span><span class="mh">0x38383830357b4d49</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555554f2</span> <span class="o">&lt;+</span><span class="mi">94</span><span class="o">&gt;:</span>    <span class="n">movabs</span> <span class="n">rdx</span><span class="p">,</span><span class="mh">0x6a37386a32336a39</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555554fc</span> <span class="o">&lt;+</span><span class="mi">104</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">QWORD</span> <span class="n">PTR</span> <span class="p">[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0xf0</span><span class="p">],</span><span class="n">rax</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x0000555555555503</span> <span class="o">&lt;+</span><span class="mi">111</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">QWORD</span> <span class="n">PTR</span> <span class="p">[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0xe8</span><span class="p">],</span><span class="n">rdx</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x000055555555550a</span> <span class="o">&lt;+</span><span class="mi">118</span><span class="o">&gt;:</span>   <span class="n">movabs</span> <span class="n">rax</span><span class="p">,</span><span class="mh">0x3035363435676a39</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x0000555555555514</span> <span class="o">&lt;+</span><span class="mi">128</span><span class="o">&gt;:</span>   <span class="n">movabs</span> <span class="n">rdx</span><span class="p">,</span><span class="mh">0x6a68383234303438</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x000055555555551e</span> <span class="o">&lt;+</span><span class="mi">138</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">QWORD</span> <span class="n">PTR</span> <span class="p">[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0xe0</span><span class="p">],</span><span class="n">rax</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x0000555555555525</span> <span class="o">&lt;+</span><span class="mi">145</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">QWORD</span> <span class="n">PTR</span> <span class="p">[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0xd8</span><span class="p">],</span><span class="n">rdx</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x000055555555552c</span> <span class="o">&lt;+</span><span class="mi">152</span><span class="o">&gt;:</span>   <span class="n">movabs</span> <span class="n">rax</span><span class="p">,</span><span class="mh">0x6838306969326968</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x0000555555555536</span> <span class="o">&lt;+</span><span class="mi">162</span><span class="o">&gt;:</span>   <span class="n">movabs</span> <span class="n">rdx</span><span class="p">,</span><span class="mh">0x3833356a68693437</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x0000555555555540</span> <span class="o">&lt;+</span><span class="mi">172</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">QWORD</span> <span class="n">PTR</span> <span class="p">[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0xd0</span><span class="p">],</span><span class="n">rax</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x0000555555555547</span> <span class="o">&lt;+</span><span class="mi">179</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">QWORD</span> <span class="n">PTR</span> <span class="p">[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0xc8</span><span class="p">],</span><span class="n">rdx</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x000055555555554e</span> <span class="o">&lt;+</span><span class="mi">186</span><span class="o">&gt;:</span>   <span class="n">movabs</span> <span class="n">rax</span><span class="p">,</span><span class="mh">0x3667376a33343568</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x0000555555555558</span> <span class="o">&lt;+</span><span class="mi">196</span><span class="o">&gt;:</span>   <span class="n">movabs</span> <span class="n">rdx</span><span class="p">,</span><span class="mh">0x68696a386b6a356b</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x0000555555555562</span> <span class="o">&lt;+</span><span class="mi">206</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">QWORD</span> <span class="n">PTR</span> <span class="p">[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0xc0</span><span class="p">],</span><span class="n">rax</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x0000555555555569</span> <span class="o">&lt;+</span><span class="mi">213</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">QWORD</span> <span class="n">PTR</span> <span class="p">[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0xb8</span><span class="p">],</span><span class="n">rdx</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x0000555555555570</span> <span class="o">&lt;+</span><span class="mi">220</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">DWORD</span> <span class="n">PTR</span> <span class="p">[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0xb0</span><span class="p">],</span><span class="mh">0x7d663232</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x000055555555557a</span> <span class="o">&lt;+</span><span class="mi">230</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">BYTE</span> <span class="n">PTR</span> <span class="p">[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0xac</span><span class="p">],</span><span class="mh">0x0</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x0000555555555581</span> <span class="o">&lt;+</span><span class="mi">237</span><span class="o">&gt;:</span>   <span class="n">lea</span>    <span class="n">rcx</span><span class="p">,[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0xf0</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x0000555555555588</span> <span class="o">&lt;+</span><span class="mi">244</span><span class="o">&gt;:</span>   <span class="n">lea</span>    <span class="n">rax</span><span class="p">,[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0x50</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x000055555555558c</span> <span class="o">&lt;+</span><span class="mi">248</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">edx</span><span class="p">,</span><span class="mh">0x45</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x0000555555555591</span> <span class="o">&lt;+</span><span class="mi">253</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">rsi</span><span class="p">,</span><span class="n">rcx</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x0000555555555594</span> <span class="o">&lt;+</span><span class="mi">256</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">rdi</span><span class="p">,</span><span class="n">rax</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x0000555555555597</span> <span class="o">&lt;+</span><span class="mi">259</span><span class="o">&gt;:</span>   <span class="n">call</span>   <span class="mh">0x5555555550c0</span> <span class="o">&lt;</span><span class="n">memcpy</span><span class="err">@</span><span class="n">plt</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x000055555555559c</span> <span class="o">&lt;+</span><span class="mi">264</span><span class="o">&gt;:</span>   <span class="n">sub</span>    <span class="n">DWORD</span> <span class="n">PTR</span> <span class="p">[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0x4</span><span class="p">],</span><span class="mh">0x1</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555555a0</span> <span class="o">&lt;+</span><span class="mi">268</span><span class="o">&gt;:</span>   <span class="n">cmp</span>    <span class="n">DWORD</span> <span class="n">PTR</span> <span class="p">[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0x4</span><span class="p">],</span><span class="mh">0x0</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555555a4</span> <span class="o">&lt;+</span><span class="mi">272</span><span class="o">&gt;:</span>   <span class="n">jg</span>     <span class="mh">0x5555555554c5</span> <span class="o">&lt;</span><span class="n">main</span><span class="o">+</span><span class="mi">49</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555555aa</span> <span class="o">&lt;+</span><span class="mi">278</span><span class="o">&gt;:</span>   <span class="n">cmp</span>    <span class="n">DWORD</span> <span class="n">PTR</span> <span class="p">[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0x4</span><span class="p">],</span><span class="mh">0x5</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555555ae</span> <span class="o">&lt;+</span><span class="mi">282</span><span class="o">&gt;:</span>   <span class="n">jne</span>    <span class="mh">0x5555555555fe</span> <span class="o">&lt;</span><span class="n">main</span><span class="o">+</span><span class="mi">362</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555555b0</span> <span class="o">&lt;+</span><span class="mi">284</span><span class="o">&gt;:</span>   <span class="n">lea</span>    <span class="n">rax</span><span class="p">,[</span><span class="n">rip</span><span class="o">+</span><span class="mh">0xa5f</span><span class="p">]</span>        <span class="err">#</span> <span class="mh">0x555555556016</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555555b7</span> <span class="o">&lt;+</span><span class="mi">291</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">rdi</span><span class="p">,</span><span class="n">rax</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555555ba</span> <span class="o">&lt;+</span><span class="mi">294</span><span class="o">&gt;:</span>   <span class="n">call</span>   <span class="mh">0x555555555090</span> <span class="o">&lt;</span><span class="n">puts</span><span class="err">@</span><span class="n">plt</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555555bf</span> <span class="o">&lt;+</span><span class="mi">299</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">eax</span><span class="p">,</span><span class="n">DWORD</span> <span class="n">PTR</span> <span class="p">[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0x4</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555555c2</span> <span class="o">&lt;+</span><span class="mi">302</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">DWORD</span> <span class="n">PTR</span> <span class="p">[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0x8</span><span class="p">],</span><span class="n">eax</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555555c5</span> <span class="o">&lt;+</span><span class="mi">305</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">edx</span><span class="p">,</span><span class="n">DWORD</span> <span class="n">PTR</span> <span class="p">[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0x8</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555555c8</span> <span class="o">&lt;+</span><span class="mi">308</span><span class="o">&gt;:</span>   <span class="n">lea</span>    <span class="n">rcx</span><span class="p">,[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0xa0</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555555cf</span> <span class="o">&lt;+</span><span class="mi">315</span><span class="o">&gt;:</span>   <span class="n">lea</span>    <span class="n">rax</span><span class="p">,[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0x50</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555555d3</span> <span class="o">&lt;+</span><span class="mi">319</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">rsi</span><span class="p">,</span><span class="n">rcx</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555555d6</span> <span class="o">&lt;+</span><span class="mi">322</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">rdi</span><span class="p">,</span><span class="n">rax</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555555d9</span> <span class="o">&lt;+</span><span class="mi">325</span><span class="o">&gt;:</span>   <span class="n">call</span>   <span class="mh">0x5555555551c9</span> <span class="o">&lt;</span><span class="n">flag_gen</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555555de</span> <span class="o">&lt;+</span><span class="mi">330</span><span class="o">&gt;:</span>   <span class="n">lea</span>    <span class="n">rax</span><span class="p">,[</span><span class="n">rbp</span><span class="o">-</span><span class="mh">0xa0</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555555e5</span> <span class="o">&lt;+</span><span class="mi">337</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">rsi</span><span class="p">,</span><span class="n">rax</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555555e8</span> <span class="o">&lt;+</span><span class="mi">340</span><span class="o">&gt;:</span>   <span class="n">lea</span>    <span class="n">rax</span><span class="p">,[</span><span class="n">rip</span><span class="o">+</span><span class="mh">0xa2d</span><span class="p">]</span>        <span class="err">#</span> <span class="mh">0x55555555601c</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555555ef</span> <span class="o">&lt;+</span><span class="mi">347</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">rdi</span><span class="p">,</span><span class="n">rax</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555555f2</span> <span class="o">&lt;+</span><span class="mi">350</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">eax</span><span class="p">,</span><span class="mh">0x0</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555555f7</span> <span class="o">&lt;+</span><span class="mi">355</span><span class="o">&gt;:</span>   <span class="n">call</span>   <span class="mh">0x5555555550b0</span> <span class="o">&lt;</span><span class="n">printf</span><span class="err">@</span><span class="n">plt</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555555fc</span> <span class="o">&lt;+</span><span class="mi">360</span><span class="o">&gt;:</span>   <span class="n">jmp</span>    <span class="mh">0x55555555560d</span> <span class="o">&lt;</span><span class="n">main</span><span class="o">+</span><span class="mi">377</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x00005555555555fe</span> <span class="o">&lt;+</span><span class="mi">362</span><span class="o">&gt;:</span>   <span class="n">lea</span>    <span class="n">rax</span><span class="p">,[</span><span class="n">rip</span><span class="o">+</span><span class="mh">0xa1c</span><span class="p">]</span>        <span class="err">#</span> <span class="mh">0x555555556021</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x0000555555555605</span> <span class="o">&lt;+</span><span class="mi">369</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">rdi</span><span class="p">,</span><span class="n">rax</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x0000555555555608</span> <span class="o">&lt;+</span><span class="mi">372</span><span class="o">&gt;:</span>   <span class="n">call</span>   <span class="mh">0x555555555090</span> <span class="o">&lt;</span><span class="n">puts</span><span class="err">@</span><span class="n">plt</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x000055555555560d</span> <span class="o">&lt;+</span><span class="mi">377</span><span class="o">&gt;:</span>   <span class="n">mov</span>    <span class="n">eax</span><span class="p">,</span><span class="mh">0x0</span>
</span></span><span class="line"><span class="cl">   <span class="mh">0x0000555555555612</span> <span class="o">&lt;+</span><span class="mi">382</span><span class="o">&gt;:</span>   <span class="n">leave</span>  
</span></span><span class="line"><span class="cl">   <span class="mh">0x0000555555555613</span> <span class="o">&lt;+</span><span class="mi">383</span><span class="o">&gt;:</span>   <span class="n">ret</span> 
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">undefined8</span> <span class="nf">main</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="n">undefined8</span> <span class="n">local_f8</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">undefined8</span> <span class="n">local_f0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">undefined8</span> <span class="n">local_e8</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">undefined8</span> <span class="n">local_e0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">undefined8</span> <span class="n">local_d8</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">undefined8</span> <span class="n">local_d0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">undefined8</span> <span class="n">local_c8</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">undefined8</span> <span class="n">local_c0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">undefined4</span> <span class="n">local_b8</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">undefined</span> <span class="n">local_b4</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">undefined</span> <span class="n">local_a8</span> <span class="p">[</span><span class="mi">80</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">  <span class="kt">char</span> <span class="n">local_58</span> <span class="p">[</span><span class="mi">72</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">  <span class="n">uint</span> <span class="n">local_10</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">uint</span> <span class="n">local_c</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  
</span></span><span class="line"><span class="cl">  <span class="n">local_c</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">puts</span><span class="p">(</span><span class="s">&#34;---Counter---&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="k">for</span> <span class="p">(</span><span class="n">local_c</span> <span class="o">=</span> <span class="mi">10</span><span class="p">;</span> <span class="mi">0</span> <span class="o">&lt;</span> <span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="n">local_c</span><span class="p">;</span> <span class="n">local_c</span> <span class="o">=</span> <span class="n">local_c</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">printf</span><span class="p">(</span><span class="s">&#34;%d</span><span class="se">\n</span><span class="s">&#34;</span><span class="p">,(</span><span class="n">ulong</span><span class="p">)</span><span class="n">local_c</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="n">local_c</span> <span class="o">==</span> <span class="mi">3</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="n">local_f8</span> <span class="o">=</span> <span class="mh">0x38383830357b4d49</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="n">local_f0</span> <span class="o">=</span> <span class="mh">0x6a37386a32336a39</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="n">local_e8</span> <span class="o">=</span> <span class="mh">0x3035363435676a39</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="n">local_e0</span> <span class="o">=</span> <span class="mh">0x6a68383234303438</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="n">local_d8</span> <span class="o">=</span> <span class="mh">0x6838306969326968</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="n">local_d0</span> <span class="o">=</span> <span class="mh">0x3833356a68693437</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="n">local_c8</span> <span class="o">=</span> <span class="mh">0x3667376a33343568</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="n">local_c0</span> <span class="o">=</span> <span class="mh">0x68696a386b6a356b</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="n">local_b8</span> <span class="o">=</span> <span class="mh">0x7d663232</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="n">local_b4</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="n">memcpy</span><span class="p">(</span><span class="n">local_58</span><span class="p">,</span><span class="o">&amp;</span><span class="n">local_f8</span><span class="p">,</span><span class="mh">0x45</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="k">if</span> <span class="p">(</span><span class="n">local_c</span> <span class="o">==</span> <span class="mi">5</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">puts</span><span class="p">(</span><span class="s">&#34;Nice!&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">local_10</span> <span class="o">=</span> <span class="n">local_c</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">flag_gen</span><span class="p">(</span><span class="n">local_58</span><span class="p">,(</span><span class="kt">long</span><span class="p">)</span><span class="n">local_a8</span><span class="p">,</span><span class="n">local_c</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">printf</span><span class="p">(</span><span class="s">&#34;</span><span class="se">\n</span><span class="s">%s</span><span class="se">\n</span><span class="s">&#34;</span><span class="p">,</span><span class="n">local_a8</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">puts</span><span class="p">(</span><span class="s">&#34;---END---&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>코드를 분석해보면 플레그를 만들어주는 함수는 flag_gen 함수이고 for 가 동작하는 반복문과 별개의 코드로 if가 동작해야지 플래그를 출력한다. if가 동작하기 위해서는 반복문이 끝난 후 local_c가 5를 가지고 있어야 동작한다. 다만 반복문이 종료되면 local_c가 0을 가지게 된다. 따라서 gdb를 통해 bp를 반복분이 끝나는 시점에 걸고 local_c 값을 강제로 5로 바꾸면 풀 수 있을 것이다.</p>
<p>다만 바이너리에 bp를 걸면 좀 이상하게 동작한다. PIE가 걸려있어 바이너리를 실행할 때 마다 주소값이 바뀌는 문제가 있다. gdb에서는 디버깅의 편의를 위해 PIE 보호기법이 걸린 바이너리는 코드영역 주소값을 0x555555555000로 가진다. 따라서 한번 실행한 후 main함수를 disass 하면 0x0000555555555494주소를 가진다. 이 부분에 bp를 걸고 이후 main+278부분에 bp를 걸어주면 중단지점을 설정할 수 있다. 이후 set 기능을 이용해 rbp - 4 부분을 5로 쓰면 플래그를 얻을 수 있다.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">pwndbg</span><span class="o">&gt;</span> <span class="err">$</span><span class="n">rbp</span><span class="o">-</span><span class="mi">4</span>
</span></span><span class="line"><span class="cl"><span class="n">Undefined</span> <span class="nl">command</span><span class="p">:</span> <span class="s">&#34;$rbp-4&#34;</span><span class="p">.</span>  <span class="n">Try</span> <span class="s">&#34;help&#34;</span><span class="p">.</span>
</span></span><span class="line"><span class="cl"><span class="n">pwndbg</span><span class="o">&gt;</span> <span class="n">p</span> <span class="err">$</span><span class="n">rbp</span><span class="o">-</span><span class="mi">4</span>
</span></span><span class="line"><span class="cl"><span class="err">$</span><span class="mi">1</span> <span class="o">=</span> <span class="p">(</span><span class="kt">void</span> <span class="o">*</span><span class="p">)</span> <span class="mh">0x7fffffffe32c</span>
</span></span><span class="line"><span class="cl"><span class="n">pwndbg</span><span class="o">&gt;</span> <span class="n">x</span><span class="o">/</span><span class="n">x</span> <span class="mh">0x7fffffffe32c</span>
</span></span><span class="line"><span class="cl"><span class="mh">0x7fffffffe32c</span><span class="o">:</span> <span class="mh">0x00000000</span>
</span></span><span class="line"><span class="cl"><span class="n">pwndbg</span><span class="o">&gt;</span> <span class="n">set</span> <span class="o">*</span><span class="mh">0x7fffffffe32c</span><span class="o">=</span><span class="mi">5</span>
</span></span><span class="line"><span class="cl"><span class="n">pwndbg</span><span class="o">&gt;</span> <span class="n">x</span><span class="o">/</span><span class="n">x</span> <span class="mh">0x7fffffffe32c</span>
</span></span><span class="line"><span class="cl"><span class="mh">0x7fffffffe32c</span><span class="o">:</span> <span class="mh">0x00000005</span>
</span></span><span class="line"><span class="cl"><span class="n">pwndbg</span><span class="o">&gt;</span> <span class="n">c</span>
</span></span><span class="line"><span class="cl"><span class="n">Continuing</span><span class="p">.</span>
</span></span><span class="line"><span class="cl"><span class="n">Nice</span><span class="o">!</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">DH</span><span class="p">{</span><span class="mf">389998e56</span><span class="n">e90e8eb34238948469ce중략</span><span class="p">...}</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="n">Inferior</span> <span class="mi">1</span> <span class="p">(</span><span class="n">process</span> <span class="mi">48876</span><span class="p">)</span> <span class="n">exited</span> <span class="n">normally</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">pwndbg</span><span class="o">&gt;</span> 
</span></span></code></pre></div>]]></content:encoded></item><item><title>Dreamhack rev-basic-7 문제풀이</title><link>https://dig06161.github.io/2022/05/01/dreamhack-rev-basic-7/</link><pubDate>Sun, 01 May 2022 06:30:00 +0900</pubDate><guid>https://dig06161.github.io/2022/05/01/dreamhack-rev-basic-7/</guid><description>&lt;p>이번 문제는 드림핵 rev-basic-7 리버싱 문제를 풀어보자.&lt;/p>
&lt;p>우선 basic-6과 동일하게 문자열을 입력 받고 정답이면 Correct, 아니면 Wrong을 출력한다. 바이너리 실행결과는 다음과 같다.&lt;/p>
&lt;p>&lt;img loading="lazy" src="https://dig06161.github.io/img/dreamhack-rev-basic-7/binary_start.png" alt="binary_start" />
&lt;/p>
&lt;p>우선 가장 먼저 해야할 일은 main함수를 찾는것이다. 윈도우 바이너리인 PE파일의 헤더 구조를 보면 매우 많은 정보들이 들어있다. 그것들 중 리버싱을 할떄 중점으로 봐야할 부분은 .text영역이다. 실질적으로 코드가 컴파일되어 저장되는 영역으로 대부분의 main함수는 이 영역 시작 지점과 인접하게 존재한다. 컴파일러의 보안 미티게이션의 추가로 메모리 주소 랜덤화가 자동으로 걸려 0x401000주소에 main이 들어가는 경우는 이젠 없을 것이다.&lt;/p></description><content:encoded><![CDATA[<p>이번 문제는 드림핵 rev-basic-7 리버싱 문제를 풀어보자.</p>
<p>우선 basic-6과 동일하게 문자열을 입력 받고 정답이면 Correct, 아니면 Wrong을 출력한다. 바이너리 실행결과는 다음과 같다.</p>
<p><img loading="lazy" src="/img/dreamhack-rev-basic-7/binary_start.png" alt="binary_start"  />
</p>
<p>우선 가장 먼저 해야할 일은 main함수를 찾는것이다. 윈도우 바이너리인 PE파일의 헤더 구조를 보면 매우 많은 정보들이 들어있다. 그것들 중 리버싱을 할떄 중점으로 봐야할 부분은 .text영역이다. 실질적으로 코드가 컴파일되어 저장되는 영역으로 대부분의 main함수는 이 영역 시작 지점과 인접하게 존재한다. 컴파일러의 보안 미티게이션의 추가로 메모리 주소 랜덤화가 자동으로 걸려 0x401000주소에 main이 들어가는 경우는 이젠 없을 것이다.</p>
<p>바이너리는 input : 과 Wrong 이라는 문자열을 출력했다. 따라서 문자열 검사를 통해 해당 문자열이 사용되는 지점을 찾아 BP를 걸어준다.</p>
<p><img loading="lazy" src="/img/dreamhack-rev-basic-7/main_asm.png" alt="main_asm"  />
</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21090</span> <span class="o">|</span> <span class="mi">40</span><span class="o">:</span><span class="mi">57</span>                    <span class="o">|</span> <span class="n">push</span> <span class="n">rdi</span>                                <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21092</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">81</span><span class="n">EC</span> <span class="mi">30010000</span>         <span class="o">|</span> <span class="n">sub</span> <span class="n">rsp</span><span class="p">,</span><span class="mi">130</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21099</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">B05</span> <span class="mf">881F</span><span class="mo">0000</span>         <span class="o">|</span> <span class="n">mov</span> <span class="n">rax</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="mf">7FF</span><span class="mi">7</span><span class="n">CEE23028</span><span class="p">]</span>     <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210A0</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">33</span><span class="n">C4</span>                  <span class="o">|</span> <span class="n">xor</span> <span class="n">rax</span><span class="p">,</span><span class="n">rsp</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210A3</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">898424</span> <span class="mi">20010000</span>       <span class="o">|</span> <span class="n">mov</span> <span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">120</span><span class="p">],</span><span class="n">rax</span>          <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210AB</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D4424</span> <span class="mi">20</span>             <span class="o">|</span> <span class="n">lea</span> <span class="n">rax</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">20</span><span class="p">]</span>           <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210B0</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">BF8</span>                  <span class="o">|</span> <span class="n">mov</span> <span class="n">rdi</span><span class="p">,</span><span class="n">rax</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210B3</span> <span class="o">|</span> <span class="mi">33</span><span class="n">C0</span>                     <span class="o">|</span> <span class="n">xor</span> <span class="n">eax</span><span class="p">,</span><span class="n">eax</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210B5</span> <span class="o">|</span> <span class="n">B9</span> <span class="mo">00010000</span>              <span class="o">|</span> <span class="n">mov</span> <span class="n">ecx</span><span class="p">,</span><span class="mi">100</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210BA</span> <span class="o">|</span> <span class="nl">F3</span><span class="p">:</span><span class="n">AA</span>                    <span class="o">|</span> <span class="n">rep</span> <span class="n">stosb</span>                               <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210BC</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D0D</span> <span class="mi">4</span><span class="n">D110000</span>         <span class="o">|</span> <span class="n">lea</span> <span class="n">rcx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="mf">7FF</span><span class="mi">7</span><span class="n">CEE22210</span><span class="p">]</span>     <span class="o">|</span> <span class="nl">rcx</span><span class="p">:</span><span class="s">&#34;asdf&#34;</span><span class="p">,</span> <span class="mf">00007FF</span><span class="mi">7</span><span class="nl">CEE22210</span><span class="p">:</span><span class="s">&#34;Input : &#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210C3</span> <span class="o">|</span> <span class="n">E8</span> <span class="mi">58000000</span>              <span class="o">|</span> <span class="n">call</span> <span class="n">chall7</span><span class="mf">.7F</span><span class="n">F7CEE21120</span>                <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210C8</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D5424</span> <span class="mi">20</span>             <span class="o">|</span> <span class="n">lea</span> <span class="n">rdx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">20</span><span class="p">]</span>           <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210CD</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D0D</span> <span class="mi">48110000</span>         <span class="o">|</span> <span class="n">lea</span> <span class="n">rcx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="mf">7FF</span><span class="mi">7</span><span class="n">CEE2221C</span><span class="p">]</span>     <span class="o">|</span> <span class="nl">rcx</span><span class="p">:</span><span class="s">&#34;asdf&#34;</span><span class="p">,</span> <span class="mf">00007FF</span><span class="mi">7</span><span class="nl">CEE2221C</span><span class="p">:</span><span class="s">&#34;%256s&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210D4</span> <span class="o">|</span> <span class="n">E8</span> <span class="n">D7000000</span>              <span class="o">|</span> <span class="n">call</span> <span class="n">chall7</span><span class="mf">.7F</span><span class="n">F7CEE211B0</span>                <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210D9</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D4C24</span> <span class="mi">20</span>             <span class="o">|</span> <span class="n">lea</span> <span class="n">rcx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">20</span><span class="p">]</span>           <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210DE</span> <span class="o">|</span> <span class="n">E8</span> <span class="mi">1</span><span class="n">DFFFFFF</span>              <span class="o">|</span> <span class="n">call</span> <span class="n">chall7</span><span class="mf">.7F</span><span class="n">F7CEE21000</span>                <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210E3</span> <span class="o">|</span> <span class="mi">85</span><span class="n">C0</span>                     <span class="o">|</span> <span class="n">test</span> <span class="n">eax</span><span class="p">,</span><span class="n">eax</span>                            <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210E5</span> <span class="o">|</span> <span class="mi">74</span> <span class="mf">0F</span>                    <span class="o">|</span> <span class="n">je</span> <span class="n">chall7</span><span class="mf">.7F</span><span class="n">F7CEE210F6</span>                  <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210E7</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D0D</span> <span class="mi">3</span><span class="n">A110000</span>         <span class="o">|</span> <span class="n">lea</span> <span class="n">rcx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="mf">7FF</span><span class="mi">7</span><span class="n">CEE22228</span><span class="p">]</span>     <span class="o">|</span> <span class="nl">rcx</span><span class="p">:</span><span class="s">&#34;asdf&#34;</span><span class="p">,</span> <span class="mf">00007FF</span><span class="mi">7</span><span class="nl">CEE22228</span><span class="p">:</span><span class="s">&#34;Correct&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210EE</span> <span class="o">|</span> <span class="n">FF15</span> <span class="mi">94100000</span>            <span class="o">|</span> <span class="n">call</span> <span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="o">&lt;&amp;</span><span class="n">puts</span><span class="o">&gt;</span><span class="p">]</span>             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210F4</span> <span class="o">|</span> <span class="n">EB</span> <span class="mi">0</span><span class="n">D</span>                    <span class="o">|</span> <span class="n">jmp</span> <span class="n">chall7</span><span class="mf">.7F</span><span class="n">F7CEE21103</span>                 <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210F6</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D0D</span> <span class="mi">33110000</span>         <span class="o">|</span> <span class="n">lea</span> <span class="n">rcx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="mf">7FF</span><span class="mi">7</span><span class="n">CEE22230</span><span class="p">]</span>     <span class="o">|</span> <span class="nl">rcx</span><span class="p">:</span><span class="s">&#34;asdf&#34;</span><span class="p">,</span> <span class="mf">00007FF</span><span class="mi">7</span><span class="nl">CEE22230</span><span class="p">:</span><span class="s">&#34;Wrong&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210FD</span> <span class="o">|</span> <span class="n">FF15</span> <span class="mi">85100000</span>            <span class="o">|</span> <span class="n">call</span> <span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="o">&lt;&amp;</span><span class="n">puts</span><span class="o">&gt;</span><span class="p">]</span>             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21103</span> <span class="o">|</span> <span class="mi">33</span><span class="n">C0</span>                     <span class="o">|</span> <span class="n">xor</span> <span class="n">eax</span><span class="p">,</span><span class="n">eax</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21105</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">B8C24</span> <span class="mi">20010000</span>       <span class="o">|</span> <span class="n">mov</span> <span class="n">rcx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">120</span><span class="p">]</span>          <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE2110D</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">33</span><span class="n">CC</span>                  <span class="o">|</span> <span class="n">xor</span> <span class="n">rcx</span><span class="p">,</span><span class="n">rsp</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21110</span> <span class="o">|</span> <span class="n">E8</span> <span class="n">AB010000</span>              <span class="o">|</span> <span class="n">call</span> <span class="n">chall7</span><span class="mf">.7F</span><span class="n">F7CEE212C0</span>                <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21115</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">81</span><span class="n">C4</span> <span class="mi">30010000</span>         <span class="o">|</span> <span class="n">add</span> <span class="n">rsp</span><span class="p">,</span><span class="mi">130</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE2111C</span> <span class="o">|</span> <span class="mf">5F</span>                       <span class="o">|</span> <span class="n">pop</span> <span class="n">rdi</span>                                 <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE2111D</span> <span class="o">|</span> <span class="n">C3</span>                       <span class="o">|</span> <span class="n">ret</span>                                     <span class="o">|</span>
</span></span></code></pre></div><p>해당 문제는 올바른 값을 입력하면 Corrent라는 문구가 출력되며 입력한 값이 flag가 되는 문제이다. 따라서 바이너리 역분석을 통해 적절한 입력값을 찾아야 한다.</p>
<p>우선 테스트 값으로 <code>aaaaaaaaaaa</code>라는 문자열을 입력하고 이를 검사하는 부분을 찾아야 한다. 어셈블리를 살펴보면</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210D9</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D4C24</span> <span class="mi">20</span>             <span class="o">|</span> <span class="n">lea</span> <span class="n">rcx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">20</span><span class="p">]</span>           <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210DE</span> <span class="o">|</span> <span class="n">E8</span> <span class="mi">1</span><span class="n">DFFFFFF</span>              <span class="o">|</span> <span class="n">call</span> <span class="n">chall7</span><span class="mf">.7F</span><span class="n">F7CEE21000</span>                <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210E3</span> <span class="o">|</span> <span class="mi">85</span><span class="n">C0</span>                     <span class="o">|</span> <span class="n">test</span> <span class="n">eax</span><span class="p">,</span><span class="n">eax</span>                            <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE210E5</span> <span class="o">|</span> <span class="mi">74</span> <span class="mf">0F</span>                    <span class="o">|</span> <span class="n">je</span> <span class="n">chall7</span><span class="mf">.7F</span><span class="n">F7CEE210F6</span>                  <span class="o">|</span>
</span></span></code></pre></div><p>위와 같은 부분이 존재한다. 함수를 Call하고 test를 통한 eax 초기화 후 je를 통해 분기하는 것을 알 수 있다. 따라서 Call 하는 chall7.7FF7CEE21000 부분이 문자열을 검사하는 곳이라고 추측할 수 있다.</p>
<p>해당 부분의 어셈블리는 다음과 같다.
<img loading="lazy" src="/img/dreamhack-rev-basic-7/input_cmp.png" alt="input_cmp"  />
</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21000</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">894</span><span class="n">C24</span> <span class="mi">08</span>             <span class="o">|</span> <span class="n">mov</span> <span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">8</span><span class="p">],</span><span class="n">rcx</span>            <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21005</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">83</span><span class="n">EC</span> <span class="mi">18</span>               <span class="o">|</span> <span class="n">sub</span> <span class="n">rsp</span><span class="p">,</span><span class="mi">18</span>                              <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21009</span> <span class="o">|</span> <span class="n">C70424</span> <span class="mo">00000000</span>          <span class="o">|</span> <span class="n">mov</span> <span class="n">dword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="p">],</span><span class="mi">0</span>                <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21010</span> <span class="o">|</span> <span class="n">EB</span> <span class="mi">08</span>                    <span class="o">|</span> <span class="n">jmp</span> <span class="n">chall7</span><span class="mf">.7F</span><span class="n">F7CEE2101A</span>                 <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21012</span> <span class="o">|</span> <span class="mi">8</span><span class="n">B0424</span>                   <span class="o">|</span> <span class="n">mov</span> <span class="n">eax</span><span class="p">,</span><span class="n">dword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="p">]</span>              <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21015</span> <span class="o">|</span> <span class="n">FFC0</span>                     <span class="o">|</span> <span class="n">inc</span> <span class="n">eax</span>                                 <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21017</span> <span class="o">|</span> <span class="mi">890424</span>                   <span class="o">|</span> <span class="n">mov</span> <span class="n">dword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="p">],</span><span class="n">eax</span>              <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE2101A</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">630424</span>                <span class="o">|</span> <span class="n">movsxd</span> <span class="n">rax</span><span class="p">,</span><span class="n">dword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="p">]</span>           <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE2101E</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mf">83F</span><span class="mi">8</span> <span class="mf">1F</span>               <span class="o">|</span> <span class="n">cmp</span> <span class="n">rax</span><span class="p">,</span><span class="mf">1F</span>                              <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21022</span> <span class="o">|</span> <span class="mi">73</span> <span class="mi">41</span>                    <span class="o">|</span> <span class="n">jae</span> <span class="n">chall7</span><span class="mf">.7F</span><span class="n">F7CEE21065</span>                 <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21024</span> <span class="o">|</span> <span class="mi">8</span><span class="n">B0424</span>                   <span class="o">|</span> <span class="n">mov</span> <span class="n">eax</span><span class="p">,</span><span class="n">dword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="p">]</span>              <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21027</span> <span class="o">|</span> <span class="mf">83E0</span> <span class="mo">07</span>                  <span class="o">|</span> <span class="n">and</span> <span class="n">eax</span><span class="p">,</span><span class="mi">7</span>                               <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE2102A</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">630</span><span class="n">C24</span>                <span class="o">|</span> <span class="n">movsxd</span> <span class="n">rcx</span><span class="p">,</span><span class="n">dword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="p">]</span>           <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE2102E</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">894</span><span class="n">C24</span> <span class="mi">08</span>             <span class="o">|</span> <span class="n">mov</span> <span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">8</span><span class="p">],</span><span class="n">rcx</span>            <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21033</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">B5424</span> <span class="mi">20</span>             <span class="o">|</span> <span class="n">mov</span> <span class="n">rdx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">20</span><span class="p">]</span>           <span class="o">|</span> <span class="p">[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">20</span><span class="p">]</span><span class="o">:</span><span class="s">&#34;aaaaaaaaaaa&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21038</span> <span class="o">|</span> <span class="mf">0F</span><span class="n">B6C8</span>                   <span class="o">|</span> <span class="n">movzx</span> <span class="n">ecx</span><span class="p">,</span><span class="n">al</span>                            <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE2103B</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">B4424</span> <span class="mi">08</span>             <span class="o">|</span> <span class="n">mov</span> <span class="n">rax</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">8</span><span class="p">]</span>            <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21040</span> <span class="o">|</span> <span class="mf">0F</span><span class="n">B60402</span>                 <span class="o">|</span> <span class="n">movzx</span> <span class="n">eax</span><span class="p">,</span><span class="n">byte</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="n">rdx</span><span class="o">+</span><span class="n">rax</span><span class="p">]</span>         <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21044</span> <span class="o">|</span> <span class="n">D2C0</span>                     <span class="o">|</span> <span class="n">rol</span> <span class="n">al</span><span class="p">,</span><span class="n">cl</span>                               <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21046</span> <span class="o">|</span> <span class="mf">0F</span><span class="n">B6C0</span>                   <span class="o">|</span> <span class="n">movzx</span> <span class="n">eax</span><span class="p">,</span><span class="n">al</span>                            <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21049</span> <span class="o">|</span> <span class="mi">330424</span>                   <span class="o">|</span> <span class="n">xor</span> <span class="n">eax</span><span class="p">,</span><span class="n">dword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="p">]</span>              <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE2104C</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">630</span><span class="n">C24</span>                <span class="o">|</span> <span class="n">movsxd</span> <span class="n">rcx</span><span class="p">,</span><span class="n">dword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="p">]</span>           <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21050</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D15</span> <span class="n">A91F0000</span>         <span class="o">|</span> <span class="n">lea</span> <span class="n">rdx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="mf">7FF</span><span class="mi">7</span><span class="n">CEE23000</span><span class="p">]</span>     <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21057</span> <span class="o">|</span> <span class="mf">0F</span><span class="n">B60C0A</span>                 <span class="o">|</span> <span class="n">movzx</span> <span class="n">ecx</span><span class="p">,</span><span class="n">byte</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="n">rdx</span><span class="o">+</span><span class="n">rcx</span><span class="p">]</span>         <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE2105B</span> <span class="o">|</span> <span class="mi">3</span><span class="n">BC1</span>                     <span class="o">|</span> <span class="n">cmp</span> <span class="n">eax</span><span class="p">,</span><span class="n">ecx</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE2105D</span> <span class="o">|</span> <span class="mi">74</span> <span class="mo">04</span>                    <span class="o">|</span> <span class="n">je</span> <span class="n">chall7</span><span class="mf">.7F</span><span class="n">F7CEE21063</span>                  <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE2105F</span> <span class="o">|</span> <span class="mi">33</span><span class="n">C0</span>                     <span class="o">|</span> <span class="n">xor</span> <span class="n">eax</span><span class="p">,</span><span class="n">eax</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21061</span> <span class="o">|</span> <span class="n">EB</span> <span class="mo">07</span>                    <span class="o">|</span> <span class="n">jmp</span> <span class="n">chall7</span><span class="mf">.7F</span><span class="n">F7CEE2106A</span>                 <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21063</span> <span class="o">|</span> <span class="n">EB</span> <span class="n">AD</span>                    <span class="o">|</span> <span class="n">jmp</span> <span class="n">chall7</span><span class="mf">.7F</span><span class="n">F7CEE21012</span>                 <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE21065</span> <span class="o">|</span> <span class="n">B8</span> <span class="mo">01000000</span>              <span class="o">|</span> <span class="n">mov</span> <span class="n">eax</span><span class="p">,</span><span class="mi">1</span>                               <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE2106A</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">83</span><span class="n">C4</span> <span class="mi">18</span>               <span class="o">|</span> <span class="n">add</span> <span class="n">rsp</span><span class="p">,</span><span class="mi">18</span>                              <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7</span><span class="n">CEE2106E</span> <span class="o">|</span> <span class="n">C3</span>                       <span class="o">|</span> <span class="n">ret</span>                                     <span class="o">|</span>
</span></span></code></pre></div><p>어셈블리를 살펴보면 처음보는 명령어가 있다. 바로 rol이라는 연산인데, 쉬프트 연산의 일종이다. al 레지스터의 값을 cl레지스터 값 만큼 rol연산 해 al 레지스터에 저장하는 연산이다. 일반적인 쉬프트 연산에서 자리수를 넘어가는 값이 나오면 그 수는 그냥 버려지는것이 일반적이지만 ROL(왼쪽)과 ROR(오른쪽)연산의 경우 마지막 자리수에서 쉬프트 연산을 통해 자리올림이 발생했을 때, 반대쪽 자리로 옮겨 올라간 자리를 표시한다.</p>
<p>예를 들면 이렇다. al, cl은 각각 8비트의 길이를 가지고 있기 때문에 8비트로 설명을 해보겠다. 0000 0001을 ROL연산을 하면 0000 0010이 된다. 다만 0000 0001을 ROR연산을 하면 1000 0000이 된다. 이것이 일반적인 쉬프트 연산과 다른점이다.</p>
<p>해당 로직을 실행시켜 레지스터 값 변화와 같이 분석해보면 다음과 같다. 입력한 문자열이 저장된 스택 시작주소에서 반복문 횟수 만큼 값을 더해 결과적으로 각 자리 문자를 가져와 al 레지스터에 저장하는 역할을 한다. 이후 반복분의 횟수는 cl레지스터에 저장되며 al 레지스터에 저장된 값을 cl 레지스터 값 만큼 rol연산한 후 반복분 횟수와 XOR연산해 EAX에 저장한다. 이후 스텍에 저장된 정답 문자열 주소에 반복분 횟수 만큼 더한 자리의 값을 가져와 ECX에 저장한다. EAX와 ECX를 비교 후 같지 않으면 0을 리턴하고 같으면 jmp를 통해 다음 자리의 문자를 검사한다.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">(각 자리수의 hex값 ROL 자리수(몇번째 자리인지)) XOR 자리수(몇번째 자리인지) == 비교대상 정답
</span></span><span class="line"><span class="cl">위 값이 참일경우 반복문 동작, 거짓일 경우 0을 리턴하고 main함수에서 Wrong을 출력
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"># 입력된 문자열만큼 반복
</span></span><span class="line"><span class="cl"># 자리수는 0부터 시작후 1씩 증가
</span></span><span class="line"><span class="cl"># 결과 값을 7FF7CEE23000에 위치한 hex값과 비교해 정답 유무 확인
</span></span></code></pre></div><p>위 수식을 입력 받은 글자 수 만큼 반복하면서 비교한다. XOR의 경우 A ⊕ B = C와 A ⊕ C = B가 성립하므로 위 수식의 역을 구하면 다음과 같다.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">(비교대상 정답 XOR 자리수) ROR 자리수 = 각 자리수의 hex값
</span></span></code></pre></div><p>위 수식을 검산하면서 간과했던 점이 al, cl 레지스터는 8비트 크기를 가지지만 윈도우 계산기의 기본 설정은 QWORD로 64비트의 자리수를 가지고 있다. 따라서 계산기로 검증하면서 byte로 설정을 바꾸어 계산을 진행했다.</p>
<p>이제 파이썬 코드를 작성해보자</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">ROL</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">shift</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">8</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="n">shift</span> <span class="o">%=</span> <span class="n">size</span>
</span></span><span class="line"><span class="cl">        <span class="n">remains</span> <span class="o">=</span> <span class="n">data</span> <span class="o">&gt;&gt;</span> <span class="p">(</span><span class="n">size</span> <span class="o">-</span> <span class="n">shift</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">body</span> <span class="o">=</span> <span class="p">(</span><span class="n">data</span> <span class="o">&lt;&lt;</span> <span class="n">shift</span><span class="p">)</span> <span class="o">-</span> <span class="p">(</span><span class="n">remains</span> <span class="o">&lt;&lt;</span> <span class="n">size</span> <span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="p">(</span><span class="n">body</span> <span class="o">+</span> <span class="n">remains</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">ROR</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">shift</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">8</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="n">shift</span> <span class="o">%=</span> <span class="n">size</span>
</span></span><span class="line"><span class="cl">        <span class="n">body</span> <span class="o">=</span> <span class="n">data</span> <span class="o">&gt;&gt;</span> <span class="n">shift</span>
</span></span><span class="line"><span class="cl">        <span class="n">remains</span> <span class="o">=</span> <span class="p">(</span><span class="n">data</span> <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">size</span> <span class="o">-</span> <span class="n">shift</span><span class="p">))</span> <span class="o">-</span> <span class="p">(</span><span class="n">body</span> <span class="o">&lt;&lt;</span> <span class="n">size</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="p">(</span><span class="n">body</span> <span class="o">+</span> <span class="n">remains</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">a</span> <span class="o">=</span> <span class="p">[</span><span class="mh">0x52</span><span class="p">,</span> <span class="mh">0xDF</span><span class="p">,</span> <span class="mh">0xB3</span><span class="p">,</span> <span class="mh">0x60</span><span class="p">,</span> <span class="mh">0xF1</span><span class="p">,</span> <span class="mh">0x8B</span><span class="p">,</span> <span class="mh">0x1C</span><span class="p">,</span> <span class="mh">0xB5</span><span class="p">,</span> <span class="mh">0x57</span><span class="p">,</span> <span class="mh">0xD1</span><span class="p">,</span> <span class="mh">0x9F</span><span class="p">,</span> <span class="mh">0x38</span><span class="p">,</span> <span class="mh">0x4B</span><span class="p">,</span> <span class="mh">0x29</span><span class="p">,</span> <span class="mh">0xD9</span><span class="p">,</span> <span class="mh">0x26</span>
</span></span><span class="line"><span class="cl"><span class="p">,</span> <span class="mh">0x7F</span><span class="p">,</span> <span class="mh">0xC9</span><span class="p">,</span> <span class="mh">0xA3</span><span class="p">,</span> <span class="mh">0xE9</span><span class="p">,</span> <span class="mh">0x53</span><span class="p">,</span> <span class="mh">0x18</span><span class="p">,</span> <span class="mh">0x4F</span><span class="p">,</span> <span class="mh">0xB8</span><span class="p">,</span> <span class="mh">0x6A</span><span class="p">,</span> <span class="mh">0xCB</span><span class="p">,</span> <span class="mh">0x87</span><span class="p">,</span> <span class="mh">0x58</span><span class="p">,</span> <span class="mh">0x5B</span><span class="p">,</span> <span class="mh">0x39</span><span class="p">,</span> <span class="mh">0x1E</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">b</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl"><span class="n">temp</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">a</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">temp</span> <span class="o">=</span> <span class="p">(</span><span class="n">i</span> <span class="o">^</span> <span class="n">b</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">temp</span> <span class="o">=</span> <span class="n">ROR</span><span class="p">(</span><span class="n">temp</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="nb">chr</span><span class="p">(</span><span class="n">temp</span><span class="p">),</span> <span class="n">end</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">b</span> <span class="o">=</span> <span class="n">b</span> <span class="o">+</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl"><span class="s2">&#34;&#34;</span>
</span></span></code></pre></div><p>찾아보니 파이썬에는 ROL, ROR 연산 함수가 없어 <a href="https://bbolmin.tistory.com/133">https://bbolmin.tistory.com/133</a> 블로그에서 코드를 빌려왔다. 감사하게도 ROL, ROR 코드를 작성해 올려주셨다.</p>
<p>위 코드를 보면 ROR 함수에 size 값이 8인것을 볼 수 있다. 이 또한 al의 크기인 8비트를 맞춰주기 위해 코드를 수정했다.</p>
<p>a의 리스트 값은 입력값과 비교하는 데이터로 7FF7CEE23000 위치에서 가져왔다.</p>
<p>위 코드를 돌리면 플레그를 얻을 수 있다.</p>
]]></content:encoded></item><item><title>Dreamhack rev-basic-6 문제풀이</title><link>https://dig06161.github.io/2022/04/13/dreamhack-rev-basic-6/</link><pubDate>Wed, 13 Apr 2022 18:30:00 +0900</pubDate><guid>https://dig06161.github.io/2022/04/13/dreamhack-rev-basic-6/</guid><description>&lt;p>이번에는 드림핵 리버싱 베이직 6번 문제를 풀어보자.&lt;/p>
&lt;p>이전에 올렸던 rev-basic-5 문제와 동일하게 바이너리를 실행 시키면&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">input :
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>이라는 문자열과 함께 문자열을 입력 받고 정답이면 Correct, 아니면 Wrong을 출력한다.&lt;/p>
&lt;p>우선 동일하게 x64 디버거를 이용해 어셈블리를 분석해보자.&lt;/p>
&lt;p>해당 프로그램 main의 어셈블리는 다음과 같다.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c++" data-lang="c++">&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">782681120&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">40&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">57&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">push&lt;/span> &lt;span class="n">rdi&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="nl">rdi&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="s">&amp;#34;ALLUSERSPROFILE=C:&lt;/span>&lt;span class="se">\\&lt;/span>&lt;span class="s">ProgramData&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">782681122&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">81&lt;/span>&lt;span class="n">EC&lt;/span> &lt;span class="mi">30010000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">sub&lt;/span> &lt;span class="n">rsp&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">130&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">782681129&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="n">B05&lt;/span> &lt;span class="n">F81F0000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">mov&lt;/span> &lt;span class="n">rax&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ds&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="mf">7FF&lt;/span>&lt;span class="mi">782683128&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">782681130&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">33&lt;/span>&lt;span class="n">C4&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">xor&lt;/span> &lt;span class="n">rax&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">rsp&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">782681133&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">898424&lt;/span> &lt;span class="mi">20010000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">mov&lt;/span> &lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ss&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="n">rsp&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">120&lt;/span>&lt;span class="p">],&lt;/span>&lt;span class="n">rax&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">78268113&lt;/span>&lt;span class="n">B&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="n">D4424&lt;/span> &lt;span class="mi">20&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">lea&lt;/span> &lt;span class="n">rax&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ss&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="n">rsp&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">20&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">782681140&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="n">BF8&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">mov&lt;/span> &lt;span class="n">rdi&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">rax&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="nl">rdi&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="s">&amp;#34;ALLUSERSPROFILE=C:&lt;/span>&lt;span class="se">\\&lt;/span>&lt;span class="s">ProgramData&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">782681143&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">33&lt;/span>&lt;span class="n">C0&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">xor&lt;/span> &lt;span class="n">eax&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">eax&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">782681145&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">B9&lt;/span> &lt;span class="mo">00010000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">mov&lt;/span> &lt;span class="n">ecx&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">100&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">78268114&lt;/span>&lt;span class="n">A&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="nl">F3&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">AA&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">rep&lt;/span> &lt;span class="n">stosb&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">78268114&lt;/span>&lt;span class="n">C&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="n">D0D&lt;/span> &lt;span class="n">BD100000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">lea&lt;/span> &lt;span class="n">rcx&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ds&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="mf">7FF&lt;/span>&lt;span class="mi">782682210&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">782682210&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="s">&amp;#34;Input : &amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">782681153&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">E8&lt;/span> &lt;span class="mi">58000000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">call&lt;/span> &lt;span class="n">chall6&lt;/span>&lt;span class="mf">.7F&lt;/span>&lt;span class="n">F7826811B0&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">782681158&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="n">D5424&lt;/span> &lt;span class="mi">20&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">lea&lt;/span> &lt;span class="n">rdx&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ss&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="n">rsp&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">20&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">78268115&lt;/span>&lt;span class="n">D&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="n">D0D&lt;/span> &lt;span class="n">B8100000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">lea&lt;/span> &lt;span class="n">rcx&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ds&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="mf">7FF&lt;/span>&lt;span class="mi">78268221&lt;/span>&lt;span class="n">C&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">78268221&lt;/span>&lt;span class="nl">C&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s">&amp;#34;%256s&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">782681164&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">E8&lt;/span> &lt;span class="n">A7000000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">call&lt;/span> &lt;span class="n">chall6&lt;/span>&lt;span class="mf">.7F&lt;/span>&lt;span class="n">F782681210&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">782681169&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="n">D4C24&lt;/span> &lt;span class="mi">20&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">lea&lt;/span> &lt;span class="n">rcx&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ss&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="n">rsp&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">20&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">78268116&lt;/span>&lt;span class="n">E&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">E8&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="n">DFEFFFF&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">call&lt;/span> &lt;span class="n">chall6&lt;/span>&lt;span class="mf">.7F&lt;/span>&lt;span class="n">F782681000&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">782681173&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">85&lt;/span>&lt;span class="n">C0&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">test&lt;/span> &lt;span class="n">eax&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">eax&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">782681175&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">74&lt;/span> &lt;span class="mf">0F&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">je&lt;/span> &lt;span class="n">chall6&lt;/span>&lt;span class="mf">.7F&lt;/span>&lt;span class="n">F782681186&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">782681177&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="n">D0D&lt;/span> &lt;span class="n">AA100000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">lea&lt;/span> &lt;span class="n">rcx&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ds&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="mf">7FF&lt;/span>&lt;span class="mi">782682228&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">782682228&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="s">&amp;#34;Correct&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">78268117&lt;/span>&lt;span class="n">E&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">FF15&lt;/span> &lt;span class="mo">04100000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">call&lt;/span> &lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ds&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="o">&amp;lt;&amp;amp;&lt;/span>&lt;span class="n">puts&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">782681184&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">EB&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="n">D&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">jmp&lt;/span> &lt;span class="n">chall6&lt;/span>&lt;span class="mf">.7F&lt;/span>&lt;span class="n">F782681193&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">782681186&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="n">D0D&lt;/span> &lt;span class="n">A3100000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">lea&lt;/span> &lt;span class="n">rcx&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ds&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="mf">7FF&lt;/span>&lt;span class="mi">782682230&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">782682230&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="s">&amp;#34;Wrong&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">78268118&lt;/span>&lt;span class="n">D&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">FF15&lt;/span> &lt;span class="n">F50F0000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">call&lt;/span> &lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ds&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="o">&amp;lt;&amp;amp;&lt;/span>&lt;span class="n">puts&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">782681193&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">33&lt;/span>&lt;span class="n">C0&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">xor&lt;/span> &lt;span class="n">eax&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">eax&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">782681195&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="n">B8C24&lt;/span> &lt;span class="mi">20010000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">mov&lt;/span> &lt;span class="n">rcx&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ss&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="n">rsp&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">120&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">78268119&lt;/span>&lt;span class="n">D&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">33&lt;/span>&lt;span class="n">CC&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">xor&lt;/span> &lt;span class="n">rcx&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">rsp&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">7826811&lt;/span>&lt;span class="n">A0&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">E8&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="n">B010000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">call&lt;/span> &lt;span class="n">chall6&lt;/span>&lt;span class="mf">.7F&lt;/span>&lt;span class="n">F782681300&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">7826811&lt;/span>&lt;span class="n">A5&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">81&lt;/span>&lt;span class="n">C4&lt;/span> &lt;span class="mi">30010000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">add&lt;/span> &lt;span class="n">rsp&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">130&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">7826811&lt;/span>&lt;span class="n">AC&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mf">5F&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">pop&lt;/span> &lt;span class="n">rdi&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="nl">rdi&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="s">&amp;#34;ALLUSERSPROFILE=C:&lt;/span>&lt;span class="se">\\&lt;/span>&lt;span class="s">ProgramData&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">7826811&lt;/span>&lt;span class="n">AD&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">C3&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">ret&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>여기서 정답의 로직을 분석하는 부분은 00007FF78268116E이다.&lt;/p></description><content:encoded><![CDATA[<p>이번에는 드림핵 리버싱 베이직 6번 문제를 풀어보자.</p>
<p>이전에 올렸던 rev-basic-5 문제와 동일하게 바이너리를 실행 시키면</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">input : 
</span></span></code></pre></div><p>이라는 문자열과 함께 문자열을 입력 받고 정답이면 Correct, 아니면 Wrong을 출력한다.</p>
<p>우선 동일하게 x64 디버거를 이용해 어셈블리를 분석해보자.</p>
<p>해당 프로그램 main의 어셈블리는 다음과 같다.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681120</span> <span class="o">|</span> <span class="mi">40</span><span class="o">:</span><span class="mi">57</span>                    <span class="o">|</span> <span class="n">push</span> <span class="n">rdi</span>                                <span class="o">|</span> <span class="nl">rdi</span><span class="p">:</span><span class="o">&amp;</span><span class="s">&#34;ALLUSERSPROFILE=C:</span><span class="se">\\</span><span class="s">ProgramData&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681122</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">81</span><span class="n">EC</span> <span class="mi">30010000</span>         <span class="o">|</span> <span class="n">sub</span> <span class="n">rsp</span><span class="p">,</span><span class="mi">130</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681129</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">B05</span> <span class="n">F81F0000</span>         <span class="o">|</span> <span class="n">mov</span> <span class="n">rax</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="mf">7FF</span><span class="mi">782683128</span><span class="p">]</span>     <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681130</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">33</span><span class="n">C4</span>                  <span class="o">|</span> <span class="n">xor</span> <span class="n">rax</span><span class="p">,</span><span class="n">rsp</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681133</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">898424</span> <span class="mi">20010000</span>       <span class="o">|</span> <span class="n">mov</span> <span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">120</span><span class="p">],</span><span class="n">rax</span>          <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">78268113</span><span class="n">B</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D4424</span> <span class="mi">20</span>             <span class="o">|</span> <span class="n">lea</span> <span class="n">rax</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">20</span><span class="p">]</span>           <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681140</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">BF8</span>                  <span class="o">|</span> <span class="n">mov</span> <span class="n">rdi</span><span class="p">,</span><span class="n">rax</span>                             <span class="o">|</span> <span class="nl">rdi</span><span class="p">:</span><span class="o">&amp;</span><span class="s">&#34;ALLUSERSPROFILE=C:</span><span class="se">\\</span><span class="s">ProgramData&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681143</span> <span class="o">|</span> <span class="mi">33</span><span class="n">C0</span>                     <span class="o">|</span> <span class="n">xor</span> <span class="n">eax</span><span class="p">,</span><span class="n">eax</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681145</span> <span class="o">|</span> <span class="n">B9</span> <span class="mo">00010000</span>              <span class="o">|</span> <span class="n">mov</span> <span class="n">ecx</span><span class="p">,</span><span class="mi">100</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">78268114</span><span class="n">A</span> <span class="o">|</span> <span class="nl">F3</span><span class="p">:</span><span class="n">AA</span>                    <span class="o">|</span> <span class="n">rep</span> <span class="n">stosb</span>                               <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">78268114</span><span class="n">C</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D0D</span> <span class="n">BD100000</span>         <span class="o">|</span> <span class="n">lea</span> <span class="n">rcx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="mf">7FF</span><span class="mi">782682210</span><span class="p">]</span>     <span class="o">|</span> <span class="mf">00007FF</span><span class="mi">782682210</span><span class="o">:</span><span class="s">&#34;Input : &#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681153</span> <span class="o">|</span> <span class="n">E8</span> <span class="mi">58000000</span>              <span class="o">|</span> <span class="n">call</span> <span class="n">chall6</span><span class="mf">.7F</span><span class="n">F7826811B0</span>                <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681158</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D5424</span> <span class="mi">20</span>             <span class="o">|</span> <span class="n">lea</span> <span class="n">rdx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">20</span><span class="p">]</span>           <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">78268115</span><span class="n">D</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D0D</span> <span class="n">B8100000</span>         <span class="o">|</span> <span class="n">lea</span> <span class="n">rcx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="mf">7FF</span><span class="mi">78268221</span><span class="n">C</span><span class="p">]</span>     <span class="o">|</span> <span class="mf">00007FF</span><span class="mi">78268221</span><span class="nl">C</span><span class="p">:</span><span class="s">&#34;%256s&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681164</span> <span class="o">|</span> <span class="n">E8</span> <span class="n">A7000000</span>              <span class="o">|</span> <span class="n">call</span> <span class="n">chall6</span><span class="mf">.7F</span><span class="n">F782681210</span>                <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681169</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D4C24</span> <span class="mi">20</span>             <span class="o">|</span> <span class="n">lea</span> <span class="n">rcx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">20</span><span class="p">]</span>           <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">78268116</span><span class="n">E</span> <span class="o">|</span> <span class="n">E8</span> <span class="mi">8</span><span class="n">DFEFFFF</span>              <span class="o">|</span> <span class="n">call</span> <span class="n">chall6</span><span class="mf">.7F</span><span class="n">F782681000</span>                <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681173</span> <span class="o">|</span> <span class="mi">85</span><span class="n">C0</span>                     <span class="o">|</span> <span class="n">test</span> <span class="n">eax</span><span class="p">,</span><span class="n">eax</span>                            <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681175</span> <span class="o">|</span> <span class="mi">74</span> <span class="mf">0F</span>                    <span class="o">|</span> <span class="n">je</span> <span class="n">chall6</span><span class="mf">.7F</span><span class="n">F782681186</span>                  <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681177</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D0D</span> <span class="n">AA100000</span>         <span class="o">|</span> <span class="n">lea</span> <span class="n">rcx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="mf">7FF</span><span class="mi">782682228</span><span class="p">]</span>     <span class="o">|</span> <span class="mf">00007FF</span><span class="mi">782682228</span><span class="o">:</span><span class="s">&#34;Correct&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">78268117</span><span class="n">E</span> <span class="o">|</span> <span class="n">FF15</span> <span class="mo">04100000</span>            <span class="o">|</span> <span class="n">call</span> <span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="o">&lt;&amp;</span><span class="n">puts</span><span class="o">&gt;</span><span class="p">]</span>             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681184</span> <span class="o">|</span> <span class="n">EB</span> <span class="mi">0</span><span class="n">D</span>                    <span class="o">|</span> <span class="n">jmp</span> <span class="n">chall6</span><span class="mf">.7F</span><span class="n">F782681193</span>                 <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681186</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D0D</span> <span class="n">A3100000</span>         <span class="o">|</span> <span class="n">lea</span> <span class="n">rcx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="mf">7FF</span><span class="mi">782682230</span><span class="p">]</span>     <span class="o">|</span> <span class="mf">00007FF</span><span class="mi">782682230</span><span class="o">:</span><span class="s">&#34;Wrong&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">78268118</span><span class="n">D</span> <span class="o">|</span> <span class="n">FF15</span> <span class="n">F50F0000</span>            <span class="o">|</span> <span class="n">call</span> <span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="o">&lt;&amp;</span><span class="n">puts</span><span class="o">&gt;</span><span class="p">]</span>             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681193</span> <span class="o">|</span> <span class="mi">33</span><span class="n">C0</span>                     <span class="o">|</span> <span class="n">xor</span> <span class="n">eax</span><span class="p">,</span><span class="n">eax</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681195</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">B8C24</span> <span class="mi">20010000</span>       <span class="o">|</span> <span class="n">mov</span> <span class="n">rcx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">120</span><span class="p">]</span>          <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">78268119</span><span class="n">D</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">33</span><span class="n">CC</span>                  <span class="o">|</span> <span class="n">xor</span> <span class="n">rcx</span><span class="p">,</span><span class="n">rsp</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7826811</span><span class="n">A0</span> <span class="o">|</span> <span class="n">E8</span> <span class="mi">5</span><span class="n">B010000</span>              <span class="o">|</span> <span class="n">call</span> <span class="n">chall6</span><span class="mf">.7F</span><span class="n">F782681300</span>                <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7826811</span><span class="n">A5</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">81</span><span class="n">C4</span> <span class="mi">30010000</span>         <span class="o">|</span> <span class="n">add</span> <span class="n">rsp</span><span class="p">,</span><span class="mi">130</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7826811</span><span class="n">AC</span> <span class="o">|</span> <span class="mf">5F</span>                       <span class="o">|</span> <span class="n">pop</span> <span class="n">rdi</span>                                 <span class="o">|</span> <span class="nl">rdi</span><span class="p">:</span><span class="o">&amp;</span><span class="s">&#34;ALLUSERSPROFILE=C:</span><span class="se">\\</span><span class="s">ProgramData&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">7826811</span><span class="n">AD</span> <span class="o">|</span> <span class="n">C3</span>                       <span class="o">|</span> <span class="n">ret</span>                                     <span class="o">|</span>
</span></span></code></pre></div><p>여기서 정답의 로직을 분석하는 부분은 00007FF78268116E이다.</p>
<p>테스트로 AAAAA를 입력한 뒤, 위 주소부분의 어셈블리를 살펴보자.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681000</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">894</span><span class="n">C24</span> <span class="mi">08</span>             <span class="o">|</span> <span class="n">mov</span> <span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">8</span><span class="p">],</span><span class="n">rcx</span>            <span class="o">|</span> <span class="p">[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">8</span><span class="p">]</span><span class="o">:</span><span class="s">&#34;%256s&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681005</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">83</span><span class="n">EC</span> <span class="mi">18</span>               <span class="o">|</span> <span class="n">sub</span> <span class="n">rsp</span><span class="p">,</span><span class="mi">18</span>                              <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681009</span> <span class="o">|</span> <span class="n">C70424</span> <span class="mo">00000000</span>          <span class="o">|</span> <span class="n">mov</span> <span class="n">dword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="p">],</span><span class="mi">0</span>                <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681010</span> <span class="o">|</span> <span class="n">EB</span> <span class="mi">08</span>                    <span class="o">|</span> <span class="n">jmp</span> <span class="n">chall6</span><span class="mf">.7F</span><span class="n">F78268101A</span>                 <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681012</span> <span class="o">|</span> <span class="mi">8</span><span class="n">B0424</span>                   <span class="o">|</span> <span class="n">mov</span> <span class="n">eax</span><span class="p">,</span><span class="n">dword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="p">]</span>              <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681015</span> <span class="o">|</span> <span class="n">FFC0</span>                     <span class="o">|</span> <span class="n">inc</span> <span class="n">eax</span>                                 <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681017</span> <span class="o">|</span> <span class="mi">890424</span>                   <span class="o">|</span> <span class="n">mov</span> <span class="n">dword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="p">],</span><span class="n">eax</span>              <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">78268101</span><span class="n">A</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">630424</span>                <span class="o">|</span> <span class="n">movsxd</span> <span class="n">rax</span><span class="p">,</span><span class="n">dword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="p">]</span>           <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">78268101</span><span class="n">E</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mf">83F</span><span class="mi">8</span> <span class="mi">12</span>               <span class="o">|</span> <span class="n">cmp</span> <span class="n">rax</span><span class="p">,</span><span class="mi">12</span>                              <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681022</span> <span class="o">|</span> <span class="mi">73</span> <span class="mi">31</span>                    <span class="o">|</span> <span class="n">jae</span> <span class="n">chall6</span><span class="mf">.7F</span><span class="n">F782681055</span>                 <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681024</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">630424</span>                <span class="o">|</span> <span class="n">movsxd</span> <span class="n">rax</span><span class="p">,</span><span class="n">dword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="p">]</span>           <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681028</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">B4C24</span> <span class="mi">20</span>             <span class="o">|</span> <span class="n">mov</span> <span class="n">rcx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">20</span><span class="p">]</span>           <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">78268102</span><span class="n">D</span> <span class="o">|</span> <span class="mf">0F</span><span class="n">B60401</span>                 <span class="o">|</span> <span class="n">movzx</span> <span class="n">eax</span><span class="p">,</span><span class="n">byte</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="n">rcx</span><span class="o">+</span><span class="n">rax</span><span class="p">]</span>         <span class="o">|</span> <span class="n">rcx</span><span class="o">+</span><span class="n">rax</span><span class="o">*</span><span class="mi">1</span><span class="o">:</span><span class="s">&#34;AAAA&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681031</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D0D</span> <span class="n">E81F0000</span>         <span class="o">|</span> <span class="n">lea</span> <span class="n">rcx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="mf">7FF</span><span class="mi">782683020</span><span class="p">]</span>     <span class="o">|</span> <span class="nl">rcx</span><span class="p">:</span><span class="s">&#34;AAAAA&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681038</span> <span class="o">|</span> <span class="mf">0F</span><span class="n">B60401</span>                 <span class="o">|</span> <span class="n">movzx</span> <span class="n">eax</span><span class="p">,</span><span class="n">byte</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="n">rcx</span><span class="o">+</span><span class="n">rax</span><span class="p">]</span>         <span class="o">|</span> <span class="n">rcx</span><span class="o">+</span><span class="n">rax</span><span class="o">*</span><span class="mi">1</span><span class="o">:</span><span class="s">&#34;AAAA&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">78268103</span><span class="n">C</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">630</span><span class="n">C24</span>                <span class="o">|</span> <span class="n">movsxd</span> <span class="n">rcx</span><span class="p">,</span><span class="n">dword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="p">]</span>           <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681040</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D15</span> <span class="n">B91F0000</span>         <span class="o">|</span> <span class="n">lea</span> <span class="n">rdx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="mf">7FF</span><span class="mi">782683000</span><span class="p">]</span>     <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681047</span> <span class="o">|</span> <span class="mf">0F</span><span class="n">B60C0A</span>                 <span class="o">|</span> <span class="n">movzx</span> <span class="n">ecx</span><span class="p">,</span><span class="n">byte</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="n">rdx</span><span class="o">+</span><span class="n">rcx</span><span class="p">]</span>         <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">78268104</span><span class="n">B</span> <span class="o">|</span> <span class="mi">3</span><span class="n">BC1</span>                     <span class="o">|</span> <span class="n">cmp</span> <span class="n">eax</span><span class="p">,</span><span class="n">ecx</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">78268104</span><span class="n">D</span> <span class="o">|</span> <span class="mi">74</span> <span class="mo">04</span>                    <span class="o">|</span> <span class="n">je</span> <span class="n">chall6</span><span class="mf">.7F</span><span class="n">F782681053</span>                  <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF78268104F</span> <span class="o">|</span> <span class="mi">33</span><span class="n">C0</span>                     <span class="o">|</span> <span class="n">xor</span> <span class="n">eax</span><span class="p">,</span><span class="n">eax</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681051</span> <span class="o">|</span> <span class="n">EB</span> <span class="mo">07</span>                    <span class="o">|</span> <span class="n">jmp</span> <span class="n">chall6</span><span class="mf">.7F</span><span class="n">F78268105A</span>                 <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681053</span> <span class="o">|</span> <span class="n">EB</span> <span class="n">BD</span>                    <span class="o">|</span> <span class="n">jmp</span> <span class="n">chall6</span><span class="mf">.7F</span><span class="n">F782681012</span>                 <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">782681055</span> <span class="o">|</span> <span class="n">B8</span> <span class="mo">01000000</span>              <span class="o">|</span> <span class="n">mov</span> <span class="n">eax</span><span class="p">,</span><span class="mi">1</span>                               <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">78268105</span><span class="n">A</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">83</span><span class="n">C4</span> <span class="mi">18</span>               <span class="o">|</span> <span class="n">add</span> <span class="n">rsp</span><span class="p">,</span><span class="mi">18</span>                              <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">78268105</span><span class="n">E</span> <span class="o">|</span> <span class="n">C3</span>                       <span class="o">|</span> <span class="n">ret</span>                                     <span class="o">|</span>
</span></span></code></pre></div><p>중요한 부분은 00007FF782681031 부터 00007FF78268104B를 보면 될것 같다.</p>
<p>입력받은 문자열을 순서대로 비교하는 로직이다. 위 주소를 살펴보면 7FF782683020 + 입력받은 문자열의 hex값 을 계산해 7FF782683000와 비교한다. 이를 역산하면 7FF782683000에 있는 hex값이 7FF782683020로부터 얼마만큼 떨어져 있는지 확인하면 쉽게 답을 찾을 수 있다. 이런 로직을 보고 파이썬 코드를 작성했다.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">a</span> <span class="o">=</span> <span class="p">[</span><span class="mh">0x00</span><span class="p">,</span> <span class="mh">0x4D</span><span class="p">,</span> <span class="mh">0x51</span><span class="p">,</span> <span class="mh">0x50</span><span class="p">,</span> <span class="mh">0xEF</span><span class="p">,</span> <span class="mh">0xFB</span><span class="p">,</span> <span class="mh">0xC3</span><span class="p">,</span> <span class="mh">0xCF</span><span class="p">,</span> <span class="mh">0x92</span><span class="p">,</span> <span class="mh">0x45</span><span class="p">,</span> <span class="mh">0x4D</span><span class="p">,</span> <span class="mh">0xCF</span><span class="p">,</span> <span class="mh">0xF5</span><span class="p">,</span> <span class="mh">0x04</span><span class="p">,</span> <span class="mh">0x40</span><span class="p">,</span> <span class="mh">0x50</span><span class="p">,</span> <span class="mh">0x43</span><span class="p">,</span> <span class="mh">0x63</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">b</span> <span class="o">=</span><span class="p">[</span><span class="mh">0x63</span><span class="p">,</span> <span class="mh">0x7C</span><span class="p">,</span> <span class="mh">0x77</span><span class="p">,</span> <span class="mh">0x7B</span><span class="p">,</span> <span class="mh">0xF2</span><span class="p">,</span> <span class="mh">0x6B</span><span class="p">,</span> <span class="mh">0x6F</span><span class="p">,</span> <span class="mh">0xC5</span><span class="p">,</span> <span class="mh">0x30</span><span class="p">,</span> <span class="mh">0x1</span><span class="p">,</span> <span class="mh">0x67</span><span class="p">,</span> <span class="mh">0x2B</span><span class="p">,</span> <span class="mh">0xFE</span><span class="p">,</span> <span class="mh">0xD7</span><span class="p">,</span> <span class="mh">0xAB</span><span class="p">,</span> <span class="mh">0x76</span>
</span></span><span class="line"><span class="cl"><span class="p">,</span><span class="mh">0xCA</span><span class="p">,</span> <span class="mh">0x82</span><span class="p">,</span> <span class="mh">0xC9</span><span class="p">,</span> <span class="mh">0x7D</span><span class="p">,</span> <span class="mh">0xFA</span><span class="p">,</span> <span class="mh">0x59</span><span class="p">,</span> <span class="mh">0x47</span><span class="p">,</span> <span class="mh">0xF0</span><span class="p">,</span> <span class="mh">0xAD</span><span class="p">,</span> <span class="mh">0xD4</span><span class="p">,</span> <span class="mh">0xA2</span><span class="p">,</span> <span class="mh">0xAF</span><span class="p">,</span> <span class="mh">0x9C</span><span class="p">,</span> <span class="mh">0xA4</span><span class="p">,</span> <span class="mh">0x72</span><span class="p">,</span> <span class="mh">0xC0</span>
</span></span><span class="line"><span class="cl"><span class="p">,</span><span class="mh">0xB7</span><span class="p">,</span> <span class="mh">0xFD</span><span class="p">,</span> <span class="mh">0x93</span><span class="p">,</span> <span class="mh">0x26</span><span class="p">,</span> <span class="mh">0x36</span><span class="p">,</span> <span class="mh">0x3F</span><span class="p">,</span> <span class="mh">0xF7</span><span class="p">,</span> <span class="mh">0xCC</span><span class="p">,</span> <span class="mh">0x34</span><span class="p">,</span> <span class="mh">0xA5</span><span class="p">,</span> <span class="mh">0xE5</span><span class="p">,</span> <span class="mh">0xF1</span><span class="p">,</span> <span class="mh">0x71</span><span class="p">,</span> <span class="mh">0xD8</span><span class="p">,</span> <span class="mh">0x31</span><span class="p">,</span> <span class="mh">0x15</span>
</span></span><span class="line"><span class="cl"><span class="p">,</span><span class="mh">0x04</span><span class="p">,</span> <span class="mh">0xC7</span><span class="p">,</span> <span class="mh">0x23</span><span class="p">,</span> <span class="mh">0xC3</span><span class="p">,</span> <span class="mh">0x18</span><span class="p">,</span> <span class="mh">0x96</span><span class="p">,</span> <span class="mh">0x05</span><span class="p">,</span> <span class="mh">0x9A</span><span class="p">,</span> <span class="mh">0x07</span><span class="p">,</span> <span class="mh">0x12</span><span class="p">,</span> <span class="mh">0x80</span><span class="p">,</span> <span class="mh">0xE2</span><span class="p">,</span> <span class="mh">0xEB</span><span class="p">,</span> <span class="mh">0x27</span><span class="p">,</span> <span class="mh">0xB2</span><span class="p">,</span> <span class="mh">0x75</span>
</span></span><span class="line"><span class="cl"><span class="p">,</span><span class="mh">0x09</span><span class="p">,</span> <span class="mh">0x83</span><span class="p">,</span> <span class="mh">0x2C</span><span class="p">,</span> <span class="mh">0x1A</span><span class="p">,</span> <span class="mh">0x1B</span><span class="p">,</span> <span class="mh">0x6E</span><span class="p">,</span> <span class="mh">0x5A</span><span class="p">,</span> <span class="mh">0xA0</span><span class="p">,</span> <span class="mh">0x52</span><span class="p">,</span> <span class="mh">0x3B</span><span class="p">,</span> <span class="mh">0xD6</span><span class="p">,</span> <span class="mh">0xB3</span><span class="p">,</span> <span class="mh">0x29</span><span class="p">,</span> <span class="mh">0xE3</span><span class="p">,</span> <span class="mh">0x2F</span><span class="p">,</span> <span class="mh">0x84</span>
</span></span><span class="line"><span class="cl"><span class="p">,</span><span class="mh">0x53</span><span class="p">,</span> <span class="mh">0xD1</span><span class="p">,</span> <span class="mh">0x00</span><span class="p">,</span> <span class="mh">0xED</span><span class="p">,</span> <span class="mh">0x20</span><span class="p">,</span> <span class="mh">0xFC</span><span class="p">,</span> <span class="mh">0xB1</span><span class="p">,</span> <span class="mh">0x5B</span><span class="p">,</span> <span class="mh">0x6A</span><span class="p">,</span> <span class="mh">0xCB</span><span class="p">,</span> <span class="mh">0xBE</span><span class="p">,</span> <span class="mh">0x39</span><span class="p">,</span> <span class="mh">0x4A</span><span class="p">,</span> <span class="mh">0x4C</span><span class="p">,</span> <span class="mh">0x58</span><span class="p">,</span> <span class="mh">0xCF</span>
</span></span><span class="line"><span class="cl"><span class="p">,</span><span class="mh">0xD0</span><span class="p">,</span> <span class="mh">0xEF</span><span class="p">,</span> <span class="mh">0xAA</span><span class="p">,</span> <span class="mh">0xFB</span><span class="p">,</span> <span class="mh">0x43</span><span class="p">,</span> <span class="mh">0x4D</span><span class="p">,</span> <span class="mh">0x33</span><span class="p">,</span> <span class="mh">0x85</span><span class="p">,</span> <span class="mh">0x45</span><span class="p">,</span> <span class="mh">0xF9</span><span class="p">,</span> <span class="mh">0x02</span><span class="p">,</span> <span class="mh">0x7F</span><span class="p">,</span> <span class="mh">0x50</span><span class="p">,</span> <span class="mh">0x3C</span><span class="p">,</span> <span class="mh">0x9F</span><span class="p">,</span> <span class="mh">0xA8</span>
</span></span><span class="line"><span class="cl"><span class="p">,</span><span class="mh">0x51</span><span class="p">,</span> <span class="mh">0xA3</span><span class="p">,</span> <span class="mh">0x40</span><span class="p">,</span> <span class="mh">0x8F</span><span class="p">,</span> <span class="mh">0x92</span><span class="p">,</span> <span class="mh">0x9D</span><span class="p">,</span> <span class="mh">0x38</span><span class="p">,</span> <span class="mh">0xF5</span><span class="p">,</span> <span class="mh">0xBC</span><span class="p">,</span> <span class="mh">0xB6</span><span class="p">,</span> <span class="mh">0xDA</span><span class="p">,</span> <span class="mh">0x21</span><span class="p">,</span> <span class="mh">0x10</span><span class="p">,</span> <span class="mh">0xFF</span><span class="p">,</span> <span class="mh">0xF3</span><span class="p">,</span> <span class="mh">0xD2</span>
</span></span><span class="line"><span class="cl"><span class="p">,</span><span class="mh">0xCD</span><span class="p">,</span> <span class="mh">0x0C</span><span class="p">,</span> <span class="mh">0x13</span><span class="p">,</span> <span class="mh">0xEC</span><span class="p">,</span> <span class="mh">0x5F</span><span class="p">,</span> <span class="mh">0x97</span><span class="p">,</span> <span class="mh">0x44</span><span class="p">,</span> <span class="mh">0x17</span><span class="p">,</span> <span class="mh">0xC4</span><span class="p">,</span> <span class="mh">0xA7</span><span class="p">,</span> <span class="mh">0x7E</span><span class="p">,</span> <span class="mh">0x3D</span><span class="p">,</span> <span class="mh">0x64</span><span class="p">,</span> <span class="mh">0x5D</span><span class="p">,</span> <span class="mh">0x19</span><span class="p">,</span> <span class="mh">0x73</span>
</span></span><span class="line"><span class="cl"><span class="p">,</span><span class="mh">0x60</span><span class="p">,</span> <span class="mh">0x81</span><span class="p">,</span> <span class="mh">0x4F</span><span class="p">,</span> <span class="mh">0xDC</span><span class="p">,</span> <span class="mh">0x22</span><span class="p">,</span> <span class="mh">0x2A</span><span class="p">,</span> <span class="mh">0x90</span><span class="p">,</span> <span class="mh">0x88</span><span class="p">,</span> <span class="mh">0x46</span><span class="p">,</span> <span class="mh">0xEE</span><span class="p">,</span> <span class="mh">0xB8</span><span class="p">,</span> <span class="mh">0x14</span><span class="p">,</span> <span class="mh">0xDE</span><span class="p">,</span> <span class="mh">0x5E</span><span class="p">,</span> <span class="mh">0x0B</span><span class="p">,</span> <span class="mh">0xDB</span>
</span></span><span class="line"><span class="cl"><span class="p">,</span><span class="mh">0xE0</span><span class="p">,</span> <span class="mh">0x32</span><span class="p">,</span> <span class="mh">0x3A</span><span class="p">,</span> <span class="mh">0x0A</span><span class="p">,</span> <span class="mh">0x49</span><span class="p">,</span> <span class="mh">0x06</span><span class="p">,</span> <span class="mh">0x24</span><span class="p">,</span> <span class="mh">0x5C</span><span class="p">,</span> <span class="mh">0xC2</span><span class="p">,</span> <span class="mh">0xD3</span><span class="p">,</span> <span class="mh">0xAC</span><span class="p">,</span> <span class="mh">0x62</span><span class="p">,</span> <span class="mh">0x91</span><span class="p">,</span> <span class="mh">0x95</span><span class="p">,</span> <span class="mh">0xE4</span><span class="p">,</span> <span class="mh">0x79</span>
</span></span><span class="line"><span class="cl"><span class="p">,</span><span class="mh">0xE7</span><span class="p">,</span> <span class="mh">0xC8</span><span class="p">,</span> <span class="mh">0x37</span><span class="p">,</span> <span class="mh">0x6D</span><span class="p">,</span> <span class="mh">0x8D</span><span class="p">,</span> <span class="mh">0xD5</span><span class="p">,</span> <span class="mh">0x4E</span><span class="p">,</span> <span class="mh">0xA9</span><span class="p">,</span> <span class="mh">0x6C</span><span class="p">,</span> <span class="mh">0x56</span><span class="p">,</span> <span class="mh">0xF4</span><span class="p">,</span> <span class="mh">0xEA</span><span class="p">,</span> <span class="mh">0x65</span><span class="p">,</span> <span class="mh">0x7A</span><span class="p">,</span> <span class="mh">0xAE</span><span class="p">,</span> <span class="mh">0x8</span>
</span></span><span class="line"><span class="cl"><span class="p">,</span><span class="mh">0xBA</span><span class="p">,</span> <span class="mh">0x78</span><span class="p">,</span> <span class="mh">0x25</span><span class="p">,</span> <span class="mh">0x2E</span><span class="p">,</span> <span class="mh">0x1C</span><span class="p">,</span> <span class="mh">0xA6</span><span class="p">,</span> <span class="mh">0xB4</span><span class="p">,</span> <span class="mh">0xC6</span><span class="p">,</span> <span class="mh">0xE8</span><span class="p">,</span> <span class="mh">0xDD</span><span class="p">,</span> <span class="mh">0x74</span><span class="p">,</span> <span class="mh">0x1F</span><span class="p">,</span> <span class="mh">0x4B</span><span class="p">,</span> <span class="mh">0xBD</span><span class="p">,</span> <span class="mh">0x8B</span><span class="p">,</span> <span class="mh">0x8A</span>
</span></span><span class="line"><span class="cl"><span class="p">,</span><span class="mh">0x70</span><span class="p">,</span> <span class="mh">0x3E</span><span class="p">,</span> <span class="mh">0xB5</span><span class="p">,</span> <span class="mh">0x66</span><span class="p">,</span> <span class="mh">0x48</span><span class="p">,</span> <span class="mh">0x03</span><span class="p">,</span> <span class="mh">0xF6</span><span class="p">,</span> <span class="mh">0x0E</span><span class="p">,</span> <span class="mh">0x61</span><span class="p">,</span> <span class="mh">0x35</span><span class="p">,</span> <span class="mh">0x57</span><span class="p">,</span> <span class="mh">0xB9</span><span class="p">,</span> <span class="mh">0x86</span><span class="p">,</span> <span class="mh">0xC1</span><span class="p">,</span> <span class="mh">0x1D</span><span class="p">,</span> <span class="mh">0x9E</span>
</span></span><span class="line"><span class="cl"><span class="p">,</span><span class="mh">0xE1</span><span class="p">,</span> <span class="mh">0xF8</span><span class="p">,</span> <span class="mh">0x98</span><span class="p">,</span> <span class="mh">0x11</span><span class="p">,</span> <span class="mh">0x69</span><span class="p">,</span> <span class="mh">0xD9</span><span class="p">,</span> <span class="mh">0x8E</span><span class="p">,</span> <span class="mh">0x94</span><span class="p">,</span> <span class="mh">0x9B</span><span class="p">,</span> <span class="mh">0x1E</span><span class="p">,</span> <span class="mh">0x87</span><span class="p">,</span> <span class="mh">0xE9</span><span class="p">,</span> <span class="mh">0xCE</span><span class="p">,</span> <span class="mh">0x55</span><span class="p">,</span> <span class="mh">0x28</span><span class="p">,</span> <span class="mh">0xDF</span>
</span></span><span class="line"><span class="cl"><span class="p">,</span><span class="mh">0x8C</span><span class="p">,</span> <span class="mh">0xA1</span><span class="p">,</span> <span class="mh">0x89</span><span class="p">,</span> <span class="mh">0x0D</span><span class="p">,</span> <span class="mh">0xBF</span><span class="p">,</span> <span class="mh">0xE6</span><span class="p">,</span> <span class="mh">0x42</span><span class="p">,</span> <span class="mh">0x68</span><span class="p">,</span> <span class="mh">0x41</span><span class="p">,</span> <span class="mh">0x99</span><span class="p">,</span> <span class="mh">0x2D</span><span class="p">,</span> <span class="mh">0x0F</span><span class="p">,</span> <span class="mh">0xB0</span><span class="p">,</span> <span class="mh">0x54</span><span class="p">,</span> <span class="mh">0xBB</span><span class="p">,</span> <span class="mh">0x16</span>
</span></span><span class="line"><span class="cl"><span class="p">,</span><span class="mh">0x42</span><span class="p">,</span> <span class="mh">0xCD</span><span class="p">,</span> <span class="mh">0xB7</span><span class="p">,</span> <span class="mh">0x32</span><span class="p">,</span> <span class="mh">0x13</span><span class="p">,</span> <span class="mh">0x59</span><span class="p">,</span> <span class="mh">0xFF</span><span class="p">,</span> <span class="mh">0xFF</span><span class="p">,</span> <span class="mh">0xBD</span><span class="p">,</span> <span class="mh">0x32</span><span class="p">,</span> <span class="mh">0x48</span><span class="p">,</span> <span class="mh">0xCD</span><span class="p">,</span> <span class="mh">0xEC</span><span class="p">,</span> <span class="mh">0xA6</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">a</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">b_count</span> <span class="o">=</span> <span class="mh">0x00</span>
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">b</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="k">if</span><span class="p">(</span><span class="n">i</span> <span class="o">==</span> <span class="n">j</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">                        <span class="k">break</span>
</span></span><span class="line"><span class="cl">                <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                        <span class="n">b_count</span><span class="o">=</span><span class="n">b_count</span><span class="o">+</span><span class="mi">1</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="nb">chr</span><span class="p">(</span><span class="n">b_count</span><span class="p">),</span> <span class="n">end</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
</span></span></code></pre></div><p>위 코드에서 변수 a 는 7FF782683000에 있는 hex값이고, 변수 b 는 7FF782683020에 있는 hex값을 의미하며 반복문을 통해 순서대로 돌면서 떨어진 거리를 계산한다.</p>
<p>위 코드를 돌리면 플레그 값을 확인할 수 있다.</p>
]]></content:encoded></item><item><title>Dreamhack rev-basic-5 문제풀이</title><link>https://dig06161.github.io/2022/04/09/dreamhack-rev-basic-5/</link><pubDate>Sat, 09 Apr 2022 18:30:00 +0900</pubDate><guid>https://dig06161.github.io/2022/04/09/dreamhack-rev-basic-5/</guid><description>&lt;p>이번 문제는 드림핵 리버싱문제 rev-basic-5이다. 확실히 베이직 문제이다 보니 약간의 분석과정만 거치면 풀이법이 보여 쉬운편에 속했다.&lt;/p>
&lt;p>우선 exe 파일을 다운 받으면 chall5.exe라는 바이너리가 다운로드 된다. 이후 이 바이너리를 실행 시키면&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">input :
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>구문으로 문자열을 입력 받고 맞으면 Correct 틀리면 Wrong이라는 문자열을 출력한다.&lt;/p>
&lt;p>&lt;br>&lt;br>&lt;/p>
&lt;p>이제 이 바이너리를 x64 디버거로 분석 해보자.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c++" data-lang="c++">&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C1130&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">40&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">57&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">push&lt;/span> &lt;span class="n">rdi&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="nl">rdi&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;샰櫚Ʊ&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C1132&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">81&lt;/span>&lt;span class="n">EC&lt;/span> &lt;span class="mi">30010000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">sub&lt;/span> &lt;span class="n">rsp&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">130&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C1139&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="n">B05&lt;/span> &lt;span class="n">E81E0000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">mov&lt;/span> &lt;span class="n">rax&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ds&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="mf">7FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C3028&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C1140&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">33&lt;/span>&lt;span class="n">C4&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">xor&lt;/span> &lt;span class="n">rax&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">rsp&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C1143&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">898424&lt;/span> &lt;span class="mi">20010000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">mov&lt;/span> &lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ss&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="n">rsp&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">120&lt;/span>&lt;span class="p">],&lt;/span>&lt;span class="n">rax&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C114B&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="n">D4424&lt;/span> &lt;span class="mi">20&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">lea&lt;/span> &lt;span class="n">rax&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ss&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="n">rsp&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">20&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C1150&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="n">BF8&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">mov&lt;/span> &lt;span class="n">rdi&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">rax&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="nl">rdi&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;샰櫚Ʊ&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C1153&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">33&lt;/span>&lt;span class="n">C0&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">xor&lt;/span> &lt;span class="n">eax&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">eax&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C1155&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">B9&lt;/span> &lt;span class="mo">00010000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">mov&lt;/span> &lt;span class="n">ecx&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">100&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C115A&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="nl">F3&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">AA&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">rep&lt;/span> &lt;span class="n">stosb&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C115C&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="n">D0D&lt;/span> &lt;span class="n">AD100000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">lea&lt;/span> &lt;span class="n">rcx&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ds&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="mf">7FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C2210&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="nl">A16C2210&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s">&amp;#34;Input : &amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C1163&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">E8&lt;/span> &lt;span class="mi">58000000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">call&lt;/span> &lt;span class="n">chall5&lt;/span>&lt;span class="mf">.7F&lt;/span>&lt;span class="n">F6A16C11C0&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C1168&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="n">D5424&lt;/span> &lt;span class="mi">20&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">lea&lt;/span> &lt;span class="n">rdx&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ss&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="n">rsp&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">20&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C116D&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="n">D0D&lt;/span> &lt;span class="n">A8100000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">lea&lt;/span> &lt;span class="n">rcx&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ds&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="mf">7FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C221C&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="nl">A16C221C&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s">&amp;#34;%256s&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C1174&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">E8&lt;/span> &lt;span class="n">A7000000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">call&lt;/span> &lt;span class="n">chall5&lt;/span>&lt;span class="mf">.7F&lt;/span>&lt;span class="n">F6A16C1220&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C1179&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="n">D4C24&lt;/span> &lt;span class="mi">20&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">lea&lt;/span> &lt;span class="n">rcx&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ss&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="n">rsp&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">20&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C117E&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">E8&lt;/span> &lt;span class="mi">7&lt;/span>&lt;span class="n">DFEFFFF&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">call&lt;/span> &lt;span class="n">chall5&lt;/span>&lt;span class="mf">.7F&lt;/span>&lt;span class="n">F6A16C1000&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C1183&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">85&lt;/span>&lt;span class="n">C0&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">test&lt;/span> &lt;span class="n">eax&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">eax&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C1185&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">74&lt;/span> &lt;span class="mf">0F&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">je&lt;/span> &lt;span class="n">chall5&lt;/span>&lt;span class="mf">.7F&lt;/span>&lt;span class="n">F6A16C1196&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C1187&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="n">D0D&lt;/span> &lt;span class="mi">9&lt;/span>&lt;span class="n">A100000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">lea&lt;/span> &lt;span class="n">rcx&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ds&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="mf">7FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C2228&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="nl">A16C2228&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s">&amp;#34;Correct&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C118E&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">FF15&lt;/span> &lt;span class="n">F40F0000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">call&lt;/span> &lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ds&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="o">&amp;lt;&amp;amp;&lt;/span>&lt;span class="n">puts&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C1194&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">EB&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="n">D&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">jmp&lt;/span> &lt;span class="n">chall5&lt;/span>&lt;span class="mf">.7F&lt;/span>&lt;span class="n">F6A16C11A3&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C1196&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="n">D0D&lt;/span> &lt;span class="mi">93100000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">lea&lt;/span> &lt;span class="n">rcx&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ds&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="mf">7FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C2230&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="nl">A16C2230&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s">&amp;#34;Wrong&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C119D&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">FF15&lt;/span> &lt;span class="n">E50F0000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">call&lt;/span> &lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ds&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="o">&amp;lt;&amp;amp;&lt;/span>&lt;span class="n">puts&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C11A3&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">33&lt;/span>&lt;span class="n">C0&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">xor&lt;/span> &lt;span class="n">eax&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">eax&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C11A5&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="n">B8C24&lt;/span> &lt;span class="mi">20010000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">mov&lt;/span> &lt;span class="n">rcx&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">qword&lt;/span> &lt;span class="n">ptr&lt;/span> &lt;span class="nl">ss&lt;/span>&lt;span class="p">:[&lt;/span>&lt;span class="n">rsp&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">120&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C11AD&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">33&lt;/span>&lt;span class="n">CC&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">xor&lt;/span> &lt;span class="n">rcx&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">rsp&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C11B0&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">E8&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="n">B010000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">call&lt;/span> &lt;span class="n">chall5&lt;/span>&lt;span class="mf">.7F&lt;/span>&lt;span class="n">F6A16C1310&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C11B5&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mi">81&lt;/span>&lt;span class="n">C4&lt;/span> &lt;span class="mi">30010000&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">add&lt;/span> &lt;span class="n">rsp&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">130&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C11BC&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mf">5F&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">pop&lt;/span> &lt;span class="n">rdi&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="nl">rdi&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;샰櫚Ʊ&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">00007FF&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">A16C11BD&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">C3&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">ret&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>다음과 같은 형태의 바이너리이다. 여기서 문자열을 입력 받고 정답임을 검사하는 함수의 위치는 00007FF6A16C117E 이다. 임의 값을 넣고 함수에 bp를 걸어 동작을 확인해보자.&lt;/p></description><content:encoded><![CDATA[<p>이번 문제는 드림핵 리버싱문제 rev-basic-5이다. 확실히 베이직 문제이다 보니 약간의 분석과정만 거치면 풀이법이 보여 쉬운편에 속했다.</p>
<p>우선 exe 파일을 다운 받으면 chall5.exe라는 바이너리가 다운로드 된다. 이후 이 바이너리를 실행 시키면</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">input : 
</span></span></code></pre></div><p>구문으로 문자열을 입력 받고 맞으면 Correct 틀리면 Wrong이라는 문자열을 출력한다.</p>
<p><br><br></p>
<p>이제 이 바이너리를 x64 디버거로 분석 해보자.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1130</span> <span class="o">|</span> <span class="mi">40</span><span class="o">:</span><span class="mi">57</span>                    <span class="o">|</span> <span class="n">push</span> <span class="n">rdi</span>                                <span class="o">|</span> <span class="nl">rdi</span><span class="p">:</span><span class="sa">L</span><span class="s">&#34;샰櫚Ʊ&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1132</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">81</span><span class="n">EC</span> <span class="mi">30010000</span>         <span class="o">|</span> <span class="n">sub</span> <span class="n">rsp</span><span class="p">,</span><span class="mi">130</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1139</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">B05</span> <span class="n">E81E0000</span>         <span class="o">|</span> <span class="n">mov</span> <span class="n">rax</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="mf">7FF</span><span class="mi">6</span><span class="n">A16C3028</span><span class="p">]</span>     <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1140</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">33</span><span class="n">C4</span>                  <span class="o">|</span> <span class="n">xor</span> <span class="n">rax</span><span class="p">,</span><span class="n">rsp</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1143</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">898424</span> <span class="mi">20010000</span>       <span class="o">|</span> <span class="n">mov</span> <span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">120</span><span class="p">],</span><span class="n">rax</span>          <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C114B</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D4424</span> <span class="mi">20</span>             <span class="o">|</span> <span class="n">lea</span> <span class="n">rax</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">20</span><span class="p">]</span>           <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1150</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">BF8</span>                  <span class="o">|</span> <span class="n">mov</span> <span class="n">rdi</span><span class="p">,</span><span class="n">rax</span>                             <span class="o">|</span> <span class="nl">rdi</span><span class="p">:</span><span class="sa">L</span><span class="s">&#34;샰櫚Ʊ&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1153</span> <span class="o">|</span> <span class="mi">33</span><span class="n">C0</span>                     <span class="o">|</span> <span class="n">xor</span> <span class="n">eax</span><span class="p">,</span><span class="n">eax</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1155</span> <span class="o">|</span> <span class="n">B9</span> <span class="mo">00010000</span>              <span class="o">|</span> <span class="n">mov</span> <span class="n">ecx</span><span class="p">,</span><span class="mi">100</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C115A</span> <span class="o">|</span> <span class="nl">F3</span><span class="p">:</span><span class="n">AA</span>                    <span class="o">|</span> <span class="n">rep</span> <span class="n">stosb</span>                               <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C115C</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D0D</span> <span class="n">AD100000</span>         <span class="o">|</span> <span class="n">lea</span> <span class="n">rcx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="mf">7FF</span><span class="mi">6</span><span class="n">A16C2210</span><span class="p">]</span>     <span class="o">|</span> <span class="mf">00007FF</span><span class="mi">6</span><span class="nl">A16C2210</span><span class="p">:</span><span class="s">&#34;Input : &#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1163</span> <span class="o">|</span> <span class="n">E8</span> <span class="mi">58000000</span>              <span class="o">|</span> <span class="n">call</span> <span class="n">chall5</span><span class="mf">.7F</span><span class="n">F6A16C11C0</span>                <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1168</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D5424</span> <span class="mi">20</span>             <span class="o">|</span> <span class="n">lea</span> <span class="n">rdx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">20</span><span class="p">]</span>           <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C116D</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D0D</span> <span class="n">A8100000</span>         <span class="o">|</span> <span class="n">lea</span> <span class="n">rcx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="mf">7FF</span><span class="mi">6</span><span class="n">A16C221C</span><span class="p">]</span>     <span class="o">|</span> <span class="mf">00007FF</span><span class="mi">6</span><span class="nl">A16C221C</span><span class="p">:</span><span class="s">&#34;%256s&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1174</span> <span class="o">|</span> <span class="n">E8</span> <span class="n">A7000000</span>              <span class="o">|</span> <span class="n">call</span> <span class="n">chall5</span><span class="mf">.7F</span><span class="n">F6A16C1220</span>                <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1179</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D4C24</span> <span class="mi">20</span>             <span class="o">|</span> <span class="n">lea</span> <span class="n">rcx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">20</span><span class="p">]</span>           <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C117E</span> <span class="o">|</span> <span class="n">E8</span> <span class="mi">7</span><span class="n">DFEFFFF</span>              <span class="o">|</span> <span class="n">call</span> <span class="n">chall5</span><span class="mf">.7F</span><span class="n">F6A16C1000</span>                <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1183</span> <span class="o">|</span> <span class="mi">85</span><span class="n">C0</span>                     <span class="o">|</span> <span class="n">test</span> <span class="n">eax</span><span class="p">,</span><span class="n">eax</span>                            <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1185</span> <span class="o">|</span> <span class="mi">74</span> <span class="mf">0F</span>                    <span class="o">|</span> <span class="n">je</span> <span class="n">chall5</span><span class="mf">.7F</span><span class="n">F6A16C1196</span>                  <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1187</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D0D</span> <span class="mi">9</span><span class="n">A100000</span>         <span class="o">|</span> <span class="n">lea</span> <span class="n">rcx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="mf">7FF</span><span class="mi">6</span><span class="n">A16C2228</span><span class="p">]</span>     <span class="o">|</span> <span class="mf">00007FF</span><span class="mi">6</span><span class="nl">A16C2228</span><span class="p">:</span><span class="s">&#34;Correct&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C118E</span> <span class="o">|</span> <span class="n">FF15</span> <span class="n">F40F0000</span>            <span class="o">|</span> <span class="n">call</span> <span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="o">&lt;&amp;</span><span class="n">puts</span><span class="o">&gt;</span><span class="p">]</span>             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1194</span> <span class="o">|</span> <span class="n">EB</span> <span class="mi">0</span><span class="n">D</span>                    <span class="o">|</span> <span class="n">jmp</span> <span class="n">chall5</span><span class="mf">.7F</span><span class="n">F6A16C11A3</span>                 <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1196</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D0D</span> <span class="mi">93100000</span>         <span class="o">|</span> <span class="n">lea</span> <span class="n">rcx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="mf">7FF</span><span class="mi">6</span><span class="n">A16C2230</span><span class="p">]</span>     <span class="o">|</span> <span class="mf">00007FF</span><span class="mi">6</span><span class="nl">A16C2230</span><span class="p">:</span><span class="s">&#34;Wrong&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C119D</span> <span class="o">|</span> <span class="n">FF15</span> <span class="n">E50F0000</span>            <span class="o">|</span> <span class="n">call</span> <span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="o">&lt;&amp;</span><span class="n">puts</span><span class="o">&gt;</span><span class="p">]</span>             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C11A3</span> <span class="o">|</span> <span class="mi">33</span><span class="n">C0</span>                     <span class="o">|</span> <span class="n">xor</span> <span class="n">eax</span><span class="p">,</span><span class="n">eax</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C11A5</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">B8C24</span> <span class="mi">20010000</span>       <span class="o">|</span> <span class="n">mov</span> <span class="n">rcx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">120</span><span class="p">]</span>          <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C11AD</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">33</span><span class="n">CC</span>                  <span class="o">|</span> <span class="n">xor</span> <span class="n">rcx</span><span class="p">,</span><span class="n">rsp</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C11B0</span> <span class="o">|</span> <span class="n">E8</span> <span class="mi">5</span><span class="n">B010000</span>              <span class="o">|</span> <span class="n">call</span> <span class="n">chall5</span><span class="mf">.7F</span><span class="n">F6A16C1310</span>                <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C11B5</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">81</span><span class="n">C4</span> <span class="mi">30010000</span>         <span class="o">|</span> <span class="n">add</span> <span class="n">rsp</span><span class="p">,</span><span class="mi">130</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C11BC</span> <span class="o">|</span> <span class="mf">5F</span>                       <span class="o">|</span> <span class="n">pop</span> <span class="n">rdi</span>                                 <span class="o">|</span> <span class="nl">rdi</span><span class="p">:</span><span class="sa">L</span><span class="s">&#34;샰櫚Ʊ&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C11BD</span> <span class="o">|</span> <span class="n">C3</span>                       <span class="o">|</span> <span class="n">ret</span>                                     <span class="o">|</span>
</span></span></code></pre></div><p>다음과 같은 형태의 바이너리이다. 여기서 문자열을 입력 받고 정답임을 검사하는 함수의 위치는 00007FF6A16C117E 이다. 임의 값을 넣고 함수에 bp를 걸어 동작을 확인해보자.</p>
<p>AAAAA 라는 문자열을 입력 하였고 정답을 검증하는 함수의 어셈블리는 다음과 같다.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1000</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">894</span><span class="n">C24</span> <span class="mi">08</span>             <span class="o">|</span> <span class="n">mov</span> <span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">8</span><span class="p">],</span><span class="n">rcx</span>            <span class="o">|</span> <span class="p">[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">8</span><span class="p">]</span><span class="o">:</span><span class="s">&#34;%256s&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1005</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">83</span><span class="n">EC</span> <span class="mi">18</span>               <span class="o">|</span> <span class="n">sub</span> <span class="n">rsp</span><span class="p">,</span><span class="mi">18</span>                              <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1009</span> <span class="o">|</span> <span class="n">C70424</span> <span class="mo">00000000</span>          <span class="o">|</span> <span class="n">mov</span> <span class="n">dword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="p">],</span><span class="mi">0</span>                <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1010</span> <span class="o">|</span> <span class="n">EB</span> <span class="mi">08</span>                    <span class="o">|</span> <span class="n">jmp</span> <span class="n">chall5</span><span class="mf">.7F</span><span class="n">F6A16C101A</span>                 <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1012</span> <span class="o">|</span> <span class="mi">8</span><span class="n">B0424</span>                   <span class="o">|</span> <span class="n">mov</span> <span class="n">eax</span><span class="p">,</span><span class="n">dword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="p">]</span>              <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1015</span> <span class="o">|</span> <span class="n">FFC0</span>                     <span class="o">|</span> <span class="n">inc</span> <span class="n">eax</span>                                 <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1017</span> <span class="o">|</span> <span class="mi">890424</span>                   <span class="o">|</span> <span class="n">mov</span> <span class="n">dword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="p">],</span><span class="n">eax</span>              <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C101A</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">630424</span>                <span class="o">|</span> <span class="n">movsxd</span> <span class="n">rax</span><span class="p">,</span><span class="n">dword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="p">]</span>           <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C101E</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mf">83F</span><span class="mi">8</span> <span class="mi">18</span>               <span class="o">|</span> <span class="n">cmp</span> <span class="n">rax</span><span class="p">,</span><span class="mi">18</span>                              <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1022</span> <span class="o">|</span> <span class="mi">73</span> <span class="mi">39</span>                    <span class="o">|</span> <span class="n">jae</span> <span class="n">chall5</span><span class="mf">.7F</span><span class="n">F6A16C105D</span>                 <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1024</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">630424</span>                <span class="o">|</span> <span class="n">movsxd</span> <span class="n">rax</span><span class="p">,</span><span class="n">dword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="p">]</span>           <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1028</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">B4C24</span> <span class="mi">20</span>             <span class="o">|</span> <span class="n">mov</span> <span class="n">rcx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">20</span><span class="p">]</span>           <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C102D</span> <span class="o">|</span> <span class="mf">0F</span><span class="n">B60401</span>                 <span class="o">|</span> <span class="n">movzx</span> <span class="n">eax</span><span class="p">,</span><span class="n">byte</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="n">rcx</span><span class="o">+</span><span class="n">rax</span><span class="p">]</span>         <span class="o">|</span> <span class="n">rcx</span><span class="o">+</span><span class="n">rax</span><span class="o">*</span><span class="mi">1</span><span class="o">:</span><span class="s">&#34;AAAA&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1031</span> <span class="o">|</span> <span class="mi">8</span><span class="n">B0C24</span>                   <span class="o">|</span> <span class="n">mov</span> <span class="n">ecx</span><span class="p">,</span><span class="n">dword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="p">]</span>              <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1034</span> <span class="o">|</span> <span class="n">FFC1</span>                     <span class="o">|</span> <span class="n">inc</span> <span class="n">ecx</span>                                 <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1036</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">63</span><span class="n">C9</span>                  <span class="o">|</span> <span class="n">movsxd</span> <span class="n">rcx</span><span class="p">,</span><span class="n">ecx</span>                          <span class="o">|</span> <span class="nl">rcx</span><span class="p">:</span><span class="s">&#34;AAAAA&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1039</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">B5424</span> <span class="mi">20</span>             <span class="o">|</span> <span class="n">mov</span> <span class="n">rdx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="o">+</span><span class="mi">20</span><span class="p">]</span>           <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C103E</span> <span class="o">|</span> <span class="mf">0F</span><span class="n">B60C0A</span>                 <span class="o">|</span> <span class="n">movzx</span> <span class="n">ecx</span><span class="p">,</span><span class="n">byte</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="n">rdx</span><span class="o">+</span><span class="n">rcx</span><span class="p">]</span>         <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1042</span> <span class="o">|</span> <span class="mo">03</span><span class="n">C1</span>                     <span class="o">|</span> <span class="n">add</span> <span class="n">eax</span><span class="p">,</span><span class="n">ecx</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1044</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">630</span><span class="n">C24</span>                <span class="o">|</span> <span class="n">movsxd</span> <span class="n">rcx</span><span class="p">,</span><span class="n">dword</span> <span class="n">ptr</span> <span class="nl">ss</span><span class="p">:[</span><span class="n">rsp</span><span class="p">]</span>           <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1048</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">8</span><span class="n">D15</span> <span class="n">B11F0000</span>         <span class="o">|</span> <span class="n">lea</span> <span class="n">rdx</span><span class="p">,</span><span class="n">qword</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="mf">7FF</span><span class="mi">6</span><span class="n">A16C3000</span><span class="p">]</span>     <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C104F</span> <span class="o">|</span> <span class="mf">0F</span><span class="n">B60C0A</span>                 <span class="o">|</span> <span class="n">movzx</span> <span class="n">ecx</span><span class="p">,</span><span class="n">byte</span> <span class="n">ptr</span> <span class="nl">ds</span><span class="p">:[</span><span class="n">rdx</span><span class="o">+</span><span class="n">rcx</span><span class="p">]</span>         <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1053</span> <span class="o">|</span> <span class="mi">3</span><span class="n">BC1</span>                     <span class="o">|</span> <span class="n">cmp</span> <span class="n">eax</span><span class="p">,</span><span class="n">ecx</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1055</span> <span class="o">|</span> <span class="mi">74</span> <span class="mo">04</span>                    <span class="o">|</span> <span class="n">je</span> <span class="n">chall5</span><span class="mf">.7F</span><span class="n">F6A16C105B</span>                  <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1057</span> <span class="o">|</span> <span class="mi">33</span><span class="n">C0</span>                     <span class="o">|</span> <span class="n">xor</span> <span class="n">eax</span><span class="p">,</span><span class="n">eax</span>                             <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1059</span> <span class="o">|</span> <span class="n">EB</span> <span class="mo">07</span>                    <span class="o">|</span> <span class="n">jmp</span> <span class="n">chall5</span><span class="mf">.7F</span><span class="n">F6A16C1062</span>                 <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C105B</span> <span class="o">|</span> <span class="n">EB</span> <span class="n">B5</span>                    <span class="o">|</span> <span class="n">jmp</span> <span class="n">chall5</span><span class="mf">.7F</span><span class="n">F6A16C1012</span>                 <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C105D</span> <span class="o">|</span> <span class="n">B8</span> <span class="mo">01000000</span>              <span class="o">|</span> <span class="n">mov</span> <span class="n">eax</span><span class="p">,</span><span class="mi">1</span>                               <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1062</span> <span class="o">|</span> <span class="mi">48</span><span class="o">:</span><span class="mi">83</span><span class="n">C4</span> <span class="mi">18</span>               <span class="o">|</span> <span class="n">add</span> <span class="n">rsp</span><span class="p">,</span><span class="mi">18</span>                              <span class="o">|</span>
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">6</span><span class="n">A16C1066</span> <span class="o">|</span> <span class="n">C3</span>                       <span class="o">|</span> <span class="n">ret</span>                                     <span class="o">|</span>
</span></span></code></pre></div><p>00007FF6A16C1039 부터 00007FF6A16C1053 부분이 주요 부분이고 이 부분을 분석해보면 첫번째 사이클에서 입력받은 첫번째 문자열의 아스키코드 값과 두번째 아스키코드 값을 서로 더하여 7FF6A16C3000에 위치하는 hex값과 비교하는 절차를 가지고 있다.</p>
<p>이걸 분석 해보면 다양한 경우의 수가 나올것 같다. 우선 수기로 검증을 해보고 파이선 코드를 작성해 A부터 Z까지 넣었을 경우의 경우의 수를 전부 출력했다.</p>
<p>코드는 다음과 같다.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">a</span> <span class="o">=</span> <span class="p">[</span><span class="mh">0xAD</span><span class="p">,</span> <span class="mh">0xD8</span><span class="p">,</span> <span class="mh">0xCB</span><span class="p">,</span> <span class="mh">0xCB</span><span class="p">,</span> <span class="mh">0x9D</span><span class="p">,</span> <span class="mh">0x97</span><span class="p">,</span> <span class="mh">0xCB</span><span class="p">,</span> <span class="mh">0xC4</span><span class="p">,</span> <span class="mh">0x92</span><span class="p">,</span> <span class="mh">0xA1</span><span class="p">,</span> <span class="mh">0xD2</span><span class="p">,</span> <span class="mh">0xD7</span><span class="p">,</span> <span class="mh">0xD2</span><span class="p">,</span> <span class="mh">0xD6</span><span class="p">,</span> <span class="mh">0xA8</span><span class="p">,</span> <span class="mh">0xA5</span><span class="p">,</span> <span class="mh">0xDC</span><span class="p">,</span> <span class="mh">0xC7</span><span class="p">,</span> <span class="mh">0xAD</span><span class="p">,</span> <span class="mh">0xA3</span><span class="p">,</span> <span class="mh">0xA1</span><span class="p">,</span> <span class="mh">0x98</span><span class="p">,</span> <span class="mh">0x4C</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">start</span> <span class="o">=</span> <span class="mh">0x00</span>
</span></span><span class="line"><span class="cl"><span class="n">temp</span> <span class="o">=</span> <span class="mh">0x00</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">b</span> <span class="o">=</span> <span class="mh">0x41</span>
</span></span><span class="line"><span class="cl"><span class="k">while</span><span class="p">(</span><span class="n">b</span><span class="o">&lt;</span><span class="mh">0x5b</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="n">start</span> <span class="o">=</span> <span class="n">b</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;start : &#34;</span><span class="o">+</span><span class="nb">chr</span><span class="p">(</span><span class="n">b</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">a</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="n">temp</span> <span class="o">=</span> <span class="n">i</span> <span class="o">-</span> <span class="n">start</span>
</span></span><span class="line"><span class="cl">                <span class="nb">print</span> <span class="p">(</span><span class="nb">chr</span><span class="p">(</span><span class="n">start</span><span class="p">),</span> <span class="n">end</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                <span class="n">start</span> <span class="o">=</span> <span class="n">temp</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;</span><span class="se">\n\n</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="n">b</span> <span class="o">=</span> <span class="n">b</span><span class="o">+</span><span class="mi">1</span>
</span></span></code></pre></div><p>위 코드는 [목표값 = 첫번째 값 + 두번째 값] 와 [두번째 값 = 목표값 - 첫번째 값] 이 동일하다는 간단한 식으로 작성하였다. 변수 a는 7FF6A16C3000에 들어있는 목표값 들이고 시작 아스키 코드를 A에 해당하는 hex 0x41로 주어 반복문을 돌렸다.</p>
<p>이후 결과는 다음과 같다.</p>
<center><img src="/img/dreamhack-reb-basic-5/result.png" width="80%" height="80%"></center>
<p>딱 보면 정답같아 보이는 부분이 있다.
A로 시작하는 부분이 플레그 값이다.</p>
]]></content:encoded></item><item><title>Dreamhack rev-basic-4 문제풀이</title><link>https://dig06161.github.io/2022/03/11/dreamhack-rev-basic-4-writeup/</link><pubDate>Fri, 11 Mar 2022 21:00:00 +0900</pubDate><guid>https://dig06161.github.io/2022/03/11/dreamhack-rev-basic-4-writeup/</guid><description>&lt;p>이번 문제는 드림핵 리버싱문제 rev-basic-4이다.&lt;/p>
&lt;p>우선 문제파일을 다운받으면 chall4.exe라는 프로그램이 나온다.
이 프로그램을 실행 시키면 iput : 이라는 문구와 함께 입력창이 활성화 된다. 이후 임의 문자열을 입력하면 Wrong이라는 문자열을 표시하고 종료된다.&lt;/p>
&lt;p>이제 이 프로그램을 x64디버거로 열어보자.
&lt;br>&lt;/p>
&lt;center>&lt;img src="https://dig06161.github.io/img/dreamhack-reb-basic-4/x64_main.png" width="80%" height="80%">&lt;/center>
&lt;p>이 프로그램의 main부분이다 input 이후에&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c++" data-lang="c++">&lt;span class="line">&lt;span class="cl">&lt;span class="n">call&lt;/span> &lt;span class="n">chall4&lt;/span>&lt;span class="mf">.7F&lt;/span>&lt;span class="n">F68AC31000&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>부분에서 문자열을 비교해 je 명령어로 Correct와 Wrong을 나눠준다.&lt;/p>
&lt;p>이부분에 bp를 걸고 쭉 진행해 임의의 문자열을 입력하고 내용을 보자.&lt;/p>
&lt;center>&lt;img src="https://dig06161.github.io/img/dreamhack-reb-basic-4/func_in.png" width="80%" height="80%">&lt;/center>
위와같은 함수의 어셈블리가 보여진다.
&lt;p>간단히 돌려보며 해석을 해보자. 일단 임의값을 &amp;ldquo;AAAAA&amp;quot;로 입력했다.&lt;/p></description><content:encoded><![CDATA[<p>이번 문제는 드림핵 리버싱문제 rev-basic-4이다.</p>
<p>우선 문제파일을 다운받으면 chall4.exe라는 프로그램이 나온다.
이 프로그램을 실행 시키면 iput : 이라는 문구와 함께 입력창이 활성화 된다. 이후 임의 문자열을 입력하면 Wrong이라는 문자열을 표시하고 종료된다.</p>
<p>이제 이 프로그램을 x64디버거로 열어보자.
<br></p>
<center><img src="/img/dreamhack-reb-basic-4/x64_main.png" width="80%" height="80%"></center>
<p>이 프로그램의 main부분이다 input 이후에</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">call</span> <span class="n">chall4</span><span class="mf">.7F</span><span class="n">F68AC31000</span>
</span></span></code></pre></div><p>부분에서 문자열을 비교해 je 명령어로 Correct와 Wrong을 나눠준다.</p>
<p>이부분에 bp를 걸고 쭉 진행해 임의의 문자열을 입력하고 내용을 보자.</p>
<center><img src="/img/dreamhack-reb-basic-4/func_in.png" width="80%" height="80%"></center>
위와같은 함수의 어셈블리가 보여진다.
<p>간단히 돌려보며 해석을 해보자. 일단 임의값을 &ldquo;AAAAA&quot;로 입력했다.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">jae</span> <span class="n">chall4</span><span class="mf">.7F</span><span class="n">F68AC31065</span>
</span></span></code></pre></div><p>위 명령어를 통해 반복문을 진행하며 한글자씩 불러 검사하는 로직이다.</p>
<p>간단한 해석을 붙이면 입력받은 문자열을 AAAAA라고 했을때, 입력받은 문자열의 첫번째 글자를 오른쪽으로 4만큼 시프트 연산한 후 eax에 넣는다. 이후 입력받은 문자열의 첫번째 글자 A를 왼쪽으로 4만큼 시프트 연산 이후 F0와 AND연산 후 ecx에 넣는다. 그다음 eax와 ecx를 OR연산하여 eax에 넣고 7FF68AC33000에 위치한 문자열의 첫번째 글자를 불러 ecx에 넣는다. 이후 cmp명령어를 통해 서로 일치할 경우 jmp를 통해 두번째 문자열의 비교를 시작한다.
<br><br>
그러면 문자열 A를 직접 계산기를 이용해 계산해보자. A의 hex값은 41이며 이진수로 표현하면 0100 0001이다. 41를 위 계산을 통해나온 결과를 보면 0001 0100이라는 값을 가지고 있다.</p>
<p>다른 숫자로 몇번 더 계산을 해보면 hex또는 2진수의 좌우를 바꿔주는것을 볼수 있다.
<br><br>
그러면 7FF68AC33000에 위치한 문자열들의 hex값의 좌우를 바꿔주면 쉽게 flag를 구할 수 있다.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">68</span><span class="n">AC33000</span>  <span class="mi">24</span> <span class="mi">27</span> <span class="mi">13</span> <span class="n">C6</span> <span class="n">C6</span> <span class="mi">13</span> <span class="mi">16</span> <span class="n">E6</span> <span class="mi">47</span> <span class="n">F5</span> <span class="mi">26</span> <span class="mi">96</span> <span class="mi">47</span> <span class="n">F5</span> <span class="mi">46</span> <span class="mi">27</span>  <span class="err">$&#39;</span><span class="p">.</span><span class="err">ÆÆ</span><span class="p">..</span><span class="err">æ</span><span class="n">Gõ</span><span class="o">&amp;</span><span class="p">.</span><span class="n">GõF</span><span class="err">&#39;</span>  
</span></span><span class="line"><span class="cl"><span class="mf">00007FF</span><span class="mi">68</span><span class="n">AC33010</span>  <span class="mi">13</span> <span class="mi">26</span> <span class="mi">26</span> <span class="n">C6</span> <span class="mi">56</span> <span class="n">F5</span> <span class="n">C3</span> <span class="n">C3</span> <span class="n">F5</span> <span class="n">E3</span> <span class="n">E3</span> <span class="mo">00</span> <span class="mo">00</span> <span class="mo">00</span> <span class="mo">00</span> <span class="mo">00</span>  <span class="p">.</span><span class="o">&amp;&amp;</span><span class="err">Æ</span><span class="n">VõÃÃõãã</span><span class="p">.....</span>  
</span></span></code></pre></div><p>위의 hex값을 파이썬을 이용해 좌우 자릿수를 바꿔보자.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">a</span> <span class="o">=</span> <span class="p">[</span><span class="mh">0x24</span><span class="p">,</span><span class="mh">0x27</span><span class="p">,</span><span class="mh">0x13</span><span class="p">,</span><span class="mh">0xC6</span><span class="p">,</span><span class="mh">0xC6</span><span class="p">,</span><span class="mh">0x13</span><span class="p">,</span><span class="mh">0x16</span><span class="p">,</span><span class="mh">0xE6</span><span class="p">,</span><span class="mh">0x47</span><span class="p">,</span><span class="mh">0xF5</span><span class="p">,</span><span class="mh">0x26</span><span class="p">,</span><span class="mh">0x96</span><span class="p">,</span><span class="mh">0x47</span><span class="p">,</span><span class="mh">0xF5</span><span class="p">,</span><span class="mh">0x46</span><span class="p">,</span><span class="mh">0x27</span><span class="p">,</span><span class="mh">0x13</span><span class="p">,</span><span class="mh">0x26</span><span class="p">,</span><span class="mh">0x26</span><span class="p">,</span><span class="mh">0xC6</span><span class="p">,</span><span class="mh">0x56</span><span class="p">,</span><span class="mh">0xF5</span><span class="p">,</span><span class="mh">0xC3</span><span class="p">,</span><span class="mh">0xC3</span><span class="p">,</span><span class="mh">0xF5</span><span class="p">,</span><span class="mh">0xE3</span><span class="p">,</span><span class="mh">0xE3</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">a</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">b</span> <span class="o">=</span> <span class="n">i</span> <span class="o">&gt;&gt;</span> <span class="mi">4</span>
</span></span><span class="line"><span class="cl">        <span class="n">c</span> <span class="o">=</span> <span class="n">i</span> <span class="o">%</span> <span class="mh">0x10</span>
</span></span><span class="line"><span class="cl">        <span class="n">result</span> <span class="o">=</span> <span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="mh">0x10</span><span class="p">)</span><span class="o">+</span><span class="n">b</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span> <span class="p">(</span><span class="nb">chr</span><span class="p">(</span><span class="n">result</span><span class="p">),</span> <span class="n">end</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s2">&#34;</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span></code></pre></div><p>위 코드는 16진수 배열을 하나씩 불러와 자리수를 서로 바꿔준 후 아스키코드 문자열로 출력해주는 코드이다. 예를 들면 16진수 24를 42로 바꾸어 42에 해당하는 아스키코드인 &ldquo;B&quot;를 출력한다.</p>
<p>위 코드를 돌리면 플레그 값을 얻을 수 있다.</p>
]]></content:encoded></item></channel></rss>