飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3068|回复: 3

[原创] 自动精灵 v2.0简单算法分析

[复制链接]

该用户从未签到

发表于 2007-10-19 15:52:24 | 显示全部楼层 |阅读模式
【文章标题】: 自动精灵 v2.0简单算法分析
【文章作者】: jjdg
【软件名称】: 自动精灵 v2.0
【软件大小】: 706KB
【下载地址】: 自己搜索下载
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  今天逛论坛的时候,看见gujin162兄的自动精灵 v2.0注册机的帖子(https://www.chinapyg.com/viewthr ... 4%B6%AF%BE%AB%C1%E9),就顺着连接打开一看,好家伙!要价2400!
  心想,就冲这要价,也不能不看看吧?于是就下载了一个,看看它的算法如何!
  
  因为gujin162兄已经发布了详细的追码分析,我就不罗嗦了,这里直接看算法去!^_^
  
  004EB6E1  |.  E8 3E030000   CALL AutoStar.004EBA24       ;  这是算法CALL F7进去
  
  来到004EBA24,
  004EBA24  /$  55            PUSH EBP                                 ;  注册码算法CALL
  004EBA25  |.  8BEC          MOV EBP,ESP
  004EBA27  |.  6A 00         PUSH 0
  004EBA29  |.  6A 00         PUSH 0
  004EBA2B  |.  6A 00         PUSH 0
  004EBA2D  |.  6A 00         PUSH 0
  004EBA2F  |.  6A 00         PUSH 0
  004EBA31  |.  53            PUSH EBX
  004EBA32  |.  56            PUSH ESI
  004EBA33  |.  57            PUSH EDI
  004EBA34  |.  8BF9          MOV EDI,ECX
  004EBA36  |.  33C0          XOR EAX,EAX
  004EBA38  |.  55            PUSH EBP
  004EBA39  |.  68 FABA4E00   PUSH AutoStar.004EBAFA
  004EBA3E  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
  004EBA41  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
  004EBA44  |.  8BC2          MOV EAX,EDX                              ;  EDX里面是序列号389463739
  004EBA46  |.  E8 C9D2F1FF   CALL AutoStar.00408D14                   ;  将序列号转换为16进制,送入EAX
  004EBA4B  |.  8BD8          MOV EBX,EAX                              ;  将EAX中的16进制序列号送入EBX
  004EBA4D  |.  8BC3          MOV EAX,EBX                              ;  下面开始是特征值的计算
  004EBA4F  |.  B9 85000000   MOV ECX,85                               ;  读入固定字85
  004EBA54  |.  99            CDQ                                      ;  除法运算前,EDX清零
  004EBA55  |.  F7F9          IDIV ECX                                 ;  eax除以ecx  实现两个带符号数的二进制除法运算
  004EBA57  |.  69C0 AB000000 IMUL EAX,EAX,0AB                         ;  eax乘以固定数ab
  004EBA5D  |.  35 FDC85C02   XOR EAX,25CC8FD                          ;  EAX与固定值25CC8FD做异或
  004EBA62  |.  99            CDQ                                      ;  EDX清零
  004EBA63  |.  33C2          XOR EAX,EDX                              ;  EAX与EDX异或
  004EBA65  |.  2BC2          SUB EAX,EDX                              ;  用EAX-EDX
  004EBA67  |.  05 68C4AC07   ADD EAX,7ACC468                          ;  EAX加固定值7ACC468,加法后为特征值的16进制"273127DB"
  004EBA6C  |.  8BD8          MOV EBX,EAX                              ;  将特征值"273127DB"送入EBX
  004EBA6E  |.  8D55 F8       LEA EDX,DWORD PTR SS:[EBP-8]
  004EBA71  |.  8BC3          MOV EAX,EBX
  004EBA73  |.  E8 60D1F1FF   CALL AutoStar.00408BD8
  004EBA78  |.  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]
  004EBA7B  |.  BA 10BB4E00   MOV EDX,AutoStar.004EBB10                ;  ASCII "734618529841"
  004EBA80  |.  E8 CF87F1FF   CALL AutoStar.00404254
  004EBA85  |.  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
  004EBA88  |.  E8 2F87F1FF   CALL AutoStar.004041BC
  004EBA8D  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]             ;  将固定值堆栈"734618529841"送入EAX
  004EBA90  |.  E8 E789F1FF   CALL AutoStar.0040447C                   ;  取"734618529841"的位数存入EAX,这也产生的注册码的位数
  004EBA95  |.  8BD8          MOV EBX,EAX                              ;  将位数送入EBX,让EBX做计数器
  004EBA97  |.  85DB          TEST EBX,EBX
  004EBA99  |.  7E 3A         JLE SHORT AutoStar.004EBAD5
  004EBA9B  |.  BE 01000000   MOV ESI,1                                ;  计数器
  004EBAA0  |>  8D45 EC       /LEA EAX,DWORD PTR SS:[EBP-14]
  004EBAA3  |.  8B55 F4       |MOV EDX,DWORD PTR SS:[EBP-C]            ;  读入"734618529841",这是用来定位的
  004EBAA6  |.  8A5432 FF     |MOV DL,BYTE PTR DS:[EDX+ESI-1]          ;  逐位读入"734618529841"进行定位
  004EBAAA  |.  E8 F588F1FF   |CALL AutoStar.004043A4
  004EBAAF  |.  8B45 EC       |MOV EAX,DWORD PTR SS:[EBP-14]
  004EBAB2  |.  E8 5DD2F1FF   |CALL AutoStar.00408D14                  ;  把特征值转换为10进制"657532891"
  004EBAB7  |.  8B55 F8       |MOV EDX,DWORD PTR SS:[EBP-8]            ;  把特征值"657532891"读入EDX
  004EBABA  |.  8A5402 FF     |MOV DL,BYTE PTR DS:[EDX+EAX-1]          ;  根据上面读入的定位字符的值在特征值的相应位取字符
  004EBABE  |.  8D45 F0       |LEA EAX,DWORD PTR SS:[EBP-10]
  004EBAC1  |.  E8 DE88F1FF   |CALL AutoStar.004043A4
  004EBAC6  |.  8B55 F0       |MOV EDX,DWORD PTR SS:[EBP-10]
  004EBAC9  |.  8D45 FC       |LEA EAX,DWORD PTR SS:[EBP-4]
  004EBACC  |.  E8 B389F1FF   |CALL AutoStar.00404484
  004EBAD1  |.  46            |INC ESI                                 ;  计数器加1
  004EBAD2  |.  4B            |DEC EBX                                 ;  计数器减1
  004EBAD3  |.^ 75 CB         \JNZ SHORT AutoStar.004EBAA0             ;  继续循环,直到取完所有字符
  004EBAD5  |>  8BC7          MOV EAX,EDI
  004EBAD7  |.  8B55 FC       MOV EDX,DWORD PTR SS:[EBP-4]             ;  将产生的注册码送入EDX
  004EBADA  |.  E8 3187F1FF   CALL AutoStar.00404210
  004EBADF  |.  33C0          XOR EAX,EAX
  004EBAE1  |.  5A            POP EDX
  004EBAE2  |.  59            POP ECX
  004EBAE3  |.  59            POP ECX
  004EBAE4  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
  004EBAE7  |.  68 01BB4E00   PUSH AutoStar.004EBB01
  004EBAEC  |>  8D45 EC       LEA EAX,DWORD PTR SS:[EBP-14]
  004EBAEF  |.  BA 05000000   MOV EDX,5
  004EBAF4  |.  E8 E786F1FF   CALL AutoStar.004041E0                   ;  将产生的注册码再次送入EDX
  004EBAF9  \.  C3            RETN
  004EBAFA   .^ E9 A580F1FF   JMP AutoStar.00403BA4
  004EBAFF   .^ EB EB         JMP SHORT AutoStar.004EBAEC
  004EBB01   .  5F            POP EDI
  004EBB02   .  5E            POP ESI
  004EBB03   .  5B            POP EBX
  004EBB04   .  8BE5          MOV ESP,EBP
  004EBB06   .  5D            POP EBP
  004EBB07   .  C3            RETN                                     ;  返回调用
  
  位数     1  2  3  4  5  6  7  8  9
  特征值: 6  5  7  5  3  2  8  9  1
  固定值: 734618529841即取码顺序
  按第7、3、4、6、1、8、5、2、9、8、4、1位从特征值中取得注册码!
  注册码: 875269351956
   
  总结一下:
  程序根据机器产生一个序列号,然后对其进行计算得到一个特征值,也可以称其为一个密码本,然后按照固定值734618529841提供的顺序逐位从密码本中取出字符生成注册码,
  这个过程大家用XP自带的计算器就可以完成!^_^
  
  
  在VB中,拖2个文本框和1个按钮,使用如下代码即可!
  Private Sub Command1_Click()
  If Len(Text1.Text) <> 9 Then
      MsgBox "你输入的序列号不正确!请重新输入!", vbOKOnly, "出错啦!^_^"
      Text1.Text = ""
      Text2.Text = ""
  Else
      xlh = Val(Text1.Text)
      xlh = xlh \ &H85
      xlh = xlh * &HAB
      xlh = xlh Xor &H25CC8FD
      xlh = xlh Xor &H0
      xlh = xlh + &H7ACC468
      a = Trim(Str(xlh))
      gdz = "734618529841"
      For i = 1 To 12
          b = Mid(gdz, i, 1)
          zcm = zcm & Mid(a, b, 1)
      Next
      Text2.Text = zcm
  End If
  End Sub
  
  Private Sub Text1_KeyPress(KeyAscii As Integer)
            If KeyAscii >= 48 And KeyAscii <= 57 Then
            Else
              KeyAscii = 0
              MsgBox "你输入的序列号不正确!请重新输入!", vbOKOnly, "出错啦!^_^"
            End If
  End Sub
  
  OK!
  搞定!
  
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于PYG论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年10月19日 15:52:49

[ 本帖最后由 jjdg 于 2007-10-20 04:05 编辑 ]
1.JPG

自动精灵 v2.0.rar

5.25 KB, 下载次数: 6, 下载积分: 飘云币 -2 枚

PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2018-6-6 15:51
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2007-10-19 15:56:57 | 显示全部楼层
    膜拜学习+沙发
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-10-19 16:07:17 | 显示全部楼层
    人家那是V币 老兄吓我一跳 不错 兄弟最近精品多多~~

    如果是2400RMB的话 得把代码全部VM掉 然后再整几个猛壳 让密界叹息 让用户放弃 /:017
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-10-19 20:05:30 | 显示全部楼层
    我以为是RMB2400/:L ,学习了
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表