powerbuilder反编译器开发

阅读更多

这个计划其实已经一年多了,怪没有时间,所以一直没弄上日程。计划支持pb5-12,其实pbd内部的原则都差不多,通过ue分析,其编译的结构差不多。pb6.5,7,8,9,10,11,12都找到了软件。但是pb5找不到,迅雷上的资源也无法下载。希望有保留的同志给一份。

设计的主要目的是用于反向工程,主要是正当用途,其实反编译别人的代码也未必能看懂,或者没那么多时间去看懂。我想如果做得出来,必要的保护还是需要的,比如dbms字串不显示出来,以免作恶。对明显的加密函数部分,也不显示,以免为PJ人恶意使用。

1. pbl是两部分,一部分是我们的源码,一部分是编译的代码,其实,pbd也就是把这部分编译好的代码直接取出去形成的。

pbl的格式见:http://blog.csdn.net/chengg0769/archive/2009/02/26/3937884.aspx

pbl就没什么研究的,因为里面几乎用ue直接看代码。其实pb8以及以前版本,HDR(0x1AH在pbl中是“01”,在pbd中是“02”)和FRE,NOD部分公用,而ENT和DAT部分分为【已编译码,其实就是pbd】和源码部分。如:

ENT部分:

00000420h: 45 4E 54 2A 30 36 30 30 00 10 00 00 94 03 00 00 ; ENT*0600....?..
00000430h: 99 A2 65 4A 00 00 0A 00 73 74 72 5F 61 2E 73 74 ; 櫌eJ....str_a.st
00000440h: 72 00 45 4E 54 2A 30 36 30 30 00 14 00 00 38 00 ; r.ENT*0600....8.
00000450h: 00 00 99 A2 65 4A 00 00 0A 00 73 74 72 5F 61 2E ; ..櫌eJ....str_a.
00000460h: 73 72 73 00 00 00 00 00 00 00 00 00 00 00 00 00 ; srs.............

dat部分:

已经编译过的部分:

00001000h: 44 41 54 2A 00 12 00 00 F6 01 A6 00 03 00 60 40 ; DAT*....??..`@
00001010h: 00 00 08 00 00 00 99 A2 65 4A 99 A2 65 4A 08 00 ; ......櫌eJ櫌eJ..
00001020h: 00 00 0B 00 0E 00 00 00 00 00 60 40 60 40 01 04 ; ..........`@`@..
00001030h: 08 00 00 00 02 00 60 40 01 80 89 01 18 00 00 00 ; ......`@.€?....
00001040h: 00 00 6A 40 6A 40 01 01 26 00 00 00 00 00 6B 40 ; ..j@j@..&.....k@
00001050h: 6B 40 01 01 32 00 00 00 00 00 6C 40 6C 40 01 01 ; [email protected]@l@..
00001060h: 46 00 00 00 00 00 6D 40 6D 40 01 01 52 00 00 00 ; F.....m@[email protected]...
00001070h: 00 00 80 40 80 40 01 01 62 00 00 00 00 00 91 40 ; ..€@€@..b.....慇
00001080h: 91 40 01 01 6F 00 00 00 00 00 A4 40 A4 40 01 01 ; 慇..o.......
00001090h: 7C 00 00 00 00 00 B8 40 B8 40 01 01 8B 00 00 00 ; |.....窣窣..?..
000010a0h: 00 00 5E 40 5E 40 01 01 97 00 00 00 00 00 00 00 ; ..^@^@..?......
000010b0h: 20 20 20 20 20 20 20 00 73 74 72 5F 61 00 73 74 ; .str_a.st
000010c0h: 72 75 63 74 75 72 65 00 6D 61 69 6C 72 65 63 69 ; ructure.mailreci

这是源码部分:

00001400h: 44 41 54 2A 00 00 00 00 38 00 67 6C 6F 62 61 6C ; DAT*....8.global
00001410h: 20 74 79 70 65 20 73 74 72 5F 61 20 66 72 6F 6D ; type str_a from
00001420h: 20 73 74 72 75 63 74 75 72 65 0D 0A 09 73 74 72 ; structure...str
00001430h: 69 6E 67 09 09 61 0D 0A 65 6E 64 20 74 79 70 65 ; ing..a..end type

2. 关于pbd的版本?

很简单的方法,用ue拼接两个pbd,如pb8和pb9编译的pbd文件,用pbkiller测试比较。发现,版本判断是在ox1000H之后部分。比较两个版本的pbd文件,发觉DAT部分紧跟的是pb使用的类型系统(目前还不确定),其实,我把0x10010H部分改动一下,pbkiller就会报: VM data not found,而把它改为:

这个字节:pb9:C1,pb8:A6,PB6:72。我目前通过修改这个字节,pbkiller可以显示为三个版本,搞笑!看来它就是判断这个地方的类型代码。

00001000h: 44 41 54 2A 00 12 00 00 F6 01 A6 00 03 00 60 40 ; DAT*....??..`@
00001010h: 00 00 08 00 00 00 3B 37 64 4A 3B 37 64 4A 08 00 ; ......;7dJ;7dJ..
00001020h: 00 00 0B 00 0E 00 00 00 00 00 60 40 60 40 01 04 ; ..........`@`@..
00001030h: 08 00 00 00 04 00 60 40 01 80 89 01 18 00 00 00 ; ......`@.€?....
00001040h: 00 00 6A 40 6A 40 01 01 26 00 00 00 00 00 6B 40 ; ..j@j@..&.....k@
00001050h: 6B 40 01 01 32 00 00 00 00 00 6C 40 6C 40 01 01 ; [email protected]@l@..
00001060h: 46 00 00 00 00 00 6D 40 6D 40 01 01 52 00 00 00 ; F.....m@[email protected]...
00001070h: 00 00 80 40 80 40 01 01 62 00 00 00 00 00 91 40 ; ..€@€@..b.....慇
00001080h: 91 40 01 01 6F 00 00 00 00 00 A4 40 A4 40 01 01 ; 慇..o.......
00001090h: 7C 00 00 00 00 00 B8 40 B8 40 01 01 8B 00 00 00 ; |.....窣窣..?..
000010a0h: 00 00 5E 40 5E 40 01 01 97 00 00 00 00 00 00 00 ; ..^@^@..?......

3. 对于DAT中数据分节标识,以及变量的类型和初始值,还有一些操作符号,都通过ue对比分析了一下,目前正在由简单入深的分析。希望早日理出一个头绪来。以后有些东西会公布,有些东西不会公布。

慢慢补充。

你可能感兴趣的:(PowerBuilder,J#,软件测试,数据结构,F#)