AutoHotkey IRC脚本如何校验加密ident合法性后解密IP并写入剪贴板
修改后完整AutoHotkey脚本
F4:: Clipboard = Send ^a^x ClipWait, 0 If ErrorLevel { MsgBox, 48, Error, An error occurred while waiting for the clipboard. Aborting. Return } ; 提取!和@之间的ident段 pos_excl := InStr(Clipboard, "!") pos_at := InStr(Clipboard, "@") if (!pos_excl || !pos_at || pos_at <= pos_excl + 1) { Clipboard := "" Return } ident := SubStr(Clipboard, pos_excl + 1, pos_at - pos_excl - 1) ; 剔除开头的~ if (SubStr(ident, 1, 1) = "~") ident := SubStr(ident, 2) ; 校验长度为8 if (StrLen(ident) != 8) { Clipboard := "" Return } ; 调用解码函数,解码失败则清空剪贴板 decode_res := decode(ident) Clipboard := decode_res ? decode_res : "" Return decode(str) { Static code := " " . " ( LTrim Join`s 00 0x 02 03 04 0z 06 01 08 09 0B 0b 0c 0d 0e 0H x0 xx x2 x3 x4 xz x6 x1 x8 x9 xB xb xc xd xe xH 20 2x 22 23 24 2z 26 21 28 29 2B 2b 2c 2d 2e 2H 30 3x 32 33 34 3z 36 31 38 39 3B 3b 3c 3d 3e 3H 40 4x 42 43 44 4z 46 41 48 49 4B 4b 4c 4d 4e 4H z0 zx z2 z3 z4 zz z6 z1 z8 z9 zB zb zc zd ze zH 60 6x 62 63 64 6z 66 61 68 69 6B 6b 6c 6d 6e 6H 10 1x 12 13 14 1z 16 11 18 19 1B 1b 1c 1d 1e 1H 80 8x 82 83 84 8z 86 81 88 89 8B 8b 8c 8d 8e 8H 90 9x 92 93 94 9z 96 91 98 99 9B 9b 9c 9d 9e 9H B0 Bx B2 B3 B4 Bz B6 B1 B8 B9 BB Bb Bc Bd Be BH b0 bx b2 b3 b4 bz b6 b1 b8 b9 bB bb bc bd be bH c0 cx c2 c3 c4 cz c6 c1 c8 c9 cB cb cc cd ce cH d0 dx d2 d3 d4 dz d6 d1 d8 d9 dB db dc dd de dH e0 ex e2 e3 e4 ez e6 e1 e8 e9 eB eb ec ed ee eH H0 Hx H2 H3 H4 Hz H6 H1 H8 H9 HB Hb Hc Hd He HH )" new := "" ; 校验所有双字符组都存在于密钥中 Loop, % StrLen(str) / 2 { chunk := SubStr(str, 2 * A_Index - 1, 2) if (!InStr(code, " " chunk " ")) return "" new .= "." Round((Instr(code, " " chunk, True) - 1) / 3) } return SubStr(new, 2) }
核心修改逻辑
- 新增
!和@位置检测,无法匹配nick!ident@host格式时直接清空剪贴板 - 自动剔除ident段开头的
~字符 - 新增ident长度校验,仅长度为8时才进入解码流程
- 解码函数新增双字符组合法性校验,任意一组不在密钥范围内则返回空值,最终清空剪贴板
- 只有全部校验通过,才会将解密后的IP写入剪贴板
内容的提问来源于stack exchange,提问作者Charlie Sorrow
相关产品推荐
相关产品推荐

