找回密码
 加入
搜索
楼主: tubaba

[原创] ,Au3Encode-代码整合混淆- 所有附件均已删除,请勿再顶此贴

[复制链接]
发表于 2017-6-15 23:21:25 | 显示全部楼层
回复 146# tubaba


    另外发现对IE.au3 UDF支持不够好,很容易造成obj不是对象的错误哦
 楼主| 发表于 2017-6-16 13:06:00 | 显示全部楼层
本帖最后由 tubaba 于 2017-6-16 13:13 编辑

回复 151# txm888


    已收到测试样本.确实,对于形似"If Not IsDeclared("GENERIC_READ") Then Global Const $GENERIC_READ = 0x80000000" 的行.au3encode处理不正确.原因是检测到此变量在脚本中声明了,但是并没有使用.所以去掉了变量声明 Global Const $GENERIC_READ = 0x80000000.但保留了前面的If Not IsDeclared("GENERIC_READ") Then,造成了脚本错误.此情况在以前遇到过,但是我以为这种方式的语句声明已不会出现了,所以没有考虑这种格式的语句.现在想想是大意了,已对处理方式进行了兼容性处理.但未做大量测试.可能会有其它BUG出现.写代码就是这样,当修复一处BUG之后,说不定其它地方又冒出来二个BUG.

题外话,"If Not IsDeclared("GENERIC_READ") Then Global Const $GENERIC_READ = 0x80000000" 此类语句已不适合在新版au3脚本中使用,这是因为如果在前面已经声明了GENERIC_READ,那这句在解释器中就会报错.
error: $GENERIC_READ previously declared as a 'Const'.
If Not IsDeclared("GENERIC_READ") Then Global Const $GENERIC_READ = 0x80000000,
如果在前面没有声明GENERIC_READ,那么If Not IsDeclared("GENERIC_READ") 又有何意义.直接声明Global Const $GENERIC_READ = 0x80000000就可以了.

另:看到你代码的预编译指令使用了
#AutoIt3Wrapper_Run_Obfuscator=Y
#Obfuscator_Parameters=/cs=1 /cn=1 /cf=0 /cv=1 /sf=0 /sv=1 /sci=1

记住,已处理过的脚本请勿再用工具进行迷惑处理.所以,这两句请去掉


再另:IE.au3我也使用过,但没发现你提出的不是对象错误.如果可以,请提供样本,就象前个错误一样.

修正的版本将会在晚些时候放出
发表于 2017-6-16 16:49:46 | 显示全部楼层
回复 152# tubaba


    谢谢!有bug,完全可以理解,写程序代码很不容易,可以说从头到尾都是修修补补,同时感谢你为大家所作的贡献,我们都是受益者。
发表于 2017-6-17 17:23:21 | 显示全部楼层
回复 152# tubaba

大师,ie报错的脚本我压缩后上传上来了,详见附件,谢谢!

本帖子中包含更多资源

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

×
发表于 2017-6-17 17:24:10 | 显示全部楼层
回复 152# tubaba


    P版常量声明检测的确实已经修复了,很好用了,谢谢
 楼主| 发表于 2017-6-17 21:10:21 | 显示全部楼层
本帖最后由 tubaba 于 2017-6-17 21:49 编辑

回复 155# txm888

我电脑是win10 64位,不管是3.3.6.1还是3.3.14.2都报这个错误.
如果是winxp IE8可以运行,那只有到公司再说了

    >运行:(3.3.6.1):G:\AutoIt3_3361\autoit3.exe "G:\autoit_script\Au3Encode\测试用\error\新建 AutoIt v3 脚本.au3"   
G:\AutoIt3_3361\Include\IE.au3 (1965) : ==> Variable must be of type "Object".:
Return SetError($_IEStatus_Success, 0, $o_object.document.body.innerText)
Return SetError($_IEStatus_Success, 0, $o_object.document^ ERROR
->20:56:12 AutoIT3.exe 完成:[CODE]:1


>运行:(3.3.14.2):G:\AutoIt3_33142\autoit3.exe "G:\autoit_script\Au3Encode\测试用\error\新建 AutoIt v3 脚本.au3"   
--> 按 Ctrl+Alt+Break 重新启动或按 Ctrl+Break 停止
"G:\AutoIt3_33142\Include\IE.au3" (1599) : ==> The requested action with this object has failed.:
Return SetError($_IESTATUS_Success, 0, $oObject.document.body.innerText)
Return SetError($_IESTATUS_Success, 0, $oObject.document^ ERROR
->20:59:08 AutoIt3.exe 结束.rc:1
+>20:59:08 AccAu3Wrapper 完成.
>Exit code: 1    Time: 1.33



我怎么感觉是你程序逻辑上的问题呢??试过原始的脚本在scite中调试吗
看这个函数
Func _WebDZ($web = "", $title = "", $user = "", $pass = "", $save = 1)
        If $web = "" Then Return -1
        If Not IsHWnd($FormWeb) Then
                $FormWeb = GUICreate($title, @DesktopWidth, @DesktopHeight - 40, 0, 0, $WS_POPUP)
                $mini = GUICtrlCreateLabel("", @DesktopWidth / 2 + 538, 0, 24, 24)
                GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKTOP + $GUI_DOCKRIGHT)
                GUICtrlSetTip(-1, "最小化")
                GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
                GUICtrlSetCursor(-1, 0)
                $close = GUICtrlCreateLabel("", @DesktopWidth / 2 + 564, 0, 24, 24)
                GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKTOP + $GUI_DOCKRIGHT)
                GUICtrlSetTip(-1, "关闭")
                GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
                GUICtrlSetCursor(-1, 0)
                $Label0 = GUICtrlCreateLabel("", 0, 0, @DesktopWidth, 60, $SS_CENTERIMAGE, $GUI_WS_EX_PARENTDRAG)
                GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKTOP)
                GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
                $oIE = _IECreateEmbedded()
                $GUIActiveX = GUICtrlCreateObj($oIE, -1, -1, @DesktopWidth + 20, @DesktopHeight - 40 + 20)
                GUISetState(@SW_SHOW)
                GUICtrlSetOnEvent($mini, "_mini")
                GUICtrlSetOnEvent($close, "_exit")
                AdlibRegister("_WinMove", 50)                        ;每50毫秒调用_WinMove函数,第一次调用时,如果脚本没有执行完下面的_IELoadWait($oIE, 1 * 1000, 5 * 1000),_IEBodyReadText就会失败.看错误提示Return SetError($_IESTATUS_Success, 0, $oObject.document^ ERROR,说明$oObject是对象,但它的引用$oObject.document请求动作失败
                SendKeepActive($FormWeb)
        EndIf
        WinSetTitle($FormWeb, "", $title)
        _IENavigate($oIE, $web, 0)
        _IELoadWait($oIE, 1 * 1000, 5 * 1000)                ;在这里才加载完毕.在这之后调用_IEBodyReadText($oIE)就可获取文本
EndFunc   ;==>_WebDZ



把adlibRegister("_WinMove", 50)移动到 _IELoadWait($oIE, 1 * 1000, 5 * 1000)        后试试
发表于 2017-6-17 21:17:28 | 显示全部楼层
回复 156# tubaba


    好的,谢谢,我的是win7 64位,ie11,3.3.8.1,直接运行不报错,迷惑后出现该错误
 楼主| 发表于 2017-6-17 21:41:40 | 显示全部楼层
本帖最后由 tubaba 于 2017-6-18 10:03 编辑

回复 157# txm888


刚才想了一下,,注册"_WinMove"函数后的50毫秒,_IELoadWait($oIE, 1 * 1000, 5 * 1000)已经执行完毕.所以不会报错,但是如果执行稍慢,在注册"_WinMove"函数后的50毫秒页面还没有加载完毕.所以就会报错了试着延长调用的时间,看看会不会报错.比如AdlibRegister("_WinMove", 1000),如果是这个原因.那这个程序的逻辑上就有问题了,因为无法确定在调用winmove的时候页面是否加载完毕   


经过au3encode处理过的脚本..它只是提取要使用的变量.函数(精减),并给变量函数,字符串带上了一个面具(迷惑),所以只可能会出现语句缺失,变量未声明等错误.一般不会出现变量引用不是对象的错误,看到你的报错截图我就放心了.因为语句是完整的.

    不知道是不是Au3版本的关系,但是开发COM组件的程序一定要注册一个COM出错处理函数,特别是IE类操作.如果没有,报错会让你崩溃.去查看下帮助GUI_参考里的/objcom参考  

COM 出错处理
使用 COM 没有适当的错误处理是非常棘手的. 尤其是当你不熟悉您脚本中的对象时.

如果是无法避免的 COM 差错, 你可以在脚本中安装一个"出错处理程序", 但如果这个程序被执行, 表明错误已经发生. 这不是一个完美的解决办法, 它使一个错误的脚本也能正常工作, 也没有捕捉非 COM 相关的脚本错误(如申明和语法错误).

使用 ObjEvent() 和一个用户自定义 COM 事件函数, 把差错处理作为 COM 的正常事件是可行的. 唯一的差别是使用一个固定对象事件名: " AutoIt.Error".
发表于 2017-6-26 01:34:30 | 显示全部楼层
DSC2CW120A3VCVC420300VW21B0NG400iBFEBFBFF000306A9
求注册
 楼主| 发表于 2017-6-26 09:44:55 | 显示全部楼层
回复 159# heavenm


    QJ4BG-DQ2R4-QVWX2-4JM7K-M4VWC
发表于 2017-6-26 09:47:45 | 显示全部楼层
感谢持续更新..
发表于 2017-6-27 13:10:38 | 显示全部楼层
能不能搞个注册机出来?这样方便换电脑。
发表于 2017-6-27 16:01:11 | 显示全部楼层
本帖最后由 kkkpep 于 2017-6-27 16:03 编辑

原始:Global $MainWD_ALL_s
$MainWD_ALL_s,替换后-> $Y5R34T2PC2ZC

原始:
Func MainWD_ALL_s()
        $MainWD_ALL_s =
……

错误成:
Func SP7R50XX4619()
$SP7R50XX4619 =
……

正确应该是:
Func SP7R50XX4619()
$Y5R34T2PC2ZC =
……
发表于 2017-6-27 16:04:53 | 显示全部楼层
就是说函数名和变量去掉$一样时发生了错误
发表于 2017-6-27 16:23:10 | 显示全部楼层
继续测试了一下该错误具有普遍性,函数名和变量去掉$一样时均出错,早先0.7版正常
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-3-28 16:59 , Processed in 0.077163 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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