资讯动态

CTF-加密与解密(二十二):探索AAencode与Jsfuck的实战应用

发布时间:2026/8/29 9:22:34 来源:尧图企业网站定制
1. 当CTF遇上颜文字AAencode初探第一次在CTF比赛中看到满屏颜文字时我差点以为题目文件损坏了——各种(∀)♡、(╯°□°╯︵ ┻━┻表情符号堆砌在一起完全不像正经的加密代码。这就是AAencode的典型特征用颜文字重构JavaScript代码。它的原理其实很有趣就像用emoji表情包写论文虽然看起来荒诞但浏览器引擎确实能正常执行。实战中最经典的AAencode题目往往长这样ω /´ ~┻━┻ //*´∇*/ [_]; o() _3; c(Θ) ()-(); (Д) (Θ) (o^_^o)/ (o^_^o);(Д){Θ: _ ,ω : ((ω3) _) [Θ] , :(ω _)[o^_^o -(Θ)] ,Д:((3) _)[] }; (Д) [Θ] ((ω3) _) [c^_^o];(Д) [c] ((Д)_) [ ()()-(Θ) ];(Д) [o] ((Д)_) [Θ];(o)(Д) [c](Д) [o](ω _)[Θ] ((ω3) _) [] ((Д) _) [()()] ((3) _) [Θ]((3) _) [() - (Θ)](Д) [c]((Д)_) [()()] (Д) [o]((3) _) [Θ];(Д) [_] (o^_^o) [o] [o];(ε)((3) _) [Θ] (Д) .Д((Д)_) [()()]((3) _) [o^_^o -Θ]((3) _) [Θ] (ω _) [Θ]; ()(Θ); (Д)[ε]\\; (Д).Θ(Д )[o^_^o -(Θ)];(oo)(ω _)[c^_^o];(Д) [o]\;(Д) [_] ( (Д) [_] (ε(Д)[o] (Д)[ε](Θ) () (Θ) (Д)[ε](Θ) (() (Θ)) () (Д)[ε](Θ) () (() (Θ)) (Д)[ε](Θ) ((o^_^o) (o^_^o)) ((o^_^o) - (Θ)) (Д)[ε](Θ) ((o^_^o) (o^_^o)) () (Д)[ε](() (Θ)) (c^_^o) (Д)[ε]() ((o^_^o) - (Θ)) (Д)[ε](Θ) (Θ) (c^_^o) (Д)[ε](Θ) () (() (Θ)) (Д)[ε](Θ) (() (Θ)) () (Д)[ε](Θ) (() (Θ)) () (Д)[ε](Θ) (() (Θ)) (() (o^_^o)) (Д)[ε](() (Θ)) () (Д)[ε]() (c^_^o) (Д)[ε](Θ) ((o^_^o) - (Θ)) (Д)[ε]() (c^_^o) (Д)[ε](Θ) (Θ) ((o^_^o) - (Θ)) (Д)[ε](Θ) () (Θ) (Д)[ε](Θ) ((o^_^o) (o^_^o)) ((o^_^o) (o^_^o)) (Д)[ε](Θ) () (Θ) (Д)[ε](Θ) ((o^_^o) - (Θ)) (o^_^o) (Д)[ε](Θ) () (o^_^o) (Д)[ε](Θ) ((o^_^o) (o^_^o)) ((o^_^o) - (Θ)) (Д)[ε](Θ) (() (Θ)) (Θ) (Д)[ε](Θ) ((o^_^o) (o^_^o)) (c^_^o) (Д)[ε](Θ) ((o^_^o) (o^_^o)) () (Д)[ε]() ((o^_^o) - (Θ)) (Д)[ε](() (Θ)) (Θ) (Д)[o]) (Θ)) (_);1.1 快速识别AAencode的三要素判断是否AAencode加密其实有固定套路记住这三个特征就够了颜文字密集出现特别是日式颜文字如(╯°□°╯︵ ┻━┻、 (Д)等变量名含特殊符号变量名多为ω、Θ这类组合包含固定模式常出现(o^^o)、(Д) []等结构去年某次线下赛就出现过变种AAencode——出题人把颜文字替换成了中文表情包滑稽、狗头。当时我们队卡了半小时才发现本质还是AAencode只是符号表被替换了。所以关键要看代码结构而不是具体符号形态。1.2 三种解密方式实测对比最直接的解密方法当然是扔进浏览器Console执行但实战中可能会遇到环境问题。我测试过三种主流方法方法优点缺点浏览器Console无需联网实时调试可能被题目环境限制执行utf-8.jp在线工具支持批量处理对变种AAencode识别率较低Node.js本地执行可调试复杂脚本需要配置JavaScript环境特别提醒遇到超长AAencode时推荐用Node.js的vm模块执行避免浏览器内存溢出。曾经有个题目故意在AAencode里嵌套了2000层括号浏览器直接卡死后来用下面的方法才解决const vm require(vm); const script new vm.Script(aaencodeStr); console.log(script.runInNewContext());2. 六字符编程艺术Jsfuck深度解析第一次见到[][(![][])[[]]...这样的代码时我怀疑是不是键盘坏了——这串只用[]()!六个字符编写的代码居然能执行任意JavaScript功能这就是Jsfuck的魔力用最小字符集实现图灵完备。2.1 Jsfuck的运行原理理解Jsfuck需要先掌握几个关键转换技巧布尔值构造![]等于false!![]等于true数字生成[]等于0![]等于1字符串拼接![][]得到false字符串字符提取false[0]得到字母f通过这种链式操作可以逐步构建出完整字母表。比如构造字母a的经典写法(![][])[![]] // 分解步骤 // 1. ![] false // 2. false[] false // 3. ![] 1 // 4. false[1] a2.2 实战中的Jsfuck变形去年DEF CON CTF中出现过Jsfuck的升级版——JJencode。它同样使用极少字符集但引入了$和_符号。解密时需要先识别编码类型这里分享我的识别口诀方括号加叹号Jsfuck跑不了美元下划线多JJencode要记牢遇到混淆情况时可以先用这个正则快速判断/^([\[\]\(\)\!\])$/.test(code) // 纯Jsfuck返回true3. 组合拳攻击当AAencode遇上Jsfuck有些出题人喜欢玩套娃把戏。我遇到过最变态的题目是AAencode包裹JsfuckJsfuck里又套了base64。分享当时的解题路线图第一层剥离发现颜文字特征 ⇒ AAencode解密第二层识别得到纯[]()!组合 ⇒ Jsfuck解密第三层处理输出形似Zm9...⇒ base64解码最终收获得到flagCTF{JS_Enc0d1ng_Fun}这种组合加密的破解关键在于分层剥离。推荐使用自动化工具链处理# 假设题目文件为challenge.txt aadecode challenge.txt stage1.js jsfuck-decoder stage1.js stage2.b64 base64 -d stage2.b64 final.txt4. 防御与实战建议在真实CTF比赛中这类JavaScript加密题目往往会有陷阱。分享几个踩坑经验环境隔离永远在虚拟机或容器里执行未知JS代码防止XSS攻击分步验证每步解密后检查输出长度异常暴增可能遇到无限递归流量监控使用Burp Suite监控解密过程中的网络请求有些题目会偷偷发flag到远程服务器推荐的自建解密环境配置虚拟机VirtualBox Kali Linux工具链Node.js 18.x Chrome开发者工具必备插件JSDetox、JStillery记得去年有个坑爹题目AAencode代码里藏了document.cookie窃取逻辑。我们队有个新手直接在自己电脑上执行结果赛会账号被盗...所以安全执行环境永远是第一位的。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价