找回密码
 加入
搜索
查看: 171476|回复: 587

[原创] AuMerger_1.6 [精简AU3代码工具]

 火... [复制链接]
发表于 2012-11-28 18:19:00 | 显示全部楼层 |阅读模式
本帖最后由 afan 于 2021-7-14 08:57 编辑


该贴所讨论的,貌似ACN没有整合脚本的工具或功能,所以根据自己的需要写了个小工具 AuMerger 。如有类似需求的朋友也可以试试~
(后注:官方从3.3.10.x版开始,添加了个 AU3Stripper ,如果你需要精简代码,也可以试试)


最近更新:

18.02.26 更新 1.6.1 版
        [修改]处理大数据时的效率优化



        本工具可将脚本中所有的“#include <xxx.au3>...”其中的“xxx.au3...”整合至主脚本中,并可选择是否删除注释、是否精简未使用的函数及变量。这样,可以尽量避免Au3版本升级后由于UDF库文件的变更而需要修改脚本的麻烦。
        整合的脚本可在编译后,如遇使用过程中出现的错误提示,可以直接查找错误所在的行。
        如果你#include 包含的文件比较多,或者是“WinAPIEx.au3”这类大家伙,那么整合后的脚本也会比较大,那么如果需要的话可以使用本工具具备的精简代码的功能。

        目前的版本整合及精简的速度已经超越“Obfuscator 代码迷惑”的精简脚本的功能,精简某些大文件效率甚至超过后者一倍以上。
        由于精简的方式不同,精简后的脚本与“Obfuscator 代码迷惑”的精简后的脚本可能会有细微差别,一般就是多多少少几个变量的精简不同。本着脚本正常运行的前提,宁可少精简100个,也不能错杀一个需要的变量。^ ___ ^

        0.9以上版本更可以自动查找自定义函数中含有字符串参数变量传递给Call类函数,而使Call类函数可识别该变量,如该变量为函数名则在精简时不会被漏掉。现在已完全可以取代“Obfuscator 代码迷惑”的精简脚本的功能,因为它不具备该识别功能。

        本工具为无操作界面模式,支持命令行。功能及使用简介如下:


        1、支持拖放至图标操作(直接拖[2]、按住Ctrl键[1]、按住Shift键[0]、按住Alt键[4],“删除注释”功能的模式将各不同[括号内即为模式])

        2、支持直接双击运行,此时将打开一个选择Au3文件对话框,选择之后会弹出一个保存文件对话框,并已出现了默认的保存文件名
                (默认输出为“输入au3文件_Merger[整合模式].au3”)
                此时可以根据需要修改“[]”中的数字,即可改变“整合”功能的模式,保存即可输出需要的脚本。

        3、支持批处理及命令行,格式为: AuMerger.exe "FileIn[|FileOut]" [-c[=][ ]n] [-s[=][ ]n] [-f[=][ ]n] 如:
                AuMerger.exe "c:\ac b\test.au3|c:\ac b\test_[4].au3" -c4 -s0 -f1
                参数解释:
                        FileIn    : 输入au3文件。须用双引号包围,如"c:\in.au3"、"c:\in.au3|d:\out.au3"
                        |FileOut  : 输出au3文件(默认输出为“输入au3文件_Merger[整合模式].au3”)
                        -c 0      : 不删除注释(默认)
                        -c 1      : 保留主脚本注释
                        -c 2      : 删除所有注释
                        -c 4      : 精简未使用函数及变量
                        -c 8      : 精简未使用函数及变量 + 增补特殊函数
                                  : 注,以上参数值为单选,不可相加。以下参数为多选,亦可相加于-c 参数值
                        -F 0      : 在精简脚本时如找到特殊函数不保存到#Obfuscator_Ignore_Funcs中(默认)
                        -F 1      : (值:32)在精简脚本时如找到特殊函数将保存到"精简脚本"#Obfuscator_Ignore_Funcs中
                        -F 2      : (值:64)在精简脚本时如找到特殊函数将保存到"精简脚本"及"原脚本"#Obfuscator_Ignore_Funcs中
                        -Ph       : (值:128)在整合Include文件时将其路径添加到最终脚本中
                        -MS       : (值:256)整合后将首个Include文件到最末Include文件分离为一个单独的文件并Include之
                        -OP       : 打开选项窗口
                        -?        : 查看说明
                退出码(Exit codes):
                        0        : 成功 - 没有错误或警告
                        1        : "输入文件"不存在或非.au3文件
                        2        : "输出文件"不可写或不合法
                        3        : 未找到 Autoit3 安装目录
                        4        : 脚本整合失败,请确认脚本运行正常



欢迎大家测试,发现Bug请及时领奖 :)

        更新历史及下载

18.02.26 更新 1.6.1 版
        [修改]处理大数据时的效率优化

16.01.20 更新 1.6 版
        [修改]移除全静默命令行参数
        [修改]优化部分代码,某些情况下效率提升较大

14.12.09 1.5.2 版
        [修正]对含有UTF8编码的字符写入时会替换为?的问题

14.06.28 1.5.1 版
        [修正]对不同版本的自定义Include目录的识别问题

13.05.22 1.5 版
        [新增]新增 -L 参数,可使用该参数选项连接续行连接符(-L1)。注:默认为不连接续行连接符(-L0)
        [修正]未找到Include文件时仍继续整合的问题
        [修正]搜索Call类函数并入到源脚本未去除重复,导致字符串被一直累加,虽不影响使用,但有碍观瞻。

13.03.02 1.4 版 (***内测,功能未开放)
        [修改]右键命令行按住左边文字可拖动界面。

13.03.07 1.3 版 (***内测,功能未开放)
        [新增]-C16 参数"精简(-C4)及增添特殊函数(参传+赋值)"实际功能已加入,能识别部分跨函数的字符串参数传递并赋值到全局变量,
                如该参数为字符串变量且为函数名,则该字符串的函数定义不会被精简掉。该功能(以及-C8)会增加一定的耗时,但这是
                Obfuscator 代码迷惑的软肋,也是Obfuscator可能造成功能缺失问题的关键。 示例函数库"MouseOnEvent.au3"
        [新增]"&"连接的字符串可以被Call类函数识别而不会被精简掉,虽然这种情况不多见,如 "_ABC" & "123"

13.03.02 1.2 版
        [修改]-C4 参数描述修改为"删除注释并精简函数及变量";-C8 参数描述修改为"精简(-C4)及增添特殊函数(参传)"
        [新增]新增 -C16 参数"精简(-C4)及增添特殊函数(参传+赋值)"暂未加入实际功能,仅为之后的版本预留参数。
        [修改]在选择文件保存对话框时,修改[]内的字符串,可支持模式值参数相加的值或具体单项参数,如"-c8-ms-ph"。

13.03.01 1.1 版 (***内测,功能未开放)
        [修改]由于au3文件的右键菜单已被Autoit占领了四项,本工具已不大好加入多条菜单项,以免扰乱视线。为此增加了一个伪
                二级菜单(二级菜单需点击才会弹出),让其更加人性化及方便。菜单可在选项界面中右键进行编辑,快捷定制模式。

14.02.27 1.0.9 正式版 发布
        [修正]修正形如“#include <WindowsConstants.au3>        ;....xxx>”中的文件名被误识别为“WindowsConstants.au3>        ;....xxx”的错误。

14.01.03 1.0.8 正式版 发布
        [修正]再次修正部分在 Win7 x64 环境下提示“未找到安装目录”的问题。
        [修改]优先使用程序所在目录的Au3版本。

13.06.08 1.0.7 正式版 发布
        [修正]脚本如含有非规范的回车换行(\n缺少\r)可能导致相关代码行被精简掉。

13.05.08 1.0.6 正式版 发布
        [修正]检索调用Call类函数的默认值时数组错误。

13.04.25 1.0.5 正式版 发布
        [修正]Call类函数在脚本首部时不能匹配到其调用的函数名的问题。

13.02.26 1.0.0版 发布
        [新增]增加“主辅模式”,(参数:-MS)整合后将首个Include文件到最末Include文件分离为一个单独的文件并Include之
        [新增]修改了添加“au3文件右键菜单”的操作界面,可自定义菜单文本及参数,可读取当前的菜单项目勾选。
        [修改]选择文件保存模式(修改[]内的数字)可支持模式值参数相加的值。同时调整了部分参数值。
        [修改]默认整合模式由2改为0。即由默认“删除所有注释”改为默认“不删除注释”。
        [新增]在整合Include文件时可将其路径添加到最终脚本中(参数:-Ph)。
        [修改]从右键菜单调用执行生成的文件默认名“[]”内含详细的参数值。如“test[4+256].au3”表示使用了精简脚本+主辅模式。

13.02.22 0.9.9版 发布
        [新增]开启隐藏功能:按住CTRL键再执行本软件可弹出添加到右键菜单的操作界面。
        [修正]如拖入的非.au3文件将不会执行整合操作。

13.02.22 0.9.8版 发布
        [修正]注释块没有结束段的脚本错误造成本工具陷入死循环的问题。
        [修正]include格式错误仍然继续执行的错误。
        [新增]在界面模式下如有错误会有具体的提示。

13.02.22 0.9.7版 发布
        [修正]include <绝对路径> 时报错问题。

13.02.22 0.9.6版 发布
        [修正]发现注释块嵌套(可多层)注释块的问题并已修正。(Obfuscator 存在该问题)
        [修正]在非简体中文语言环境操作系统中界面显示乱码的问题。

13.01.31 0.9.5版 发布
        [修正]include 包含子目录,而子目录又 include 当前文件夹的文件时会出现无法整合的提示错误。

12.12.12 0.9.2版 发布
        [修正]运行于64位操作系统时提示“找不到 Autoit3 安装目录”的问题。
        [新增]如果未找到Autoit3安装目录的注册表信息则可使用相对路径。即将本程序置于Autoit3安装文件夹的任意位置(含下级目录)均可。

12.12.12 0.9版 发布
        [新增]可查找自定义函数中含有字符串参数变量传递给Call类函数,而使Call类函数可识别该变量,
                如该变量为函数名则在精简时该特殊函数不会被漏掉(精简模式为 8 即可)。
        [新增]在精简脚本时如找到特殊函数可将其保存至"精简脚本"及"原脚本"#Obfuscator_Ignore_Funcs中,下次可不必重复查找。
                同时,如继续使用“Obfuscator 代码迷惑”它也会因此获益使这类特殊函数不会被漏掉(添加命令行参数 -f1 即可)。

12.12.10 0.8.5 发布
        [修正]选择文件保存模式不生效的问题
        [修改]文件选择对话框显示由左上角改为屏幕中部
        [修改]改了个图标…
        [新增]增加全静默命令行,只需加入 -s0 即无任何提示界面完成执行,执行结果可从“退出码(Exit codes)”中得知

12.12.07 0.8版 发布
        [新增]实现精简未使用变量的功能

12.12.04 0.6版 实现精简未使用函数的功能
12.12.01 0.5版 已重写并优化代码,整合速度大幅提高。内容越多提升幅度越大
12.11.28 0.1版 初发布第一个版本。具有整合脚本功能

        AuMerger 下载 地址↓(阅读权限 >= 20)
游客,如果您要查看本帖隐藏内容请回复

AuMerger 已开发完毕,希望本工具能给大家带来方便。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 15威望 +6 金钱 +783 贡献 +95 收起 理由
chishingchan + 6 + 150 + 10 很给力!
zpmc123 + 15 精品文章
ma395311229 + 30
甲壳虫 + 40 希望一直更新,谢谢
xms77 + 8 向A大致敬,辛苦了!

查看全部评分

发表于 2012-11-28 18:58:52 | 显示全部楼层
难道是沙发,支持新作!
发表于 2012-11-28 19:01:33 | 显示全部楼层
支持a大啦,嘿嘿,说干就干啊
发表于 2012-11-28 19:35:34 | 显示全部楼层
速度太快了,就出来了啊?

评分

参与人数 1金钱 +70 收起 理由
afan + 70 谢谢测试

查看全部评分

 楼主| 发表于 2012-11-28 19:45:38 | 显示全部楼层
本帖最后由 afan 于 2013-2-26 14:25 编辑
难道是沙发,支持新作!
卫和谐 发表于 2012-11-28 18:58
支持a大啦,嘿嘿,说干就干啊
虫子樱桃 发表于 2012-11-28 19:01
速度太快了,就出来了啊?
lpxx 发表于 2012-11-28 19:35



    很简单的东东,倒是没想到几位大侠把沙发、板凳、地板都占了…

================================================ 将1#的部分内容放在以下
[0.9.6 版][修正]发现注释块嵌套(可多层)注释块的问题并已修正。(Obfuscator 存在该问题,如以下代码,用其精简脚本的功能“alt-f6”生成的代码多了一行不该有的代码)
#cs
        msgbox(48, 0, '不该出现的提示0') ;#cs
#ce
msgbox(0, 0, 'ok1')
#cs
        #include <Array.au3>
        msgbox(48, 0, '不该出现的提示1') ;#cs
#ce
msgbox(0, 0, 'ok2')

#cs
        msgbox(48, 0, '不该出现的提示2')
        #cs
                msgbox(48, 0, '不该出现的提示3')
        #ce

        msgbox(48, 0, '不该出现的提示4')
        #cs

                msgbox(48, 0, '不该出现的提示5')
        #ce
#ce
msgbox(0, 0, 'ok3')
Obfuscator 的精简脚本执行结果如下:
msgbox(0, 0, 'ok1')
msgbox(0, 0, 'ok2')
msgbox(48, 0, '不该出现的提示4')
msgbox(0, 0, 'ok3')
本工具 AuMerger 执行结果如下:
msgbox(0, 0, 'ok1')
msgbox(0, 0, 'ok2')
msgbox(0, 0, 'ok3')
结论:
AuMerger 能正确识别嵌套注释块,“删、留”代码的结果与Au3解释器的结果一致。
Obfuscator 对于此问题存在BUG,对于实际应用的脚本,此问题可能会出现大的错误或隐患。
0.9.6以下版本的AuMerger同样存在该问题,在此强烈建议更新。
发表于 2012-11-28 20:54:06 | 显示全部楼层
老大,俺来捧场了. 深深地佩服你这效率!

评分

参与人数 1威望 +1 金钱 +50 收起 理由
afan + 1 + 50 第一个给我+的,回馈必须的

查看全部评分

发表于 2012-11-28 21:31:01 | 显示全部楼层
连楼梯间,下水道都给占满了…

A大有速度…!

评分

参与人数 1金钱 +15 收起 理由
afan + 15 :)

查看全部评分

发表于 2012-11-29 07:55:35 | 显示全部楼层
回复 1# afan


你出手快,俺下手猛。伸手拿来,呵呵

评分

参与人数 1金钱 +10 收起 理由
afan + 10

查看全部评分

发表于 2012-11-29 15:43:52 | 显示全部楼层
哦     这个很好的    看见好几次了   “求XXX.AU3”
当然   小弟也一样   
感谢  A大   

评分

参与人数 1威望 +1 金钱 +40 收起 理由
afan + 1 + 40 :)

查看全部评分

 楼主| 发表于 2012-11-29 18:49:44 | 显示全部楼层
哦     这个很好的    看见好几次了   “求XXX.AU3”
当然   小弟也一样   
感谢  A大
魔导 发表于 2012-11-29 15:43



    这个好像不是你说的“看见好几次了“求XXX.AU3””哦,呵呵,这东西总不至于联网下载“XXX.AU3”吧,呵呵~
发表于 2012-12-1 16:35:48 | 显示全部楼层
这个工具很好。支持A大。不容错过

评分

参与人数 1金钱 +10 收起 理由
afan + 10

查看全部评分

发表于 2012-12-3 07:58:17 | 显示全部楼层
我们一样无法解决代码迷惑碰到的问题。call等可以以字符串形式运行函数,如果这个字符串是变量,我们就无法判别被调用函数的名称。

碰到call类函数,就不精简主脚本,因为call一般不会调用自带udf,主脚本精简必要性也不强。

评分

参与人数 1金钱 +10 收起 理由
afan + 10

查看全部评分

 楼主| 发表于 2012-12-3 10:04:04 | 显示全部楼层
回复 12# vuivui

代码迷惑碰到的问题,有些是可以解决的,比如类似以下脚本
_t('_abc')
Func _t($a)
        Call($a)
EndFunc
Func _abc($c = 'ok')
        Msgbox(0, 0, $c)
EndFunc
代码迷惑会将_abc 函数定义删除,而这可以避免。

    “碰到call类函数,就不精简主脚本”我觉得这个权利应该交给用户,或者作为选项~
发表于 2012-12-3 13:11:32 | 显示全部楼层
回复  vuivui

代码迷惑碰到的问题,有些是可以解决的,比如类似以下脚本代码迷惑会将_abc 函数定义删除 ...
afan 发表于 2012-12-3 10:04


其实把udf、变量名称替换一下就是代码迷惑了,可以考虑精简、迷惑一起改进,我的方向把重点放在迷惑上。
发表于 2012-12-3 16:22:59 | 显示全部楼层
后排支持A大。。造福人类啊。。

评分

参与人数 1金钱 +15 收起 理由
afan + 15

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-18 11:13 , Processed in 0.090997 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表