半仙算命v2007 build 01.01 注册算法分析

【文章标题】: 半仙算命v2007 build 01.01 注册算法分析
【文章作者】: Red_angelX
【生产日期】: 20070117
【软件名称】: 半仙算命v2007 build 01.01
【软件大小】: 1823K
【下载地址】: http://www.fuzi.cn/showdown.asp?soft_id=61

【加壳方式】: 无
【保护方式】: 注册码

【编写语言】: Borland Delphi 6.0 - 7.0
【使用工具】: OD+Dede
【操作平台】: Win32
【软件介绍】: 〖半仙算命〗软件集成了多种测算选项,测算内容、测算项目极其丰富,包括姓名吉凶测算、命运推算、科学起名向导、生男生女查询以及万年历、农历、中国黄历、皇历等等实用查询等。软件功能强大,使用简单、绿色、环保,只要你正确选择好出生的日期,即可自动转换为农历、属相、星座等然后软件将依此进行命运推算、姓名推算等等,软件运算参考数十种古代命理、算命、运程、吉凶书籍,有根有据。

【附加说明】:本文只是学习和研究的目的,如果你要使用,请支持国产 

 以前做过几次内存注册机,每次出新的就要重做,很麻烦...,今天没事就来玩玩,记得老版本注册码是明文,猜想加密不会很复杂~

 查下,没壳?? 记得以前有壳还有自效验的啊,可能是绿色版已经被人搞过了的缘故吧,不管,反正我是要KeyGen,KeyGen出来了什么壳都不在眼里了,DeDe分析,找到注册过程在 553f34上,DeDe任务完了,开OD,载入,下断点,跑起来点注册,嘿嘿真断下了,下面是代码

 

00553F34    .    55             push    ebp
00553F35   
.   8BEC          mov     ebp ,  esp
...................................................................................
00553F70   
.   B1  01          mov     cl ,   1
00553F72   
.   BA 3C425500   mov     edx ,  0055423C                     ;   ASCII  " SOFTWAREMicrosoftYhds "
00553F77   
.   8BC6          mov     eax ,  esi
00553F79   
.   E8 9A5AF5FF    call     004A9A18
00553F7E   
.    68   80000000    push     80                                 ;   / BufSize  =   80   ( 128 .)
00553F83   
.   8D85 7BFFFFFF lea     eax ,  dword ptr [ebp- 85 ]           ;  |
00553F89   
.    50             push    eax                               ;  |Buffer
00553F8A   
.   E8 5D33EBFF    call      < jmp . &kernel32 . GetSystemDirector >;   GetSystemDirectoryA
00553F8F   
.   8D45 FC       lea     eax ,  dword ptr [ebp- 4 ]
00553F92   
.   8D95 7BFFFFFF lea     edx ,  dword ptr [ebp- 85 ]
00553F98   
.   B9  81000000    mov     ecx ,   81
00553F9D   
.   E8 4A0CEBFF    call     00404BEC
00553FA2   
.   8D95 70FFFFFF lea     edx ,  dword ptr [ebp- 90 ]
00553FA8   
.   8BBB FC020000 mov     edi ,  dword ptr [ebx + 2FC]
00553FAE   
.   8BC7          mov     eax ,  edi
00553FB0   
.   E8 2B3FEFFF    call     00447EE0
00553FB5   
.   8B85 70FFFFFF mov     eax ,  dword ptr [ebp- 90 ]           ;   name
00553FBB   
.   8D95 74FFFFFF lea     edx ,  dword ptr [ebp-8C]
00553FC1   
.   E8 0653EBFF    call     004092CC
00553FC6   
.   8B95 74FFFFFF mov     edx ,  dword ptr [ebp-8C]
00553FCC   
.   8BC7          mov     eax ,  edi
00553FCE   
.   E8 3D3FEFFF    call     00447F10
00553FD3   
.   8D95 68FFFFFF lea     edx ,  dword ptr [ebp- 98 ]
00553FD9   
.   8BBB  04030000  mov     edi ,  dword ptr [ebx + 304 ]
00553FDF   
.   8BC7          mov     eax ,  edi
00553FE1   
.   E8 FA3EEFFF    call     00447EE0
00553FE6   
.   8B85 68FFFFFF mov     eax ,  dword ptr [ebp- 98 ]           ;   key
00553FEC   
.   8D95 6CFFFFFF lea     edx ,  dword ptr [ebp- 94 ]
00553FF2   
.   E8 D552EBFF    call     004092CC
00553FF7   
.   8B95 6CFFFFFF mov     edx ,  dword ptr [ebp- 94 ]
.............................................................
00554065     .   8B83 FC020000 mov     eax ,  dword ptr [ebx + 2FC]
0055406B   
.   E8 703EEFFF    call     00447EE0
00554070     .   8B85 54FFFFFF mov     eax ,  dword ptr [ebp-AC]
00554076     .   E8 0556EBFF    call      00409680                           ;   关键Call
0055407B   
.   B9  60110000    mov     ecx ,   1160
00554080     .    99             cdq
00554081     .   F7F9          idiv    ecx
00554083   >   .   8BC2          mov     eax ,  edx                          ;   edx余数
00554085     .   8D95 58FFFFFF lea     edx ,  dword ptr [ebp-A8]
0055408B   
.   E8 B0FDFFFF    call      00553E40                           ;   可疑

 

    代码全在这一片了,先取系统System32目录,往下面丢一个文件C201l.dll,注册码就丢在里面,不信?你随便输入个再打开看看~.

    过程大概是这样,554076是关键Call,算出一个值,除1160 的余数再异或一下转成10进制就是注册码的前几位~~

55408B就是比较注册码是否合法的Call了,细跟了遍发现流程很简单~~,关键Call竟然就是把string转成Int,我晕~

    1.注册码(难怪只能输入数字) 对 1160 求余

    2.余数和0B25F1异或

    3.得到一个值就是注册码的前几位,后面还两位

    4.后面第一位是过程3的值的1.2位的char相加,对5求余后+ 44

    5.后面第二位是过程3的值的3.4位的char相加,对5求余后+ 33

    6.连接3.4.5就是注册码

    很简单吧,用自己的KeyMake写了个注册机:(C#)

   

public   string  GenCode( string  para1)
{
int sum = -1;
string ret = "";
try
{
  sum 
= int.Parse(para1);
}

catch(FormatException)
{
return "确认码只能是数字!";
}

//return sum.ToString();
int edx = sum % 0x1160;
edx 
= edx ^ 0x0B25F1;
ret 
= edx.ToString();
if(ret.Length < 4)
{
return "Error!";
}

int eax = (ret[0]+ret[1]) % 5 + 34;
eax 
-= 30;
int ebx = (ret[2]+ret[3]) % 5 + 33;
ebx 
-= 30;
return ret + eax.ToString() + ebx.ToString();
}

 

   后给出一组测试的注册码:

   name:123456789

   key:73216457

   附:如果你要使用该软件,请购买正版支持国产软件

你可能感兴趣的:(半仙算命v2007 build 01.01 注册算法分析)