本帖最后由 liuyuxi 于 2015-1-11 01:55 编辑
C语言作品(三次改进版)加入U盘锁定计算机功能:
↖(^ω^)↗哈哈,一个月嘞,在惠州实践了\n\t22天,╮(╯▽╰)╭~~当普工简直是堕落,本来满满的自信和积极的上进心,在那不过几天,就差点全被侵蚀掉了..真恐怖!还好那些管理员蛮不错,就是有些员工超猥琐的!也有些员工很黄很暴力⊙﹏⊙b汗..更离谱的是居然调戏女学生..吖的,超想买块豆腐砸死他们!! (#‵′)靠~..
笨笨猪,谢谢你!谢谢你在我最失落时给我动力,给我信心!让我没有被他们所影响~~让我重拾自信~~让我的C再次突破!我们是最棒的↖(^ω^)↗!呵呵~本次灵感来自软件爆破原理,利用此原理可以改进重启程序后需要再次输入序列号的缺陷.....并增加了一个比较实用的功能,用U盘给自己的电脑加锁...
原理:每次开机都会检测所指定的磁盘里的文件名(所以要设定开机启动项),如果有则为合法用户,可正常使用计算机。没有则视为非法用户,开机后由你指定的时间(秒\t)关机~
所指定的文件名可以自定,程序会在该可移动磁盘中创建一个由你指定的文件名的文件...如果U盘存在该文件则以该文件为开机密钥~~~
注意,此程序只检测文件名,并不检测里面的内容..如果您输入的为te12.txt 那么只要您指定的磁盘根目录有文件是此文件名即可当成为开机密钥,(如果没有则程序自动创建该文件)这意味着磁盘里的每一个文件(任何格式都可以)都可当成开机密钥,增强隐蔽性,所以你可以在tr12.txt里面加上一些内容加以掩饰~~~
如果万一U盘被损坏,可以在其他U盘新建一个由你在程序设定的文件名命名的文件即可~~~
程序下载地址:加锁文件 点击即可下载
图片:
源代码:
- #include<stdio.h>/*加载包含基本输入输出函数头文件*/
- #include<stdlib.h>/*加载标准函数库头文件*/
- #include<string.h>
- #include<windows.h>
- int i=3,a=0,d=0;/*声明全局变量*/
- /*原型函数声明*/
- int xieru();
- int yanzhen();
- int zhu();
- int tishi();
- int yizhuce();
- int jiamiweizhuce();
- int jiamiyizhuce();
- int jiemiweizhuce();
- int jiemiyizhuce();
- int u();
- int autoo();
- int dell();
- int main()/*声明主函数,每个C程序必须具备的*/
- {
- system("COLOR 0a");
- system("title 欢迎使用由【笨笨♂猪】设计的程序~~");
- printf("\n\t 灵感\n\n\t ↖(^ω^)↗哈哈,一个月嘞,在惠州实践了\n\t22天,╮(╯▽╰)╭~~当普工简直是堕落,本\n\t来满满的自信和积极的上进心,在那不过几天,\n\t就差点全被侵蚀掉了..真恐怖!还好那些管理\n\t员蛮不错,就是有些员工超猥琐的!也有些员\n\t工很黄很暴力⊙﹏⊙b汗..更离谱的是居然调\n\t戏女学生..吖的,超想买块豆腐砸死他们!! \n\t(#‵′)靠~..\n\t 笨笨猪,谢谢你!谢谢你在我最失落时给我\n\t动力,给我信心!让我的C再次突破!我们是最\n\t棒的↖(^ω^)↗!呵呵~本次灵感来自软件爆破\n\t原理,利用此原理可以改进重启程序后需要再\n\t次输入序列号的缺陷。还有个缺陷是只能加解\n\t密9位数字,我觉得应该是产生溢出了吧,郁闷~~\n\t这次加上了比较实用的功能=》用U盘给电脑加锁..\n\n\n\n");
- system("pause");/*程序挂起*/
- system("cls");
- yanzhen();
- }
- /***************************************主调代码*******************************************/
- int zhu()/*自定义zhu函数*/
- {
- int a,i=3;/*声明整数变量a、i,并把赋值3给i*/
- printf("\n********************************************************************");
- printf("\n 此程序为C语言编写,编译器为:DEV-C++ 4.9.9.2 多国语言版");
- printf("\n\n 愿结交对C语言深感兴趣并研究过C语言的朋友\n 若有任何建议或愿共同探讨请联系QQ:0000000000\n 加密方面,采用垃圾算法,纯属做练习,各位不必当真。\n");
-
- printf("\n********************************************************************\n");
-
- printf("\n作品名称:加锁程序(原:数字密码加密程序三次改进版)\n\n作品目的:增加对条件指令、循环指令的了解并熟悉自定义函数、调用函数的方法、文件 处理指令,以及DOS命令\n\n作品功能:a:实现注册验证及对数字进行加密、解密功能\n b:了解加入开机启动项的方法和利用文件处理知识..实现移动设备对电脑进行加 锁功能\n\n作品改进:利用软件爆破原理改进了程序输入正确序列号重启后仍需再次输入序列号的缺陷\n作品缺陷:程序判断用户的选择只能用数字否则出错(尝试用过char类型),只能加密\n 9位数字否则不能正确解密 以上原因尚不明确!\n");
- printf("\n********************************************************************\n");
- system("pause");
- system("cls");
-
- printf("\n\n O(∩_∩)O哈哈~,请选择所需要的功能:\n\n 【1】:加密(目前只支持9位任意数字)\n\n 【2】:解密(只对本程序加密的密文有效)\n\n 【3】:用可移动磁盘(如U盘)加锁计算机(需注册用户)\n\n 【4】:注册\n\n 【0】:退出\n\n ");
- scanf("%d",&a);/*读取用户所输入的选项并赋值给变量a*/
- while(a>4)/*设定循环条件,达到输入错误选项即可循环执行确认选择功能指令*/
- {
- printf("\n\n O(∩_∩)O哈哈~,不能乱选哦,请再次认真选择所需要的功能:\n\n 【1】:加密(目前只支持9位任意数字)\n\n 【2】:解密(只对本程序加密的密文有效)\n\n 【3】:用可移动磁盘(如U盘)加锁计算机(需注册用户)\n\n 【4】:注册\n\n 【0】:退出\n\n ");
- scanf("%d",&a);/*读取用户所输入的选项并赋值给变量a*/
- }
- switch(a)/*判断语句,在c++称为开关语句*/
- {
- case 1:/*若a等于1则运行下面代码*/
- printf("\n (*^__^*) 欢迎使用本加密程序【注:试用版只能使用三次】\n");/*显示说明*/
- printf("请输入序列号:\n\n ");/*显示说明*/
- scanf("%d",&a);/*读取用户所输入的序列号并赋值给变量a*/
- if(a!=0000000000)/*若用户所输入的序列号不等于0000000000则执行下面的指令,否则跳过下面的指令*/
-
- jiamiweizhuce();/*调用jiamiweizhuce函数*/
- else/*若等于0000000000则运行下面指令*/
- {
- xieru();
- jiamiyizhuce();/*调用jiamiyizhuce函数*/
- }
- break;/*跳出判断语句避免“失败经过”*/
- case 2:/*如果a等于2则运行下面代码*/
- printf("\n (*^__^*) 欢迎使用本解密程序【注:试用版只能使用三次】\n");/*显示说明*/
- printf("请输入序列号:\n\n ");/*显示说明*/
- scanf("%d",&a);/*读取用户所输入的序列号并赋值给变量a*/
- if(a!=0000000000)/*若用户所输入的序列号不等于0000000000则执行下面的指令,否则跳过下面的指令*/
- jiemiweizhuce();/*调用jiemiweizhuce代码*/
- else/*若等于0000000000则运行下面指令*/
- {
- xieru();
- jiemiyizhuce();/*调用jiemiyizhuce函数*/
- }
- break;/*跳出判断语句避免“失败经过”*/
- case 3:
- printf("\n对不起!您是未注册用户...\n");
- system("pause");
- zhu();
- case 4:
- for(;;)
- {
- printf("请输入序列号:");
- scanf("%d",&i);
- if(i!=0000000000)
- {
- printf("\n晕~~请再到我空间看清源代码~~\n");
- continue;
- }
- else{
- xieru();
- printf("\a\aO(∩_∩)O~~注册成功咯!哈~~~\n");
- system("pause");
- yanzhen();
- }
- }
-
- case 0:/*若a等于0则运行下面代码*/
- exit(0);/*退出程序*/
- break;/*跳出判断语句避免“失败经过”*/
- }
- }
-
- int tishi()/*自定义tishi函数*/
- {
- int q;/*声明变量*/
- printf("\n\a\a\a ╮(╯▽╰)╭对不起,您使用的次数已达到试用版的上限!\n\n"); /*警告用户*/
- printf("\n\n\nO(∩_∩)O哈哈~,告诉你一个秘密哈,若想再次使用可以再次运行本程序,照样\n还可以使用三次。不过,如果你这样做的话,也只能说明你笨╮(╯▽╰)╭\n\n\n");/*幽默一下哈↖(^ω^)↗*/
- printf("\n返回主菜单请输入数字【3】,退出请输入任意数字\n\n ");/*提示*/
- scanf("%d",&q);/*读取用户所输入数值并存入变量q*/
- if(q==3)/*若变量d等于3则运行以下代码,否则省略本段代码*/
- zhu();
- else/*若不等于则运行下面代码即退出,达到按任意数字键退出的目的*/
- exit(0);/*退出程序*/
- }
- int yizhuce()/*自定义yizhuce函数*//*此函数已去除验证序列号的功能*/
- {
- int a;/*声明整数变量a、i,并把赋值3给i*/
- printf("\n********************************************************************");
- printf("\n 此程序为C语言编写,编译器为:DEV-C++ 4.9.9.2 多国语言版");
- printf("\n\n 愿结交对C语言深感兴趣并研究过C语言的朋友\n 若有任何建议或愿共同探讨请联系QQ:0000000000\n 加密方面,采用垃圾算法,纯属做练习,各位不必当真。\n");
-
- printf("\n********************************************************************\n");
-
- printf("\n作品名称:加锁程序(原:数字密码加密程序三次改进版)\n\n作品目的:增加对条件指令、循环指令的了解并熟悉自定义函数、调用函数的方法、文件 处理指令,以及DOS命令\n\n作品功能:a:实现注册验证及对数字进行加密、解密功能\n b:了解加入开机启动项的方法和利用文件处理知识..实现移动设备对电脑进行加 锁功能\n\n作品改进:利用软件爆破原理改进了程序输入正确序列号重启后仍需再次输入序列号的缺陷\n作品缺陷:程序判断用户的选择只能用数字否则出错(尝试用过char类型),只能加密\n 9位数字否则不能正确解密(此BUG与算法无关),无论注册码是否正确重启\n 程序后需再次输入序列号.以上原因尚不明确!\n");
- printf("\n********************************************************************\n");
- system("pause");
- system("cls");
-
- printf("\n\n O(∩_∩)O哈哈~,请选择所需要的功能:\n\n 【1】:加密(目前只支持9位任意数字)\n\n 【2】:解密(只对本程序加密的密文有效)\n\n 【3】用可移动磁盘(如U盘)加锁计算机\n\n 【0】:退出\n\n ");
- scanf("%d",&a);/*读取用户所输入的选项并赋值给变量a*/
- while(a>3)/*设定循环条件,达到输入错误选项即可循环执行确认选择功能指令*/
- {
- printf("\n\n O(∩_∩)O哈哈~,不能乱选哦,请再次认真选择所需要的功能:\n\n 【 【1】:加密(目前只支持9位任意数字)\n\n 【2】:解密(只对本程序加密的密文有效)\n\n 【3】用可移动磁盘(如U盘)加锁计算机\n\n 【0】:退出\n\n ");
- scanf("%d",&a);/*读取用户所输入的选项并赋值给变量a*/
- }
- switch(a)/*判断语句,在c++称为开关语句*/
- {
- case 1:/*若a等于1则运行下面代码*/
- jiamiyizhuce();/*调用jiamiyizhuce函数*/
- break;/*跳出条件语句避免“失败经过”*/
- case 2:/*若a等于2则运行下面代码*/
- jiemiyizhuce();/*调用jiemiyizhuce函数*/
- break;/*跳出条件语句避免“失败经过”*/
- case 3:
- {
- u();
- zhu();
- }
- case 0:/*若a等于0则运行下面代码*/
- exit(0);/*退出程序*/
- break;/*跳出条件语句避免“失败经过”*/
- }
- }
- /*************************主调用代码**************************/
- /*******************************功能实现代码**********************************/
- /******************************加密功能代码************************************************/
- int jiamiweizhuce()/*声明自定义jiamiweizhuce函数(未注册限制使用)同时声明变量*/
- {
- /*以下为未注册限制代码↓↓*/
- while(i!=0)/*循环语句,设定条件为3次,由声明变量时确定,达到三次后跳出循环停止运行算法*/
- {
- printf("\n请输入一组需加密的数字【未注册】\n\n ");/*显示说明*/
- scanf("%d",&a);/*读取用户所输入的数值并赋值给变量a*/
- a=a+100000;/*进行加密算法↓↓*/
- a=a+100009;
- a=a+100052;
- a=a+100878;
- a=a+108546;
- a=a+113545;
- a=a+314123;/*进行加密算法↑↑*/
- i--;/*运行算法一次则i减1,达到三次后满足循环条件即运行3次算法,则i=3-3=0*/
- printf("\n\n~\a\(≧▽≦)/~恭喜,已完成加密!密文为:【%d】(还有【%d】次使用权)\n\n",a,i);/*算法完成输出密文并提醒使用次数*/
- printf("\n返回主菜单请输入数字【3】,继续加密请输入任意数字\n\n ");/*提示*/
- scanf("%d",&d);/*读取用户所输入的数值并存入变量d*/
- if(d==3)/*若变量d等于3则强制跳出循环*/
- break;/*强制跳出循环*/
- }
- if(d==3)/*若变量d等于3则运行以下代码,否则省略本段代码*/
- zhu();
- tishi();
- }
- int jiamiyizhuce()/*声明自定义jiamiyizhuce函数(已注册无限制使用)*/
- {
- /*以下为已注册无限制代码↓↓*/
- for(;;)/*循环语句,不设定条件,可无限次运行算法指令*/
- {
- printf("\n请输入一组需加密的数字【已注册,可无限使用】\n\n ");/*显示说明*/
- scanf("%d",&a);/*读取用户所输入的数值并赋值给变量a*/
- a=a+100000;/*进行加密算法↓↓*/
- a=a+100009;
- a=a+100052;
- a=a+100878;
- a=a+108546;
- a=a+113545;
- a=a+314123;/*进行加密算法↑↑*/
- printf("\n\n\a~\(≧▽≦)/~恭喜,已完成加密!密文为:【%d】\n\n",a);/*算法完成,输出密文*/
- printf("\n返回主菜单请输入数字【3】,继续加密请输入任意数字\n\n ");/*提示*/
- scanf("%d",&d);/*读取用户所输入的数值并存入变量d*/
- if(d==3)/*若变量d等于3则强制跳出循环*/
- break; /*强制跳出循环*/
- }
- if(d==3)/*若变量d等于3则运行以下代码,否则省略本段代码*/
- yizhuce();
- }
- /******************************加密功能代码************************************************/
- /******************************解密功能代码************************************************/
- int jiemiweizhuce()/*声明解密未注册(限制使用)函数*/
- {
- /*以下为未注册限制代码↓↓*/
- while(i!=0)/*循环语句,设定条件为3次,达到三次后跳出循环语句即i等于3*/
- {
- printf("\n请输入一组需解密的数字【未注册】\n\n ");/*显示说明*/
- scanf("%d",&a);/*读取用户所输入的数值并赋值给变量a*/
- a=a-100000;/*逆行执行加密算法↓↓*/
- a=a-100009;
- a=a-100052;
- a=a-100878;
- a=a-108546;
- a=a-113545;
- a=a-314123;/*逆行执行加密算法↑↑*/
- i--;/*运行算法一次则i减一,达到三次后满足循环条件*/
- printf("\n\a ~\(≧▽≦)/~恭喜,已完成解密!密码为:【%d】(还有【%d】次使用权)\n\n",a,i);
- printf("\n返回主菜单请输入数字【3】,继续解密请输入任意数字\n\n ");/*提示*/
- scanf("%d",&d);/*读取用户所输入的数值并存入变量d*/
- if(d==3)/*若变量d等于3则强制跳出循环*/
- break;/*强制跳出循环*/
- }
- if(d==3)/*若变量d等于3则运行以下代码,否则省略本段代码*/
- zhu();
- tishi();
- }
- int jiemiyizhuce()/*声明解密已注册(解除限制)函数*/
- {
- /*以下为已注册无限制代码↓↓*/
- for(;;)/*循环语句,不设定条件*/
- {
- printf("\n请输入一组需解密的数字【已注册,可无限使用】\n\n ");/*显示说明*/
- scanf("%d",&a);/*读取用户所输入的数值并赋值给变量a*/
- a=a-100000;/*逆行执行加密算法↓↓*/
- a=a-100009;
- a=a-100052;
- a=a-100878;
- a=a-108546;
- a=a-113545;
- a=a-314123;/*逆行执行加密算法↑↑*/
- printf("\n\n\a ~\(≧▽≦)/~恭喜,已完成解密!密码为:【%d】\n\n",a);/*算法完成输出真实密码*/
- printf("\n返回主菜单请输入数字【3】,继续解密请输入任意数字\n\n ");/*提示*/
- scanf("%d",&d);/*读取用户所输入的数值并存入变量d*/
- if(d==3)/*若变量d等于3则强制跳出循环*/
- break; /*强制跳出循环*/
- }
- if(d==3)/*若变量d等于3则运行以下代码,否则省略本段代码*/
- yizhuce();
- }
- /******************************解密功能代码************************************************/
- /******************************U盘加锁代码************************************************/
- int u()
- {
- system("cls");
- FILE *p;
- char pan[2]={0},password[50]={0},pd[]={"if not exist "},fu[]={":\\"},exi[]={" shutdown.exe -s -t "},ok[50],k[100],j[60];
- printf("\n\n\t【1】为计算机加锁\n\n\t【2】清除加锁功能\n\n\t【3】返回\n\n\t");
- scanf("%d",&i);
- if(i==1)
- {
- system("cls");
- printf("\n\n\t原理:每次开机都会检测所指定的磁盘里的文件名(所以要设定开机启动项),如果\n\t有则为合法用户,可正常使用计算机。没有则视为\"小偷\"开机后由您指定的时间(秒\t)关机~");
- printf("所指定的文件名可以自定,程序会在该可移动磁盘中创建一个由你指定的文 件名的文件\n");
- printf("\n\t注意,此程序检测文件名,并不检测里面的内容..如果您输入的为te12.txt 那么 只要您指定的磁盘根目录有文件是此文件名即可当成为开机密钥\n\t(这意味着磁盘里的每一个文件都可当成开机密钥,增强隐蔽性),所以你可以在tr12 .txt里面加上一些内容加以掩饰\n\n");
- printf("\n\t请确定是否已插入可移动磁盘~~~~\n");
- system("pause");
- text:
- printf("\n\n请输入可移动磁盘盘符(输入字母即可,如输入g):");
- scanf("%s",pan);
- printf("\n\n请设定程序需检测认证可移动磁盘根目录上的文件名(也可以自定文件名):");
- scanf("%s",password);
- /****************检测是否有该文件存在*******************/
- strcpy(ok,pan);
- strcat(ok,fu);
- strcat(ok,password);
- if((p=fopen(ok,"r"))==NULL)
- {
- printf("\n\n╮(╯_╰)╭检测可移动磁盘无您指定的文件名,程序将自动创建此文件\n");
- p=fopen(ok,"w");
- if((p=fopen(ok,"r"))==NULL)
- {
- printf("\n\n╮(╯_╰)╭无法写入..请确定可移动磁盘是否被设为写保护或接口接触不良..\n\n");
- printf("\n\n重新配置请输入1,返回输入0,任意输入则退出");
- scanf("%d",&i);
- if(i==1)
- goto text;
- else if(i==0)
- return 0;
- else
- exit(0);
- }
- else
- printf("\n\n\\(^o^)/~文件创建成功...");
- }
- /****************检测是否有该文件存在*******************/
- printf("\n\n请设定无此密码文件时登陆系统后关机时间(秒)(建议输入0,即开机后立即关机):");
- scanf("%s",j);
- strcpy(k,pd);
- strcat(k,pan);
- strcat(k,fu);
- strcat(k,password);
- strcat(k,exi);
- strcat(k,j);
-
- if((p=fopen("C:\\WINDOWS\\love.bat","w"))==NULL)
- {
- printf("\n\n\a对不起,可能因为系统盘被写保护,无法写入配置文件....\n");
- system("pause");
- }
- else
- {
- fprintf(p,k);
- fclose(p);
- printf("\n\n即将设为开机启动项..安全防护软件可能会提示请按同意..\n");
- system("pause");
- autoo();
- printf("\n\n已设置完成..重启后立即生效~\n");
- }
- system("pause");
- system("cls");
- return 0;
- }
- else if(i==2)
- dell();
- else if(i==3)
- yanzhen();
- else
- exit(0);
- }
-
-
- /******************************U盘加锁代码************************************************/
-
- /*******************************功能实现代码**********************************/
- /***************************注册信息保存代码************************/
- int xieru()
- {
- FILE *fptr;
- char name[20]={"\\(^o^)/~,成功咯~"};
- if((fptr=fopen("C:\\WINDOWS\\system32\\爱梦想.love","w"))==NULL)
- {
- printf("\n\t晕啊~注册信息保存失败..是不是装了什么磁盘保护软件呢?或者中病毒?\n");
- system("pause");
- }
- else
- {
- fprintf(fptr,name);
- fclose(fptr);
- }
- return 0;
- }
- /***************************注册信息保存代码************************/
- /***************************注册信息读取代码************************/
- int yanzhen()
- {
- FILE *fptr;
- int i;
- char a[]={"\\(^o^)/~,成功咯~"},d[20];
- if((fptr=fopen("C:\\WINDOWS\\system32\\爱梦想.love","r"))==NULL)
- zhu();
- else
- {
- for(i=0;!feof(fptr);i++)
- {
- d[i]=fgetc(fptr);
- }
- fclose(fptr);
- if(a[6]==d[6])
- yizhuce();
- else
- zhu();
- }
- }
- /***************************注册信息读取代码************************/
- /***************************设置开机启动项代码***********************/
- /*设置开机启动*/
- int autoo()
- {
- char regname[]="Software\\Microsoft\\Windows\\CurrentVersion\\Run";
- HKEY hkResult;
- int ret=RegOpenKey(HKEY_LOCAL_MACHINE,regname,&hkResult);
- ret=RegSetValueEx(hkResult,"love.bat"/* 注册表键名*/,0,REG_EXPAND_SZ,(unsigned char *)"%systemroot%\\love.bat",25);
- if(ret==0){
- printf("\n\n成功加入启动项\n");
- RegCloseKey(hkResult);
- }
- else {
- printf("\n\n\a对不起,可能因为安全防护软件阻拦,无法设为开机自启动....\n");
- system("del %systemroot%\\love.bat");
- printf("\n\n\t重新配置请输入1,返回输入0,任意输入则退出");
- scanf("%d",&i);
- if(i==1)
- u();
- else if(i==0)
- return 0;
- else
- exit(0);
- }
- }
- /*清除开机启动*/
- int dell()
- {
- char regname[]="Software\\Microsoft\\Windows\\CurrentVersion\\Run";
- HKEY hkResult;
- int ret=RegOpenKey(HKEY_LOCAL_MACHINE,regname,&hkResult);
- ret=RegSetValueEx(hkResult,"love.bat"/* 注册表键名*/,0,REG_EXPAND_SZ,(unsigned char *)"%systemroot%\\love.bat",25);
- if(ret==0){
-
- printf("\n\n\t成功清除启动项\n");
- RegCloseKey(hkResult);
- system("del %systemroot%\\love.bat");
- printf("\n\n\t成功删除配置文件");
- printf("\n\n\t成功清除开机加锁功能~~~");
- printf("\n\n\t重新配置请输入1,返回输入0,任意输入则退出");
- scanf("%d",&i);
- if(i==1)
- u();
- else if(i==0)
- zhu();
- else
- exit(0);
- }
- else {
- printf("\n\n\a对不起,可能因为安全防护软件阻拦,无法清除开机自启动....");
- printf("\n\n重新配置请输入1,返回输入0,任意输入则退出");
- scanf("%d",&i);
- if(i==1)
- u();
- else if(i==0)
- zhu();
- else
- exit(0);
- }
- }
- ======================================================================
复制代码
|