[原创] [原创]Drive Power Manager1.10注册算法逆向及注册机编写

a1辅助网提供[原创] [原创]Drive Power Manager1.10注册算法逆向及注册机编写的下载地址,长期提供破解软件,各种线报福利等,36097是一个很好的福利资源网站

hk6242337 发表于 2020-10-23 14:04
我是官网下载的呀 然后输入注册码 看看什么软件  好像是笔记本才能用

Drive Power Manager是一个实用程序,用于更改硬盘和CD / DVD / BD驱动器的电源管理和性能设置。
它提供了详细的设置以节省功率,降低噪声或提高性能。
只需按一下按钮,即可立即将驱动器置于待机状态。
电源管理设置直接发送到驱动器,并且与操作系统设置无关。

        
用法示例        
        省电型笔记本电脑:如果您在旅途中,则希望能够尽可能长时间地使用笔记本电脑。将电源管理设置设置为最大省电模式将帮助您实现这一目标。
        低噪声PC:硬盘驱动器,尤其是CD / DVD / BD驱动器可能会非常嘈杂。通过降低速度,可以显着降低这些驱动器发出的噪音。
        最高性能PC:如果需要最高性能,则可以减少电源管理设置或完全禁用它们。还有一些设置可以提高速度。
        关闭外部驱动器:通过将外部驱动器置于待机状态,几乎不会消耗任何电力,并且无需物理断开电源即可实现无噪音。需要时,数据将在几秒钟内可用。

感谢楼主的分享   很详细的过程
多谢分享!!多谢指教

0x0前言
     写这篇文章仅为学习交流逆向技术,并无其他的目的,希望有需要有能力的不要使用我发出来的注册码,
官网支持一个正版,也不贵就14.95块,附上官网链接:http://www.drivepowermanager.com/buy.html
0x1定位验证算法
   
对函数GetWindowTextA下断点,第二次断下可以在堆栈中看见自己输入的name,aaaaaaaa,
验证算法对他们进行各种操作,所以肯定会读取的,对aaaaaaaa下个内存访问断点,

当断下时在系统里领空的时候,就不要管他,直到断在用户的内存领空,
这个应该就是验证函数的内部,但还是不能百分百确定,

向下可以找到弹出messagebox的地方,messagebox上面的判断应该就是确定,是否跳向弹出成功的messagebox,
我输入的注册码是错误的,所以这里的跳转肯定是跳向失败,我们就让他向相反的地方跳转。

提示注册成功,那这里就是验证算法函数无疑了,这么做可以达到爆破的效果,但是重启会重新验证
0x2逆向验证算法

[C++] 纯文本查看 复制代码
int __thiscall KeyFC(CWnd *this)  {    CWnd *v1; // ebp    const char *v2; // ST14_4    CString *v3; // ecx    int v4; // eax    int v5; // eax    int v6; // eax    signed int v7; // esi    char *v8; // edi    unsigned __int8 *v9; // eax    _DWORD *v10; // ecx    signed int v11; // eax    int v12; // edx    const char *v13; // ST14_4    const char *v14; // ST14_4    char v16; // [esp+Ch] [ebp-468h]    char v17; // [esp+10h] [ebp-464h]    const char *v18; // [esp+14h] [ebp-460h]    char v19; // [esp+18h] [ebp-45Ch]    char v20; // [esp+1Ch] [ebp-458h]    int serial; // [esp+20h] [ebp-454h]    int v22; // [esp+24h] [ebp-450h]    char v23; // [esp+28h] [ebp-44Ch]    char nameOrcompany[2]; // [esp+68h] [ebp-40Ch]    char v25; // [esp+6Ah] [ebp-40Ah]    char v26; // [esp+6Bh] [ebp-409h]    char v27; // [esp+6Ch] [ebp-408h]    char v28; // [esp+6Dh] [ebp-407h]    char v29; // [esp+6Eh] [ebp-406h]    char v30; // [esp+6Fh] [ebp-405h]    char v31; // [esp+70h] [ebp-404h]    char v32; // [esp+A7h] [ebp-3CDh]    int v33; // [esp+470h] [ebp-4h]      v1 = this;    CWnd::UpdateData(this, 1);                    // 更新数据    strcpy(nameOrcompany, *((const char **)v1 + 160));// v1为获取的name字符开始地址,加一定的偏移可以找到company和serial    if ( strlen(nameOrcompany) >= 1 )             // 比较name长度是否大于1    {      if ( strlen(nameOrcompany) > 0x3F )         // 比较name长度是否大于63        v32 = 0;                                  // v32为name附近的一个地址      strcpy((char *)(*((_DWORD *)v1 + 167) + 145477), nameOrcompany);// 将name移动到*((_DWORD *)v1 + 167) + 145477      strcpy(nameOrcompany, *((const char **)v1 + 161));// [v1 + 161]==company      if ( strlen(nameOrcompany) > 0x3F )         // 比较company长度是否大于63        v32 = 0;      strcpy((char *)(*((_DWORD *)v1 + 167) + 145541), nameOrcompany);// 将company字符串移动到*((_DWORD *)v1 + 167) + 145541      v4 = operator+((int)&v19, (int)v1 + 648, (int)v1 + 652);// v1 + 648和v1 + 652分别为serial五部分中的1,2两部分,将两部分拼接后放入&v19,v19在v1附近且v19=v4      v33 = 1;      v5 = operator+((int)&v20, v4, (int)v1 + 656);// serial将前面拼接的两部分和第三部分拼接      LOBYTE(v33) = 2;      v6 = operator+((int)&v16, v5, (int)v1 + 660);// serial将前面拼接的三部分和第四部分拼接      LOBYTE(v33) = 3;      operator+((int)&v18, v6, (int)v1 + 664);    // serial将前面拼接的四部分和第五部分拼接      LOBYTE(v33) = 7;      CString::~CString((CString *)&v16);      LOBYTE(v33) = 6;      CString::~CString((CString *)&v20);      LOBYTE(v33) = 5;      CString::~CString((CString *)&v19);      CString::MakeUpper((CString *)&v18);        // 将五部分拼接的字符由小写字母变为大写      strcpy(&v23, v18);                          // 复制到v23,v23为堆栈      *(_BYTE *)(*((_DWORD *)v1 + 167) + 145461) = rand();// 生成随机数放入与前面name与company附近      v7 = 0;      v8 = &v23;                                  // v8为serial转换为大写的字符串地址      *(_BYTE *)(*((_DWORD *)v1 + 167) + 145462) = rand();// // 生成随机数放入与前面name与company附近      do      {        sprintf(nameOrcompany, a0xCC_0, *v8, v8[1]);// sprintf(name, 0x%c%c, v8[1], v8[1]);循环向里打印,所以里面的两个数只为serial最后两个        v8 += 2;        *(_BYTE *)(*((_DWORD *)v1 + 167) + v7++ + 145463) = strtoul(nameOrcompany, 0, 16);// 将name的ascii转换为字符,也就是sprintf打印进去的serial      }      while ( v7 < 10 );      v9 = (unsigned __int8 *)(*((_DWORD *)v1 + 167) + 145464);// 从地址里取出serial的第一个字节      serial = *(unsigned __int8 *)(*((_DWORD *)v1 + 167) + 145467)             + ((*(unsigned __int8 *)(*((_DWORD *)v1 + 167) + 145466)               + ((*(unsigned __int8 *)(*((_DWORD *)v1 + 167) + 145465) + (*v9 << 8)) << 8)) << 8);// v9为密码的第一个,左移8位就是前移两个字节,                                                  // ((*(unsigned __int8 *)(*((_DWORD *)v1 + 167) + 145465)为密码第二位,后面以此类推,取出前8位serial      v10 = (_DWORD *)*((_DWORD *)v1 + 169);      v22 = v9[7] + ((v9[6] + ((v9[5] + (v9[4] << 8)) << 8)) << 8);// 取出后8位serial      sub_401AD0(v10, (int)&serial, (int)nameOrcompany, 8);      v11 = 0;      do      {        nameOrcompany[v11] ^= *((_BYTE *)v1 + v11 + 684);// 将解密出来的结果nameOrcompany与指定的值异或        ++v11;      }      while ( v11 < 8 );      v12 = *((_DWORD *)v1 + 167);      v31 = 0;      sub_406540(v12);                            // 保存输入的注册码      if ( !strncmp(nameOrcompany, Str2, 2u)      // 检查计算出来的8个字节                                                  // 当str1=str2时,返回值=0;即检查前2个字节为35 44         && AsciiIsNmber(v25)                      // AsciiIsNmber,检查ascii码对应的值是否为数字,此处检查了后6个字节        && AsciiIsNmber(v26)                      // 30-39为数字        && AsciiIsNmber(v27)        && AsciiIsNmber(v28)        && AsciiIsNmber(v29)        && AsciiIsNmber(v30) )      {        *(_BYTE *)(*((_DWORD *)v1 + 167) + 145428) = 1;        v13 = *(const char **)sub_406180((CString *)&v17, 0x7Du);        LOBYTE(v33) = 8;                          // LOBYTE指向16进制最低的那个字节        CWnd::MessageBoxA(v1, v13, 0, 0);        LOBYTE(v33) = 5;        CString::~CString((CString *)&v17);        CDialog::OnOK(v1);      }      else                                        // 如果输入的serial错误      {        v14 = *(const char **)sub_406180((CString *)&v17, 0x7Eu);        LOBYTE(v33) = 9;        CWnd::MessageBoxA(v1, v14, 0, 0x10u);        LOBYTE(v33) = 5;        CString::~CString((CString *)&v17);      }      v33 = -1;      v3 = (CString *)&v18;    }    else                                          // 如果没有name输入    {      v2 = *(const char **)sub_406180((CString *)&v16, 0x7Fu);      v33 = 0;      CWnd::MessageBoxA(v1, v2, 0, 0x10u);      v33 = -1;      v3 = (CString *)&v16;    }    return CString::~CString(v3);  }

这个函数将,名字,公司,存入一个地址,然后就把注册码的五部分拼接起来,
再分成把注册码的两部分传入sub_401AD0解密函数,再用一个循环,把解密出来的注册码异或一遍,
然后到了函数sub_406540里把和存入某个地址名字,公司一起写入文件保存,再检查这个注册码的前两个字节是否为35,44,
后6个字节是否为数字,即后6位为的大小必须在30-39之间,根据检测结果弹出相应的messagebox。其他细节的可以看我写的注释。

[C++] 纯文本查看 复制代码
int __thiscall sub_401AD0(_DWORD *this, int serial, int nameOrcompany, int a3)  {    int *serial_1; // esi    int *nameOrcompany_1; // edi    int result; // eax    unsigned int *nameOrcompanyadd0x4; // ebp    unsigned int *v8; // ebx    signed int v9; // eax    _DWORD *v10; // [esp+8h] [ebp-4h]    unsigned int Wseriala; // [esp+10h] [ebp+4h]    BOOL nameOrcompanya; // [esp+14h] [ebp+8h]      serial_1 = (int *)serial;    nameOrcompany_1 = (int *)nameOrcompany;    nameOrcompanya = serial == nameOrcompany;    result = a3;    v10 = this;    if ( a3 )    {      nameOrcompanyadd0x4 = (unsigned int *)(nameOrcompany_1 + 1);      v8 = (unsigned int *)(serial + 4);      Wseriala = (unsigned int)(a3 + 7) >> 3;     // 8+7=15 =》 1111右移三位为1      while ( 1 )                                 // serial与nameorcompany的地址是否相等,如果不相等此处就位0      {        if ( nameOrcompanya )        {          sub_401440(this, serial_1, v8);          serial_1 += 2;          v8 += 2;        }        else        {          v9 = 0;          do          {            *((_BYTE *)nameOrcompany_1 + v9) = *((_BYTE *)serial_1 + v9);// 取字符型serial前八个字节放入nameOrcompany            ++v9;          }          while ( v9 < 8 );          sub_401440(this, nameOrcompany_1, nameOrcompanyadd0x4);// 解密call,this为指向辅助解密的code的地址,宁外两个指向的开始8个字节都为serial,后面一个为serial的ascii,宁外一个为compang的ascii          serial_1 += 2;          v8 += 2;          nameOrcompany_1 += 2;          nameOrcompanyadd0x4 += 2;        }        result = Wseriala-- - 1;                  // Wseriala原来固定为1,此处减1后为0        if ( !Wseriala )          break;        this = v10;      }    }    return result;  }

这个就是函数sub_401AD0,a3就是传入的固定数8,这个8是不变的也就是说无论输入的注册码是不是正确的都会执行if里,
里面的还有一个if肯定执行else里,也是这样和输入无关,我多次测试过,所以看我写的注释也只有一部分的,进入执行的else里,
先是一个循环把注册码11-18位写入了,原来的company的地方,所以前面我说的是注册码的俩部分,而不是注册码和company,
然后把这两个传入函数sub_401440同时传入的还有一个指向用于辅助解密的代码的地方,接下来就是真正的解密函数sub_401440

[C++] 纯文本查看 复制代码
int __thiscall sub_401440(_DWORD *this, int *a2, unsigned int *a3)  {    _DWORD *v3; // esi    int *v4; // edi    unsigned int v5; // edx    int v6; // eax    unsigned int v7; // ecx    unsigned int v8; // edx    unsigned int v9; // ecx    unsigned int v10; // edx    unsigned int v11; // ecx    unsigned int v12; // edx    unsigned int v13; // ecx    unsigned int v14; // edx    unsigned int v15; // ecx    unsigned int v16; // edx    unsigned int v17; // ecx    unsigned int v18; // edx    unsigned int v19; // ecx    unsigned int v20; // edx    int v21; // ebp    int result; // eax    unsigned int v23; // [esp+14h] [ebp+4h]      v3 = (_DWORD *)*this;    v4 = a2;    v6 = this[1];                                 // v6为this指向的地址里第二个地址,与this指向的第一个地址*this地址相比大0x50,也就是说*this+0x50=v6    v5 = *a2 ^ *(_DWORD *)(*this + 68);           // a2为serial取出前4个字节与一段地址里的值异或,serial为输入的serial的3-10位    v7 = *a3 ^ *(_DWORD *)(*this + 64) ^ (*(_DWORD *)(v6 + 4 * (unsigned __int8)v5 + 3072)// a3为serial为输入的serial的11-18位                                        + (*(_DWORD *)(v6 + 4 * BYTE1(v5) + 2048) ^ (*(_DWORD *)(v6 + 4 * (v5 >> 24))                                                                                   + *(_DWORD *)(v6 + 4 * BYTE2(v5) + 1024))));//                                                   // BYTE2取地址里的值的第二个字节,                                                  // v5 >> 24为第一个字节                                                  // BYTE1取地址里的值的第三个字节,                                                  // (unsigned __int8)v5 是指v5的最后一个字节,这里有误    v8 = v3[15] ^ (*(_DWORD *)(v6 + 4 * (unsigned __int8)v7 + 3072)                 + (*(_DWORD *)(v6 + 4 * BYTE1(v7) + 2048) ^ (*(_DWORD *)(v6 + 4 * (v7 >> 24))                                                            + *(_DWORD *)(v6 + 4 * BYTE2(v7) + 1024)))) ^ v5;    v9 = v3[14] ^ (*(_DWORD *)(v6 + 4 * (unsigned __int8)v8 + 3072)                 + (*(_DWORD *)(v6 + 4 * BYTE1(v8) + 2048) ^ (*(_DWORD *)(v6 + 4 * (v8 >> 24))                                                            + *(_DWORD *)(v6 + 4 * BYTE2(v8) + 1024)))) ^ v7;    v10 = v3[13] ^ (*(_DWORD *)(v6 + 4 * (unsigned __int8)v9 + 3072)                  + (*(_DWORD *)(v6 + 4 * BYTE1(v9) + 2048) ^ (*(_DWORD *)(v6 + 4 * (v9 >> 24))                                                             + *(_DWORD *)(v6 + 4 * BYTE2(v9) + 1024)))) ^ v8;    v11 = v3[12] ^ (*(_DWORD *)(v6 + 4 * (unsigned __int8)v10 + 3072)                  + (*(_DWORD *)(v6 + 4 * BYTE1(v10) + 2048) ^ (*(_DWORD *)(v6 + 4 * (v10 >> 24))                                                              + *(_DWORD *)(v6 + 4 * BYTE2(v10) + 1024)))) ^ v9;    v12 = v3[11] ^ (*(_DWORD *)(v6 + 4 * (unsigned __int8)v11 + 3072)                  + (*(_DWORD *)(v6 + 4 * BYTE1(v11) + 2048) ^ (*(_DWORD *)(v6 + 4 * (v11 >> 24))                                                              + *(_DWORD *)(v6 + 4 * BYTE2(v11) + 1024)))) ^ v10;    v13 = v3[10] ^ (*(_DWORD *)(v6 + 4 * (unsigned __int8)v12 + 3072)                  + (*(_DWORD *)(v6 + 4 * BYTE1(v12) + 2048) ^ (*(_DWORD *)(v6 + 4 * (v12 >> 24))                                                              + *(_DWORD *)(v6 + 4 * BYTE2(v12) + 1024)))) ^ v11;    v14 = v3[9] ^ (*(_DWORD *)(v6 + 4 * (unsigned __int8)v13 + 3072)                 + (*(_DWORD *)(v6 + 4 * BYTE1(v13) + 2048) ^ (*(_DWORD *)(v6 + 4 * (v13 >> 24))                                                             + *(_DWORD *)(v6 + 4 * BYTE2(v13) + 1024)))) ^ v12;    v15 = v3[8] ^ (*(_DWORD *)(v6 + 4 * (unsigned __int8)v14 + 3072)                 + (*(_DWORD *)(v6 + 4 * BYTE1(v14) + 2048) ^ (*(_DWORD *)(v6 + 4 * (v14 >> 24))                                                             + *(_DWORD *)(v6 + 4 * BYTE2(v14) + 1024)))) ^ v13;    v16 = v3[7] ^ (*(_DWORD *)(v6 + 4 * (unsigned __int8)v15 + 3072)                 + (*(_DWORD *)(v6 + 4 * BYTE1(v15) + 2048) ^ (*(_DWORD *)(v6 + 4 * (v15 >> 24))                                                             + *(_DWORD *)(v6 + 4 * BYTE2(v15) + 1024)))) ^ v14;    v17 = v3[6] ^ (*(_DWORD *)(v6 + 4 * (unsigned __int8)v16 + 3072)                 + (*(_DWORD *)(v6 + 4 * BYTE1(v16) + 2048) ^ (*(_DWORD *)(v6 + 4 * (v16 >> 24))                                                             + *(_DWORD *)(v6 + 4 * BYTE2(v16) + 1024)))) ^ v15;    v18 = v3[5] ^ (*(_DWORD *)(v6 + 4 * (unsigned __int8)v17 + 3072)                 + (*(_DWORD *)(v6 + 4 * BYTE1(v17) + 2048) ^ (*(_DWORD *)(v6 + 4 * (v17 >> 24))                                                             + *(_DWORD *)(v6 + 4 * BYTE2(v17) + 1024)))) ^ v16;    v19 = v3[4] ^ (*(_DWORD *)(v6 + 4 * (unsigned __int8)v18 + 3072)                 + (*(_DWORD *)(v6 + 4 * BYTE1(v18) + 2048) ^ (*(_DWORD *)(v6 + 4 * (v18 >> 24))                                                             + *(_DWORD *)(v6 + 4 * BYTE2(v18) + 1024)))) ^ v17;    v20 = v3[3] ^ (*(_DWORD *)(v6 + 4 * (unsigned __int8)v19 + 3072)                 + (*(_DWORD *)(v6 + 4 * BYTE1(v19) + 2048) ^ (*(_DWORD *)(v6 + 4 * (v19 >> 24))                                                             + *(_DWORD *)(v6 + 4 * BYTE2(v19) + 1024)))) ^ v18;    v23 = v3[2] ^ (*(_DWORD *)(v6 + 4 * (unsigned __int8)v20 + 3072)                 + (*(_DWORD *)(v6 + 4 * BYTE1(v20) + 2048) ^ (*(_DWORD *)(v6 + 4 * (v20 >> 24))                                                             + *(_DWORD *)(v6 + 4 * BYTE2(v20) + 1024)))) ^ v19;    v21 = v3[1] ^ (*(_DWORD *)(v6 + 4 * (unsigned __int8)v23 + 3072)                 + (*(_DWORD *)(v6 + 4 * BYTE1(v23) + 2048) ^ (*(_DWORD *)(v6 + 4 * (v23 >> 24))                                                             + *(_DWORD *)(v6 + 4 * BYTE2(v23) + 1024))));    result = v23 ^ *v3;                           // eax与edx为计算结果    *v4 = result;                                 // 这两个写入值分别写入穿入的后两个参数的地址里    *a3 = v21 ^ v20;                              // ecx与edi为两写入的地址    return result;  }



代码看起来很多,其实看懂一个,后面的都一样,就是把注册码和解密码异或后,
把这个8位数分成四部分,每部分一个字节,以每部分位乘4作为偏移,加上给定的固定值,
算出地址取出地址里的值,与其他3部分先后异或,然后把结果传入下一个,这样的流程,
循环执行,最后把结果放入传入的参数地址里,具体细节可以看我写的注释。

0x3注册机编写

[C++] 纯文本查看 复制代码
#include "stdio.h"#include "windows.h"  BYTE v6add1024[1072] = {          0xC1, 0x99, 0x64, 0xC7, 0x5F, 0x70, 0x2A, 0xFD, 0x4B, 0x5F, 0x65, 0xAA,          0x5A, 0xEF, 0x7E, 0x99, 0xF7, 0x08, 0x5E, 0xF1, 0x77, 0x84, 0xC8, 0xBE,          0xC1, 0x18, 0x0E, 0x71, 0x6D, 0x8A, 0xD5, 0xED, 0x77, 0x6D, 0x66, 0x8F,          0x90, 0x7A, 0x53, 0xFC, 0x4E, 0x41, 0x1F, 0xFB, 0x5C, 0x13, 0xAE, 0xA5,          0x8A, 0xBA, 0x29, 0x36, 0x0A, 0x18, 0xDE, 0x0A, 0xB2, 0xC2, 0x27, 0xBA,          0x6F, 0x1D, 0x8F, 0xC8, 0x58, 0x8B, 0x95, 0x30, 0x32, 0x0D, 0xCC, 0x24,          0xA1, 0x8E, 0xEE, 0x06, 0x35, 0x44, 0xCC, 0xF0, 0x4D, 0x66, 0x20, 0xE6,          0xF5, 0x13, 0x46, 0xAC, 0xB9, 0xEF, 0xDB, 0xBB, 0x70, 0x08, 0x5C, 0x4D,          0x77, 0x3F, 0x56, 0x29, 0x51, 0x97, 0x5A, 0x43, 0x6D, 0x33, 0x37, 0xEE,          0x8F, 0xC3, 0xDE, 0xDE, 0x46, 0x59, 0xFF, 0xBC, 0x9A, 0x40, 0x1C, 0x51,          0x10, 0x30, 0xC5, 0x9E, 0x44, 0x21, 0x56, 0x62, 0xC6, 0x85, 0x3B, 0xEC,          0x63, 0x1F, 0xE9, 0x9D, 0x2E, 0x61, 0x6F, 0xF5, 0x95, 0xED, 0x31, 0xB1,          0x54, 0x26, 0xFC, 0xF4, 0x36, 0xF7, 0x62, 0xDF, 0xE1, 0x36, 0xB9, 0x10,          0xBD, 0xBD, 0xAD, 0x62, 0xB2, 0x84, 0x67, 0x86, 0x46, 0xA2, 0xCF, 0x8E,          0xB6, 0xA2, 0x5D, 0x4E, 0x71, 0x63, 0x73, 0x76, 0x88, 0xC9, 0x55, 0x0F,          0x05, 0x0D, 0x6C, 0x80, 0x9B, 0xE3, 0x2C, 0x41, 0x90, 0x4F, 0xAF, 0xD3,          0x07, 0xDF, 0x73, 0xAF, 0x1F, 0x03, 0xAF, 0x51, 0xCF, 0x82, 0x3A, 0xB8,          0x76, 0xAC, 0x5A, 0x57, 0x90, 0x37, 0x3E, 0x3B, 0x98, 0x7C, 0xDF, 0x24,          0x13, 0x78, 0x70, 0xC5, 0x20, 0x8D, 0x8A, 0xC0, 0x5D, 0xA9, 0x77, 0xAF,          0xA7, 0x54, 0x41, 0xB6, 0xAD, 0x31, 0x6E, 0xD6, 0x90, 0xC2, 0xDF, 0x1D,          0x65, 0x50, 0x96, 0x81, 0x91, 0xF5, 0x55, 0x39, 0x01, 0x4A, 0x34, 0x8F,          0xAF, 0x58, 0x68, 0xB8, 0x50, 0x6B, 0x84, 0xF9, 0x49, 0xE7, 0xDF, 0xEC,          0x82, 0xC0, 0x01, 0x0A, 0x7C, 0xBF, 0xB7, 0xFB, 0xFE, 0x23, 0xD8, 0xDE,          0x77, 0x0D, 0xB9, 0xE4, 0x3E, 0xCD, 0x37, 0xFC, 0x5F, 0x59, 0xA8, 0xC4,          0xE7, 0x9F, 0xFB, 0xF2, 0x1E, 0x40, 0x67, 0x13, 0xF1, 0x6B, 0x18, 0x56,          0xCB, 0xC5, 0xD0, 0x31, 0xBA, 0xBF, 0xF6, 0x14, 0x2E, 0x36, 0x19, 0xC7,          0x6B, 0xBA, 0x70, 0x00, 0x19, 0xA5, 0x23, 0x02, 0x64, 0x84, 0x21, 0x7C,          0xA7, 0xC1, 0x8A, 0x91, 0x3C, 0xE1, 0x20, 0x65, 0xAD, 0xE2, 0x99, 0xE7,          0xCA, 0x5C, 0x68, 0x74, 0x7E, 0x72, 0xCB, 0xC3, 0x8E, 0x82, 0xCD, 0xAD,          0x74, 0x18, 0xCA, 0x84, 0x99, 0x13, 0x63, 0x5D, 0xBD, 0x0D, 0x1E, 0x4D,          0x7C, 0xC3, 0xD7, 0x8E, 0xC2, 0xD5, 0x10, 0xD2, 0x9A, 0x73, 0xCE, 0xA7,          0x77, 0x37, 0x2D, 0x81, 0x18, 0x32, 0xB4, 0x3C, 0x63, 0xAB, 0x49, 0x1D,          0xF8, 0x78, 0x11, 0x97, 0x87, 0x00, 0x41, 0xF8, 0xEA, 0x69, 0xC4, 0x44,          0x66, 0x8F, 0x60, 0x9D, 0xA8, 0x25, 0x36, 0x60, 0xE6, 0xA1, 0x33, 0x2F,          0xA9, 0x8E, 0x43, 0x88, 0x68, 0x89, 0x7A, 0x08, 0xBF, 0x55, 0x44, 0x18,          0x7A, 0xA3, 0x01, 0x3F, 0x5F, 0x20, 0x0D, 0xF1, 0xFD, 0x47, 0x50, 0xDD,          0xEB, 0xA3, 0xA4, 0x60, 0x0A, 0x3B, 0x31, 0xE2, 0x89, 0x33, 0x7E, 0x21,          0x8C, 0xA3, 0xAD, 0xDA, 0x32, 0x40, 0x64, 0xBF, 0x27, 0x91, 0x7C, 0xEA,          0x64, 0x7F, 0x77, 0xFE, 0xE5, 0x7C, 0xA8, 0x6F, 0xCC, 0x32, 0x4B, 0x7E,          0x3A, 0x18, 0x0B, 0xE0, 0xF7, 0xCA, 0xEC, 0x66, 0x33, 0xD6, 0xB7, 0xA1,          0x7C, 0x17, 0x42, 0xFD, 0x66, 0x26, 0xD0, 0x1A, 0xA3, 0x3C, 0xB2, 0x03,          0x16, 0x79, 0xD7, 0xF2, 0xF4, 0xB1, 0x35, 0xE8, 0x23, 0x52, 0x05, 0x4F,          0x84, 0xF3, 0xC7, 0x4A, 0x59, 0xC4, 0x01, 0x79, 0xDF, 0xF7, 0x1B, 0x65,          0x99, 0x8E, 0x5F, 0xB5, 0x47, 0x89, 0x9B, 0x3D, 0x05, 0xEA, 0xB2, 0xB7,          0x80, 0x1C, 0xE7, 0xB1, 0xDF, 0x71, 0x46, 0xBF, 0x5C, 0x64, 0x9E, 0x2B,          0x67, 0x93, 0xBD, 0x53, 0xBA, 0x07, 0x85, 0x65, 0x44, 0x54, 0x1C, 0x9B,          0xB1, 0x68, 0x08, 0xCE, 0x8F, 0x5D, 0xF7, 0x18, 0x78, 0xAF, 0x0F, 0xB6,          0x62, 0x35, 0x06, 0xC1, 0xC3, 0x88, 0xE8, 0x67, 0x69, 0x1A, 0x30, 0x6C,          0xAE, 0xE5, 0x7D, 0xF7, 0x77, 0x2A, 0x97, 0x63, 0x62, 0x25, 0xA0, 0xEB,          0xC6, 0x0F, 0x1E, 0x86, 0x01, 0x3E, 0xF7, 0xDD, 0x9F, 0x17, 0xA2, 0xCF,          0xBB, 0xEE, 0xF7, 0x46, 0xB1, 0x0E, 0xBA, 0x9C, 0xBE, 0xD2, 0xCF, 0xF1,          0xE5, 0xF8, 0xF5, 0x99, 0x55, 0x96, 0xBE, 0xF9, 0x13, 0x2C, 0x03, 0x94,          0x3B, 0x74, 0x16, 0xDD, 0x9A, 0xA4, 0x19, 0x00, 0x37, 0xD3, 0x9D, 0xE1,          0x49, 0x9B, 0xFD, 0xB5, 0x20, 0x18, 0xAD, 0xA1, 0x72, 0x80, 0x1D, 0x94,          0xEC, 0x76, 0xDB, 0x10, 0x39, 0x2F, 0x04, 0x56, 0xE8, 0x0D, 0xCD, 0xA7,          0xB6, 0x49, 0x1A, 0xCE, 0x30, 0xEB, 0xCA, 0x7B, 0x03, 0xD9, 0xCB, 0x0A,          0xED, 0x96, 0x0B, 0x59, 0x90, 0x45, 0xF6, 0x1D, 0xE3, 0xD8, 0xF1, 0x73,          0x89, 0xC9, 0x50, 0xF4, 0x91, 0x04, 0x81, 0xD2, 0xFD, 0xCF, 0x62, 0x9B,          0x9F, 0x40, 0x5B, 0xB6, 0xE0, 0x2A, 0x53, 0x59, 0x32, 0x56, 0x0A, 0xFA,          0xCF, 0x24, 0x4F, 0x57, 0xF5, 0x92, 0x92, 0xC2, 0x61, 0xD9, 0x41, 0x6F,          0x6D, 0x4C, 0x9D, 0xD0, 0xA9, 0x32, 0x6D, 0x21, 0x37, 0x5B, 0x44, 0x8A,          0x66, 0xC9, 0x44, 0x25, 0xC7, 0x61, 0x2D, 0x0D, 0x2D, 0xC7, 0xF9, 0xFC,          0xF2, 0x5E, 0x17, 0x58, 0xC7, 0xDA, 0x43, 0xB6, 0x87, 0xD3, 0x57, 0x2B,          0xCE, 0x27, 0x70, 0x2F, 0x44, 0x7C, 0x48, 0xDE, 0x6A, 0x18, 0x77, 0x2C,          0x8E, 0x29, 0x20, 0x83, 0xD0, 0xD5, 0x96, 0xA5, 0xAB, 0x6E, 0x13, 0xCC,          0xEF, 0x28, 0xA5, 0x79, 0xF8, 0xC9, 0x1C, 0x1F, 0xCE, 0x4F, 0xED, 0xCA,          0xB2, 0x55, 0x62, 0x9F, 0xA7, 0xD6, 0x36, 0xF4, 0x5B, 0x5A, 0x15, 0x9B,          0x00, 0xD4, 0x1D, 0xDD, 0x70, 0xA5, 0x3E, 0x7E, 0x40, 0x0E, 0x00, 0x91,          0xB4, 0x56, 0x0F, 0x46, 0x92, 0xA4, 0x52, 0x42, 0x2C, 0x31, 0xAF, 0xBB,          0xBC, 0x14, 0x98, 0x09, 0x65, 0x92, 0x42, 0x06, 0x6C, 0x4F, 0xD9, 0xD8,          0x94, 0xDE, 0x62, 0xAB, 0xF4, 0xDA, 0x55, 0x6D, 0x93, 0x04, 0xB5, 0xB9,          0x69, 0x6B, 0xAE, 0x53, 0x3B, 0x8F, 0xFB, 0xF0, 0x5D, 0x45, 0x3D, 0x05,          0x72, 0x69, 0xF1, 0x5F, 0x51, 0xF3, 0x89, 0xBB, 0xD9, 0x71, 0xFE, 0xBC,          0x68, 0x84, 0x30, 0xA5, 0x22, 0xD3, 0x72, 0x2F, 0x01, 0x88, 0x24, 0x4C,          0xC7, 0xD0, 0x9A, 0x83, 0xB4, 0x74, 0x6F, 0xCA, 0xB6, 0xD5, 0xEE, 0x50,          0xBB, 0x3E, 0xDC, 0x3E, 0x35, 0xE6, 0x16, 0x34, 0xA5, 0x01, 0x02, 0x56,          0x00, 0xB6, 0x80, 0x09, 0x23, 0xD3, 0xB2, 0x5F, 0x00, 0x88, 0x15, 0x91,          0x62, 0xEE, 0xEB, 0x35, 0x55, 0x8B, 0x4F, 0x9B, 0xBA, 0xD0, 0x30, 0x6F,          0x6E, 0x9F, 0x9C, 0x91, 0x1B, 0xA6, 0x54, 0x2B, 0xF0, 0x6E, 0x2A, 0x81,          0x70, 0x7C, 0x50, 0x18, 0x64, 0x4A, 0x53, 0x77, 0xE7, 0xE3, 0x06, 0xD7,          0x48, 0x35, 0x79, 0x42, 0x18, 0x79, 0x9A, 0x95, 0x56, 0x12, 0xCF, 0xB9,          0xF9, 0xAD, 0xB6, 0xBE, 0xAA, 0x4E, 0x62, 0xF8, 0x63, 0xD1, 0x49, 0x92,          0x14, 0x0E, 0x5E, 0xC6, 0x44, 0x47, 0xD5, 0x6F, 0xCC, 0xBA, 0xB8, 0x7C,          0x86, 0xDE, 0x9A, 0x9E, 0xF8, 0x70, 0x1F, 0x30, 0xB1, 0xA1, 0x38, 0x9B,          0xB8, 0xCA, 0x02, 0xF1, 0x47, 0x22, 0x47, 0xDF, 0x2F, 0x61, 0x13, 0xD2,          0x1E, 0x91, 0x24, 0x03, 0x8A, 0xF9, 0xA5, 0x54, 0x64, 0x3B, 0xA6, 0x87,          0x8D, 0xBB, 0xE3, 0xEA, 0x92, 0x6C, 0x84, 0x54, 0x6D, 0xA2, 0x19, 0xA7,          0xDA, 0xC2, 0xE8, 0x7C, 0xEF, 0x9E, 0xCF, 0xD0, 0xFE, 0x1E, 0xCB, 0xAB,          0x2E, 0x24, 0x84, 0x4D, 0x19, 0x3F, 0xB2, 0x13, 0xC5, 0x0E, 0x9B, 0x1C,          0x3C, 0xA4, 0x72, 0xA3 };  BYTE v6add2048[1056] = {          0x8A, 0xF9, 0xA5, 0x54, 0x64, 0x3B, 0xA6, 0x87, 0x8D, 0xBB, 0xE3, 0xEA,          0x92, 0x6C, 0x84, 0x54, 0x6D, 0xA2, 0x19, 0xA7, 0xDA, 0xC2, 0xE8, 0x7C,          0xEF, 0x9E, 0xCF, 0xD0, 0xFE, 0x1E, 0xCB, 0xAB, 0x2E, 0x24, 0x84, 0x4D,          0x19, 0x3F, 0xB2, 0x13, 0xC5, 0x0E, 0x9B, 0x1C, 0x3C, 0xA4, 0x72, 0xA3,          0xC1, 0xD7, 0x9F, 0x6A, 0xB4, 0x12, 0x2C, 0xDB, 0x14, 0x8E, 0xCC, 0x3E,          0x45, 0x80, 0x84, 0x3C, 0x5E, 0xD1, 0x65, 0x61, 0x12, 0xA1, 0xCD, 0xEF,          0x3D, 0x89, 0x7F, 0x4D, 0xF5, 0x32, 0x7E, 0x17, 0xC1, 0x89, 0x2D, 0x88,          0x71, 0x83, 0x8D, 0xEE, 0x9B, 0x94, 0xE1, 0x55, 0xAC, 0x69, 0x67, 0x9C,          0xF9, 0xA9, 0x40, 0xDB, 0x62, 0xE0, 0x3B, 0xE4, 0x8B, 0x31, 0x8C, 0xFA,          0xAA, 0x69, 0x1A, 0x98, 0x0E, 0xAF, 0xDC, 0x92, 0xDD, 0xE4, 0x16, 0x67,          0x71, 0x96, 0x38, 0xE1, 0xB6, 0x84, 0xA6, 0x95, 0x10, 0x38, 0xBD, 0x70,          0x77, 0x45, 0x7F, 0x6C, 0xCD, 0x3D, 0x21, 0xD8, 0x4D, 0xA5, 0x29, 0x2C,          0x54, 0xBE, 0xE6, 0xE2, 0xD0, 0x5D, 0x2D, 0x8D, 0x8E, 0x81, 0xAA, 0x51,          0xD4, 0xFE, 0xBD, 0x03, 0x3F, 0x04, 0x6C, 0x68, 0x5A, 0x93, 0x57, 0xC9,          0x78, 0x85, 0xB8, 0x05, 0xA5, 0xA7, 0xBC, 0xC6, 0x25, 0x75, 0x97, 0xFB,          0x90, 0xC8, 0x9A, 0x64, 0xD4, 0x71, 0x0F, 0xFD, 0x62, 0x21, 0xDB, 0x28,          0x7A, 0x88, 0xD8, 0xAA, 0x69, 0x45, 0xC9, 0x2F, 0x26, 0x14, 0x4D, 0x35,          0xBA, 0xED, 0x40, 0x2F, 0x83, 0xEE, 0x12, 0xB4, 0x9B, 0x63, 0x9B, 0x49,          0x1D, 0x9B, 0xBA, 0x73, 0x70, 0x94, 0x83, 0x32, 0x97, 0xBB, 0x73, 0x33,          0xAF, 0xFC, 0xD3, 0xCC, 0x50, 0x89, 0x02, 0x5F, 0xAB, 0x44, 0x7D, 0x49,          0x61, 0x9F, 0xE5, 0x70, 0x89, 0xBE, 0x8C, 0x11, 0xD5, 0x89, 0x33, 0x9B,          0x1D, 0x22, 0xBE, 0x89, 0xEA, 0x8A, 0x8B, 0x86, 0xBB, 0x52, 0xE8, 0x32,          0xB8, 0x71, 0x39, 0x1F, 0x97, 0x6F, 0x9D, 0xB8, 0xC2, 0x73, 0x71, 0x45,          0x45, 0x3A, 0x0B, 0xD9, 0x09, 0x8C, 0x9A, 0x68, 0x97, 0x86, 0xA9, 0xC0,          0xCF, 0x4D, 0x29, 0x3A, 0xDB, 0x4B, 0x4A, 0x00, 0x06, 0xF9, 0xDA, 0xAF,          0x51, 0xFB, 0x4E, 0x29, 0x05, 0x06, 0xC5, 0x62, 0x93, 0xFE, 0xB0, 0x08,          0x74, 0x71, 0xF1, 0xAF, 0x01, 0x30, 0x06, 0x64, 0x6B, 0x82, 0x36, 0x7C,          0x8C, 0x30, 0x4E, 0xED, 0x43, 0x3F, 0xA6, 0x0F, 0x2E, 0x80, 0x33, 0x85,          0xEB, 0x9F, 0x3F, 0x99, 0x58, 0xBB, 0x37, 0x7B, 0x85, 0x3D, 0x29, 0x2F,          0xF1, 0xCB, 0x6F, 0x30, 0xD1, 0xC7, 0xA9, 0xCD, 0xB0, 0x76, 0xA9, 0xDF,          0x33, 0x18, 0xE5, 0xF9, 0x29, 0xC5, 0x27, 0x49, 0x3E, 0x73, 0x68, 0x23,          0xE8, 0xAC, 0x8A, 0x3B, 0xD3, 0x89, 0xB9, 0xC4, 0xD3, 0xD6, 0x40, 0xDA,          0x21, 0xED, 0xC9, 0xA0, 0x59, 0xEB, 0xC7, 0x33, 0xF9, 0xD7, 0x85, 0x66,          0xA9, 0xB0, 0xBD, 0x73, 0xF3, 0x9B, 0x16, 0x23, 0xD3, 0x30, 0xDA, 0xEE,          0xA9, 0xD3, 0xEF, 0x71, 0xA6, 0xF9, 0x44, 0x8B, 0xF5, 0x57, 0xF0, 0xD3,          0x81, 0x6E, 0x5C, 0x44, 0x6B, 0xD8, 0x5F, 0x77, 0xF4, 0xD9, 0x8F, 0x40,          0x05, 0xB7, 0x99, 0x0A, 0xD0, 0xD6, 0xFE, 0xA2, 0xD0, 0x1E, 0x8F, 0x90,          0xB1, 0x13, 0xA0, 0x4B, 0x9A, 0xC5, 0x15, 0x05, 0xE5, 0x30, 0x7E, 0xFB,          0xCE, 0x38, 0x84, 0x69, 0x21, 0xB3, 0x02, 0x98, 0x6A, 0x11, 0x69, 0xBC,          0x33, 0x93, 0x3C, 0xDD, 0x63, 0x11, 0xDF, 0xC2, 0x80, 0x01, 0xA5, 0x02,          0xA7, 0x1A, 0xC4, 0xC2, 0xDB, 0x3B, 0x15, 0xDD, 0xEF, 0x02, 0x36, 0xB0,          0x15, 0x51, 0xD4, 0x4F, 0xE6, 0xC9, 0x37, 0xCC, 0x67, 0x57, 0xD9, 0xBA,          0xCC, 0xAD, 0xF3, 0xCF, 0xE5, 0xF7, 0x2F, 0x5E, 0x0A, 0xB8, 0x91, 0x78,          0xF6, 0xCC, 0xD9, 0xB9, 0xB0, 0x8D, 0xAA, 0x92, 0xAE, 0x48, 0xDA, 0xFA,          0x47, 0xB2, 0x55, 0x50, 0xB1, 0xCE, 0xBF, 0x6F, 0x3F, 0xB8, 0xAA, 0x69,          0x81, 0x69, 0x30, 0xEC, 0xA5, 0x7E, 0xD0, 0xF9, 0x8D, 0xBB, 0xF7, 0xD7,          0x0D, 0x06, 0x5A, 0x57, 0x17, 0xA5, 0x02, 0xA9, 0x19, 0xB7, 0x62, 0x7B,          0x83, 0x93, 0x0B, 0x17, 0xEF, 0xAE, 0xE5, 0xE7, 0x5A, 0x26, 0x7F, 0xBF,          0x51, 0xF2, 0x26, 0xD7, 0x8F, 0x6A, 0xA5, 0x5E, 0x90, 0x28, 0x1F, 0x72,          0x6F, 0x38, 0xC4, 0xED, 0x74, 0xF5, 0x39, 0x8F, 0xD5, 0x7F, 0xF1, 0x3B,          0x2C, 0xC1, 0xA4, 0x87, 0x4A, 0x34, 0xD6, 0x28, 0xB7, 0xBB, 0xE2, 0xDB,          0x81, 0xE9, 0x99, 0x34, 0x7F, 0xEE, 0x38, 0x33, 0xB3, 0x41, 0xC1, 0x5F,          0x30, 0x95, 0x90, 0x6A, 0xB4, 0x84, 0x22, 0x58, 0x97, 0xBE, 0xC8, 0x25,          0x22, 0x1C, 0x3F, 0x37, 0x26, 0xDC, 0xA1, 0x66, 0x98, 0x4B, 0xA9, 0x09,          0x65, 0x2B, 0x22, 0x41, 0x4C, 0x59, 0xB1, 0x08, 0x80, 0x30, 0x1A, 0xFD,          0xD5, 0x4C, 0xE1, 0x33, 0x91, 0x33, 0x07, 0x34, 0x8F, 0x1C, 0xA2, 0x28,          0x15, 0x42, 0x2F, 0x5E, 0xA8, 0x16, 0xD5, 0xE5, 0x5B, 0xE5, 0x8D, 0x3F,          0x83, 0xBB, 0xBA, 0x51, 0xD2, 0x7C, 0x97, 0xAB, 0x9B, 0x94, 0xF4, 0xB1,          0x1F, 0xA2, 0x82, 0x70, 0x76, 0x35, 0x6A, 0x70, 0x79, 0xE7, 0x05, 0xF0,          0x0B, 0xCE, 0x27, 0xDE, 0x8A, 0x1E, 0x07, 0x1B, 0x16, 0x87, 0x95, 0x91,          0x7A, 0xCF, 0x16, 0xFE, 0xD6, 0xBF, 0x45, 0xDE, 0x6B, 0x9E, 0x5B, 0xAC,          0xEF, 0x67, 0x47, 0xBE, 0x06, 0xD9, 0x93, 0x0F, 0xA8, 0xBC, 0x2B, 0xDF,          0x79, 0x45, 0x95, 0xC1, 0x0D, 0x49, 0x3A, 0xBC, 0xB2, 0xCE, 0x59, 0x6A,          0x3D, 0x4F, 0xEA, 0x6B, 0x1E, 0x02, 0x2A, 0x1A, 0x96, 0x7E, 0xD1, 0x2A,          0x1E, 0xAD, 0xCA, 0xD6, 0x51, 0xD4, 0x1A, 0xE7, 0x31, 0xC4, 0x38, 0x16,          0x6A, 0xD5, 0xC1, 0x97, 0x7F, 0x98, 0xF6, 0xC2, 0x71, 0xC9, 0x88, 0x10,          0x66, 0x35, 0xAB, 0x20, 0x0E, 0x53, 0x39, 0x59, 0x9F, 0x4A, 0x86, 0x5E,          0xCF, 0xA6, 0x76, 0x20, 0xF1, 0x8A, 0xC5, 0xB9, 0x9C, 0xA3, 0xFC, 0x47,          0xA4, 0x76, 0xA9, 0xA4, 0x35, 0xEB, 0xB6, 0xCC, 0x92, 0x53, 0x8B, 0x5B,          0x49, 0x38, 0x8D, 0x55, 0xFE, 0x07, 0x93, 0x08, 0x71, 0xE6, 0x72, 0xD4,          0x53, 0xD0, 0xE7, 0xDF, 0x50, 0x94, 0x49, 0x7D, 0xD8, 0x83, 0xDA, 0x31,          0x16, 0x13, 0x7B, 0xDE, 0x18, 0x69, 0x2B, 0x8E, 0x47, 0xEA, 0x65, 0x21,          0x4D, 0x1F, 0x3D, 0x2D, 0xBE, 0x56, 0x83, 0xF2, 0x32, 0xE9, 0x32, 0xAF,          0x01, 0x43, 0x4A, 0xED, 0x65, 0x04, 0x1A, 0x37, 0x17, 0xD4, 0x40, 0x11,          0x76, 0xB7, 0x78, 0xDD, 0xCC, 0x45, 0xC1, 0xDC, 0x58, 0x5A, 0x98, 0xB5,          0x67, 0x3F, 0x71, 0x51, 0x12, 0xA0, 0xFE, 0x2A, 0x51, 0x34, 0x78, 0xA8,          0xDB, 0x14, 0xE8, 0x3C, 0xBB, 0x19, 0x66, 0x4D, 0xAB, 0x5D, 0xEE, 0x8B,          0xB7, 0x57, 0x47, 0x77, 0xDD, 0x63, 0x87, 0x79, 0x6F, 0x3F, 0x49, 0x01,          0xF4, 0x5A, 0x4D, 0x6C, 0xF6, 0xE8, 0x1C, 0x2F, 0x0F, 0x98, 0xD6, 0x21,          0xD8, 0x48, 0xC0, 0xD5, 0xD7, 0x6C, 0x37, 0xAD, 0xA0, 0x3B, 0x4B, 0x61,          0xB7, 0x5A, 0x7D, 0x2B, 0x23, 0x97, 0x3D, 0xED, 0x2D, 0x5A, 0xAE, 0x7D,          0x86, 0xE3, 0x8A, 0xB2, 0xA1, 0x95, 0x10, 0x51, 0x18, 0xDD, 0x0D, 0x6B,          0xCC, 0xEB, 0x51, 0x3A, 0x04, 0xFD, 0xE0, 0xFA, 0xCC, 0x58, 0x96, 0x02,          0x84, 0xFA, 0xD9, 0x5D, 0xA7, 0x41, 0x85, 0xDF, 0x62, 0x05, 0x80, 0xC6,          0x0B, 0xE5, 0xF2, 0x67, 0xC5, 0xAC, 0xD6, 0xDA, 0xA1, 0x35, 0x86, 0x63,          0xF0, 0x26, 0x4B, 0xCC, 0x1B, 0x16, 0x2D, 0x22, 0x95, 0xF4, 0x7F, 0x19,          0xA6, 0xB7, 0xAF, 0x0C, 0xDB, 0xE0, 0x0E, 0x88, 0xEF, 0x92, 0x29, 0x96,          0x03, 0x3F, 0x52, 0xCB, 0x03, 0x66, 0xE0, 0xF1, 0x09, 0xD5, 0xA5, 0x21 };  BYTE v6add3072[1088] = {          0x1B, 0x16, 0x2D, 0x22, 0x95, 0xF4, 0x7F, 0x19, 0xA6, 0xB7, 0xAF, 0x0C,          0xDB, 0xE0, 0x0E, 0x88, 0xEF, 0x92, 0x29, 0x96, 0x03, 0x3F, 0x52, 0xCB,          0x03, 0x66, 0xE0, 0xF1, 0x09, 0xD5, 0xA5, 0x21, 0xF0, 0x4E, 0x6A, 0xFD,          0x69, 0x85, 0x0F, 0x09, 0xE0, 0x47, 0xC6, 0xDA, 0xDF, 0x01, 0xEA, 0x17,          0xC0, 0x14, 0x75, 0x0E, 0xAC, 0x33, 0xB5, 0xD2, 0xBC, 0x08, 0x8B, 0x26,          0x79, 0xB7, 0x24, 0xCA, 0x2C, 0x3B, 0x6C, 0x56, 0x5A, 0x63, 0xA5, 0xDB,          0xB0, 0x45, 0x22, 0x61, 0x2E, 0xD7, 0xDF, 0x71, 0x1A, 0x0A, 0x70, 0xC4,          0xEA, 0x61, 0x4F, 0xE5, 0x65, 0x25, 0x5B, 0x56, 0xC0, 0x79, 0x6D, 0x9B,          0x98, 0xAA, 0x9B, 0x9C, 0xE7, 0x8D, 0xEB, 0x58, 0x3C, 0x6C, 0x44, 0x4E,          0xB4, 0x1E, 0xB2, 0x52, 0x78, 0x08, 0x15, 0xD4, 0x81, 0x07, 0xA7, 0x89,          0xC4, 0x25, 0x6C, 0xD9, 0x65, 0xDF, 0xEF, 0xC2, 0x48, 0x45, 0xBF, 0xA4,          0xE5, 0x7D, 0xE0, 0xBA, 0x38, 0x43, 0x7E, 0xA5, 0x39, 0x8B, 0xE4, 0x71,          0xF6, 0x64, 0x7F, 0xFC, 0x19, 0x2B, 0x31, 0x22, 0xD4, 0xC3, 0x1B, 0x80,          0x66, 0x60, 0xC9, 0x32, 0x5A, 0x7A, 0x60, 0x7B, 0x73, 0x3E, 0x13, 0x37,          0xD5, 0xC5, 0x86, 0x5D, 0x50, 0xDC, 0xFB, 0x42, 0xDA, 0x95, 0x1E, 0x95,          0xD4, 0xF3, 0xC6, 0x5E, 0xFF, 0xCB, 0xF0, 0xC8, 0x3F, 0xEA, 0x2F, 0xCB,          0x44, 0x6B, 0x5E, 0x49, 0x7A, 0xEA, 0x1C, 0xFC, 0x7F, 0x6C, 0xC4, 0xF9,          0x3A, 0xBE, 0xFB, 0x5B, 0xFC, 0x0A, 0xA9, 0x91, 0xB7, 0x7F, 0x32, 0x38,          0xDC, 0x07, 0x6B, 0x8A, 0xB2, 0x75, 0x25, 0xD9, 0x72, 0x80, 0xE3, 0x84,          0x66, 0xBA, 0xBD, 0xF2, 0x6E, 0x9E, 0xD3, 0x24, 0x77, 0xB0, 0xBD, 0x7A,          0x2B, 0x92, 0xB9, 0xE1, 0xF8, 0xE9, 0x2C, 0x2D, 0x10, 0xA2, 0xFC, 0x34,          0xC7, 0x44, 0x5B, 0xCF, 0xFA, 0xB3, 0xB4, 0x46, 0x07, 0x46, 0x2F, 0x54,          0x01, 0xAF, 0xEB, 0x5D, 0x38, 0xEC, 0xC2, 0x3F, 0x51, 0x5D, 0xB7, 0xEB,          0xD6, 0x79, 0x18, 0xA6, 0x90, 0x6F, 0x49, 0x98, 0xAC, 0x13, 0x27, 0xCE,          0x56, 0x0D, 0xDA, 0x96, 0xB4, 0xDC, 0xD7, 0x81, 0x26, 0xEB, 0x0D, 0xF8,          0x5B, 0x66, 0x8E, 0xB1, 0xEA, 0x1A, 0x1C, 0xE6, 0xEB, 0x89, 0x1A, 0xBA,          0x6B, 0x72, 0x47, 0x3B, 0x71, 0x3C, 0x90, 0x00, 0x35, 0x7C, 0x39, 0xE2,          0x00, 0x2F, 0x01, 0x52, 0x34, 0xFE, 0xAF, 0x5D, 0x22, 0xB0, 0xF8, 0x61,          0x4D, 0xC9, 0x11, 0xC7, 0xE6, 0xDA, 0x97, 0xB9, 0x32, 0xE1, 0xF4, 0x70,          0xA0, 0xEE, 0xF6, 0x5D, 0xD1, 0xB5, 0x03, 0x0A, 0x2A, 0x86, 0x08, 0xB2,          0xE9, 0x96, 0x1B, 0x20, 0x64, 0x8F, 0x2C, 0xC5, 0x59, 0x1A, 0xCE, 0xB9,          0xFE, 0x37, 0x42, 0x87, 0xFD, 0x97, 0x48, 0xC7, 0x7D, 0x1D, 0x7A, 0x68,          0x5F, 0xA7, 0xBA, 0x78, 0x47, 0xF4, 0x5E, 0xA0, 0x53, 0xBD, 0x0E, 0xC0,          0xBE, 0x5E, 0x7E, 0x9A, 0xF6, 0x9C, 0xFC, 0xED, 0x6B, 0x91, 0x68, 0x3C,          0xCE, 0x2F, 0x12, 0xFF, 0x08, 0xC7, 0x7B, 0x4C, 0x31, 0xD1, 0xF7, 0x15,          0xE8, 0x98, 0x16, 0xD3, 0x00, 0xAB, 0x57, 0xF3, 0x03, 0x33, 0x6B, 0x48,          0x84, 0xB1, 0x27, 0x81, 0xC6, 0x27, 0x7A, 0x81, 0xE5, 0xB4, 0x96, 0xAC,          0x24, 0x6D, 0xC1, 0xF7, 0xC2, 0x51, 0xEB, 0x73, 0x00, 0x90, 0x2A, 0xC8,          0x1C, 0x0D, 0xCC, 0x9A, 0xB4, 0x6B, 0xDA, 0xE2, 0x2F, 0xE0, 0xAA, 0x1D,          0x5F, 0x3D, 0xF4, 0xF8, 0x9B, 0x65, 0x81, 0xC4, 0x06, 0x3C, 0x49, 0x8E,          0x5C, 0x6C, 0x36, 0x04, 0x20, 0x3D, 0xEE, 0x78, 0x1B, 0x90, 0x3D, 0x0F,          0xC5, 0x7A, 0x71, 0xC1, 0x40, 0x4B, 0x6E, 0x67, 0x95, 0x1E, 0xD6, 0x5A,          0x3E, 0x69, 0x26, 0x8C, 0x1B, 0x13, 0xF9, 0x5F, 0x0C, 0x62, 0x48, 0x2C,          0xAE, 0x17, 0x32, 0x47, 0xE5, 0xB6, 0x71, 0xCE, 0xEE, 0x32, 0x77, 0xE1,          0x41, 0x39, 0x04, 0xC4, 0x0B, 0x7B, 0x76, 0x40, 0x7F, 0x0F, 0xFE, 0xE6,          0x93, 0xA2, 0x43, 0xC7, 0xB5, 0xE0, 0x85, 0x0E, 0xE8, 0x1B, 0x58, 0x1D,          0x9F, 0xF1, 0x88, 0xD4, 0xC0, 0x5A, 0x53, 0xFB, 0x6B, 0xA1, 0x2E, 0xE2,          0xFB, 0x4F, 0xA6, 0x72, 0xB6, 0x64, 0x17, 0xD4, 0xB5, 0x88, 0x06, 0x7D,          0x3F, 0x22, 0xF9, 0xEF, 0x5E, 0x55, 0xE5, 0x3A, 0x17, 0xF4, 0xE8, 0x25,          0x94, 0xCE, 0x07, 0x22, 0xAB, 0xEE, 0x9A, 0xD4, 0x20, 0x03, 0x3E, 0x51,          0x05, 0x43, 0x96, 0x8A, 0x37, 0x7D, 0xE6, 0x49, 0x41, 0x21, 0x30, 0x41,          0xDC, 0xAD, 0x59, 0xDB, 0x0C, 0xD2, 0xB0, 0xE7, 0x4D, 0xCF, 0x90, 0x92,          0x8C, 0x82, 0xD8, 0x3E, 0xAC, 0x92, 0x11, 0x17, 0x7D, 0x46, 0x9A, 0xA1,          0xE3, 0xEF, 0x99, 0x73, 0x8B, 0x0E, 0x12, 0x92, 0x1A, 0xC4, 0x75, 0x0B,          0x45, 0x1F, 0xB4, 0xEE, 0xFE, 0x8E, 0xB0, 0x02, 0x1C, 0x26, 0x95, 0x54,          0x60, 0x3A, 0x36, 0x3C, 0xB9, 0xB7, 0x65, 0x3F, 0xBC, 0x62, 0xCB, 0x57,          0xC9, 0xFD, 0xCF, 0x30, 0x7A, 0x1E, 0xD9, 0x7B, 0x7F, 0xD5, 0x2F, 0xFE,          0x52, 0x7C, 0x1F, 0x2D, 0x9B, 0xD8, 0xAE, 0x9B, 0xAC, 0x27, 0xCC, 0xEF,          0x76, 0xCE, 0xEF, 0x73, 0x37, 0xB4, 0x53, 0x37, 0xE7, 0xF0, 0x3E, 0xF0,          0x47, 0x82, 0xA6, 0x82, 0xCC, 0x1A, 0xA5, 0x53, 0x66, 0x57, 0x8C, 0xE0,          0x01, 0x22, 0x0E, 0x32, 0x70, 0x7E, 0x57, 0xE5, 0x09, 0x92, 0xC1, 0x60,          0x78, 0x88, 0x3B, 0x2F, 0x69, 0x42, 0xBB, 0xE1, 0x2F, 0xD3, 0xB8, 0x10,          0xE7, 0xE9, 0x94, 0x2E, 0x9E, 0x18, 0x3A, 0xED, 0xC1, 0x1C, 0xDD, 0xBF,          0x65, 0xEC, 0xC8, 0xE8, 0xB0, 0x74, 0x50, 0xAD, 0x7D, 0x0C, 0x80, 0x07,          0xA1, 0x96, 0x3C, 0x3F, 0x9F, 0x98, 0xB2, 0x6C, 0x96, 0x65, 0xE6, 0xED,          0x48, 0x5C, 0xB3, 0x59, 0xC4, 0x7F, 0x25, 0x6E, 0x48, 0x1D, 0x36, 0xC5,          0xD4, 0xC8, 0xC9, 0xA2, 0xB8, 0x0C, 0x57, 0xDC, 0x0A, 0xB9, 0xA4, 0x4B,          0x88, 0xF0, 0x53, 0x2E, 0xD4, 0xDA, 0x67, 0x6C, 0x62, 0xE6, 0x7E, 0x41,          0xD8, 0xCB, 0x7F, 0x71, 0xC5, 0xA0, 0xB6, 0x40, 0x5D, 0x8A, 0xBB, 0x55,          0x6A, 0xD6, 0x61, 0x58, 0x80, 0x3F, 0xF3, 0x31, 0x5B, 0x64, 0xF4, 0x1A,          0xE4, 0x85, 0x0E, 0xE3, 0xD5, 0xC4, 0x6B, 0x69, 0x01, 0x00, 0x6D, 0x1A,          0xFB, 0xE4, 0x31, 0x1C, 0x20, 0x35, 0x68, 0x46, 0x7A, 0x5D, 0x36, 0xBB,          0xC1, 0x40, 0x63, 0xBB, 0xFF, 0xC1, 0x67, 0xE4, 0x31, 0xD3, 0xA6, 0x00,          0x7E, 0xB5, 0x86, 0xD3, 0x83, 0x0C, 0xA0, 0x70, 0xB8, 0xF4, 0x5B, 0xE0,          0x94, 0xC9, 0x5F, 0x48, 0x0F, 0x1B, 0x0B, 0x4F, 0xC8, 0x59, 0xDA, 0x44,          0x90, 0xC5, 0x36, 0xAD, 0xAA, 0xFD, 0xC4, 0xE8, 0xE2, 0x38, 0xB7, 0x1C,          0x2E, 0x2F, 0x22, 0xE4, 0x1E, 0xE4, 0x34, 0x81, 0x9F, 0xCE, 0x8C, 0xC3,          0x66, 0x13, 0xC5, 0x31, 0x2D, 0x5D, 0x3D, 0xF0, 0xBE, 0x14, 0xCE, 0xB8,          0x90, 0x7B, 0x7F, 0xB1, 0x33, 0x2E, 0xC2, 0x96, 0x95, 0xEB, 0xAE, 0x71,          0x11, 0xD9, 0xC1, 0x52, 0x1D, 0x04, 0xA1, 0x37, 0x85, 0xCA, 0x9B, 0x68,          0x02, 0xC8, 0x53, 0x18, 0xF4, 0xB8, 0x8E, 0x72, 0x74, 0x32, 0x34, 0xB1,          0x5D, 0x7E, 0x91, 0x0B, 0x38, 0xB2, 0x7A, 0xFE, 0xAB, 0x9E, 0xE8, 0x8C,          0x09, 0x9A, 0x7E, 0xD9, 0x57, 0x7B, 0x7F, 0x86, 0x92, 0x1B, 0xBD, 0x04,          0x9A, 0x79, 0x13, 0x93, 0x97, 0x72, 0x19, 0x49, 0x38, 0xEB, 0x40, 0x10,          0x49, 0xEA, 0xE0, 0x89, 0x8C, 0x1B, 0x7A, 0x9E, 0xF3, 0x53, 0x84, 0x1B,          0x5B, 0x21, 0x47, 0x1A, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x5D, 0x34, 0x3B,          0xE0, 0x95, 0x00, 0x18, 0x5D, 0x18, 0x24, 0x23, 0x1C, 0xD6, 0x72, 0xBD,          0x36, 0x8C, 0xCC, 0x32, 0xCB, 0x62, 0x6A, 0x5A, 0x83, 0x6D, 0x6F, 0xD5,          0xFE, 0x93, 0xA0, 0xC3, 0xF1, 0x2C, 0xEF, 0xE6, 0xDF, 0x6D, 0xC3, 0x25,          0x9D, 0x3E, 0x98, 0xC2, 0xEE, 0xFF, 0xAF, 0x3A };  BYTE v6add0[1072] = {          0x16, 0xEF, 0xD8, 0xC8, 0x1F, 0x71, 0xD5, 0xA1, 0x66, 0x3B, 0x78, 0xFB,          0x5E, 0xD5, 0x68, 0x15, 0xDF, 0x27, 0xA4, 0x0A, 0xC8, 0x98, 0x19, 0x7D,          0x90, 0xB9, 0x1E, 0x94, 0x6B, 0x7B, 0x18, 0x4B, 0xAF, 0xE7, 0xBF, 0x70,          0x9E, 0x60, 0x6D, 0xF7, 0x2B, 0x2B, 0x35, 0x67, 0x49, 0x04, 0x4D, 0xE6,          0xD9, 0x15, 0xE7, 0xDC, 0xC5, 0x3A, 0xB3, 0xFA, 0xB1, 0x95, 0x08, 0x2C,          0x9F, 0xEE, 0x87, 0x57, 0x0B, 0x4F, 0x3C, 0x06, 0xF7, 0xF3, 0xA2, 0x16,          0xD9, 0xAA, 0x73, 0xAD, 0x49, 0xB0, 0xB6, 0x12, 0x64, 0x22, 0x96, 0x27,          0x61, 0x5C, 0x4F, 0x9B, 0xDC, 0x14, 0x1E, 0x9B, 0xA9, 0x0F, 0xF7, 0x50,          0xAA, 0xAF, 0xE0, 0xFC, 0x6E, 0xA9, 0x01, 0x01, 0x15, 0x9B, 0x56, 0x28,          0x19, 0xB1, 0xFA, 0xAD, 0x42, 0x64, 0x08, 0x15, 0x52, 0x62, 0x20, 0xF6,          0x8F, 0xF7, 0x80, 0x85, 0x13, 0x72, 0xEC, 0x70, 0x9E, 0x36, 0xA9, 0x55,          0x55, 0x98, 0x91, 0x14, 0x02, 0x49, 0x18, 0x49, 0x46, 0x51, 0x36, 0x57,          0x54, 0x3E, 0xB0, 0x85, 0x7C, 0xAE, 0xE3, 0x38, 0xA2, 0xC1, 0x01, 0xA9,          0x00, 0x34, 0x49, 0x6D, 0x70, 0xC7, 0x78, 0x81, 0x4B, 0xED, 0x16, 0xD3,          0xB3, 0x81, 0x22, 0xDA, 0x23, 0x7C, 0x2C, 0x45, 0x98, 0x07, 0x67, 0x48,          0x27, 0x85, 0xCA, 0xDB, 0x48, 0xB7, 0x63, 0xBB, 0x99, 0xA9, 0xB3, 0x43,          0x63, 0x7D, 0x9C, 0x61, 0x74, 0xAE, 0x74, 0x52, 0x20, 0xF7, 0x5E, 0xEB,          0xD8, 0x08, 0x61, 0x4C, 0x9F, 0x53, 0x90, 0x9A, 0xCF, 0x4A, 0xBE, 0x24,          0x7F, 0x77, 0xF9, 0x01, 0x27, 0xCB, 0xC1, 0x51, 0x3B, 0x9A, 0x17, 0xC9,          0x19, 0x8D, 0x2B, 0x92, 0xCB, 0xDF, 0xCF, 0x4D, 0x6F, 0xE2, 0x1F, 0x65,          0x3F, 0x86, 0x12, 0x6E, 0x09, 0x4A, 0xF8, 0xC3, 0x3F, 0x91, 0xD8, 0x92,          0xC4, 0x92, 0x04, 0xBD, 0x47, 0x79, 0x77, 0xB9, 0x92, 0x51, 0x4B, 0x5A,          0x57, 0x9F, 0x68, 0x5A, 0x89, 0x9F, 0x2F, 0xC3, 0x52, 0x42, 0x97, 0xC7,          0xB3, 0xED, 0xA4, 0xB2, 0xD3, 0x9D, 0xD5, 0x84, 0x6F, 0x3C, 0xF8, 0xE9,          0xC4, 0x9E, 0xF9, 0xA2, 0xFB, 0x29, 0x16, 0xED, 0x8A, 0x9E, 0x57, 0x58,          0x04, 0x03, 0x90, 0x06, 0x94, 0x19, 0xA6, 0x97, 0xBD, 0x6E, 0xE0, 0x09,          0x1F, 0x5A, 0x4D, 0x66, 0x59, 0x83, 0xB8, 0x7E, 0x1D, 0xB2, 0x8A, 0x93,          0xF0, 0x49, 0xD1, 0x03, 0xC7, 0x39, 0x77, 0xF6, 0x07, 0xCE, 0xCE, 0x11,          0xC8, 0x08, 0x49, 0x07, 0x72, 0x6D, 0x94, 0x1A, 0x2D, 0xCB, 0x8A, 0xDC,          0x2A, 0xC8, 0xD9, 0x06, 0x72, 0xD8, 0x43, 0x46, 0x90, 0xBF, 0xEC, 0x8A,          0x53, 0xE5, 0xE3, 0xED, 0x34, 0x1E, 0x6F, 0x78, 0x81, 0x64, 0x9A, 0xBA,          0x50, 0x6C, 0xB7, 0xBE, 0xE2, 0x7D, 0x03, 0x7D, 0x32, 0x2F, 0xD3, 0xA3,          0x6E, 0xB9, 0xD8, 0x75, 0x77, 0xF1, 0x27, 0x1E, 0x6A, 0x52, 0x9C, 0x9F,          0x47, 0xDE, 0xA7, 0xBA, 0xB8, 0x5A, 0xB9, 0xAD, 0x03, 0x56, 0xF2, 0x30,          0x36, 0x16, 0x9B, 0xE9, 0x29, 0xB6, 0xB8, 0xCD, 0xA3, 0x66, 0x40, 0x87,          0x5D, 0xE4, 0xF1, 0xF1, 0x67, 0x32, 0x12, 0x51, 0xD8, 0xA8, 0xC2, 0x88,          0x76, 0x9F, 0x6A, 0x81, 0x5D, 0x34, 0xCF, 0xDA, 0x5B, 0xD9, 0x05, 0xA7,          0x67, 0x9C, 0x47, 0x16, 0xB0, 0x31, 0x78, 0x76, 0x18, 0xD0, 0xCD, 0x86,          0xC3, 0x11, 0x09, 0xD5, 0xB5, 0x84, 0x2D, 0x70, 0xDB, 0x37, 0xCE, 0xD5,          0x80, 0x23, 0xD6, 0x6E, 0x40, 0x8E, 0x8E, 0xA1, 0x03, 0x59, 0xFE, 0x2D,          0xF4, 0x7C, 0x89, 0xDC, 0x67, 0x8D, 0xC1, 0x46, 0xE1, 0xFC, 0xD9, 0xBC,          0xC0, 0xD6, 0x02, 0x2D, 0x51, 0x3A, 0x99, 0x18, 0xDA, 0x14, 0x6C, 0xCC,          0xF1, 0xCF, 0x62, 0x03, 0x2A, 0x81, 0x63, 0x5A, 0x66, 0x42, 0x0E, 0x75,          0xE3, 0x65, 0x15, 0xDE, 0x90, 0x39, 0x33, 0xD6, 0xFC, 0x48, 0x56, 0x83,          0x5B, 0xB9, 0x9A, 0x8C, 0x33, 0x27, 0xB1, 0x25, 0x0E, 0xAE, 0x43, 0x15,          0x70, 0xCA, 0x3B, 0xC3, 0x70, 0x5D, 0x1B, 0xFD, 0x1E, 0x29, 0x95, 0x5A,          0x5A, 0x19, 0x67, 0x79, 0x8D, 0x25, 0x88, 0x51, 0x4C, 0x9F, 0xCF, 0x87,          0xF4, 0x47, 0x6B, 0x89, 0xF9, 0x38, 0x2D, 0xE1, 0x7A, 0x54, 0x59, 0x80,          0x47, 0x56, 0x6A, 0xF5, 0xD9, 0x2E, 0xD7, 0x3A, 0x0D, 0x94, 0xC9, 0x82,          0x9C, 0x93, 0x93, 0x7B, 0x01, 0x0B, 0x23, 0xA6, 0x55, 0x35, 0xEE, 0x4D,          0x8E, 0xB8, 0xCD, 0xD6, 0x5D, 0x0F, 0xB2, 0x27, 0xE7, 0xDE, 0xDE, 0x07,          0xBD, 0xD5, 0xB1, 0xE2, 0x51, 0x41, 0x60, 0x1D, 0x79, 0xD3, 0x65, 0xB1,          0x36, 0x0B, 0x5E, 0xD7, 0x81, 0x4F, 0x54, 0x33, 0x23, 0xC4, 0x4C, 0x4E,          0x1A, 0x43, 0x1C, 0xBD, 0x9C, 0x4B, 0xB0, 0xF1, 0xC9, 0xCE, 0x1B, 0xFB,          0x3C, 0x12, 0x72, 0x40, 0x4B, 0x3F, 0xEE, 0x74, 0xE6, 0xB7, 0xF2, 0xCB,          0xB5, 0xCE, 0xE7, 0xF9, 0x45, 0x53, 0x78, 0xBA, 0x70, 0xA6, 0x9D, 0x59,          0xF2, 0x1D, 0x01, 0xF2, 0xEC, 0x20, 0x02, 0xE3, 0x6B, 0x6A, 0x7A, 0x53,          0x5F, 0x25, 0xD4, 0x0B, 0x47, 0xEE, 0x24, 0x20, 0xEB, 0xE5, 0x9C, 0x03,          0x96, 0x3D, 0xA6, 0x3F, 0x90, 0xC6, 0x31, 0x9C, 0x5C, 0x37, 0x40, 0x60,          0x8B, 0x50, 0xB7, 0x7B, 0xCF, 0x7F, 0x3D, 0x65, 0x7F, 0x72, 0x3C, 0xF6,          0x5C, 0xF5, 0x5C, 0xD1, 0x8D, 0x42, 0x01, 0x8A, 0xF6, 0xCB, 0xCC, 0xB9,          0x38, 0x74, 0x71, 0x7D, 0x61, 0x33, 0xFB, 0xDC, 0x40, 0x4F, 0x67, 0x0F,          0x27, 0x0E, 0x62, 0x99, 0x39, 0x4E, 0x7D, 0xC6, 0x8D, 0xE5, 0x7C, 0xE0,          0xE3, 0x56, 0xB9, 0x69, 0x17, 0x57, 0x61, 0x8A, 0x00, 0xA5, 0x41, 0xF0,          0xF9, 0x20, 0x6E, 0x90, 0x47, 0x34, 0x4F, 0x45, 0x40, 0x53, 0x42, 0xEC,          0xC2, 0x66, 0xAC, 0x42, 0xCB, 0x23, 0xD1, 0x39, 0xB6, 0x58, 0x2A, 0x36,          0xFA, 0xBE, 0x1B, 0x67, 0xF3, 0x2B, 0xE3, 0x78, 0x42, 0x55, 0x18, 0x0B,          0x2E, 0xD4, 0xED, 0x80, 0xC1, 0xC2, 0xE2, 0x2C, 0xCC, 0x5F, 0xCE, 0xEA,          0x8C, 0xE4, 0x9B, 0xDD, 0x69, 0x39, 0x06, 0xC7, 0xA7, 0x7E, 0x49, 0x5F,          0x6A, 0x71, 0xEC, 0x73, 0x46, 0x72, 0x82, 0xCE, 0x9B, 0x5B, 0x6D, 0x01,          0x6B, 0x7C, 0x3D, 0xD4, 0x65, 0x58, 0xF3, 0x1F, 0x70, 0x2D, 0x3D, 0x67,          0x89, 0xC6, 0xC5, 0xAF, 0x13, 0xC1, 0xDC, 0x7F, 0xB7, 0xA1, 0x88, 0x65,          0x96, 0x71, 0xBB, 0x54, 0x06, 0xD4, 0x1E, 0xA1, 0xEF, 0x09, 0x62, 0x6F,          0x66, 0xEB, 0xB4, 0x5C, 0xD5, 0x08, 0x63, 0xEE, 0x92, 0x8A, 0x02, 0x5D,          0x61, 0x27, 0xAF, 0x97, 0xC6, 0x5F, 0x2B, 0xE9, 0xE4, 0x9B, 0x6D, 0xF9,          0xE5, 0x28, 0x8F, 0x56, 0x6B, 0x68, 0x81, 0xB9, 0xBB, 0x22, 0x2A, 0x39,          0x28, 0x8F, 0x4C, 0x8E, 0x1A, 0x70, 0x57, 0xF1, 0xEA, 0xF9, 0xD8, 0xE9,          0xD6, 0x48, 0xFE, 0xF4, 0x1B, 0xA4, 0x51, 0x30, 0xE3, 0xF3, 0x30, 0x4B,          0x45, 0x28, 0xD6, 0xC9, 0x1A, 0x99, 0x5C, 0x27, 0x57, 0x6A, 0xC2, 0x2E,//c          0x91, 0x7A, 0x74, 0x93, 0x38, 0xD6, 0x7B, 0x82, 0x88, 0x54, 0x59, 0x3E,          0xE0, 0x47, 0x89, 0xB1, 0x10, 0xAE, 0x25, 0x61, 0xDB, 0x29, 0x4F, 0x0E,          0xFB, 0x3B, 0x50, 0x67, 0xE3, 0x97, 0xA4, 0x56, 0x51, 0x67, 0x4D, 0x58,          0x37, 0xF3, 0xCF, 0xEE, 0x94, 0xE7, 0x83, 0xFD, 0x68, 0xDB, 0x0B, 0x37,          0xC3, 0x71, 0x5F, 0xD2, 0x79, 0x70, 0x31, 0x06, 0x76, 0x5E, 0x2F, 0x8B,          0x27, 0xDF, 0xE0, 0xAD, 0xE3, 0x72, 0x72, 0xDF, 0x79, 0x3E, 0x25, 0x32,          0x42, 0x90, 0xAE, 0xF6, 0xC1, 0x99, 0x64, 0xC7, 0x5F, 0x70, 0x2A, 0xFD,          0x4B, 0x5F, 0x65, 0xAA, 0x5A, 0xEF, 0x7E, 0x99, 0xF7, 0x08, 0x5E, 0xF1,          0x77, 0x84, 0xC8, 0xBE, 0xC1, 0x18, 0x0E, 0x71, 0x6D, 0x8A, 0xD5, 0xED,          0x77, 0x6D, 0x66, 0x8F, 0x90, 0x7A, 0x53, 0xFC, 0x4E, 0x41, 0x1F, 0xFB,          0x5C, 0x13, 0xAE, 0xA5 };  byte temp[4] = { 0 };  byte temp2[3] = { 0 };  BYTE s1[4] = { 0 };  BYTE s2[4] = { 0 };  BYTE s3[4] = { 0 };  BYTE s4[4] = { 0 };  int fanzhuang(byte s[])  {                    for (int i = 0; i < 4; i++)//内存的存储顺序是反过来的,这里反回去          {                  int a = 3;                  temp[a - i] = s[i];            }          for (int i = 0; i < 4; i++)          {                                    s[i] = temp[i];          }          return 1;  }  int ByteAdd(byte a[], byte b[],byte temp1[])  {          for (int i = 0; i < 4; i++)          {                  temp1[i] = a[i] + b[i];                  if (temp1[i]<b[i])                  {                                                     if (i > 0)                          {                                  temp1[i - 1] = temp1[i - 1] + 0x1;                          }                                                                      }                            }          /*for (int i = 0; i < 4; i++)          {                  printf("----");                  printf("%x", temp1[i]);            }*/          return 0;    }  void ComplexCala(byte s4[], byte s1[], byte s2[], byte s3[], byte temp[], byte temp2[], byte av3[])  {          ByteAdd(s4, s1, temp);          for (int i = 0; i < 4; i++)          {                  temp2[i] = temp[i] ^ s2[i];          }          ByteAdd(s3, temp2, temp);          for (int i = 0; i < 4; i++)          {                  temp2[i] = temp[i] ^ av3[i];            }  }  void Getdata(byte s4[], byte s1[], byte s2[], byte s3[], byte x[])  {          for (int i = 0; i < 4; i++)          {                    s1[i] = v6add1024[x[1] * 4 + i];                  s2[i] = v6add2048[x[2] * 4 + i];                  s3[i] = v6add3072[x[3] * 4 + i];                  s4[i] = v6add0[x[0] * 4 + i];          }          fanzhuang(s1);          fanzhuang(s2);          fanzhuang(s3);          fanzhuang(s4);  }    void main()  {          BYTE av3[4] = {0xd0, 0x13, 0xef, 0x76};          BYTE wv11[] = { 0x44, 0x72, 0x69, 0x76, 0x65, 0x20, 0x50, 0x6F };          BYTE v3[4] = { 0xAA ,0x17, 0xA5,0xE6, };          BYTE key[] = { 0x35, 0x44, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30 };          BYTE v4[4] = { 0 };          BYTE v21[4] = { 0 };          BYTE a3[4] = { 0 };          BYTE CODE[9] ={0};          BYTE v23[4] = { 0 };          BYTE v20[4] = { 0 };          BYTE v19[4] = { 0 };          for (int i = 0; i < 8;i++)// 对应nameOrcompany[v11] ^= *((_BYTE *)v1 + v11 + 684);的反过程          {                  CODE[i] = wv11[i] ^ key[i];            }            for (int i = 0; i < 4; i++)//内存的存储顺序是反过来的,这里反回去          {                   int a = 3;                  v4[a - i] = CODE[i];                    }          for (int i = 4; i < 8; i++)//内存的存储顺序是反过来的,这里反回去          {                  int a = 7;                  a3[a - i] = CODE[i];                  }          printf("n");          printf("a3=");          for (int i = 0; i < 4; i++)//a3          {                  printf("%x", a3[i]);          }          printf("n");          printf("v23=");          for (int i = 0; i < 4; i++)//对应代码v23 ^ *v3;的反过程               {                  v23[i] = v4[i] ^ v3[i];                  printf("%x", v23[i]);          }          printf("n");          printf("%xn", v23[1]);                Getdata(s4, s1, s2, s3, v23);//模拟通过偏移获取地址里的值          printf("n");          printf("--------------------------n");           ByteAdd(s4, s1, temp);    //模拟取出的值相加          for (int i = 0; i < 4; i++)          {                  temp2[i] = temp[i] ^ s2[i];//模拟异或          }            ByteAdd(s3, temp2, temp);          for (int i = 0; i < 4; i++)          {                  temp2[i] = temp[i] ^ av3[i];                            }          printf("aaaaaaaaaaaaaaaaaaaaaan");          printf("v21=");          for (int i = 0; i < 4; i++)          {                  v21[i]=temp2[i];                  printf("%x", v21[i]);          }          printf("n");          printf("v20=");          for (int i = 0; i < 4; i++)          {                  v20[i] = v21[i] ^ a3[i];                  printf("%x", v20[i]);          }printf("n");                Getdata(s4, s1, s2, s3, v20);          BYTE av4[4] = {                  0x03, 0x07, 0xDD, 0x7D };          fanzhuang(av4);          ComplexCala(s4, s1, s2, s3, temp, temp2, av4);//计算结果在temp2中          printf("n");          printf("v19=");          for (int i = 0; i < 4; i++)          {                  v19[i]=v23[i] ^ temp2[i];                  printf("%x", v19[i]);          }              Getdata(s4, s1, s2, s3, v19);          BYTE av5[4] = {                  0x7D, 0xCE, 0x8D, 0x04 };          BYTE v18[4] = {0};          fanzhuang(av5);          ComplexCala(s4, s1, s2, s3, temp, temp2, av5);          printf("n");          printf("v18=");          for (int i = 0; i < 4; i++)          {                  v18[i] = v20[i] ^ temp2[i];                  printf("%x", v18[i]);          }              Getdata(s4, s1, s2, s3, v18);          BYTE av6[4] = {                  0x37, 0x49, 0xCB, 0x3E };          BYTE v17[4] = { 0 };          fanzhuang(av6);          ComplexCala(s4, s1, s2, s3, temp, temp2, av6);          printf("n");          printf("v17=");          for (int i = 0; i < 4; i++)          {                  v17[i] = v19[i] ^ temp2[i];                  printf("%x", v17[i]);          }              Getdata(s4, s1, s2, s3, v17);          BYTE v16[4] = { 0 };          BYTE av7[4] = {                  0x16, 0xB0, 0x54, 0xCB };          fanzhuang(av7);          ComplexCala(s4, s1, s2, s3, temp, temp2, av7);          printf("n");          printf("v16=");          for (int i = 0; i < 4; i++)          {                  v16[i] = v18[i] ^ temp2[i];                  printf("%x", v16[i]);          }              Getdata(s4, s1, s2, s3, v16);          BYTE v15[4] = { 0 };          BYTE av8[4] = {                  0xDD, 0xB2, 0x16, 0x07 };          fanzhuang(av8);          ComplexCala(s4, s1, s2, s3, temp, temp2, av8);          printf("n");          printf("v15=");          for (int i = 0; i < 4; i++)          {                  v15[i] = v17[i] ^ temp2[i];                  printf("%x-", v15[i]);          }                          Getdata(s4, s1, s2, s3, v15);          BYTE v14[4] = { 0 };          BYTE av9[4] = {                  0x55, 0x32, 0x46, 0x7E };          fanzhuang(av9);          ComplexCala(s4, s1, s2, s3, temp, temp2, av9);          printf("n");          printf("v14=");          for (int i = 0; i < 4; i++)          {                  v14[i] = v16[i] ^ temp2[i];                  printf("%x ", v14[i]);          }                Getdata(s4, s1, s2, s3, v14);          BYTE v13[4] = { 0 };          BYTE av10[4] = {                  0xB1, 0xA1, 0xFC, 0x0B };          fanzhuang(av10);          ComplexCala(s4, s1, s2, s3, temp, temp2, av10);          printf("n");          printf("v13=");          for (int i = 0; i < 4; i++)          {                  v13[i] = v15[i] ^ temp2[i];                  printf("%x", v13[i]);          }                      Getdata(s4, s1, s2, s3, v13);          BYTE v12[4] = { 0 };          BYTE av11[4] = {                  0xD5, 0xB5, 0x3B, 0xE3 };          fanzhuang(av11);          ComplexCala(s4, s1, s2, s3, temp, temp2, av11);          printf("n");          printf("v12=");          for (int i = 0; i < 4; i++)          {                  v12[i] = v14[i] ^ temp2[i];                  printf("%x-", v12[i]);          }                Getdata(s4, s1, s2, s3, v12);          BYTE v11[4] = { 0 };          BYTE av12[4] = {                  0x77, 0x8B, 0x5A, 0x00 };          fanzhuang(av12);          ComplexCala(s4, s1, s2, s3, temp, temp2, av12);          printf("n");          printf("v11=");          for (int i = 0; i < 4; i++)          {                  v11[i] = v13[i] ^ temp2[i];                  printf("%x-", v11[i]);          }                Getdata(s4, s1, s2, s3, v11);          BYTE v10[4] = { 0 };          BYTE av13[4] = {                  0x70, 0x5C, 0x24, 0x38 };          fanzhuang(av13);          ComplexCala(s4, s1, s2, s3, temp, temp2, av13);          printf("n");          printf("v10=");          for (int i = 0; i < 4; i++)          {                  v10[i] = v12[i] ^ temp2[i];                  printf("%x", v10[i]);          }              Getdata(s4, s1, s2, s3, v10);          BYTE v9[4] = { 0 };          BYTE av14[4] = {                  0x0C, 0xA4, 0x58, 0xDE };          fanzhuang(av14);          ComplexCala(s4, s1, s2, s3, temp, temp2, av14);          printf("n");          printf("v9=");          for (int i = 0; i < 4; i++)          {                  v9[i] = v11[i] ^ temp2[i];                  printf("%x", v9[i]);          }                Getdata(s4, s1, s2, s3, v9);          BYTE v8[4] = { 0 };          BYTE av15[4] = {                  0x55, 0xF9, 0x4D, 0x7A };          fanzhuang(av15);          ComplexCala(s4, s1, s2, s3, temp, temp2, av15);          printf("n");          printf("v8=");          for (int i = 0; i < 4; i++)          {                  v8[i] = v10[i] ^ temp2[i];                  printf("%x", v8[i]);          }                  Getdata(s4, s1, s2, s3, v8);          BYTE v7[4] = { 0 };          BYTE av16[4] = {                  0x58, 0x86, 0x25, 0x4B };          fanzhuang(av16);          ComplexCala(s4, s1, s2, s3, temp, temp2, av16);          printf("n");          printf("v7=");          for (int i = 0; i < 4; i++)          {                  v7[i] = v9[i] ^ temp2[i];                  printf("%x ", v7[i]);          }              Getdata(s4, s1, s2, s3, v7);          BYTE v5[4] = { 0 };          BYTE av17[4] = {                  0x01, 0xE0, 0xF8, 0x18 };          fanzhuang(av17);          ComplexCala(s4, s1, s2, s3, temp, temp2, av17);          printf("n");          printf("v5=");          for (int i = 0; i < 4; i++)          {                  v5[i] = v8[i] ^ temp2[i];                  printf("%x-", v5[i]);          }          printf("n");          printf("n");          printf("n");          BYTE seriaL[4] = { 0 };          BYTE seriaL2[4] = { 0 };          BYTE this68[4] = {                  0x81, 0x3E, 0x88, 0x53 };          BYTE this64[4] = {                  0x3C, 0x3A, 0xE3, 0x49 };          fanzhuang(this68);          fanzhuang(this64);          printf("this68=");          for (int i = 0; i < 4; i++)          {                                    printf("%X-", this68[i]);          }          printf("n");          printf("serial=FA-");                    for (int i = 0; i < 4; i++)          {                  seriaL[i] = v5[i] ^ this68[i];                  printf("%X-", seriaL[i]);          }          printf("n");          Getdata(s4, s1, s2, s3, v5);          ByteAdd(s4, s1, temp);          for (int i = 0; i < 4; i++)          {                  temp2[i] = temp[i] ^ s2[i];          }            ByteAdd(s3, temp2, temp);          for (int i = 0; i < 4; i++)          {                  temp2[i] = temp[i] ^ this64[i];            }            printf("serial2=");            for (int i = 0; i < 4; i++)          {                  seriaL2[i] = v7[i] ^ temp2[i];                  printf("%X-", seriaL2[i]);          }          printf("-FC");                                          //right          printf("n");          system("pause");    }

这个可以和那个加密函数对照着看,应该不难看懂,
关于注册机,修改key数字的后6位即可生成不同的注册码,后六位必须30-39之间。
0x4结束

注册码:FA52-5CC8-604A-F531-17FC
最后上个效果图。
文章同时发布于52破解与看雪论坛
看雪id:下咯
程序,代码,IDA文件都在连接里
链接:https://pan.baidu.com/s/1v340v02iSViWByoR8Zq5Fw
提取码:etw4

部分文章来自互联网,侵权删除www.a1fz.com/

www.a1fz.com A1fz网专注于福利分享,各种破解软件学习资料,视频教程等等,如有侵权告知管理员删除
A1fz.com,福利吧,宅男福利,宅男,福利社,福利,有福利 » [原创] [原创]Drive Power Manager1.10注册算法逆向及注册机编写

发表评论