home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Elite Hackers Toolkit
/
TheEliteHackersToolkitVolume1_1998.rar
/
HACKERS.BIN
/
appcraks
/
CRYPTO31.ZIP
/
CRYPTO31.CPP
next >
Wrap
C/C++ Source or Header
|
1998-04-09
|
5KB
|
172 lines
unsigned char block1[54] =
{ 0x35, 0xBC, 0x4F, 0x85, 0x9C, 0xF8, 0x33, 0x26, 0x83, 0x69, 0x99, 0x61, 0x7C, 0x7D, 0x44, 0x87,
0x46, 0xD7, 0xC0, 0x7A, 0x23, 0x21, 0xDF, 0x23, 0x26, 0x66, 0x25, 0x67, 0x24, 0x2A, 0x4F, 0x4B,
0x3E, 0x76, 0x64, 0x67, 0x40, 0x28, 0x20, 0x78, 0x9F, 0x35, 0xA7, 0x6E, 0x2D, 0xD8, 0x4B, 0x38,
0xD1, 0x37, 0xE6, 0x40, 0x52, 0x23 };
unsigned char block2[116] =
{ 0x25, 0x59, 0xC6, 0x7A, 0x2F, 0x89, 0x48, 0x85, 0x26, 0x4F, 0x5E, 0x68, 0x25, 0xD6, 0x38, 0xA5,
0x5D, 0xE6, 0x78, 0xE7, 0x39, 0x23, 0x70, 0x24, 0x5E, 0xA4, 0x2A, 0x35, 0xC6, 0x34, 0xE6, 0x37,
0xDE, 0x85, 0x36, 0x2B, 0x79, 0xA2, 0x30, 0x68, 0x2A, 0x62, 0xF8, 0xB7, 0x2D, 0x23, 0x73, 0x69,
0xA7, 0x64, 0xC6, 0x5B, 0x66, 0xA6, 0x3B, 0x6C, 0xA7, 0x69, 0x2A, 0x65, 0xA4, 0x72, 0xBE, 0x54,
0x5E, 0xD0, 0xAF, 0x31, 0x83, 0x48, 0x23, 0xE9, 0x24, 0xDF, 0x5E, 0x87, 0xB7, 0x67, 0x35, 0x89,
0x68, 0xBF, 0x66, 0x2B, 0x67, 0xDE, 0x69, 0xB6, 0x25, 0x6C, 0xD0, 0xB6, 0xC6, 0x6A, 0x42, 0x99,
0x26, 0x40, 0x23, 0xFF, 0x5E, 0x58, 0xE7, 0xDE, 0x5A, 0x3D, 0xA5, 0x42, 0xDF, 0x70, 0x4E, 0x26,
0x28, 0x99, 0xA9, 0x4D };
char block3[44] = "\0";
unsigned char key1[] = "#serB&nz|mfM1/5(!sd$Mq.{s]+sFjtKpzSdtzoXqmb^Al@dv:s?x/"; // [41BE18]
unsigned char key2[] = "|b!pz*ls;rn|lf$vi^Axpe)rx5aic&9/2m5lsi4@0dmZw94cmqpfhw"; // [41BE50]
DWORD GetKey(CString &pwd)
{
int i = 0;
DWORD val = 0;
int pwdlen = pwd.GetLength();
DWORD code = 0;
// this keymaker is also used in the software registration
while (i < pwdlen)
{
val = (key1[pwdlen+i] * pwd[i] * key2[i]);
i++;
val *= i;
code += val;
}
return code;
}
DWORD GetNewKey(DWORD &key)
{
register DWORD i = 0;
i = (key * 4) + key;
i = (i * 4) + i;
i += key;
i = (i * 8) + key;
i <<= 8;
i -= key;
key = (i * 4) + key + 0x269EC3; // save for next use
i = (key & 0x7FFF0000);
i >>= 0x10;
return (i); // return a different value than key
}
void GetCodeString(DWORD key) // generates block3[]
{
int i = 0;
unsigned char ch = '\0';
char *ptr = block3;
for (i = 0; i < 4; i++)
{
ch = (key & 0x000000FF);
wsprintf(ptr, "%02X ", ch);
key >>= 8;
ptr += 3;
}
ptr--;
for (i = 0; i < 11; i++)
{
wsprintf(ptr, "%02X ", block3[i]);
ptr += 3;
}
}
void Encrypt(unsigned char buff[], unsigned long flen, DWORD key)
{
register DWORD i = 0x2C, j = 0x16, k = 0x58, cnt = 0;
unsigned char tmpbyte = 0;
DWORD newkey = 0;
for (cnt = 0; cnt < flen; cnt++)
{
if (i >= 116)
i = 0;
else
i++;
if (j >= 0x2C) // 44
j = 0;
else
j++;
if (k >= 0x36) // 54
k = 0;
else
k++;
tmpbyte = (block1[k] | block2[i] | block3[j]);
buff[cnt] = buff[cnt] - tmpbyte;
newkey = GetNewKey(key);
__asm
{ // easier to implement using Assembly language
mov eax, newkey
cdq
xor eax, edx
sub eax, edx
and eax, 000000FFh
xor eax, edx
sub eax, edx
xor ecx, ecx
mov cl, al
mov tmpbyte, cl
}
buff[cnt] += tmpbyte;
}
}
void CCryptockDlg::OnEncrypt()
{
CFile infp, outfp;
CFileException err;
unsigned long flen = 0;
unsigned char *buff = NULL, header[264] = "\0";
DWORD key = 0, newkey = 0, tmpkey = 0;
CString password = "";
GetDlgItemText(IDC_INFILE, infile);
GetDlgItemText(IDC_OUTFILE, outfile);
GetDlgItemText(IDC_PASSWORD, password);
key = GetKey(password);
key |= 0x06A30DE8; // ***this is the Password's ID!!!
newkey = key; // preserve original 32bit key value
tmpkey = GetNewKey(newkey);
tmpkey += (GetNewKey(newkey) << 0x10);
tmpkey += key; // ***this is the SIGNATURE!!!
GetCodeString(key); // Generate block3[]
__asm // smaller code using Assembly language
{
lea ebx, header; // points to beginning of header
mov eax, tmpkey; // load 32-bit tmpkey into EAX
mov DWORD PTR [ebx], eax; // stored bytes in reverse order
}
if (infp.Open(infile, CFile::modeRead | CFile::typeBinary, &err))
{
flen = infp.GetLength();
buff = new unsigned char [flen+1];
buff[0] = buff[flen] = '\0';
infp.Read(buff, flen);
if (outfp.Open(outfile, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary, &err))
{
outfp.Write("CryptoHdrBlk", 12); //write header first
lstrcat((char *)header, infile); //append file name
outfp.Write(header, 264); // write next header info
Encrypt(buff, flen, key); // starts encryption
outfp.Write(buff, flen); // write encrypted data
outfp.Close();
MessageBox("Finished Encrypting File!");
}
delete [] buff;
initpath = infp.GetFilePath();
infp.Close();
initpath = initpath.Left(initpath.ReverseFind('\\')+1);
}
}