首页
社区
课程
招聘
[旧帖] [原创]一个视频转换软件算法分析、注册机 0.00雪花
发表于: 2009-3-31 13:17 3525

[旧帖] [原创]一个视频转换软件算法分析、注册机 0.00雪花

2009-3-31 13:17
3525
【文章作者】: 柳州小林
【作者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

[课程]Android-CTF解题方法汇总!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 123
活跃值: (95)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
LZ也是柳州的 ?呵呵 !
2009-3-31 21:35
0
雪    币: 218
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
支持,像你学习!
2009-3-31 21:59
0
雪    币: 148
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
支持,像你学习!
2009-3-31 23:18
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
学习一下,下来也分析分析
2009-3-31 23:26
0
雪    币: 1596
活跃值: (25)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
6
现在发现一个问题,就是注册机无法识别中文名,调试后发现问题在这:
请教:
VC++6.0代码如下:
                SN1=m_UserName.GetAt(0) | 65;
                SN1=SN1 % 10;
反汇编代码如下:
0040160A   > \53            push    ebx
0040160B   .  8A19          mov     bl, byte ptr [ecx]
0040160D   .  0FBEC3        movsx   eax, bl
00401610   .  0C 41         or      al, 41
00401612   .  55            push    ebp
00401613   .  99            cdq
00401614   .  BD 0A000000   mov     ebp, 0A
请问怎样把movsx改成movzx
2009-4-1 08:58
0
游客
登录 | 注册 方可回帖
返回
//