首页
社区
课程
招聘
[旧帖] 注册及注册验证函数dll保护方式pb程序破解探讨 0.00雪花
发表于: 2007-1-7 16:46 6561

[旧帖] 注册及注册验证函数dll保护方式pb程序破解探讨 0.00雪花

2007-1-7 16:46
6561
数据库编程领域早些年pb好象在国内红及一时,相比之下,目前就显得冷清多了。

但个人认为pb对于数据库编程来说确实好用,所以至今仍在学习并对pb程序加解密兴趣较浓。当然罗,水平倒只一般般^-^

关于pb程序的破解,国内先后出现的几款反编译软件分别是:ljtt的Depb,Kevens的Pbkiller,还有就是后来的ShuDepb。为了防止被反编译程序破解,有的pb程序设计者用另外的语言编写注册验证函数和注册函数编译成DLL文件供pb程序调用,程序编译时采用pbd编译方式。本主题偶想和网友们共同探讨的就是这类保护方式pb程序的破解。

下面结合一个实例,说说偶的破解思路和判断,对不对请前辈们指点。

某PB程序(登录时有一NAG窗口):
     通过反编译软件,发现应用程序对象global external functions中有以下说明:
    public function integer mayflowercheckregcode (string username,string product,string ver,string nowdate,string userlicense,string serialnumber,ref string xyz)  library "REGSN.DLL" alias for "MayFlowerCheckRegCode"
public function integer mayflowerregisterregcode (string username,string product,string ver,string nowdate,string userlicense,string serialnumber)  library "REGSN.DLL" alias for "MayFlowerRegisterRegCode"
    查软件安装目前中有REGSN.DLL文件,经查发现为visual c++编译,删除该文件运行出错。
    通过反编译软件,发现注册窗口注册按钮clicked事件中有以下代码:
il_ret = mayflowercheckregcode(ls_username,ls_product,ls_version,ls_enddate,ls_userlicense,ls_serialnumber,z)

if il_ret = 0 then
        i = mayflowerregisterregcode(ls_username,ls_product,ls_version,ls_enddate,ls_userlicense,ls_serialnumber)

        if i = 0 then
                messagebox("提示","恭喜!~r~n注册成功!")
                close(parent)
        else

                choose case i
                        case -1
                                messagebox("提示","写入注册信息时错误,请检查注册表有无错误!")
                        case -2
                                messagebox("提示","产品与注册码不一致,请与软件供应商联系!")
                        case -3
                                messagebox("提示","版本与注册号不一致,请与软件供应商联系!")
                        case -4
                                messagebox("提示","产品已超过使用期限,请与软件供应商联系!")
                        case -5
                                messagebox("提示","机器号与注册码不一致,请与软件供应商联系!")
                end choose

                parent.sle_username.setfocus()
                parent.sle_username.selecttext(1,len(parent.sle_username.text))
        end if

else
        messagebox("提示","注册失败!~r~n请核对用户名和注册码!~r~n若仍有问题,请与供应商联系!")
        parent.sle_username.setfocus()
        parent.sle_username.selecttext(1,len(parent.sle_username.text))
end if
    用反编译软件查看程序启动过程,居然没有找到调用mayflowercheckregcode函数的地方。但偶肯定程序在启动过程中一定会调用该函数来检查软件注册情况,通过OD跟踪,情况果然如此。
    以上情况证实程序是采用本贴所指的保护方式。
    pb程序,主程序没什么可跟的,系统领空中跟不出什么名堂,pbvm中更是白白浪费时间。这类软件,尽管有NAG窗口,有注册窗口,这些窗口要拦也拦得住,但偶说即使难住了也没用。因为拦住的时候你要么在系统领空中要么在pbvm里。所以这类软件你不要白费心思去拦这些东西,重要的是跟DLL和其中的注册检证与注册函数,对于本例就是跟到regsn.dll及其中的mayflowercheckregcode函数。
    怎么跟到dll和其中的函数,这个并不难。OD载入,F7进去、一路F8,或快或慢你总会进入DLL中的,好了,到了这,在CPU窗口中点鼠标右键,点复制->全选,然后再点鼠标右键,点复制->到文件,这样你就得到了整个DLL的汇编代码。接着,仍然在CPU窗口中点鼠标右键,点搜索->当前模块中的名称,这下,你应该能够看到dll模块的入口地址和其中各函数的入口地址了吧,怎么样,够容易的吧!
    再下面的工作,汇编代码的分析。
偶就和你们一样,犯难罗!只因我们是新手!
        
    本贴所指这类程序,偶才开始尝试破解。文中引用的例子程序也刚从网上download,能不能把它给破了,虽则没什么信心。但偶想尽一番努力,学习学习呗!

    偶的推断:
    该程序应该也可暴破(修改dll中的mayflowercheckcode函数,无论怎么将其返回值置为0)
    注册算法也应该能分析和跟踪出来。
    请论坛前辈帮助分析一下,指出偶的判断对不对?

    另外,如果有朋友对此主题感兴趣,希望把代码贴出来,只要不违返论坛规矩,偶随时可奉上来^-^
   


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
暴破完毕!!!
2007-1-8 21:50
0
雪    币: 198
活跃值: (1585)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
直接写个dll来替换岂不是更好?反正函数参数都已经清晰了。
2007-1-8 21:52
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼上老兄说的倒也是,不过这dll中除了注册验证函数以外,还有注册函数其他一些东西程序要调用,搞不清程序注册时要写哪些注册表内容,弄起来有些麻烦哟^-^
2007-1-8 22:09
0
游客
登录 | 注册 方可回帖
返回
//