- UID
- 16062
注册时间2006-6-19
阅读权限40
最后登录1970-1-1
独步武林
该用户从未签到
|
【文章标题】: 自动精灵 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 编辑 ] |
|