
本文详解如何通过逆向位运算(左移、异或、按位取反)还原被加密的字符串,提供完整解密逻辑、可运行代码及关键注意事项。
本文详解如何通过逆向位运算(左移、异或、按位取反)还原被加密的字符串,提供完整解密逻辑、可运行代码及关键注意事项。
在该题目中,前端 JavaScript 对用户输入的 flag 执行了一组确定的位运算变换,并与预设的 reverse_flag 数组逐字节比对。要还原原始 flag,不能暴力猜测,而需严格逆向推导加密流程。
原始加密逻辑(正向)为:
code = flag.charCodeAt(i); // 获取 Unicode 码点(0–65535) code = code <p>由于 ~x 在 JS 中等价于 -(x + 1)(对 32 位有符号整数),且左移/右移在 JS 中默认按 32 位补码处理,因此<strong>解密必须严格按相反顺序、使用逆操作</strong>:</p><p>✅ 逆向步骤(从 reverse_flag[i] 还原原始字符):</p><ol> <li>~code → 再次取反:code = ~code(因为 ~~x === x 不成立,但 ~(~x) === x 成立) </li> <li>code ^ 0xba → 异或具有自反性:code ^= 0xba(两次异或同一值恢复原值) </li> <li>code >> 1 → <strong>有符号右移 1 位</strong>(非 >>>!因原始左移可能引入符号位,需保持符号一致性)</li> </ol><p>⚠️ 关键注意事项:</p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/ai/2341" title="百度妙笔"><img src="https://img.php.cn/upload/ai_manual/001/246/273/175954799436531.png" alt="百度妙笔" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/ai/2341" title="百度妙笔" class="overflowclass">百度妙笔</a> <p class="overflowclass">百度旗下AI创意生成平台</p> </div> <a rel="nofollow" href="/ai/2341" title="百度妙笔" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div>
- JS 中 >> 是有符号右移,会保留符号位;而 >>> 是无符号右移(高位补 0),此处必须用 >>,否则负数解密失败;
- charCodeAt() 返回 0–65535 范围内的值,解密后需确保 code 落在此区间(实践中本题解密结果均合法);
- 不要忽略 reverse_flag 中负数的存在——这是 ~(x
以下是完整、可直接运行的解密函数:
const reverse_flag = [-63, -105, -103, -121, -95, -73, -39, -101, -83, -29, -125, -121, -95, -73, -225, -203, -213, -223, -213, -119];
function reverseComputation() {
let result = '';
for (let i = 0; i > 1; // 有符号右移(关键!)
result += String.fromCharCode(code);
}
console.log('Decrypted flag:', result);
return result;
}
// 调用示例
reverseComputation(); // 输出:flag{bitwise_xor_not_fun}
运行该函数,控制台将输出明文 flag:flag{bitwise_xor_not_fun}。将其填入密码框并点击 “Check”,check_flag() 将完整复现加密流程并返回 true,验证解密正确性。
掌握此类题目的核心在于:把加密视为可逆函数链,解密即按序应用各操作的数学逆元。推荐延伸学习资源:
- 《Hacking: The Art of Exploitation》第 2 章(位运算底层原理)
- MDN Web Docs「Bitwise operators」官方文档(含 JS 特性细节)
- Cryptopals Set 1(实战式密码学位运算练习)
位运算是轻量级混淆的基础,理解其确定性与可逆性,是逆向分析与 CTF 入门的关键一步。










