📄 readkey.c
字号:
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
void readser(void);
void readser1(void);
unsigned char Buff[18];
unsigned int keyrom[9];
unsigned int sum,sumi,sumj;
unsigned int *pt= (unsigned int *)0xf000fff6;
unsigned int i=0,j=0,m;
unsigned char p;
unsigned int nn,nn1,nn2;
unsigned char rbuff[100],cc,cc1,cc2;
int fp;
void main(int argc,char *argv[])
{
if(argc == 1) /* 不带参数 */
{
/* 读机器中的注册密钥 */
readser();
}
else if(strstr(argv[1],".EXE")) /* 带.exe文件名参数 */
{
/* 读文件中的注册密钥 */
strlwr(argv[1]);
if((fp=open(argv[1],O_RDWR | O_BINARY))==-1)
{
printf("File %s open error!",argv[1]);
exit(1);
}
lseek(fp,0xf040L,SEEK_SET); /* ROM 10个数据地址+200H */
read(fp,keyrom,0xaL); /* 读取数据 */
readser1();
}
else /* 带普通参数 */
{
/* 手工输入加密密钥 */
scanf("%s",rbuff);
if(strlen(rbuff)!=20)
return;
for(i=0;i<20;i++)
{
if((rbuff[i]>='a') && (rbuff[i]<='f'))
rbuff[i]-= 0x57;
if((rbuff[i]>='A') && (rbuff[i]<='F'))
rbuff[i]-= 0x37;
else if((rbuff[i]>='0') && (rbuff[i]<='9'))
rbuff[i]-= 0x30;
else
return;
}
printf("num:");
for(i=0;i<5;i++)
{
cc1=rbuff[i*4]&0xf;
cc2=rbuff[i*4+1]&0xf;
cc=(cc1<<4)|cc2;
nn1=(unsigned int)cc;
cc1=rbuff[i*4+2]&0xf;
cc2=rbuff[i*4+3]&0xf;
cc=(cc1<<4) | cc2;
nn2=(unsigned int)cc;
nn=(nn1<<8) | nn2;
keyrom[i]=nn;
printf("%04x",keyrom[i]);
}
printf("\n");
sum=0x2020;
for(sumj=0;sumj<4;sumj++) /* 形成16位密钥 */
{
for(sumi=0;sumi<5;sumi++)
sum-=keyrom[sumi];
sum^=0x0404<sprintf(Buff+4*sumj,"%04x",sum);
}
printf(Buff);
}
getch();
}
void readser(void)
{
sum=0x2020;
for(sumj=0;sumj<4;sumj++) /* 形成16位密钥 */
{
for(sumi=0;sumi<5;sumi++)
sum-=(*(pt+sumi)-0x2020);
sum^=0x0404<sprintf(Buff+4*sumj,"%04x",sum);
}
printf(Buff);
}
void readser1(void)
{
sum=0x2020;
for(sumj=0;sumj<4;sumj++) /* 形成16位密钥 */
{
for(sumi=0;sumi<5;sumi++)
sum-=keyrom[sumi];
sum^=0x0404<sprintf(Buff+4*sumj,"%04x",sum);
}
printf(Buff);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -