谁能帮忙把这段程序会变成exe文件
#include <stdio.h>
#include <string.h>
#include <fstream.h>
/*
注册文件格式:
1. "GHKFORREG",0 10字节
2. 密文1的长度 LEN < 0x400 4字节
3. 密文1 encrypted[LEN] LEN个字节
对应的明文 decrypted[LEN] = machine[LEN]
对机器码每一字节取反
交换前后顺序即得到密文1
4. 0000... LEN+14 - 0x411
5. 第二次检查 从 0x412 到 0x811 0x400字节
密码表1 0x412 - 0x491 128字节
密码表2 0x4DA - 0x5D9 256字节
密码表3 在苍鹰象棋 EXE 程序中 0, 1,..., 7, 7,6,..0, 7,...0, 7,...,0
密文2 0x606 - 0x609 机器码长度LEN 4字节
0x60A - 0x60D (LEN/8 + (LEN%8 >0)) * 8 4字节
0x60E - 0x60E+LEN 机器码密文 LEN个字节
6. 0000... 0x812 - 0xC11
*/
void encrypt(unsigned *m1, unsigned *m2)
{
unsigned a = *m1;
unsigned b = *m2;
unsigned temp = b;
b = a;
a = temp;
for (int i=0; i<32; i++)
{
temp = b;
b = a;
a = temp;
temp = (a>>21) | (a<<11);
b ^= temp;
}
*m1 = a;
*m2 = b;
}
void main(void)
{
char null=0;
char machine[32]="";
char regfileName[40]="C:\\";
printf("输入机器码:");
gets(machine);
machine[31]=0;
strcat(regfileName, machine);
strcat(regfileName, ".DAT");
printf("\n注册文件是 %s\n", regfileName);
fstream regfile(regfileName, ios:ut | ios::binary);
//文件头
regfile.write("GHKFORREG", 10);
//密文 1 的长度
int length=strlen(machine);
regfile.write((char*)&length, sizeof(int));
//密文 1
for (int i=length-1; i>=0; i--)
{
machine[i] = ~machine[i];
regfile.write(&machine[i], 1);
machine[i] = ~machine[i];
}
//空白
for (i=length+14; i<0x412; i++)
regfile.write(&null, 1);
//密码表1, 最简单的一种
char temp=0;
for (i=0x412; i<0x492; i++)
{
regfile.write(&temp, 1);
temp++;
temp %= 0x10;
}
//空白
for (i=0x492; i<0x4DA; i++)
regfile.write(&null, 1);
//密码表2, 最简单放 0, 这样可以不管 密码表 3
for (i=0x4DA; i<0x5DA; i++)
regfile.write(&null, 1);
//空白
for (i=0x5DA; i<0x606; i++)
regfile.write(&null, 1);
//机器码的长度
regfile.write((char*)&length, 4);
//密文 2 长度必须为 8 的倍数
length = (length/8 + (length%8>0))*8;
regfile.write((char*)&length, 4);
//密文 2
for (i=0; i<length; i+=8)
encrypt( (unsigned*)&machine[i], (unsigned*)&machine[i+4]);
regfile.write(machine,length);
//空白
for (i=0x60E+length; i<0xC12; i++)
regfile.write(&null, 1);
regfile.~fstream();
getchar();
}
参考答案:源程序有点小错误,已改正。邮件已发,请查收。