一个软件的使用过程
感谢PYG,本文主要目的是学习使用PYG专用算法注册机生成器,让菜鸟也可以写注册机,工具在此:
PYG专用算法注册机生成器 ver 1.0.0.7
https://www.chinapyg.com/thread-70039-1-1.html
官方教学视频在此:
PYG专用算法注册机生成器配套教程-第一讲
https://www.chinapyg.com/thread-72385-1-1.html
PYG专用算法注册机生成器配套教程-第二讲
https://www.chinapyg.com/thread-72386-1-1.html
目标程序:PC AutoShutdown 5.9.0.0
注册文件保存位置:
C:\Documents and Settings\All Users\Application Data\PC Auto Shutdown\AutoShutdown.ini
Username=1
code=LdfPAS&23FC82
注册码分段验证
OD载入目标程序,找到注册按钮事件处,下断,输入用户名和假码,断在下面的位置
004AC298 .55 PUSH EBP ;注册
004AC299 .8BEC MOV EBP, ESP
004AC29B .B9 10000000 MOV ECX, 0x10
004AC2A0 >6A 00 PUSH 0x0
004AC2A2 .6A 00 PUSH 0x0下面是MD5了一个注册码,与一个内置的MD5比较(不知知道是不是通用注册码)
004AC358 .E8 BF7DFFFF CALL 004A411C ;AutoShut.004A411C
004AC35D .8B45 C4 MOV EAX, DWORD PTR SS: ;假码md5--->eax
004AC360 .BA A0C84A00 MOV EDX, 0x4AC8A0 ;FAB282623843E2327403D39E252AE27B
004AC365 .E8 AA86F5FF CALL 00404A14 ;AutoShut.00404A14
004AC36A .0F85 BE010000 JNZ 004AC52E ;AutoShut.004AC52E
如果CALL往里面走就会看到MD5的计算过程
004A35F0 .20 4D 44 35 2>ASCII " MD5 Message-Dig"
004A3600 .65 73 74 20 2>ASCII "est (c) 97-98 F."
004A3610 .20 50 69 65 7>ASCII " Piette V1.02 ",0
004A361F 00 DB 00
004A3620/$53 PUSH EBX
004A3621|.8BD8 MOV EBX, EAX
004A3623|.8BC3 MOV EAX, EBX
004A3625|.33C9 XOR ECX, ECX
004A3627|.BA 58000000 MOV EDX, 0x58
004A362C|.E8 87FAF5FF CALL 004030B8 ;AutoShut.004030B8
004A3631|.C703 01234567 MOV DWORD PTR DS:, 0x67452301 //MD5标志性数字
004A3637|.C743 04 89ABC>MOV DWORD PTR DS:, 0xEFCDAB89
004A363E|.C743 08 FEDCB>MOV DWORD PTR DS:, 0x98BADCFE
004A3645|.C743 0C 76543>MOV DWORD PTR DS:, 0x10325476
004A364C|.5B POP EBX
004A4070/$55 PUSH EBP //这是计算过程注册码是分段验证的
第一段为固定字符LdfPAS&
004AC531 .50 PUSH EAX ;取字符串的中指定字符的函数
004AC532 .B9 07000000 MOV ECX, 0x7 ;取的长度
004AC537 .BA 01000000 MOV EDX, 0x1 ;第一位开始
004AC53C .8B45 F4 MOV EAX, DWORD PTR SS:
004AC53F .E8 E485F5FF CALL 00404B28 ;AutoShut.00404B28
004AC54F .8B45 AC MOV EAX, DWORD PTR SS: ;前7位的验证
004AC552 .BA E0C94A00 MOV EDX, 0x4AC9E0 ;MD5(LdfPAS&)=749FE87A625A53C7EA205BD929931D57
004AC557 .E8 B884F5FF CALL 00404A14 ;AutoShut.00404A14
004AC55C .0F85 D7020000 JNZ 004AC839 ;AutoShut.004AC839
第8、9位的验证
004AC571 .B9 02000000 MOV ECX, 0x2 ;取字符的长度
004AC576 .BA 08000000 MOV EDX, 0x8 ;第8位开始
004AC57B .8B45 F4 MOV EAX, DWORD PTR SS:
004AC57E .E8 A585F5FF CALL 00404B28 ;AutoShut.00404B28
004AC583 .8B45 A8 MOV EAX, DWORD PTR SS:
004AC586 .50 PUSH EAX
004AC587 .8D45 A4 LEA EAX, DWORD PTR SS:
004AC58A .50 PUSH EAX
004AC58B .B9 02000000 MOV ECX, 0x2 ;取用户名MD5后的字符串中第D位开始的两个字符
004AC590 .BA 0D000000 MOV EDX, 0xD
004AC595 .8B45 F0 MOV EAX, DWORD PTR SS:
004AC598 .E8 8B85F5FF CALL 00404B28 ;AutoShut.00404B28
004AC59D .8B55 A4 MOV EDX, DWORD PTR SS:
004AC5A0 .58 POP EAX
004AC5A1 .E8 6E84F5FF CALL 00404A14 ; 验证
004AC5A6 .0F85 8D020000 JNZ 004AC839 ;AutoShut.004AC839
第10、11、12位的验证
004AC571 .B9 02000000 MOV ECX, 0x2 ;取字符的长度
004AC576 .BA 08000000 MOV EDX, 0x8 ;第8位开始
004AC57B .8B45 F4 MOV EAX, DWORD PTR SS:
004AC57E .E8 A585F5FF CALL 00404B28 ;AutoShut.00404B28
004AC583 .8B45 A8 MOV EAX, DWORD PTR SS:
004AC586 .50 PUSH EAX
004AC587 .8D45 A4 LEA EAX, DWORD PTR SS:
004AC58A .50 PUSH EAX
004AC58B .B9 02000000 MOV ECX, 0x2 ;取用户名MD5后的字符串中第D位开始的两个字符
004AC590 .BA 0D000000 MOV EDX, 0xD
004AC595 .8B45 F0 MOV EAX, DWORD PTR SS:
004AC598 .E8 8B85F5FF CALL 00404B28 ;AutoShut.00404B28
004AC59D .8B55 A4 MOV EDX, DWORD PTR SS:
004AC5A0 .58 POP EAX
004AC5A1 .E8 6E84F5FF CALL 00404A14 ; 验证
004AC5A6 .0F85 8D020000 JNZ 004AC839 ;AutoShut.004AC839
第10、11、12位的验证
004AC5B0 .B9 0B000000 MOV ECX, 0xB ;取字符长度
004AC5B5 .BA 11000000 MOV EDX, 0x11 ;开始位置
004AC5BA .8B45 F0 MOV EAX, DWORD PTR SS:
004AC5BD .E8 6685F5FF CALL 00404B28 ;AutoShut.00404B28
004AC5C2 .8B45 9C MOV EAX, DWORD PTR SS:
004AC5C5 .8D55 A0 LEA EDX, DWORD PTR SS:
004AC5C8 .E8 4F7BFFFF CALL 004A411C ;对取得的字符MD5一下
004AC5CD .8B55 A0 MOV EDX, DWORD PTR SS:
004AC5D0 .8D45 F0 LEA EAX, DWORD PTR SS:
004AC5D3 .E8 C880F5FF CALL 004046A0 ;AutoShut.004046A0
004AC5D8 .8D45 98 LEA EAX, DWORD PTR SS:
004AC5DB .50 PUSH EAX
004AC5DC .B9 03000000 MOV ECX, 0x3 ;长度
004AC5E1 .BA 0A000000 MOV EDX, 0xA ;假码中开始位置
004AC5E6 .8B45 F4 MOV EAX, DWORD PTR SS:
004AC5E9 .E8 3A85F5FF CALL 00404B28 ;AutoShut.00404B28
004AC5EE .8B45 98 MOV EAX, DWORD PTR SS:
004AC5F1 .50 PUSH EAX
004AC5F2 .8D45 94 LEA EAX, DWORD PTR SS:
004AC5F5 .50 PUSH EAX
004AC5F6 .B9 03000000 MOV ECX, 0x3
004AC5FB .BA 14000000 MOV EDX, 0x14
004AC600 .8B45 F0 MOV EAX, DWORD PTR SS:
004AC603 .E8 2085F5FF CALL 00404B28 ;AutoShut.00404B28
004AC608 .8B55 94 MOV EDX, DWORD PTR SS:
004AC60B .58 POP EAX
004AC60C .E8 0384F5FF CALL 00404A14 ;验证
004AC611 .0F85 22020000 JNZ 004AC839
算法总结如下:
假定函数strA(B,C)---->从字符串strA中取字符 开始位置B 大小为C
(涉及到的字母全为大写)
1.用户名的MD5=strA
2.strA(0x11,0xB)=strB
3.MD5(strB)=strC
注册码="LdfPAS&"+strA(0xD,2)+strC(0x14,3)
支持写注册机。 高手啊。膜拜 不错,学习 不错啊!!!!! 顶 会写注册机的。学习了 兄弟你真帅气 高手,你太厉害了。我怎么也学习不会的 很好的教程,谢谢,学习了 真高手,看都看不懂,要学的东东太多了
页:
[1]
2