测试环境
系统: xp sp3
sc_office_2003_pro
调试器 :od 1.10
高手不要见笑,仅供小菜玩乐,有不对或不足的地方还请多多指教,不胜感激!
一:定位关键CALL
1. 因为该软件是word插件,所以用OD载入word.exe,F9运行,运行后如下图:

2. 点击按钮”Save As PDF”出现如下界面

3. 点击”Register”随便输入用户名与注册码,如下图:

4. 点击 “暂停” 点击 “K” ,来到如下图的地方

5. 选择”MessageBoxExW” 右键 “显示调用”,然后在函数尾下好断点,F9运行,点”确定”,就会被断下

6. 接下来就是一直F8单步走,来到如下图的地方

7. 往上找就能找到关键跳与关键CALL,如下图

8. 在关键CALL下好断点后重新载入OD, F9运行,随便输入用户名与注册码,接着就是分析算法了
二:算法分析
1. 首先将注册码中含有小写字母转换成大写
1010EC3B 8BC6 mov eax,esi
1010EC3D 66:391E cmp word ptr ds:[esi],bx
1010EC40 74 1B je short doc2pdf.1010EC5D
1010EC42 0FB708 movzx ecx,word ptr ds:[eax] ; 判断并取字符
1010EC45 83F9 61 cmp ecx,0x61 ; ECX小于a 就跳
1010EC48 72 0B jb short doc2pdf.1010EC55
1010EC4A 83F9 7A cmp ecx,0x7A ; ECX大于z 就跳
1010EC4D 77 06 ja short doc2pdf.1010EC55
1010EC4F 83C1 E0 add ecx,-0x20 ; 满足条件就将ECX and -0x20
1010EC52 66:8908 mov word ptr ds:[eax],cx ; 存放
1010EC55 83C0 02 add eax,0x2
1010EC58 66:3918 cmp word ptr ds:[eax],bx
1010EC5B ^ 75 E5 jnz short doc2pdf.1010EC42 ; 判断是否完成
1010EC5D 33C0 xor eax,eax
1010EC5F E9 E2000000 jmp doc2pdf.1010ED46
1010EC3D 66:391E cmp word ptr ds:[esi],bx
1010EC40 74 1B je short doc2pdf.1010EC5D
1010EC42 0FB708 movzx ecx,word ptr ds:[eax] ; 判断并取字符
1010EC45 83F9 61 cmp ecx,0x61 ; ECX小于a 就跳
1010EC48 72 0B jb short doc2pdf.1010EC55
1010EC4A 83F9 7A cmp ecx,0x7A ; ECX大于z 就跳
1010EC4D 77 06 ja short doc2pdf.1010EC55
1010EC4F 83C1 E0 add ecx,-0x20 ; 满足条件就将ECX and -0x20
1010EC52 66:8908 mov word ptr ds:[eax],cx ; 存放
1010EC55 83C0 02 add eax,0x2
1010EC58 66:3918 cmp word ptr ds:[eax],bx
1010EC5B ^ 75 E5 jnz short doc2pdf.1010EC42 ; 判断是否完成
1010EC5D 33C0 xor eax,eax
1010EC5F E9 E2000000 jmp doc2pdf.1010ED46
1001744B E8 A0280000 call <doc2pdf.WideCharToMultiByte> ; 将用户名宽字符转换成单字符
10019D60 <doc2pd> 55 push ebp
10019D61 8BEC mov ebp,esp
10019D63 56 push esi
10019D64 8B75 08 mov esi,dword ptr ss:[ebp+0x8]
10019D67 85F6 test esi,esi
10019D69 74 37 je short doc2pdf.10019DA2
10019D6B 8B55 0C mov edx,dword ptr ss:[ebp+0xC]
10019D6E 85D2 test edx,edx
10019D70 74 30 je short doc2pdf.10019DA2
10019D72 8A0A mov cl,byte ptr ds:[edx]
10019D74 8BC6 mov eax,esi
10019D76 84C9 test cl,cl
10019D78 74 25 je short doc2pdf.10019D9F
10019D7A 8D9B 00000000 lea ebx,dword ptr ds:[ebx]
10019D80 80F9 61 cmp cl,0x61 ; 判断字符a
10019D83 7C 05 jl short doc2pdf.10019D8A
10019D85 80F9 7A cmp cl,0x7A ; 判断字符z
10019D88 7E 0A jle short doc2pdf.10019D94
10019D8A 80F9 41 cmp cl,0x41 ; 字符A
10019D8D 7C 08 jl short doc2pdf.10019D97
10019D8F 80F9 5A cmp cl,0x5A ; 字符Z
10019D92 7F 03 jg short doc2pdf.10019D97
10019D94 880E mov byte ptr ds:[esi],cl
10019D96 46 inc esi
10019D97 8A4A 01 mov cl,byte ptr ds:[edx+0x1]
10019D9A 42 inc edx
10019D9B 84C9 test cl,cl
10019D9D ^ 75 E1 jnz short doc2pdf.10019D80
10019D9F 5E pop esi
10019DA0 5D pop ebp
10019DA1 C3 retn
1001746D E8 7E280000 call <doc2pdf.WideCharToMultiByte> ; 将字串"f4hguNAg"转换成单字符
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课