jjdg 发表于 2007-10-19 15:52:24

自动精灵 v2.0简单算法分析

【文章标题】: 自动精灵 v2.0简单算法分析
【文章作者】: jjdg
【软件名称】: 自动精灵 v2.0
【软件大小】: 706KB
【下载地址】: 自己搜索下载
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
今天逛论坛的时候,看见gujin162兄的自动精灵 v2.0注册机的帖子(https://www.chinapyg.com/viewthread.php?tid=20558&highlight=%D7%D4%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:
004EBA41|.64:8920       MOV DWORD PTR FS:,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:
004EBA71|.8BC3          MOV EAX,EBX
004EBA73|.E8 60D1F1FF   CALL AutoStar.00408BD8
004EBA78|.8D45 F4       LEA EAX,DWORD PTR SS:
004EBA7B|.BA 10BB4E00   MOV EDX,AutoStar.004EBB10                ;ASCII "734618529841"
004EBA80|.E8 CF87F1FF   CALL AutoStar.00404254
004EBA85|.8D45 FC       LEA EAX,DWORD PTR SS:
004EBA88|.E8 2F87F1FF   CALL AutoStar.004041BC
004EBA8D|.8B45 F4       MOV EAX,DWORD PTR SS:             ;将固定值堆栈"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:
004EBAA3|.8B55 F4       |MOV EDX,DWORD PTR SS:            ;读入"734618529841",这是用来定位的
004EBAA6|.8A5432 FF   |MOV DL,BYTE PTR DS:          ;逐位读入"734618529841"进行定位
004EBAAA|.E8 F588F1FF   |CALL AutoStar.004043A4
004EBAAF|.8B45 EC       |MOV EAX,DWORD PTR SS:
004EBAB2|.E8 5DD2F1FF   |CALL AutoStar.00408D14                  ;把特征值转换为10进制"657532891"
004EBAB7|.8B55 F8       |MOV EDX,DWORD PTR SS:            ;把特征值"657532891"读入EDX
004EBABA|.8A5402 FF   |MOV DL,BYTE PTR DS:          ;根据上面读入的定位字符的值在特征值的相应位取字符
004EBABE|.8D45 F0       |LEA EAX,DWORD PTR SS:
004EBAC1|.E8 DE88F1FF   |CALL AutoStar.004043A4
004EBAC6|.8B55 F0       |MOV EDX,DWORD PTR SS:
004EBAC9|.8D45 FC       |LEA EAX,DWORD PTR SS:
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:             ;将产生的注册码送入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:,EDX
004EBAE7|.68 01BB4E00   PUSH AutoStar.004EBB01
004EBAEC|>8D45 EC       LEA EAX,DWORD PTR SS:
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                                     ;返回调用

位数   123456789
特征值: 657532891
固定值: 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 编辑 ]

glts 发表于 2007-10-19 15:56:57

膜拜学习+沙发

Nisy 发表于 2007-10-19 16:07:17

人家那是V币 老兄吓我一跳 不错 兄弟最近精品多多~~

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

laccer 发表于 2007-10-19 20:05:30

我以为是RMB2400/:L ,学习了
页: [1]
查看完整版本: 自动精灵 v2.0简单算法分析