飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 7813|回复: 4

[转贴] 注册及注册验证函数dll保护方式pb程序破解探讨

[复制链接]

该用户从未签到

发表于 2007-11-2 15:11:47 | 显示全部楼层 |阅读模式
作者:看雪学院 xifeng

数据库编程领域早些年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)
    注册算法也应该能分析和跟踪出来。
    请论坛前辈帮助分析一下,指出偶的判断对不对?

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

该用户从未签到

发表于 2007-11-3 10:10:12 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
PYG19周年生日快乐!

该用户从未签到

发表于 2008-3-7 01:02:08 | 显示全部楼层
谢谢楼主的分享,不过楼主好像PB软件的破解比较难吧,还有什么好的方法吗!!
PYG19周年生日快乐!

该用户从未签到

发表于 2008-3-7 10:08:31 | 显示全部楼层
这一类的程序的破解,一般是自己写一个同名.DLL文件,将PBD中引用到的函数按照自己的意愿编写,比如在某软件中将以下函数,getcpuid()的输出为8888,HDSerialNumRead()的输出为"HHHH",这样以来每台电脑的机器码一样,只要使用同一个注册码即可。如果该.DLL包含序列码的验证过程,也一并按照你自己的意愿办事即可。可以方便的做成绿色版本。
PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2018-8-28 00:10
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2008-3-7 11:57:44 | 显示全部楼层
    没接触过这些东西/:L
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表