#include <はWindows.h>
する#include <stdio.hに>
する#include <TIME.H>
する#include <STDLIB.H>
unsigned char型K [8] = {0x11,0x22,0x33,0x9c、0x55,0x66,0x77、 0x88};
// unsigned char型株[10] = {0x11,0x22,0x33,0x9c、0x55,0x66,0x77,0x88,0x99,0xAA}。
//チャーA1 [] = "MEI"。
INT X = 0。
BYTE k0xork6 = 0;
BYTE k1xork7 = 0;
BYTE k2xork5 = 0;
int型eeddxx = 0;
BYTE eeaaxx1 = 0;
int型eeaaxx2 = 0;
int型eessii1 = 0;
ボイドw9c1()
{
一方(TRUE)
{
BYTE K0 =ランド()%0xFFで、
__asm
{
MOVがら、K0。
XORら、K [6]。
MOVのk0xork6、ら。
movzx EAX、ら。
XORら、0x18の。
アル、0x3Dを追加します。
XORら、0xA7。
movzx EAX、ら。
MOVのeeaaxx1、ら。
}
IF(!eeaaxx1 = 0 && eeaaxx1> = 10)
{
K [0] = K0。
ブレーク;
}
}
}
ボイドw9c2()
{
一方(TRUE)
{
BYTE K1 =ランド()%0xFFで、
BYTE K2 =ランド()%0xFFで、
__asm {
MOVがら、K1。
XORら、K [7]。
movzx ECX、ら。
MOV EAX、0x100を。
IMUL CX、斧。
MOVら、K2。
XORら、K [5]。
MOVのk2xork5、ら。
movzx EAX、ら。
CXを追加し、斧。
movzx ESI、CX;
MOVのeessii1、ESI;
MOV EAX、ESI;
MOV ECX、0xB。
XOR EAX、0x7892;
、0x4D30をEAX追加します。
XOR EAX、0x3421;
movzx EAX、斧。
CDQ;
IDIVは、ECX。
MOVのeeddxx、EDX;
MOVのeeaaxx2、EAX;
}
//テストEDX、EDX。
IF(!eeddxx == 0 && eeaaxx2 = 0 && eeaaxx2 == 0x3E7)
{
K [1] = K1。
K [2] = K2。
ブレーク;
}
}
}
INTエンコード[] = {
0x39cb44b8、0x23754f67、0x5f017211、0x3ebb24da、0x351707c6、0x63f9774b、0x17827288、0x0fe74821、0x5b5f670f、0x48315ae8、0x785b7769、0x2b7a1547、0x38d11292、0x42a11b32、0x35332244、0x77437b60、
0x1eab3b10、0x53810000、0x1d0212ae、0x6f0377a8、0x43c03092、0x2d3c0a8e、 0x62950cbf、0x30f06ffa、0x34f710e0、0x28f417fb、0x350d2f95、0x5a361d5a、0x15cc060b、0x0afd13cc、0x28603bcf、0x3371066b、
0x30cd14e4、0x175d3a67、0x6dd66a13、0x2d3409f9、0x581e7b82、0x76526b99、0x5c8d5188、0x2c857971、0x15f51fc0、0x68cc0d11、0x49f55e5c、0x275e4364、0x2d1e0dbc、0x4cee7ce3、0x32555840、 0x112e2e08、
0x6978065a、0x72921406、0x314578e7、0x175621b7、0x40771dbf、0x3fc238d6、0x4a31128a、0x2dad036e、0x41a069d6、0x25400192、0x00dd4667、0x6afc1f4f、0x571040ce、0x62fe66df、0x41db4b3e、0x3582231f、
0x55f6079a、0x1ca70644、0x1b1643d2、0x3f7228c9、0x5f141070、0x3e1474ab、0x444b256e、0x537050d9、0x0f42094b、 0x2fd820e6、0x778b2e5e、0x71176d02、0x7fea7a69、0x5bb54628、0x19ba6c71、0x39763a99、
0x178d54cd、0x01246e88、0x3313537e、0x2b8e2d17、0x2a3d10be、0x59d10582、0x37a163db、0x30d6489a、0x6a215c46、0x0e1c7a76、0x1fc760e7、0x79b80c65、0x27f459b4、0x799a7326、0x50ba1782、0x2a116d5c、
0x63866e1b、0x3f920e3c、 0x55023490、0x55b56089、0x2c391fd1、0x2f8035c2、0x64fd2b7a、0x4ce8759a、0x518504f0、0x799501a8、0x3f5b2cad、0x38e60160、0x637641d8、0x33352a42、0x51a22c19、0x085c5851、
0x032917ab、0x2b770ac7、0x30ac77b3、0x2bec1907、0x035202d0、0x0fa933d3、0x61255df3、0x22ad06bf、0x58b86971、0x5fca0de5、0x700d6456、0x56a973db、0x5ab759fd、0x330e0be2、0x5b3c0ddd、0x495d3c60、
0x53bd59a6、0x4c5e6d91、0x49d9318d、0x103d5079、0x61ce42e3、0x7ed5121d、0x14e160ed、0x212d4ef2、0x270133f0、 0x62435a96、0x1fa75e8b、0x6f092fbe、0x4a000d49、0x57ae1c70、0x004e2477、0x561e7e72、
0x468c0033、0x5dcc2402、0x78507ac6、0x58af24c7、0x0df62d34、0x358a4708、0x3cfb1e11、0x2b71451c、0x77a75295、0x56890721、0x0fef75f3、0x120f24f1、0x01990ae7、0x339c4452、0x27a15b8e、0x0ba7276d、
0x60dc1b7b、0x4f4b7f82、 0x67db7007、0x4f4a57d9、0x621252e8、0x20532cfc、0x6a390306、0x18800423、0x19f3778a、0x462316f0、0x56ae0937、0x43c2675c、0x65ca45fd、0x0d604ff2、0x0bfd22cb、0x3afe643b、
0x3bf67fa6、0x44623579、0x184031f8、0x32174f97、0x4c6a092a、0x5fb50261、0x01650174、0x33634af1、0x712d18f4、0x6e997169、0x5dab7afe、0x7c2b2ee8、0x6edb75b4、0x5f836fb6、0x3c2a6dd6、0x292d05c2、
0x052244db、0x149a5f4f、0x5d486540、0x331d15ea、0x4f456920、0x483a699f、0x3b450f05、0x3b207c6c、0x749d70fe、 0x417461f6、0x62b031f1、0x2750577b、0x29131533、0x588c3808、0x1aef3456、0x0f3c00ec、
0x7da74742、0x4b797a6c、0x5ebb3287、0x786558b8、0x00ed4ff2、0x6269691e、0x24a2255f、0x62c11f7e、0x2f8a7dcd、0x643b17fe、0x778318b8、0x253b60fe、0x34bb63a3、0x5b03214f、0x5f1571f4、0x1a316e9f、
0x7acf2704、0x28896838、 0x18614677、0x1bf569eb、0x0ba85ec9、0x6aca6b46、0x1e43422a、0x514d5f0e、0x413e018c、0x307626e9、0x01ed1dfa、0x49f46f5a、0x461b642b、0x7d7007f2、0x13652657、0x6b160bc5、
0x65e04849、0x1f526e1c、0x5a0251b6、0x2bd73f69、0x2dbf7acd、0x51e63e80、0x5cf2670f、0x21cd0a03、0x5cff0261、0x33ae061e、0x3bb6345f、0x5d814a75、0x257b5df4、0x0a5c2c5b、0x16a45527、0x16f23945}。
INT Encde(CONSTチャー* A1、A2 INT、チャーA3、A4 INT)
{
CONST文字* V4。// EDX @ 1
int型V5に署名しました。1つの@ // ESI
署名したint型のV6。// EDI @ 1
符号なし__int8 V7。// BL @ 2
int型V8。// EAX @ 3
int型V9。// ECX @ 3
int型V10; // ECX @ 4
int型の結果。// EAX @ 4
int型V12。// ECX @ 5
符号なし__int8 V13。// [SP + 8H] [BP-10H] @ 2
の符号なし__int8 V14。// [SP + Chの] [BP-Chの] @ 2
符号なし__int8 V15。// [SP + 10H] [BP-8H] @ 2
int型のV16; // [SP + 14H] [BP-4H] @ 1
V4 = A1;
V16 = 0;
V5 = STRLEN(A1)。
V6 = 0;
IF(V5 <= 0)
{
結果= 0;
}
他
{
V13 = 0。
V14 = 0;
V7 = 15 * A4。
V15 = 17 * A3。
実行
{
V8 = TOUPPER(V4 [V6])。
V9 = V16 +エンコード[V8]。
(A2)であれば
{
V10 =エンコード[V7]
+エンコード[V15]
+エンコード[(符号なし__int8)(V8 + 47)] *(エンコード[(符号なし__int8)(V8 + 13)] ^ V9)。
結果=エンコード[V14] + V10。
V16 =エンコード[V14] + V10。
}
他
{
V12 =エンコード[V7]
+エンコード[V15]
+エンコード[(符号なし__int8)(V8 + 23)] *(エンコード[(符号なし__int8)(V8 + 63)] ^ V9)。
結果=エンコード[V13] + V12。
V16 =エンコード[V13] + V12。
}
V14 + = 19。
++ V6;
V15 + = 9。
V7 + = 13。
V13 + = 7。
V4 = A1;
}一方(V6 <V5)。
}
結果を返します。
}
バイトENDL = 0;
= 0 R8バイト、
バイトR10 = 0;
バイトR18 = 0;
ボイドReg9C(CONST文字* A1)
{
int型EN = Encde(A1 ,. 1,0、0x3E7);
__asm
{
MOV EDX、アン。
MOV ENDL、DL; //は、暗号化されたユーザー名の下位2ビットの値を取得
MOV ECX、EDX;
SHRのECX、0x8という。
MOV R8、CL;
MOV ECX、EDX;
SHRは、0x10のECX。
MOV R10、CL;
SHRは、0x18のEDX。
MOV R18、DL。
}
K [4] = ENDL。
K [5] = R8。
K [6] = R10。
K [7] = R18。
w9c1();
w9c2();
printf( "%02X%02X-%02X9C-%02X%02X-%02X%02X \ n"、K [0]、K [1]、K [2]、K [4]、K [5]、K [6]、K [7])。
getchar();
}
RegFCボイド(CONSTチャー* A1)
{
int型Encde EN =(A1、0、0xFFで,. 1);
__asm
{
MOV EDX、エン;
MOVのENDL、DL; //暗号化されたユーザ名の下位2ビットの値を取得します
MOV ECX、EDX;
SHRのECX、0x8という。
MOV R8、CL;
MOV ECX、EDX;
SHRは、0x10のECX。
MOV R10、CL;
SHRは、0x18のEDX。
MOV R18、DL。
}
K [4] = ENDL。
K [5] = R8。
K [6] = R10。
K [7] = R18。
int型eeccxx = 0;
int型eeaaxx = 0;
(真)一方
{
int型K2 =ランド()%0xFFで、
INT K1 =ランド()%0xFFで、
INT K0 =ランド()%0xFFで、
__asm {
MOV ECX、K2。
SHL ECX、0x8という。
MOV EAX、K1;
ECXを追加し、EAX;
movzx EAX、K0;
SHL ECX、0x8という。
MOV EDX、エン;
ECXを追加し、EAX;
MOV EAX、0xF0F0F0F1。
XOR ECX、EDX;
XOR ECX、0x22C078。
サブECX、0x2C175。
XOR ECX、0xFFE53167。
そして、0xFFFFFFのをECX。
MUL ECX;
SHRのEDX、0x4の。
MOV EAX、EDX;
SHL EAX、0x4の。
EAXを追加し、EDX;
MOVのeeaaxx、EAX;
MOVのeeccxx、ECX。
サブECX、EAX;
//のmov eaxに、0x0の。
// cmove EAX、EDX;
}
IF(eeccxx == eeaaxx)
{
K [0] = K0。
K [1] = K1。
K [2] = K2。
ブレーク;
}
}
のprintf( "%02X%02X-%02XFC-%02X%02X-%02X%02X \ n"、K [0]、K [1]、K [2]、K [4]、K [5] 、K [6]、K [7])。
getchar();
}
ボイドRegAC //(CONST文字* A1)
// {
// INT eeccxx2 = 0;
// INT eeaaxx3 = 0;
// INT eeddxx2 = 0;
//
//
// INT Encde EN =(A1 ,. 1、0x91を、0x3E7); //第四のパラメータは以下3E8より
// __asm
// {
; // MOV EDX、エン
// MOVのENDL、DL; // 2つの暗号化ユーザ名の後に低い値を取得
//
// MOV ECX、EDX;
// ECX SHR、0x8という;
// MOV R8、Clであり;
//
// MOV ECX、EDX;
// ECX SHR、の0x10;
// MOV R10、Clであり;
//
// EDX SHR、0x18の。
MOV R18 //、DL;
//}
// KK [4] = ENDL。
// KK [5] = R8。
// KK [6] = R10。
// KK [7] = R18。
//
//一方(真)
// {
//
//バイトK1 =ランド()%0xFFで、
//バイトK2 =ランド()%0xFFで、
//
// __asm {
//のMOVら、K1。
// XORら、KK [7]。
// movzx ECX、アル。
//のmov eaxに、0x100を。
// IMUL CX、斧。
//楽章ら、K2;
// XORら、KK [5]。
// movzx EAX、アル。
// CX、斧を追加します。
// movzx EAX、CX;
// MOV ECX、0xB。
// XOR EAX、0x7892;
//追加EAX、0x4D30。
// XOR EAX、0x3421;
// movzx EAX、斧。
// CDQ;
// IDIVは、ECX。
//楽章eeddxx2、EDX;
//楽章eeaaxx3、EAX;
//
//}
//もし(eeddxx2 == 0 && eeaaxx3 == 0x3E7)
// {
//
// KK [1] = K1。
// KK [2] = K2。
//ブレーク;
//}
//}
//一方(真)
// {
//バイトK0 =ランド()%0xFFで、
//バイトK8 =ランド()%0xFFで、
//バイトK9 =ランド()%0xFFで、
// __asm
// {
// movzx EDX、K9。
// movzx ECX、KK [4]。
// movzx EAX、KK [5]。
// XOR EDX、EAX;
// movzx EAX、K8。
// XOR ECX、EAX;
// SHL EDX、0x8という。
// movzx EAX、KK [6]。
//追加EDX、ECX。
// movzx ECX、K0;
// SHL EDX、0x8という。
// XOR ECX、EAX;
//追加EDX、ECX。
// MOV ECX、EDX;
//のmov eaxに、0xF0F0F0F1。
// XOR ECX、0x5B8C27。
// XOR ECX、0x22C078。
//サブECX、0x2C175。
// XOR ECX、0xFFE53167。
//とECX、0xFFFFFFの。
// MUL ECX。
// SHR EDX、0x4の。
//のMOV EAX、EDX;
// SHL EAX、0x4の。
//追加EAX、EDX;
//楽章eeccxx2、ECX。
//楽章eeaaxx3、EAX;
//}
//もし(eeccxx2 == eeaaxx3 && eeaaxx3 <= 0x4596)
// {
// KK [0] = K0。
//
// KK [8] = K8。
// KK [9] = K9。
//ブレーク;
//}
//}
//
//のprintf( "%02X%02X-%02XAC-%02X%02X-%02X%02X-%02X%02X \ n"、
// KK [0] KK [1] 、KK [2] KK [4] KK [5]、KK KK [6]、[7] KK [8] KK [9])。
// getchar関数();
//}
int型のmain()
{
文字ユーザー名[100] = {0}。
INT ID = 0。
(真)一方
{
scanf関数( "%sの%D"、およびユーザー名、&ID)。
スイッチ(ID)
{
ケース0:Reg9C(ユーザ名)、ブレーク。
ケース1:RegFC(ユーザー名);休憩;
ケース2:出口(0);
}
}
}