PowerBuilder混淆器v2010.11.01说明书
目录:
一.相关知识简介
二.历史
三.本软件特点
四.注册
五.在线认证
六.混淆
七.如何购买
八.服务与升级
九.下载地址
十.联系方式
十一。本版本改进
十二。开发历史与修改日志
正式版价格参看:http://www.mis2erp.com
图片:
一.相关知识简介 回目录
什么是混淆器,什么是PB混淆器?为何要使用混淆器?
在编译型语言中,高级语言总被直接编译成汇编码,然后再到机器码,所以比较低阶,除了反汇编外,基本无法分析程序。
而在PB和早期的VB,现在的Java,C#等都是相当高等级的带“动态特性”的语言,他们利用虚拟机技术或者层次更高的解释技术,将高级代码先编译成一种精简的中间执行码,然后被解释执行。与纯解释执行的vbscript等相比,少了重复n次的扫描和分析,所以认为比较快。
在PB中,比如:
long ll_temp
ll_temp = 100+100
这个最简单的算式,编译器先确定右边是两个字面量的数字类型相加(此处仅举例,也可能在编译时就事先加为200,如果是100+变量,100就一定会编译到执行码里面),在pb中默认的数字类型是long型,浮点小数是double型。当然也有其他的认定比如把10赋值给一个int型(16位),则字面量可能被确定为int或者uint,这个是编译器自行判断,通常编译器都分得很细,针对每种语言界定的意义都有相应的表达方式。如上等式,编译后的形式大致为
A.取值/long型/100; B。取值/long型/100; C。相加/long型加法; D。数据类型转换(不是必须,但类型不同的数或者变量,必先做类型转换);E。赋值(将值或者地址/指针赋值给变量)
也许编译后的代码举例是:(HEX)
10 00 01 00 //取某个变量,代号为01
20 00 //取long型字面量(长度16位的码)
64 00 00 00 //字面量0x64,就是100(long占用4位,并存在本地,如其他类似C,C++中的指针类型,基于处理方便的原则,本地只保存4位指针(或叫地址),而实际内容保存在一个固定的段内。比如longlong类型(8位),或者浮点数,金融数,字符串,数组等都是长度不确定的,有个专门的结构来表达他们,而在代码内,只存放指针,操作时,因为知道数据类型,也就知道在何位置,如何存取相应的部分。
20 00 //取第二个数字
64 00 00 00 //第二个100
50 00 //long型相加
5F 00 00 00 //赋值
这就是大概意义上的P-Code码。实际过程中,因为涉及到数据类型的转换或者提升,有许多的辅助代码。比如long和int相加,要提升int再相加。这是一个常识。当然还有其他与C,C++一致的要求,就是语法,比如优先级,这在P-code中也有实际的实现,否则就不成其为一种语言了。由于数据类型众多,而且PB对内嵌的SQL等支持很好,所以码表极多。如longlong类型和byte类型,try。。。catch都是在发展的过程中添加进来的。这样,到目前pb12为止,据统计,码表已经达到640个之多。从PB5-12和PBK2.5(2.0我未安装,后续可补)总计码表6000余。每个码都各司其责,完成指定的具体任务。
不管是机器码还是P-code,都为执行码+数据,数据的长度由前面的执行码决定。有的没有数据,有的有多个byte的数据。如上第一行,01 00为变量的代号,占2个字节。因为一个字节(255个)不敷表示。
对于执行码与数据混合的这种形式,我们知道不执行前面的码,就无法预知后面某个位置的某个byte到底何用。也就是我们无法区分某个byte到底是执行码还是数据。一切都必须从第一个码开始执行,同样的,反编译是一个根据码表和数据反向解析和得到源码的程序,他是一个模拟的虚拟机,不过它执行的结果不是数据运算结果,而是得到我们的意图,我们程序员所写的源码。在机器码编译时,由于CPU只有在执行比较简单的任务才会得到较高的效率(加减,移位,异或,取反,判断溢出等),CPU无法执行一个调用SQL的过程,但是在p-code中,调用SQL可以被编译成一个p-code码,然后再由虚拟机中的函数来具体处理,它的灵活性很高,能处理高阶的逻辑。所以硬件码都比较低层,而且近似数字处理的机械过程。而P-code不一样,它与源码有直接的对应关系。除了逻辑判断会有多种表达式用相同的实现而无法真正还原源码的写法外,就一个简单的a = b+c这样的算式来说,与源码是一一对应的。这也是现在PB反编译和Java,c#的代码可以反出来一摸一样,令我们瞠目结舌的缘故。
混淆器发展了这么多年,有几种实现,如打乱顺序,然后再重新串联;抹掉一些遗留而本身运行不依赖的字符,如非公开的function/event和instance变量,本地变量都是不被外部访问的,所以编译器就在内部直接呼叫ID。而外部呼叫的全局函数,public的实例变量名,全局变量等,外部直呼其名。就不可以抹掉,只能全局替换(仅举例,有用无用要具体判断)。当然利用花指令,废指令,能扰乱正向分析而让反编译误入歧途,也是一个方法。以现在的P-code编译或者所谓的字节码而言,最主要保证不被破解就是要守住反编译一关,否则编译后发行和发布源码无任何区别。需要反出源码的人当然最好是程序员,因为反编译后会有一些错误,程序员知道他自己的书写习惯容易恢复;而对于不想得到代码的人,他可以看到一些关键的数字,文字,逻辑判断的位置,而用Hex搜索,不下几分钟,就能定位从而修改Pcode。如把=改成<>,从前面的知识我们知道,只是一个byte的修改而已。
如此简单的一个举例,只想说明一个问题,在这种P-code模式的编译情况下,反应的计算过程相当的高阶,也就是能对高级代码有一个直接的映射。这也就是PB等语言存在反编译器的缘故。而不曾听说编译型语言有反编译器一说。
正是有如此特点,所以PB代码要保护起来有相当难度,但是我们知道,在很多论坛都对调试pbd有经验介绍,提得最多的是利用反编译器得到可阅读的源码再写注册机,当然这已经不是意义上的破解了。本质是反编译器在破解软件。而亦有少数跟踪到vm内部去打转的说法,得出的结论就是调试很麻烦。所以不借助反编译器,是很难破解pb写的程序的。当然简单的程序,和碰到孜孜不倦的那种高手除外。因为堆栈,内存等都可以被调试看到,特别我们的注册过程又会生成如磁盘号,注册码等,如果跟踪还是容易得到的。不过,聪明的人都会在许多地方下“暗桩”,也就是叫破解者无所适从的方式。毕竟谁能把破解的东西用于生产环境呢?
因为人们较高的研究热情,如.net和java都可以反编译得非常棒,当然pb也不例外。可想无混淆措施的pb代码等于源码。
我对以上的内容了解有限,在pbd格式分析过程中也只领悟到这些。并且我也不是调试能手,所以就此打住。我们的任务就仅限于阻止反编译器得逞。
混淆器就是通过改变代码存放的物理顺序并重新串联,以不改变其执行逻辑,而阻止其顺序分析。还有如去除部分文字,函数,事件名,参数名字,再加上特意制作的虚假对象,虚假函数事件,或者虚假的代码片段。
通过对pbd格式的透彻分析,我采用以下几种思路来混淆。
1.1 去掉一切可以去掉的字节,只要反编译器有依赖的字节,反编译器必崩溃,针对的是那种旧版本不再维护的反编译器如pbkiller。只要改极少地方,即可让其休息。不再困扰大家。当然也许pbkiller只是要做一个正当的反编译而已。
1.2 抹掉诸如变量名,函数名,参数名,事件名等,当然有些是无法抹掉的,因为pb这种语言还存在一种动态调用。原则上可以进行等效替换,不过容易出错,目前尚不支持,比如pbd中的object列表,有网友建议我扰乱,可是部分人只处理极个别pbd文件,不会把所有的pbd打开来操作一遍,所以操作起来得不偿失。如create using “object-name”和object.classname,以及synamic call “xxx”等都对对象名字等有依赖,函数和事件也可以写成字符串来call,所以暂时未做到此功能,因为要保证像反编译器一样100%定位和替换相应的字符串,否则会出错。
其实过往的混淆器powershield没有做这一点,其实这点很重要,pb的防止反编译其实就这点实现就足够了。如果反编译出来的代码无阅读性,那也就没任何意义了。一堆乱字符表达的东西不会有任何意义。即使你看到是一个逻辑比较,你也不知道谁跟谁在比较。看到一个自加,你也不知道谁在自加。替换字符多数会出现0x01-0x20之间的不可显示符号,甚至换行,所以是很难看懂的。一个乱字符可以查找替换重命名,而带有换行符的恐怕没有几个人能换掉它。
这是扰乱函数的参数的效果。
1.3 花指令也亦采用逻辑陷阱,跳转等重组代码区。致使分析困难阻止反编译。Powershield的这方面做的比较模式化,所以容易被“反”。我目前旨在加强并同第二点配合让其更强悍。
1.4 造假,在其他地方尚未见到如此提法,但是我们知道给一个不是对象的对象或者不是函数的函数放在pbd中,总能起到立竿见影的效果。方法不在玄,关键是要管用。混淆器要的就是一个结果。我们试想一下在一个昏暗的灯光底下,一个破解者一上来就是拿出一个反编译器来搞搞pbd文件。并不是人人都能力写反编译的程序,所以症结就在这里。
1.5 其他方法,我有想到或者参考到其他混淆器时,就罗列下来并形成一个远期的改进,添加进来。
二.历史 回目录
历史上有LJTT的PowerShield(支持7,8,9),Kevins的pb伪码清除器pbe;反编译器有LJTT的depb,kevins的pbkiller(9以下)和kenshu的shudepb。
Pb自2005年后“没落”,同时期的pbkiller和Powershield也停止更新。Shudepb一直孜孜不倦地更新,成为最新的pb反编译器,支持5-11多版本。
反编译的意义在工程恢复。这个价值还是很高的。
混淆器在保护授权,无保护无任何权益可谈。
本软件的意义就在于继承和加强PowerShield的思路,并支持全部版本。因为现在用6.5,8,9,10.5,11.5做正式开发的比较多。支持10以上是一个迫切需要。
三.本软件特点 回目录
对Powershield的借鉴,传承和提高,继续保护pb编译后代码。操作简单,处理速度快,以1-2s即可混淆完一个pbd。并不需要改动源码。
开放一个免费版本(测试版)并未限制PB版本和代码长度等。采用免费+收费模式,价格采用多层次,基本可做到想用即用,满意再购买,价格可自由选择,无任何约束。
来信,留言必复,有问必答。
四.注册 回目录
正式版采用在线注册方式,需要购买和测试的朋友请先邮件联系我,并先打开程序一次,然后认证服务器记录下你的机器码,然后只需要告知电脑名称即可。
计算机名称:
姓名:
公司名:
地址:
电话/手机号:
QQ/MSN:
联系邮件:
其他说明:
当然,你通过QQ等也可以把这些信息告诉我,不一定非用Mail不可。
电脑名请从桌面》我的电脑图标》右键》属性》计算机名》完整的计算机名称
请将” 完整的计算机名称”用邮件发给作者。购买后会在认证机器上开启一个账号。本机不设置任何授权码。
五.在线认证 回目录
购买登记过的用户,打开软件后将会得到如下回应:
第一行明确提示出验证的结果,包括机器码,文件CRC,授权的期限,授权的版本。
并请注意第二行的提示,到底有没有通过验证,如未通过“载入文件”按钮是灰色不可用的。
认证过程采用分布在广州和深圳的两台离线服务器,每2分钟一次,通过第三方网盘,接受用户端认证文件,验证通过后将发回信息。认证服务器和客户端无任何接触,确保了认证服务器安全性。
六.混淆 回目录
6.1 支持的PB版本
购买所有版本的用户将能获得混淆所支持的所有版本,而购买1-2个版本的用户将具体限制在购买的版本内。
到目前为止,支持的版本是PKB2.5,PB5,6,7,8,9,10,10.5,11,11.5,12。
版本为pbvm.dll的版本,如pbvm115.dll,版本就是11.5。版本不是指开发工具的版本。多个开发工具的版本都是用同一个虚拟机.
6.2 适用范围
由于混淆器预先打乱程序代码摆放的物理顺序,进而重新串接,并增加一些冗余代码阻止机械分析和反编译。故而代码总长度约为原代码长度的2-3倍,执行时因为冗余代码都是简单的指令,在执行时间上增加不多。但因情况带有随机性并无固定模式,大致估算执行时间为原代码的2-3倍。
针对一些授权和认证等代码,造成的问题不会突出,但是如果用在大循环中的某些函数,循环次数会把所需时间放大N倍,需要自行评估考量。以混淆后实际执行测试为准。
经过实测,在默认配置下,pbd文件混淆后体积扩大约2-3倍。
6.3 选择文件
为了避免不必要的麻烦,请把需要混淆的编译后文件拷贝到一个临时目录,比如“桌面\新建文件夹”,而不要直接在工程项目的文件夹去操作。
在文件类型处可选择pbd,dll,pkb,exe类型。本版本中,程序将自动识别exe文件是pkb还是pb。
注意文件在被运行时无法被混淆器打开。文件被ue等二进制编辑器打开后无法在pb中编译。所以必须强调,用正确编译后的pbd来混淆,混淆时保证其他程序不开启该pbd。
还有种情况是部分用户对放在项目文件夹内的pbd直接操作。失败后,用PB重新编译,选择“incremental”而不是“full”,造成pb认为对应的pbl源码无变化而不会重新编译该pbd。一来二去,自己也弄糊涂了,要避免这些问题。其次有个问题也是与此相关的,就是改动一个对象后,单独编译所在的pbl而且是“incremental”,并不能解决问题。可能引发运行时错误。有经验的话是要full编译一下应该没问题。
还有一种特殊的问题是,如果编译产生错误的话,pbd中的对象有可能只生成了不完整的HEX,这种情况在我用pb6.5编译和分析pbd格式时亲自看到过,如果遇此问题,你提供pbd给我,只怕我也误入歧途。也就是说,在报告问题前,请确认你混淆前的程序可以run。
加载文件后,出现对象列表,同时备份一个后缀名为.bac的文件:
软件只对几种对象进行处理:apl,win,uo,fun。Menu对象的事件中只有一两句程序,所以不处理,处理也没意义。Struct和dw等当然也不会处理。在显示对象列表时已经过滤掉了。
*关于下划线开头的对象名无法被混淆:
在解析pbd格式时,要排除一些系统内定的对象如“_initsrc”。这个基本是每个对象都会带有。
还有几十个属性或者函数如:__destroy_object,__set_attribute,__set_attribute_item,__get_attribute等。
因为我无法知道到底它们一共有多少以及是具体是哪些,每个版本又互不相同,所以只有抓第一个字符为下划线的对象或函数做特别处理。
所以建议不要采用下划线开头来命名,包括对象名,函数和事件名,以及属性名,变量名。如果要特别标示,请改用我们pb规则中不用的前缀。当然不用混淆的话不存在此问题。
现在程序已经修改为提示并略过下划线开头的对象。注意看混淆后产生的提示信息。见下图带++++++++的提示部分。
6.4 勾选需要混淆的对象
可以单独打钩选择需要混淆的文件,也可以在 打钩,再去掉部分对象,适合选择较多对象的情况。
6.5 勾选需要扰乱的对象(废对象)
假定你在pbd中放有一个对象,是其他任何地方不会用到的,其实就是为了阻止反编译而故意所为,其用途在于我们可以利用混淆器将其扰乱,而为反编译者留下一个难题。
比如你有一些很关键的对象,名字类似uo_getsystem_info,uo_basecalss,你可以用类似的名字生成其他几个废对象,如uo_getsystem_infomation,uo_base等。并在此打钩,系统将其二进制进行修改破坏,增加反编译的阻力。如果反编器无甄别能力,则:要不就停止或者报错,或者崩溃,要不就出现卡死状态。总之,现有反编译要改进能甄别这种欺骗才可以胜任。
6.6 填写需要扰乱的函数或者事件名称(废函数或废事件)
注意,一行输入一个函数或者事件名,然后回车。
有鉴于6.5的方法,反编译器可能提供一个单点调试的模式给反编译者来跳过某个对象,所以将这种思想植入正常的对象内,也就是在正常的对象内部写有一个或者多个“欺骗的废函数或者事件“,你要保证他不被该对象内部其他代码调用,也不被外部的任何地方调用。要求同6.5。注意的是只要你输入名字,不要参数表,而且这个函数名不管存在哪个对象(勾选的)里面,哪一层,都可以被扰乱,举例说w_1下面有一个函数ue_xxx,而你在w_1的某个控件上也写有一个函数,比如uo_1.ue_xxx,只要写上ue_xxx,w_1和uo_1的这两个自定义事件都将被扰乱。所以在使用时也要特别小心,名字最好接近实际的名字,但是要有所规划。一旦弄错,可能造成无法测试到的发布错误,直到用户使用时发现。如果你写错了名字,把正常的函数扰乱了,执行程序时将报运行时错误或者立即崩溃。
如果反编译在此对象卡住或许会全部跳过此对象的分析而错过正常代码的分析。
6.7 执行混淆动作
按此按钮。执行混淆动作。
如果你尚未购买此版本,则有如下提示,因为授权机器并未返回程序所需的6000个参数中的关于该版本的参数。程序无法正常运行而报错。
当然还有可能是pbd自身的问题,但是你应该首先确认是否购买该版本。
6.8 恢复文件重新混淆
如果有问题,可以恢复,注意只能恢复当前在操作的这个文件。所以在一开始要强调混淆操作时要把pbd文件拷贝到桌面上建立的临时目录内。有错误的话最简单从原始位置拷贝过来覆盖。
依我的建议,应该考虑从原始位置复制pbd过来重新混淆,而不应该依赖该按钮。因为我们有时会在错误的基础上备份。
6.9 提示信息
6.9.1 文件已经被混淆,重复混淆错误:
6.9.2 重要的提示信息
注意,提示信息以短划线做标记。一般仅起到提示作用。以便明确程序的确做了相应的处理。
6.9.3 错误信息
注意,错误的提示全部以一串加号做标记,遇到此类标记,应该仔细阅读甄别,并将其报告给作者。
特别注意,现在已经对此类错误采取保守措施处理,即遇到这种一时半会无法解决的错误,程序都是跳过那一段代码而未混淆!这一点使用者一定要清楚。你应该要评估出现这种情况时要不要继续发行你的程序!切记。
6.9.4 正常混淆后的提示
在默认参数下,混淆后的文件体积大致增加2-3倍。
6.10 选项配置
因改成中文,选项界面不再赘述。
6.11 关于”自建陷阱”的使用
标记,”自建陷阱”的标记为:
Long ll_mylong //申明变量
ll_mylong = 123456789+123456789+123456789+123456789+123456789+123456789 //”自建陷阱”的标记
记得表达式是: 等号左边为一个局部变量,long型,变量名任意,等号右边是6个“123456789“相加。混淆器在遇到这个算式时,将把代码变成任意跳转或者垃圾,或者伪造的执行码。
当然这个算式要放在“永远无法执行得到“的地方,比如:
Choose case ll_mylong
Case x1: //执行不到的case
ll_mylong = 123456789+123456789+123456789+123456789+123456789+123456789
Case x1: //执行不到的case
ll_mylong = 123456789+123456789+123456789+123456789+123456789+123456789
Case x1: //执行不到的case
ll_mylong = 123456789+123456789+123456789+123456789+123456789+123456789
。。。
End choose
当然还可以其他的方式,如:
If(1=2){
ll_mylong = 123456789+123456789+123456789+123456789+123456789+123456789
}
或者多个if。。。else if。。。else if。。。。。end if均可。
原则:尽可能利用复杂表达式,本地变量,全局变量,函数等来写条件,就如你平时写程序一样,这样不容易被机械地甄别。只是需要这样的条件恒false。
比如:
If(gf_fun1(p1,p2,p3)+100< gl_temp+ll_temp) then … //这个条件就是煞有介事的样子。并且也很难甄别出来。因为是程序员写的,而不是程序自动产生的,
//现在机器内置的10几种模式相对还是比较呆板。此次改进后将在此功能上极大增强。
注意,为了保险起见,一段代码内建议至少三五个这种标记。
6.12 移除Machine编译的伪码
机器码编译时,编译器仍然像pbd一样保留着pcode部分,同pbd一样,如果不移除,照样可以反编译。
在这个地方打钩,软件即可处理。为保证兼容性,程序在处理时只是简单将其入口地址拿掉。变通地达到效果。
6.13 如何测试混淆后的代码
同编译后发行前的pbd那样测试。就如平常测试一般。
七.如何购买 回目录
先发邮件给作者,双方确定好后再付款,付款后开通正式版在线用户。也可以先开通测试半个月到一个月,满意再购买。 联系方式
当然也可以群组,QQ上联系。
八.服务与升级 回目录
原则上一次性购买的允许免费升级。在升级这个问题上,不会做限制。
对1年期和半年期购买的,该软件的版本也不受限制,程序有升级时全部可升级到最新版,但是服务时间受到限制。
从定价上策略上,主要针对企业用户做高端的服务,至于个人pber,提供半年和一年期的服务。
PB版本可以任选。
如不提供在线认证服务时,将制作本地直接运行的版本,发送给一次性购买者。
之前的v2010.06.01还是可以继续使用,因强度有限制,所以不宜使用到正式的发行软件中,主要起测试作用。
v2010.06.01不再维护源码,仅保留二进制执行码。所以请勿用于生产环境。
九.下载地址 回目录
下载地址: http://chengg0769.download.csdn.net (csdn下载频道)
http://www.onlinedown.net/soft/15463.htm (华军下载站)
http://www.mis2erp.com/soft/pbobfuscator.rar (私人网站)
作者blog: http://blog.csdn.net/chengg0769
文章介绍: http://blog.csdn.net/chengg0769/archive/2010/04/17/5495693.aspx
十.联系方式 回目录
联系邮件:chengang0769#21cn.com,chengang0769#gmail.com,QQ:273939617,mobile:13790299411
十一.本版本改进 回目录
在v2010.06.1的基础上,增加支持“自建陷阱”,并改成正式版,支持付费购买服务。
并支持英文和简体中文自动配置。根据默认语言,自动显示为英文或简体中文。用户默认语言是“简体中文”则显示简体中文,否则全部显示英文。如下用户将显示中文:
十二.开发历史与修改日志 回目录
2010.10.28 修正5个PCODE码,修改在线认证方式。
2010.09.22 (阴历中秋) 测试非简体语言,英文界面报时间格式错误strtodate not a valid date format,修改bug;另发现一个rev-szchar缓冲区错误,修改bug。
2010.09.10 增加用户可以自定义的“逻辑陷阱”,弥补靠程序无法构建复杂的此类陷阱的不足。并修改成正式版,在线认证。修改界面支持中英文自动切换。
版本改为v2010.10.01
2010.07.02 网友PB8告知,他用到几个以下划线开头的对象无法混淆,已回复他:本软件不支持下划线开头的对象名,下划线保留给了“甄别”PB内置对象用。见此解释
2010.06.18: 接网友PB8的报告,在20x处理时出现一个低阶的bug(空格字符串出现乱码错误),修正。版本改为:V2010.06.1;
2010.05.27: PCM报告一个UO引用错误,经查为普遍错误。PropertyClear error(0-08)。修正。可能这个错误会影响到相当多对象,故提升版本为v2010.05.4
2010.05.19: 增补与整理pb5,10.5的码表,并测试5,10,10.5的pb-sample通过;
自此,支持5-12全系列。因pb12刚出正式版,前期只测试过beta,待后期着重测试。版本改为v2010.05.3。
NOD一个bug修正.
2010.05.17: 修正在checklistbox中未列出的对象如struct,menu等的"混淆标志"未清零的bug,致使未列出对象的参数被非法修改,致使运行错误。
bug由pcm和群内的牛解庖丁(475392*)测试时发现的,可能跟内存有关,如我的电脑测试多次都不出现。有的电脑每次都出现,但是应该归程序责任。
限制用户必须勾选至少一个对象,否则无法得到某些参数的正确的初始化值。版本更新到2010.05.2
2010.05.15: 修正短代码扩展系数太大造成的越界问题
2010.05.12: 修正TRL和FRE造成的问题。并测试自己的两个pb11编译的项目,运行正常。修改版本号为2010.05.1
2010.05.11: 增加移除dll机器码编译时的伪码,一个网友说可以抹掉。但是我无法确定,故为一个选项供用户勾选。但是并未移除,而是先混淆,然后将入口地
址拿掉,成无头僵尸,起到相同作用,因为我不想为此改动太多代码造成新问题。
2010.05.07: 修正try...catch结构的转移地址
2010.05.02: 增补pb10.5增加的byte类型的码约十个
2010.05.01: 承ourmis.com/pcm的样本测试,发现10Bx标志处最后一个short不能为0,因为采用随机数扰乱,故测试大约十多次才发现一次,修正。
2010.05.01: 承ourmis.com/pcm提醒,当我用自己的pb9测试时,6x标志可抹掉仍然运行正常,而他寄来的样本(也是9)就是不能抹掉,看提示好像是n_cst_msg,好
像是PFC的东东,本想抹掉一切可能抹掉的东西,此处只好不抹。
2010.04.30: 反编译器那边发现全局函数重载(内含一个以上的函数体造成报错)修正。
2010.04.29: 与反编译器一起修正6,7,8与9严重不同:取ctrl-list的不同,从而6-12测试解析正常了。
2010.04.29: 与反编译器一起修正:取控件名时判断控件的编号时 >=8000 写成了 ==8000,导致严重遗漏从而解析出错。修正。
2010.04.28: 对超长代码段实行折中妥协,自动降低JCP复杂度使得空间不够的提示尽量不出现。当无法插入JCP时,使用简单JXP做连接还原代码执行顺序。
对超短代码段提升长度为200字节。
2010.04.23: public的func和event需要用名字呼叫,故不抹掉。
2010.04.21: 修改exe格式丢失结尾的TRL段问题
2010.04 受网友建议,因pb11有代替9的趋势,感觉10以上混淆器是空缺并迫切需要,遂赶工完成并发布PB混淆器beta版。编程耗时40天。
2010.03.27 Foxstudio在2010.3.27寄了一份pb5开发工具绿色版,从而有幸使得PB版本近乎完整。Pkb未下载到2.0,只研究了2.5beta。发觉借用pb9的技术,故2.0无异。
2010.03 认真分析Powershield混淆方法和模式,写出反混淆单元,并以一套国产POS为例,反编译并修改字节获得无限试用期。见blog文字记述。
验证了其模式化造成容易被“反混淆”的不足。为后续混淆器开发奠定了基础。如仅为其升级版,简单复制它的方法,无任何创新,不足以保护pbd文件不被破解。
2009.08-2010-02 开发反编译器部分代码至90%,因其格式艰深,无任何文字可参考,多个关口差点”丧命”。且要兼容11个版本,屡屡废弃代码重写,前后耗时6月余,年后由于其他项目拖累,尚 未释出。
2009.07-2009.09 分析pbd文件格式,可见blog上零碎文字。
感谢的话:
感谢各位网友的鼎立支持!
特别感谢发来邮件或者csdn-blog留言,群组提交意见的朋友们!感谢敢于测试和使用的勇士们!
在此不具名一并致谢!
------------------------END-------------------------------------- 广东东莞 2010-09-23 06:06 回目录