论坛: 编程破解 标题: [转帖]好久没玩win32了,今天回顾了一下 复制本贴地址    
作者: 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号