【文章作者】: 柳州小林
【作者QQ号】: 55713720
【软件名称】: Audio Video To WMA Converter
【软件大小】: 652.42K
【下载地址】: http://www.weqsoft.com/download/wma-converter.exe
【加壳方式】: 无
【保护方式】: 用户名和注册码相关联
【编写语言】: Microsoft Visual C++ 7.0
【使用工具】: OD
【操作平台】: XP
【软件介绍】: 视频转换软件
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
没有注册时,一运行就弹出注册窗口,点“注册”会有用户名和注册码错误的提示(MessageBoxA),我们就从这里入手。
下断 bp MessageBoxA 输入用户名、注册码,点注册。会断在user32.dll里,按Alt+F9回到程序领空。按F8走到RETN就
返回到这里:
0040D357 . E8 0DD60100 call 0042A969 ; 这是MessageBoxA
0040D35C . 8B4424 20 mov eax, dword ptr [esp+20]
因为程序一般都是先运算注册码后才给出提示,所以这里向上看,找找CMP或TEST。每找一个CMP或TEST就在它前面下断
(菜鸟用的方法),看看它比较的是什么。一直找下面:
0040D1D8 . 8B46 70 mov eax, dword ptr [esi+70] ; 取用户名
0040D1DB . 8B78 F4 mov edi, dword ptr [eax-C] ; 取用户名长度
0040D1DE . 83FF 02 cmp edi, 2 ; 比较用户名长度
0040D1E1 . 0F8D E0000000 jge 0040D2C7 ; >=2就OK
得知用户名在大于等于2,这时向下走就是注册码长度判断、算法和比较。
这里要注意的是这种句型:
0040D3B1 . 884424 11 mov byte ptr [esp+11], al
这是把算出来的注册码存放到[esp+X]里,以便以后比较。跟完5个这种句型就得出正确的注册码了。这后比较就很简单了
--------------------------------------------------------------------------------
【经验总结】
这个软件算法超简单VC++写的注册机。
void CMy1Dlg::OnOK()
{
// TODO: Add extra validation here
CString username;
int i;
int SN1,SN2,SN3,SN4,SN5;
UpdateData();
SN1=m_UserName.GetLength();
if (m_UserName.GetLength()<2)
{
MessageBox("用户名要2个字符以上!","错误!");
return;
}
else
{
SN1=m_UserName.GetAt(0) | 65;
SN1=SN1 % 10;
SN2=m_UserName.GetAt(1) | 86;
SN2=SN2 % 10;
SN3=m_UserName.GetAt(0) | 0x32;
SN3=SN3 % 10;
SN4=m_UserName.GetAt(1) | 0x41;
SN4=SN4 % 10;
SN5=0;
for (i=0;i<m_UserName.GetLength();i++)
{
SN5+=m_UserName.GetAt(i);
}
SN5=SN5 % 10;
username.Format("%d%d%d%d%d%s",SN1,SN2,SN3,SN4,SN5,m_UserName);
m_SN=username;
UpdateData(false);
}
}
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2009年03月31日 13:16:16
[课程]FART 脱壳王!加量不加价!FART作者讲授!