飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5385|回复: 8

[求助] pbd文件软件破解求助

[复制链接]
  • TA的每日心情
    开心
    2021-10-11 20:54
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2010-4-8 14:04:47 | 显示全部楼层 |阅读模式
    有一个管理软件,是用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 driver  using 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 =0  using 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里就是没办法找到这几个的机器码,只能找到这段代码之前的和之后的。所以没则了,搞不定啊,我又是新手
    恳求各位帮忙,谢谢!!
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2019-3-12 17:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-4-8 18:14:32 | 显示全部楼层
    能否附上bin。
    查看是否有保存注册信息的地方。

    推荐使用c32asm查找字符串和文件偏移吧。

    [ 本帖最后由 whypro 于 2010-4-8 18:20 编辑 ]
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2021-10-11 20:54
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2010-4-8 19:34:49 | 显示全部楼层
    注册码是保存在数据库里的,使用的是sql anywhere的数据库,我打开看了
    我觉得问题应该是出在check_dog和check_dog_hid这两段代码里
    c32asm使用了,但还是无法找到相关的字符串
    请问一下,是打开EXE文件查找呢?还是打开PBD文件查找
    这个软件的EXE,一运行就加载那些PBD的文件
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2019-3-12 17:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-4-8 22:11:44 | 显示全部楼层
    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
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2021-10-11 20:54
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2010-4-9 11:07:08 | 显示全部楼层
    /:L 楼上的哥哥啊,这个我已经用上了,谢谢你啊!!
    但是解决不了问题啊!!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2021-10-11 20:54
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2010-4-9 11:07:56 | 显示全部楼层
    /:012 这里能帮助新手的前辈好少啊,是咋回事呢?是我的问题太简单的?还是没有好心的前辈出现呢?
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2019-3-12 17:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-4-9 18:41:52 | 显示全部楼层
    pbkiller2.5.18
    http://down1.hur.cn/down1/pb/free/pbkiller2.5.18
    http://www.pediy.com/tools/Decom ... /PBKiller2.5.18.rar
    可反编译出PB6,7,8,9,10编译后的程序中的所有对象

    [ 本帖最后由 whypro 于 2010-4-9 19:15 编辑 ]
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2021-10-11 20:54
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2010-4-10 11:23:40 | 显示全部楼层
    楼上的兄弟,这些软件,我已有,只能看源码
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2021-10-11 20:54
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2010-4-11 20:28:50 | 显示全部楼层
    i = r_driver()
    if i = -1 then
            ifzc = false
    else
            ifzc = true
    end if
    通过UE已成功修改将i的返回值改为1,经过很多方面的对比,才得出return -1在UE中的位置
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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