|
![]() | 作者: yongmin [yongmin]
![]() |
登录 |
软件全名:ascii picture designer v3.0 跟了一会才发现,0day在N年前就有注册机了,不管了,既然已经跟了,那就跟到底吧。把过程写一下,不是很难。 没有加壳,从字符串参考可以很轻易的来到注册关键代码处: .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==table[j]) { sName=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=((sName ^ 0x03)%0x37); } char pen[]="peennyiloveyou"; char buf[10]; for(int i=0;i<6;i++) { buf=sName & pen; } char sd[]="swordrain"; for(int i=0;i<6;i++) { buf=sName | sd; } 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; } 跟的时候要注意对于用户名长度不同的处理。注册机就不贴了,自己下吧。 |
地主 发表时间: 07-02-05 10:04 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号