原 Powerbuilder混淆,加密(powerbuilder防止反编译,pb混淆器,PB加壳,支持5-12) 改进版本效果图

新版增加了自动插入逻辑陷阱变量等功能。并强化了30-50行短代码的阻止效果。并保障每个代码段都插入阻止点。

这是新版软件运行的图示:

如下是一个pbd混淆加密之后用反编译打开时的效果图(混淆器已经开发了十年,其代码混淆保护效果一直满意,用图说话)工具自2009年开发,2010年发布测试版,经历1-2年的测试改进,至最早的客户从2012年开始使用正式版开始,已累计数万次加密并消除了写PBD文件的BUG从而稳定下来,从POS到ERP,从各种终端运用,到提供第三方PBD接口,不管是PBD还是DLL编译模式,都通过实测证明其稳定运行了若干年。工具采用与文件,时间相关的动态因子,没有人能以固定模式测试到所有的加密规律,除了算法升级外,内部算法因子也按时间自动随机演进:

主要的措施如下(这是文档里面公开的,也就是说算法是经得起推敲的)

http://www.pbdecompiler.com

http://www.pbobfuscator.com

http://www.powerbuilder.ltd

1)变量变为乱码:

方式有随机数变成ascii码,下划线,控制字符,数字,英文等。因为变量名不对运行造成影响,所以实际扰乱后后的效果,非常乱。有些是成了乱码字符串,有些被反编译改成了var_n的方式显示出来。

2)在代码级别对其进行加密:

不是某些所谓加密工具,对pbd文件进行切割加工,待到运行时又出现组合。基本都是绕人的措施。

本工具从代码级进行处理,将代码事先切割成段,然后用代码再组合起来,在组合时,插入一些钉子和陷阱。这种陷阱有几种:

1>简单的数学:

比如13812938123+239123891283=? 适合于代码短,扩展空间有限的地方。

2>嵌入内部函数,比如 负号运行,min,max,integer,ceiling等等。比第一种就稍微复杂了。这样的强度开始,反编译几乎就无法判定了。比如min(1024, varxxx)= 1024等。反编译处理不了,只能原样摆出来成为奇怪的代码。而正常的逻辑执行不受到影响。

3)混淆专用变量:

用常量参与计算非常容易被固定模式计算,所以采用向local var区域添加一个混淆专用的变量,可以是boolean或者long类型的。

新版中,已经能自动由工具插入一个这样的变量了。也可以手工在源代码中编写(适合特别强保护的代码)。

这个专用变量能被工具在加密时,动态改变它的值。也就是一边赋值,一边判断。这个强度从理论和实践中来看,是非常强大的。比如 long var_xx = 0

var_xx = 1024

var_xx *= 1024

if min(xxx,var_xx)=?? then

正确跳到正常的代码分段,错误则调到随机位置,或者随机的代码行(这个强大哦。反编译看起来有goto语句。但是其实是随机的!!!位置。压根在源代码逻辑中不存在那样的跳转。

4)自定义逻辑陷阱

通过程序员自己写复杂的逻辑代码来让分析陷入死胡同

比如 if myfun(var1,var2,var3,var4,var5)= myfun2(var1,var2) then

正确跳到正常的代码分段,错误则调到随机位置,或者随机的代码行。

这样的代码是运行时决定的。是任何静态分析方法无法解析的。

综合上述,本工具是非常强大的。它也正经历众多的客户检验,经历近十年的时间检验。

如上图,运行在win10上的截图。

在XP,2003,2008,win7,win10等系统均可正常运行。

 

P-Code混淆功能 将正常的P-Code码分解切分成块 通过连接符进行重新组装,保持逻辑顺序不变 程序块位置随机决定,无固定规律 加入数十种常规运算类逻辑陷阱,阻止静态分析。例如: if (1+2)*3=3+5-6*(2^3) then if 1+2 -3 * 4/5 = 100/3 then //正常出口或一堆乱码 //正常出口或一堆乱码 else else //正常出口或一堆乱码 //正常出口或一堆乱码 end if end if 以上算式,做到随机选择运算种类和运算次数,混淆能预先计算正常的出口,而反编译无法分析到正确的出口 因为反编译尚不具备编译的扫描分析能力,并且编译的能力也仅限语法扫描,编译也无法预知出口,因为表达式可能有变量存在而非全部是字面量 程序员自定义逻辑陷阱 if fileexists(“c:\123.txt”) and gf_xx(123) <>gf_yy(“abc”) then //正常出口或一堆乱码 else //正常出口或一堆乱码 end if 由程序员配合设置程序流程的正常出口和逻辑陷阱位置,强力阻止机械反向分析 因为以上函数或者算式需要运行时方可知道结果,连编译也无法预先得之结果,反编译更无可能得之 将某个对象(从来不用,专门用来对付反编译的)从十六进制去随机破坏扰乱 反编译反编正常对象没问题,但是要判断一个对象的二进制是否为正常的,不容易,因为没有参照 将某个对象(正常对象如w_main)内部的某个函数(从来不用,专门用来对付反编译的,如wf_get_dogid),将其从十六进制上去破坏扰乱 反编译反编正常函数或事件没问题,但是要判断一个函数或事件的二进制是否为正常的,不容易,因为没有参照 对PBD和DLL文件在文件结构上的某些字节进行移除或者破坏 对Local变量名移除,对函数参数名进行移除,隐藏代码和函数的用途 移除或者替换是绝对不可能还的,即使重新命名,在非常复杂和晦涩的代码中即使重命名为ll_1,ll_2,ls_1,ls_2也不可能得到有用的代码,这对阻止还出代码十分有用,也使得代码无可读性,失去被反的价值 混淆对文件修改时并不留下版本信息,不同版本之间差异非常大 反编译无法根据混淆版本特点进行开发反混淆 多种方法,相同的作用:阻止反编译的正向机械式静态分析,保护软件版权
相关推荐
©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页