首页
社区
课程
招聘
[原创]无狗破解VFP软件
发表于: 2005-8-10 19:33 10642

[原创]无狗破解VFP软件

2005-8-10 19:33
10642
一VFP软件,无狗可正常运行,注册需要狗(彩虹狗)。反编译后发现程序调用了2个外部文件进行读狗写狗等其他与狗相关操作(a.dll/b.dll)。经分析程序代码发现调用的文件主要使用了里面的几个函数:openschip()、closeschip()、dogread()。考虑到vfp软件修改源代码重新编译后会有严重错误,因此想根据程序的需要重新编写一下两个DLL文件,按照她的需要return三个函数的值。经过分析发现三个函数的返回值必须都为1程序才能检测到狗,程序才能开始注册,因此我用vc重新编写了a.dll和b.dll,程序非常简单,不管程序传递给这几个函数什么值,返回的都是我们要的1。
vfp程序中调用a.dll中dogread()的过程是这样的:
declare integer DogRead in a.dll integer, integer, string @
下面是a.dll的cpp代码,非常简单
#include "stdafx.h"
#include "a.h"
#include <string>
using namespace std;

        int DogRead(int a,int b,char *c)
        {
                return 1;
        }
将生成的两个dll文件拷入系统目录后,在vfp软件中测试狗,通过验证。如图所示。

但是她的注册过程并不是进行的明文比较,而是加密了。尤其是其最后一句关键的判断语句并不是简单的比较,而是几个自定义函数的运算值比较,小弟vfp实在太烂,对她的算法不知道如何下手,到现在也没有注册成功!哪位有兴趣的朋友想瞧瞧,请跟帖,我发上来。我到现在也没有把逆运算回来!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (18)
雪    币: 442
活跃值: (1216)
能力值: ( LV12,RANK:1130 )
在线值:
发帖
回帖
粉丝
2
原来狗也可以这样用
2005-8-10 21:47
0
雪    币: 463
活跃值: (116)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
SCHIP的狗,是比较简单的,刚复制了一批
2005-8-10 22:19
0
雪    币: 202
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
坛子里面哪位大侠的vfp不错啊?我们来探讨一下她的注册部分如何?
2005-8-10 23:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ASM
5
最初由 lcsuper 发布
坛子里面哪位大侠的vfp不错啊?我们来探讨一下她的注册部分如何?


源代码吗?把片断发上来看看……
2005-8-11 00:10
0
雪    币: 202
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
LOCAL DogAdd,DogBytes,Data
                        Data = DogRead()   *----------------读狗
            LOCAL Sn, FirstChar, LastChar
            sn = ALLTRIM(ThisForm.Text2.Value)
            FirstChar = SUBSTR(sn,2,1)
            LastChar = SUBSTR(sn,12,1)
            snChar = SUBSTR(sn,1,1) + SUBSTR(sn,3,9) + SUBSTR(sn,LEN(sn),1)
                        IF NOT BETWEEN(Asc(FirstChar) - 27,48,57)
                           = MESSAGEBOX('注册失败!请与软件供应商联系,获取正确注册资料!',16,'提示')
                           RETURN .F.
                        EndIf
                        IF NOT BETWEEN(Asc(LastChar) - 32,48,57)
                           = MESSAGEBOX('注册失败!请与软件供应商联系,获取正确注册资料!',16,'提示')
                           RETURN .F.
                        EndIf
                        LOCAL OldChar,OldDayChar
                        OldChar = uf_P_Pass(ALLTRIM(abc.Reg_pass))
                        OldDayChar = uf_P_Pass(ALLTRIM(abc.reg_dy))
                        OldChar = SUBSTR(OldChar,1,1) + SUBSTR(OldDayChar,1,1) + SUBSTR(OldChar,2,9) + SUBSTR(OldDayChar,2,1) + SUBSTR(OldChar,11,1)
                       
                                IF OldChar == ALLTRIM(ThisForm.Text2.Value) AND NOT EMPTY(OldChar)
                                   = MESSAGEBOX('注册失败!请与软件供应商联系,获取正确注册资料!',16,'提示')
                                   RETURN .F.
                                ENDIF

                        IF !EMPTY(data)
                            SET PROCEDURE TO MAIN
                            If Substr(Allt(data),1,6) = "ABSOFT" Or Len(Data) = 11
                                IF Substr(Allt(data),1,6) = "ABSOFT"
                                   data = Substr(Allt(data),8)
                                EndIf
                                   sn = Reg_main(ALLTRIM(THISFORM.text1.Value),ALLTRIM(THISFORM.Tag))
                    
                    
                                        IF (ALLTRIM( snChar ) = Reg_main(Data + ALLTRIM( THISFORM.text1.Value ) + LEFT( THISFORM.Tag,3 ) + FirstChar + LastChar + "SN" + IIF(ALLTRIM(FirstChar + LastChar) = "KP","",DTOS(DATE())),ALLTRIM(THISFORM.Tag))) ;
                        OR (ALLTRIM(snChar) = Reg_main(Data + ALLTRIM(THISFORM.text1.Value)+LEFT(THISFORM.Tag,3) + FirstChar + LastChar + "16" + DTOS(DATE()),ALLTRIM(THISFORM.Tag)))                                       
                                                REPLACE Reg_com  WITH a_pass(THISFORM.text1.Value)
                                                = MESSAGEBOX("注册成功,谢谢您的注册,您将享受我们授予的合法使用权!",64,"提示")
                                        else = MESSAGEBOX("注册失败",64,"提示")
                                ..........................................
                                .....................

其中:ThisForm.Text1.Value 为注册名
      ThisForm.Text2.Value 为序列号
      abc.DBF为该目录下文件,abc.Reg_pass、abc.reg_dy均为该表的字段
      MAIN、Reg_main、a_pass均为过程,在这些过程中加密
2005-8-11 01:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ASM
7
sn = (ALLTRIM(THISFORM.text1.Value),ALLTRIM(THISFORM.Tag))
语法不通

ALLTRIM==ALLT:去除头尾空格

LEFT("abcdefg",3 )=="abc"

x=iif(a=b,c,d):{if a==b then x=c else x=d}

DTOS(DATE()):今天值为"20050811"

THISFORM.Tag:当前表单tag属性,为作者自赋值字符串

SUBSTR("abcd",2,1)=='b'
2005-8-11 22:10
0
雪    币: 202
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
最初由 ASM 发布
sn = (ALLTRIM(THISFORM.text1.Value),ALLTRIM(THISFORM.Tag))
语法不通

ALLTRIM==ALLT:去除头尾空格

........


不好意思,复制的时候搞掉了一点,应该是sn = Reg_main(ALLTRIM(THISFORM.text1.Value),ALLTRIM(THISFORM.Tag))
大家可以看到关键性的一句是
IF (ALLTRIM( snChar ) = Reg_main(Data + ALLTRIM( THISFORM.text1.Value ) + LEFT( THISFORM.Tag,3 ) + FirstChar + LastChar + "SN" + IIF(ALLTRIM(FirstChar + LastChar) = "KP","",DTOS(DATE())),ALLTRIM(THISFORM.Tag))) ;
                        OR (ALLTRIM(snChar) = Reg_main(Data + ALLTRIM(THISFORM.text1.Value)+LEFT(THISFORM.Tag,3) + FirstChar + LastChar + "16" + DTOS(DATE()),ALLTRIM(THISFORM.Tag)))
这句太长了!考
2005-8-11 23:12
0
雪    币: 313
活跃值: (250)
能力值: ( LV9,RANK:650 )
在线值:
发帖
回帖
粉丝
9
我进来看一看
2005-8-11 23:33
0
雪    币: 202
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
刚才发现了一个新的VFP反编译软件DEFoxstar,效果不错,支持vfp9.0了! 反编译效果非常好,我原来用FOXTOOLS2.2反不出来用这个完全搞定,但是,不爽的是,这是个demo版啊!还要注册,不然导出数量有限制啊!他加了壳子的,用fi居然认不出来哦!我传上来大家尝尝鲜!

附件:dfox.part1.rar 附件:dfox.part2.rar
2005-8-12 01:04
0
雪    币: 202
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
THISFORM.Tag:当前表单tag属性,为作者自赋值字符串
这是什么意思?
能举个例子吗?
2005-8-12 01:08
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ASM
12
THISFORM.Tag:相当于作者自定义当前表单的一个全局变量。
有了源代码,在注册页面的表单代码处搜索tag应该可以看到该值。

太长那句,or前后取一即可。Reg_main不知道是什么……
建议下个vfp9.0,尝试编译反出来的代码,如果可行,狗你都知道怎么改,相信Reg_main也不在话下。
2005-8-12 04:19
0
雪    币: 202
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
我要疯了。!狗都破掉了,但是用foxtools反出来的代码不完整,注册不通啊!晕死
2005-8-15 20:46
0
雪    币: 202
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
FOXTOOLS反编译到一半就出错的原因是什么呢?
2005-8-17 14:32
0
雪    币: 198
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
简单(只要有那些调用的子程序),不便说
反正thisform.tag是自定义属性,可以当成是一个临时的存贮变量吧
2005-8-18 02:22
0
雪    币: 6
活跃值: (207)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
什么软件,我 想试一试
2005-8-18 09:21
0
雪    币: 202
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
请跟我qq联系595372
2005-8-20 16:18
0
雪    币: 202
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
我终于把他搞定了!
我犯了个小错误!靠!
2005-9-3 16:13
0
雪    币: 202
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
补充一下,这个需要vc运行库,mfc*.dll
2005-9-23 16:36
0
游客
登录 | 注册 方可回帖
返回
//