-
-
[原创]ascii picture designer v3.0的注册算法
-
发表于:
2007-1-29 22:51
5339
-
[原创]ascii picture designer v3.0的注册算法
软件全名:ascii picture designer v3.0
跟了一会才发现,0day在N年前就有注册机了,不管了,既然已经跟了,那就跟到底吧。把过程写一下,不是很难。(好久不搞win32了,老是搞.net,今天回顾一下,呵呵)
没有加壳,从字符串参考可以很轻易的来到注册关键代码处:
.text:00404DC0 ; int __stdcall sub_404DC0(unsigned __int8 *,unsigned __int8 *)
下面就是注册码的算法了,我就不贴大段的代码了,直接把注册机的代码给出来,同志们自己跟着反汇编代码分析吧。
LRESULT CMainDlg::OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
// TODO: Add validation code
char sName[100];
char sRegcode[100];
char table[65];
::GetDlgItemText(m_hWnd,IDC_EDIT1,sName,50);
if(lstrlen(sName)==0)
{
lstrcpy(sName,"tankaiha");
::SetDlgItemText(m_hWnd,IDC_EDIT1,"tankaiha");
}
int len=lstrlen(sName);
lstrcpy(table,"abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ");
int tmpint=0x0f;
for(int i=0;i<lstrlen(sName);i++)
{
for(int j=0;j<lstrlen(table);j++)
{
if(sName[i]==table[j])
{
sName[i]=table[tmpint%0x3E];
}
tmpint+=0x05;
}
}
if(len<6)
{
for(int i=0;i<(6-len);i++)
{
sName[len+i]=0x20;
}
}
for (int i=0;i<len;i++)
{
sName[i]=((sName[i] ^ 0x03)%0x37);
}
char pen[]="peennyiloveyou";
char buf[10];
for(int i=0;i<6;i++)
{
buf[i]=sName[i] & pen[i];
}
char sd[]="swordrain";
for(int i=0;i<6;i++)
{
buf[i]=sName[i] | sd[i];
}
int extra=sName[len-1];
char regcode[100];
ZeroMemory(regcode,100);
wsprintf(regcode,"SWA%d%d%d%d%d%d%d",buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],extra);
::SetDlgItemText(m_hWnd,IDC_EDIT2,regcode);
return 0;
}
跟的时候要注意对于用户名长度不同的处理。注册机就不贴了,自己下吧。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课