系列教程
样本
求助帖:https://www.52pojie.cn/thread-705098-1-1.html
分析
这个 lua 加密不按套路出牌,脚本并没有加密,而是添加了一大堆“换行符” ,就是 LF
(Line Feed), \n
(Newline) 或者 0x0A
。
一大堆是多少?这个文件是 5.9 MB
, 而真正的内容只有 5.69 KB
,使用 Notepad++ 打开之后共有 6100482
行(610多万行)。
在 Windows 的记事本打开这个这个文件看上去并没有什么大问题,似乎只是代码没有换行,因为在 Windows 中 LF
一律不按换行处理,只有 CR
(Carriage Return, \r
或 0x0D
)和 LF
连用的时候才会换行。
随便闲扯点东西:
Carriage Return 就是回车,以前的打字机时代,回车能让打字位置回到当前行的最前面。
至于为什么叫 Carriage (马车) 呢?打字机,键盘不会动,打字的位置也不会动,向右打字其实是纸向左移动,固定纸的地方就像一个马车的作用一样。回车就是让这个固定纸的东西移动到最右边。
而 Line Feed 就是前进一行,以前这个操作并不会进行回车的操作,所以微软的想法就是 CR+LF
为一个新行。而在 Linux 中只要 \n
就够了。
解决
非常简单,把多余的 0x0A
删掉就可以了。
尝试 1:Notepad++
我用 Notepad++ 试了一下,卡死了,CPU 直接飙到 100%。
尝试 2:WinHex
注意:不能把 0A
替换成“空”,而应该把 0A0A
替换成 0A
,防止原有的代码换行被清除掉。然后重复这个过程,就可以把所有的空行都删掉了。
为了加速替换过程,我选择把 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A
替换成 0A
,这样可以快不少。
虽然可能残余一些换行符,但是剩下的就可以用 Notepad++ 清除掉了。
然后再用 vscode 格式化一下基本就可以了。
尝试 3:直接 vscode
早就听说 vscode 处理大文件的效率还是可以的,我就试试呗。
用正则表达式匹配连续的 \n
替换成单个 \n
试了以后才知道,vscode 果然名不虚传,不到半秒钟就替换完了。后来我又试了一下,在 Notepad++ 中用正则替换同样也是非常快。
其他
Brainfuck
这个加密方式让我想到了一种编程语言,叫 Whitespace。
过保护
这个过保护的代码亮瞎我的眼啊
::a1::
gg.clearResults()
gg.searchNumber('1', gg.TYPE_AUTO, false, gg.SIGN_EQUAL, 0, -1)
gg.toast('过保护35%')
gg.searchNumber('1', gg.TYPE_AUTO, false, gg.SIGN_EQUAL, 0, -1)
gg.toast('过保护75%')
gg.searchNumber('1', gg.TYPE_AUTO, false, gg.SIGN_EQUAL, 0, -1)
gg.toast('过保护95%')
gg.searchNumber('1', gg.TYPE_AUTO, false, gg.SIGN_EQUAL, 0, -1)
gg.toast('过保护开启成功')
goto sdone
相关链接
附件
刺激3月3日优化新增锁头.zip
(8.89 KB, 下载次数: 351)