{"id":374,"date":"2023-02-23T23:49:38","date_gmt":"2023-02-23T15:49:38","guid":{"rendered":"https:\/\/shangwendada.co\/?p=374"},"modified":"2023-10-12T10:47:21","modified_gmt":"2023-10-12T02:47:21","slug":"374","status":"publish","type":"post","link":"https:\/\/blog.shangwendada.top\/index.php\/2023\/02\/23\/374\/","title":{"rendered":"[Reverse]\u52a0\u5bc6\u6280\u672f\u603b\u89c8"},"content":{"rendered":"<h1>\u5e38\u89c1\u52a0\u5bc6\u6280\u672f<\/h1>\n<p>\u76ee\u524d\u53d1\u73b0\u7684\u6bd4\u8f83\u5e38\u89c1\u7684\u5bc6\u94a5\u52a0\u5bc6\u6280\u672f\u6709RC4\u4ee5\u53caTEA\u7cfb\u5217\u52a0\u5bc6<\/p>\n<h2>TEA<\/h2>\n<h3>\u4ecb\u7ecd<\/h3>\n<p>TEA\uff08Tiny Encryption Algorithm\uff0c\u5c0f\u578b\u52a0\u5bc6\u7b97\u6cd5\uff09\u662f\u4e00\u79cd\u5bf9\u79f0\u5bc6\u94a5\u52a0\u5bc6\u7b97\u6cd5\uff0c\u7531\u82f1\u56fd\u8ba1\u7b97\u673a\u79d1\u5b66\u5bb6David Wheeler\u548cRoger Needham\u57281994\u5e74\u63d0\u51fa\u3002TEA\u7b97\u6cd5\u4ee564\u4f4d\uff088\u5b57\u8282\uff09\u7684\u5757\u5927\u5c0f\u548c128\u4f4d\uff0816\u5b57\u8282\uff09\u7684\u5bc6\u94a5\u957f\u5ea6\u4e3a\u7279\u70b9\uff0c\u5b83\u53ef\u4ee5\u7528\u4e8e\u52a0\u5bc6\u548c\u89e3\u5bc6\u6570\u636e\uff0c\u540c\u65f6\u5177\u6709\u7b80\u5355\u3001\u9ad8\u6548\u3001\u5b89\u5168\u7684\u7279\u70b9\u3002<\/p>\n<p>TEA\u7b97\u6cd5\u7684\u52a0\u5bc6\u548c\u89e3\u5bc6\u64cd\u4f5c\u90fd\u662f\u57fa\u4e8e\u4e00\u4e2a32\u8f6e\u8fed\u4ee3\u7684\u52a0\u5bc6\u7b97\u6cd5\uff0c\u6bcf\u4e00\u8f6e\u90fd\u662f\u5bf9\u660e\u6587\u548c\u5bc6\u94a5\u8fdb\u884c\u52a0\u5bc6\u8fd0\u7b97\uff0c\u7136\u540e\u5c06\u8fd0\u7b97\u7ed3\u679c\u4f5c\u4e3a\u4e0b\u4e00\u8f6e\u7684\u8f93\u5165\uff0c\u6700\u540e\u8f93\u51fa\u5bc6\u6587\u3002TEA\u7b97\u6cd5\u7684\u52a0\u5bc6\u548c\u89e3\u5bc6\u8fc7\u7a0b\u662f\u76f8\u540c\u7684\uff0c\u56e0\u6b64\u5b83\u662f\u4e00\u79cd\u5bf9\u79f0\u5bc6\u94a5\u52a0\u5bc6\u7b97\u6cd5\u3002TEA\u7b97\u6cd5\u7684\u5b89\u5168\u6027\u53d6\u51b3\u4e8e\u5bc6\u94a5\u957f\u5ea6\uff0c\u56e0\u4e3a\u5bc6\u94a5\u8d8a\u957f\uff0c\u7834\u89e3\u96be\u5ea6\u8d8a\u5927\u3002<\/p>\n<p>\u5c3d\u7ba1TEA\u7b97\u6cd5\u662f\u4e00\u79cd\u7b80\u5355\u7684\u52a0\u5bc6\u7b97\u6cd5\uff0c\u4f46\u5b83\u5df2\u7ecf\u88ab\u5e7f\u6cdb\u5e94\u7528\u4e8e\u5404\u79cd\u5b89\u5168\u9886\u57df\uff0c\u4f8b\u5982\u7f51\u7edc\u901a\u4fe1\u3001\u8f6f\u4ef6\u4fdd\u62a4\u3001\u6570\u5b57\u7248\u6743\u4fdd\u62a4\u3001\u91d1\u878d\u4ea4\u6613\u7b49\u3002\u540c\u65f6\uff0c\u7531\u4e8eTEA\u7b97\u6cd5\u7684\u52a0\u5bc6\u8fc7\u7a0b\u975e\u5e38\u7b80\u5355\uff0c\u56e0\u6b64\u5b83\u53ef\u4ee5\u5728\u8d44\u6e90\u53d7\u9650\u7684\u8bbe\u5907\u4e0a\u4f7f\u7528\uff0c\u5982\u667a\u80fd\u5361\u3001\u5d4c\u5165\u5f0f\u7cfb\u7edf\u3001\u79fb\u52a8\u8bbe\u5907\u7b49\u3002<\/p>\n<h3>\u8be6\u7ec6\u52a0\u5bc6\u6d41\u7a0b<\/h3>\n<p>TEA\uff08Tiny Encryption Algorithm\uff09\u7b97\u6cd5\u662f\u4e00\u79cd\u5bf9\u79f0\u5bc6\u94a5\u52a0\u5bc6\u7b97\u6cd5\uff0c\u5b83\u4f7f\u7528\u76f8\u540c\u7684\u5bc6\u94a5\u8fdb\u884c\u52a0\u5bc6\u548c\u89e3\u5bc6\u3002TEA\u7b97\u6cd5\u7684\u52a0\u5bc6\u6d41\u7a0b\u5982\u4e0b\uff1a<\/p>\n<ol>\n<li>\n<p>\u5c06\u660e\u6587\u630964\u4f4d\uff088\u5b57\u8282\uff09\u5206\u7ec4\uff0c\u5c06\u6bcf\u4e2a\u5206\u7ec4\u89c6\u4e3a\u4e00\u4e2a64\u4f4d\u7684\u4e8c\u8fdb\u5236\u6570\uff0c\u8bb0\u4e3aV\u3002<\/p>\n<\/li>\n<li>\n<p>\u5c06128\u4f4d\u7684\u5bc6\u94a5\u5206\u62104\u4e2a32\u4f4d\u7684\u5b50\u5bc6\u94a5\uff0c\u5206\u522b\u8bb0\u4e3aK0\u3001K1\u3001K2\u3001K3\u3002<\/p>\n<\/li>\n<li>\n<p>\u5c06\u660e\u6587\u5206\u7ec4V\u5206\u4e3a\u4e24\u4e2a32\u4f4d\u7684\u90e8\u5206\uff0c\u5206\u522b\u8bb0\u4e3aV0\u548cV1\u3002<\/p>\n<\/li>\n<li>\n<p>\u8bbe\u5b9a\u4e00\u4e2a32\u4f4d\u7684\u5e38\u6570delta\uff0c\u5176\u503c\u4e3a0x9E3779B9\u3002<\/p>\n<\/li>\n<li>\n<p>TEA\u7b97\u6cd5\u7684\u52a0\u5bc6\u8fc7\u7a0b\u5305\u62ec32\u8f6e\u8fed\u4ee3\uff0c\u6bcf\u4e00\u8f6e\u7684\u52a0\u5bc6\u8fc7\u7a0b\u5982\u4e0b\uff1a<\/p>\n<ol>\n<li>\u9996\u5148\uff0c\u7d2f\u52a0\u5668sum\u88ab\u521d\u59cb\u5316\u4e3a0\u3002<\/li>\n<li>\u63a5\u7740\uff0c\u5c06delta\u503c\u52a0\u5230sum\u4e2d\u3002delta\u662f\u4e00\u4e2a\u5e38\u6570\uff0c\u5176\u503c\u4e3a0x9e3779b9\uff0c\u662fTEA\u7b97\u6cd5\u4e2d\u4f7f\u7528\u7684\u4e00\u4e2a\u9b54\u6570\uff0c\u7528\u4e8e\u589e\u52a0\u52a0\u5bc6\u7684\u968f\u673a\u6027\u3002<\/li>\n<li>\u7136\u540e\uff0c\u5c06V1\u5de6\u79fb4\u4f4d\uff0c\u52a0\u4e0aK0\uff0c\u518d\u5f02\u6216\u4e0a(V1+sum)\u548c(V1\u53f3\u79fb5\u4f4d+K1)\u7684\u503c\u3002\u5f97\u5230\u7684\u7ed3\u679c\u4f5c\u4e3aV0\u7684\u65b0\u503c\u3002<\/li>\n<li>\u63a5\u4e0b\u6765\uff0c\u5c06V0\u5de6\u79fb4\u4f4d\uff0c\u52a0\u4e0aK2\uff0c\u518d\u5f02\u6216\u4e0a(V0+sum)\u548c(V0\u53f3\u79fb5\u4f4d+K3)\u7684\u503c\u3002\u5f97\u5230\u7684\u7ed3\u679c\u4f5c\u4e3aV1\u7684\u65b0\u503c\u3002<\/li>\n<li>\u91cd\u590d\u4e0a\u8ff0\u6b65\u9aa432\u6b21\uff0c\u5373\u5b8c\u6210\u4e00\u8f6e\u8fed\u4ee3\u3002\u5728\u6bcf\u4e00\u8f6e\u8fed\u4ee3\u4e2d\uff0cV0\u548cV1\u7684\u503c\u90fd\u4f1a\u88ab\u66f4\u65b0\uff0c\u5176\u4e2dV1\u7684\u66f4\u65b0\u4f9d\u8d56\u4e8eV0\uff0c\u800cV0\u7684\u66f4\u65b0\u4f9d\u8d56\u4e8eV1\u3002<\/li>\n<\/ol>\n<pre><code class=\"language-c++\">sum += delta;\nv0 += ((v1 << 4) + k[0]) ^ (v1 + sum) ^ ((v1 >> 5) + k[1]);\nv1 += ((v0 << 4) + k[2]) ^ (v0 + sum) ^ ((v0 >> 5) + k[3]);<\/code><\/pre>\n<\/li>\n<li>\n<p>\u7ecf\u8fc732\u8f6e\u8fed\u4ee3\u540e\uff0c\u5f97\u5230\u52a0\u5bc6\u540e\u7684\u5bc6\u6587\uff0c\u8bb0\u4e3aC0\u548cC1\u3002<\/p>\n<pre><code>    7.\u5c06C0\u548cC1\u6309\u987a\u5e8f\u8fde\u63a5\u8d77\u6765\uff0c\u5f97\u523064\u4f4d\u7684\u5bc6\u6587\u3002<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>TEA\u7b97\u6cd5\u7684\u89e3\u5bc6\u8fc7\u7a0b\u4e0e\u52a0\u5bc6\u8fc7\u7a0b\u57fa\u672c\u76f8\u540c\uff0c\u53ea\u662f\u5c06\u52a0\u5bc6\u8fc7\u7a0b\u4e2d\u7684\u52a0\u6cd5\u64cd\u4f5c\u6539\u4e3a\u51cf\u6cd5\u64cd\u4f5c\uff0c\u5c06\u53f3\u79fb\u64cd\u4f5c\u6539\u4e3a\u5de6\u79fb\u64cd\u4f5c\u3002\u5177\u4f53\u8fc7\u7a0b\u5982\u4e0b\uff1a<\/p>\n<ol>\n<li>\n<p>\u5c06\u5bc6\u6587\u630964\u4f4d\uff088\u5b57\u8282\uff09\u5206\u7ec4\uff0c\u5c06\u6bcf\u4e2a\u5206\u7ec4\u89c6\u4e3a\u4e00\u4e2a64\u4f4d\u7684\u4e8c\u8fdb\u5236\u6570\uff0c\u8bb0\u4e3aC\u3002<\/p>\n<\/li>\n<li>\n<p>\u5c06128\u4f4d\u7684\u5bc6\u94a5\u5206\u62104\u4e2a32\u4f4d\u7684\u5b50\u5bc6\u94a5\uff0c\u5206\u522b\u8bb0\u4e3aK0\u3001K1\u3001K2\u3001K3\u3002<\/p>\n<\/li>\n<li>\n<p>\u5c06\u5bc6\u6587\u5206\u7ec4C\u5206\u4e3a\u4e24\u4e2a32\u4f4d\u7684\u90e8\u5206\uff0c\u5206\u522b\u8bb0\u4e3aC0\u548cC1\u3002<\/p>\n<\/li>\n<li>\n<p>\u8bbe\u5b9a\u4e00\u4e2a32\u4f4d\u7684\u5e38\u6570delta\uff0c\u5176\u503c\u4e3a0x9E3779B9\u3002<\/p>\n<\/li>\n<li>\n<p>TEA\u7b97\u6cd5\u7684\u89e3\u5bc6\u8fc7\u7a0b\u4e5f\u5305\u62ec32\u8f6e\u8fed\u4ee3\uff0c\u6bcf\u4e00\u8f6e\u7684\u89e3\u5bc6\u8fc7\u7a0b\u5982\u4e0b\uff1a<\/p>\n<pre><code class=\"language-c++\">v1 -= ((v0 << 4) + k[2]) ^ (v0 + sum) ^ ((v0 >> 5) + k[3]);\nv0 -= ((v1 << 4) + k[0]) ^ (v1 + sum) ^ ((v1 >> 5) + k[1]);\nsum -= delta;\n\/\/sum\u7684\u503c\u4e3adelta\u4e58\u4ee5\u52a0\u5bc6\u65f6\u7684\u8fed\u4ee3\u6b21\u6570\n<\/code><\/pre>\n<\/li>\n<li>\n<p>\u6700\u540e\uff0c\u7ecf\u8fc732\u8f6e\u8fed\u4ee3\u52a0\u5bc6\u540e\uff0c\u5f97\u5230\u7684V0\u548cV1\u62fc\u63a5\u5728\u4e00\u8d77\uff0c\u5f62\u621064\u4f4d\uff088\u5b57\u8282\uff09\u7684\u5bc6\u6587\u3002<\/p>\n<\/li>\n<\/ol>\n<h4>\u6d41\u7a0b\u56fe<\/h4>\n<p>\u8fd9\u91cc\u53ea\u5c55\u793a\u5bf9v1\u64cd\u4f5c\u7684\u6d41\u7a0b\uff0cv2\u64cd\u4f5c\u4e0e\u5982\u4e0b\u6d41\u7a0b\u4e00\u81f4\uff0c\u53ea\u662f\u66f4\u6362\u4e86key\u7684\u503c,\u5176\u4e2d\u6bcf\u6b21sum\u8fd8\u9700\u8981\u52a0\u4e00\u6b21delta\u7684\u503c\u3002<\/p>\n<p>\u89e3\u5bc6\u8fc7\u7a0b\u4ea6\u662f\u5982\u6b64,\u6bcf\u4e00\u6b21\u90fd\u662f\u51cfdelta\u7684\u503c\u3002<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/shangwendada.top\/wp-content\/uploads\/2023\/02\/image-1677167930668.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/shangwendada.top\/wp-content\/uploads\/2023\/02\/image-1677167930668.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"file\" \/><\/div><\/p>\n<h4>\u4ee3\u7801<\/h4>\n<pre><code class=\"language-c++\">#include &lt;stdio.h&gt;\n#include &lt;stdint.h&gt;  \/\/ \u4f7f\u7528uint32_t\u6570\u636e\u7c7b\u578b\u9700\u8981\u5305\u542b\u6b64\u5934\u6587\u4ef6\n#include &lt;string.h&gt;\n\n\/\/ \u5b9a\u4e49\u52a0\u5bc6\u51fd\u6570\nvoid tea_encrypt(uint32_t *v, uint32_t *k) {\n    uint32_t v0 = v[0], v1 = v[1], sum = 0, i;\n    uint32_t delta = 0x9e3779b9;\n\n    for (i = 0; i &lt; 32; i++) {\n        sum += delta;\n        v0 += ((v1 &lt;&lt; 4) + k[0]) ^ (v1 + sum) ^ ((v1 &gt;&gt; 5) + k[1]);\n        v1 += ((v0 &lt;&lt; 4) + k[2]) ^ (v0 + sum) ^ ((v0 &gt;&gt; 5) + k[3]);\n    }\n\n    v[0] = v0;\n    v[1] = v1;\n}\n\n\/\/ \u5b9a\u4e49\u89e3\u5bc6\u51fd\u6570\nvoid tea_decrypt(uint32_t *v, uint32_t *k) {\n    uint32_t v0 = v[0], v1 = v[1], sum = 0xC6EF3720, i;  \/\/ \u6839\u636eTEA\u7b97\u6cd5\uff0c\u89e3\u5bc6\u8f6e\u6b21\u7684\u8ba1\u7b97\u9700\u8981\u521d\u59cb\u5316sum\n    uint32_t delta = 0x9e3779b9;\n\n    for (i = 0; i &lt; 32; i++) {\n        v1 -= ((v0 &lt;&lt; 4) + k[2]) ^ (v0 + sum) ^ ((v0 &gt;&gt; 5) + k[3]);\n        v0 -= ((v1 &lt;&lt; 4) + k[0]) ^ (v1 + sum) ^ ((v1 &gt;&gt; 5) + k[1]);\n        sum -= delta;\n    }\n\n    v[0] = v0;\n    v[1] = v1;\n}\n\n\/\/ \u5b9a\u4e49\u6d4b\u8bd5\u51fd\u6570\nvoid test_tea(const char *plaintext, const char *key) {\n    printf(&quot;TEA\u52a0\u5bc6\u7b97\u6cd5\\n&quot;);\n\n    printf(&quot;\u539f\u59cb\u660e\u6587:\\t%s\\n&quot;, plaintext);\n    printf(&quot;\u5bc6\u94a5:\\t\\t%s\\n&quot;, key);\n\n    \/\/ \u5c06\u660e\u6587\u6309\u716764\u4f4d\u5206\u7ec4\n    uint32_t blocks[2];  \/\/ \u4e24\u4e2a32\u4f4d\u7684\u5757\uff0c\u537364\u4f4d\n    memcpy(blocks, plaintext, 8);\n\n    \/\/ \u5c06\u5bc6\u94a5\u6309\u716764\u4f4d\u5206\u7ec4\n    uint32_t key_blocks[4];  \/\/ \u56db\u4e2a32\u4f4d\u7684\u5757\uff0c\u5373128\u4f4d\n    memcpy(key_blocks, key, 16);\n\n    \/\/ \u52a0\u5bc6\n    tea_encrypt(blocks, key_blocks);\n\n    \/\/ \u5c06\u52a0\u5bc6\u540e\u7684\u7ed3\u679c\u8f93\u51fa\n    printf(&quot;\u52a0\u5bc6\u540e\u7684\u5bc6\u6587:\\t%08x%08x\\n&quot;, blocks[0], blocks[1]);\n\n    \/\/ \u89e3\u5bc6\n    tea_decrypt(blocks, key_blocks);\n\n    \/\/ \u5c06\u89e3\u5bc6\u540e\u7684\u7ed3\u679c\u8f93\u51fa\n    char decrypted[9];\n    memcpy(decrypted, blocks, 8);\n    decrypted[8] = &#039;\\0&#039;;\n    printf(&quot;\u89e3\u5bc6\u540e\u7684\u660e\u6587:\\t%s\\n&quot;, decrypted);\n}\n\nint main() {\n    test_tea(&quot;Hello, world!&quot;, &quot;This is a key.&quot;);\n    \/\/\u7531\u4e8etea\u7b97\u6cd5\u4e00\u6b21\u53ea\u80fd\u52a0\u5bc6\u89e3\u5bc616\u4e2abyte\u4f4d\u7684\u6570\u636e\uff0c\u6240\u4ee5\u6b64\u5904\u6570\u636e\u4e22\u5931\n    return 0;\n}\n<\/code><\/pre>\n<h3>\u9006\u5411\u539f\u7406\u4ee5\u53ca\u5e38\u89c1\u95ee\u9898:<\/h3>\n<p>\u5728\u9006\u5411\u4e2d,\u7531\u4e8etea\u52a0\u5bc6\u7684\u7279\u6027,\u6bcf\u6b21\u90fd\u662f\u4e24\u4e2a\u4e24\u4e2a\u503c\u4e00\u8d77\u52a0\u5bc6,\u6240\u4ee5\u901a\u5e38\u51fa\u9898\u4eba\u4f1a\u5c06\u56db\u4e2a\u5b57\u7b26\u5408\u5e76\u6210\u4e3a\u4e00\u4e2a\u5927\u6574\u6570<\/p>\n<p>\u7c7b\u4f3c\u4e8eabcd\u5b57\u7b26\u4e32,\u9700\u8981\u52a0\u5bc6\u65f6\u51fa\u9898\u8005\u4f1a\u5c06\u5176\u5199\u4e3a0x64636261(\u5c0f\u7aef\u5e8f\u5b58\u50a8)<\/p>\n<p>\u7f16\u5199\u4e00\u6bb5\u7b80\u5355\u7684tea\u4ee3\u7801<\/p>\n<pre><code>#include &lt;stdint.h&gt;\n#include&lt;stdio.h&gt;\nvoid tea_encrypt(uint32_t* v, uint32_t* k) {\n    uint32_t sum = 0;\n    uint32_t delta = 0x9e3779b9;\n    uint32_t v0 = v[0], v1 = v[1];\n    uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3];\n    for (int i = 0; i &lt; 32; i++) {\n        sum += delta;\n        v0 += ((v1 &lt;&lt; 4) + k0) ^ (v1 + sum) ^ ((v1 &gt;&gt; 5) + k1);\n        v1 += ((v0 &lt;&lt; 4) + k2) ^ (v0 + sum) ^ ((v0 &gt;&gt; 5) + k3);\n    }\n    v[0] = v0;\n    v[1] = v1;\n}\n\nvoid tea_decrypt(uint32_t* v, uint32_t* k) {\n    uint32_t sum = 0xC6EF3720;\n    uint32_t delta = 0x9e3779b9;\n    uint32_t v0 = v[0], v1 = v[1];\n    uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3];\n    for (int i = 0; i &lt; 32; i++) {\n        v1 -= ((v0 &lt;&lt; 4) + k2) ^ (v0 + sum) ^ ((v0 &gt;&gt; 5) + k3);\n        v0 -= ((v1 &lt;&lt; 4) + k0) ^ (v1 + sum) ^ ((v1 &gt;&gt; 5) + k1);\n        sum -= delta;\n    }\n    v[0] = v0;\n    v[1] = v1;\n}\n\nint main() {\n    uint32_t plaintext[4] = {0x64636261, 0x68676665,0x6C6B6A69,0x706F6E6D};\n    uint32_t key[4] = {0x12345678, 0x9abcdef0, 0xfedcba98, 0x76543210};\n    uint32_t enc[4]={0};\n    for(int i=0 ; i&lt;4 ; i+=2 ){\n        tea_encrypt(plaintext+i,key);\n    }\n    for(int i = 0 ; i &lt; 4 ;  i+=2 )\n    {\n        tea_decrypt(plaintext + i , key);\n    }\n    printf(&quot;%s&quot;,plaintext);\n    return 0;\n}<\/code><\/pre>\n<p>\u6211\u4eec\u67e5\u770b\u4ed6\u5728ida\u4e2d\u7684\u53cd\u6c47\u7f16\u4ee3\u7801<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/shangwendada.top\/wp-content\/uploads\/2023\/02\/image-1677168038921.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/shangwendada.top\/wp-content\/uploads\/2023\/02\/image-1677168038921.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"file\" \/><\/div><\/p>\n<p>tea\u52a0\u5bc6\u6b65\u9aa4<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/shangwendada.top\/wp-content\/uploads\/2023\/02\/image-1677168065371.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/shangwendada.top\/wp-content\/uploads\/2023\/02\/image-1677168065371.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"file\" \/><\/div><\/p>\n<p>\u89e3\u5bc6\u6b65\u9aa4\u4e5f\u5728\u4e00\u5f00\u59cb\u7684\u4ee3\u7801\u4e2d,\u5176\u4e2d\u4e5f\u6709\u4e0d\u662f\u4e24\u4e24\u4e00\u7ec4\u8fdb\u884c\u52a0\u5bc6\u7684,\u4e5f\u53ef\u4ee5\u662f\u53e0\u52a0\u52a0\u5bc6\uff0c\u518d\u89e3\u5bc6\u8fc7\u7a0b\u4e2d\u9700\u8981\u7a0d\u4f5c\u5904\u7406\uff0c\u5177\u4f53\u5728XTEA\u7684\u4f8b\u9898\u4e2d\u8bb2\u89e3\u3002<\/p>\n<p>\u5982\u679c\u6309\u7167\u8fd9\u79cd\u6a21\u5f0f\u51fa\u9898\uff0c\u89e3\u5bc6\u51fd\u6570\u5df2\u7ecf\u5728\u6e90\u7a0b\u5e8f\u4e2d\u7ed9\u51fa\u3002\u4f46\u662f\u8fd9\u79cdtea\u7684\u5728\u65e5\u5e38\u89e3\u9898\u4e2d\u662f\u6bd4\u8f83baby\u7684\u7b97\u6cd5\uff0c\u5176\u4e2d\u6709\u4e00\u4e9b\u5bf9key\u503c\u505a\u5904\u7406\u7684\u9898\u76ee\u9700\u8981\u7279\u522b\u6ce8\u610f\uff0c\u5177\u4f53\u4f1a\u5728XTEA\u4e2d\u5c55\u793a\u3002<\/p>\n<p>\u5728tea\u7b97\u6cd5\u4e2d\u8fd8\u6709\u9700\u8981\u6ce8\u610f\u7684\u70b9\u5c31\u662fdelta\u503c\u5e76\u4e0d\u662f\u4ec5\u9650\u4e8e\u9ec4\u9759\u6bd4\u4f8b,\u5176\u503c\u662f\u53ef\u4ee5\u53d8\u6362\u7684\u800c\u4e14\u4e0d\u8bba\u6b63\u6570\u8d1f\u6570\u3002<\/p>\n<h2>XTEA<\/h2>\n<h3>XTEA\u4ecb\u7ecd:<\/h3>\n<p>XTEA\u7b97\u6cd5\uff08eXtended Tiny Encryption Algorithm\uff09\u662fTEA\u7b97\u6cd5\u7684\u4e00\u79cd\u6539\u8fdb\uff0c\u5b83\u662f\u4e00\u79cd\u5757\u5bc6\u7801\u7b97\u6cd5\uff0c\u91c7\u752864\u4f4d\u5bc6\u94a5\u548c64\u4f4d\u5206\u7ec4\u3002XTEA\u7b97\u6cd5\u7684\u5b89\u5168\u6027\u6bd4TEA\u7b97\u6cd5\u66f4\u9ad8\uff0c\u540c\u65f6\u52a0\u5bc6\/\u89e3\u5bc6\u901f\u5ea6\u4e5f\u66f4\u6162\u3002<\/p>\n<p>XTEA\u7b97\u6cd5\u7684\u52a0\u5bc6\u548c\u89e3\u5bc6\u8fc7\u7a0b\u7c7b\u4f3c\u4e8eTEA\u7b97\u6cd5\uff0c\u53ea\u662f\u4f7f\u7528\u4e86\u4e0d\u540c\u7684\u8f6e\u51fd\u6570\uff0c\u52a0\u5bc6\u548c\u89e3\u5bc6\u8fc7\u7a0b\u5982\u4e0b\uff1a<\/p>\n<ol>\n<li>\u5c06\u660e\u6587\u630964\u4f4d\uff088\u5b57\u8282\uff09\u5206\u7ec4\uff0c\u5c06\u6bcf\u4e2a\u5206\u7ec4\u89c6\u4e3a\u4e00\u4e2a64\u4f4d\u7684\u4e8c\u8fdb\u5236\u6570\uff0c\u8bb0\u4e3aV\u3002<\/li>\n<li>\u5c0664\u4f4d\u5bc6\u94a5\u5206\u4e3a4\u4e2a32\u4f4d\u5b50\u5bc6\u94a5\uff0c\u8bb0\u4e3aK0\u3001K1\u3001K2\u3001K3\u3002<\/li>\n<li>\u5c06V\u5206\u4e3a\u4e24\u4e2a32\u4f4d\u7684\u534a\u5757V0\u548cV1\u3002<\/li>\n<li>\u521d\u59cb\u5316\u8f6e\u5bc6\u94a5sum\u4e3a0\u3002<\/li>\n<li>\u6267\u884c32\u8f6e\u8fed\u4ee3\uff0c\u6bcf\u8f6e\u8fed\u4ee3\u5305\u62ec\u4ee5\u4e0b\u64cd\u4f5c\uff1a\n<ol>\n<li>V0 += (((V1 &lt;&lt; 4) ^ (V1 &gt;&gt; 5)) + V1) ^ (sum + K[sum &amp; 3])<\/li>\n<li>sum += delta<\/li>\n<li>V1 += (((V0 &lt;&lt; 4) ^ (V0 &gt;&gt; 5)) + V0) ^ (sum + K[(sum &gt;&gt; 11) &amp; 3])<\/li>\n<\/ol>\n<\/li>\n<li>\u5c06\u8fed\u4ee3\u540e\u7684V0\u548cV1\u5408\u5e76\u4e3a64\u4f4d\u7684\u52a0\u5bc6\u7ed3\u679c\u3002<\/li>\n<\/ol>\n<p>XTEA\u7b97\u6cd5\u548cTEA\u7b97\u6cd5\u4e00\u6837\uff0c\u88ab\u5e7f\u6cdb\u5e94\u7528\u4e8e\u7f51\u7edc\u901a\u4fe1\u3001\u6570\u636e\u52a0\u5bc6\u7b49\u9886\u57df\u3002<\/p>\n<h3>XTEA\u4e0eTEA\u7684\u533a\u522b<\/h3>\n<p>TEA\u7b97\u6cd5\u548cXTEA\u7b97\u6cd5\u90fd\u662f\u5757\u5bc6\u7801\u7b97\u6cd5\uff0c\u90fd\u662f\u5bf9\u79f0\u5bc6\u94a5\u7b97\u6cd5\uff0c\u5b83\u4eec\u7684\u4e3b\u8981\u533a\u522b\u5728\u4e8e\u8f6e\u51fd\u6570\u7684\u4e0d\u540c\u3002TEA\u7b97\u6cd5\u7684\u8f6e\u51fd\u6570\u4e2d\u53ea\u6709\u7b80\u5355\u7684\u52a0\u3001\u51cf\u3001\u5f02\u6216\u7b49\u8fd0\u7b97\uff0c\u800cXTEA\u7b97\u6cd5\u7684\u8f6e\u51fd\u6570\u4e2d\u5305\u542b\u4e86\u66f4\u591a\u7684\u8fd0\u7b97\uff0c\u4f8b\u5982\u4f4d\u8fd0\u7b97\u3001\u5faa\u73af\u79fb\u4f4d\u7b49\u3002<\/p>\n<p>\u5177\u4f53\u6765\u8bf4\uff0cXTEA\u7b97\u6cd5\u5c06TEA\u7b97\u6cd5\u7684\u8f6e\u51fd\u6570\u6539\u4e3a\uff1a<\/p>\n<pre><code>v0 += (((v1 &lt;&lt; 4) ^ (v1 &gt;&gt; 5)) + v1) ^ (sum + key[(sum &gt;&gt; 11) &amp; 3]);\nv1 += (((v0 &lt;&lt; 4) ^ (v0 &gt;&gt; 5)) + v0) ^ (sum + key[sum &amp; 3]);<\/code><\/pre>\n<p>XTEA\u7b97\u6cd5\u5728TEA\u7b97\u6cd5\u7684\u57fa\u7840\u4e0a\u8fdb\u884c\u4e86\u6539\u8fdb\uff0c\u4e3b\u8981\u6539\u8fdb\u6709\u4ee5\u4e0b\u51e0\u70b9\uff1a<\/p>\n<ol>\n<li>\u589e\u52a0\u4e86\u8fed\u4ee3\u8f6e\u6570\uff1aTEA\u7b97\u6cd5\u8fed\u4ee3\u8f6e\u6570\u4e3a32\u8f6e\uff0cXTEA\u7b97\u6cd5\u589e\u52a0\u5230\u4e8664\u8f6e\uff0c\u52a0\u5f3a\u4e86\u52a0\u5bc6\u5f3a\u5ea6\u3002<\/li>\n<li>\u6539\u8fdb\u4e86\u5bc6\u94a5\u6269\u5c55\u7b97\u6cd5\uff1aXTEA\u7b97\u6cd5\u7684\u5bc6\u94a5\u6269\u5c55\u7b97\u6cd5\u76f8\u5bf9\u4e8eTEA\u7b97\u6cd5\u66f4\u4e3a\u590d\u6742\u548c\u9ad8\u6548\u3002<\/li>\n<li>\u52a0\u5165\u4e86\u53cd\u5411\u8fed\u4ee3\uff1aXTEA\u7b97\u6cd5\u52a0\u5165\u4e86\u53cd\u5411\u8fed\u4ee3\uff0c\u5373\u52a0\u5bc6\u548c\u89e3\u5bc6\u7684\u8fc7\u7a0b\u5b8c\u5168\u76f8\u540c\u3002<\/li>\n<li>\u53ef\u53d8\u7684\u5757\u5927\u5c0f\uff1aXTEA\u7b97\u6cd5\u7684\u5757\u5927\u5c0f\u53ef\u53d8\uff0c\u53ef\u4ee5\u662f64\u4f4d\u3001128\u4f4d\u7b49\u591a\u79cd\u957f\u5ea6\uff0c\u63d0\u4f9b\u4e86\u66f4\u52a0\u7075\u6d3b\u7684\u52a0\u5bc6\u9009\u9879\u3002<\/li>\n<li>\u589e\u52a0\u4e86\u6570\u636e\u5b8c\u6574\u6027\u4fdd\u62a4\uff1aXTEA\u7b97\u6cd5\u53ef\u4ee5\u901a\u8fc7\u589e\u52a0MAC\uff08Message Authentication Code\uff09\u6765\u4fdd\u62a4\u6570\u636e\u5b8c\u6574\u6027\uff0c\u9632\u6b62\u6570\u636e\u5728\u4f20\u8f93\u8fc7\u7a0b\u4e2d\u88ab\u7be1\u6539\u3002<\/li>\n<\/ol>\n<p>\u7efc\u4e0a\u6240\u8ff0\uff0cXTEA\u7b97\u6cd5\u76f8\u5bf9\u4e8eTEA\u7b97\u6cd5\u5728\u5b89\u5168\u6027\u3001\u6548\u7387\u548c\u529f\u80fd\u6027\u7b49\u65b9\u9762\u90fd\u6709\u6240\u63d0\u9ad8\uff0c\u56e0\u6b64\u88ab\u5e7f\u6cdb\u5e94\u7528\u4e8e\u52a0\u5bc6\u901a\u4fe1\u3001\u6570\u5b57\u7b7e\u540d\u3001\u6570\u636e\u5b8c\u6574\u6027\u4fdd\u62a4\u7b49\u9886\u57df\u3002<\/p>\n<h3>\u5e38\u89c1\u9898\u578b:<\/h3>\n<h4>[Hgame]VidarCamera<\/h4>\n<pre><code>    private final int[] m41encrypthkIa6DI(int[] iArr) {\n        int i;\n        int[] r1 = UIntArray.m208constructorimpl(4);\n        UIntArray.m219setVXSXFK8(r1, 0, 2233);\n        UIntArray.m219setVXSXFK8(r1, 1, 4455);\n        UIntArray.m219setVXSXFK8(r1, 2, 6677);\n        UIntArray.m219setVXSXFK8(r1, 3, 8899);\n        int i2 = 0;\n        while (i2 &lt; 9) {\n            int i3 = 0;\n            int i4 = 0;\n            do {\n                i3++;\n                i = i2 + 1;\n                UIntArray.m219setVXSXFK8(iArr, i2, UInt.m155constructorimpl(UIntArray.m214getpVg5ArA(iArr, i2) + UInt.m155constructorimpl(UInt.m155constructorimpl(UInt.m155constructorimpl(UIntArray.m214getpVg5ArA(r1, UInt.m155constructorimpl(i4 &amp; 3)) + i4) ^ UInt.m155constructorimpl(UInt.m155constructorimpl(UInt.m155constructorimpl(UIntArray.m214getpVg5ArA(iArr, i) &lt;&lt; 4) ^ UInt.m155constructorimpl(UIntArray.m214getpVg5ArA(iArr, i) &gt;&gt;&gt; 5)) + UIntArray.m214getpVg5ArA(iArr, i))) ^ i4)));\n                UIntArray.m219setVXSXFK8(iArr, i, UInt.m155constructorimpl(UIntArray.m214getpVg5ArA(iArr, i) + UInt.m155constructorimpl(UInt.m155constructorimpl(UInt.m155constructorimpl(UInt.m155constructorimpl(UIntArray.m214getpVg5ArA(iArr, i2) &lt;&lt; 4) ^ UInt.m155constructorimpl(UIntArray.m214getpVg5ArA(iArr, i2) &gt;&gt;&gt; 5)) + UIntArray.m214getpVg5ArA(iArr, i2)) ^ UInt.m155constructorimpl(UIntArray.m214getpVg5ArA(r1, UInt.m155constructorimpl(UInt.m155constructorimpl(i4 &gt;&gt;&gt; 11) &amp; 3)) + i4))));\n                i4 = UInt.m155constructorimpl(i4 + 878077251);\n            } while (i3 &lt;= 32);\n            i2 = i;\n        }\n        return iArr;\n    }\n<\/code><\/pre>\n<p>\u8fd9\u79cd\u9898\u7684\u4ee3\u7801\u5199\u7684\u975e\u5e38\u7684\u590d\u6742,\u4f46\u662f\u6839\u636etea\u7684\u7279\u5f81\u53ef\u4ee5\u53d1\u73b0key\u4ee5\u53cadelta\u503c\u3002\u4f46\u662f\u8fd9\u91cc\u6bd4\u8f83\u5751\u7684\u5730\u65b9\u662fi2\u8fd9\u90e8\u5206\u662f&lt;9\u7684\u90a3\u4e48\u4e5f\u5c31\u662f\u4ed6\u662f\u5355\u6570\u6b21\u5faa\u73af,\u53ef\u662f\u6211\u4eec\u5e38\u89c1\u7684tea\u662f\u4e24\u4e24\u4e00\u7ec4\u5faa\u73af\u52a0\u5bc6\u7684,\u8fd9\u662f\u600e\u4e48\u56de\u4e8b\u5462\u3002<\/p>\n<p>\u8fd9\u5c31\u662f\u6d89\u53ca\u5230\u4e86\u4e00\u4e2a\u53e0\u52a0\u52a0\u5bc6\u7684\u65b9\u5f0f\u3002<\/p>\n<p>\u4f8b\u5982\u6709\u4e94\u4e2a\u503cv1,v2,v3,v4,v5\u90a3\u4e48\u6211\u53ef\u4ee5\u5148\u5c06v1,v2\u52a0\u5bc6,\u7136\u540e\u518d\u62ff\u52a0\u5bc6\u540e\u7684v2\u4e0ev3\u52a0\u5bc6\u8fd9\u6837\u5faa\u73af<\/p>\n<p>\u56e0\u6b64\u5982\u679c\u6211\u4eec\u8fd8\u6309\u7167\u4f20\u7edf\u7684tea\u4e24\u7ec4\u4e24\u7ec4\u89e3\u5bc6\u7684\u65b9\u6cd5\u7684\u8bdd\uff0c\u5c31\u4f1a\u5bfc\u81f4v2\u7684\u503c\u4e0ev2\u548cv1\u52a0\u5bc6\u65f6\u7684\u503c\u4e0d\u4e00\u6837\u4e86,\u5c31\u4f1a\u5bfc\u81f4\u4ece\u524d\u5411\u540e\u65e0\u6cd5\u6b63\u5e38\u89e3\u5bc6\u56de\u53bb\uff0c\u56e0\u6b64\u9700\u8981\u4ecev5\uff0cv4\u5f00\u59cb\u89e3\u5bc6\u3002<\/p>\n<p>\u8be5\u9898\u7684\u89e3\u5bc6\u811a\u672c\u4e3a:<\/p>\n<pre><code class=\"language-c++\">#include&lt;iostream&gt;\n#include&lt;algorithm&gt;\n#include&lt;cstdio&gt;\n#include&lt;cmath&gt;\n#include&lt;map&gt;\n#include&lt;vector&gt;\n#include&lt;queue&gt;\n#include&lt;stack&gt;\n#include&lt;set&gt;\n#include&lt;string&gt;\n#include&lt;cstring&gt;\n#include&lt;list&gt;\n#include&lt;stdlib.h&gt;\nusing namespace std;\ntypedef int status;\ntypedef int selemtype;\n#include &lt;stdio.h&gt;\n#include &lt;stdint.h&gt;\n\nvoid m41encrypthkIa6DI(unsigned int iArr[]) {\n    int i;\n    unsigned int r1[4] = {2233, 4455, 6677, 8899};\n    int i2 = 0;\n    int i3 = 0;\n    unsigned int i4 = 0;\n    int a1 = iArr[0];\n    int a2 = iArr[1];\n    for(int i = 0 ; i &lt;= 32 ; i++ )\n    {\n        i4+=878077251;\n    }\n    do {\n        i3++;\n        i = i2 + 1;\n        i4 = i4 - 878077251;\n        iArr[i] -= (unsigned int)( ((unsigned int)(iArr[i2] &lt;&lt; 4 )^ (unsigned int)(iArr[i2] &gt;&gt; 5) )+ iArr[i2] ) ^ (unsigned int)(r1[(i4 &gt;&gt; 11) &amp; 3] + i4);\n        iArr[i2] -= (unsigned int)( (unsigned int)(r1[i4 &amp; 3] + i4) ^ (unsigned int)((unsigned int)( (iArr[i] &lt;&lt; 4)  ^ (unsigned int)(iArr[i] &gt;&gt; 5) ) + iArr[i] ))^ i4;\n    } while (i3 &lt;= 32);\n    i2 = i;\n}\nunsigned int flag[11]={0};\nint main ()\n{\n    flag[0]=637666042;\n    flag[1]=457511012;\n    flag[2]=-2038734351;\n    flag[3]=578827205;\n    flag[4]=-245529892;\n    flag[5]=-1652281167;\n    flag[6]=435335655;\n    flag[7]=733644188;\n    flag[8]=705177885;\n    flag[9]=-596608744;\n    for(int i = 8 ; i &gt;= 0 ; i -- )\n    {\n        m41encrypthkIa6DI(flag+i);\n    }\n    for(int i = 0 ; i &lt; 10 ; i ++ )\n    {\n        printf(&quot;%x,&quot;,flag[i]);\n    }\n    cout&lt;&lt;endl;\n\/\/  printf(&quot;\\n%c\\n&quot;,0x5a);\n    printf(&quot;%s\\n&quot;,flag);\n}<\/code><\/pre>\n<h4>[[HNCTF 2022 WEEK2]TTTTTTTTTea]<\/h4>\n<p>\u8be5\u9898\u52a0\u5bc6\u90e8\u5206:<\/p>\n<pre><code class=\"language-C++\">__int64 __fastcall tea_encrypt(unsigned int *a1, __int64 a2)\n{\n  __int64 result; \/\/ rax\n  unsigned __int64 i; \/\/ [rsp+8h] [rbp-18h]\n  unsigned int v4; \/\/ [rsp+14h] [rbp-Ch]\n  unsigned int v5; \/\/ [rsp+18h] [rbp-8h]\n  unsigned int v6; \/\/ [rsp+1Ch] [rbp-4h]\n\n  v6 = *a1;\n  v5 = a1[1];\n  v4 = 0;\n  for ( i = 0i64; i &lt;= 0x1F; ++i )\n  {\n    v6 += (((v5 &gt;&gt; 5) ^ (16 * v5)) + v5) ^ (*(_DWORD *)(4i64 * (v4 &amp; 3) + a2) + v4);\n    v4 -= 1640531527;\n    v5 += (((v6 &gt;&gt; 5) ^ (16 * v6)) + v6) ^ (*(_DWORD *)(4i64 * ((v4 &gt;&gt; 11) &amp; 3) + a2) + v4);\n  }\n  *a1 = v6;\n  result = v5;\n  a1[1] = v5;\n  return result;\n}<\/code><\/pre>\n<p>\u53ef\u4ee5\u53d1\u73b0\u8fd9\u663e\u7136\u662f\u4e00\u9053tea\u52a0\u5bc6\u7684\u9898\u76ee\uff0c\u4e3aXTEA\u3002\u8fd9\u91cc\u9700\u8981\u8bb2\u89e3\u7684\u662ftea\u5e38\u89c1\u7684key\u5b58\u50a8\u65b9\u5f0f\uff0c\u6211\u4eec\u5728ida\u4e2d\u53ef\u4ee5\u770b\u5230\u8be5\u9898key\u5b58\u50a8\u65b9\u5f0f<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/shangwendada.top\/wp-content\/uploads\/2023\/02\/image-1677167994597.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/shangwendada.top\/wp-content\/uploads\/2023\/02\/image-1677167994597.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"file\" \/><\/div><\/p>\n<p>\u53ef\u4ee5\u53d1\u73b0\u6b63\u5e38\u7684tea\u5b58\u50a8key\u7684\u65b9\u5f0f\u53ea\u67094\u4e2a\u6570\u5b57\uff0c\u800c\u8be5\u5904\u51fa\u73b0\u4e8616\u4f4d\u6570\u5b57\uff0c\u5176\u5b9e\u5728\u5f00\u5934\u7684\u4ecb\u7ecd\u4e2d\u8bf4\u8fc7key\u662f\u7531128bit\u7ec4\u6210\u7684\uff0c\u5206\u5272\u6210\u4e3a\u56db\u4efd32bit\u7684\u503c\uff0c\u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u770b\u5230ida\u4e2d\u8fd9\u91cc\u7684\u4e00\u4e2a\u6570\u5b57\u4e3a2byte\u4e5f\u5c31\u662f8bit\u90a3\u4e48\u6211\u4eec\u9700\u8981\u53d6\u56db\u4f4d\u6570\u5b57\uff0c\u7136\u540e\u7531\u4e8e\u5c0f\u7aef\u5e8f\u5b58\u50a8\u7684\u95ee\u9898\uff0c\u7c7b\u4f3c\u4e8e\u8be5\u9898\u5219\u6211\u4eec\u5e94\u8be5\u5199\u7684\u662f0x00010203,0x04050607,0x08090A0B,0x0C0D0E0F\u3002\u5c31\u662f\u6211\u4eec\u9700\u8981\u4f7f\u7528\u7684key\u503c\u3002<\/p>\n<p>\u8be5\u9898\u7684\u89e3\u5bc6\u811a\u672c\u6b64\u5904\u5c31\u4e0d\u8d34\u51fa\u4e86\uff0c\u53ea\u662f\u8bb2\u8bb2\u8fd9\u79cd\u5178\u578b\u7684key\u503c\u5b58\u53d6\u95ee\u9898\u3002tea\u7684\u8003\u70b9\u57fa\u672c\u5982\u6b64.<\/p>\n<h3>xxtea<\/h3>\n<p>\u63ed\u79d8\u52a0\u5bc6\u811a\u672c:<\/p>\n<pre><code class=\"language-cpp\">#include &lt;stdint.h&gt;  \n#define DELTA 0x9e3779b9  \n#define MX (((z&gt;&gt;5^y&lt;&lt;2) + (y&gt;&gt;3^z&lt;&lt;4)) ^ ((sum^y) + (key[(p&amp;3)^e] ^ z)))  \n\nvoid btea(uint32_t* v, int n, uint32_t const key[4])\n{\n    uint32_t y, z, sum;\n    unsigned p, rounds, e;\n    if (n &gt; 1)            \/* Coding Part *\/\n    {\n        rounds = 6 + 52 \/ n;\n        sum = 0;\n        z = v[n - 1];\n        do\n        {\n            sum += DELTA;\n            e = (sum &gt;&gt; 2) &amp; 3;\n            for (p = 0; p &lt; n - 1; p++)\n            {\n                y = v[p + 1];\n                z = v[p] += MX;\n            }\n            y = v[0];\n            z = v[n - 1] += MX;\n        } while (--rounds);\n    }\n    else if (n &lt; -1)      \/* Decoding Part *\/\n    {\n        n = -n;\n        rounds = 6 + 52 \/ n;\n        sum = rounds * DELTA;\n        y = v[0];\n        do\n        {\n            e = (sum &gt;&gt; 2) &amp; 3;\n            for (p = n - 1; p &gt; 0; p--)\n            {\n                z = v[p - 1];\n                y = v[p] -= MX;\n            }\n            z = v[n - 1];\n            y = v[0] -= MX;\n            sum -= DELTA;\n        } while (--rounds);\n    }\n}\n\nint main()\n{\n    uint32_t v[5] = { 0x22A577C1,0x1C12C03,0x0C74C3EBD,0x0A9D03C85,0x0ADB8FFB3};\n    uint32_t const k[4] = { 55,66,77,88 };\n    int n = 5; \/\/n\u7684\u7edd\u5bf9\u503c\u8868\u793av\u7684\u957f\u5ea6\uff0c\u53d6\u6b63\u8868\u793a\u52a0\u5bc6\uff0c\u53d6\u8d1f\u8868\u793a\u89e3\u5bc6  \n    \/\/ v\u4e3a\u8981\u52a0\u5bc6\u7684\u6570\u636e\u662f\u4e24\u4e2a32\u4f4d\u65e0\u7b26\u53f7\u6574\u6570  \n    \/\/ k\u4e3a\u52a0\u5bc6\u89e3\u5bc6\u5bc6\u94a5\uff0c\u4e3a4\u4e2a32\u4f4d\u65e0\u7b26\u53f7\u6574\u6570\uff0c\u5373\u5bc6\u94a5\u957f\u5ea6\u4e3a128\u4f4d  \n    btea(v, -n, k);\n    for (int i = 0; i &lt; n; i++)\n    {\n        for (int j = 0; j &lt;sizeof(uint32_t) \/ sizeof(uint8_t) ; j++)\n        {\n            printf(&quot;%c&quot;, (v[i] &gt;&gt; (j * 8)) &amp; 0xFF);\/\/\u53ef\u80fd\u4e0e\u5927\u5c0f\u7aef\u6709\u5173\n        }\n    }\n    return 0;\n}\/\/NSSCTF{He110_w0r1d!}<\/code><\/pre>\n<h2>RC4<\/h2>\n<h3>\u4ecb\u7ecd:<\/h3>\n<p>RC4\u662f\u4e00\u79cd\u6d41\u5bc6\u7801\u7b97\u6cd5\uff0c\u7531Ron Rivest\u4e8e1987\u5e74\u8bbe\u8ba1\u3002RC4\u7684\u540d\u5b57\u6e90\u4e8e\u5b83\u662f\u201cRivest Cipher 4\u201d\u7684\u7f29\u5199\u3002<\/p>\n<p>RC4\u7b97\u6cd5\u4f7f\u7528\u53d8\u91cf\u957f\u5ea6\u7684\u5bc6\u94a5\u6765\u751f\u6210\u4f2a\u968f\u673a\u6bd4\u7279\u6d41\uff0c\u8be5\u6bd4\u7279\u6d41\u53ef\u4ee5\u4e0e\u660e\u6587\u8fdb\u884c\u5f02\u6216\u8fd0\u7b97\u5f97\u5230\u5bc6\u6587\u3002RC4\u7b97\u6cd5\u7684\u7279\u70b9\u662f\u7b80\u5355\u9ad8\u6548\uff0c\u9002\u7528\u4e8e\u4f4e\u5e26\u5bbd\u7684\u7f51\u7edc\u901a\u4fe1\u3002<\/p>\n<p>RC4\u7b97\u6cd5\u7684\u6838\u5fc3\u662f\u5bc6\u94a5\u8c03\u5ea6\u7b97\u6cd5\uff08Key Scheduling Algorithm\uff0cKSA\uff09\u548c\u4f2a\u968f\u673a\u751f\u6210\u7b97\u6cd5\uff08Pseudo-Random Generation Algorithm\uff0cPRGA\uff09\u3002\u5bc6\u94a5\u8c03\u5ea6\u7b97\u6cd5\u5c06\u5bc6\u94a5\u6309\u5b57\u8282\u5206\u6210256\u4e2a\u5143\u7d20\u7684S\u76d2\uff0c\u7136\u540e\u5bf9S\u76d2\u8fdb\u884c\u6df7\u6dc6\u548c\u7f6e\u6362\uff0c\u751f\u6210256\u4e2a\u968f\u673a\u6392\u5217\u7684\u5b57\u8282\uff0c\u5373\u5bc6\u94a5\u8c03\u5ea6\u8868\u3002\u4f2a\u968f\u673a\u751f\u6210\u7b97\u6cd5\u5219\u4f7f\u7528\u5bc6\u94a5\u8c03\u5ea6\u8868\u548c\u4e00\u4e2a\u8ba1\u6570\u5668\u6765\u751f\u6210\u4f2a\u968f\u673a\u6bd4\u7279\u6d41\u3002<\/p>\n<p>RC4\u7b97\u6cd5\u7684\u52a0\u5bc6\u8fc7\u7a0b\u5982\u4e0b\uff1a<\/p>\n<ol>\n<li>\u521d\u59cb\u5316\uff1a\u521b\u5efa\u4e00\u4e2a256\u5b57\u8282\u7684S\u76d2\uff0c\u4f7f\u7528\u5bc6\u94a5\u8c03\u5ea6\u7b97\u6cd5\u751f\u6210\u5bc6\u94a5\u8c03\u5ea6\u8868\uff0c\u5e76\u521d\u59cb\u5316\u8ba1\u6570\u5668\u3002<\/li>\n<li>\u751f\u6210\u4f2a\u968f\u673a\u6bd4\u7279\u6d41\uff1a\u4f7f\u7528\u5bc6\u94a5\u8c03\u5ea6\u8868\u548c\u8ba1\u6570\u5668\u751f\u6210\u4f2a\u968f\u673a\u6bd4\u7279\u6d41\u3002<\/li>\n<li>\u660e\u6587\u52a0\u5bc6\uff1a\u5c06\u660e\u6587\u4e0e\u4f2a\u968f\u673a\u6bd4\u7279\u6d41\u8fdb\u884c\u5f02\u6216\u8fd0\u7b97\u5f97\u5230\u5bc6\u6587\u3002<\/li>\n<li>\u91cd\u590d\u6b65\u9aa42\u548c3\uff1a\u4f7f\u7528\u76f8\u540c\u7684\u5bc6\u94a5\u548c\u521d\u59cb\u5316\u5411\u91cf\u5bf9\u6bcf\u4e2a\u6570\u636e\u5757\u91cd\u590d\u6267\u884c\u6b65\u9aa42\u548c3\u3002<\/li>\n<\/ol>\n<p>RC4\u7b97\u6cd5\u7684\u89e3\u5bc6\u8fc7\u7a0b\u4e0e\u52a0\u5bc6\u8fc7\u7a0b\u76f8\u540c\uff0c\u56e0\u4e3a\u5f02\u6216\u8fd0\u7b97\u662f\u53ef\u9006\u7684\u3002<\/p>\n<p>\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0cRC4\u7b97\u6cd5\u7684\u5bc6\u94a5\u957f\u5ea6\u4e0d\u5e94\u592a\u77ed\uff0c\u5426\u5219\u5bb9\u6613\u53d7\u5230\u653b\u51fb\u3002\u901a\u5e38\u5efa\u8bae\u4f7f\u7528\u957f\u5ea6\u4e3a128\u4f4d\u6216\u4ee5\u4e0a\u7684\u5bc6\u94a5\u3002\u6b64\u5916\uff0cRC4\u7b97\u6cd5\u5728\u521d\u59cb\u5316\u65f6\u9700\u8981\u907f\u514d\u4f7f\u7528\u76f8\u540c\u7684\u5bc6\u94a5\u548c\u521d\u59cb\u5316\u5411\u91cf\uff0c\u5426\u5219\u4f1a\u5bfc\u81f4\u751f\u6210\u7684\u4f2a\u968f\u673a\u6bd4\u7279\u6d41\u91cd\u590d\uff0c\u4ece\u800c\u964d\u4f4e\u52a0\u5bc6\u5f3a\u5ea6\u3002<\/p>\n<h3>\u5173\u952e\u53d8\u91cf<\/h3>\n<p>1\u3001<strong>\u5bc6\u94a5\u6d41<\/strong>\uff1aRC4\u7b97\u6cd5\u7684\u5173\u952e\u662f\u6839\u636e\u660e\u6587\u548c\u5bc6\u94a5\u751f\u6210\u76f8\u5e94\u7684\u5bc6\u94a5\u6d41\uff0c\u5bc6\u94a5\u6d41\u7684\u957f\u5ea6\u548c\u660e\u6587\u7684\u957f\u5ea6\u662f\u5bf9\u5e94\u7684\uff0c\u4e5f\u5c31\u662f\u8bf4\u660e\u6587\u7684\u957f\u5ea6\u662f500\u5b57\u8282\uff0c\u90a3\u4e48\u5bc6\u94a5\u6d41\u4e5f\u662f500\u5b57\u8282\u3002\u5f53\u7136\uff0c\u52a0\u5bc6\u751f\u6210\u7684\u5bc6\u6587\u4e5f\u662f500\u5b57\u8282\uff0c\u56e0\u4e3a<strong>\u5bc6\u6587\u7b2ci\u5b57\u8282=\u660e\u6587\u7b2ci\u5b57\u8282^\u5bc6\u94a5\u6d41\u7b2ci\u5b57\u8282<\/strong>\uff1b<\/p>\n<p>2\u3001<strong>\u72b6\u6001\u5411\u91cfS<\/strong>\uff1a\u957f\u5ea6\u4e3a256\uff0cS[0],S[1]&#8230;..S[255]\u3002\u6bcf\u4e2a\u5355\u5143\u90fd\u662f\u4e00\u4e2a\u5b57\u8282\uff0c\u7b97\u6cd5\u8fd0\u884c\u7684\u4efb\u4f55\u65f6\u5019\uff0cS\u90fd\u5305\u62ec0-255\u76848\u6bd4\u7279\u6570\u7684\u6392\u5217\u7ec4\u5408\uff0c\u53ea\u4e0d\u8fc7\u503c\u7684\u4f4d\u7f6e\u53d1\u751f\u4e86\u53d8\u6362\uff1b<\/p>\n<p>3\u3001<strong>\u4e34\u65f6\u5411\u91cfT<\/strong>\uff1a\u957f\u5ea6\u4e5f\u4e3a256\uff0c\u6bcf\u4e2a\u5355\u5143\u4e5f\u662f\u4e00\u4e2a\u5b57\u8282\u3002\u5982\u679c\u5bc6\u94a5\u7684\u957f\u5ea6\u662f256\u5b57\u8282\uff0c\u5c31\u76f4\u63a5\u628a\u5bc6\u94a5\u7684\u503c\u8d4b\u7ed9T\uff0c\u5426\u5219\uff0c\u8f6e\u8f6c\u5730\u5c06\u5bc6\u94a5\u7684\u6bcf\u4e2a\u5b57\u8282\u8d4b\u7ed9T\uff1b<\/p>\n<p>4\u3001<strong>\u5bc6\u94a5K<\/strong>\uff1a\u957f\u5ea6\u4e3a1-256\u5b57\u8282\uff0c\u6ce8\u610f\u5bc6\u94a5\u7684\u957f\u5ea6keylen \u4e0e\u660e\u6587\u957f\u5ea6\u3001\u5bc6\u94a5\u6d41\u7684\u957f\u5ea6\u6ca1\u6709\u5fc5\u7136\u5173\u7cfb\uff0c\u901a\u5e38\u5bc6\u94a5\u7684\u957f\u5ea6\u8da3\u547316\u5b57\u8282\uff08128\u6bd4\u7279\uff09\u3002<\/p>\n<h3>\u4e09\u6b65\u52a0\u5bc6<\/h3>\n<h4>\u521d\u59cb\u5316S\u548cT<\/h4>\n<pre><code class=\"language-cpp\"> int Len = strlen(key);\n for(i=0;i&lt;256;i++) {\n        s[i]=i;\n        T[i]=key[i%Len];\n    }<\/code><\/pre>\n<h4>\u521d\u59cb\u5316\u6392\u5217S<\/h4>\n<pre><code class=\"language-cpp\"> for(i=0;i&lt;256;i++) {\n        j=(j+s[i]+k[i])%256;\n        tmp=s[i];\n        s[i]=s[j];\/\/\u4ea4\u6362s[i]\u548cs[j]\n        s[j]=tmp;\n    }<\/code><\/pre>\n<h4>\u4ea7\u751f\u5bc6\u94a5\u6d41<\/h4>\n<pre><code class=\"language-cpp\">int i=0,j=0,t=0;\nunsigned long k=0;\nunsigned char tmp;\nfor(k=0;k &lt; len;k++)\n{\n    i=(i+1)%256;\n    j=(j+s[i])%256;\n    tmp=s[i];\n    s[i]=s[j]; \/\/\u4ea4\u6362s[x]\u548cs[y]\n    s[j]=tmp;\n}<\/code><\/pre>\n<h4>\u6d41\u7a0b\u56fe<\/h4>\n<pre><code>                 +------------+\n            +---&gt;| Initialize |\n            |    +------------+\n            |          |\n            |          | (K)\n            |          v\n            |    +------------+\n            |    | Key-scheduling |\n            |    +------------+\n            |          |\n            |          | (P)\n            |          v\n            |    +------------+\n            +---&gt;|  Encryption  |\n                 +------------+\n                      |\n                      v\n                 +------------+\n                 |  Output CT  |\n                 +------------+\n<\/code><\/pre>\n<h3>\u5b8c\u6574\u52a0\u5bc6\u89e3\u5bc6\u7a0b\u5e8f<\/h3>\n<pre><code class=\"language-cpp\">\/\/\u7a0b\u5e8f\u5f00\u59cb\n#include&lt;stdio.h&gt;\n#include&lt;string.h&gt;\ntypedef unsigned longULONG;\n\n\/*\u521d\u59cb\u5316\u51fd\u6570*\/\nvoid rc4_init(unsigned char*s, unsigned char*key, unsigned long Len)\n{\n    int i = 0, j = 0;\n    char k[256] = { 0 };\n    unsigned char tmp = 0;\n    for (i = 0; i&lt;256; i++)\n    {\n        s[i] = i;\n        k[i] = key[i%Len];\n    }\n    for (i = 0; i&lt;256; i++)\n    {\n        j = (j + s[i] + k[i]) % 256;\n        tmp = s[i];\n        s[i] = s[j];\/\/\u4ea4\u6362s[i]\u548cs[j]\n        s[j] = tmp;\n    }\n}\n\n\/*\u52a0\u89e3\u5bc6*\/\nvoid rc4_crypt(unsigned char*s, unsigned char*Data, unsigned long Len)\n{\n    int i = 0, j = 0, t = 0;\n    unsigned long k = 0;\n    unsigned char tmp;\n    for (k = 0; k&lt;Len; k++)\n    {\n        i = (i + 1) % 256;\n        j = (j + s[i]) % 256;\n        tmp = s[i];\n        s[i] = s[j];\/\/\u4ea4\u6362s[x]\u548cs[y]\n        s[j] = tmp;\n        t = (s[i] + s[j]) % 256;\n        Data[k] ^= s[t];\n    }\n}\n\nint main()\n{\n    unsigned char s[256] = { 0 }, s2[256] = { 0 };\/\/S-box\n    char key[256] = { &quot;justfortest&quot; };\n    char pData[512] = &quot;\u8fd9\u662f\u4e00\u4e2a\u7528\u6765\u52a0\u5bc6\u7684\u6570\u636eData&quot;;\n    unsigned long len = strlen(pData);\n    int i;\n\n    printf(&quot;pData=%s\\n&quot;, pData);\n    printf(&quot;key=%s,length=%d\\n\\n&quot;, key, strlen(key));\n    rc4_init(s, (unsigned char*)key, strlen(key));\/\/\u5df2\u7ecf\u5b8c\u6210\u4e86\u521d\u59cb\u5316\n    printf(&quot;\u5b8c\u6210\u5bf9S[i]\u7684\u521d\u59cb\u5316\uff0c\u5982\u4e0b\uff1a\\n\\n&quot;);\n    for (i = 0; i&lt;256; i++)\n    {\n        printf(&quot;%02X&quot;, s[i]);\n        if (i &amp;&amp; (i + 1) % 16 == 0)putchar(&#039;\\n&#039;);\n    }\n    printf(&quot;\\n\\n&quot;);\n    for (i = 0; i&lt;256; i++)\/\/\u7528s2[i]\u6682\u65f6\u4fdd\u7559\u7ecf\u8fc7\u521d\u59cb\u5316\u7684s[i]\uff0c\u5f88\u91cd\u8981\u7684\uff01\uff01\uff01\n    {\n        s2[i] = s[i];\n    }\n    printf(&quot;\u5df2\u7ecf\u521d\u59cb\u5316\uff0c\u73b0\u5728\u52a0\u5bc6:\\n\\n&quot;);\n    rc4_crypt(s, (unsigned char*)pData, len);\/\/\u52a0\u5bc6\n    printf(&quot;pData=%s\\n\\n&quot;, pData);\n    printf(&quot;\u5df2\u7ecf\u52a0\u5bc6\uff0c\u73b0\u5728\u89e3\u5bc6:\\n\\n&quot;);\n    \/\/rc4_init(s,(unsignedchar*)key,strlen(key));\/\/\u521d\u59cb\u5316\u5bc6\u94a5\n    rc4_crypt(s2, (unsigned char*)pData, len);\/\/\u89e3\u5bc6\n    printf(&quot;pData=%s\\n\\n&quot;, pData);\n    return 0;\n}\n\n\/\/\u7a0b\u5e8f\u5b8c<\/code><\/pre>\n<h3>\u5e38\u89c1\u9898\u578b\u4ee5\u53ca\u89e3\u7b54<\/h3>\n<p>RC4\u7684\u52a0\u5bc6\u89e3\u5bc6\u95ee\u9898\u5206\u4e3a\u4e24\u79cd\u65b9\u5f0f\uff0c\u56e0\u4e3a\u6211\u4eec\u53ef\u4ee5\u53d1\u73b0rc4\u5176\u4e2d\u6b27\u51a0\u7684\u521d\u59cb\u5316S,T\u4e0e\u521d\u59cb\u5316\u6392\u5217S\u76d2\u90fd\u662f\u4e0e\u6211\u4eec\u9700\u8981\u52a0\u5bc6\u7684\u5bc6\u94a5\u65e0\u5173\u7684\uff0c\u6700\u7ec8\u4e0e\u52a0\u5bc6\u539f\u6587\u6709\u5173\u7684\u53ea\u6709\u6700\u540e\u4e00\u6bb5\u7684\u5f02\u6216\u3002\u56e0\u6b64RC4\u9898\u578b\u7ed9\u51fa\u4e24\u79cd\u89e3\u7b54\u65b9\u6cd5\u3002<\/p>\n<p>\u8fd9\u91cc\u5229\u7528\u4f8b\u9898\u6765\u8bb2\u89e3:<a href=\"https:\/\/shangwendada.top\/index.php\/2022\/11\/09\/reversecryptrc4\/\">[Reverse]crypt<\/a><\/p>\n<h4>\u52a8\u6001\u8c03\u8bd5\u53d6\u5f02\u6216\u503c\uff1a<\/h4>\n<p>\u6211\u4eec\u5c06\u4e0a\u6587\u4e2d\u5199\u5230\u7684\u52a0\u5bc6\u811a\u672c\u7f16\u8bd1\u540e\u653e\u5165ida\u4e2d\u89c2\u5bdf\u3002<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/shangwendada.top\/wp-content\/uploads\/2023\/02\/image-1677168118883.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/shangwendada.top\/wp-content\/uploads\/2023\/02\/image-1677168118883.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"file\" \/><\/div><\/p>\n<p>\u53ef\u4ee5\u770b\u5230rc4\u7684\u7279\u70b9\u5c31\u662f\u901a\u5e38\u4f7f\u7528\u4e24\u4e2a\u52a0\u5bc6\u51fd\u6570\uff0c\u4e00\u4e2a\u7528\u6765\u521d\u59cb\u5316S\u76d2\u4e0eT\u76d2\uff0c\u53e6\u4e00\u4e2a\u5219\u7528\u6765\u5c06\u660e\u6587\u4e0e\u5bc6\u94a5\u6d41\u5f02\u6216\u3002<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/shangwendada.top\/wp-content\/uploads\/2023\/02\/image-1677168132435.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/shangwendada.top\/wp-content\/uploads\/2023\/02\/image-1677168132435.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"file\" \/><\/div><\/p>\n<p>\u56e0\u6b64\u6211\u4eec\u53ea\u9700\u8981\u5728\u5f02\u6216\u5904\u4e0b\u65ad\u70b9\u7136\u540e\u62ff\u51fa\u5bc4\u5b58\u5668\u4e2d\u7684\u503c\u4e0e\u5bc6\u6587\u5f02\u6216\u5c31\u80fd\u591f\u89e3\u51b3\u95ee\u9898\u3002<\/p>\n<h4>\u5e38\u89c4\u811a\u672c\u89e3\u6cd5<\/h4>\n<p>\u5e38\u89c4\u811a\u672c\u5c31\u662f\u590d\u5236\u7c98\u8d34\u4e0b\u9898\u76ee\u7684\u52a0\u5bc6\u89e3\u5bc6\u51fd\u6570\uff0c\u5c06\u9898\u76ee\u4e2d\u7684\u52a0\u5bc6\u51fd\u6570\u590d\u5236\u4e0b\u6765\uff0c\u7136\u540e\u76f4\u63a5\u4f7f\u7528\u5c31\u884c\uff0c\u8fd9\u91cc\u8d34\u51fa\u4f8b\u9898\u4e2d\u7684\u89e3\u5bc6\u811a\u672c<\/p>\n<pre><code class=\"language-C++\">#include&lt;stdio.h&gt;\n#include&lt;windows.h&gt;\n#include&lt;cstring&gt;\nusing namespace std;\n\nchar key[] =\n{\n  0x9E, 0xE7, 0x30, 0x5F, 0xA7, 0x01, 0xA6, 0x53, 0x59, 0x1B, \n  0x0A, 0x20, 0xF1, 0x73, 0xD1, 0x0E, 0xAB, 0x09, 0x84, 0x0E, \n  0x8D, 0x2B, 0x00, 0x00\n};\nchar Str[]=&quot;12345678abcdefghijklmnopqrspxyz&quot;;\n__int64 __fastcall sub_140001120(DWORD *a1, char *a2, int a3)\n{\n  __int64 result; \/\/ rax\n  int i; \/\/ [rsp+0h] [rbp-28h]\n  int j; \/\/ [rsp+0h] [rbp-28h]\n  int v6; \/\/ [rsp+4h] [rbp-24h]\n  int v7; \/\/ [rsp+8h] [rbp-20h]\n  int v8; \/\/ [rsp+Ch] [rbp-1Ch]\n  DWORD *v9; \/\/ [rsp+10h] [rbp-18h]\n\n  *a1 = 0;\n  a1[1] = 0;\n  v9 = a1 + 2;\n  for ( i = 0; i &lt; 256; ++i )\n    v9[i] = i;\n  v6 = 0;\n  result = 0;\n  v7 = 0;\n  for ( j = 0; j &lt; 256; ++j )\n  {\n    v8 = v9[j];\n    v7 = (unsigned __int8)(*(BYTE *)(a2 + v6) + v8 + v7);\n    v9[j] = v9[v7];\n    v9[v7] = v8;\n    if ( ++v6 &gt;= a3 )\n      v6 = 0;\n    result = (unsigned int)(j + 1);\n  }\n  return result;\n}\nDWORD sub_140001240(DWORD *a1, char* a2, int a3)\n{\n  DWORD *result; \/\/ rax\n  int i; \/\/ [rsp+0h] [rbp-28h]\n  int v5; \/\/ [rsp+4h] [rbp-24h]\n  int v6; \/\/ [rsp+8h] [rbp-20h]\n  int v7; \/\/ [rsp+Ch] [rbp-1Ch]\n  int v8; \/\/ [rsp+10h] [rbp-18h]\n  DWORD *v9; \/\/ [rsp+18h] [rbp-10h]\n\n  v5 = *a1;\n  v6 = a1[1];\n  v9 = a1 + 2;\n  for ( i = 0; i &lt; a3; ++i )\n  {\n    v5 = (unsigned __int8)(v5 + 1);\n    v7 = v9[v5];\n    v6 = (unsigned __int8)(v7 + v6);\n    v8 = v9[v6];\n    v9[v5] = v8;\n    v9[v6] = v7;\n    *(BYTE *)(a2 + i) ^= LOBYTE(v9[(unsigned __int8)(v8 + v7)]);\n  }\n  *a1 = v5;\n  result = a1;\n  a1[1] = v6;\n}\nint i;\nint main()\n{\n    DWORD *v9;\n    v9=(DWORD *)malloc(0x408*sizeof(v9));\n    sub_140001120(v9,Str,strlen(Str));\n    for(int i = 0 ; i &lt; strlen(key);i ++  )\n    {\n        key[i]^=34;\n    }\n    sub_140001240(v9,key,strlen(key));\n    printf(&quot;%s&quot;,key);\n}<\/code><\/pre>\n<h4>\u6ce8\u610f<\/h4>\n<p>RC4\u51fa\u9898\u4e2d\uff0c\u4f2a\u6bd4\u7279\u6d41\u7684\u4ea7\u751f\u65b9\u6cd5\u4e0d\u552f\u4e00\uff0c\u4e5f\u5c31\u662f\u8bf4S\u76d2\u4e0eT\u76d2\u7684\u5236\u4f5c\u65b9\u6cd5\u4e0d\u4f1a\u552f\u4e00\uff0c\u5b58\u5728\u8f83\u5927\u7684\u9b54\u6539\u7a7a\u95f4\u3002<\/p>\n<h2>ChaCha20(\u8f83\u4e3a\u504f\u50fb)<\/h2>\n<p>[\u7531\u4e8e\u8be5\u52a0\u5bc6\u65b9\u5f0f\u8003\u7684\u6bd4\u8f83\u5c11,\u6b64\u5904\u4e0d\u6df1\u5165\u7814\u7a76]<\/p>\n<h3>\u4ecb\u7ecd:<\/h3>\n<p>ChaCha20\u662f\u4e00\u79cd\u6d41\u5bc6\u7801\u7b97\u6cd5\uff0c\u7528\u4e8e\u52a0\u5bc6\u548c\u89e3\u5bc6\u6570\u636e\u6d41\u3002\u5b83\u7531Daniel J. Bernstein\u4e8e2008\u5e74\u8bbe\u8ba1\uff0c\u662fSalsa20\u7684\u6539\u8fdb\u7248\uff0c\u88ab\u5e7f\u6cdb\u5e94\u7528\u4e8e\u7f51\u7edc\u901a\u4fe1\u3001\u52a0\u5bc6\u6587\u4ef6\u548c\u5b58\u50a8\u4ecb\u8d28\u7b49\u9886\u57df\u3002<\/p>\n<p>ChaCha20\u7b97\u6cd5\u4f7f\u7528256\u4f4d\u7684\u5bc6\u94a5\u548c\u4e00\u4e2a12\u5b57\u8282\u7684\u968f\u673a\u6570\uff08\u79f0\u4e3anonce\uff09\u4f5c\u4e3a\u8f93\u5165\uff0c\u751f\u6210\u4e00\u4e2a\u53ef\u53d8\u957f\u5ea6\u7684\u4f2a\u968f\u673a\u6bd4\u7279\u6d41\uff0c\u7136\u540e\u4e0e\u660e\u6587\u8fdb\u884c\u5f02\u6216\u8fd0\u7b97\u5f97\u5230\u5bc6\u6587\u3002ChaCha20\u7b97\u6cd5\u7684\u7279\u70b9\u662f\u5feb\u901f\u3001\u5b89\u5168\u3001\u6613\u4e8e\u5b9e\u73b0\u548c\u5185\u5b58\u53cb\u597d\uff0c\u9002\u7528\u4e8e\u9ad8\u901f\u7f51\u7edc\u901a\u4fe1\u548c\u79fb\u52a8\u8bbe\u5907\u3002<\/p>\n<h3>\u4e0eRC4\u7684\u533a\u522b<\/h3>\n<p>\u773c\u5c16\u7684\u53ef\u80fd\u53d1\u73b0\u4e86\uff0cchacha20\u4e5f\u662f\u4f7f\u7528\u4f2a\u968f\u673a\u6bd4\u7279\u6d41\u6765\u4ea7\u751f\u5bc6\u94a5\u7684\uff0c\u7136\u540e\u5c06\u5bc6\u94a5\u4e0e\u660e\u6587\u5f02\u6216\u8fdb\u884c\u52a0\u5bc6\uff0c\u63a5\u4e0b\u6765\u5c31\u8bb2\u8bb2\u4ed6\u4eec\u5728\u5b89\u5168\u6027\u4e0b\u7684\u533a\u522b\u5427\u3002<\/p>\n<p>Chacha20\u548cRC4\u90fd\u662f\u6d41\u5bc6\u7801\u7b97\u6cd5\uff0c\u4f46\u5b83\u4eec\u7684\u52a0\u5bc6\u539f\u7406\u6709\u4ee5\u4e0b\u51e0\u4e2a\u533a\u522b\uff1a<\/p>\n<ol>\n<li>\u5bc6\u94a5\u957f\u5ea6\uff1aChacha20\u7684\u5bc6\u94a5\u957f\u5ea6\u4e3a256\u4f4d\uff0832\u5b57\u8282\uff09\uff0c\u800cRC4\u7684\u5bc6\u94a5\u957f\u5ea6\u4e3a1\u5230256\u5b57\u8282\u4e0d\u7b49\u3002\u56e0\u6b64\uff0cChacha20\u53ef\u4ee5\u63d0\u4f9b\u66f4\u5f3a\u7684\u5bc6\u94a5\u5b89\u5168\u6027\uff0c\u4e5f\u66f4\u9002\u5408\u7528\u4e8e\u73b0\u4ee3\u52a0\u5bc6\u5e94\u7528\u3002<\/li>\n<li>S\u76d2\uff1aChacha20\u6ca1\u6709S\u76d2\uff0c\u800cRC4\u4f7f\u7528\u4e00\u4e2a256\u5b57\u8282\u7684S\u76d2\u6765\u751f\u6210\u5bc6\u94a5\u6d41\u3002Chacha20\u662f\u57fa\u4e8e\u7f6e\u6362\u7684\u52a0\u5bc6\u7b97\u6cd5\uff0c\u5b83\u4f7f\u7528\u56fa\u5b9a\u7684\u7f6e\u6362\u6765\u751f\u6210\u5bc6\u94a5\u6d41\u3002<\/li>\n<li>\u52a0\u5bc6\u8fc7\u7a0b\uff1a\u5728Chacha20\u4e2d\uff0c\u901a\u8fc7\u5bf9\u8f93\u5165\u7684\u660e\u6587\u6570\u636e\u5757\u8fdb\u884c\u7f6e\u6362\u548c\u52a0\u5bc6\u64cd\u4f5c\uff0c\u751f\u6210\u5bc6\u6587\u8f93\u51fa\u3002\u6bcf\u6b21\u52a0\u5bc6\u9700\u8981\u6839\u636e\u5bc6\u94a5\u548c\u8ba1\u6570\u5668\u751f\u6210\u4e00\u4e2a\u65b0\u7684\u7f6e\u6362\u548c\u5bc6\u94a5\u6d41\u3002\u800cRC4\u662f\u5728\u5bc6\u94a5\u751f\u6210\u5b8c\u6bd5\u540e\uff0c\u76f4\u63a5\u7528\u5bc6\u94a5\u6d41\u5bf9\u8f93\u5165\u7684\u660e\u6587\u8fdb\u884c\u5f02\u6216\u64cd\u4f5c\u5f97\u5230\u5bc6\u6587\u8f93\u51fa\u3002<\/li>\n<li>\u5b89\u5168\u6027\uff1a\u7531\u4e8eRC4\u5b58\u5728\u4e00\u4e9b\u5b89\u5168\u6027\u95ee\u9898\uff0c\u5b83\u5df2\u7ecf\u4e0d\u88ab\u63a8\u8350\u4f7f\u7528\u3002\u800cChacha20\u5df2\u7ecf\u88ab\u5e7f\u6cdb\u5e94\u7528\u4e8eTLS\u3001SSH\u3001IPsec\u7b49\u52a0\u5bc6\u901a\u4fe1\u534f\u8bae\u4e2d\uff0c\u5e76\u4e14\u5176\u5b89\u5168\u6027\u5f97\u5230\u4e86\u5e7f\u6cdb\u8ba4\u53ef\u3002<\/li>\n<\/ol>\n<p>\u7efc\u4e0a\u6240\u8ff0\uff0cChacha20\u76f8\u6bd4\u4e8eRC4\uff0c\u5177\u6709\u66f4\u9ad8\u7684\u5bc6\u94a5\u5b89\u5168\u6027\u548c\u66f4\u597d\u7684\u5b89\u5168\u6027\u4fdd\u969c\uff0c\u66f4\u52a0\u9002\u5408\u7528\u4e8e\u73b0\u4ee3\u52a0\u5bc6\u5e94\u7528\u3002<\/p>\n<h3>\u52a0\u5bc6\u6b65\u9aa4<\/h3>\n<p>ChaCha20\u7b97\u6cd5\u7684\u52a0\u5bc6\u8fc7\u7a0b\u5982\u4e0b\uff1a<\/p>\n<ol>\n<li>\u521d\u59cb\u5316\uff1a\u4f7f\u7528\u5bc6\u94a5\u548c\u968f\u673a\u6570\u751f\u6210\u521d\u59cb\u72b6\u6001\u3002<\/li>\n<li>\u751f\u6210\u4f2a\u968f\u673a\u6bd4\u7279\u6d41\uff1a\u4f7f\u7528\u521d\u59cb\u72b6\u6001\u548c\u8ba1\u6570\u5668\u751f\u6210\u4f2a\u968f\u673a\u6bd4\u7279\u6d41\u3002<\/li>\n<li>\u660e\u6587\u52a0\u5bc6\uff1a\u5c06\u660e\u6587\u4e0e\u4f2a\u968f\u673a\u6bd4\u7279\u6d41\u8fdb\u884c\u5f02\u6216\u8fd0\u7b97\u5f97\u5230\u5bc6\u6587\u3002<\/li>\n<li>\u91cd\u590d\u6b65\u9aa42\u548c3\uff1a\u4f7f\u7528\u76f8\u540c\u7684\u5bc6\u94a5\u548c\u968f\u673a\u6570\u5bf9\u6bcf\u4e2a\u6570\u636e\u5757\u91cd\u590d\u6267\u884c\u6b65\u9aa42\u548c3\u3002<\/li>\n<\/ol>\n<p>ChaCha20\u7b97\u6cd5\u7684\u89e3\u5bc6\u8fc7\u7a0b\u4e0e\u52a0\u5bc6\u8fc7\u7a0b\u76f8\u540c\uff0c\u56e0\u4e3a\u5f02\u6216\u8fd0\u7b97\u662f\u53ef\u9006\u7684\u3002<\/p>\n<p>\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0cChaCha20\u7b97\u6cd5\u7684\u5bc6\u94a5\u957f\u5ea6\u4e0d\u5e94\u592a\u77ed\uff0c\u5426\u5219\u5bb9\u6613\u53d7\u5230\u653b\u51fb\u3002\u901a\u5e38\u5efa\u8bae\u4f7f\u7528\u957f\u5ea6\u4e3a256\u4f4d\u7684\u5bc6\u94a5\u3002\u6b64\u5916\uff0c\u968f\u673a\u6570\u5728\u6bcf\u6b21\u4f7f\u7528\u65f6\u5e94\u8be5\u662f\u4e0d\u540c\u7684\uff0c\u5426\u5219\u4f1a\u5bfc\u81f4\u751f\u6210\u7684\u4f2a\u968f\u673a\u6bd4\u7279\u6d41\u91cd\u590d\uff0c\u4ece\u800c\u964d\u4f4e\u52a0\u5bc6\u5f3a\u5ea6\u3002<\/p>\n<p>\u4ee5\u4e0b\u662f\u4e00\u4e2a\u4f7f\u7528Python 3\u5b9e\u73b0ChaCha20\u52a0\u5bc6\u7684\u793a\u4f8b\u811a\u672c\uff1a<\/p>\n<pre><code>import struct\nimport hashlib\n\ndef chacha20_encrypt(key, nonce, plaintext):\n    # \u751f\u6210\u521d\u59cb\u72b6\u6001\n    state = [0x61707865, 0x3320646e, 0x79622d32, 0x6b206574]\n    state += struct.unpack(&#039;&lt;4I&#039;, key)\n    state += [0] * 4\n    state += struct.unpack(&#039;&lt;3I&#039;, nonce) + [0]\n\n    # \u751f\u6210\u4f2a\u968f\u673a\u6bd4\u7279\u6d41\n    def quarterround(a, b, c, d):\n        state[a] += state[b]\n        state[d] ^= state[a]\n        state[d] = (state[d] &lt;&lt; 16) | (state[d] &gt;&gt; 16)\n        state[c] += state[d]\n        state[b] ^= state[c]\n        state[b] = (state[b] &lt;&lt; 12) | (state[b] &gt;&gt; 20)\n        state[a] += state[b]\n        state[d] ^= state[a]\n        state[d] = (state[d] &lt;&lt; 8) | (state[d] &gt;&gt; 24)\n        state[c] += state[d]\n        state[b] ^= state[c]\n        state[b] = (state[b] &lt;&lt; 7) | (state[b] &gt;&gt; 25)\n\n    buf = bytearray(plaintext)\n    for i in range(0, len(buf), 64):\n        x = state[:]\n        for j in range(10):\n            quarterround(0, 4, 8, 12)\n            quarterround(1, 5, 9, 13)\n            quarterround(2, 6, 10, 14)\n            quarterround(3, 7, 11, 15)\n            quarterround(0, 5, 10, 15)\n            quarterround(1, 6, 11, 12)\n            quarterround(2, 7, 8, 13)\n            quarterround(3, 4, 9, 14)\n        for j in range(16):\n            x[j] += state[j]\n            buf[i+j] ^= (x[j] &amp; 0xff)\n            buf[i+j+1:i+j+4] = bytes([((x[j] &gt;&gt; k) &amp; 0xff) for k in (8, 16, 24)])\n\n    return bytes(buf)\n\n# \u793a\u4f8b\u7528\u6cd5\nkey = hashlib.sha256(b&#039;my secret key&#039;).digest()\nnonce = b&#039;\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00&#039;\nplaintext = b&#039;hello world&#039;\nciphertext = chacha20_encrypt(key, nonce, plaintext)\nprint(ciphertext.hex())\n<\/code><\/pre>\n<p>\u8be5\u811a\u672c\u4e2d\u7684<code>chacha20_encrypt<\/code>\u51fd\u6570\u63a5\u6536\u5bc6\u94a5\u3001\u968f\u673a\u6570\u548c\u660e\u6587\u4f5c\u4e3a\u8f93\u5165\uff0c\u8fd4\u56de\u52a0\u5bc6\u540e\u7684\u5bc6\u6587\u3002\u5b9e\u73b0\u4e2d\u4f7f\u7528\u4e86Python\u6807\u51c6\u5e93\u4e2d\u7684<code>struct<\/code>\u6a21\u5757\u548c<code>bytearray<\/code>\u7c7b\u578b\u6765\u5904\u7406\u4e8c\u8fdb\u5236\u6570\u636e\u3002<\/p>\n<h4>\u4f8b\u9898<\/h4>\n<p>\u4e3a\u4ec0\u4e48\u8fd9\u91cc\u8bb2\u5230\u4e86chacha20\uff0c\u56e0\u4e3a\u5728Hgame\u7684\u6bd4\u8d5b\u4e2d\u51fa\u73b0\u4e86\u8be5\u9898\uff0c\u89e3\u51fa\u7684\u4eba\u8fd8\u662f\u6bd4\u8f83\u5c11\u7684\uff0c\u8fd9\u91cc\u8bb2\u8bb2<\/p>\n<p>chacha20\u8fd9\u91cc\u63a8\u8350\u76f4\u63a5dump\u5bc6\u94a5\u6765\u8fdb\u884cgetflag<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/shangwendada.top\/wp-content\/uploads\/2023\/02\/image-1677168168207.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/shangwendada.top\/wp-content\/uploads\/2023\/02\/image-1677168168207.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"file\" \/><\/div><\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/shangwendada.top\/wp-content\/uploads\/2023\/02\/image-1677168194489.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/shangwendada.top\/wp-content\/uploads\/2023\/02\/image-1677168194489.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"file\" \/><\/div><\/p>\n<pre><code class=\"language-c++\">from idaapi import get_reg_val\nprint(get_reg_val(&#039;ecx&#039;),end=&quot;,&quot;)<\/code><\/pre>\n<p>\u8fd9\u91cc\u4f7f\u7528idapython\u76f4\u63a5\u8c03\u53d6\u5bc4\u5b58\u5668\u7684\u503c<\/p>\n<p>\u89e3\u5bc6\u811a\u672c\u5c31\u662f\u5982\u4e0b:<\/p>\n<pre><code class=\"language-C++\">int main()\n{\n    unsigned int key[] = {\n    1077387342,4258923078,1013905953,3483163055,1731413945,233590496,327206097,9847\n    87250,39669927,2202679682\n    };\n    unsigned char v2[40];\n    v2[0] = 0x28;\n    v2[1] = 0x50;\n    v2[2] = -63;\n    v2[3] = 35;\n    v2[4] = -104;\n    v2[5] = -95;\n    v2[6] = 65;\n    v2[7] = 54;\n    v2[8] = 76;\n    v2[9] = 49;\n    v2[10] = -53;\n    v2[11] = 82;\n    v2[12] = -112;\n    v2[13] = -15;\n    v2[14] = -84;\n    v2[15] = -52;\n    v2[16] = 15;\n    v2[17] = 108;\n    v2[18] = 42;\n    v2[19] = -119;\n    v2[20] = 127;\n    v2[21] = -33;\n    v2[22] = 17;\n    v2[23] = -124;\n    v2[24] = 127;\n    v2[25] = -26;\n    v2[26] = -94;\n    v2[27] = -32;\n    v2[28] = 89;\n    v2[29] = -57;\n    v2[30] = -59;\n    v2[31] = 70;\n    v2[32] = 93;\n    v2[33] = 41;\n    v2[34] = 56;\n    v2[35] = -109;\n    v2[36] = -19;\n    v2[37] = 21;\n    v2[38] = 122;\n    v2[39] = -1;\n    for (int i = 0; i &lt; 10; i++)\n    {\n        putchar(v2[i*4 + 0] ^ (key[i] &gt;&gt; 24));\n        putchar(v2[i*4 + 1] ^ (key[i] &gt;&gt; 16));\n        putchar(v2[i*4 + 2] ^ (key[i] &gt;&gt; 8));\n        putchar(v2[i*4 + 3] ^ (key[i] &gt;&gt; 0));\n    }\n}\n<\/code><\/pre>\n<h2>ROT(\u7b80\u5355)<\/h2>\n<p>\u7531\u4e8e\u6bd4\u8f83\u7b80\u5355,\u8fd9\u91cc\u4e0d\u6df1\u5165\u7814\u7a76<\/p>\n<h3>\u4ecb\u7ecd<\/h3>\n<p>ROT\u52a0\u5bc6\uff0c\u4e5f\u79f0\u4e3a\u201c\u5b57\u6bcd\u4f4d\u79fb\u52a0\u5bc6\u201d\u6216\u201c\u79fb\u4f4d\u52a0\u5bc6\u201d\uff0c\u662f\u4e00\u79cd\u7b80\u5355\u7684\u52a0\u5bc6\u7b97\u6cd5\u3002\u5b83\u901a\u8fc7\u5c06\u660e\u6587\u4e2d\u7684\u6bcf\u4e2a\u5b57\u6bcd\u6309\u7167\u4e00\u5b9a\u89c4\u5219\u8fdb\u884c\u79fb\u4f4d\u64cd\u4f5c\u6765\u751f\u6210\u5bc6\u6587\uff0c\u5e38\u7528\u4e8e\u7b80\u5355\u7684\u52a0\u5bc6\u9700\u6c42\u6216\u8005\u7f16\u7801\u4e2d\u3002<\/p>\n<p>ROT\u52a0\u5bc6\u7684\u539f\u7406\u975e\u5e38\u7b80\u5355\uff0c\u53ea\u9700\u8981\u5c06\u660e\u6587\u4e2d\u7684\u6bcf\u4e2a\u5b57\u6bcd\u6309\u7167\u4e00\u5b9a\u7684\u89c4\u5219\u5411\u53f3\u79fb\u52a8\u6307\u5b9a\u7684\u4f4d\u6570\uff0c\u5f97\u5230\u5bf9\u5e94\u7684\u5bc6\u6587\u3002\u5177\u4f53\u6765\u8bf4\uff0c\u5982\u679c\u79fb\u4f4d\u6570\u4e3aN\uff0c\u5219\u660e\u6587\u4e2d\u7684\u5b57\u6bcdA\u4f1a\u88ab\u66ff\u6362\u6210\u7b2cN\u4e2a\u5b57\u6bcd\uff0cB\u4f1a\u88ab\u66ff\u6362\u6210\u7b2cN+1\u4e2a\u5b57\u6bcd\uff0c\u4ee5\u6b64\u7c7b\u63a8\u3002\u5982\u679c\u79fb\u4f4d\u6570\u4e3a26\uff08\u5373\u5b57\u6bcd\u8868\u7684\u603b\u957f\u5ea6\uff09\uff0c\u5219\u52a0\u5bc6\u540e\u7684\u5bc6\u6587\u5c31\u662f\u660e\u6587\u7684\u4e00\u79cd\u5faa\u73af\u7f6e\u6362\u3002<\/p>\n<p>ROT\u52a0\u5bc6\u7b97\u6cd5\u7684\u5f31\u70b9\u5728\u4e8e\u5b83\u7684\u52a0\u5bc6\u8fc7\u7a0b\u975e\u5e38\u7b80\u5355\uff0c\u5bb9\u6613\u88ab\u7834\u89e3\u3002\u800c\u4e14\uff0cROT\u52a0\u5bc6\u7b97\u6cd5\u53ea\u9002\u7528\u4e8e\u7eaf\u6587\u672c\u7684\u52a0\u5bc6\uff0c\u4e0d\u9002\u7528\u4e8e\u52a0\u5bc6\u6570\u5b57\u3001\u4e8c\u8fdb\u5236\u7b49\u5176\u4ed6\u6570\u636e\u7c7b\u578b\u3002<\/p>\n<h3>\u4e3e\u4f8b<\/h3>\n<p>\u4ee5\u4e0b\u662f\u4e00\u4e2a\u7b80\u5355\u7684Python\u5b9e\u73b0ROT13\u52a0\u5bc6\u7684\u4f8b\u5b50\uff1a<\/p>\n<pre><code>def rot13(s):\n    result = &#039;&#039;\n    for c in s:\n        if &#039;a&#039; &lt;= c &lt;= &#039;z&#039;:\n            result += chr((ord(c) - ord(&#039;a&#039;) + 13) % 26 + ord(&#039;a&#039;))\n        elif &#039;A&#039; &lt;= c &lt;= &#039;Z&#039;:\n            result += chr((ord(c) - ord(&#039;A&#039;) + 13) % 26 + ord(&#039;A&#039;))\n        else:\n            result += c\n    return result<\/code><\/pre>\n<p>\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c\u6211\u4eec\u5c06\u5b57\u6bcd\u6309\u7167ROT13\u7684\u89c4\u5219\u8fdb\u884c\u79fb\u4f4d\u64cd\u4f5c\u3002\u5bf9\u4e8e\u660e\u6587\u4e2d\u7684\u6bcf\u4e2a\u5b57\u6bcd\uff0c\u5982\u679c\u5b83\u662f\u4e00\u4e2a\u5c0f\u5199\u5b57\u6bcd\uff0c\u5219\u5c06\u5176\u79fb\u52a813\u4e2a\u4f4d\u7f6e\uff0c\u5982\u679c\u662f\u4e00\u4e2a\u5927\u5199\u5b57\u6bcd\uff0c\u5219\u4e5f\u5c06\u5176\u79fb\u52a813\u4e2a\u4f4d\u7f6e\u3002\u5bf9\u4e8e\u975e\u5b57\u6bcd\u5b57\u7b26\uff0c\u6211\u4eec\u76f4\u63a5\u5c06\u5176\u4fdd\u7559\u3002\u6700\u540e\u8fd4\u56de\u52a0\u5bc6\u540e\u7684\u5bc6\u6587\u5b57\u7b26\u4e32\u3002<\/p>\n<h2>BASE64\u4ee5\u53ca\u6362\u8868<\/h2>\n<p>BASE64\u5c5e\u4e8e\u662f\u5165\u95e8\u7ea7\u522b\u7684\u4e1c\u897f\u4e86\uff0c\u8fd9\u91cc\u53ea\u9700\u8981\u53d1\u73b0base64\u7684\u52a0\u5bc6\u89e3\u5bc6\u51fd\u6570\u5c31\u80fd\u53d1\u73b0base64\u52a0\u5bc6<\/p>\n<p>\u7c7b\u4f3c\u4e8e\u4e0b\u56fe:<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/shangwendada.top\/wp-content\/uploads\/2023\/02\/image-1677168211495.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/shangwendada.top\/wp-content\/uploads\/2023\/02\/image-1677168211495.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"file\" \/><\/div><\/p>\n<h3>\u6362\u8868<\/h3>\n<p>\u8fd9\u91cc\u76f4\u63a5\u5206\u4eab\u4e00\u4e2a\u6362\u8868\u7684\u811a\u672c:<\/p>\n<pre><code class=\"language-python\">import base64\nimport string\n\nstr1 = &quot;AMHo7dLxUEabf6Z3PdWr6cOy75i4fdfeUzL17kaV7rG=&quot; #\u5f85\u89e3\u79d8\u5b57\u7b26\u4e32\n\nstring1 = &quot;qaCpwYM2tO\/RP0XeSZv8kLd6nfA7UHJ1No4gF5zr3VsBQbl9juhEGymc+WTxIiDK&quot; #\u65b0\u8868\nstring2 = &quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+\/&quot;\n\nprint (base64.b64decode(str1.translate(str.maketrans(string1,string2))))\n<\/code><\/pre>\n<p>\u987a\u4fbf\u5206\u4eab\u4e00\u4e2ac++\u7248\u672c\u7684<\/p>\n<pre><code class=\"language-C++\">#include&lt;iostream&gt;\n#include&lt;cstring&gt;\n#include&lt;bitset&gt;\n#include&lt;vector&gt;\n#include&lt;stdlib.h&gt;\n#include&lt;time.h&gt;\n#include&lt;sstream&gt;\n#include&lt;cstring&gt;\n\/*base64.c*\/  \n#include &quot;base64.h&quot;  \nusing namespace std;\n    \/\/base64.c\n#include&quot;base64.h&quot;\nchar base64char[] = {\n        &#039;A&#039;,&#039;B&#039;,&#039;C&#039;,&#039;D&#039;,&#039;E&#039;,&#039;F&#039;,&#039;G&#039;,&#039;H&#039;,&#039;I&#039;,&#039;J&#039;,\n        &#039;K&#039;,&#039;L&#039;,&#039;M&#039;,&#039;N&#039;,&#039;O&#039;,&#039;P&#039;,&#039;Q&#039;,&#039;R&#039;,&#039;S&#039;,&#039;T&#039;,\n        &#039;U&#039;,&#039;V&#039;,&#039;W&#039;,&#039;X&#039;,&#039;Y&#039;,&#039;Z&#039;,&#039;a&#039;,&#039;b&#039;,&#039;c&#039;,&#039;d&#039;,\n        &#039;e&#039;,&#039;f&#039;,&#039;g&#039;,&#039;h&#039;,&#039;i&#039;,&#039;j&#039;,&#039;k&#039;,&#039;l&#039;,&#039;m&#039;,&#039;n&#039;,\n        &#039;o&#039;,&#039;p&#039;,&#039;q&#039;,&#039;r&#039;,&#039;s&#039;,&#039;t&#039;,&#039;u&#039;,&#039;v&#039;,&#039;w&#039;,&#039;x&#039;,\n        &#039;y&#039;,&#039;z&#039;,&#039;0&#039;,&#039;1&#039;,&#039;2&#039;,&#039;3&#039;,&#039;4&#039;,&#039;5&#039;,&#039;6&#039;,&#039;7&#039;,\n        &#039;8&#039;,&#039;9&#039;,&#039;+&#039;, &#039;\/&#039;, &#039;\\0&#039;\n};\n\/*\nchar base64char[] = {\n\n        &#039;K&#039;,&#039;L&#039;,&#039;M&#039;,&#039;N&#039;,&#039;O&#039;,&#039;P&#039;,&#039;Q&#039;,&#039;R&#039;,&#039;S&#039;,&#039;T&#039;,\n        &#039;A&#039;,&#039;B&#039;,&#039;C&#039;,&#039;D&#039;,&#039;E&#039;,&#039;F&#039;,&#039;G&#039;,&#039;H&#039;,&#039;I&#039;,&#039;J&#039;,\n        &#039;e&#039;,&#039;f&#039;,&#039;g&#039;,&#039;h&#039;,&#039;i&#039;,&#039;j&#039;,&#039;k&#039;,&#039;l&#039;,&#039;m&#039;,&#039;n&#039;,\n        &#039;U&#039;,&#039;V&#039;,&#039;W&#039;,&#039;X&#039;,&#039;Y&#039;,&#039;Z&#039;,&#039;a&#039;,&#039;b&#039;,&#039;c&#039;,&#039;d&#039;,\n        &#039;o&#039;,&#039;p&#039;,&#039;q&#039;,&#039;r&#039;,&#039;s&#039;,&#039;t&#039;,&#039;u&#039;,&#039;v&#039;,&#039;w&#039;,&#039;x&#039;,\n        &#039;y&#039;,&#039;z&#039;,&#039;0&#039;,&#039;1&#039;,&#039;2&#039;,&#039;3&#039;,&#039;4&#039;,&#039;5&#039;,&#039;6&#039;,&#039;7&#039;,\n        &#039;8&#039;,&#039;9&#039;,&#039;+&#039;, &#039;\/&#039;, &#039;\\0&#039;\n};\n*\/\nchar c;\n\nvoid Menu()\n{\n    printf(&quot;***************\\n&quot;);\n    printf(&quot;*1\u3001base64\u52a0\u5bc6\\n&quot;);\n    printf(&quot;*2\u3001base64\u89e3\u5bc6\\n&quot;);\n    printf(&quot;*3\u3001\u9000\u51fa\u7a0b\u5e8f\\n&quot;);\n    printf(&quot;***************\\n&quot;);\n}\n\nchar* base64_encode(char* binData, char* base64, int binLength)\n{\n    int i = 0;\n    int j = 0;\n    int current = 0;\n    for (i = 0; i &lt; binLength; i += 3) {\n        \/\/\u83b7\u53d6\u7b2c\u4e00\u4e2a6\u4f4d\n        current = (*(binData + i) &gt;&gt; 2) &amp; 0x3F;\n        *(base64 + j++) = base64char[current];\n        \/\/\u83b7\u53d6\u7b2c\u4e8c\u4e2a6\u4f4d\u7684\u524d\u4e24\u4f4d\n        current = (*(binData + i) &lt;&lt; 4) &amp; 0x30;\n        \/\/\u5982\u679c\u53ea\u6709\u4e00\u4e2a\u5b57\u7b26\uff0c\u90a3\u4e48\u9700\u8981\u505a\u7279\u6b8a\u5904\u7406\n        if (binLength &lt;= (i + 1)) {\n            *(base64 + j++) = base64char[current];\n            *(base64 + j++) = &#039;=&#039;;\n            *(base64 + j++) = &#039;=&#039;;\n            break;\n        }\n        \/\/\u83b7\u53d6\u7b2c\u4e8c\u4e2a6\u4f4d\u7684\u540e\u56db\u4f4d\n        current |= (*(binData + i + 1) &gt;&gt; 4) &amp; 0xf;\n        *(base64 + j++) = base64char[current];\n        \/\/\u83b7\u53d6\u7b2c\u4e09\u4e2a6\u4f4d\u7684\u524d\u56db\u4f4d\n        current = (*(binData + i + 1) &lt;&lt; 2) &amp; 0x3c;\n        if (binLength &lt;= (i + 2)) {\n            *(base64 + j++) = base64char[current];\n            *(base64 + j++) = &#039;=&#039;;\n            break;\n        }\n        \/\/\u83b7\u53d6\u7b2c\u4e09\u4e2a6\u4f4d\u7684\u540e\u4e24\u4f4d\n        current |= (*(binData + i + 2) &gt;&gt; 6) &amp; 0x03;\n        *(base64 + j++) = base64char[current];\n        \/\/\u83b7\u53d6\u7b2c\u56db\u4e2a6\u4f4d\n        current = *(binData + i + 2) &amp; 0x3F;\n        *(base64 + j++) = base64char[current];\n    }\n    *(base64 + j) = &#039;\\0&#039;;\n    return base64;\n}\n\nunsigned char * base64_decode(char const* base64Str,unsigned char* debase64Str, int encodeStrLen)\n{\n    int i = 0;\n    int j = 0;\n    int k = 0;\n    char temp[4] = &quot;&quot;;\n\n    for (i = 0; i &lt; encodeStrLen; i += 4) {\n        for (j = 0; j &lt; 64; j++) {\n            if (*(base64Str + i) == base64char[j]) {\n                temp[0] = j;\n            }\n        }\n\n        for (j = 0; j &lt; 64; j++) {\n            if (*(base64Str + i + 1) == base64char[j]) {\n                temp[1] = j;\n            }\n        }\n\n        for (j = 0; j &lt; 64; j++) {\n            if (*(base64Str + i + 2) == base64char[j]) {\n                temp[2] = j;\n            }\n        }\n\n        for (j = 0; j &lt; 64; j++) {\n            if (*(base64Str + i + 3) == base64char[j]) {\n                temp[3] = j;\n            }\n        }\n\n        *(debase64Str + k++) = ((temp[0] &lt;&lt; 2) &amp; 0xFC) | ((temp[1] &gt;&gt; 4) &amp; 0x03);\n        if (*(base64Str + i + 2) == &#039;=&#039;)\n            break;\n\n        *(debase64Str + k++) = ((temp[1] &lt;&lt; 4) &amp; 0xF0) | ((temp[2] &gt;&gt; 2) &amp; 0x0F);\n        if (*(base64Str + i + 3) == &#039;=&#039;)\n            break;\n\n        *(debase64Str + k++) = ((temp[2] &lt;&lt; 6) &amp; 0xF0) | (temp[3] &amp; 0x3F);\n    }\n    return debase64Str;\n}\n\nint main()\n{\n\n    char ad[]=&quot;wr3ClVcSw7nCmMOcHcKgacOtMkvDjxZ6asKWw4nChMK8IsK7KMOOasOrdgbDlx3DqcKqwr0hw701Ly57w63CtcOl&quot;;\n    unsigned char add[256]={0};\n    base64_decode(ad,add,88);\n    for(int i = 0 ; i &lt;88;  i++ )\n    {\n        printf(&quot;0x%x,&quot;,add[i]);\n    }\n    \/*\n    for(int i = 0 ; i &lt; strlen(base64char);i++)\n    {\n        printf(&quot;%c&quot;,base64char[i]);\n    }\n    *\/\n}<\/code><\/pre>\n<h2>\u603b\u7ed3<\/h2>\n<p>\u4ee5\u4e0a\u5c31\u662f\u6211\u5e38\u5728ctf\u9006\u5411\u4e2d\u9047\u5230\u7684\u52a0\u5bc6\u89e3\u5bc6\u5185\u5bb9\u4e86\uff0c\u672c\u7bc7\u6587\u7ae0\u504f\u5411\u4e8e\u65b0\u624b\u5411\uff0c\u5185\u5bb9\u8fd8\u662f\u6bd4\u8f83\u8be6\u7ec6\u7684\uff0c\u5e0c\u671b\u80fd\u7ed9\u5927\u5bb6\u5e26\u6765\u5e2e\u52a9\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5e38\u89c1\u52a0\u5bc6\u6280\u672f \u76ee\u524d\u53d1\u73b0\u7684\u6bd4\u8f83\u5e38\u89c1\u7684\u5bc6\u94a5\u52a0\u5bc6\u6280\u672f\u6709RC4\u4ee5\u53caTEA\u7cfb\u5217\u52a0\u5bc6 TEA \u4ecb\u7ecd TEA\uff08Tiny En [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":180,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-374","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.shangwendada.top\/index.php\/wp-json\/wp\/v2\/posts\/374","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.shangwendada.top\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.shangwendada.top\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.shangwendada.top\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.shangwendada.top\/index.php\/wp-json\/wp\/v2\/comments?post=374"}],"version-history":[{"count":6,"href":"https:\/\/blog.shangwendada.top\/index.php\/wp-json\/wp\/v2\/posts\/374\/revisions"}],"predecessor-version":[{"id":685,"href":"https:\/\/blog.shangwendada.top\/index.php\/wp-json\/wp\/v2\/posts\/374\/revisions\/685"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.shangwendada.top\/index.php\/wp-json\/wp\/v2\/media\/180"}],"wp:attachment":[{"href":"https:\/\/blog.shangwendada.top\/index.php\/wp-json\/wp\/v2\/media?parent=374"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.shangwendada.top\/index.php\/wp-json\/wp\/v2\/categories?post=374"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.shangwendada.top\/index.php\/wp-json\/wp\/v2\/tags?post=374"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}