首页
社区
课程
招聘
Word文档资料管理系统 初步分析!
发表于: 2004-10-12 16:10 6341

Word文档资料管理系统 初步分析!

2004-10-12 16:10
6341
Word文档资料管理系统 初步分析!

==================================================================================
【工程作者】sumica
==================================================================================
【软件名称】Word文档_资料管理系统
【下载地址】http://334420.nease.net
【所受限制】99次限制
【加壳保护】无
【软件介绍】
    像我这样的树型结构的文档管理系统在网上有很多,但我觉得都不怎么好用,为什么呢?主要是它们对应的文档编辑功能很
弱;想到现在人们办公的编辑软件主要都采用微软office的word,这样一个新颖的念头在我的脑海中产生了,我要做一个将word做
为编辑器的文档管理系统。Word文档/资料管理系统直接将大家都非常熟悉的Word集成到软件中来,这样Word就成了我的内部
的文档编辑器,由于人们对Word都比较熟悉,使用起来就比较得心应手了
【前    言】此软件网上已经被破解,并且有补丁下载。我只是按我自己的思路写写而已。属于极容易的破解!
==================================================================================
【工程平台】Win 2K
【调试工具】FLY-Ollydbg、WDASM
==================================================================================
【破解过程】
1.当然是用PEID查看,发现target 没有壳(这年头没壳的已经没多见了 ^_^)
2.OD load,用“Ultra String Refence”插件查找”您输入的注册码不正确,请重新输入!“F2下断。
  F9运行,跳过密码验证就是注册验证的窗口了,输入测试注册码“78787878”,确定 被拦截下来。
3.看右下脚的 内存窗口,你的机器码、注册码、测试注册码都已经在列。
  本机机器码:107984   注册码:103424

==================================================================================
下面用WDASM分析看看:

…… ……
:0059A1C2 E8A5ABE6FF              call 00404D6C   //跟踪得知 这是关键call  比较注册码是否正确的地方
                                                    到这里从OD的右上角,真假的注册码 已经显示出来了

*行内的就是该CALL的内容
****************************************************************************************
:00404D6C 53                      push ebx
:00404D6D 56                      push esi
:00404D6E 57                      push edi
:00404D6F 89C6                    mov esi, eax    //eax=78787878 (测试码)
:00404D71 89D7                    mov edi, edx     //edx= 103424 (正确注册码)
:00404D73 39D0                    cmp eax, edx    //两码作比较
:00404D75 0F848F000000            je 00404E0A       //注册码正确就跳出此call
:00404D7B 85F6                    test esi, esi     //对两个操作数进行按位的'与运算,唯一不同之处是不将‘与’的结果送目的操作数,
                       //esi=78787878 (测试码)   即本指令对两个操作数的内容均不进行修改,仅是在逻辑与操作后,对标志位重新置位.
:00404D7D 7468                    je 00404DE7       //等于0 就跳到 004040E7
:00404D7F 85FF                    test edi, edi     //对标志位重新置位
                                                    //edi= 103424 (正确注册码)
:00404D81 746B                    je 00404DEE
:00404D83 8B46FC                  mov eax, dword ptr [esi-04]   //eax=78787878 (测试码)
:00404D86 8B57FC                  mov edx, dword ptr [edi-04]   //edx= 103424 (正确注册码)      
:00404D89 29D0                    sub eax, edx            //eax-edx 结果存放在eax中
:00404D8B 7702                    ja 00404D8F              //大于就跳过 add edx, eax
:00404D8D 01C2                    add edx, eax

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404D8B(C)
|
:00404D8F 52                      push edx
:00404D90 C1EA02                  shr edx, 02
:00404D93 7426                    je 00404DBB

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404DB1(C)
|
:00404D95 8B0E                    mov ecx, dword ptr [esi]
:00404D97 8B1F                    mov ebx, dword ptr [edi]
:00404D99 39D9                    cmp ecx, ebx
:00404D9B 7558                    jne 00404DF5     //进行真假对比
:00404D9D 4A                      dec edx
:00404D9E 7415                    je 00404DB5
:00404DA0 8B4E04                  mov ecx, dword ptr [esi+04]
:00404DA3 8B5F04                  mov ebx, dword ptr [edi+04]
:00404DA6 39D9                    cmp ecx, ebx
:00404DA8 754B                    jne 00404DF5     //进行真假对比
:00404DAA 83C608                  add esi, 00000008
:00404DAD 83C708                  add edi, 00000008
:00404DB0 4A                      dec edx
:00404DB1 75E2                    jne 00404D95
:00404DB3 EB06                    jmp 00404DBB

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404D9E(C)
|
:00404DB5 83C604                  add esi, 00000004
:00404DB8 83C704                  add edi, 00000004

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00404D93(C), :00404DB3(U)
|
:00404DBB 5A                      pop edx
:00404DBC 83E203                  and edx, 00000003
:00404DBF 7422                    je 00404DE3
:00404DC1 8B0E                    mov ecx, dword ptr [esi]
:00404DC3 8B1F                    mov ebx, dword ptr [edi]
:00404DC5 38D9                    cmp cl, bl              \\cl=37('7')  bl=31('1') 比较开始位
:00404DC7 7541                    jne 00404E0A            \\不等就跳 到 ret
:00404DC9 4A                      dec edx                 \\记数器减1
:00404DCA 7417                    je 00404DE3             \\等于 就条到下面
:00404DCC 38FD                    cmp ch, bh              \\比较第二位
:00404DCE 753A                    jne 00404E0A            \\不等就跳 到 ret
:00404DD0 4A                      dec edx                 \\记数器减1
:00404DD1 7410                    je 00404DE3             \\等于 就条到下面
:00404DD3 81E30000FF00            and ebx, 00FF0000        
:00404DD9 81E10000FF00            and ecx, 00FF0000
:00404DDF 39D9                    cmp ecx, ebx             \\比较第三位
:00404DE1 7527                    jne 00404E0A             \\不等就跳 到 ret

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00404DBF(C), :00404DCA(C), :00404DD1(C)                  
|
:00404DE3 01C0                    add eax, eax               
:00404DE5 EB23                    jmp 00404E0A              \\跳 到 ret

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404D7D(C)
|
:00404DE7 8B57FC                  mov edx, dword ptr [edi-04]
:00404DEA 29D0                    sub eax, edx
:00404DEC EB1C                    jmp 00404E0A

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404D81(C)
|
:00404DEE 8B46FC                  mov eax, dword ptr [esi-04]
:00404DF1 29D0                    sub eax, edx
:00404DF3 EB15                    jmp 00404E0A

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00404D9B(C), :00404DA8(C)
|
:00404DF5 5A                      pop edx
:00404DF6 38D9                    cmp cl, bl       \\比较第一位
:00404DF8 7510                    jne 00404E0A      
:00404DFA 38FD                    cmp ch, bh       \\第二位比较
:00404DFC 750C                    jne 00404E0A
:00404DFE C1E910                  shr ecx, 10
:00404E01 C1EB10                  shr ebx, 10
:00404E04 38D9                    cmp cl, bl        \\第三位比较
:00404E06 7502                    jne 00404E0A
:00404E08 38FD                    cmp ch, bh         \\第四位比较

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00404D75(C), :00404DC7(C), :00404DCE(C), :00404DE1(C), :00404DE5(U)
|:00404DEC(U), :00404DF3(U), :00404DF8(C), :00404DFC(C), :00404E06(C)
|
:00404E0A 5F                      pop edi   
:00404E0B 5E                      pop esi
:00404E0C 5B                      pop ebx
:00404E0D C3                      ret              //跳出关键call
**************************************************************************************

:0059A1C7 0F85B1000000            jne 0059A27E    //不等于就跳死了  所以这也是关键跳了  
:0059A1CD B201                    mov dl, 01      //dl=00 输入正确的注册码时
:0059A1CF A1103F4400              mov eax, dword ptr [00443F10]
:0059A1D4 E8379EEAFF              call 00444010
:0059A1D9 8BD8                    mov ebx, eax
:0059A1DB BA02000080              mov edx, 80000002
:0059A1E0 8BC3                    mov eax, ebx
:0059A1E2 E8C99EEAFF              call 004440B0

* Possible StringData Ref from Code Obj ->"SOFTWARE\wjsh" \\从这里看出 软件在注册表建主键,删除该键就可重复试验。
                                  |
:0059A1E7 BAE4A25900              mov edx, 0059A2E4
:0059A1EC 8BC3                    mov eax, ebx
:0059A1EE E8ADA5EAFF              call 004447A0
:0059A1F3 3C01                    cmp al, 01        
:0059A1F5 7510                    jne 0059A207      \\不相等就跳过了 成功jmp
:0059A1F7 B101                    mov cl, 01

* Possible StringData Ref from Code Obj ->"SOFTWARE\wjsh"
                                  |
:0059A1F9 BAE4A25900              mov edx, 0059A2E4
:0059A1FE 8BC3                    mov eax, ebx
:0059A200 E8EB9FEAFF              call 004441F0
:0059A205 EB2B                    jmp 0059A232     \\跳到显示成功信息的地方

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0059A1F5(C)
|

* Possible StringData Ref from Code Obj ->"SOFTWARE\wjsh"  
                                  |
:0059A207 BAE4A25900              mov edx, 0059A2E4
:0059A20C 8BC3                    mov eax, ebx
:0059A20E E8019FEAFF              call 00444114
:0059A213 B101                    mov cl, 01

* Possible StringData Ref from Code Obj ->"SOFTWARE\wjsh"
                                  |
:0059A215 BAE4A25900              mov edx, 0059A2E4
:0059A21A 8BC3                    mov eax, ebx
:0059A21C E8CF9FEAFF              call 004441F0
:0059A221 B9C3FFFFFF              mov ecx, FFFFFFC3

* Possible StringData Ref from Code Obj ->"run_times"    //运行次数的注册表键值
                                  |
:0059A226 BAFCA25900              mov edx, 0059A2FC
:0059A22B 8BC3                    mov eax, ebx
:0059A22D E8B6A3EAFF              call 004445E8

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0059A205(U)
|
:0059A232 8D55F0                  lea edx, dword ptr [ebp-10]
:0059A235 8B8604030000            mov eax, dword ptr [esi+00000304]
:0059A23B E8C445ECFF              call 0045E804
:0059A240 8B4DF0                  mov ecx, dword ptr [ebp-10]

* Possible StringData Ref from Code Obj ->"regist_code"
                                  |
:0059A243 BA10A35900              mov edx, 0059A310
:0059A248 8BC3                    mov eax, ebx
:0059A24A E8F5A2EAFF              call 00444544
:0059A24F 8BC3                    mov eax, ebx
:0059A251 E82A9EEAFF              call 00444080
:0059A256 8BC3                    mov eax, ebx
:0059A258 E80F98E6FF              call 00403A6C

* Possible StringData Ref from Code Obj ->"注册成功!谢谢您的注册,谢谢您对我们的支持!"
                                  |
:0059A25D B824A35900              mov eax, 0059A324
:0059A262 E83D0CEAFF              call 0043AEA4
:0059A267 A1A06F5A00              mov eax, dword ptr [005A6FA0]
:0059A26C 8B00                    mov eax, dword ptr [eax]
:0059A26E C6801904000001          mov byte ptr [eax+00000419], 01
:0059A275 8BC6                    mov eax, esi
:0059A277 E80C11EEFF              call 0047B388
:0059A27C EB25                    jmp 0059A2A3     \\跳过“您输入的注册码不正确,请重新输入!”这段

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0059A1C7(C)
|

* Possible StringData Ref from Code Obj ->"您输入的注册码不正确,请重新输入!"
                                  |
:0059A27E B85CA35900              mov eax, 0059A35C       \\OD 用F2在这里下断就可被拦截
:0059A283 E81C0CEAFF              call 0043AEA4
:0059A288 33D2                    xor edx, edx
:0059A28A 8B8604030000            mov eax, dword ptr [esi+00000304]
:0059A290 E89F45ECFF              call 0045E834
:0059A295 8B8604030000            mov eax, dword ptr [esi+00000304]
:0059A29B 8B10                    mov edx, dword ptr [eax]
:0059A29D FF92C4000000            call dword ptr [edx+000000C4]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0059A27C(U)
|
:0059A2A3 33C0                    xor eax, eax

==================================================================================
【工程声明】本过程只供内部学习之用!如要转载请保持过程完整!
==================================================================================

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
2
支持!
2004-10-12 16:11
0
游客
登录 | 注册 方可回帖
返回
//