pbd文件软件破解求助
有一个管理软件,是用PB写的,注册码已破解了,进入软件输入注册码提示正确的,显示已注册的,但退出软件再次进入,又变回未注册用户请各位高手们抽点时间帮我看看啊,本人在次深表感激之情,哈哈
以下这段代码是打开软件时就开始判断软件是否注册--------------------------------------------------------------------
i = r_driver()
if i = -1 then
ifzc = false
else
ifzc = true
end if
ll_rc = dllregisterserver()
if ifzc = false and ifsy = false then
messagebox("提示","你的软件试用期已到(数据已被锁定),请先注册!")
halt
end if
-----------------------------------------------------------------------------------------------------------------
以下是r_driver函数的代码-------------------------------------------------------------------------------------------
global function integer r_driver ();long retval
string sdrv
string str
string str2
long a
long ll_flag
long b
ulong ll_retval
string s_retval1
string s_retval2
sdrv = "c:\"
str = space(256)
str2 = space(256)
ll_retval = getvolumeinformationa(sdrv,str,256,retval,a,b,str2,256)
s_retval1 = string(retval,"################")
select driver , flag from driverusing sqlca;
/* SQL Parameters List
0-> :s_retval2
1-> :ll_flag
*/
ll_flag = ll_flag + 1
if isnull(s_retval2) then
s_retval2 = "9"
else
s_retval2 = trim(s_retval2)
end if
if ll_flag < 120 then
ifsy = true
else
ifsy = false
end if
if ((check_dog() = 1) or (check_dog_hid() = 1)) then
return 1
else
if ll_flag > 80 then
messagebox("提示","软件试用期即将结束,请注册!")
end if
update driver set flag =0using sqlca;
/* SQL Parameters List
0-> :ll_flag
*/
commit using sqlca;
return -1
end if
end function
-----------------------------------------------------------------------------------------------------------------------
以下是check_dog函数的代码------------------------------------------------------------------------------------------------
global function integer check_dog ();long handle = -1
uint id = 65535
ulong pswd
ulong nvalue
string keyp = " "
boolean rc = false
id = 29507
handle = openschip(id,keyp)
if handle < 0 then
closeschip(handle)
return -1
end if
pswd = 67 * 16 ^ 6 + 115 * 16 ^ 4 + 25 * 16 ^ 2 + 1
rc = readschipmem(handle,pswd,1,nvalue)
if rc then
if nvalue < 16 then
else
if nvalue < 256 then
else
if nvalue < 4096 then
end if
end if
end if
else
messagebox("R/W Error","请检查软件狗是否正确安装?",none!)
closeschip(handle)
return -1
end if
if trim(inttohexstr(nvalue,4)) <> "8976" then
messagebox("提示","软件狗密码错误!")
closeschip(handle)
return -1
end if
closeschip(handle)
return 1
end function
---------------------------------------------------------------------------------------------------------------------
以下是check_dog_hid函数的代码------------------------------------------------------------------------------------------
global function integer check_dog_hid ();string ls_mm
boolean ri = false
sk_init_data initdata
string szpath
long hkey
uint userid
boolean rl = false
integer index
integer length
long readpsd
string buffer = " "
integer i
string output
initdata.cbsize = 32
initdata.keymode = 1
initdata.sdkversion = 1
ri = sk_init(initdata)
userid = 60206
szpath = space(255)
hkey = sk_open(userid,szpath)
if hkey = -1 then
sk_close(hkey)
hkey = -1
return -1
end if
index = 0
length = 10
readpsd = 197343
rl = sk_readprotectmemory(hkey,readpsd,index,buffer,length)
if rl = false then
messagebox("R/W Error","请检查软件狗是否正确安装?",none!)
sk_close(hkey)
hkey = -1
return -1
end if
sk_close(hkey)
hkey = -1
for i = 1 to length
output = output + " " + string(asc(mid(buffer,i,1)))
next
if trim(output) <> "68 69 77 79 95 90 89 72 0 0" then
messagebox("提示","软件狗密码错误!")
sk_close(hkey)
hkey = -1
return -1
end if
return 1
end function
--------------------------------------------------------------------------------------------------
求各位帮我看看啊,我用UE想把
i = r_driver()
if i = -1 then
ifzc = false
else
ifzc = true
end if
这里的i=-1改成i<>-1,在UE里就是没办法找到这几个的机器码,只能找到这段代码之前的和之后的。所以没则了,搞不定啊,我又是新手
恳求各位帮忙,谢谢!! 能否附上bin。
查看是否有保存注册信息的地方。
推荐使用c32asm查找字符串和文件偏移吧。
[ 本帖最后由 whypro 于 2010-4-8 18:20 编辑 ] 注册码是保存在数据库里的,使用的是sql anywhere的数据库,我打开看了
我觉得问题应该是出在check_dog和check_dog_hid这两段代码里
c32asm使用了,但还是无法找到相关的字符串
请问一下,是打开EXE文件查找呢?还是打开PBD文件查找
这个软件的EXE,一运行就加载那些PBD的文件 SHUDEPB PB反编译专家 FOR PB6/PB7/PB8/PB9/PB10
这是一个长时间的计划,起于03年,05年初用PB完成大致的功能,后来用VC改写了一年(因为不是经常有时间)。
比先前出现过的反编译器有几个进步。
1.可以反编译出几乎所有的SQL.
2.并非孤立地看一个对象,从整个LIBRARYLIST进行搜索,对象的引用、继承上可以更精确地命中。事实上,我相信,很多人都不明白这一点有什么用,即便在决定购买的时候),有些继承过来的属性,如果不分析它的祖先,无法命中(简单的,譬如引用了祖先一个实例变量 i_transaction_object.sqlcode)。
3.对象可以导出为PB接受的*.sr*.
4.可以反向生成structure
5.datawindow的反向生成,使用了PB自带的方法(在打开PBD时DATAWINDOW项可以导出为一个APPLICATION,编译后就可以完成了)
6.可以直接生成pbl,但有BUG,函数和事件的次序错乱,需在PBL中IMPORT第3点中导出的*.SR*.
7.支持 PB6.5/PB7.0/PB8.0/PB9.0/PB9.01/PB9.03/PB10.0/PB10.1/PB10.2/PB10.5/PB11.0CTP (DEMO版中不支持PB10.2/PB10.5/PB11.0CTP)
更新列表
1.3 1.加入对PB9.1/PB9.3/PB10.2的支持
2.修改了语法分析的3个BUG。
1.4 Ver1.4
1.修改了对全局变量(Global Variables)和实例变量(Instance Variables)多层复杂属性的分析。
2.修改了2个对PROCEDURE的变量分析。
3.修改了当时程序由PB翻译到VC时对**数组分析的疏漏。
4.修改了3个语义分析的BUG。
5.加入了对7种不太常见的PB逻辑语法的分析。
6.修改了另存为PBL时不支持太多对象的BUG。
7.加入了另外几个小功能。
另存为PBL时还是需要IMPORT由EXPORT功能导出的*.SR*,因为这个功能/工作量比太小.
还有另一个BUG是可以预见的,但没改(因为可能性较小,工作量较大).
http://www.pb11.net/
http://www.pb11.net/data/shudepb.rar /:L 楼上的哥哥啊,这个我已经用上了,谢谢你啊!!
但是解决不了问题啊!! /:012 这里能帮助新手的前辈好少啊,是咋回事呢?是我的问题太简单的?还是没有好心的前辈出现呢? pbkiller2.5.18
http://down1.hur.cn/down1/pb/free/pbkiller2.5.18
http://www.pediy.com/tools/Decompilers/pb/PBKiller/PBKiller2.5.18.rar
可反编译出PB6,7,8,9,10编译后的程序中的所有对象
[ 本帖最后由 whypro 于 2010-4-9 19:15 编辑 ] 楼上的兄弟,这些软件,我已有,只能看源码 i = r_driver()
if i = -1 then
ifzc = false
else
ifzc = true
end if
通过UE已成功修改将i的返回值改为1,经过很多方面的对比,才得出return -1在UE中的位置
页:
[1]