Powershield一个疑似的BUG

来源:互联网 发布:unity3d guilayout 编辑:程序博客网 时间:2024/04/29 15:41

在分析Powershield保护过的代码时,遇到非常低概率地出现了如下错误的跳转:

GET BOOL_TRUE          //注意这里

GET BOOL_FALSE

IF LOGIC_FALSE THEN  JUMP TO 正确的地址        //匹配第二个BOOL_FALSE可以正确跳

IF LOGIC_FALSE THEN  JUMP TO 正确的地址         //这里其实会执行不到

 

而且出现多行sqlca.sqlcode <> 0 判断跳到如上逻辑的开头。而sqlca.sqlcode <> 0 判断之后是messagebox错误提示以及return -1或return 1,所以逻辑核对是很容易判断。我想这个是Powershield存在的bug。采用反编译测试,在代码段头部,出现多个嵌套的do。证明这个跳转的确不对。Powershield的原意应该是:

GET BOOL_TRUE          //注意这里

GET BOOL_FALSE

IF LOGIC_FALSE THEN  JUMP TO 正确的地址        //匹配第二个BOOL_FALSE可以正确跳

IF LOGIC_TRUE THEN  JUMP TO 正确的地址         //这里才会执行

为什么这么判断呢,还有个原因是因为代码在此处只需要连接(sqlca.sqlcode <> 0判断之后错误与正确跳转之间),而不是需要

if true then

//

else

//

end if

这样的毫无意义的逻辑判断。

这个错误将引起死循环或者运行时报错。

 

以上只是疑似和自己的猜错,有遇到混淆后出现运行错误的可以告诉我。。

PB混淆加密大师从此下载

 


原创粉丝点击