wzwgp 发表于 2007-1-1 12:03:01

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

internetzwm 发表于 2007-1-3 15:43:17

谢谢lz了..不错啊

have 发表于 2007-1-5 11:37:06

嘿嘿,真是学习的乐园哦
收一份先,谢谢了

nieufo 发表于 2007-1-5 13:32:14

不错不错,要是能有注册机源码那对于我们新手帮助会更大呀!

月之精灵 发表于 2007-1-5 17:59:10

好啊,学习了。

zsl01 发表于 2008-9-23 08:32:05

不错,值得学习。谢谢。
页: [1]
查看完整版本: HiFi Recorder注册算法分析