首页
社区
课程
招聘
XX输入法 V8.8版 注册算法分析
发表于: 2005-7-13 14:30 4255

XX输入法 V8.8版 注册算法分析

2005-7-13 14:30
4255
XX输入法 V8.8版 注册算法分析

日期:2005年7月13日  破解人:Baby2008

-------------------------------------------------------------------------------------------------------------------------
『软件名称』:XX输入法 V8.8版
『软件大小』:1.50MB
『下载地址』:自己找找
『软件介绍』:让13亿中国人学会打字
『保护方式』:注册码保护
『破解工具』:OllyDbg.V1.10 聆风听雨汉化第二版
『破解过程』:
OD载入记事本(Notepad.exe),F9运行,切换到目标输入法,输入注册信息;切换到OD,查看->执行模块,双击*.ime,查找“注册码不对……”,向上来到1000D6A3处下断,点击注册按钮,OD中断在:

1000D6A3     FF15 64D70410       call dword ptr ds:[<&USER32.GetDlgItemTextA>]        ; USER32.GetDlgItemTextA
1000D6A9     3BF4                cmp esi,esp
1000D6AB     E8 100B0000         call DZT.1000E1C0
1000D6B0     8D55 A0             lea edx,dword ptr ss:[ebp-60]
1000D6B3     52                  push edx
1000D6B4     8D45 B4             lea eax,dword ptr ss:[ebp-4C]                        ; 注册名
1000D6B7     50                  push eax
1000D6B8     8D4D DC             lea ecx,dword ptr ss:[ebp-24]                        ; 机器码
1000D6BB     51                  push ecx
1000D6BC     E8 F839FFFF         call DZT.100010B9                                    ; SN
1000D6C1     83C4 0C             add esp,0C
1000D6C4     8D55 8C             lea edx,dword ptr ss:[ebp-74]                        ; 试炼码
1000D6C7     52                  push edx
1000D6C8     8D45 A0             lea eax,dword ptr ss:[ebp-60]                        ; 注册码
1000D6CB     50                  push eax
1000D6CC     E8 FF160000         call DZT.1000EDD0                                    ; 比较函数
1000D6D1     83C4 08             add esp,8
1000D6D4     85C0                test eax,eax
1000D6D6     75 1C               jnz short DZT.1000D6F4                               ; 爆破点
1000D6D8     E8 E139FFFF         call DZT.100010BE
1000D6DD     8BF4                mov esi,esp
1000D6DF     6A 01               push 1
1000D6E1     8B4D 08             mov ecx,dword ptr ss:[ebp+8]
1000D6E4     51                  push ecx
1000D6E5     FF15 E8D70410       call dword ptr ds:[<&USER32.EndDialog>]              ; USER32.EndDialog
1000D6EB     3BF4                cmp esi,esp
1000D6ED     E8 CE0A0000         call DZT.1000E1C0
1000D6F2     EB 1D               jmp short DZT.1000D711
1000D6F4     8BF4                mov esi,esp
1000D6F6     6A 00               push 0
1000D6F8     68 84020410         push DZT.10040284
1000D6FD     68 4C020410         push DZT.1004024C                                    ; 注册码不对
1000D702     6A 00               push 0
1000D704     FF15 F4D70410       call dword ptr ds:[<&USER32.MessageBoxA>]            ; USER32.MessageBoxA
1000D70A     3BF4                cmp esi,esp
1000D70C     E8 AF0A0000         call DZT.1000E1C0
1000D711     E9 9F000000         jmp DZT.1000D7B5
-----------------------------------------------------------------------------------------------------------------

跟进关键函数:
-----------------------------------------------------------------------------------------------------------------
1000DB60     55                  push ebp
1000DB61     8BEC                mov ebp,esp
1000DB63     81EC 88000000       sub esp,88
1000DB69     53                  push ebx
1000DB6A     56                  push esi
1000DB6B     57                  push edi
1000DB6C     8DBD 78FFFFFF       lea edi,dword ptr ss:[ebp-88]
1000DB72     B9 22000000         mov ecx,22
1000DB77     B8 CCCCCCCC         mov eax,CCCCCCCC
1000DB7C     F3:AB               rep stos dword ptr es:[edi]
1000DB7E     C645 E4 00          mov byte ptr ss:[ebp-1C],0
1000DB82     8A45 E4             mov al,byte ptr ss:[ebp-1C]
1000DB85     8845 E8             mov byte ptr ss:[ebp-18],al
1000DB88     8A4D E8             mov cl,byte ptr ss:[ebp-18]
1000DB8B     884D EC             mov byte ptr ss:[ebp-14],cl
1000DB8E     6A 08               push 8                                               ; 8
1000DB90     8B55 08             mov edx,dword ptr ss:[ebp+8]                         ; 机器码
1000DB93     52                  push edx                                             ; 0
1000DB94     8D45 D0             lea eax,dword ptr ss:[ebp-30]                        ; 存放机器码前面部分,记为M1
1000DB97     50                  push eax
1000DB98     E8 E3060000         call DZT.1000E280                                    ; 取机器码前面部分M1
1000DB9D     83C4 0C             add esp,0C
1000DBA0     C745 FC 00000000    mov dword ptr ss:[ebp-4],0
1000DBA7     EB 09               jmp short DZT.1000DBB2
1000DBA9     8B4D FC             mov ecx,dword ptr ss:[ebp-4]
1000DBAC     83C1 01             add ecx,1
1000DBAF     894D FC             mov dword ptr ss:[ebp-4],ecx
1000DBB2     837D FC 08          cmp dword ptr ss:[ebp-4],8
1000DBB6     7D 0F               jge short DZT.1000DBC7
1000DBB8     8B55 FC             mov edx,dword ptr ss:[ebp-4]
1000DBBB     8A45 EC             mov al,byte ptr ss:[ebp-14]
1000DBBE     024415 D0           add al,byte ptr ss:[ebp+edx-30]
1000DBC2     8845 EC             mov byte ptr ss:[ebp-14],al
1000DBC5   ^ EB E2               jmp short DZT.1000DBA9
1000DBC7     8B4D EC             mov ecx,dword ptr ss:[ebp-14]                        ; ASCII循环累加结果,SUM1
1000DBCA     81E1 FF000000       and ecx,0FF
1000DBD0     F7D1                not ecx
1000DBD2     884D EC             mov byte ptr ss:[ebp-14],cl                          ; Not (SUM1 AND FF)
1000DBD5     6A 08               push 8                                               ; 8
1000DBD7     8B55 08             mov edx,dword ptr ss:[ebp+8]                         ; 机器码
1000DBDA     83C2 09             add edx,9                                            ; 9
1000DBDD     52                  push edx
1000DBDE     8D45 D0             lea eax,dword ptr ss:[ebp-30]                        ; 存放机器码后面部分,记为M2
1000DBE1     50                  push eax
1000DBE2     E8 99060000         call DZT.1000E280                                    ; Subst(机器码,9,8)取机器码后面部分
1000DBE7     83C4 0C             add esp,0C
1000DBEA     C745 FC 00000000    mov dword ptr ss:[ebp-4],0
1000DBF1     EB 09               jmp short DZT.1000DBFC
1000DBF3     8B4D FC             mov ecx,dword ptr ss:[ebp-4]
1000DBF6     83C1 01             add ecx,1
1000DBF9     894D FC             mov dword ptr ss:[ebp-4],ecx
1000DBFC     837D FC 08          cmp dword ptr ss:[ebp-4],8
1000DC00     7D 0F               jge short DZT.1000DC11
1000DC02     8B55 FC             mov edx,dword ptr ss:[ebp-4]
1000DC05     8A45 E8             mov al,byte ptr ss:[ebp-18]
1000DC08     024415 D0           add al,byte ptr ss:[ebp+edx-30]
1000DC0C     8845 E8             mov byte ptr ss:[ebp-18],al
1000DC0F   ^ EB E2               jmp short DZT.1000DBF3                               ; 循环累加
1000DC11     8B4D E8             mov ecx,dword ptr ss:[ebp-18]                        ; 结果记为SUM2
1000DC14     81E1 FF000000       and ecx,0FF
1000DC1A     F7D1                not ecx
1000DC1C     884D E8             mov byte ptr ss:[ebp-18],cl                          ; NOT (M2 AND FF)
1000DC1F     8B55 0C             mov edx,dword ptr ss:[ebp+C]                         ; 注册名
1000DC22     52                  push edx
1000DC23     E8 D8050000         call DZT.1000E200                                    ; Length(注册名)
1000DC28     83C4 04             add esp,4
1000DC2B     8945 F4             mov dword ptr ss:[ebp-C],eax                         ; 注册名长度
1000DC2E     C745 FC 00000000    mov dword ptr ss:[ebp-4],0
1000DC35     EB 09               jmp short DZT.1000DC40
1000DC37     8B45 FC             mov eax,dword ptr ss:[ebp-4]
1000DC3A     83C0 01             add eax,1
1000DC3D     8945 FC             mov dword ptr ss:[ebp-4],eax
1000DC40     8B4D FC             mov ecx,dword ptr ss:[ebp-4]
1000DC43     3B4D F4             cmp ecx,dword ptr ss:[ebp-C]
1000DC46     7D 10               jge short DZT.1000DC58
1000DC48     8B55 0C             mov edx,dword ptr ss:[ebp+C]                         ; 注册名
1000DC4B     0355 FC             add edx,dword ptr ss:[ebp-4]
1000DC4E     8A45 E4             mov al,byte ptr ss:[ebp-1C]
1000DC51     0202                add al,byte ptr ds:[edx]                             ; Name[i]
1000DC53     8845 E4             mov byte ptr ss:[ebp-1C],al
1000DC56   ^ EB DF               jmp short DZT.1000DC37                               ; 循环注册名累加
1000DC58     8B4D E4             mov ecx,dword ptr ss:[ebp-1C]                        ; 注册名累加结果SUM_Name
1000DC5B     81E1 FF000000       and ecx,0FF
1000DC61     F7D1                not ecx
1000DC63     884D E4             mov byte ptr ss:[ebp-1C],cl                          ; NOT (SUM_Name AND FF)
1000DC66     C745 FC 00000000    mov dword ptr ss:[ebp-4],0
1000DC6D     EB 09               jmp short DZT.1000DC78
1000DC6F     8B55 FC             mov edx,dword ptr ss:[ebp-4]
1000DC72     83C2 01             add edx,1
1000DC75     8955 FC             mov dword ptr ss:[ebp-4],edx
1000DC78     837D FC 08          cmp dword ptr ss:[ebp-4],8
1000DC7C     0F8D D8000000       jge DZT.1000DD5A
1000DC82     8B45 FC             mov eax,dword ptr ss:[ebp-4]
1000DC85     83C0 11             add eax,11
1000DC88     8945 B8             mov dword ptr ss:[ebp-48],eax
1000DC8B     DB45 B8             fild dword ptr ss:[ebp-48]
1000DC8E     83EC 08             sub esp,8
1000DC91     DD1C24              fstp qword ptr ss:[esp]
1000DC94     E8 6B160000         call DZT.1000F304
1000DC99     83C4 08             add esp,8
1000DC9C     DD5D D8             fstp qword ptr ss:[ebp-28]
1000DC9F     8B4D DC             mov ecx,dword ptr ss:[ebp-24]
1000DCA2     51                  push ecx
1000DCA3     8B55 D8             mov edx,dword ptr ss:[ebp-28]
1000DCA6     52                  push edx
1000DCA7     68 70030410         push DZT.10040370                                    ; ASCII "%f"
1000DCAC     8D45 BC             lea eax,dword ptr ss:[ebp-44]
1000DCAF     50                  push eax
1000DCB0     E8 BB0A0000         call DZT.1000E770
1000DCB5     83C4 10             add esp,10
1000DCB8     C645 E0 00          mov byte ptr ss:[ebp-20],0
1000DCBC     C745 F8 00000000    mov dword ptr ss:[ebp-8],0
1000DCC3     EB 09               jmp short DZT.1000DCCE
1000DCC5     8B4D F8             mov ecx,dword ptr ss:[ebp-8]
1000DCC8     83C1 01             add ecx,1
1000DCCB     894D F8             mov dword ptr ss:[ebp-8],ecx
1000DCCE     8D55 BC             lea edx,dword ptr ss:[ebp-44]
1000DCD1     52                  push edx
1000DCD2     E8 29050000         call DZT.1000E200
1000DCD7     83C4 04             add esp,4
1000DCDA     3945 F8             cmp dword ptr ss:[ebp-8],eax
1000DCDD     7D 0F               jge short DZT.1000DCEE
1000DCDF     8B45 F8             mov eax,dword ptr ss:[ebp-8]
1000DCE2     8A4D E0             mov cl,byte ptr ss:[ebp-20]
1000DCE5     024C05 BC           add cl,byte ptr ss:[ebp+eax-44]
1000DCE9     884D E0             mov byte ptr ss:[ebp-20],cl
1000DCEC   ^ EB D7               jmp short DZT.1000DCC5
1000DCEE     8B55 E0             mov edx,dword ptr ss:[ebp-20]
1000DCF1     81E2 FF000000       and edx,0FF
1000DCF7     8B45 EC             mov eax,dword ptr ss:[ebp-14]
1000DCFA     25 FF000000         and eax,0FF
1000DCFF     33D0                xor edx,eax
1000DD01     8B4D E8             mov ecx,dword ptr ss:[ebp-18]
1000DD04     81E1 FF000000       and ecx,0FF
1000DD0A     33D1                xor edx,ecx
1000DD0C     8B45 E4             mov eax,dword ptr ss:[ebp-1C]
1000DD0F     25 FF000000         and eax,0FF
1000DD14     33D0                xor edx,eax
1000DD16     8855 F0             mov byte ptr ss:[ebp-10],dl
1000DD19     8B4D F0             mov ecx,dword ptr ss:[ebp-10]
1000DD1C     81E1 FF000000       and ecx,0FF
1000DD22     83F9 41             cmp ecx,41
1000DD25     7D 0B               jge short DZT.1000DD32
1000DD27     8A55 F0             mov dl,byte ptr ss:[ebp-10]
1000DD2A     80C2 1A             add dl,1A
1000DD2D     8855 F0             mov byte ptr ss:[ebp-10],dl
1000DD30   ^ EB E7               jmp short DZT.1000DD19
1000DD32     8B45 F0             mov eax,dword ptr ss:[ebp-10]
1000DD35     25 FF000000         and eax,0FF
1000DD3A     83F8 5B             cmp eax,5B
1000DD3D     7C 0B               jl short DZT.1000DD4A
1000DD3F     8A4D F0             mov cl,byte ptr ss:[ebp-10]
1000DD42     80E9 1A             sub cl,1A
1000DD45     884D F0             mov byte ptr ss:[ebp-10],cl
1000DD48   ^ EB E8               jmp short DZT.1000DD32
1000DD4A     8B55 10             mov edx,dword ptr ss:[ebp+10]
1000DD4D     0355 FC             add edx,dword ptr ss:[ebp-4]
1000DD50     8A45 F0             mov al,byte ptr ss:[ebp-10]
1000DD53     8802                mov byte ptr ds:[edx],al                             ; 存放正确注册码
1000DD55   ^ E9 15FFFFFF         jmp DZT.1000DC6F                                     ; 循环产生注册码
1000DD5A     8B4D 10             mov ecx,dword ptr ss:[ebp+10]
1000DD5D     C641 08 00          mov byte ptr ds:[ecx+8],0
1000DD61     5F                  pop edi
1000DD62     5E                  pop esi
1000DD63     5B                  pop ebx
1000DD64     81C4 88000000       add esp,88
1000DD6A     3BEC                cmp ebp,esp
1000DD6C     E8 4F040000         call DZT.1000E1C0
1000DD71     8BE5                mov esp,ebp
1000DD73     5D                  pop ebp
1000DD74     C3                  retn
-----------------------------------------------------------------------------------------------------------------
『破解总结』:

注册算法不难,关键是浮点运算,主要目的是学习一下输入法是怎样调试的,不是PJ后自用,我只会拼音输入,丢面子,呵呵。

『注册机源代码』:
支持国产共享软件,不提供注册机源代码。

我的机器码:00000F24-3FEBF9FF
注册名:Baby2008
注册码:GMXQOTPF

注册信息保存在:HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WangImage.DcomCtrl.1\Settings

直接在保存位置下建立DWord类型:wang=0 即为注册版本。

                  <完>

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 221
活跃值: (137)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
2
第一个顶一下
2005-7-13 14:47
0
游客
登录 | 注册 方可回帖
返回
//