今天在研究pbd文件,突然想到pbd文件混淆器。因为还没看过它的原理,但是我已经大致猜测到了他的工作原理。
//---------------------------------------------------------------------------------------------------------
最新PB混淆器下载,支持5-12,防止反编译 http://chengg0769.download.csdn.net/
----------------------------------------------------------------------------------------------------------//
比如我们写上一个if then else end if结构。
if 1 <> 1 then
//这里写这么多只是为了在p-code段有足够多的byte来做混淆。
return "aaaaaaaaaaaaaaa"
return "aaaaaaaaaaaaaaa"
return "aaaaaaaaaaaaaaa"
return "aaaaaaaaaaaaaaa"
return "aaaaaaaaaaaaaaa"
return "aaaaaaaaaaaaaaa"
return "aaaaaaaaaaaaaaa"
return "aaaaaaaaaaaaaaa"
return "aaaaaaaaaaaaaaa"
return "aaaaaaaaaaaaaaa"
return "aaaaaaaaaaaaaaa"
return "aaaaaaaaaaaaaaa"
return "aaaaaaaaaaaaaaa"
return "aaaaaaaaaaaaaaa"
return "aaaaaaaaaaaaaaa"
return "aaaaaaaaaaaaaaa"
else
return "BBBBBBBBBBBBBBB"
end if
我们知道这个表达式恒等于返回"BBBBBBBBBBBBBBB"
但是反编译器有个致命弱点是必须顺序解析每个遇到的码,并把他翻译出来。也就是说是顺序解析的。因为执行码和数据是混合放置的。常规反编译是必须顺序流水解析的,就想asm一样,如果中途你插进一个byte,后续就会错完。
在if 和choose等选择结构的p-code或者机器码表达方式中,仍然是采用jp和jnp指令。也就是比较后跳转。所以这个1<>1恒false,也就是if前半段是永远无法执行的,也就不会引起vm解析错误,因为永远执行不到那里去。但是反编译器就会进入陷阱中而无法自拔。
内部表达序是:
取值(1),取值(1),JP(goto address1:)顺序:执行1,执行2,执行3........
address1:顺序:执行a,执行b,执行c........
可以看出,可以在"顺序:执行1,执行2,执行3........"进行大量p-code的伪造,比如goto到一个不存在的地址,或者取一个非法地址的数据,或者伪造不可识别的p-code码等。方法就很简单了。
这样伪造的结果是,程序执行没有任何影响,而反编译器陷入其中而导致异常处理时退出,或者显示一些错误结果,或者空白(出于自身保护)。
这当然是个矛盾相生的问题,因为混淆器无法知道你写的程序的本意,它只是一个transfer,所以如果你写:
if a>b then
...
else
...
end if
它是不可能去伪造的,必须是人为设置,就是说连这段if结构也必须是伪造的。当然反编译器也可以在遇到无法分析时中断上半段的解析,而直接goto到下半段解析。不过如果混淆的程度太高,可能不能够越过。
因为操作码有些要读取数据,有的是单码不读取数据,所以如果反编译器仍然采用顺序流水方式,必然无法顺利解析到指定的goto位置,因为伪造的p-code可能在取数据时已经越过了goto到的位置。所以必须把任何跳转都分开解析,一旦一条路出现数个连续错误,如:不可识别操作码或者非法资源地址访问等,即刻终止,并按goto的位置去解析下半段。在跳与不跳之间或者多个goto下,必然有一个是正确的出口,否则程序就不会顺利执行的(这是一个原则),只是最后的结果会出现很多goto标签而已,但是可以认为,程序是可读的。
分享到:
相关推荐
powerbuilder-pbd混淆器,代码混淆,加密,防止无意义的解密
**PowerBuilder PBD 文字移除与代码混淆加密器** PowerBuilder是一款强大的4GL(Fourth-Generation Programming Language)开发工具,常用于构建企业级的Windows应用程序。PBD(Persistent Binary Data)是Power...
PBD文件是PowerBuilder编译后的二进制对象文件,其中包含了源代码的编译信息,用于运行时调用。然而,由于PBD文件是非开放格式,原始的PowerBuilder源代码并不直接可以从这些文件中获取,这给逆向工程或代码分析带来...
《PowerBuilder 9.0 PBL文件结构解析》 在PowerBuilder(PB)开发环境中,PBL(PowerBuilder Library)文件是重要的组成部分,它存储了PB应用程序中的所有用户对象,如窗口、表单、控件、函数等。理解PBL文件的内部...
标题中的"PBD文件查看DW"指的是使用特定工具或方法来查看PowerBuilder(PB)的PBD文件中的DataWindow对象。PBD文件是PowerBuilder应用程序的编译后二进制文件,其中包含了各种对象如窗口、菜单、数据窗口等的定义。...
标题中的"pb9源码"指的是与PowerBuilder 9相关的源代码,这通常包括窗口(Window)、表单(Form)、数据窗口(DataWindow)、函数库(Function Library)等对象的源代码文件。在PB中,源代码被存储在PBL(Power...
4. **bell.pbd**: 这是一个PowerBuilder的数据窗口对象文件,很可能包含了游戏界面的布局和逻辑,数据窗口是PowerBuilder中用于显示和操作数据库数据的组件。 5. **images**: 文件夹,包含了游戏中的各种图片资源,...
- PowerBuilder可以生成部署所需的全部文件,包括ASMX或WCF配置文件,只需将这些文件上传到服务器的适当位置即可。 在提供的PB_WEBSERVICE_DEMO压缩包中,你可能会找到一个示例项目,包含了完整的Web Service开发...
PowerBuilder 配置文件是.pb.ini 文件,保存了许多 PowerBuilder 开发环境的信息,例如节的名称和关键字的名称是固定的,不能随意起名。创建应用对象必须指明两个信息,A、一个是应用对象的名称,B、一个是应用对象...
.pbd 文件是PowerBuilder的编译后目标文件,全称为PowerBuilder Deployment File。当PB程序被编译后,源码库中的代码会被转换成.pbd 文件,这个文件包含了运行时所需的机器码和元数据。与.pbl 文件不同,.pbd 文件...
`public.pbd`和`public.pbl`是PowerBuilder的库文件。PBD是编译后的库文件,而PBL是源代码库文件。`public`可能表示这个库是公共资源,包含可以复用的函数、对象和数据窗口等组件。在抽奖程序中,这些库可能包含了...
在PowerBuilder中,由于编译后的.PBD文件并不直接包含源代码,而是包含了编译后的元数据和字节码,反编译PowerBuilder应用需要专门的工具和技术。 **反编译工具:** 1. **PB反编译器:** 这类工具如PBDDecompiler和...
2. PBD(PowerBuilder DataWindow)文件:包含了数据窗口对象的定义,用于与数据库交互。 3. PWF(PowerBuilder Window)文件:表示用户界面的窗口对象。 4. PFC(PowerBuilder Function Class)文件:包含自定义...
目前PowerShield只能加密PB6/7/8/9版本的程序。代码混淆不会影响程序原有的功能,但是使用过强的代码混淆会损失一定的执行效率。
- 分析.PBD文件结构:理解PowerBuilder应用的内部工作原理,包括数据窗口、事件处理、函数和过程等。 - 恢复源代码:将编译后的代码转换为可读的PBL或PBL源代码文件,便于编辑和调试。 - 保留原始格式:好的反编译...
标题 "查看pbd中各种对象及其语法" 涉及的是PowerBuilder(PB)开发环境中的一个重要方面,尤其是关于PBD(PowerBuilder DataWindow)和PBL(PowerBuilder Library)文件的操作。这些文件是PowerBuilder应用程序的...
然而,由于PowerBuilder编译后的应用程序是二进制的.PBD文件,源代码不对外公开,保护了开发者的知识产权。但有时候,为了学习、研究或者修复已有的PowerBuilder应用程序,可能需要对这些二进制文件进行反编译。 ...
6. **执行文件和库文件**:压缩包中的.pbvm60.dll、pbdwe60.dll、pbdwo60.dll、pbmss60.dll是PowerBuilder运行时库文件,它们包含了运行PowerBuilder应用程序所需的组件和功能。russiablock.exe是游戏的主执行文件,...
标题中的“处理PB编译后的pbd,exe,dll文件”指的是处理PowerBuilder(PB)编译生成的三种类型的文件。在PowerBuilder开发环境中,`.pbd`是工程数据文件,包含了源代码的信息;`.exe`是应用程序可执行文件;`.dll`则...
在压缩包中的`systray.pbd`是PowerBuilder的数据窗口对象文件,`SysTray.pbl`是包含`Systray`对象的库文件,而`app_systray.pbt`是项目文件,包含了整个应用的配置信息。这些文件共同构成了PowerBuilder应用程序的...