| 如何破解PB6.5编译的程序 |
|
| 作者:未知 文章来源:网络收集 点击数: 更新时间:2006-3-29 15:49:07
|
| (以下内容若有错误之处,还望来信指正)
以下所有均针对PowerBuilder6.5编译的伪码程序(即带有PBD的文件执行)。
PowerBuilder的伪码编译同VB伪码编译一样,同样是PB动态库(PBVM60.DLL),解释伪码执行。而PBVM60.DLL对取字符串、比较字符串、比较数值与我们常见到的c或汇编或delphi等等语言生成的执行文件不一样。
为此,我用PB6.5生成一段代码,然后跟踪,摸出一些经验:
我的Pb代码如下:(不要看有什么意思,纯粹为了研究)
string ls_t1,ls_t2,ls_444 long ll_l1,ll_l2,ll_l3
ll_l1 = 12325 ls_t1 = sle_1.text //看在PB中如何取字符串值。sle_1 是单行编辑框。 ls_t2 = '12325'
ll_l2 = integer(ls_t1) //看此处会触发什么 ll_l2 -= ll_l1 if ls_t1 <> 'fdfggfh' Then //研究PB的字符比较会调用什么。=========重点 ll_l2 = ll_l2 * 2 else ll_l3 = integer('24354') end if
if ll_l2 <> 3107 Then //研究PB如何进行数值比较,我们如何截取。==========重点 ls_444 = 'goto error' else MessageBox('error','dddd') //PB的messagebox调用那个API end if MessageBox('error','dddd') //PB的messagebox调用那个API ls_444 = 'goto oookkk' //研究PB如何赋字符串值
ll_l2 = integer(ls_t2) ll_l2 -= ll_l1
if ll_l2 <> 0 Then MessageBox('error','dddd') end if
上面的代码很乱,仅仅是为了追踪研究。
OK,现在用TRW2000加载执行,
首先用bpx hmemcpy (即所谓的万能断点):结果不中断,却在我气愤的用鼠标点击单行编辑框时触发(真莫名其妙)。
改用bpx getdlgitemtexta(getdlgitemtext) 也不中断。 用bpx Getwindowtexta 结果,每输入一个字符就中断,真烦人。 用bpx messageboxa OK,提示消息时,中断。 说明PB的MessageBox时调用MessageBoxA的API。 但这用处不大,PBD是解释伪码执行的,我几乎没有办法来找出那里是确定是否来弹出提示框。因为它一句一句的解释执行,弹出消息框的行与判断条件的行被PB隔的不知那里去了。
再用用lstrcmpa: 哈哈,比较字符串的地方被截取了,如下: KERNEL32!lstrcmpA 017F:BFF77304 PUSH EBX 017F:BFF77305 PUSH ESI 017F:BFF77306 PUSH EDI 017F:BFF77307 PUSH EBP 017F:BFF77308 PUSH DWORD 01F2 017F:BFF7730D PUSH DWORD BFFA21CB 017F:BFF77312 PUSH DWORD [FS:00] 017F:BFF77319 MOV [FS:00],ESP 017F:BFF77320 MOV EAX,ESP 017F:BFF77322 PUSH DWORD [EAX+24] 017F:BFF77325 PUSH DWORD [EAX+20] 017F:BFF77328 CALL BFF71247 017F:BFF7732D POP DWORD [FS:00] 017F:BFF77334 ADD ESP,BYTE +08 017F:BFF77337 POP EBP
你试试 D EAX 和 D EDI 你看到了 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>
|
|
[ 收藏此页到: 天天|和讯|博采|ViVi|狐摘|我摘|天极 ] 文章录入:kinda 责任编辑:kinda |
|
上一篇文章: 如何去掉软件在上任务栏加载的图标 下一篇文章: 记事本xpv2.3破解--我和P-code的第一次 |
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |