【文章标题】: 分析潜移默化学英语软件+注册码
【文章作者】: 虾米
【作者邮箱】: 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
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)