返回列表 发帖

[原创] ,Au3Encode-代码整合迷惑- 20180130

本帖最后由 tubaba 于 2018-1-31 09:16 编辑

关于代码迷惑,是个老生常谈的问题了.由于AU3代码的灵活性.每个迷惑工具总对特定源代码无能为力.只能说,适合自己用的才是最好的.当然,每个人写代码总有自己的习惯.我发的这个工具也许不能应付所有情况.但我会努力完善它,打造成一款真正实用的工具.
每次更新修复BUG的同时,也可能造成新的BUG,这是无法避免的,感谢所有使用au3encode的同学!正是有了你们,才让这个工具日趋完善.谢谢你们!
如果有迷惑完成而不能运行的脚本,请选择字符串加密处理->密文置于脚本内部.再次迷惑,然后提供简化的原始样本,迷惑后的样本,整合后的样本以及au3encode.ini回复本贴,谢谢

程序启用了注册的机制,不注册也可以用,也没时间限制.但一些高级功能不能使用.


免费注册时限已过,如果喜欢,请通过支付宝或者微信向作者付款,然后提供付款单号及机器信息,发送邮件到sambarain@sina.com 获取注册码
为了支持论坛的发展,作者承诺将收入的一半捐赠给论坛
如发现BUG,免费赠送注册码一枚




在使用前请仔细阅读帮助,这是你帮助你成功迷惑脚本的关键!

效果展示在38楼效果展示
====================================


20180130
版本号:1.1.2build20180130
修正:使用"根据脚本中Include命令的位置整合"时,如果脚本首行使用"#include" 命令,会造成脚本整合错误.



20180117
版本号:1.1.1build20180116
修正:机器码可能提取错误,造成部分以前已注册的用户注册失败



20180116
版本号:1.1.0build20180115
修正:取本机机器信息可能会造成程序运行错误,感谢chzj589



20180111
版本号:1.0.9build20171205
优化:整合脚本选项增加变量函数分类整理
优化:程序自校验功能现在支持64位程序


20170817
版本号:1.0.8build20170817        建议更新
修正:部分以嵌套形式存在的区域注释不能被正确处理.造成整合错误.
一直对嵌套的区域注释(#cs#ce中又套了#cs#ce一层或多层)处理没有底.在一次偶然的测试中印证了以前采用的判断方式有误.换了思路,采用二次替换,递归正则的方式提取区域注释.有把握100%提取正确.彻底解决这个问题.
优化:精减函数及变量处理速度


20170808
版本号:1.0.6build20170808
增加:unicode文本字符串支持.



20170718
版本号:1.0.5build20170719
增加:迷惑前自定义整合选项,让用户选择如何整合脚本,以满足部分用户的需求.但需要注意的是,如果选择不瘦身脚本.迷惑所花费的时间将会成倍增加.

增加:UDF函数乱序排列,进一步降低源代码可读性



20170715
版本号:1.0.3build20170715
修正:当自定义函数参数带有 _续行符时,不能正确获取函数名称.从而不能被精减或迷惑.(不会影响处理后的脚本运行)

20170629
版本号:1.0.2build20170628
修正:处理Static关键字引起的变量丢失

20170628
版本号:1.0.1build20170628
修正:处理递归函数时引起的同名字符串或变量处理异常的问题.感谢kkkpep.现在经过瘦身处理的脚本基本上已到精减的上限,留在脚本里的99%都是有用的变量或者函数


20170625
优化:关于精减,现在可以正确处理脚本中由Enum枚举的常量,整个常量步进组只要有一个使用,即不会精减这个常量组,反之将会被剔除.现在可以正确处理递归函数,未使用的递归函数可以正确剔除;
增加:新功能模块.利用数字签名进行程序的自校验.只要编译后的程序改动一个字节,那么程序将拒绝运行.这是一个很有用的功能,可以保护软件防止感染型病毒入侵.本工具不提供给程序签名的功能.数字证书的制作及签名请自行搜索论坛.
PS:由于启动后程序首先进行验证,GUI界面显示将会稍慢一些.


20170620
修正:对采用Static关键字声明的行处理问题
优化:精减变量处理速度,使用Scripting.Dictionary字典方式剔除需忽略的变量,速度有所提升,体积越大的脚本效果越明显.
Scripting.Dictionary是个很有用的组件,其创建了类似于Key索引对应Value值的字典对象,并且在其内部提供了快速索引访问的机制,可以让我们通过Key直接索引到指定的Value,比遍历二维数组有效得多。


20170616
修正:形如'if ...then 声明变量'的行处理问题,感谢  txm888 !见152楼
更新:使用说明.


20170615
重要修正:在某些情况下,可能出现加密函数缺失的BUG,强烈建议更新(20170409-20170612版本都有此问题)
修正:在XP,2003下无法显示LOGO,以至于无法进行换肤.
优化:Au3Encode在XP,2003界面表现.



20170613
修正:历史文件列表一处功能 bug,感谢  Alam !
优化:多国语言处理模块
修正:在多语言处理过程中,会将被注释的字符串纳入处理范围
更新:加入换肤功能:在主界面logo上单击右键可以换肤


20170415
更新:加入设置保存功能,不用每次启动重新调整设置了.加入历史功能,处理过的文件保存在历史列表中,最多保存十个


20170411
在AU3早期版本,编译后的程序碰到运行错误会弹出错误窗口,提示错误的行及语句.方便查错.但新版本把这一功能给简化了,可能是为了保护脚本代码的需要,仅提示错误的行.
有很多时候,脚本未编译前测试N次没发生错误,编译完成运行也正常.但是!也许几百次会偶而那么一次发生运行错误.弹出讨厌的错误窗口,这种错误在编译前是很难发现的.显示错误的行去源代码查也查不出什么,因为完全对不上.现在提供一种方法

新增:新功能测试,.检测脚本,生成实际行号与"解释器内部行号(不知道怎么描述,姑且这么称呼)"的对照表,如果哪天程序发生了错误,根据报告的行,利用对照表,可以方便查出究竟是哪行出现了问题!
效果展示在118楼


20170409
优化:寻找autoit安装路径逻辑


20170408
修改: 不再处理预处理指令,感谢131738
增加:新的include文件处理方式
增加:对于不能自动获得标准库路径的问题,添加手动指定的方式


20170329 修正: include A3x文件错误,A3X文件不再纳入整合范畴

20170224 修改:考虑到非注册版本迷惑脚本,需要添加排除变量,函数步骤,才能正常迷惑脚本.因此将函数名称迷惑(进阶),变量名称迷惑(进阶)功能开放,未注册也可使用!,目前需要注册使用的功能仅限于数字及字符串加密处理


201601112 修正:代码转换一处BUG,感谢ddrs


20160928 重新温习了一下#include 搜索次序
修正:#include文件路径解析的错误 比如 #include 'Includes\_CRC32ForFile.au3'
修正:#include文件互相包含对方,从而导致无限循环的错误
增加:当字符串加密时,将会自动排除fileinstall函数第一个参数(此参数内定必须为字符串),现在可以在迷惑后的脚本中正确使用fileinstall了
调整:功能按钮响应逻辑.


20160924 修复已知bug.附加了二个小工具.
字符串转换可以将任意二进制文件数据转换为AU3函数,以替换Fileinstall函数.如果是文本文件还支持生成释放文本文件的代码.
au3脚本附加多语言版本的功能,可以让你的AU3程序成为多国语言版本!只需简单几步就可完成,无需教程.
在转换前如果使用检测功能,还可自由选择是否转换某字符串.如果跳过检测,那么程序将按默认规则转换字符串.生成的文件内有说明,只需按提示将相应代码放入指定区域,即可完成脚本的多国语言化工作!.


20160905 修复已知bug

20160720偷偷的更新了一下.现在支持多語言版本了

20160716偷偷的更新了一下.现在支持十进制数字加密了还有其它细节上的一些调整

=====================================
最新版本




[hide][/hide]
=====================================


如果你喜欢,可以在本贴跟贴,发出你的机器码,我会将注册码贴上(截止到2017年12月31日,之后将不再开放免费注册)


Au3Encode 是一个用来整合迷惑Au3源代码的工具,在代码整合迷惑的过程中可以随时中止或者右键状态栏图标退出

功能简介:

1、整合为一个脚本(本工具不是一个脚本除错工具,在使用工具之前请确认你的脚本能正常编译运行);

2、去除脚本注释空行,首尾空白字符;

3、精简未使用函数,函数名改名为随机字符串;

4、精简未使用变量,变量名改名为随机字符串;

5、函数排除:#Obfuscator_Ignore_Funcs=func1,func2,func3

函数名称必须使用正则表达式.如"func\d"表示匹配func0~func9,函数名称之间使用","分隔;

6、变量排除:#Obfuscator_Ignore_Variables=$Var1,$Var2,$Var3

变量名称必须使用正则表达式.如"\$Var\d"表示匹配$Var0~$Var9,变量名称之间使用","分隔;

7、代码检测,检测当前脚本中含有'AdlibRegister,AdlibUnRegister,Assign,Call,DllCallbackRegister,Eval,Execute,GUIRegisterMsg,GUISetOnEvent,GUICtrlSetOnEvent,HotKeySet,IsDeclared,TrayItemSetOnEvent,ObjEvent,OnAutoItStartRegister,OnAutoItExitUnRegister'函数的行,便于进行函数或变量的排除.

特别注意:

1、关于整合,现在有两种整合方式,请根据实际情况选择使用何种方法整合脚本;

a)、使用快速整合时,请勿在主脚本 "#include" 命令点之前声明include的脚本内使用的变(常)量!由于在整合时所有#include脚本内容会放在主脚本第一个"#include" 命令点位置,如在#include命令之前声明了变(常)量,而此变(常)量在include的脚本内使用,那么在整合后由于#include脚本内容在前,声明的变(常)量在后,运行时将会出现此变(常)量未声明的错误,在这种情况下,请在使用此变(常)量的#include子脚本内声明它;

b)、如果脚本中有a类情况,请使用第二种整合方法(根据脚本中Include命令的位置整合),此方法模拟解释器载入代码过程进行整合,不会出现次序颠倒的问题,但相对前一种方法速度会稍慢一些.

2、关于精减,脚本中凡是由Enum枚举的常量不会精减,即使没有在脚本中使用;

3、关于变量声明,请勿以变量声明的方式执行某一函数操作,而此变量却在脚本中不再使用(否则将会在精减迷惑后将这一函数操作从脚本中剔除).
为什么不可以这样做?
举例:local $PID = run(@ScriptDir & '\Au3Encode.exe')
但$PID后续没有在脚本中使用,在Au3Encode的精减变量处理过程中,会认为此变量是无用变量,从而被剔除.造成脚本功能异常.
例外:已对GUI 控件创建的相关函数做出排除处理,不受此规则影响.包括以下函数
GUICreate,GUICtrlCreateAvi,GUICtrlCreateButton,GUICtrlCreateCheckbox,GUICtrlCreateCombo,GUICtrlCreateContextMenu,GUICtrlCreateDate,ICtrlCreateDummy,GUICtrlCreateEdit,GUICtrlCreateGraphic,GUICtrlCreateGroup,GUICtrlCreateIcon,GUICtrlCreateInput,GUICtrlCreateLabel,GUICtrlCreateList,GUICtrlCreateListView,GUICtrlCreateListViewItem,GUICtrlCreateMenu,GUICtrlCreateMenuItem,GUICtrlCreateMonthCal,GUICtrlCreateObj,GUICtrlCreatePic,GUICtrlCreateProgress,GUICtrlCreateRadio,GUICtrlCreateSlider,GUICtrlCreateTab,GUICtrlCreateTabItem,GUICtrlCreateTreeView,GUICtrlCreateTreeViewItem,GUICtrlCreateUpdown;

4、 函数名称迷惑(进阶)的特殊情况需要注意,自定义函数名称请勿与API内置函数相同!

举例:DllCall("user32.dll","int","ClientToScreen","hwnd",$hWnd,"ptr",DllStructGetPtr($stPoint));

在上面的DllCall中,字符串"ClientToScreen"是user32.dll的内置函数,此名称不能被修改,

如果脚本中存在名称为ClientToScreen的自定义函数,那么字符串"ClientToScreen"将被修改成为随机的字符串.造成脚本功能异常,

此时,请将自定义函数ClientToScreen改成其它名称,如_ClientToScreen;

5、  在已经勾选函数迷惑进阶和变量迷惑进阶的情况下一般不需要进行函数和变量名称的排除,但排除以下情况:

函数或变量名称是由字符串链接而成,比如"aa" & "bb",此时,需要将"aabb"加入忽略列表;

函数或变量名称是含文本字符串表达式运算后的结果,比如StringTrimLeft('aabb',1)此时,需要将"abb"加入忽略列表;

请尽量使文本字符串包含完整的变量名或函数名,这样就不需进行函数和变量名称的排除;
为什么要这样做?
举例:脚本已声明$Form变量,如果要使用Eval函数返回$Form的值,普通脚本可以eval("Form"),但是如果进行迷惑处理后会导致脚本错误[$Form已被替换成随机名称,而字符串"Form"不会改变],这种情况要修改脚本Eval(StringTrimLeft("$Form", 1));

6、  关于迷惑进阶

如果勾选变量迷惑进阶,本程序会对字符串中包含完整变量名称的字符串进行处理,如字符串包含"$button1,$button2,...",而实际又存在$button1,$button2这二个变量,那么字符串中的$button1,$button2会被替换成迷惑后的随机字符串,但形如"button1,button2,..."的字符串不会被处理;

如果勾选函数迷惑进阶,本程序会把包含且仅包含函数名称的字符串字面量作为函数处理,如GUIRegisterMsg($WM_COMMAND,"WM_COMMAND"),而脚本中又存在名称为"WM_COMMAND"的自定义函数,那么"WM_COMMAND"会随函数一起进行迷惑处理,但形如" WM_COMMAND"的字符串不会被处理,因为字符串多了一个空格;

7、  关于文本字符串的处理

字符串简单处理是指单纯的将文本字符串用BinaryToString处理;

字符串加密处理(此功能需要软件注册)是指将文本字符串加密,并用随机变量替换;

十进制数字加密处理(此功能需要软件注册)是指将十进制数字加密,并用随机变量替换(十六进制数字不会处理);

脚本内部是指将加密后的密文置于脚本源代码中,在SciTe中直接可以按F5调试;

RC资源段是指将加密后的密文置于程序资源段,源代码只有在编译后才能正常运行;

8、  已对FileInstall内置函数特别处理,不会转换此函数第一个字符串参数.也可使用本工具自带的代码转换代替FileInstall;

9、  因为迷惑脚本的特殊性,部分函数的调用包含在加密后的数据中,au3check 是无法检查的,如使用Au3Check -w 5(局部变量已声明,但未使用)-v 3( 显示未使用的 UDF 和全局变量)开关检查脚本,将会发出警告.请不要使用此开关检测脚本;

10、 已经进行过迷惑处理的脚本请勿再次使用任何工具进行迷惑处理!否则会造成脚本功能异常.

附件: 您需要登录才可以下载或查看附件。没有帐号?加入
5

评分人数

  • zpmc123

  • nqawen

  • 131738

  • afan

  • lpxx

回复 1# tubaba

下载试试,不知好用不?

TOP

回复 1# tubaba

下载了
机器码:
HGST HTS725032A7E630RC040ACK002APJBFE9FBFF000106C2

TOP

谢谢楼主,机器码BFEBFBFF00010676

TOP

测试下,谢谢分享!

TOP

收藏一下,其实对于脚本语言来说,迷惑也只是浮云。据说从内存中可以直接看到代码,当然具体方法没有说。
转身离开
分手说不出来
海鸟跟鱼相爱
只是一场意外
我们的爱差异一直存在
风中尘埃竟累积成伤害

TOP

回复 3# chzj589


    6CCFH-F9YTW-BT3PJ-QRJ2R-R4P4D

TOP

回复 4# 虫子樱桃


    PPF37-GB8YB-HDTMV-HBW3Y-Q4F8Y

TOP

回复 7# tubaba
谢谢!己注册!

TOP

这个试试看。
自己知道的,尽量告诉别人,自己不知道的,虚心学习

TOP

WDC WD3200AAKS-75L9A0WD-WMAV2F359060BFEBFBFF0001067A

请求注册码,谢谢。
自己知道的,尽量告诉别人,自己不知道的,虚心学习

TOP

回复 11# lpxx


    DCD86-4KB7V-GJBF7-MFCVJ-FWRPD

TOP

路过,进来看看,可惜我不明白

TOP

这个是好东西,不知道跟A大的迷惑工具相比,那个更优秀一点

TOP

178BFBFF00100FA0 我的机器码,求注册

TOP

返回列表