如何用 VC 编写这个程序:当程序 SAMPLE 运行时,检测加密狗的密码,如不对,则将程序关闭?

wealth 2003-10-09 10:45:55
现在要用加密狗来加密软件,但从来没有用过,现在已经买了一个加密狗,请问怎样开始?

如何用 VC 编写这个程序:当程序 SAMPLE 运行时,检测加密狗的密码,如不对,则将程序关闭?

有没有完整的例子?

...全文
106 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
wealth 2003-10-16
  • 打赏
  • 举报
回复
thanks!
wealth 2003-10-10
  • 打赏
  • 举报
回复
连字也懒得打了,上面的DEMO还没仔细看过!

:)

continue ...
wealth 2003-10-09
  • 打赏
  • 举报
回复
想独立成一个程序,然后做成一个服务在系统中自动运行,每隔一段时间检测密码,如不对,然后运用什么函数终止某一个程序!!!

如何做?
windows_editor 2003-10-09
  • 打赏
  • 举报
回复
不知你的用途是什么 一般加密狗直接就提供了上述功能 不需要你程序中来进行判断 只要编译时在机器上插上加密狗 并在加密狗自己附带的软件中指定你要加密的程序就可以了
wealth 2003-10-09
  • 打赏
  • 举报
回复
这是安装盘上的例子程序
DEMO.C
===========================================================

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

/* KeyPro API Functions */

#define KeyAPIReadMemory 0 /* Read memory */
#define KeyAPIWriteMemory 1 /* Write memory */
#define KeyAPISetPassword 2 /* Set password */

/* KeyPro API error codes */

#define APISuccess 0 /* Success */
#define APIAddressOverflow 1 /* Invalid address */
#define APIInvalidFunction 2 /* Invalid function */
#define APINoKeyPro 3 /* No KeyPro or password error */

/* KeyPro Data Structure */

typedef struct {
unsigned short ReturnFlag; /* Return code */
unsigned short FunctionCode; /* Function code */
unsigned short MemAddress; /* Memory address */
unsigned short Password0; /* Access password */
unsigned short Password1;
unsigned short MemContent; /* Memory content for read&write */
unsigned short Lock0; /* New password to set */
unsigned short Lock1;
unsigned short Reserved[7]; /* Reserved for KeyPro, can't change! */
} KEYPRODATA;

/* KeyPro Function Prototype */

extern void far KEYPRO( KEYPRODATA far * ); /* for C */
/* extern "C" void far KEYPRO( KEYPRODATA far * ); */ /* for C++ */

void main()
{
KEYPRODATA kd;
unsigned short c,i,j,k;

printf("\n KeyPro Demo");
printf("\n (C) Copyright 1996 YaHui Technologies, Inc.");
printf("\n");
printf("\n Note 1.Type the CAPITAL letter for the function.");
printf("\n Note 2.All data Hexadecimal.");
printf("\n");

for(;;) {
printf("\n>View Readmemory Writememory setPassword Go_read&write Quit\n");
c = getch();
switch (c) {

case 'V':
case 'v':
printf("View\n");
printf(" Password0: ");
scanf("%hx",&i);
printf(" Password1: ");
scanf("%hx",&j);
kd.Password0 = i;
kd.Password1 = j;
printf("\n Address | +0 +1 +2 +3 +4 +5 +6 +7 +8 +9");
printf("\n -------------------------------------------------------------------------------");
kd.FunctionCode = KeyAPIReadMemory;
for(i=0;i<6;i++) {
printf("\n (+%2X) |",i*10);
for(j=0;j<10;j++) {
kd.MemAddress = i*10+j;
KEYPRO(&kd);
if(kd.ReturnFlag) printf(" Err(%1X)",kd.ReturnFlag);
else printf(" %4X",kd.MemContent);
}
}
printf("\n -------------------------------------------------------------------------------\n"); break;

case 'R':
case 'r':
printf("Read memory\n");
printf(" Password0: ");
scanf("%hx",&i);
printf(" Password1: ");
scanf("%hx",&j);
kd.Password0 = i;
kd.Password1 = j;
printf(" Address(0-3B): ");
scanf("%hx",&i);
kd.MemAddress = i;
kd.FunctionCode = KeyAPIReadMemory;
KEYPRO(&kd);
if(kd.ReturnFlag) printf("\n Address %2X Read Error(%1X)\n",i,kd.ReturnFlag);
else printf("\n Address %2X Read %4X\n",i,kd.MemContent);
break;

case 'W':
case 'w':
printf("Write memory\n");
printf(" Password0: ");
scanf("%hx",&i);
printf(" Password1: ");
scanf("%hx",&j);
kd.Password0 = i;
kd.Password1 = j;
printf(" Address(0-3B): ");
scanf("%hx",&i);
printf(" Write Data: ");
scanf("%hx",&j);
kd.MemAddress = i;
kd.MemContent = j;
kd.FunctionCode = KeyAPIWriteMemory;
KEYPRO(&kd);
if(kd.ReturnFlag) printf("\n Address %2X Write Error(%1X)\n",i,kd.ReturnFlag);
else printf("\n Address %2X Write %4X\n",i,kd.MemContent);
break;

case 'P':
case 'p':
printf("Set Password\n");
printf(" Old Password0: ");
scanf("%hx",&i);
printf(" Old Password1: ");
scanf("%hx",&j);
kd.Password0 = i;
kd.Password1 = j;
printf(" New Password0: ");
scanf("%hx",&i);
printf(" New Password1: ");
scanf("%hx",&j);
kd.Lock0 = i;
kd.Lock1 = j;
kd.FunctionCode = KeyAPISetPassword;
KEYPRO(&kd);
if(kd.ReturnFlag) printf("\n Set Password Error(%1X)\n",kd.ReturnFlag);
else printf("\n Rember: Password Have been changed to %X-%X !\n",i,j);
break;

case 'G':
case 'g':
printf("Random Write&Read for testing each memory ...\n");
printf(" Password0: ");
scanf("%hx",&i);
printf(" Password1: ");
scanf("%hx",&j);
kd.Password0 = i;
kd.Password1 = j;
for(i=0;i<60;i++) {
j = rand();
kd.MemAddress = i;
kd.MemContent = j;
kd.FunctionCode = KeyAPIWriteMemory;
KEYPRO(&kd);
k = kd.ReturnFlag;
kd.FunctionCode = KeyAPIReadMemory;
KEYPRO(&kd);
printf(" Address %2X ",i);
if(k) {
printf("Write Error(%1X) ",k);
if(kd.ReturnFlag) printf("Read Error(%1X)\n",kd.ReturnFlag);
else printf("Read %4X\n",kd.MemContent);
}
else {
printf("Write %4X ",j);
if(kd.ReturnFlag) printf("Read Error(%1X)\n",kd.ReturnFlag);
else if(j!=kd.MemContent) printf("Read %4X Error(Read!=Write)\n",kd.MemContent);
else printf("Read=Write\n");
}
}
break;

case 'Q':
case 'q':
printf("Quit\n");
exit(0);
}
}
}

========================================

以下是INFO.txt

=========================================
This directory contains KeyPro tools using in Turbo C/C++, Quick C,
Borland C++, Microsoft C/C+, Visual C++ for DOS & Windows 3.x Program:
(1) KEYPRO.OBJ: OBJ module for linking
(2) DEMO.C: DOS demo program for linking with KEYPRO.OBJ

1. How to use the linking module.

(1) Define KEYDATA as follow:

KeyPro API Function Codes:
#define KeyAPIReadMemory 0 /* Read memory */
#define KeyAPIWriteMemory 1 /* Write memory */
#define KeyAPISetPassword 2 /* Set password */

KeyPro API error codes:
#define APISuccess 0 /* Success */
#define APIAddressOverflow 1 /* Invalid address */
#define APIInvalidFunction 2 /* Invalid function */
#define APINoKeyPro 3 /* No KeyPro or password error */

KEYDATA Structure:
typedef struct {
unsigned short ReturnFlag; /* Return code */
unsigned short FunctionCode; /* Function code */
unsigned short MemAddress; /* Memory address */
unsigned short Password0; /* Access password */
unsigned short Password1;
unsigned short MemContent; /* Memory content for read&write */
unsigned short Lock0; /* New password to set */
unsigned short Lock1;
unsigned short Reserved[7]; /* Reserved for KeyPro, can't change! */
} KEYPRODATA;

(2) Define KEYPRO prototype and use it as follow:

In C program:
extern void far KEYPRO( KEYPRODATA far * );
In C++ program:
extern "C" void far KEYPRO( KEYPRODATA far * );

(3) Calling example:

KEYPRODATA *kd;
unsigned short Mem0;
kd->Password0 = 0;
kd->Password1 = 0;
kd->FunctionCode = KeyAPIReadMemory;
kd->MemAddress = 0;
KEYPRO( kd );
if( kd->ReturnCode == APISuccess ) Mem0 = kd->MemContent;


2. How to compile demo program and link it with linking module.

tcc demo.c keypro.obj ( Compile by Turbo C/C++ )
bcc demo.c keypro.obj ( Compile by Borland C++ )
qcl demo.c keypro.obj ( Compile by Quick C )
cl demo.c keypro.obj ( Compile by Microsoft C/C++ )

================================================]

怎样加入结束其他任一程序进程的程序代码?(VC)
wealth 2003-10-09
  • 打赏
  • 举报
回复
做程序想得有点烦了,不想去想了,有没有现成的能够运行的例子?

:)
hillstream3 2003-10-09
  • 打赏
  • 举报
回复
看一个使用说明,上面有API说明,
cymlife 2003-10-09
  • 打赏
  • 举报
回复
这个很简单吧。
加密狗厂商必须提供范例代码,否则你可以不买他的啊。

tjlxs 2003-10-09
  • 打赏
  • 举报
回复
加密狗应有开发包,它的二次开发说的清清楚楚
mfc168 2003-10-09
  • 打赏
  • 举报
回复
你要做一个读写串口的程序,先初始化你的加密狗的密码,可以写
在你的程序的InitialInstance 中写代码,读该串口,取得密码,如果不正确,则关闭程序
涉及的函数:
WriteFile
OpenFile
....
串口读写程序在这里有:

http://www.vckbase.com/code/listcode.asp?mclsid=9&sclsid=907
fanlongly 2003-10-09
  • 打赏
  • 举报
回复
楼主,这样的程序我也需要呀
ayanamiwww 2003-10-09
  • 打赏
  • 举报
回复
老大,你的demo里不是已经有代码了吗?自己研究一下了,不难。
wealth 2003-10-09
  • 打赏
  • 举报
回复
:)
wealth 2003-10-09
  • 打赏
  • 举报
回复
有一年多没碰过VC啦,以前只是用VC做过数据库,有没有一个实在一点的例子贴一下?

ifengfeng 2003-10-09
  • 打赏
  • 举报
回复
找到该程序的句并,发送关闭消息。
luckyboy1979 2003-10-09
  • 打赏
  • 举报
回复
厂家应该有开发包的,这个我做过不是很难的。
ripyu 2003-10-09
  • 打赏
  • 举报
回复
这个加密狗太不正宗了
ifengfeng 2003-10-09
  • 打赏
  • 举报
回复
用定时器定时运行检测代码啊。
硬件加密狗空狗外壳加密程序。选项说明] 1、设定定时器:加密后的程序运行时将会以设定的时间间隔检查是否存在对应的加密锁,如果不存在,将会终止程序的运行。 2、反调试:用于防止被黑客非法调试程序 3、反CRC:当被加密的程序有自我检验,加密运行时会将报文件被修改的错误,这时可以选中这项,如果程序是PB,VFP,易语言编写的,请选中这项 4、是否压缩:对被加密的文件进行压缩,如果选中了虚拟机或要加密的文件较大时,不要选中这项,因为这会减慢程序启动时间。 5、使用增强算法:选中这项后,可以有效地防止被打狗棒等模拟或防真 6、使用虚拟机:选中这项将大大增强安全性,但同时程序的启动速度将减慢 7、加密比例:将要加密的文件较大时,可以适当地减少加密比例,以加快程序的启动程序 8、壳一,壳二:不同的壳载体,如果程序加密后不能运行,可以试一下换成不同的壳 9、加密方式:如果程序加密后不能运行,可以试一下选择加密方式二,如果是NET程序,可以用加密方式三 10、删除输入表:程序运行后删除输入表,提高安全性,如果程序加密后不能运行,可以将这个选项去掉 11、删除重定位表:程序运行后删除重定位表,一般用于DLL,提高安全性,如果程序加密后不能运行,可以将这个选项去掉 12.如果是C#,VBNET等程序,先用NET Reactor v4.2.8.4版本进行加密,再用我们的 外壳加密10.50加密,NET Reactor v4.2.8.4程序可到我们网站下载:www.tianweilock.com [加密方法] 1、选择要加密的文件 2、选择要生成的新文件,生成的新文件不要与原要加密的文件名相同 3、点击保护,在弹出的框中选择或添加一条自定义的密钥 4、点确定后,就完成加密了 5、加密完毕后,点写入加密锁,在弹出的框中选择相同的密钥,点写入加密锁,完成后,就可以将锁及加密后的程序给用户了。 6、以后要派发锁,插入要派发的锁,选中相应的加密密钥,将相应的密钥写入到锁中就可以了,不需要重新加密。 [注意事项] 1、写入加密锁后,加密锁的读密码会被更改为加密密钥。 2、如果既有源代码加密,同时又进行外壳加密,且在源代码中有定时检查加密锁的功能,请在进行加壳时,不要选中定时器的功能。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧