前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于PBKILLER的搜索

PowerShield反混淆初探 - chengg0769 来自四川,在东莞虚度十载 - 博客频道 - CSDN.NET chengg0769 来自四川,在东莞虚度十载 PB反编译_Powerbuilder DeCompiler_PB反编译器_PB混淆器_PB加密 目录视图 摘要视图 订阅 新年新气象------CSDN2014新版导航就要跟大家见面了 2014年1月微软MVP当选名单揭晓! 消灭0回答,赢下载分 “我的2013”年度征文活动火爆进行中! 专访何海涛:“不正经”程序员的进阶之路 PowerShield反混淆初探 2010-03-22 02:31 2382人阅读 评论(6) 收藏 举报 insert编译器variables加密stringc 经过对PowerShield1.0简易版用各种混淆复杂度进行研究,总结两点: 1. PowerShield混淆和加密对软件的保护微乎其微;因为基于东躲西藏的思路,不是可靠的加密方式; 2. 经过一周的仔细分析和研究,包括在pbdecomplier的增加对反混淆的编程时发现,PowerShield是很容易去掉冗余的跳转指令,并归并和整理还原成普通编译后的代码形式,从而再用以前开发的反编译器就能轻松反编译它。 下面简单介绍一下反混淆原理,过多的细节不便说,因为如果没有反编译的基础,光靠能把跳转去掉,要处理并还原成源码还是不容易的。 1. 原则:再怎么混淆,它无法打破正常编译后的p-code顺序,这是铁定的事实。 2. 混淆原理:去掉p-code行数参数,致使PBKILLER崩溃,因为PBKILLER依靠这个参数(更正:依靠debug参数来参与还原一些行的布局,因为debug参数与源码的留行是一致的。PBKILLER并不依靠这个参数来断行) 3. 设置行计数器,每行代码拼接后在插入到vector时,给一个行号;行号不重复; 4. LJP,逻辑判断跳转处记录下跳转地址,等第一个分支分析完后,再分析这些分支;最后得到完整的代码。当然因为欺骗跳转的原因,得到的代码是错乱的。 5. 在每一行内,欺骗跳转只做转移,不参与任何逻辑跳转,直到断行后; 6. 在行与行之间的欺骗跳转,不可以直接忽略,因为它有可能影响到逻辑走向,因为原始的pbd中也会有很多跳转。欺骗跳转与正常跳转混杂在一起,或者欺骗代码用数个跳转,代替原本的一个跳转,我想的办法是压缩跳转,取得其首地址和跳转的最终目标地址二个参数,作为后续分析跳转用。 7. 在4步得到的结果如下: //local variables list qty = 4 //param: string commandlineboolean l_bblong ll_xxlong ll_yy 00000000:(00010000/00000001) //expression lines: 0//Confused expression by PowerShield! 0000FFFF:(00010000/00000001) _._._.J.X.F: 43C8FFFF/00000000: //vcJP010203_3900 insert43C8FFFF:(00010000/00000002) L._._.J.F.F: 212EFFFF/00000000: l_bb = true1AACFFFF:(00010000/00000003) _._._.J.X.F: 4406FFFF/00000000: //vcJP010203_3900 insert4406FFFF:(00010000/00000004) ll_xx = 3216EFFFF:(00010000/00000005) _._._.J.X.F: 1612FFFF/00000000: //vcJP010203_3900 insert1612FFFF:(00010000/00000006) ll_xx = 421C0FFFF:(00010000/00000007) _._._.J.X.F: 407EFFFF/00000000: //vcJP010203_3900 insert407EFFFF:(00010000/00000008) L._._.J.F.F: 41F4FFFF/00000000: l_bb = true3D62FFFF:(00010000/00000009) _._._.J.X.F: 1B04FFFF/00000000: //vcJP010203_3900 insert1B04FFFF:(00010000/0000000A) ll_xx = 73310FFFF:(00010000/0000000B) _._._.J.X.F: 305CFFFF/00000000: //vcJP010203_3900 insert305CFFFF:(00010000/0000000C) ll_xx = 80A18FFFF:(00010000/0000000D) _._._.J.X.F: 45E8FFFF/00000000: 41F4FFFF:(00000008/0000000E) ll_yy = 90562FFFF:(00000008/0000000F) _._._.J.X.F: 164AFFFF/00000000: //vcJP010203_3900 insert164AFFFF:(00000008/00000010) ll_xx = 100442FFFF:(00000008/00000011) _._._.J.X.F: 45E8FFFF/00000000: 212EFFFF:(00000002/00000012) ll_yy = 52252FFFF:(00000002/00000013) _._._.J.X.F: 3CAAFFFF/00000000: //vcJP010203_3900 insert3CAAFFFF:(00000002/00000014) ll_xx = 6131AFFFF:(00000002/00000015) _._._.J.X.B: 407EFFFF/00000000: //vcJP010203_3900 insert45E8FFFF:(FFFFFFFF/FFFFFFFF) __endof__ 那接下来就是按视觉顺序和逻辑顺序进行整理排序: //local variables list qty = 4 //param: string commandlineboolean l_bblong ll_xxlong ll_yy 00000000:(00010000/00000001) //expression lines: 0//Confused expression by PowerShield! 43C8FFFF:(00010000/00000002) L._._.J.F.F: 212EFFFF/00000000: l_bb = true4406FFFF:(00010000/00000004) ll_xx = 31612FFFF:(00010000/00000006) ll_xx = 421C0FFFF:(00010000/00000007) _._._.J.X.F: 407EFFFF/00000000: //vcJP010203_3900 insert212EFFFF:(00000002/00000012) ll_yy = 53CAAFFFF:(00000002/00000014) ll_xx = 6407EFFFF:(00010000/00000008) L._._.J.F.F: 41F4FFFF/00000000: l_bb = true1B04FFFF:(00010000/0000000A) ll_xx = 7305CFFFF:(00010000/0000000C) ll_xx = 80A18FFFF:(00010000/0000000D) _._._.J.X.F: 45E8FFFF/00000000: 41F4FFFF:(00000008/0000000E) ll_yy = 9164AFFFF:(00000008/00000010) ll_xx = 1045E8FFFF:(FFFFFFFF/FFFFFFFF) __endof__ 很快的半个小时编程就弄好了,所以我增补上来: //local variables list qty = 4 //param: string commandlineboolean l_bblong ll_xxlong ll_yy //expression lines: 0//Confused expression by PowerShield! if l_bb = true then ll_xx = 3 ll_xx = 4else ll_yy = 5 ll_xx = 6end if if l_bb = true then ll_xx = 7 ll_xx = 8else ll_yy = 9 ll_xx = 10end if 8. 还原成正常的代码顺序后,再使用反编译器的statement还原程序进行多种结构体的判断(这个我前期已经弄好,而且测试过大量代码无错误),逐步恢复 包括try。。。catch;for。。。next,do。。。while;if。。。else。。。end if等。上次我看到一个人说要写一个反混淆器,但是他贴一个界面出来,刻意模仿PBKILLER完全一样,甚至菜单上的图标都一样(搞笑),他的目标是去除混淆代码,但是如果混淆层次和复杂度比较高,代码冗余非常大,通常没有反编译器很难完成任务。而且不靠反编译器难于还原statement,也就是不可阅读。 我已经经过一周的分析和编程,反复修改程序,目前刚刚可以接近未混淆之前的代码了,但是还限于一个if。。。else。。。end if结构体,其他结构尚未细调。 //晚上熬夜了,终于完成90%的任务,只有两个字的感受,完美! 代码如下,for。。。next还有点问题: ******************************************************************* <2>public open ( string commandline) 0000CBCF ******************************************************************* //local variables list qty = 5 //param: string commandlineboolean l_bblong ll_xxlong ll_yy //expression lines: 0//Confused expression by PowerShield! ll_xx = 100 if l_bb = true then ll_xx = 101 ll_xx = 102else ll_yy = 103 ll_xx = 104end if if l_bb = true then ll_xx = 105 ll_xx = 106else ll_yy = 107 ll_xx = 108end if ll_xx = 110 if l_bb = true then ll_xx = 1 if l_bb = true then ll_xx = 2 if l_bb = true then ll_xx = 3 ll_xx = 4 else ll_yy = 5 ll_xx = 6 end if ll_xx = 7 else ll_yy = 8 ll_xx = 9 end if ll_xx = 10else ll_yy = 11 ll_xx = 12end if do while ll_xx > 0 ll_xx = 21 ll_xx = 22 ll_xx = 23loop do ll_xx = 24 ll_xx = 25 ll_xx = 26loop while ll_xx > 0 ll_xx = 0 do while 10000 >= ll_xx ll_xx = 1 ll_xx = 2 ll_xx = 3 ll_xx ++ loop choose case ll_xx case 1 ll_xx = 111 ll_xx = 111 goto: Label_003DFFFF ll_xx = 222 ll_xx = 222 case 2 case 3 ll_xx = 333 ll_xx = 333end choose 但是话又说回来,简单的statement还不要怎么用电脑来算,眼睛就能看出来。但是实际上的程序或者商业软件的编写者总不是傻子,而且对反编译器和混淆器都有相当的研究,也就是它会反复地进行测试,直到市面上的反编译器对它无法造成伤害的前提下他才会发布商业软件。在冗余度很大或者很变态的写法时,还是很难搞清楚他的statement的,所以总结一句话就是:除非你有非常好的归纳能力,能够把各种statement的特点归纳出来,否则类似各种statement相互嵌套和混杂的写法可能是很难还原的,甚至直接用goto写法。如果goto没法还原成正常的statement,那感觉上是反编译出错了,反编译者肯定也难以相信代码的准确性。 写商业代码的人都知道把一些全局变量或者许多控制参数放入注册码验证的流程中,而且在许多地方进行校验,并且有联合注册表,sql库,程序三方联合作用对抗反编译的。所以除非反编译回来的代码跟源代码一致,所以很难保证能达到破解作用。很简单的做法,如把文件的md5码送入dw,或者送入sql后台,后台再进一步作用,如此种种极尽所能的做法。都对软件保护有效果。在注册部分被打上印记的全局参数也会在各个界面用作参数,或者进一步设置到其他参数上去。。 多层嵌套去掉假跳转后的代码如下: 0000FFFF:(00000000/00000001) _._._.J.X.F: B2FAFFFF/00000000: //vcJP0102033900INSERTB2FAFFFF:(00000000/00000002) ll_xx = 13420FFFF:(00000000/00000003) _._._.J.X.F: 94CEFFFF/00000000: //vcJP0102033900INSERT94CEFFFF:(00000000/00000004) L._._.J.F.F: FCC6FFFF/00000000: 2 >= ll_xxEEFCFFFF:(00000000/00000005) _._._.J.X.F: A31EFFFF/00000000: //vcJP0102033900INSERTA31EFFFF:(00000000/00000006) ll_xx = 3A758FFFF:(00000000/00000007) _._._.J.X.F: 6304FFFF/00000000: //vcJP0102033900INSERT6304FFFF:(00000000/00000008) ll_xx = 45B7CFFFF:(00000000/00000009) _._._.J.X.F: 613AFFFF/00000000: //vcJP0102033900INSERT613AFFFF:(00000000/0000000A) L._._.J.F.F: E756FFFF/00000000: ll_xx = 5CB60FFFF:(00000000/0000000B) _._._.J.X.F: 9F30FFFF/00000000: //vcJP0102033900INSERT9F30FFFF:(00000000/0000000C) ll_xx = 6B0B8FFFF:(00000000/0000000D) _._._.J.X.F: 75B2FFFF/00000000: //vcJP0102033900INSERT75B2FFFF:(00000000/0000000E) ll_xx = 7D2C2FFFF:(00000000/0000000F) _._._.J.X.F: A85CFFFF/00000000: //vcJP0102033900INSERTA85CFFFF:(00000000/00000010) _.C._._._._: case135 = ll_xx2302FFFF:(00000000/00000011) _._._.J.X.F: B780FFFF/00000000: //vcJP0102033900INSERTB780FFFF:(00000000/00000012) L.C._.J.F.F: 0D3EFFFF/00000000: 901 = case1350F58FFFF:(00000000/00000013) _._._.J.X.F: A590FFFF/00000000: //vcJP0102033900INSERTA590FFFF:(00000000/00000014) ll_xx = 848FCFFFF:(00000000/00000015) _._._.J.X.F: B484FFFF/00000000: //vcJP0102033900INSERTB484FFFF:(00000000/00000016) ll_xx = 9D416FFFF:(00000000/00000017) _._._.J.X.F: 7BB2FFFF/00000000: //vcJP0102033900INSERT7BB2FFFF:(00000000/00000018) L._._.J.F.F: 420CFFFF/00000000: ll_xx = 1051F4FFFF:(00000000/00000019) _._._.J.X.F: D580FFFF/00000000: //vcJP0102033900INSERTD580FFFF:(00000000/0000001A) ll_xx = 11CE5CFFFF:(00000000/0000001B) _._._.J.X.F: 3BFCFFFF/00000000: //vcJP0102033900INSERT3BFCFFFF:(00000000/0000001C) ll_xx = 12F92CFFFF:(00000000/0000001D) _._._.J.X.F: B7C8FFFF/00000000: //vcJP0102033900INSERTB7C8FFFF:(00000000/0000001E) L._._.J.F.F: 6BFEFFFF/00000000: ll_xx = 130736FFFF:(0000001E/0000001F) _._._.J.X.F: 420CFFFF/00000000: //vcJP0102033900INSERT6BFEFFFF:(0000001E/00000020) ll_xx = 14E608FFFF:(0000001E/00000021) _._._.J.X.F: 753EFFFF/00000000: //vcJP0102033900INSERT753EFFFF:(0000001E/00000022) ll_xx = 155472FFFF:(0000001E/00000023) _._._.J.X.F: 7BB2FFFF/00000000: //vcJP0102033900INSERT420CFFFF:(00000018/00000024) ll_xx = 165AC6FFFF:(00000018/00000025) _._._.J.X.F: D90AFFFF/00000000: //vcJP0102033900INSERTD90AFFFF:(00000018/00000026) ll_xx = 17BE6EFFFF:(00000018/00000027) _._._.J.X.F: F054FFFF/00000000: //vcJP0102033900INSERTF054FFFF:(00000018/00000028) ll_xx = 4919C4FFFF:(00000018/00000029) _._._.J.X.F: 4094FFFF/00000000: //vcJP0102033900INSERT4094FFFF:(00000018/0000002A) ll_xx = 50E76EFFFF:(00000012/0000002B) _._._.J.X.F: E756FFFF/00000000: //vcJP0102033900INSERT0D3EFFFF:(00000012/0000002C) L.C._.J.F.F: EA46FFFF/00000000: 902 = case1355D8AFFFF:(00000012/0000002D) _._._.J.X.F: AA0AFFFF/00000000: //vcJP0102033900INSERTAA0AFFFF:(00000012/0000002E) ll_xx = 185708FFFF:(00000012/0000002F) _._._.J.X.F: B926FFFF/00000000: //vcJP0102033900INSERTB926FFFF:(00000012/00000030) ll_xx = 19D5F6FFFF:(00000012/00000031) _._._.J.X.F: E4E4FFFF/00000000: //vcJP0102033900INSERTE4E4FFFF:(00000012/00000032) ll_xx = 2060B0FFFF:(00000012/00000033) _._._.J.X.F: E950FFFF/00000000: //vcJP0102033900INSERTE950FFFF:(00000012/00000034) ll_xx = 2170FCFFFF:(00000012/00000035) _._._.J.X.F: 3798FFFF/00000000: //vcJP0102033900INSERT3798FFFF:(00000012/00000036) L._._.J.F.F: 9C82FFFF/00000000: ll_xx = 223440FFFF:(00000012/00000037) _._._.J.X.F: 4DBAFFFF/00000000: //vcJP0102033900INSERT4DBAFFFF:(00000012/00000038) ll_xx = 242F9AFFFF:(00000012/00000039) _._._.J.X.F: 1BEEFFFF/00000000: //vcJP0102033900INSERT1BEEFFFF:(00000012/0000003A) ll_xx = 25B9FCFFFF:(00000012/0000003B) _._._.J.X.F: F054FFFF/00000000: //vcJP0102033900INSERT9C82FFFF:(00000036/0000003C) L._._.J.T.F: E4E4FFFF/00000000: ll_xx = 23AF72FFFF:(00000036/0000003D) _._._.J.X.F: 4DBAFFFF/00000000: //vcJP0102033900INSERTEA46FFFF:(0000002C/0000003E) L.C._.J.F.F: F054FFFF/00000000: 903 = case13584D8FFFF:(0000002C/0000003F) _._._.J.X.F: D6A0FFFF/00000000: //vcJP0102033900INSERTD6A0FFFF:(0000002C/00000040) ll_xx = 26C350FFFF:(0000002C/00000041) _._._.J.X.F: 1E76FFFF/00000000: //vcJP0102033900INSERT1E76FFFF:(0000002C/00000042) ll_xx = 27C428FFFF:(0000002C/00000043) _._._.J.X.F: CD48FFFF/00000000: //vcJP0102033900INSERTCD48FFFF:(0000002C/00000044) L._._.J.F.F: 4688FFFF/00000000: ll_xx = 28851CFFFF:(0000002C/00000045) _._._.J.X.F: 603CFFFF/00000000: //vcJP0102033900INSERT603CFFFF:(0000002C/00000046) ll_xx = 291BC0FFFF:(0000002C/00000047) _._._.J.X.F: F4CAFFFF/00000000: //vcJP0102033900INSERTF4CAFFFF:(0000002C/00000048) ll_xx = 30850CFFFF:(0000002C/00000049) _._._.J.X.F: E126FFFF/00000000: //vcJP0102033900INSERTE126FFFF:(0000002C/0000004A) L._._.J.F.F: 5758FFFF/00000000: ll_xx = 31D03AFFFF:(0000002C/0000004B) _._._.J.X.F: E82EFFFF/00000000: //vcJP0102033900INSERTE82EFFFF:(0000002C/0000004C) ll_xx = 322900FFFF:(0000002C/0000004D) _._._.J.X.F: 9866FFFF/00000000: //vcJP0102033900INSERT9866FFFF:(0000002C/0000004E) ll_xx = 336DCEFFFF:(0000002C/0000004F) _._._.J.X.F: 9D0AFFFF/00000000: //vcJP0102033900INSERT9D0AFFFF:(0000002C/00000050) L._._.J.F.F: D532FFFF/00000000: ll_xx = 344D9EFFFF:(0000002C/00000051) _._._.J.X.F: AF92FFFF/00000000: //vcJP0102033900INSERTAF92FFFF:(0000002C/00000052) ll_xx = 3555A6FFFF:(0000002C/00000053) _._._.J.X.F: 3AA8FFFF/00000000: //vcJP0102033900INSERT3AA8FFFF:(0000002C/00000054) ll_xx = 36DAC6FFFF:(0000002C/00000055) _._._.J.X.F: 298EFFFF/00000000: //vcJP0102033900INSERT298EFFFF:(0000002C/00000056) ll_xx = 390E4AFFFF:(0000002C/00000057) _._._.J.X.F: ACCEFFFF/00000000: //vcJP0102033900INSERTACCEFFFF:(0000002C/00000058) ll_xx = 401120FFFF:(0000002C/00000059) _._._.J.X.F: 3B4CFFFF/00000000: //vcJP0102033900INSERT3B4CFFFF:(0000002C/0000005A) ll_xx = 434DF4FFFF:(0000002C/0000005B) _._._.J.X.F: 9EDAFFFF/00000000: //vcJP0102033900INSERT9EDAFFFF:(0000002C/0000005C) ll_xx = 44D7CCFFFF:(0000002C/0000005D) _._._.J.X.F: 15A0FFFF/00000000: //vcJP0102033900INSERT15A0FFFF:(0000002C/0000005E) ll_xx = 478CE8FFFF:(0000002C/0000005F) _._._.J.X.F: FA9EFFFF/00000000: //vcJP0102033900INSERTFA9EFFFF:(0000002C/00000060) ll_xx = 488768FFFF:(00000050/00000061) _._._.J.X.F: F054FFFF/00000000: //vcJP0102033900INSERTD532FFFF:(00000050/00000062) ll_yy = 379CD0FFFF:(00000050/00000063) _._._.J.X.F: AB88FFFF/00000000: //vcJP0102033900INSERTAB88FFFF:(00000050/00000064) ll_xx = 38A2A0FFFF:(00000050/00000065) _._._.J.X.F: 298EFFFF/00000000: //vcJP0102033900INSERT5758FFFF:(0000004A/00000066) ll_yy = 4180A2FFFF:(0000004A/00000067) _._._.J.X.F: 3F96FFFF/00000000: //vcJP0102033900INSERT3F96FFFF:(0000004A/00000068) ll_xx = 429E8EFFFF:(0000004A/00000069) _._._.J.X.F: 3B4CFFFF/00000000: //vcJP0102033900INSERT4688FFFF:(00000044/0000006A) ll_yy = 4507E2FFFF:(00000044/0000006B) _._._.J.X.F: B07CFFFF/00000000: //vcJP0102033900INSERTB07CFFFF:(00000044/0000006C) ll_xx = 460BB2FFFF:(00000044/0000006D) _._._.J.X.F: 15A0FFFF/00000000: //vcJP0102033900INSERTE756FFFF:(0000000A/0000006E) ll_xx = 517902FFFF:(0000000A/0000006F) _._._.J.X.F: 8DC8FFFF/00000000: //vcJP0102033900INSERT8DC8FFFF:(0000000A/00000070) ll_xx = 52FAE8FFFF:(0000000A/00000071) _._._.J.X.F: 8108FFFF/00000000: //vcJP0102033900INSERT8108FFFF:(0000000A/00000072) ll_xx ++ 569CFFFF:(0000000A/00000073) _._._.J.X.F: 94CEFFFF/00000000: //vcJP0102033900INSERTFCC6FFFF:(FFFFFFFF/FFFFFFFF) __endof__想把这个代码恢复我用了三天也还没眉目,因为实际上的写法可能还更复杂,嵌套更多层。用尽各种变态的写法和冗余的写法。还是比较难的。 //软件保护和加密从来都是矛盾相生的两个对立面。在此提醒更多pb用户,混淆器的实质就是这么回事。在此之后,我已经总结30多个想法意图再弄弄混淆器。很多方面,反编译器都需要依赖pbd中的没有在编译时抹掉的文字等信息。这些信息尚未有工具去除。另外我目前了解如果要做到终极加密,只有改造vm内部对文件的读取和解析的过程,修改vm参与到对vm的解析过程,比如可以把pbd的文件格式给改掉,这应该是一个终极的加密思路。而反编译时针对这样的加密方式是无法成功的。因为pbd已经跟随修改过的vm进行了匹配,用反编译器的一些规则已经无法分析了。 前几天问到好几个人,用11写程序,都是未有任何保护措施。。所以目前急忙赶完反编译器,下一步着手混淆器。参考java和.net的混淆器,大凡只做到变量名,函数名,对象属性和函数名,流程(statement),数字和文字加密等几种实现。具体还有没有突破现在还不知道。 更多 上一篇:PB11.5,PB12 web项目初探 下一篇:蔡学镛:编译、反编译、反反编译(转) 查看评论 * 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场 核心技术类目 全部主题 Java VPN Android iOS ERP IE10 Eclipse CRM JavaScript Ubuntu NFC WAP jQuery 数据库 BI HTML5 Spring Apache Hadoop .NET API HTML SDK IIS Fedora XML LBS Unity Splashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStack FTC coremail OPhone CouchBase 云计算 iOS6 Rackspace Web App SpringSide Maemo Compuware 大数据 aptech Perl Tornado Ruby Hibernate ThinkPHP Spark HBase Pure Solr Angular Cloud Foundry Redis Scala Django Bootstrap 个人资料 chengg0769 访问:515741次 积分:8551分 排名:第420名 原创:267篇 转载:211篇 译文:0篇 评论:348条 文章搜索 文章分类 PB反编译与加密(12) IOS和安卓(9) PB与数据库(9) 网络相关(1) 搜索相关(0) 闲话扯起耍(1) 其他语言(4) 文章存档 2013年12月(2)2013年11月(2)2013年09月(1)2013年02月(1)2012年11月(1)2012年09月(1)2012年08月(6)2012年07月(1)2012年05月(3)2012年03月(4)2011年12月(2)2011年11月(2)2011年10月(9)2011年09月(6)2011年08月(11)2011年07月(2)2011年06月(4)2011年04月(3)2010年12月(1)2010年10月(2)2010年09月(8)2010年08月(1)2010年07月(8)2010年06月(17)2010年05月(2)2010年04月(2)2010年03月(4)2010年01月(1)2009年09月(8)2009年08月(5)2009年07月(8)2009年06月(8)2009年05月(16)2009年03月(2)2009年02月(7)2008年12月(2)2008年11月(4)2008年10月(5)2008年08月(1)2008年07月(2)2008年01月(12)2007年12月(29)2007年11月(7)2007年10月(4)2007年09月(20)2007年08月(55)2007年07月(176) 阅读排行 搜索引擎学习资源(作者:dongdonglang)(14656) 做代理网站最有效的4种宣传方法(admin9.com)(12007) 再谈powerbuilder程序防止破解的办法(终结篇,以后不再写这个问题)(8064) 程序员的SEO总结(7459) 浅谈Powerbuilder的未来和Powerbuilder使用者的未来(5999) 在一台联想3000G430 T1600笔记本上安装黑苹果(东皇v10.6.3)成功(5948) PowerBuilder DeCompiler(PB DeCompiler) Demo download(PB反编译,支持5-12)(5887) PB11.5,PB12 web项目初探(5635) 文件夹加密原理 [转](5627) powerbuilder反编译器开发-第一步:pbd结构分析和PBKILLER分析(5473) 评论排行 浅谈Powerbuilder的未来和Powerbuilder使用者的未来(49) 程序员的SEO总结(32) 有关Powerbuilder的悲观论和乐观论(由郭贴引发的300多贴争辩想到的,也是很久就想秉明的一个观点)(22) Powerbuilder混淆,加密(powerbuilder防止反编译,pb混淆器,PB加壳,支持5-12) obfuscator for PowerBuilder(20) 戏说DataWindow的“移植”和“临摹”(19) 因为垄断形成,数据库市场将出现更多开源数据库(19) 免费软件模式之随想(18) 软件提交到国外的下载站的几点操作和想法(15) PB11.5,PB12 web项目初探(15) 关于对pbd反编译器的期待(11) 推荐文章 最新评论 安装两个BCB6控件SynEdit、mwEdit 0.92a的过程总结 jiduxiaozhang12345: 请问BCB6的第三方控件在哪下载啊?急求 Powershield一个疑似的BUG zhj149: 高手啊,看你的文章,感觉你玩pb已经到了极致的境界了,我自认为pb还不错,和你比起来,还是差了太多了 软件提交到国外的下载站的几点操作和想法 u012353953: 楼主在吗?有个问题请教,看到请加我QQ,谢谢。17493589 Lucene(Nutch)距离商业文本搜索引擎还有多远?(转载) koubi1986: 你好!请教一些问题:请问一下1。你是如何把nutch抓取到的二进制内容,在项目中读取的。2。nutc... 看一个商业共享软件是如何在下载站刷下载量来作弊的! u011506701: 您的判断是有误的,像我研究的刷量算法你就根本看不出来,出现的曲线图跟正常的一模一样的,附:刷量是最好... 垂直搜索引擎蜘蛛的基本解决方案(编程实例:所以推荐) gis101989: 你好,我正在写面向主题搜索引擎结合地理信息的论文,很多地方不懂,能加个扣扣吗?非常感谢你的帮助,我的... 浅谈Powerbuilder的未来和Powerbuilder使用者的未来 hosthelp: PB的最大缺点就是:(其实很简单)过时了。 服装过时就没人穿了, 电器过时就没人买了, 明星过时(过... 三岁小孩开发搜索引擎,搜索引擎白热化[原创] rongzi1987: 顶一个。先顶再看 再谈powerbuilder程序防止破解的办法(终结篇,以后不再写这个问题) hua2000: 顶顶更健康正在研究反向工程 有个傻B说破解了我的软件—哈哈!黄金屋手机MP3.MP4.3GP.电影.下载系统 ljx811216: 真有这事,看看 我的未来方向 pconline/asp.net周金桥老师的aspnet 友人Blog 旧博客在sina Bluesen的语音卡开发平台 JackXu的开源语音卡框架 经验丰富的好友:杨光的专栏 蓝星际语音平台,Koodoo语言 Lucene改造者-yuetiantian 西部.阿呆's blog manesking:全文检索c/c fullfocus研究lucene,nutch 黄国酬的博客 把“天轰穿”的asp.net 雨松.安卓