【文章标题】: 分析潜移默化学英语软件+注册码
【文章作者】: 虾米
【作者邮箱】: 657843778@qq.com
【软件名称】: 潜移默化学英语
【软件大小】: 12.0 MB 
【下载地址】: 自己搜索下载
【加壳方式】: ASPack 1.06b / 1.061b -> Alexey Solodovnikov
【保护方式】: 用户名+注册码
【编写语言】: Borland Delphi 6.0 - 7.0
【使用工具】: OD、PEID
【操作平台】: Win2003 R2
【作者声明】: 偶是一只菜鸟,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  OD载入,用ESP定律很容易的脱掉压缩壳,不用修复,
  
  运行软件,随意输入用户名:piaoxue 假码:74747474
  
  软件无提示的关闭了,看样子是属于重启验证之类的软件,查找了一下注册表,在
  HKEY_LOCAL_MACHINE\SOFTWARE\lsjsoft\dct这里看到
  
  Path:C:\Program Files\阳光软件\潜移默化学英语
  SerialNo:74747474   这里看到是假码
  UserName:piaoxue    这里看到是用户名
  WavePath:C:\Program Files\阳光软件\潜移默化学英语\真人语音文件
  
  这么几个注册表项,
  居然是重启验证的,我们可以用注册表项的名来下断点,OD载入脱壳后的程序
  字符串查找:SerialNo 因为是重启验证的,找到两处
  第一处:Ultra 字符串参考,项目 1464
   地址=00505635
   反汇编=mov edx,1CCD54.00505778
   文本字符串=serialno
  
  双击这一行,来到代码处,
  00505635    BA 78575000     mov edx,1CCD54.00505778              ; serialno  下F2断点   F9运行程序,
  
  程序被断在这里:
  00505635    BA 78575000     mov edx,1CCD54.00505778              ; serialno
  F8单步向下走,一直向下,中间省去N多代码,
  
  直到来到这里
  005073CC    55              push ebp
  005073CD    68 7B745000     push 1CCD54.0050747B
  005073D2    64:FF30         push dword ptr fs:[eax]
  005073D5    64:8920         mov dword ptr fs:[eax],esp
  005073D8    8D45 FC         lea eax,dword ptr ss:[ebp-4]
  005073DB    E8 A4D4EFFF     call 1CCD54.00404884
  005073E0    8D45 F8         lea eax,dword ptr ss:[ebp-8]
  005073E3    E8 9CD4EFFF     call 1CCD54.00404884
  005073E8    C607 00         mov byte ptr ds:[edi],0
  005073EB    8D55 F8         lea edx,dword ptr ss:[ebp-8]
  005073EE    8D45 FC         lea eax,dword ptr ss:[ebp-4]
  005073F1    E8 C2E1FFFF     call 1CCD54.005055B8
  005073F6    837D FC 00      cmp dword ptr ss:[ebp-4],0           ; 获取假码
  005073FA    74 64           je short 1CCD54.00507460
  005073FC    837D F8 00      cmp dword ptr ss:[ebp-8],0           ; 获取用户名
  00507400    74 5E           je short 1CCD54.00507460
  00507402    8D55 F0         lea edx,dword ptr ss:[ebp-10]        ; 出现假码
  00507405    B8 94745000     mov eax,1CCD54.00507494              ; 固定字符串“SOFTAAENG”
  0050740A    E8 A13DFEFF     call 1CCD54.004EB1B0
  0050740F    8B45 F0         mov eax,dword ptr ss:[ebp-10]        ; 获取计算机硬盘序列号,这是我的硬盘序列号“6PS1X6PA”
  00507412    8D55 F4         lea edx,dword ptr ss:[ebp-C]
  00507415    E8 6621F0FF     call 1CCD54.00409580
  0050741A    8B55 F4         mov edx,dword ptr ss:[ebp-C]
  0050741D    8BC3            mov eax,ebx
  0050741F    E8 B4D4EFFF     call 1CCD54.004048D8
  00507424    8D45 EC         lea eax,dword ptr ss:[ebp-14]
  00507427    50              push eax
  00507428    8B03            mov eax,dword ptr ds:[ebx]           ; 硬盘序列号到EAX中
  0050742A    B1 61           mov cl,61                            ; 常数61
  0050742C    66:BA 5904      mov dx,459                           ; 常数459
  00507430    E8 9749FEFF     call 1CCD54.004EBDCC
  00507435    8B55 EC         mov edx,dword ptr ss:[ebp-14]        ; 取机器码到EDX中
  00507438    8BC3            mov eax,ebx
  0050743A    E8 99D4EFFF     call 1CCD54.004048D8
  0050743F    8B45 FC         mov eax,dword ptr ss:[ebp-4]         ; 出现假码
  00507442    50              push eax                             ; 假码入栈
  00507443    57              push edi                             ; 假码与硬盘序列号
  00507444    8BD3            mov edx,ebx
  00507446    8B4D F8         mov ecx,dword ptr ss:[ebp-8]         ; 取假码到ECX中
  00507449    8BC6            mov eax,esi                          ; 假码与用户名
  0050744B    E8 64000000     call 1CCD54.005074B4                 ; 算法CALL,F7跟进
  00507450    84C0            test al,al                           ; 标志位比较
  00507452    74 0C           je short 1CCD54.00507460             ; 关键跳转
  00507454    8BC3            mov eax,ebx
  00507456    BA A8745000     mov edx,1CCD54.005074A8              ; 固定字符串(ASCII "YesIKnow")
  0050745B    E8 78D4EFFF     call 1CCD54.004048D8
  00507460    33C0            xor eax,eax
  00507462    5A              pop edx
  00507463    59              pop ecx
  00507464    59              pop ecx
  00507465    64:8910         mov dword ptr fs:[eax],edx
  00507468    68 82745000     push 1CCD54.00507482
  0050746D    8D45 EC         lea eax,dword ptr ss:[ebp-14]
  00507470    BA 05000000     mov edx,5
  00507475    E8 2ED4EFFF     call 1CCD54.004048A8
  0050747A    C3              retn
  0050747B  ^ E9 84CCEFFF     jmp 1CCD54.00404104
  00507480  ^ EB EB           jmp short 1CCD54.0050746D
  00507482    5F              pop edi
  00507483    5E              pop esi
  00507484    5B              pop ebx
  00507485    8BE5            mov esp,ebp
  00507487    5D              pop ebp
  00507488    C3              retn
  
  跟进算法0050744B    E8 64000000     call 1CCD54.005074B4后,来到这里
  005074B7    51              push ecx
  005074B8    B9 06000000     mov ecx,6                            ; 由此判断用户名是保存在ECX中
  005074BD    6A 00           push 0
  005074BF    6A 00           push 0
  005074C1    49              dec ecx
  005074C2  ^ 75 F9           jnz short 1CCD54.005074BD            ; 跳转,
  005074C4    874D FC         xchg dword ptr ss:[ebp-4],ecx        ; F4下来这里,往回跳
  005074C7    53              push ebx
  005074C8    56              push esi
  005074C9    894D F8         mov dword ptr ss:[ebp-8],ecx
  005074CC    8BF2            mov esi,edx
  005074CE    8945 FC         mov dword ptr ss:[ebp-4],eax
  005074D1    8B45 F8         mov eax,dword ptr ss:[ebp-8]         ; 用户名
  005074D4    E8 5BD8EFFF     call 1CCD54.00404D34
  005074D9    8B45 0C         mov eax,dword ptr ss:[ebp+C]         ; 用户名与假码入栈
  005074DC    E8 53D8EFFF     call 1CCD54.00404D34
  005074E1    33C0            xor eax,eax
  005074E3    55              push ebp
  005074E4    68 AC775000     push 1CCD54.005077AC
  005074E9    64:FF30         push dword ptr fs:[eax]
  005074EC    64:8920         mov dword ptr fs:[eax],esp
  005074EF    33DB            xor ebx,ebx
  005074F1    A1 10255D00     mov eax,dword ptr ds:[5D2510]
  005074F6    8038 00         cmp byte ptr ds:[eax],0
  005074F9    0F85 8A020000   jnz 1CCD54.00507789
  005074FF    8D55 E0         lea edx,dword ptr ss:[ebp-20]
  00507502    B8 C8775000     mov eax,1CCD54.005077C8              ; 跟上面一样的固定字符串“SOFTAAENG”
  00507507    E8 A43CFEFF     call 1CCD54.004EB1B0                 ; 固定值与用户名的比较
  0050750C    8B45 E0         mov eax,dword ptr ss:[ebp-20]        ; 硬盘序列号
  0050750F    8D55 F4         lea edx,dword ptr ss:[ebp-C]
  00507512    E8 6920F0FF     call 1CCD54.00409580
  00507517    8D45 DC         lea eax,dword ptr ss:[ebp-24]
  0050751A    50              push eax
  0050751B    8B06            mov eax,dword ptr ds:[esi]           ; 机器码
  0050751D    B1 78           mov cl,78                            ; 常数78
  0050751F    66:BA 5904      mov dx,459                           ; 常数459
  00507523    E8 A448FEFF     call 1CCD54.004EBDCC
  00507528    8B55 DC         mov edx,dword ptr ss:[ebp-24]        ; 硬盘序列号与机器码入栈
  0050752B    8B45 F4         mov eax,dword ptr ss:[ebp-C]
  0050752E    E8 5DD7EFFF     call 1CCD54.00404C90                 ; 不要以为这里是明码比较的地方,这里是出现硬盘序列号的地方
  00507533    0F85 50020000   jnz 1CCD54.00507789
  00507539    8B45 0C         mov eax,dword ptr ss:[ebp+C]         ; 假码
  0050753C    E8 03D6EFFF     call 1CCD54.00404B44
  00507541    8BF0            mov esi,eax                          ; 计算假码的位数,寄存器EAX=8
  00507543    8D45 EC         lea eax,dword ptr ss:[ebp-14]
  00507546    50              push eax
  00507547    8D45 D8         lea eax,dword ptr ss:[ebp-28]
  0050754A    8B4D F8         mov ecx,dword ptr ss:[ebp-8]         ; 用户名
  0050754D    8B55 F4         mov edx,dword ptr ss:[ebp-C]         ; 硬盘序列号
  00507550    E8 3BD6EFFF     call 1CCD54.00404B90
  00507555    8B4D D8         mov ecx,dword ptr ss:[ebp-28]        ; 硬盘序列号与用户名连接成新的字符串
  (6PS1X6PApiaoxue)
  00507558    8B45 FC         mov eax,dword ptr ss:[ebp-4]
  0050755B    8B40 60         mov eax,dword ptr ds:[eax+60]
  0050755E    BA C8010000     mov edx,1C8                          ; 常数1C8
  00507563    E8 FCE9FFFF     call 1CCD54.00505F64                 ; 这里是另一个算法CALL,F7跟进
  00507568    8B45 EC         mov eax,dword ptr ss:[ebp-14]        ; 这里出现了一个注册码,很有可能是真码
  0050756B    8B55 0C         mov edx,dword ptr ss:[ebp+C]         ; 出现的注册码与连接的长字符串比较
  0050756E    E8 1DD7EFFF     call 1CCD54.00404C90                 ; 关键CALL,典型的明码比较
  00507573    75 07           jnz short 1CCD54.0050757C            ; 关键跳转
  00507575    B3 01           mov bl,1                             ; 标志位
  00507577    E9 0D020000     jmp 1CCD54.00507789
  0050757C    8D45 E8         lea eax,dword ptr ss:[ebp-18]
  0050757F    50              push eax
  00507580    8D45 D4         lea eax,dword ptr ss:[ebp-2C]
  00507583    8B4D F8         mov ecx,dword ptr ss:[ebp-8]         ; 用户名
  00507586    8B55 F4         mov edx,dword ptr ss:[ebp-C]         ; 硬盘号
  00507589    E8 02D6EFFF     call 1CCD54.00404B90
  0050758E    8B4D D4         mov ecx,dword ptr ss:[ebp-2C]        ; 又是一个硬盘号与用户名连接的新字符串
  00507591    8B45 FC         mov eax,dword ptr ss:[ebp-4]
  00507594    8B40 60         mov eax,dword ptr ds:[eax+60]
  00507597    BA 2E000000     mov edx,2E                           ; 常数2E
  0050759C    E8 C3E9FFFF     call 1CCD54.00505F64
  005075A1    8B45 E8         mov eax,dword ptr ss:[ebp-18]        ; 这里出现了跟注册码一样的字符串
  005075A4    8B55 0C         mov edx,dword ptr ss:[ebp+C]
  005075A7    E8 E4D6EFFF     call 1CCD54.00404C90                 ; 第二个关键call,明码比较
  005075AC    75 07           jnz short 1CCD54.005075B5            ; 关键跳转
  005075AE    B3 01           mov bl,1                             ; 标志位
  005075B0    E9 D4010000     jmp 1CCD54.00507789
  005075B5    8B45 E8         mov eax,dword ptr ss:[ebp-18]
  005075B8    E8 87D5EFFF     call 1CCD54.00404B44
  005075BD    3BF0            cmp esi,eax
  005075BF    7E 0A           jle short 1CCD54.005075CB
  005075C1    8B45 E8         mov eax,dword ptr ss:[ebp-18]
  005075C4    E8 7BD5EFFF     call 1CCD54.00404B44
  005075C9    8BF0            mov esi,eax
  005075CB    8BC6            mov eax,esi
  005075CD    83F8 01         cmp eax,1
  005075D0    7C 21           jl short 1CCD54.005075F3
  005075D2    84DB            test bl,bl
  005075D4    74 10           je short 1CCD54.005075E6
  005075D6    8B55 0C         mov edx,dword ptr ss:[ebp+C]
  005075D9    8A5402 FF       mov dl,byte ptr ds:[edx+eax-1]
  005075DD    8B4D E8         mov ecx,dword ptr ss:[ebp-18]
  005075E0    3A5401 FF       cmp dl,byte ptr ds:[ecx+eax-1]
  005075E4    74 04           je short 1CCD54.005075EA
  005075E6    33D2            xor edx,edx
  005075E8    EB 02           jmp short 1CCD54.005075EC
  005075EA    B2 01           mov dl,1
  005075EC    8BDA            mov ebx,edx
  005075EE    48              dec eax
  005075EF    85C0            test eax,eax
  005075F1  ^ 75 DF           jnz short 1CCD54.005075D2            ; 跳转,
  005075F3    8D45 E4         lea eax,dword ptr ss:[ebp-1C]        ; F4运行到这里,
  005075F6    50              push eax
  005075F7    8D45 D0         lea eax,dword ptr ss:[ebp-30]
  005075FA    8B4D F8         mov ecx,dword ptr ss:[ebp-8]         ; 用户名
  005075FD    8B55 F4         mov edx,dword ptr ss:[ebp-C]         ; 硬盘号
  00507600    E8 8BD5EFFF     call 1CCD54.00404B90
  00507605    8B4D D0         mov ecx,dword ptr ss:[ebp-30]        ; 再一个硬盘号与用户名连接的新字符串
  00507608    8B45 FC         mov eax,dword ptr ss:[ebp-4]
  0050760B    8B40 60         mov eax,dword ptr ds:[eax+60]
  0050760E    BA 64010000     mov edx,164
  00507613    E8 4CE9FFFF     call 1CCD54.00505F64
  00507618    8B45 0C         mov eax,dword ptr ss:[ebp+C]         ; 假码
  0050761B    E8 24D5EFFF     call 1CCD54.00404B44
  00507620    8BF0            mov esi,eax
  00507622    8B45 E4         mov eax,dword ptr ss:[ebp-1C]        ; 第三组注册码
  00507625    E8 1AD5EFFF     call 1CCD54.00404B44                 ; 第三组注册码与硬盘号
  0050762A    3BF0            cmp esi,eax
  0050762C    7E 0A           jle short 1CCD54.00507638
  0050762E    8B45 E4         mov eax,dword ptr ss:[ebp-1C]
  00507631    E8 0ED5EFFF     call 1CCD54.00404B44
  00507636    8BF0            mov esi,eax
  00507638    8B45 E4         mov eax,dword ptr ss:[ebp-1C]
  0050763B    8B55 0C         mov edx,dword ptr ss:[ebp+C]
  0050763E    E8 4DD6EFFF     call 1CCD54.00404C90                 ; 典型的明码比较,第三组注册码比较
  00507643    75 07           jnz short 1CCD54.0050764C            ; 关键跳转
  00507645    B3 01           mov bl,1                             ; 标志位
  00507647    E9 3D010000     jmp 1CCD54.00507789
  0050764C    8BC6            mov eax,esi
  0050764E    83F8 01         cmp eax,1
  00507651    7C 21           jl short 1CCD54.00507674
  00507653    84DB            test bl,bl
  00507655    74 10           je short 1CCD54.00507667
  00507657    8B55 0C         mov edx,dword ptr ss:[ebp+C]
  0050765A    8A5402 FF       mov dl,byte ptr ds:[edx+eax-1]
  0050765E    8B4D E4         mov ecx,dword ptr ss:[ebp-1C]
  00507661    3A5401 FF       cmp dl,byte ptr ds:[ecx+eax-1]
  00507665    74 04           je short 1CCD54.0050766B
  00507667    33D2            xor edx,edx
  00507669    EB 02           jmp short 1CCD54.0050766D
  0050766B    B2 01           mov dl,1
  0050766D    8BDA            mov ebx,edx
  0050766F    48              dec eax
  00507670    85C0            test eax,eax
  00507672  ^ 75 DF           jnz short 1CCD54.00507653            ; 不相等则跳转
  00507674    B3 01           mov bl,1                             ; F4运行到这里
  00507676    8D45 F0         lea eax,dword ptr ss:[ebp-10]
  00507679    50              push eax
  0050767A    8D45 CC         lea eax,dword ptr ss:[ebp-34]
  0050767D    8B4D F8         mov ecx,dword ptr ss:[ebp-8]         ; 用户名
  00507680    8B55 F4         mov edx,dword ptr ss:[ebp-C]         ; 硬盘序列号
  00507683    E8 08D5EFFF     call 1CCD54.00404B90
  00507688    8B4D CC         mov ecx,dword ptr ss:[ebp-34]        ; 第四组硬盘号与用户名的新字符串
  0050768B    8B45 FC         mov eax,dword ptr ss:[ebp-4]
  0050768E    8B40 60         mov eax,dword ptr ds:[eax+60]
  00507691    BA FC000000     mov edx,0FC                          ; 常数OFC,这个常数很可能就是贯穿整个算法的一个常数
  00507696    E8 C9E8FFFF     call 1CCD54.00505F64
  0050769B    8D45 EC         lea eax,dword ptr ss:[ebp-14]
  0050769E    BA DC775000     mov edx,1CCD54.005077DC              ; 不知道有没有用的固定字符串“3tH4gI8fsU0”
  005076A3    E8 74D2EFFF     call 1CCD54.0040491C
  005076A8    8B45 0C         mov eax,dword ptr ss:[ebp+C]         ; 假码
  005076AB    E8 94D4EFFF     call 1CCD54.00404B44
  005076B0    8BF0            mov esi,eax
  005076B2    8B45 F0         mov eax,dword ptr ss:[ebp-10]        ; 第四组注册码
  005076B5    E8 8AD4EFFF     call 1CCD54.00404B44
  005076BA    3BF0            cmp esi,eax                             比较
  005076BC    74 07           je short 1CCD54.005076C5                跳转
  005076BE    33DB            xor ebx,ebx
  005076C0    E9 C4000000     jmp 1CCD54.00507789
  005076C5    8BC6            mov eax,esi
  005076C7    83E8 04         sub eax,4
  005076CA    83F8 08         cmp eax,8
  005076CD    7C 22           jl short 1CCD54.005076F1
  005076CF    84DB            test bl,bl
  005076D1    74 10           je short 1CCD54.005076E3
  005076D3    8B55 0C         mov edx,dword ptr ss:[ebp+C]
  005076D6    8A5402 FF       mov dl,byte ptr ds:[edx+eax-1]
  005076DA    8B4D F0         mov ecx,dword ptr ss:[ebp-10]
  005076DD    3A5401 FF       cmp dl,byte ptr ds:[ecx+eax-1]
  005076E1    74 04           je short 1CCD54.005076E7
  005076E3    33D2            xor edx,edx
  005076E5    EB 02           jmp short 1CCD54.005076E9
  005076E7    B2 01           mov dl,1
  005076E9    8BDA            mov ebx,edx
  005076EB    48              dec eax
  005076EC    83F8 07         cmp eax,7
  005076EF  ^ 75 DE           jnz short 1CCD54.005076CF
  005076F1    B8 01000000     mov eax,1
  005076F6    84DB            test bl,bl
  005076F8    74 0B           je short 1CCD54.00507705
  005076FA    8B55 EC         mov edx,dword ptr ss:[ebp-14]
  005076FD    8A5402 FF       mov dl,byte ptr ds:[edx+eax-1]
  00507701    3AD2            cmp dl,dl
  00507703    74 04           je short 1CCD54.00507709
  00507705    33D2            xor edx,edx
  00507707    EB 02           jmp short 1CCD54.0050770B
  00507709    B2 01           mov dl,1
  0050770B    8BDA            mov ebx,edx
  0050770D    40              inc eax
  0050770E    83F8 09         cmp eax,9
  00507711  ^ 75 E3           jnz short 1CCD54.005076F6
  00507713    8BC6            mov eax,esi
  00507715    83F8 08         cmp eax,8
  00507718    7C 22           jl short 1CCD54.0050773C
  0050771A    84DB            test bl,bl
  0050771C    74 10           je short 1CCD54.0050772E
  0050771E    8B55 0C         mov edx,dword ptr ss:[ebp+C]
  00507721    8A5402 FF       mov dl,byte ptr ds:[edx+eax-1]
  00507725    8B4D F0         mov ecx,dword ptr ss:[ebp-10]
  00507728    3A5401 FF       cmp dl,byte ptr ds:[ecx+eax-1]
  0050772C    74 04           je short 1CCD54.00507732
  0050772E    33D2            xor edx,edx
  00507730    EB 02           jmp short 1CCD54.00507734
  00507732    B2 01           mov dl,1
  00507734    8BDA            mov ebx,edx
  00507736    48              dec eax
  00507737    83F8 07         cmp eax,7
  0050773A  ^ 75 DE           jnz short 1CCD54.0050771A
  0050773C    B8 01000000     mov eax,1
  00507741    84DB            test bl,bl
  00507743    74 0B           je short 1CCD54.00507750
  00507745    8B55 EC         mov edx,dword ptr ss:[ebp-14]
  00507748    8A5402 FF       mov dl,byte ptr ds:[edx+eax-1]
  0050774C    3AD2            cmp dl,dl
  0050774E    74 04           je short 1CCD54.00507754
  00507750    33D2            xor edx,edx
  00507752    EB 02           jmp short 1CCD54.00507756
  00507754    B2 01           mov dl,1
  00507756    8BDA            mov ebx,edx
  00507758    40              inc eax
  00507759    83F8 03         cmp eax,3
  0050775C  ^ 75 E3           jnz short 1CCD54.00507741
  0050775E    B8 0A000000     mov eax,0A
  00507763    84DB            test bl,bl
  00507765    74 10           je short 1CCD54.00507777
  00507767    8B55 0C         mov edx,dword ptr ss:[ebp+C]
  0050776A    8A5402 FF       mov dl,byte ptr ds:[edx+eax-1]
  0050776E    8B4D F0         mov ecx,dword ptr ss:[ebp-10]
  00507771    3A5401 FF       cmp dl,byte ptr ds:[ecx+eax-1]
  00507775    74 04           je short 1CCD54.0050777B
  00507777    33D2            xor edx,edx
  00507779    EB 02           jmp short 1CCD54.0050777D
  0050777B    B2 01           mov dl,1
  0050777D    8BDA            mov ebx,edx
  0050777F    48              dec eax
  00507780    85C0            test eax,eax
  00507782  ^ 75 DF           jnz short 1CCD54.00507763
  00507784    8B45 08         mov eax,dword ptr ss:[ebp+8]
  00507787    8818            mov byte ptr ds:[eax],bl
  00507789    33C0            xor eax,eax
  0050778B    5A              pop edx
  0050778C    59              pop ecx
  0050778D    59              pop ecx                              ; 0012FD50
  0050778E    64:8910         mov dword ptr fs:[eax],edx
  00507791    68 B3775000     push 1CCD54.005077B3
  00507796    8D45 CC         lea eax,dword ptr ss:[ebp-34]
  00507799    BA 0C000000     mov edx,0C
  0050779E    E8 05D1EFFF     call 1CCD54.004048A8
  005077A3    8D45 0C         lea eax,dword ptr ss:[ebp+C]
  005077A6    E8 D9D0EFFF     call 1CCD54.00404884
  005077AB    C3              retn
  005077AC  ^ E9 53C9EFFF     jmp 1CCD54.00404104
  005077B1  ^ EB E3           jmp short 1CCD54.00507796
  005077B3    8BC3            mov eax,ebx
  005077B5    5E              pop esi
  005077B6    5B              pop ebx
  005077B7    8BE5            mov esp,ebp
  005077B9    5D              pop ebp
  005077BA    C2 0800         retn 8                                 
  
  跟进另一个算法00507563    E8 FCE9FFFF     call 1CCD54.00505F64后,到这里
  
  00505F64    55              push ebp
  00505F65    8BEC            mov ebp,esp                          ; 硬盘号与用户名连接的新字符串
  00505F67    6A 00           push 0
  00505F69    6A 00           push 0
  00505F6B    6A 00           push 0
  00505F6D    6A 00           push 0
  00505F6F    6A 00           push 0
  00505F71    6A 00           push 0
  00505F73    6A 00           push 0
  00505F75    53              push ebx
  00505F76    56              push esi
  00505F77    894D F8         mov dword ptr ss:[ebp-8],ecx         ; 新字符串
  00505F7A    8955 FC         mov dword ptr ss:[ebp-4],edx
  00505F7D    8B45 F8         mov eax,dword ptr ss:[ebp-8]
  00505F80    E8 AFEDEFFF     call 1CCD54.00404D34
  00505F85    33C0            xor eax,eax
  00505F87    55              push ebp
  00505F88    68 92605000     push 1CCD54.00506092
  00505F8D    64:FF30         push dword ptr fs:[eax]
  00505F90    64:8920         mov dword ptr fs:[eax],esp
  00505F93    8D45 F4         lea eax,dword ptr ss:[ebp-C]
  00505F96    BA AC605000     mov edx,1CCD54.005060AC              ; 固定字符串ASCII "Error"
  00505F9B    E8 7CE9EFFF     call 1CCD54.0040491C
  00505FA0    33DB            xor ebx,ebx
  00505FA2    837D FC 00      cmp dword ptr ss:[ebp-4],0           ; 这里看到常数1C8
  00505FA6    0F84 B3000000   je 1CCD54.0050605F
  00505FAC    837D F8 00      cmp dword ptr ss:[ebp-8],0           ; 新字符串
  00505FB0    0F84 A9000000   je 1CCD54.0050605F
  00505FB6    8B45 F8         mov eax,dword ptr ss:[ebp-8]
  00505FB9    E8 86EBEFFF     call 1CCD54.00404B44                 ; 新字符串到EAX
  00505FBE    8945 F0         mov dword ptr ss:[ebp-10],eax        ; 这里计算新字符串的位数,eax中看F=15位
  00505FC1    8B45 F0         mov eax,dword ptr ss:[ebp-10]
  00505FC4    85C0            test eax,eax
  00505FC6    7E 13           jle short 1CCD54.00505FDB            ; 往下循环点
  00505FC8    BA 01000000     mov edx,1                            ; 计算器
  00505FCD    8B4D F8         mov ecx,dword ptr ss:[ebp-8]
  00505FD0    0FB64C11 FF     movzx ecx,byte ptr ds:[ecx+edx-1]    ; 逐个取新字符串,第一位是6
  00505FD5    03D9            add ebx,ecx                          ; 累加
  00505FD7    42              inc edx
  00505FD8    48              dec eax
  00505FD9  ^ 75 F2           jnz short 1CCD54.00505FCD            ; 向上循环点,让ASCII码值累加
  00505FDB    81FB 204E0000   cmp ebx,4E20                         ; 累加的结果与常数4E20比较
  00505FE1    7E 0C           jle short 1CCD54.00505FEF            ; 小于/等于就跳
  00505FE3    8BC3            mov eax,ebx
  00505FE5    B9 204E0000     mov ecx,4E20
  00505FEA    99              cdq
  00505FEB    F7F9            idiv ecx
  00505FED    8BDA            mov ebx,edx
  00505FEF    8B75 FC         mov esi,dword ptr ss:[ebp-4]         ; 这里看到常数2E   
  00505FF2    0FAF75 F0       imul esi,dword ptr ss:[ebp-10]       ; 常数2E乘以新字符串的位数F
  00505FF6    6BC3 49         imul eax,ebx,49                      ; 上面的累加结果524乘以常数49,结果放入EAX
  00505FF9    03F0            add esi,eax                          ; 17744与2B2相加
  00505FFB    8D55 EC         lea edx,dword ptr ss:[ebp-14]
  00505FFE    8BC6            mov eax,esi                          ; 运算的结果放入EAX
  00506000    E8 6F3AF0FF     call 1CCD54.00409A74                 ; 运算结果转成10进制
  00506005    8B55 EC         mov edx,dword ptr ss:[ebp-14]        ; 判断这里的10进制码,可能就是真码的一部份
  00506008    8D45 F4         lea eax,dword ptr ss:[ebp-C]
  0050600B    B9 BC605000     mov ecx,1CCD54.005060BC
  00506010    E8 7BEBEFFF     call 1CCD54.00404B90
  00506015    8B45 FC         mov eax,dword ptr ss:[ebp-4]         ; 又是常数2E
  00506018    F7EB            imul ebx                             ; 2E乘以累加结果524
  0050601A    6BF0 15         imul esi,eax,15                      ; 2E乘以累加结果524=EC78再乘以15,结果放入ESI
  0050601D    FF75 F4         push dword ptr ss:[ebp-C]            ; 真码的第一部分入栈
  00506020    8D55 E8         lea edx,dword ptr ss:[ebp-18]
  00506023    8BC6            mov eax,esi
  00506025    E8 4A3AF0FF     call 1CCD54.00409A74                 ; 以上运算结果转成10进制
  0050602A    FF75 E8         push dword ptr ss:[ebp-18]           ; 判断这里的10进制码可能是真码的第二部分
  0050602D    68 BC605000     push 1CCD54.005060BC
  00506032    8D45 F4         lea eax,dword ptr ss:[ebp-C]
  00506035    BA 03000000     mov edx,3
  0050603A    E8 C5EBEFFF     call 1CCD54.00404C04
  0050603F    8B45 F0         mov eax,dword ptr ss:[ebp-10]        ; 真码第二部分入栈
  00506042    F7EB            imul ebx                             ; 新字符串乘以累加结果524
  00506044    6BF0 73         imul esi,eax,73                      ; 新字符串乘以累加结果524=4D1C再乘以73
  00506047    0375 FC         add esi,dword ptr ss:[ebp-4]         ; 结果再加上常数2E
  0050604A    8D55 E4         lea edx,dword ptr ss:[ebp-1C]
  0050604D    8BC6            mov eax,esi
  0050604F    E8 203AF0FF     call 1CCD54.00409A74                 ; 运算结果转成10进制码
  00506054    8B55 E4         mov edx,dword ptr ss:[ebp-1C]        ; 判断这里的10进制码可能是真码的第三部分
  00506057    8D45 F4         lea eax,dword ptr ss:[ebp-C]
  0050605A    E8 EDEAEFFF     call 1CCD54.00404B4C
  0050605F    8B45 08         mov eax,dword ptr ss:[ebp+8]
  00506062    8B55 F4         mov edx,dword ptr ss:[ebp-C]         ; 三部分的真码连接成真注册码
  00506065    E8 6EE8EFFF     call 1CCD54.004048D8
  0050606A    33C0            xor eax,eax
  0050606C    5A              pop edx
  0050606D    59              pop ecx
  0050606E    59              pop ecx
  0050606F    64:8910         mov dword ptr fs:[eax],edx
  00506072    68 99605000     push 1CCD54.00506099
  00506077    8D45 E4         lea eax,dword ptr ss:[ebp-1C]
  0050607A    BA 03000000     mov edx,3
  0050607F    E8 24E8EFFF     call 1CCD54.004048A8
  00506084    8D45 F4         lea eax,dword ptr ss:[ebp-C]
  00506087    BA 02000000     mov edx,2
  0050608C    E8 17E8EFFF     call 1CCD54.004048A8
  00506091    C3              retn
  00506092  ^ E9 6DE0EFFF     jmp 1CCD54.00404104
  00506097  ^ EB DE           jmp short 1CCD54.00506077
  00506099    5E              pop esi
  0050609A    5B              pop ebx
  0050609B    8BE5            mov esp,ebp
  0050609D    5D              pop ebp
  0050609E    C2 0400         retn 4
  
--------------------------------------------------------------------------------
【经验总结】
  算法的第一部分是将硬盘号与用户名转换成ASCII码,我这里的硬盘号与用户名连接后的新字符串是
  “6PS1X6PApiaoxue”,转成ASCII码是36505331583650417069616F787565,累加结果就是 524
  
  将 常数2E×新字符串的 位数F=2B2,524×常数49=17744
  17744+2B2=179F6  
  转成10进制后就是注册码的第一部分“96758”
  
  第二部分的注册码是将 常数2E×524=EC78,
  EC78×常数15=1365D8,
  转成10进制后就是注册码的第二部分“1271256”
  
  第三部分的注册码是将新字符串的 位数F×524=4D1C,
  4D1C×常数73=22A394再加上 常数2E=22A3C2  
  转成10进制码后就是注册码的第三部分“2270146”
  
  以上算法是现将16进制码相乘,再转成10进制码的,三部分的注册码连起来就是96758-1271256-2270146
  
  在跟进第一个算法CALL后,得到四组注册码,如下:
  
  102908-12602016-2270556   第一组注册码
  96758-1271256-2270146     第二组注册码
  101408-9838416-2270456    第三组注册码
  99848-6964272-2270352     第四组注册码   
  
  经过对四组注册码进行分析,只有第四组注册码能与用户名注册,其余三组(包括算法分析出来的一组)都不能注册,我试过用keymake做内存注册机来注册,还是不成功(出现ID错误等提示),看来软件存有暗桩啊。。。。
  
  注册信息保存在这里:HKEY_LOCAL_MACHINE\SOFTWARE\lsjsoft\dct\SerialNo
  
  第一次写破文,不对之处请高手指教!!!^_^
  
  
  
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年07月01日 13:19:40