HiFi Recorder注册算法分析
软件名称:HiFi Recorder 2.0软件语言:英文
软件类别:国外软件/共享版/音频工具
运行环境:Win9x/Me/NT/2000/XP/2003
保护方式:UPX壳+注册码
下载地址:http://www.onlinedown.net/soft/52965.htm
软件信息:漂亮的高保真录音机。
一、注册算法跟踪
UPX壳,跟踪算法脱不脱壳影响不大。OD载入,F9运行很容易找到下面关键地方。
00409843 8B45 A0 MOV EAX,DWORD PTR SS:
00409846 FFB0 882C0000 PUSH DWORD PTR DS:
0040984C E8 632F0000 CALL HiFiReco.0040C7B4 ; 关键Call
00409851 59 POP ECX
00409852 84C0 TEST AL,AL
00409854 74 39 JE SHORT HiFiReco.0040988F ; 跳注册验证失败
00409856 8B55 A0 MOV EDX,DWORD PTR SS:
00409859 C682 8F2C0000 01 MOV BYTE PTR DS:,1 ; (Initial CPU selection)
00409860 66:C745 B4 5C00 MOV WORD PTR SS:,5C
00409866 BA 15C64D00 MOV EDX,HiFiReco.004DC615 ; Successfully Registered!
0040986B 8D45 D0 LEA EAX,DWORD PTR SS:
F7进入0040984C 处 CALL HiFiReco.0040C7B4
0040C7B4 55 PUSH EBP
0040C7B5 8BEC MOV EBP,ESP
0040C7B7 81C4 34FFFFFF ADD ESP,-0CC
0040C7BD B8 C0044E00 MOV EAX,HiFiReco.004E04C0
0040C7C2 E8 3D820800 CALL HiFiReco.00494A04
0040C7C7 C745 A0 01000000 MOV DWORD PTR SS:,1
0040C7CE 8D55 08 LEA EDX,DWORD PTR SS:
0040C7D1 8D45 08 LEA EAX,DWORD PTR SS: ; 假码地址
0040C7D4 E8 DB370900 CALL HiFiReco.0049FFB4
0040C7D9 FF45 A0 INC DWORD PTR SS:
0040C7DC 66:C745 94 0800 MOV WORD PTR SS:,8
0040C7E2 66:C745 94 1400 MOV WORD PTR SS:,14
0040C7E8 8D55 08 LEA EDX,DWORD PTR SS:
0040C7EB 8D45 FC LEA EAX,DWORD PTR SS:
0040C7EE E8 C1370900 CALL HiFiReco.0049FFB4
0040C7F3 FF45 A0 INC DWORD PTR SS:
0040C7F6 66:C745 94 0800 MOV WORD PTR SS:,8
0040C7FC 66:C745 94 2000 MOV WORD PTR SS:,20
0040C802 BA B0034E00 MOV EDX,HiFiReco.004E03B0 ; 数组
0040C807 8D45 F8 LEA EAX,DWORD PTR SS:
0040C80A E8 6D370900 CALL HiFiReco.0049FF7C
0040C80F FF45 A0 INC DWORD PTR SS:
0040C812 66:C745 94 0800 MOV WORD PTR SS:,8
0040C818 33D2 XOR EDX,EDX
0040C81A 8995 34FFFFFF MOV DWORD PTR SS:,EDX
0040C820 C785 38FFFFFF 120000>MOV DWORD PTR SS:,12 |
0040C82A C785 3CFFFFFF 130000>MOV DWORD PTR SS:,13 |
0040C834 C785 40FFFFFF 110000>MOV DWORD PTR SS:,11 |
0040C83E C785 44FFFFFF 0C0000>MOV DWORD PTR SS:,0C |
0040C848 C785 48FFFFFF 0E0000>MOV DWORD PTR SS:,0E | 用于确定注册码
0040C852 C785 4CFFFFFF 140000>MOV DWORD PTR SS:,14 | 后半部分的位置
0040C85C C785 50FFFFFF 0B0000>MOV DWORD PTR SS:,0B | 设为C
0040C866 C785 54FFFFFF 0D0000>MOV DWORD PTR SS:,0D |
0040C870 C785 58FFFFFF 100000>MOV DWORD PTR SS:,10 |
0040C87A C785 5CFFFFFF 0F0000>MOV DWORD PTR SS:,0F |
0040C884 C745 80 07000000 MOV DWORD PTR SS:,7 ; 定位数组元素的初试值
0040C88B C785 7CFFFFFF FFFFFF>MOV DWORD PTR SS:,-1
0040C895 66:C745 94 2C00 MOV WORD PTR SS:,2C
0040C89B BA D5034E00 MOV EDX,HiFiReco.004E03D5 ; - (2D)
0040C8A0 8D45 C4 LEA EAX,DWORD PTR SS:
0040C8A3 E8 D4360900 CALL HiFiReco.0049FF7C
0040C8A8 FF45 A0 INC DWORD PTR SS:
0040C8AB 8D55 C4 LEA EDX,DWORD PTR SS:
0040C8AE 8D45 FC LEA EAX,DWORD PTR SS:
0040C8B1 E8 363A0900 CALL HiFiReco.004A02EC
0040C8B6 8985 7CFFFFFF MOV DWORD PTR SS:,EAX
0040C8BC FF4D A0 DEC DWORD PTR SS:
0040C8BF 8D45 C4 LEA EAX,DWORD PTR SS:
0040C8C2 BA 02000000 MOV EDX,2
0040C8C7 E8 80370900 CALL HiFiReco.004A004C
0040C8CC 83BD 7CFFFFFF 00 CMP DWORD PTR SS:,0
0040C8D3 0F84 A8000000 JE HiFiReco.0040C981
0040C8D9 66:C745 94 3800 MOV WORD PTR SS:,38
0040C8DF 8D45 BC LEA EAX,DWORD PTR SS:
0040C8E2 E8 3D53FFFF CALL HiFiReco.00401C24
0040C8E7 50 PUSH EAX
0040C8E8 FF45 A0 INC DWORD PTR SS:
0040C8EB 8D45 FC LEA EAX,DWORD PTR SS:
0040C8EE E8 ADB0FFFF CALL HiFiReco.004079A0
0040C8F3 8BC8 MOV ECX,EAX
0040C8F5 2B8D 7CFFFFFF SUB ECX,DWORD PTR SS:
0040C8FB 8B95 7CFFFFFF MOV EDX,DWORD PTR SS:
0040C901 42 INC EDX
0040C902 8D45 FC LEA EAX,DWORD PTR SS:
0040C905 E8 FE380900 CALL HiFiReco.004A0208
0040C90A 8D55 BC LEA EDX,DWORD PTR SS:
0040C90D 52 PUSH EDX
0040C90E 8D45 C0 LEA EAX,DWORD PTR SS:
0040C911 E8 0E53FFFF CALL HiFiReco.00401C24
0040C916 50 PUSH EAX
0040C917 FF45 A0 INC DWORD PTR SS:
0040C91A 8B8D 7CFFFFFF MOV ECX,DWORD PTR SS:
0040C920 49 DEC ECX
0040C921 8D45 FC LEA EAX,DWORD PTR SS:
0040C924 BA 01000000 MOV EDX,1
0040C929 E8 DA380900 CALL HiFiReco.004A0208
0040C92E 8D4D C0 LEA ECX,DWORD PTR SS:
0040C931 51 PUSH ECX
0040C932 8D45 B8 LEA EAX,DWORD PTR SS:
0040C935 E8 EA52FFFF CALL HiFiReco.00401C24
0040C93A 8BC8 MOV ECX,EAX
0040C93C FF45 A0 INC DWORD PTR SS:
0040C93F 58 POP EAX
0040C940 5A POP EDX
0040C941 E8 5E370900 CALL HiFiReco.004A00A4
0040C946 8D55 B8 LEA EDX,DWORD PTR SS:
0040C949 8D45 FC LEA EAX,DWORD PTR SS:
0040C94C E8 2B370900 CALL HiFiReco.004A007C
0040C951 FF4D A0 DEC DWORD PTR SS:
0040C954 8D45 B8 LEA EAX,DWORD PTR SS:
0040C957 BA 02000000 MOV EDX,2
0040C95C E8 EB360900 CALL HiFiReco.004A004C
0040C961 FF4D A0 DEC DWORD PTR SS:
0040C964 8D45 BC LEA EAX,DWORD PTR SS:
0040C967 BA 02000000 MOV EDX,2
0040C96C E8 DB360900 CALL HiFiReco.004A004C
0040C971 FF4D A0 DEC DWORD PTR SS:
0040C974 8D45 C0 LEA EAX,DWORD PTR SS:
0040C977 BA 02000000 MOV EDX,2
0040C97C E8 CB360900 CALL HiFiReco.004A004C
0040C981 83BD 7CFFFFFF 00 CMP DWORD PTR SS:,0
0040C988^ 0F85 07FFFFFF JNZ HiFiReco.0040C895 ; 这个循环是去除假码中的'-'(2D)
0040C98E 8D45 FC LEA EAX,DWORD PTR SS:
0040C991 E8 0AB0FFFF CALL HiFiReco.004079A0 ; 去除'-'后假码的长度
0040C996 83F8 14 CMP EAX,14 ; 注册码有效长度=14 (20)
0040C999 74 43 JE SHORT HiFiReco.0040C9DE
0040C99B 33C0 XOR EAX,EAX
0040C99D 50 PUSH EAX
0040C99E FF4D A0 DEC DWORD PTR SS:
0040C9A1 8D45 F8 LEA EAX,DWORD PTR SS:
0040C9A4 BA 02000000 MOV EDX,2
0040C9A9 E8 9E360900 CALL HiFiReco.004A004C
0040C9AE FF4D A0 DEC DWORD PTR SS:
0040C9B1 8D45 FC LEA EAX,DWORD PTR SS:
0040C9B4 BA 02000000 MOV EDX,2
0040C9B9 E8 8E360900 CALL HiFiReco.004A004C
0040C9BE FF4D A0 DEC DWORD PTR SS:
0040C9C1 8D45 08 LEA EAX,DWORD PTR SS:
0040C9C4 BA 02000000 MOV EDX,2
0040C9C9 E8 7E360900 CALL HiFiReco.004A004C
0040C9CE 58 POP EAX
0040C9CF 8B55 84 MOV EDX,DWORD PTR SS:
0040C9D2 64:8915 00000000 MOV DWORD PTR FS:,EDX
0040C9D9 E9 F8020000 JMP HiFiReco.0040CCD6
0040C9DE 66:C745 94 4400 MOV WORD PTR SS:,44 ; 假码长度等于14跳到这里
0040C9E4 8D45 F4 LEA EAX,DWORD PTR SS:
0040C9E7 E8 3852FFFF CALL HiFiReco.00401C24
0040C9EC FF45 A0 INC DWORD PTR SS:
0040C9EF 66:C745 94 0800 MOV WORD PTR SS:,8
0040C9F5 68 4C004A00 PUSH HiFiReco.004A004C
0040C9FA 6A 03 PUSH 3
0040C9FC 68 241C4000 PUSH HiFiReco.00401C24
0040CA01 6A 03 PUSH 3
0040CA03 6A 0B PUSH 0B
0040CA05 6A 04 PUSH 4
0040CA07 8D55 C8 LEA EDX,DWORD PTR SS:
0040CA0A 52 PUSH EDX
0040CA0B E8 84640800 CALL HiFiReco.00492E94
0040CA10 83C4 1C ADD ESP,1C
0040CA13 8345 A0 0B ADD DWORD PTR SS:,0B
0040CA17 C785 68FFFFFF 010000>MOV DWORD PTR SS:,1
0040CA21 66:C745 94 5000 MOV WORD PTR SS:,50
0040CA27 8D45 B4 LEA EAX,DWORD PTR SS:
0040CA2A E8 F551FFFF CALL HiFiReco.00401C24
0040CA2F 50 PUSH EAX
0040CA30 FF45 A0 INC DWORD PTR SS:
0040CA33 8D45 FC LEA EAX,DWORD PTR SS: ; 假码地址
0040CA36 B9 01000000 MOV ECX,1
0040CA3B 8B95 68FFFFFF MOV EDX,DWORD PTR SS: ; 假码下标
0040CA41 E8 C2370900 CALL HiFiReco.004A0208 ; 逐个取出假码前半部分
0040CA46 8D55 B4 LEA EDX,DWORD PTR SS: ; 取出的地址
0040CA49 8D45 F8 LEA EAX,DWORD PTR SS: ; 数组地址
0040CA4C E8 9B380900 CALL HiFiReco.004A02EC ; 假码在数组中对应的下标(设为P)
0040CA51 8985 78FFFFFF MOV DWORD PTR SS:,EAX ; 数组中无对应的字符返回零
0040CA57 FF4D A0 DEC DWORD PTR SS:
0040CA5A 8D45 B4 LEA EAX,DWORD PTR SS:
0040CA5D BA 02000000 MOV EDX,2
0040CA62 E8 E5350900 CALL HiFiReco.004A004C
0040CA67 8B8D 78FFFFFF MOV ECX,DWORD PTR SS:
0040CA6D 034D 80 ADD ECX,DWORD PTR SS: ; =7 (P+7)
0040CA70 898D 70FFFFFF MOV DWORD PTR SS:,ECX
0040CA76 8B85 78FFFFFF MOV EAX,DWORD PTR SS:
0040CA7C 8985 6CFFFFFF MOV DWORD PTR SS:,EAX
0040CA82 C785 64FFFFFF 010000>MOV DWORD PTR SS:,1
0040CA8C 66:C745 94 0800 MOV WORD PTR SS:,8
0040CA92 8B95 64FFFFFF MOV EDX,DWORD PTR SS:
0040CA98 3B95 70FFFFFF CMP EDX,DWORD PTR SS:
0040CA9E 7F 34 JG SHORT HiFiReco.0040CAD4
0040CAA0 FF85 6CFFFFFF INC DWORD PTR SS: ; P+1
0040CAA6 8D45 F8 LEA EAX,DWORD PTR SS: ; 数组地址
0040CAA9 E8 F2AEFFFF CALL HiFiReco.004079A0 ; 得到数组中下标最大值
0040CAAE 3B85 6CFFFFFF CMP EAX,DWORD PTR SS: ; 是否大于最大值
0040CAB4 7D 0A JGE SHORT HiFiReco.0040CAC0
0040CAB6 C785 6CFFFFFF 010000>MOV DWORD PTR SS:,1 ; 大于最大值从1开始
0040CAC0 FF85 64FFFFFF INC DWORD PTR SS:
0040CAC6 8B95 64FFFFFF MOV EDX,DWORD PTR SS:
0040CACC 3B95 70FFFFFF CMP EDX,DWORD PTR SS: ; 循环 P+7 次
0040CAD2^ 7E CC JLE SHORT HiFiReco.0040CAA0 ; 就是=P+7+P
0040CAD4 8B8D 68FFFFFF MOV ECX,DWORD PTR SS:
0040CADA 8B848D 34FFFFFF MOV EAX,DWORD PTR SS: ; =C
0040CAE1 83C0 F6 ADD EAX,-0A ; 后半部分注册码的顺序
0040CAE4 8985 74FFFFFF MOV DWORD PTR SS:,EAX
0040CAEA 66:C745 94 5C00 MOV WORD PTR SS:,5C
0040CAF0 8D45 B0 LEA EAX,DWORD PTR SS: ; 假码地址
0040CAF3 E8 2C51FFFF CALL HiFiReco.00401C24
0040CAF8 50 PUSH EAX
0040CAF9 FF45 A0 INC DWORD PTR SS:
0040CAFC 8D45 F8 LEA EAX,DWORD PTR SS: ; 数组地址
0040CAFF B9 01000000 MOV ECX,1
0040CB04 8B95 6CFFFFFF MOV EDX,DWORD PTR SS: ; =P+7+P
0040CB0A E8 F9360900 CALL HiFiReco.004A0208 ; 根据EDX值取数组中字符
0040CB0F 8D55 B0 LEA EDX,DWORD PTR SS: ; 数组中取出字符
0040CB12 8B85 74FFFFFF MOV EAX,DWORD PTR SS:
0040CB18 C1E0 02 SHL EAX,2
0040CB1B 8D4D C8 LEA ECX,DWORD PTR SS: ; 存放取出数组中字符的初试地址
0040CB1E 03C1 ADD EAX,ECX ; EAX=(C-$A)shl 2 确定注册码后半部分的第几位
0040CB20 E8 57350900 CALL HiFiReco.004A007C ; 取出数组中字符的地址入栈
0040CB25 FF4D A0 DEC DWORD PTR SS:
0040CB28 8D45 B0 LEA EAX,DWORD PTR SS:
0040CB2B BA 02000000 MOV EDX,2
0040CB30 E8 17350900 CALL HiFiReco.004A004C
0040CB35 FF85 68FFFFFF INC DWORD PTR SS: ; 记数器
0040CB3B 83BD 68FFFFFF 0A CMP DWORD PTR SS:,0A ; 假码前半部分位数
0040CB42^ 0F8E D9FEFFFF JLE HiFiReco.0040CA21
0040CB48 66:C745 94 6800 MOV WORD PTR SS:,68
0040CB4E 8D45 AC LEA EAX,DWORD PTR SS:
0040CB51 E8 CE50FFFF CALL HiFiReco.00401C24
0040CB56 50 PUSH EAX
0040CB57 FF45 A0 INC DWORD PTR SS:
0040CB5A 8D45 FC LEA EAX,DWORD PTR SS:
0040CB5D B9 0A000000 MOV ECX,0A
0040CB62 BA 01000000 MOV EDX,1
0040CB67 E8 9C360900 CALL HiFiReco.004A0208
0040CB6C 8D55 AC LEA EDX,DWORD PTR SS:
0040CB6F 8D45 F4 LEA EAX,DWORD PTR SS:
0040CB72 E8 05350900 CALL HiFiReco.004A007C
0040CB77 FF4D A0 DEC DWORD PTR SS:
0040CB7A 8D45 AC LEA EAX,DWORD PTR SS:
0040CB7D BA 02000000 MOV EDX,2
0040CB82 E8 C5340900 CALL HiFiReco.004A004C
0040CB87 C785 60FFFFFF 010000>MOV DWORD PTR SS:,1
0040CB91 66:C745 94 0800 MOV WORD PTR SS:,8
0040CB97 83BD 60FFFFFF 0A CMP DWORD PTR SS:,0A
0040CB9E 7F 53 JG SHORT HiFiReco.0040CBF3
0040CBA0 66:C745 94 7400 MOV WORD PTR SS:,74
0040CBA6 8D45 A8 LEA EAX,DWORD PTR SS:
0040CBA9 E8 7650FFFF CALL HiFiReco.00401C24
0040CBAE 8BC8 MOV ECX,EAX
0040CBB0 FF45 A0 INC DWORD PTR SS:
0040CBB3 8B95 60FFFFFF MOV EDX,DWORD PTR SS:
0040CBB9 C1E2 02 SHL EDX,2
0040CBBC 8D45 C8 LEA EAX,DWORD PTR SS:
0040CBBF 03D0 ADD EDX,EAX ; 定位
0040CBC1 8D45 F4 LEA EAX,DWORD PTR SS: ; 假码前半部分
0040CBC4 E8 DB340900 CALL HiFiReco.004A00A4 ; 连接数组中找出的字符
0040CBC9 8D55 A8 LEA EDX,DWORD PTR SS:
0040CBCC 8D45 F4 LEA EAX,DWORD PTR SS:
0040CBCF E8 A8340900 CALL HiFiReco.004A007C
0040CBD4 FF4D A0 DEC DWORD PTR SS:
0040CBD7 8D45 A8 LEA EAX,DWORD PTR SS:
0040CBDA BA 02000000 MOV EDX,2
0040CBDF E8 68340900 CALL HiFiReco.004A004C
0040CBE4 FF85 60FFFFFF INC DWORD PTR SS:
0040CBEA 83BD 60FFFFFF 0A CMP DWORD PTR SS:,0A ; 假码后半部分位数是循环次数
0040CBF1^ 7E AD JLE SHORT HiFiReco.0040CBA0
0040CBF3 8D55 FC LEA EDX,DWORD PTR SS:
0040CBF6 8D45 F4 LEA EAX,DWORD PTR SS:
0040CBF9 E8 32350900 CALL HiFiReco.004A0130 ; 验证注册码
0040CBFE 84C0 TEST AL,AL
0040CC00 74 6B JE SHORT HiFiReco.0040CC6D
0040CC02 B0 01 MOV AL,1
0040CC04 50 PUSH EAX
0040CC05 8345 A0 F5 ADD DWORD PTR SS:,-0B
0040CC09 68 4C004A00 PUSH HiFiReco.004A004C
0040CC0E 6A 03 PUSH 3
0040CC10 6A 0B PUSH 0B
0040CC12 6A 04 PUSH 4
二、算法小结
1. 注册码长度20 (不能有'-')
2. 注册码前半部分(10)在数组
中的下标为P(若不在数组中P=0)
3. 根据:P+7+P(若大于24h,减24h直到小于24h),作为下标找出对应的字符
4. 找出字符的排列顺序(组成注册码后半部分)
注册码第1位 (12-A) shl 2 =20 | | 8 (A)
2位 13 =24 | | 9 (C)
3位 11 =1C | | 7 (E)
4位 0C =8 | 根据| 2 (G)
5位 0E =10 | 大小| 4 (I)
6位 14 =28 | 排列| 10(K)
7位 0B =4 | 顺序| 1 (M)
8位 0D =C | | 3 (O)
9位 10 =18 | | 6 (Q)
10位 0F =14 | | 5 (8)
5. 若注册码前半部分是:1234567890
对应的数组字符是:ACEGIKMOQ8
6. 按4的顺序排列:MGOI8QEACK
7. 连接得到注册码:1234567890MGOI8QEACK
8. 注册信息保存在:HKEY_LOCAL_MACHINE\SOFTWARE\ShuangzSoft\HiFiRecorder 谢谢lz了..不错啊 嘿嘿,真是学习的乐园哦
收一份先,谢谢了 不错不错,要是能有注册机源码那对于我们新手帮助会更大呀! 好啊,学习了。 不错,值得学习。谢谢。
页:
[1]