文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:首页精文荟萃破解文章 → 幻影2003 V3.0+C语言注册机

幻影2003 V3.0+C语言注册机

时间:2004/10/15 0:57:00来源:本站整理作者:蓝点我要评论(16)

 幻影2003 V3.0是一个很有特色的图像处理软件,使用图像的处理变得简单易用,效果很不错.安装完该软件后发现它是用ASPACK压缩的,就使用PE-SCAN对其解压缩,然后用TRW2000开始跟踪,很快就发现,软件对注册码的比较过程非常原始,就是两个真假注册码直接进行对比,所以很容易就找到了有效的注册码,而且真假注册码的位置也很接近,所以用WINHEX的内存编辑功能就可以很快找到注册码,但是分析它的注册码的生成过程,却花了我很长时间,因为软件的注册码并不是由软件编号直接变化而来的,而是有一个注册的关键值,软件编号也是由此值变化而来(这个变化过程是可逆的),在注册对话框出现时,注册码其实已经生成了.

0167:004100F1 MOV EAX,[ESI+D0]<----此值就是注册码生成的关键值,以下记为reg
0167:004100F7 CMP EAX,EBX
0167:004100F9 JNZ 0041015A
0167:004100FB LEA ECX,[ESP+38]
0167:004100FF MOV BYTE [ESP+B8],03
0167:00410107 CALL `MFC42!ord_00000320`
0167:0041010C LEA ECX,[ESP+30]
0167:00410110 MOV BYTE [ESP+B8],02
0167:00410118 CALL `MFC42!ord_00000320`
0167:0041011D LEA ECX,[ESP+18]
0167:00410121 MOV BYTE [ESP+B8],01
0167:00410129 CALL `MFC42!ord_00000320`
0167:0041012E LEA ECX,[ESP+24]
0167:00410132 MOV BYTE [ESP+B8],00
0167:0041013A CALL `MFC42!ord_00000320`
0167:0041013F LEA ECX,[ESP+1C]
0167:00410143 MOV DWORD [ESP+B8],FFFFFFFF
0167:0041014E CALL `MFC42!ord_00000320`
0167:00410153 XOR EAX,EAX
0167:00410155 JMP 00410504
0167:0041015A ADD EAX,000BCC09 <----将reg+BCC09,这是第一次变化.
0167:0041015F PUSH EAX
0167:00410160 LEA EAX,[ESP+1C]
0167:00410164 PUSH DWORD 004394C4<----指向一字串,"%8d"
0167:00410169 PUSH EAX
0167:0041016A CALL `MFC42!ord_00000B02`<----相当于printf("%8d",reg);
0167:0041016F MOV EAX,[ESP+24]<----EAX指向生成的字符串的首地址,以下记为[字串1]
0167:00410173 ADD ESP,BYTE +0C
0167:00410176 MOV DL,[EAX+01]<----将第2个字节取出到DL
0167:00410179 MOV CL,[EAX]<----将第1个字节取出到CL
0167:0041017B MOVSX EAX,BYTE [EAX+02]<----取第3字节到EAX
0167:0041017F MOVSX EDX,DL
0167:00410182 MOVSX ECX,CL
0167:00410185 ADD EAX,EDX
0167:00410187 LEA EAX,[EAX+ECX-90]<----EAX = 第1字节+ 第2字节 + 第3字节 - 90
0167:0041018E MOV ECX,07
0167:00410193 CDQ
0167:00410194 IDIV ECX
0167:00410196 LEA ECX,[ESP+18]
0167:0041019A ADD DL,30 <----DL 这是EAX除7后的余数,加上30后转化为ASCII码的娄数字
0167:0041019D PUSH EDX
0167:0041019E PUSH BYTE +03
0167:004101A0 CALL `MFC42!ord_000016E0`<----此CALL将DL的值写入字符串的第4字节处,即替换[字串1]第4字节
0167:004101A5 MOV EAX,[ESP+18]
0167:004101A9 MOV DL,[EAX+05]<----取出第6字节
0167:004101AC MOV CL,[EAX+04]<----取出第5字节
0167:004101AF MOVSX EAX,BYTE [EAX+06]<----取出第7字节
0167:004101B3 MOVSX EDX,DL
0167:004101B6 MOVSX ECX,CL
0167:004101B9 ADD EAX,EDX
0167:004101BB LEA EAX,[EAX+ECX-90]<----与上面一样处理
0167:004101C2 MOV ECX,07
0167:004101C7 CDQ
0167:004101C8 IDIV ECX
0167:004101CA ADD DL,30<----这里也与上面一样处理
0167:004101CD PUSH EDX
0167:004101CE PUSH ECX
0167:004101CF LEA ECX,[ESP+20]
0167:004101D3 CALL `MFC42!ord_000016E0`<----替换[字串1]中的第8字节
0167:004101D8 MOV EAX,[ESP+18]
0167:004101DC MOV CL,[EAX+02]
0167:004101DF MOV BL,[EAX+01]
0167:004101E2 MOV DL,[EAX+07]
0167:004101E5 MOV [ESP+13],CL
0167:004101E9 MOV CL,[EAX+03]
0167:004101EC MOV [ESP+17],BL
0167:004101F0 MOV BL,[EAX+04]
0167:004101F3 MOV [ESP+15],CL
0167:004101F7 MOV CL,[EAX+06]
0167:004101FA MOV [ESP+16],BL
0167:004101FE MOV BL,[EAX]
0167:00410200 MOV AL,[EAX+05]
0167:00410203 MOV [ESP+14],AL
0167:00410207 MOVSX EAX,DL
0167:0041020A PUSH EAX<----到这里注册码计算完成,这是最后一位注册码,第16位,[字串1]中的第8位
0167:0041020B MOVSX EAX,BYTE [ESP+17]
0167:00410210 ADD EAX,BYTE +15
0167:00410213 PUSH EAX <----第15位,[字串1]中第3位+15
0167:00410214 MOVSX EAX,BYTE [ESP+1D]
0167:00410219 PUSH EAX <----第14位,[字串1]中第4位
0167:0041021A MOVSX EAX,CL
0167:0041021D ADD EAX,BYTE +17
0167:00410220 PUSH EAX <----第13位,[字串1]中第7位+17
0167:00410221 MOVSX EAX,BYTE [ESP+27]
0167:00410226 PUSH EAX <----第12位,[字串1]中第2位
0167:00410227 MOVSX EAX,BYTE [ESP+2A]
0167:0041022C ADD EAX,BYTE +11
0167:0041022F PUSH EAX <----第11位,[字串1]中第5位+11
0167:00410230 MOVSX EAX,BL
0167:00410233 PUSH EAX <----第10位,[字串1]中第1位
0167:00410234 MOVSX EAX,BYTE [ESP+30]
0167:00410239 ADD EAX,BYTE +11
0167:0041023C PUSH EAX <----第9位,[字串1]中第6位+11
0167:0041023D MOVSX EAX,CL
0167:00410240 PUSH EAX <----第8位,[字串1]中第7位
0167:00410241 MOVSX EAX,BYTE [ESP+39]
0167:00410246 ADD EAX,BYTE +13
0167:00410249 PUSH EAX <----第7位,[字串1]中第4位+13
0167:0041024A MOVSX EAX,BYTE [ESP+3E]
0167:0041024F PUSH EAX <----第6位,[字串1]中第5位
0167:00410250 MOVSX EDX,DL
0167:00410253 MOVSX EAX,BYTE [ESP+40]
0167:00410258 ADD EDX,BYTE +12
0167:0041025B PUSH EDX <----第5位,[字串1]中第8位+12
0167:0041025C PUSH EAX <----第4位,[字串1]中第6位
0167:0041025D MOVSX EDX,BYTE [ESP+47]
0167:00410262 MOVSX EAX,CL
0167:00410265 MOVSX ECX,BL
0167:00410268 ADD EDX,BYTE +1B
0167:0041026B ADD ECX,BYTE +11
0167:0041026E PUSH EDX <----第3位,[字串1]中第3位+1B
0167:0041026F PUSH EAX <----第2位,[字串1]中第7位
0167:00410270 PUSH ECX <----第1位,[字串1]中第1位+11
0167:00410271 LEA EDX,[ESP+70]
0167:00410275 PUSH DWORD 004394A0<----指向一字符串"%c%c%c%c-%c%c%c%c-%c%c%c%c-%c%c%c%c"
0167:0041027A PUSH EDX
0167:0041027B CALL `MFC42!ord_00000B02`<----相当于printf(""%c%c%c%c-%c%c%c%c-%c%c%c%c-%c%c%c%c",...),返回时ECX指向生成的注册码
0167:00410280 MOV EAX,[ESP+64]
0167:00410284 ADD ESP,BYTE +48
0167:00410287 CMP DWORD [EAX-08],BYTE +13
0167:0041028B JNG 004102C0
0167:0041028D LEA ECX,[ESP+28]
0167:00410291 PUSH BYTE +13
0167:00410293 PUSH ECX
0167:00410294 LEA ECX,[ESP+24]
0167:00410298 CALL `MFC42!ord_0000164E`
0167:0041029D PUSH EAX
0167:0041029E LEA ECX,[ESP+20]
0167:004102A2 MOV BYTE [ESP+BC],06
0167:004102AA CALL `MFC42!ord_0000035A`
0167:004102AF LEA ECX,[ESP+28]
0167:004102B3 MOV BYTE [ESP+B8],04
0167:004102BB CALL `MFC42!ord_00000320`
0167:004102C0 MOV EDX,[ESP+30]
0167:004102C4 MOV EAX,[ESP+1C]
0167:004102C8 PUSH EDX
0167:004102C9 PUSH EAX
0167:004102CA CALL EBP
0167:004102CC ADD ESP,BYTE +08
0167:004102CF TEST EAX,EAX
0167:004102D1 JNZ 004102E0
0167:004102D3 MOV DWORD [ESP+2C],01
0167:004102DB JMP 004104A8
0167:004102E0 XOR EBX,EBX
0167:004102E2 PUSH EBX
0167:004102E3 LEA ECX,[ESP+44]
0167:004102E7 CALL 00408CE0
0167:004102EC LEA ECX,[ESP+20]
0167:004102F0 MOV BYTE [ESP+B8],07
0167:004102F8 CALL `MFC42!ord_0000021C`
0167:004102FD MOV ECX,[ESI+D0]<----取出注册常数
0167:00410303 LEA EDX,[ESP+20]
0167:00410307 ADD ECX,000B4E9D<----将其加上B4E9D,所到结果以十六进制显示后,就是软件编号的后面部分(这一部分从第4字节开始)
0167:0041030D MOV BYTE [ESP+B8],08
0167:00410315 PUSH ECX
0167:00410316 PUSH DWORD 00439494
0167:0041031B PUSH EDX
0167:0041031C CALL `MFC42!ord_00000B02`
0167:00410321 ADD ESP,BYTE +0C
0167:00410324 LEA EAX,[ESP+34]
0167:00410328 LEA ECX,[ESP+24]
0167:0041032C MOV DWORD [ESP+34],0104
0167:00410334 PUSH EAX
0167:00410335 PUSH DWORD 0104
0167:0041033A CALL `MFC42!ord_00000B63`
0167:0041033F PUSH EAX
0167:00410340 CALL `KERNEL32!GetComputerNameA`<----取机器名
0167:00410346 PUSH BYTE -01
0167:00410348 LEA ECX,[ESP+28]
0167:0041034C CALL `MFC42!ord_000015C4`
0167:00410351 MOV ECX,[ESP+24]
0167:00410355 PUSH BYTE +03
0167:00410357 CMP DWORD [ECX-08],BYTE +03 <----如果机器名大于3字节,则软件编号的前3位由机器名中取得,如果小于3位,则取软件编号的3位.
0167:0041035B JNL 0041038B
0167:0041035D LEA EDX,[ESP+2C]
0167:00410361 LEA ECX,[ESP+24]
0167:00410365 PUSH EDX
0167:00410366 CALL `MFC42!ord_0000164E`
0167:0041036B PUSH EAX
0167:0041036C LEA ECX,[ESP+28]
0167:00410370 MOV BYTE [ESP+BC],09
0167:00410378 CALL `MFC42!ord_0000035A`
0167:0041037D MOV BYTE [ESP+B8],08
0167:00410385 LEA ECX,[ESP+28]
0167:00410389 JMP SHORT 004103B9
0167:0041038B LEA EAX,[ESP+2C]
0167:0041038F PUSH BYTE +01
0167:00410391 PUSH EAX
0167:00410392 LEA ECX,[ESP+30]
0167:00410396 CALL `MFC42!ord_000010B6`
0167:0041039B PUSH EAX
0167:0041039C LEA ECX,[ESP+28]
0167:004103A0 MOV BYTE [ESP+BC],0A
0167:004103A8 CALL `MFC42!ord_0000035A`
0167:004103AD MOV BYTE [ESP+B8],08
0167:004103B5 LEA ECX,[ESP+28]
0167:004103B9 CALL `MFC42!ord_00000320`
0167:004103BE LEA ECX,[ESP+24]
0167:004103C2 CALL `MFC42!ord_0000106A`
0167:004103C7 LEA ECX,[ESP+20]
0167:004103CB LEA EDX,[ESP+24]
0167:004103CF PUSH ECX
0167:004103D0 LEA EAX,[ESP+40]
0167:004103D4 PUSH EDX
0167:004103D5 PUSH EAX
0167:004103D6 CALL `MFC42!ord_0000039A`
0167:004103DB PUSH EAX
0167:004103DC LEA ECX,[ESP+AC]
0167:004103E3 MOV BYTE [ESP+BC],0B
0167:004103EB CALL `MFC42!ord_0000035A`
0167:004103F0 LEA ECX,[ESP+3C]
0167:004103F4 MOV BYTE [ESP+B8],08
0167:004103FC CALL `MFC42!ord_00000320`
0167:00410401 LEA ECX,[ESP+30]
0167:00410405 PUSH ECX
0167:00410406 LEA ECX,[ESP+A4]
0167:0041040D CALL `MFC42!ord_0000035A`
0167:00410412 LEA ECX,[ESP+40]
0167:00410416 MOV [ESP+A4],EDI
0167:0041041D CALL `MFC42!ord_000009D2`<----这里弹出"注册"对话框.


--------------------------VC 注册机代码----------------------------
void CKeyGenDlg::OnOK()
{
// TODO: Add extra validation here
this->UpdateData(true);
if(this->m_input == "")
{
this->m_output = "请输入注册用户名";
this->m_edit2.SetWindowText(this->m_output);
return;
}

//this->m_input 是输入的用户名,this->m_output 是输出用的注册码。
char buf[50];
char regcode[20];
unsigned long reg;
strcpy(buf,this->m_input);
reg = hextoi(buf+3);
reg -= 0xb4e9d;
reg+= 0xbcc09;
sprintf(buf,"%8lu",reg);
buf[3]= ((buf[0]+buf[1]+buf[2]-0x90) % 7)+0x30;
buf[7]= ((buf[4]+buf[5]+buf[6]-0x90) % 7)+0x30;
sprintf(regcode,"%c%c%c%c-%c%c%c%c-%c%c%c%c-%c%c%c%c",
buf[0]+0x11,
buf[6],
buf[2]+0x1b,
buf[5],
buf[7]+0x12,
buf[4],
buf[3]+0x13,
buf[6],
buf[5]+0x11,
buf[0],
buf[4]+0x11,
buf[1],
buf[6]+0x17,
buf[3],
buf[2]+0x15,
buf[7]);
this->m_output = regcode;

//--------------------------------------------
this->m_edit2.SetWindowText(this->m_output);
//*以下代码是将注册码写入剪切板中。
if(OpenClipboard())
{
HGLOBAL clipbuffer;
char * buffer;
EmptyClipboard();
clipbuffer = GlobalAlloc(GMEM_DDESHARE, this->m_output.GetLength()+1);
buffer = (char*)GlobalLock(clipbuffer);
strcpy(buffer, LPCSTR(this->m_output));
GlobalUnlock(clipbuffer);
SetClipboardData(CF_TEXT,clipbuffer);
CloseClipboard();
}
//*/
}

unsigned long CKeyGenDlg::hextoi(char *str) //将十六进制字串转为LONG型。
{
char n;
int i,len;
unsigned long sum,sum1;
len = strlen(str);
sum =0;
sum1 =1;
for(i=0;i {
n = str[len-i-1];
if( n >='0' && n<='9' )
{
n -= '0'; //转为数字
}
else
{
if(n >='a' && n <='f')
{
n-= 87; //转为数字
}
else
{
if(n>='A' && n <='F')
{
n-=55; //转为数字
}
else
{ //如果都不是,则返回
break;
}
}
}
sum += n * sum1;
sum1*=16;
}
return sum;

}

    
    
     
    
    
     

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 去除winrar注册框方法

最新文章 比特币病毒怎么破解 比去除winrar注册框方法 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据

人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程