{"id":38,"date":"2026-04-14T15:14:52","date_gmt":"2026-04-14T07:14:52","guid":{"rendered":"https:\/\/www.seekinthevortex.cn\/?p=38"},"modified":"2026-04-14T15:14:52","modified_gmt":"2026-04-14T07:14:52","slug":"l3hctf-%e5%a4%8d%e7%8e%b0","status":"publish","type":"post","link":"https:\/\/www.seekinthevortex.cn\/index.php\/2026\/04\/14\/l3hctf-%e5%a4%8d%e7%8e%b0\/","title":{"rendered":"L3HCTF \u590d\u73b0"},"content":{"rendered":"<h1>TemporalParadox<\/h1>\n<p>\u6839\u636eida\u7684\u62a5\u9519 patch\u6389\u82b1\u6307\u4ee4\u4e4b\u540e\u8fd8\u539f\u4ee3\u7801\u7206\u7834\u5373\u53ef<br \/>\n\u53ef\u60dc\u5f53\u65f6\u505a\u7684\u65f6\u5019\u6ca1\u6709\u770b\u51fa\u82b1\u6307\u4ee4,\u7136\u540e\u60f3\u901a\u8fc7Frida Hook\u51fd\u6570\u7206\u7834,\u7136\u540e\u5c31\u6ca1\u5199\u51fa\u6765\u545c\u545c(\u252d\u252e\ufe4f\u252d\u252e)<\/p>\n<p>(\u4e8b\u5b9e\u8bc1\u660eFrida\u7206\u7834\u4e5f\u662f\u4e00\u79cd\u53ef\u884c\u7684\u65b9\u5f0f,\u9700\u8981hook time64() \u51fd\u6570,\u5e76\u901a\u8fc7\u591a\u8fdb\u7a0b\u7684\u65b9\u5f0f\u7206\u7834)<\/p>\n<p><code>main.cpp<\/code><\/p>\n<pre><code class=\"language-cpp\">#include &lt;iostream&gt;\n#include &lt;string&gt;\n#include &lt;Windows.h&gt;\n#include &lt;cmath&gt;\n#include &lt;sstream&gt;\n#include &quot;md5.h&quot;\n\nusing namespace std;\n\nunsigned int time0 = 0;\n\nunsigned int arr[] = {\n\t0xCC, 0xB4, 0xFFFFFF94, 0xFFFFFF86, 0xFFFFFF9A, 0xFFFFFF8A, 0xFFFFFF9A, 0xFFFFFF8E, 0xFFE7AC2D, \n\t0xA2,0xFFFFFF9A, 0xAE, 0xFFB70487, 0xD2, 0xCC, 0xDE, 0xFFFFFF96, 0xCC, 0xCC, 0xFFFFE65F, 0xFFF7E40F, \n\t0xFFFFFF86, 0xB4, 0xFFFFE65F, 0xFFFF1957, 0xFFFFFF94, 0xFFFFFF8C, 0xFFFFFF88, 0xC6, 0xFFFFFF98, \n\t0xFFFFFF92, 0xFFFD4C05\n};\n\n\/\/ ========== \u5168\u5c40\u67e5\u8868\u8868\uff08\u6839\u636e\u5b9e\u9645\u503c\u521d\u59cb\u5316\uff09 ==========\nuint8_t SBox[16] = { 0xE,0x4,0xD,0x1,0x2,0xF,0xB,0x8,0x3,0xA,0x6,0xC,0x5,0x9,0x0,0x7 };        \/\/ dword_7FF6ABB6C020\nuint8_t Perm[16] = { 0x1,0x5,0x9,0xD,0x2,0x6,0xA,0xE,0x3,0x7,0xB,0xF,0x4,0x8,0xC,0x10 };         \/\/ dword_7FF6ABB6C0A0\n\nint encode_0(int index, int random) {\n    return (random &lt;&lt; (4 * (index - 1))) &gt;&gt; 16;\n}\n\nint scramble(int val) {\n    for (int i = 0; i &lt; 4; ++i) {\n        int high_nibble = (val &gt;&gt; 12) &amp; 0xF;\n        val = (val &lt;&lt; 4) | SBox[high_nibble];\n    }\n    return val;\n}\n\nint permute_bits(int val) {\n    int result = 0;\n    for (int i = 0; i &lt; 16; ++i) {\n        int src_bit = (val &gt;&gt; (Perm[i] - 1)) &amp; 1;\n        result |= (src_bit &lt;&lt; i);\n    }\n    return result;\n}\n\nint mix_round(int input) {\n    int mixed = scramble(input);\n    return permute_bits(mixed);\n}\n\nuint32_t generate_cipher(uint32_t time, int random) {\n    uint32_t val = time;\n\n    \/\/ 3\u8f6e\u6270\u52a8\n    for (int i = 1; i &lt;= 3; ++i) {\n        val ^= encode_0(i, random);\n        val = mix_round(val);\n    }\n\n    \/\/ \u7b2c4\u8f6e\u5355\u72ec\u6270\u52a8\n    val ^= encode_0(4, random);\n    val = scramble(val);\n\n    \/\/ \u6700\u7ec8 XOR\n    val ^= encode_0(5, random);\n    return val;\n}\n\n\nstring init_salt() {\n\tstd::stringstream ss;\n\tfor (int i = 0; i &lt;= 31; i++) {\n\t\tint v = arr[i];\n\t\tint c;\n\n        if (v &gt;= 0)\n        {\n            c = v \/ 3 + '0';\n        }\n        else if (v &gt;= -728)\n        {\n            c = ~v;\n        }\n        else\n        {\n            double f = log(static_cast&lt;double&gt;(-v)); \/\/ \u5047\u8bbe sub_7FF6ABB631D0 \u662f log()\n            c = static_cast&lt;int&gt;(f \/ 1.09861228866811 - 6.0 + 48.0);\n        }\n\n        ss &lt;&lt; static_cast&lt;char&gt;(c);\n    }\n    return ss.str();\n}\n\nvoid init_time0(__time64_t current_time) {\n\tif (!current_time) {\n\t\ttime0 = 1;\n\t}\n\telse {\n\t\ttime0 = current_time;\n\t}\n}\n\nint encode() {\n\tunsigned int tmp;\n\n\ttmp = (((time0 &lt;&lt; 13) ^ time0) &gt;&gt; 17) ^ (time0 &lt;&lt; 13) ^ time0;\n\ttime0 = (tmp &lt;&lt; 5) ^ tmp;\n\n\treturn time0 &amp; 0x7FFFFFFF;\n}\n\nvoid bruteforce() {\n\tconst std::string target_md5 = &quot;8a2fc1e9e2830c37f8a7f51572a640aa&quot;;\n\tstring salt_str = init_salt();\n\n\tfor (__time64_t current_time = 0x686D4081; current_time &lt;= 0x686E3153; ++current_time) {\n\t\tinit_time0(current_time);\n\n\t\tunsigned int key[4] = { 0 };\n\t\tfor (int i = 0; i &lt; encode(); i++) {\n\t\t\tkey[0] = encode();\n\t\t\tkey[1] = encode();\n\t\t\tkey[2] = encode();\n\t\t\tkey[3] = encode();\n\t\t}\n\n\t\tunsigned int random_val = encode();\n\t\tdouble val_a = 0x61;\n\t\tdouble val_b = val_a * pow((key[0] | key[2]), 2.0);\n\t\tdouble val_c = 0xb;\n\n\t\tstd::stringstream ss;\n\n\t\tif (val_b == pow((key[1] | key[3]), 2.0) * val_c) {\n\t\t\tuint32_t cipher = generate_cipher(current_time, random_val);\n\n\t\t\tss &lt;&lt; &quot;salt=&quot; &lt;&lt; salt_str\n\t\t\t   &lt;&lt; &quot;&amp;t=&quot; &lt;&lt; current_time\n\t\t\t   &lt;&lt; &quot;&amp;r=&quot; &lt;&lt; random_val\n\t\t\t   &lt;&lt; &quot;&amp;cipher&quot; &lt;&lt; cipher;\n\t\t} else {\n\t\t\tss &lt;&lt; &quot;salt=&quot; &lt;&lt; salt_str\n\t\t\t   &lt;&lt; &quot;&amp;t=&quot; &lt;&lt; current_time\n\t\t\t   &lt;&lt; &quot;&amp;r=&quot; &lt;&lt; random_val\n\t\t\t   &lt;&lt; &quot;&amp;a=&quot; &lt;&lt; key[0]\n\t\t\t   &lt;&lt; &quot;&amp;b=&quot; &lt;&lt; key[1]\n\t\t\t   &lt;&lt; &quot;&amp;x=&quot; &lt;&lt; key[2]\n\t\t\t   &lt;&lt; &quot;&amp;y=&quot; &lt;&lt; key[3];\n\t\t}\n\n\t\tstd::string full = ss.str();\n\t\tstd::string hash = md5(full);\n\n\t\tif (hash == target_md5) {\n\t\t\tcout &lt;&lt; &quot;[*] Match found!&quot; &lt;&lt; endl;\n\t\t\tcout &lt;&lt; &quot;Time: &quot; &lt;&lt; current_time &lt;&lt; &quot; (0x&quot; &lt;&lt; std::hex &lt;&lt; current_time &lt;&lt; &quot;)&quot; &lt;&lt; endl;\n\t\t\tcout &lt;&lt; &quot;Raw string: &quot; &lt;&lt; full &lt;&lt; endl;\n\t\t\tcout &lt;&lt; &quot;MD5: &quot; &lt;&lt; hash &lt;&lt; endl;\n\t\t\treturn;\n\t\t}\n\t}\n\tcout &lt;&lt; &quot;[*] No match found in given time range.&quot; &lt;&lt; endl;\n}\n\nint main() {\n\tbruteforce();\n\treturn 0;\n}\n<\/code><\/pre>\n<p>\u5176\u4e2dmd5\u7684\u5b9e\u73b0\u5c31\u4e0d\u8d34\u4e0a\u6765\u4e86,\u4ece\u7f51\u4e0a\u6284\u4e00\u4efd\u5c31\u884c,\u6216\u8005\u76f4\u63a5ai\u751f\u6210.<\/p>\n<h1>\u7ec8\u7109\u4e4b\u95e8<\/h1>\n<p>\u8fd9\u9053\u9898\u76ee\u662f\u548copengl\u76f8\u5173\u7684,\u6bd4\u8d5b\u7684\u65f6\u5019\u5b8c\u5168\u4e0d\u77e5\u9053\u7740\u8272\u5668\u51fd\u6570\u903b\u8f91,\u5c31\u6ca1\u505a\u51fa\u6765(\u252d\u252e\ufe4f\u252d\u252e)<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/pic1.imgdb.cn\/item\/687e434858cb8da5c8ca0d52.png\" alt=\"\"><\/p>\n<p>\u95ee\u4e86\u4e00\u4e0bGPT,\u8fd9\u4e2a\u5e94\u8be5\u5c31\u662f\u7740\u8272\u5668\u51fd\u6570\u542f\u52a8\u7684\u5730\u65b9\u4e86,\u7136\u540e\u4ece\u522b\u4eba\u7684WP\u4e0a\u770b\u5230\u4e86\u8fd9\u91cc\u5c31\u662f\u6700\u540e\u7740\u8272\u5668\u5185\u90e8\u4ee3\u7801\u89e3\u5bc6\u51fa\u6765\u7684\u5730\u65b9<\/p>\n<pre><code class=\"language-cpp\">__int64 __fastcall sub_7FF63580E700(__int64 a1, unsigned int a2)\n{\n  __int64 v3; \/\/ rbx\n  unsigned int v4; \/\/ esi\n  char *v5; \/\/ rdi\n  __int64 v6; \/\/ rcx\n  int v8; \/\/ [rsp+24h] [rbp-24h] BYREF\n  int v9; \/\/ [rsp+28h] [rbp-20h] BYREF\n  int v10[7]; \/\/ [rsp+2Ch] [rbp-1Ch] BYREF\n  __int64 v11; \/\/ [rsp+50h] [rbp+8h] BYREF\n\n  v11 = a1;\n  v3 = qword_7FF6358F1B70(a2);\n  qword_7FF6358F09A0(v3, 1i64, &amp;v11, 0i64);\n  v8 = 0;\n  qword_7FF6358F1CA8(v3);\n  qword_7FF6358F13B0(v3, 35713i64, &amp;v8);\n  if ( !v8 )\n  {\n    switch ( a2 )\n    {\n      case 0x8B31u:\n        sub_7FF63588D460(4i64, &quot;SHADER: [ID %i] Failed to compile vertex shader code&quot;, v3);\n        break;\n      case 0x91B9u:\n        sub_7FF63588D460(4i64, &quot;SHADER: [ID %i] Failed to compile compute shader code&quot;, v3);\n        break;\n      case 0x8B30u:\n        sub_7FF63588D460(4i64, &quot;SHADER: [ID %i] Failed to compile fragment shader code&quot;, v3);\n        break;\n    }\n    v9 = 0;\n    qword_7FF6358F13B0(v3, 35716i64, &amp;v9);\n    v4 = v9;\n    if ( v9 &gt; 0 )\n    {\n      v10[0] = 0;\n      v5 = calloc(v9, 1ui64);\n      qword_7FF6358F13D0(v3, v4, v10, v5);\n      sub_7FF63588D460(4i64, &quot;SHADER: [ID %i] Compile error: %s&quot;, v3, v5);\n      free(v5);\n    }\n    v6 = v3;\n    LODWORD(v3) = 0;\n    qword_7FF6358F1A98(v6);\n    return v3;\n  }\n  switch ( a2 )\n  {\n    case 0x8B31u:\n      sub_7FF63588D460(3i64, &quot;SHADER: [ID %i] Vertex shader compiled successfully&quot;, v3);\n      return v3;\n    case 0x91B9u:\n      sub_7FF63588D460(3i64, &quot;SHADER: [ID %i] Compute shader compiled successfully&quot;, v3);\n      return v3;\n    case 0x8B30u:\n      sub_7FF63588D460(3i64, &quot;SHADER: [ID %i] Fragment shader compiled successfully&quot;, v3);\n      return v3;\n    default:\n      return v3;\n  }\n}\n<\/code><\/pre>\n<p>\u8ddf\u8e2a\u8fdb\u53bb\u53ef\u4ee5\u770b\u5230\u4e00\u5927\u4e32\u6570\u636e,\u8f6c\u5316\u6210\u6570\u7ec4\u540edump\u51fa\u6765<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/pic1.imgdb.cn\/item\/687e441758cb8da5c8ca0dad.png\" alt=\"\"><\/p>\n<pre><code class=\"language-cpp\">#version 430 core\n\nlayout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;\nlayout(std430, binding = 0) buffer OpCodes  { int opcodes[]; };\nlayout(std430, binding = 2) buffer CoConsts { int co_consts[]; };\nlayout(std430, binding = 3) buffer Cipher   { int cipher[16]; };\nlayout(std430, binding = 4) buffer Stack    { int stack_data[256]; };\nlayout(std430, binding = 5) buffer Out      { int verdict;         };\n\nconst int MaxInstructionCount = 1000;\n\n\nvoid main()\n{\n    if (gl_GlobalInvocationID.x &gt; 0) return;\n\n    uint ip = 0u;\n    int sp = 0;\n    verdict = -233;\n\n    while (ip &lt; uint(MaxInstructionCount))\n    {\n        int opcode = opcodes[int(ip)];\n        int arg    = opcodes[int(ip)+1];\n\n        switch (opcode)\n        {\n            case 2:\n                stack_data[sp++] = co_consts[arg];\n                break;\n            case 7:\n            {\n                int b = stack_data[--sp];\n                int a = stack_data[--sp];\n                stack_data[sp++] = a + b;\n                break;\n            }\n            case 8:\n            {\n                int a = stack_data[--sp];\n                int b = stack_data[--sp];\n                stack_data[sp++] = a - b;\n                break;\n            }\n            case 14:\n            {\n                int b = stack_data[--sp];\n                int a = stack_data[--sp];\n                stack_data[sp++] = a ^ b;\n                break;\n            }\n\n            case 15:\n            {\n                int b = stack_data[--sp];\n                int a = stack_data[--sp];\n                stack_data[sp++] = int(a == b);\n                break;\n            }\n\n            case 16:\n            {\n                bool ok = true;\n                for (int i = 0; i &lt; 16; i++)\n                {\n                    if (stack_data[i] != (cipher[i] - 20))\n                    { \n                        ok = false; \n                        break; \n                    }\n                }\n                verdict = ok ? 1 : -1;\n                return;\n            }\n\n            case 18:\n            {\n                int c = stack_data[--sp];\n                if (c == 0) ip = uint(arg);\n                break;\n            }\n\n            default:\n                verdict = 500;\n                return;\n        }\n\n        ip+=2;\n    }\n    verdict = 501;\n}\n\n<\/code><\/pre>\n<p>\u89c2\u5bdf\u8fd9\u91cc\u7684\u6570\u636e,\u7ed3\u5408\u91cc\u8fb9\u7684binding\u503c,\u5728\u4ee3\u7801\u4e2d\u6807\u8bb0\u51fa\u53d8\u91cf<\/p>\n<pre><code class=\"language-cpp\">layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;\nlayout(std430, binding = 0) buffer OpCodes  { int opcodes[]; };\nlayout(std430, binding = 2) buffer CoConsts { int co_consts[]; };\nlayout(std430, binding = 3) buffer Cipher   { int cipher[16]; };\nlayout(std430, binding = 4) buffer Stack    { int stack_data[256]; };\nlayout(std430, binding = 5) buffer Out      { int verdict;         }; \n<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/pic1.imgdb.cn\/item\/687e44e658cb8da5c8ca0e01.png\" alt=\"\"><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/pic1.imgdb.cn\/item\/687e451e58cb8da5c8ca0e14.png\" alt=\"\"><\/p>\n<p>\u8ddf\u8e2a\u8fdb\u53bb\u628a\u91cc\u9762\u7684\u503cdump\u51fa\u6765,\u518d\u6839\u636e\u539f\u6765\u7684\u903b\u8f91\u8fd8\u539f\u4ee3\u7801,\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u865a\u62df\u673a<\/p>\n<pre><code class=\"language-cpp\">#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n\n#define STACK_SIZE 256\n#define MAX_INSTRUCTIONS 1000\n\nunsigned char opcodes[] = {\n    0x2, 0x0, 0x2, 0x1, 0x2, 0x0, 0xE, 0x0, 0x2, 0x10, 0x8, 0x0, 0x2, 0x2, 0x2, 0x1, 0xE, 0x0, 0x2, 0x11,\n    0x8, 0x0, 0x2, 0x3, 0x2, 0x2, 0xE, 0x0, 0x2, 0x12, 0x7, 0x0, 0x2, 0x4, 0x2, 0x3, 0xE, 0x0, 0x2, 0x13,\n    0x7, 0x0, 0x2, 0x5, 0x2, 0x4, 0xE, 0x0, 0x2, 0x14, 0x8, 0x0, 0x2, 0x6, 0x2, 0x5, 0xE, 0x0, 0x2, 0x15,\n    0x7, 0x0, 0x2, 0x7, 0x2, 0x6, 0xE, 0x0, 0x2, 0x16, 0x7, 0x0, 0x2, 0x8, 0x2, 0x7, 0xE, 0x0, 0x2, 0x17,\n    0x7, 0x0, 0x2, 0x9, 0x2, 0x8, 0xE, 0x0, 0x2, 0x18, 0x7, 0x0, 0x2, 0xA, 0x2, 0x9, 0xE, 0x0, 0x2, 0x19,\n    0x7, 0x0, 0x2, 0xB, 0x2, 0xA, 0xE, 0x0, 0x2, 0x1A, 0x7, 0x0, 0x2, 0xC, 0x2, 0xB, 0xE, 0x0, 0x2, 0x1B,\n    0x8, 0x0, 0x2, 0xD, 0x2, 0xC, 0xE, 0x0, 0x2, 0x1C, 0x8, 0x0, 0x2, 0xE, 0x2, 0xD, 0xE, 0x0, 0x2, 0x1D,\n    0x7, 0x0, 0x2, 0xF, 0x2, 0xE, 0xE, 0x0, 0x2, 0x1E, 0x8, 0x0, 0x10, 0x0, 0x2, 0x10, 0x2, 0x11, 0xF, 0x0,\n    0x12, 0x54, 0x2, 0x1F, 0x1, 0x0, 0x3, 0x1\n};\n\nunsigned char co_consts[] = {\n    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n    0xB0, 0xC8, 0xFA, 0x86, 0x6E, 0x8F, 0xAF, 0xBF, 0xC9, 0x64, 0xD7, 0xC3, 0xE3, 0xEF, 0x87, 0x0\n};\n\nunsigned char cipher[] = {\n    0xF3, 0x82, 0x6, 0x1FD, 0x150, 0x38, 0xB2, 0xDE, 0x15A, 0x197, 0x9C, 0x1D7, 0x6E, 0x28, 0x146, 0x97\n};\n\nint stack[STACK_SIZE];\nint verdict = -233;\n\nint main() {\n    unsigned int ip = 0;\n    int sp = 0;\n\n    while (ip &lt; MAX_INSTRUCTIONS) {\n        int opcode = opcodes[ip];\n        int arg = opcodes[ip + 1];\n\n        printf(&quot;ip=%03d: &quot;, ip); \/\/ \u8f93\u51fa\u6307\u4ee4\u5730\u5740\n\n        switch (opcode) {\n            case 2:  \/\/ PUSH\n                stack[sp++] = co_consts[arg];\n                printf(&quot;PUSH co_consts[%d] = %d\\n&quot;, arg, co_consts[arg]);\n                break;\n\n            case 7:  \/\/ ADD\n            {\n                int b = stack[--sp];\n                int a = stack[--sp];\n                stack[sp++] = a + b;\n                printf(&quot;ADD =&gt; %d + %d = %d\\n&quot;, a, b, a + b);\n                break;\n            }\n\n            case 8:  \/\/ SUB\n            {\n                int a = stack[--sp];\n                int b = stack[--sp];\n                stack[sp++] = a - b;\n                printf(&quot;SUB =&gt; %d - %d = %d\\n&quot;, a, b, a - b);\n                break;\n            }\n\n            case 14: \/\/ XOR\n            {\n                int b = stack[--sp];\n                int a = stack[--sp];\n                stack[sp++] = a ^ b;\n                printf(&quot;XOR =&gt; %d ^ %d = %d\\n&quot;, a, b, a ^ b);\n                break;\n            }\n\n            case 15: \/\/ CMP_EQ\n            {\n                int b = stack[--sp];\n                int a = stack[--sp];\n                int eq = (a == b) ? 1 : 0;\n                stack[sp++] = eq;\n                printf(&quot;CMP_EQ =&gt; %d == %d =&gt; %d\\n&quot;, a, b, eq);\n                break;\n            }\n\n            case 16: \/\/ CHECK\n            {\n                int ok = 1;\n                for (int i = 0; i &lt; 16; ++i) {\n                    if (stack[i] != (cipher[i] - 20)) {\n                        ok = 0;\n                        break;\n                    }\n                }\n                verdict = ok ? 1 : -1;\n                printf(&quot;CHECK =&gt; %s\\n&quot;, ok ? &quot;SUCCESS&quot; : &quot;FAIL&quot;);\n                goto end;\n            }\n\n            case 18: \/\/ JUMP_IF_ZERO\n            {\n                int c = stack[--sp];\n                if (c == 0) {\n                    printf(&quot;JUMP_IF_ZERO to %d (taken)\\n&quot;, arg);\n                    ip = arg;\n                    continue;\n                } else {\n                    printf(&quot;JUMP_IF_ZERO to %d (skipped)\\n&quot;, arg);\n                }\n                break;\n            }\n\n            default:\n                verdict = 500;\n                printf(&quot;INVALID OPCODE %d at ip=%d\\n&quot;, opcode, ip);\n                goto end;\n        }\n\n        ip += 2;\n    }\n\n    verdict = 501;\n\nend:\n    printf(&quot;Verdict: %d\\n&quot;, verdict);\n    if (verdict == 1) {\n        printf(&quot;Final stack[0..15]:\\n&quot;);\n        for (int i = 0; i &lt; 16; ++i) {\n            printf(&quot;%d &quot;, stack[i]);\n        }\n        printf(&quot;\\n&quot;);\n    }\n\n    return 0;\n}\n\n<\/code><\/pre>\n<p>co_consts\u7684\u524d16\u4e2a\u5b57\u7b26\u662f\u7a7a\u7684,\u7ed3\u5408\u524d\u9762\u6211\u4eec\u8f93\u5165\u768432\u4e2a\u5b57\u7b26\u7684\u6570\u636e,\u548c\u4ee3\u7801\u5c06\u4e24\u4e2a\u5b57\u7b26\u5408\u5e76\u7684\u903b\u8f91,\u9006\u5411\u51fa\u80fd\u4f7f\u8fd9\u91cc\u7684\u4ee3\u7801\u901a\u8fc7\u68c0\u6d4b\u7684input<\/p>\n<p>L3HCTF{df6ef2e93c249eca468388c35a143283}<\/p>\n<h1>easyvm<\/h1>\n<p>\u4e3b\u51fd\u6570\u5f88\u7b80\u5355,\u6700\u91cd\u8981\u7684\u5c31\u662f\u8fd9\u4e09\u4e2a\u51fd\u6570<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/pic1.imgdb.cn\/item\/6885aaae58cb8da5c8e36ef8.png\" alt=\"\"><\/p>\n<p>\u7531\u4e8eVM\u51fd\u6570\u5185\u90e8\u4f53\u79ef\u5e9e\u5927,\u7a0b\u5e8f\u5904\u7406\u6d41\u7a0b\u4e5f\u5f88\u590d\u6742\u96be\u4ee5\u8ddf\u8e2a,\u6211\u4eec\u9009\u62e9\u8ddf\u8e2a\u8fd0\u7b97\u7b26\u7684\u6267\u884c\u6d41\u7a0b,\u67e5\u770b\u76f8\u5173\u7684\u6570\u636e\u5904\u7406\u8fc7\u7a0b,\u4ece\u800c\u63a8\u65ad\u51fa\u52a0\u5bc6\u7b97\u6cd5.<\/p>\n<p>\u5177\u4f53\u64cd\u4f5c\u89c1<a href=\"https:\/\/tkazer.github.io\/2025\/07\/14\/L3HCTF\/index.html\">L3HCTF WP | Liv&#8217;s blog<\/a>\u5e08\u5085\u7684\u535a\u5ba2<\/p>\n<p>\u8981\u8865\u5145\u7684\u662f\u4e0b\u6761\u4ef6\u65ad\u70b9\u7684\u65f6\u5019\u6ce8\u610f\u53d6\u6d88\u8fd9\u4e2a\u9009\u9879,\u8fd9\u6837\u8fd0\u884c\u65f6\u4e0d\u4f1a\u505c\u4e0b,\u65b9\u4fbf\u6211\u4eec\u67e5\u770b\u8c03\u8bd5\u4fe1\u606f<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/pic1.imgdb.cn\/item\/6885acff58cb8da5c8e3707d.png\" alt=\"\"><\/p>\n<p>\u8fd9\u91cc\u622a\u53d6\u4e00\u6bb5output\u51fa\u7684\u6570\u636e<\/p>\n<pre><code class=\"language-cpp\">91919190 = 32323232 &lt;&lt; 3;\n\/\/ input[1] &lt;&lt; 3\n36FD3D5D = 91919190 + A56BABCD;\n\/\/ (input[1] &lt;&lt; 3) + A56BABCD\n32323232 = 32323232 + 0;\n\/\/ tmp1 = input[1] + sum\n32323232 = 32323232 + 0;\n\/\/ tmp2 = tmp1 + 0\n4CF0F6F = 32323232 ^ 36FD3D5D;\n\/\/ ((input[1] &lt;&lt; 3) + A56BABCD) ^ (input[1] + sum + 0) \n3232323 = 32323232 &gt;&gt; 4;\n\/\/ input[1] &gt;&gt; 4\n3232322 = 3232323 + FFFFFFFF;\n\/\/ (input[1] &gt;&gt; 4) + FFFFFFFF\n7EC2C4D = 4CF0F6F ^ 3232322;\n\/\/ ((input[1] &lt;&lt; 3) + A56BABCD) ^ (input[1] + sum + 0) ^ ((input[1] &gt;&gt; 4) + FFFFFFFF)\n391D5D7E = 7EC2C4D + 31313131;\n\/\/ v0 += ((input[1] &lt;&lt; 3) + A56BABCD) ^ (input[1] + sum + 0) ^ ((input[1] &gt;&gt; 4) + FFFFFFFF)\n11223344 = 0 + 11223344;\n\/\/ sum = 0 + 11223344  \nE47575F8 = 391D5D7E &lt;&lt; 2;\n\/\/ v0 &lt;&lt; 2\nE47575F7 = E47575F8 + FFFFFFFF;\n\/\/ (v0 &lt;&lt; 2) + FFFFFFFF\n4A3F90C2 = 391D5D7E + 11223344;\n\/\/ v0 + sum\nF60D7FC3 = 4A3F90C2 + ABCDEF01;\n\/\/ v0 + sum + ABCDEF01\n12780A34 = F60D7FC3 ^ E47575F7;\n\/\/ ((v0 &lt;&lt; 2) + FFFFFFFF) ^ (v0 + sum + ABCDEF01)\n1C8EAEB = 391D5D7E &gt;&gt; 5;\n\/\/ v0 &gt;&gt; 5\nA73496B8 = 1C8EAEB + A56BABCD;\n\/\/ (v0 &gt;&gt; 5) + A56BABCD\nB54C9C8C = 12780A34 ^ A73496B8;\n\/\/ ((v0 &lt;&lt; 2) + FFFFFFFF) ^ (v0 + sum + ABCDEF01) ^ (v0 &gt;&gt; 5) + A56BABCD)\nE77ECEBE = B54C9C8C + 32323232;\n\/\/ v1 += ((v0 &lt;&lt; 2) + FFFFFFFF) ^ (v0 + sum + ABCDEF01) ^ ((v0 &gt;&gt; 5) + A56BABCD)\n3F = 40 - 1; \/\/ \u8f6e\u6570\u51cf1\n<\/code><\/pre>\n<p>\u6807\u51c6\u7684TEA\u52a0\u5bc6\u7b97\u6cd5<\/p>\n<pre><code class=\"language-cpp\">void encrypt (uint32_t* v, uint32_t* k) {\n\n\u00a0\u00a0\u00a0 uint32_t v0=v[0], v1=v[1], sum=0, i;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* set up *\/\n\u00a0   uint32_t delta=0x9e3779b9;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0 uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3];\u00a0\u00a0 \/* cache key *\/\n\n\u00a0\u00a0\u00a0 for (i=0; i &lt; 32; i++) {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* basic cycle start *\/\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 sum += delta;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 v0 += ((v1&lt;&lt;4) + k0) ^ (v1 + sum) ^ ((v1&gt;&gt;5) + k1);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 v1 += ((v0&lt;&lt;4) + k2) ^ (v0 + sum) ^ ((v0&gt;&gt;5) + k3);\n\u00a0\u00a0\u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* end cycle *\/\n\u00a0\u00a0\u00a0 v[0]=v0; v[1]=v1;\n}\n<\/code><\/pre>\n<p>\u6839\u636e\u8fd0\u7b97\u5206\u6790\u51fa\u6765\u7684\u52a0\u5bc6\u7b97\u6cd5<\/p>\n<pre><code class=\"language-cpp\">unsigned int key[] = {0, 0xA56BABCD, 0xFFFFFFFF, 0xABCDEF01}\n\nvoid encrypt_easy_vm (uint32_t* v, uint32_t* k) {\n\tuint32_t v0=v[0], v1=v[1], sum=0, i;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* set up *\/\n\u00a0   uint33_t delta=0x11223344;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0 uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3];\u00a0\u00a0 \/* cache key *\/\n\n\u00a0\u00a0\u00a0 for (i=0; i &lt; 40; i++) {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* basic cycle start *\/\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 v0 += ((v1&lt;&lt;3) + k1) ^ (v1 + sum + k0) ^ ((v1&gt;&gt;4) + k2);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 sum += delta;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 v1 += ((v0&lt;&lt;2) + k2) ^ (v0 + sum + k3) ^ ((v0&gt;&gt;5) + k1);\n\u00a0\u00a0\u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* end cycle *\/\n\u00a0\u00a0\u00a0 v[0]=v0; \n\u00a0\u00a0\u00a0 v[1]=v1;\n}\n<\/code><\/pre>\n<p>\u53ef\u4ee5\u5206\u6790\u51fa\u8fd9\u662f\u7ecf\u8fc7\u4fee\u6539\u540e\u7684tea\u7b97\u6cd5,\u4ececmp_with_cipher\u51fd\u6570\u4e2ddump\u51fa\u5bc6\u6587\u7f16\u5199\u811a\u672c\u5373\u53ef\u89e3\u5bc6<br \/>\n\u6ce8\u610f\u7684\u662fdelta\u662f\u5168\u5c40\u53d8\u91cf,\u7528\u4e8e\u6bcf\u4e00\u6b21cipher,\u6240\u4ee5\u6211\u4eec\u9006\u5e8f\u7f16\u5199\u811a\u672c<\/p>\n<pre><code class=\"language-cpp\">#include &lt;iostream&gt;\n#include &lt;Windows.h&gt;\n\nconst uint32_t delta = 0x11223344;\nDWORD sum = delta * 0x40 * 4;\n\nvoid decrypt_easy_vm(uint32_t *v, uint32_t *k)\n{\n    uint32_t v0 = v[0], v1 = v[1];\n\n    uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3];\n\n    printf(&quot;sum: %X\\n&quot;, sum);\n    for (uint32_t i = 0; i &lt; 0x40; i++)             \/* \u53cd\u5411\u5faa\u73af 40 \u6b21 *\/\n    {\n        v1 -= ((v0 &lt;&lt; 2) + k2) ^ (v0 + sum + k3) ^ ((v0 &gt;&gt; 5) + k1);\n\n        sum -= delta;\n\n        v0 -= ((v1 &lt;&lt; 3) + k1) ^ (v1 + sum + k0) ^ ((v1 &gt;&gt; 4) + k2);\n    }\n\n    v[0] = v0;\n    v[1] = v1;\n    printf(&quot;v0 : %X\\nv1 : %X\\n&quot;, v0, v1);\n}\n\nint main() {\n\n    unsigned int key[] = { 0, 0xA56BABCD, 0xFFFFFFFF, 0xABCDEF01 };\n\n    unsigned int v8[8];    \n    v8[0] = 0x877A62A6;\n    v8[1] = 0x6A55F1F3;\n    v8[2] = 0xAE194847;\n    v8[3] = 0xB1E643E7;\n    v8[4] = 0xA94FE881;\n    v8[5] = 0x9BC8A28A;\n    v8[6] = 0xC4CFAA9F;\n    v8[7] = 0xF1A00CA1;\n\n    for (int i = 6; i &gt;= 0; i -= 2) {\n        decrypt_easy_vm(&amp;v8[i], key);\n    }\n    \n    printf(&quot;L3HCTF{%.32s}&quot;, v8);\n\n    return 0;\n}\n<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/pic1.imgdb.cn\/item\/6886287758cb8da5c8e5035c.png\" alt=\"\"><\/p>\n<p>L3HCTF{9c50d10ba864bedfb37d7efa4e110bf2}<\/p>\n<h1>ez_android<\/h1>\n<p>java\u5c42\u6709\u5f88\u4e25\u91cd\u7684\u6df7\u6dc6,\u76f4\u63a5\u89c2\u5bdflib<\/p>\n<p>\u7b5b\u9009ez_android_lib\u53ef\u4ee5\u627e\u5230\u8fd9\u4e9b\u51fd\u6570,\u4e00\u4e2a\u4e2a\u89c2\u5bdf\u53ef\u4ee5\u53d1\u73b0\u8fd9\u4e2a\u51fd\u6570\u6709\u52a0\u5bc6\u7684\u903b\u8f91<br \/>\n<img decoding=\"async\" src=\"https:\/\/pic1.imgdb.cn\/item\/688747ff58cb8da5c8e8c345.png\" alt=\"\"><\/p>\n<p>\u4e22\u7ed9gpt\u5206\u6790\u52a0\u5bc6\u7684\u903b\u8f91,\u76f4\u63a5\u4e00\u628a\u68ad\u4e86<\/p>\n<pre><code class=\"language-python\"># -*- coding: utf-8 -*-\n\nK = b&quot;dGhpc2lzYWtleQ&quot;   # 14 \u5b57\u8282\u5bc6\u94a5\u8868\uff08ASCII\uff09\uff0c\u975e base64 \u89e3\u7801\u540e\u7684\u5185\u5bb9\n\nTARGET_HEX = &quot;0c1525a06396400a5c1665402906e11f90722c0e4c0a02fc4f322a&quot;\nTARGET = bytes.fromhex(TARGET_HEX)\n\ndef rol8(x, r):\n    return ((x &lt;&lt; r) | (x &gt;&gt; (8 - r))) &amp; 0xFF\n\ndef ror8(x, r):\n    return ((x &gt;&gt; r) | ((x &lt;&lt; (8 - r)) &amp; 0xFF)) &amp; 0xFF\n\ndef idx_odd(i: int) -&gt; int:\n    # \u751f\u6210\u5e8f\u5217 1,3,5,7,9,11,13,1,3,5,...\n    x = 2 * i + 1\n    k = (147 * x) &gt;&gt; 11\n    return x - 14 * k\n\ndef encrypt27(buf: bytes) -&gt; bytes:\n    assert len(buf) == 27\n    out = bytearray(27)\n    for i in range(27):\n        i1 = i % 14\n        odd = idx_odd(i)\n        t = (K[odd] + (buf[i] ^ K[i1])) &amp; 0xFF\n        r = K[(i + 3) % 14] &amp; 7\n        out[i] = K[(i + 4) % 14] ^ rol8(t, r)\n    return bytes(out)\n\ndef decrypt27(ct: bytes) -&gt; bytes:\n    assert len(ct) == 27\n    out = bytearray(27)\n    for i in range(27):\n        odd = idx_odd(i)\n        r = K[(i + 3) % 14] &amp; 7\n        t = ct[i] ^ K[(i + 4) % 14]\n        z = ror8(t, r)\n        x = ((z - K[odd]) &amp; 0xFF) ^ K[i % 14]\n        out[i] = x\n    return bytes(out)\n\ndef main():\n    # 1) \u7531\u76ee\u6807\u5bc6\u6587\u53cd\u63a8\u539f\u59cb\u660e\u6587\uff08\u6b63\u786e\u8f93\u5165\uff09\n    plain = decrypt27(TARGET)\n    print(&quot;\u660e\u6587\uff1a&quot;, plain.decode(errors=&quot;ignore&quot;))\n    print(&quot;\u660e\u6587hex\uff1a&quot;, plain.hex())\n\n    # 2) \u9a8c\u8bc1\uff1a\u518d\u6b21\u52a0\u5bc6\u5e94\u56de\u5230\u76ee\u6807\n    enc = encrypt27(plain)\n    print(&quot;\u56de\u52a0\u5bc6\u662f\u5426\u5339\u914d\u76ee\u6807\uff1a&quot;, enc == TARGET)\n\n    # 3) \u4e5f\u53ef\u81ea\u884c\u6d4b\u8bd5\u4efb\u610f\u8f93\u5165\n    candidate = b&quot;L3HCTF{ez_rust_reverse_lol}&quot;\n    print(&quot;\u6d4b\u8bd5\u5019\u9009\u662f\u5426\u6b63\u786e\uff1a&quot;, encrypt27(candidate) == TARGET)\n\nif __name__ == &quot;__main__&quot;:\n    main()\n\n<\/code><\/pre>\n<p>L3HCTF{ez_rust_reverse_lol}<\/p>\n<h1>Obfuscated<\/h1>\n<p>\u8d85\u7edd\u6df7\u6dc6\u9898\u76ee,\u7528\u4e86\u4e00\u5927\u5806\u51fd\u6570\u628a\u6808\u5e27\u6df7\u4e71\u4e86,\u5e76\u4e14\u76f4\u63a5\u8df3\u8fc7\u7a0b\u5e8f\u8fd8\u4f1a\u76f4\u63a5\u7ed3\u675f.<\/p>\n<p>\u6c47\u7f16\u5c42\u5355\u6b65\u8ddf\u8e2a\u53ef\u4ee5\u627e\u5230\u4e00\u4e2aptrace\u53cd\u8c03\u8bd5,nop\u540e\u53ef\u4ee5\u7ee7\u7eed\u8c03\u8bd5,\u5f80\u4e0b\u7ee7\u7eed\u8c03\u8bd5\u4e00\u5927\u6bb5\u53ef\u4ee5\u627e\u5230scanf\u548ccmp,\u4ece\u4e2d\u53ef\u4ee5\u63a8\u65ad\u51faflag\u7684\u957f\u5ea6\u662f32\u4e2a\u5b57\u8282<\/p>\n<p>\u7136\u540e\u89c2\u5bdf\u51fd\u6570\u8868,\u6392\u9664\u4e86\u4e00\u5927\u6bb5\u7528\u4e8e\u63a7\u5236\u6d41\u6df7\u6dc6\u7684\u51fd\u6570,\u53ef\u4ee5\u627e\u5230\u52a0\u5bc6\u51fd\u6570<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/pic1.imgdb.cn\/item\/688754f458cb8da5c8e9061a.png\" alt=\"\"><\/p>\n<p>\u7531\u4e8e\u6211\u7528\u4e86htrng\u548cd810\u4e24\u4e2a\u53bb\u6df7\u6dc6\u63d2\u4ef6,\u6240\u4ee5\u770b\u8d77\u6765\u8fd8\u662f\u6bd4\u8f83\u6e05\u6670\u7684,\u4f46\u662f\u52a8\u6001\u8c03\u8bd5\u7684\u65f6\u5019\u5c31\u4f1a\u51fa\u9519,\u6240\u4ee5\u8981\u8ddf\u7740\u6c47\u7f16\u89c2\u5bdf\u4e00\u4e0b\u53d8\u91cf<\/p>\n<p>\u8bc6\u522b\u51fa\u8fd9\u662f\u9b54\u6539\u4e86\u7684RC5\u52a0\u5bc6\u51fd\u6570<\/p>\n<p>\u6807\u51c6RC5\u52a0\u5bc6<\/p>\n<pre><code class=\"language-cpp\">void RC5_Encrypt(WORD *pt, WORD *ct) {\n    WORD A = pt[0] + S[0];\n    WORD B = pt[1] + S[1];\n    for (int i = 1; i &lt;= r; i++) {\n        A = ROTL(A ^ B, B) + S[2 * i];\n        B = ROTL(B ^ A, A) + S[2 * i + 1];\n    }\n    ct[0] = A;\n    ct[1] = B;\n}\n<\/code><\/pre>\n<p>\u590d\u539f\u7684\u4fee\u6539\u540e\u7684\u52a0\u5bc6\u51fd\u6570,\u8f6e\u6570\u662f12\u8f6e<\/p>\n<pre><code class=\"language-cpp\">void RC5_Encrypt(WORD *pt, WORD *ct) {\n    WORD A = pt[0] + S[0];\n    WORD B = pt[1] + S[1];\n    for (int i = 1; i &lt;= r; i++) {\n        A = ROTL(A ^ B, B) + S[2 * i];\n        B = ROTL(B ^ A, A) + S[2 * i + 1];\n\n\t\tA ^= B;\n    }\n    ct[0] = A;\n    ct[1] = B;\n}\n<\/code><\/pre>\n<p>RC5\u51fd\u6570\u89e3\u5bc6\u9700\u8981SBOX,\u53ef\u4ee5\u4ecesub_55CD39CEB250\u8fd9\u4e2a\u51fd\u6570\u4e2ddump\u51fa\u6765,\u8fd9\u4e2a\u662fKSA\u5bc6\u94a5\u62d3\u5c55\u51fd\u6570<\/p>\n<pre><code class=\"language-cpp\">unsigned int Sbox[26] = {  \n       0x122F2C9C, 0xE3BCCAE7, 0xD0FFC0F2, 0xD9A12544, 0x8A27992F, 0x55B1B935, 0x9110B161, 0x92811564,  \n       0x5CE9B359, 0x77C79A51, 0x4265527A, 0x8AB57C4B, 0x11529FA4, 0x9D9F63FF, 0xA970B936, 0xC8EABA0D,  \n       0x9A0EB4AA, 0xB0BC6E7F, 0x9784B100, 0x70DCD3AE, 0x6057A44E, 0x89187658, 0xE00098A8, 0x45773540,  \n       0xF9374F1A, 0x913FA548  \n    };\n<\/code><\/pre>\n<p>\u5bc6\u6587\u5219\u53ef\u4ee5\u4ece\u8fd9\u4e2a\u51fd\u6570\u4e2d\u7684v3\u4e2ddump\u51fa\u6765,\u8fd9\u4e2a\u662f\u5bc6\u6587\u6bd4\u8f83\u51fd\u6570<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/pic1.imgdb.cn\/item\/688756e558cb8da5c8e90cad.png\" alt=\"\"><\/p>\n<p>\u89e3\u5bc6\u9b54\u6539\u540e\u7684RC5\u51fd\u6570\u5373\u53ef L3HCTF{5fd277be39046905ef6348ba89131922}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>TemporalParadox \u6839\u636eida\u7684\u62a5\u9519 patch\u6389\u82b1\u6307\u4ee4\u4e4b\u540e\u8fd8\u539f\u4ee3\u7801\u7206\u7834\u5373\u53ef \u53ef\u60dc\u5f53\u65f6\u505a\u7684\u65f6\u5019\u6ca1\u6709 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-38","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.seekinthevortex.cn\/index.php\/wp-json\/wp\/v2\/posts\/38","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.seekinthevortex.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.seekinthevortex.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.seekinthevortex.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.seekinthevortex.cn\/index.php\/wp-json\/wp\/v2\/comments?post=38"}],"version-history":[{"count":1,"href":"https:\/\/www.seekinthevortex.cn\/index.php\/wp-json\/wp\/v2\/posts\/38\/revisions"}],"predecessor-version":[{"id":39,"href":"https:\/\/www.seekinthevortex.cn\/index.php\/wp-json\/wp\/v2\/posts\/38\/revisions\/39"}],"wp:attachment":[{"href":"https:\/\/www.seekinthevortex.cn\/index.php\/wp-json\/wp\/v2\/media?parent=38"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.seekinthevortex.cn\/index.php\/wp-json\/wp\/v2\/categories?post=38"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.seekinthevortex.cn\/index.php\/wp-json\/wp\/v2\/tags?post=38"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}