00484FC1 > 68 08384000 push 00403808 ; software\foxzf\code
00484FC6 > 68 01030080 push 80000301 ; 整数型(基本数据类型)
00484FCB 6A 00 push 0
00484FCD 68 03000000 push 3
00484FD2 68 03000000 push 3
00484FD7 > BB 98060000 mov ebx, 698 ; 取文本注册项(系统核心支持库)
00484FDC > E8 18FC0000 call 00494BF9 ; 调用核心支持库命令(调用3号服务)
00484FE1 83C4 28 add esp, 28 ; 取出我们输入的注册码
00484FE4 8945 FC mov dword ptr [ebp-4], eax
00484FE7 8B45 FC mov eax, dword ptr [ebp-4]
00484FEA 50 push eax
00484FEB 8B1D 0C21A700 mov ebx, dword ptr [A7210C]
00484FF1 85DB test ebx, ebx
00484FF3 74 09 je short 00484FFE
00484FF5 53 push ebx
00484FF6 > E8 ECFB0000 call 00494BE7 ; 销毁从堆上分配到的内存(调用8号服务)
00484FFB 83C4 04 add esp, 4
00484FFE 58 pop eax
00484FFF A3 0C21A700 mov dword ptr [A7210C], eax
00485004 6A 00 push 0
00485006 6A 00 push 0
00485008 6A 00 push 0
0048500A > 68 04000080 push 80000004 ; 文本型(基本数据类型)
0048500F 6A 00 push 0
00485011 > 68 1C384000 push 0040381C ; software\foxzf\name
00485016 > 68 01030080 push 80000301 ; 整数型(基本数据类型)
0048501B 6A 00 push 0
0048501D 68 03000000 push 3
00485022 68 03000000 push 3
00485027 > BB 98060000 mov ebx, 698 ; 取文本注册项(系统核心支持库)
0048502C > E8 C8FB0000 call 00494BF9 ; 调用核心支持库命令(调用3号服务)
00485031 83C4 28 add esp, 28 ; 取出用户名
00485034 8945 FC mov dword ptr [ebp-4], eax
00485037 8B45 FC mov eax, dword ptr [ebp-4]
0048503A 50 push eax
0048503B 8B1D 1021A700 mov ebx, dword ptr [A72110]
00485041 85DB test ebx, ebx
00485043 74 09 je short 0048504E
00485045 53 push ebx
00485046 > E8 9CFB0000 call 00494BE7 ; 销毁从堆上分配到的内存(调用8号服务)
0048504B 83C4 04 add esp, 4
0048504E 58 pop eax
0048504F A3 1021A700 mov dword ptr [A72110], eax
00485054 > 68 04000080 push 80000004 ; 文本型(基本数据类型)
00485059 6A 00 push 0
0048505B A1 1421A700 mov eax, dword ptr [A72114] ; 这个是我的机器码。就是待验证的字符串
00485060 85C0 test eax, eax
00485062 75 05 jnz short 00485069
00485064 > B8 4B364000 mov eax, 0040364B ; (常量)
00485069 50 push eax
0048506A 68 01000000 push 1
0048506F > BB 98010000 mov ebx, 198 ; 到字节集(系统核心支持库)
00485074 > E8 80FB0000 call 00494BF9 ; 调用核心支持库命令(调用3号服务)
00485079 83C4 10 add esp, 10
0048507C 8945 FC mov dword ptr [ebp-4], eax
0048507F E8 EC000000 call 00485170 ; 这里面看看
00485084 8945 F8 mov dword ptr [ebp-8], eax ; 所以这里就得到DF73
00485087 E8 FF010000 call 0048528B ; 公钥
0048508C 8945 F4 mov dword ptr [ebp-C], eax
0048508F > 68 04000080 push 80000004 ; 文本型(基本数据类型)
00485094 6A 00 push 0
00485096 8B45 F4 mov eax, dword ptr [ebp-C]
00485099 85C0 test eax, eax
0048509B 75 05 jnz short 004850A2
0048509D > B8 4B364000 mov eax, 0040364B ; (常量)
004850A2 50 push eax
004850A3 > 68 04000080 push 80000004 ; 文本型(基本数据类型)
004850A8 6A 00 push 0
004850AA 8B45 F8 mov eax, dword ptr [ebp-8]
004850AD 85C0 test eax, eax
004850AF 75 05 jnz short 004850B6
004850B1 > B8 4B364000 mov eax, 0040364B ; (常量)
004850B6 50 push eax
004850B7 > 68 04000080 push 80000004 ; 文本型(基本数据类型)
004850BC 6A 00 push 0
004850BE A1 0C21A700 mov eax, dword ptr [A7210C] ; 这里是数字签名后的结果,如果这里是真的注册码的话就注册成功
004850C3 85C0 test eax, eax
004850C5 75 05 jnz short 004850CC
004850C7 > B8 4B364000 mov eax, 0040364B ; (常量)
004850CC 50 push eax
004850CD > 68 05000080 push 80000005 ; 字节集(基本数据类型)
004850D2 6A 00 push 0
004850D4 8B45 FC mov eax, dword ptr [ebp-4]
004850D7 85C0 test eax, eax
004850D9 75 05 jnz short 004850E0
004850DB > B8 52364000 mov eax, 00403652 ; (常量)
004850E0 50 push eax
004850E1 68 04000000 push 4
004850E6 > BB 18000000 mov ebx, 18 ; 签名验证(数据操作支持库一)
004850EB B8 06000000 mov eax, 6
004850F0 > E8 F8FA0000 call 00494BED ; 调用其他支持库命令(调用2号服务)
我们在堆栈窗口可以看到:如下
0012FC84 00000000
0012FC88 80000005
0012FC8C 00211D80 ASCII "289704427"
0012FC90 00000000
0012FC94 80000004
0012FC98 00211DC0 ASCII "DF73"
0012FC9C 00000000
0012FCA0 80000004
0012FCA4 00403835 ASCII "AA9B7177A9A16CEED291B5B775019CF9FB797E676B2A314888110516ED98BA1DB2E4FAA205EB026DE94E607CFCB4194A4F4DF62C18932BAEB393B168AC4AABD3763B2512789DA3178D0BF2F36BCCF7C36A312A8458B17ACD48C45CE3D6607808C2BC331AA96F9C3D71B6EDE5B6F0231FC17A8B98E936B"...
0012FCA8 00000000
一个公钥,一个公共模数,就是
签名验证 (到字节集 (我们输入的假码), 数字签名的结果, “DF73”, “AA9B7177A9A16CEED291B5B775019CF9FB797E676B2A314888110516ED98BA1DB2E4FAA205EB026DE94E607CFCB4194A4F4DF62C18932BAEB393B168AC4AABD3763B2512789DA3178D0BF2F36BCCF7C36A312A8458B17ACD48C45CE3D6607808C2BC331AA96F9C3D71B6EDE5B6F0231FC17A8B98E936BE8F6803DFCA377458A9”)
如果能知道作者的私钥就OK的了。不过因为是1024位的,所以比较难搞。
对了,那个自交验我改了两个跳转,中间还有个内存异常之类的。不研究了。
如果这个软件加个花指令就更好玩了。(*^__^*) 嘻嘻……