wgz001 发表于 2014-9-21 07:18:08

一个软件的使用过程

感谢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)











vipcrack 发表于 2014-9-21 08:35:36

支持写注册机。

YUEN 发表于 2014-9-21 09:23:57

高手啊。膜拜

small-q 发表于 2014-9-21 11:37:13

不错,学习

无极超哥 发表于 2014-9-21 11:41:02

不错啊!!!!!

Dxer 发表于 2014-9-21 15:23:03

顶 会写注册机的。学习了

PairsSoul 发表于 2014-9-21 21:23:08

兄弟你真帅气

1552759476@ 发表于 2014-9-22 20:12:00

高手,你太厉害了。我怎么也学习不会的

sxstardream 发表于 2014-11-2 17:26:53

很好的教程,谢谢,学习了

dianjun 发表于 2014-11-3 17:15:00

真高手,看都看不懂,要学的东东太多了
页: [1] 2
查看完整版本: 一个软件的使用过程