【软件名称】:XXXX图书馆管理系统 软件版本:8.82
【软件大小】:5480KB
【下载地址】:网上都是功能不全的演示版,注册后作者提供无功能限制版
【软件限制】:加密狗
【破解声明】:初学Crack,只是感兴趣,没有其它目的。第一次发分析贴,失误之处难免,敬请诸位大侠赐教!
【操作系统】:winxp sp2
【破解工具】:peid094,ollydbg1.1
———————————————————————————————————————————
【破解过程】:
前段时间,单位急需一款图书管理软件,于是,花9XX购买了这款图书管理软件,正式版是用USB狗进行加密的,脱狗无法运行,由于单位图书馆新购进上万册图书,要求短时间录入完毕,一台机器有点力不从心。于是试着解狗。用peid查壳显示是yoda's cryptor 1.x / modified加的壳,但脱壳机却不能正常脱壳,只能手工进行啦~~
打开OD,调试选项选择忽略全部异常,用Isdebugpresent插件去掉OD的调试器标志,载入主程序,提示被压缩,取消分析。
004FD060 60 pushad <------//ollydbg载入后停在这里
004FD061 E8 00000000 call 图书馆管.004FD066
004FD066 5D pop ebp ; kernel32.7C816D4F
004FD067 81ED 13414000 sub ebp,图书馆管.00404113
004FD06D B9 F10B0000 mov ecx,0BF1
004FD072 8DBD 5B414000 lea edi,dword ptr ss:[ebp+40415>
004FD078 8BF7 mov esi,edi ; ntdll.7C930738
004FD07A AC lods byte ptr ds:[esi]
004FD07B C0C0 5A rol al,5A
004FD07E 04 3D add al,3D
004FD080 02C1 add al,cl
004FD082 2C BF sub al,0BF
004FD084 02C1 add al,cl
004FD086 F8 clc
004FD087 04 B2 add al,0B2
004FD089 04 97 add al,97
004FD08B EB 01 jmp short 图书馆管.004FD08E
004FD08D - E9 C0C828F9 jmp F9789952
004FD092 04 26 add al,26
004FD094 04 74 add al,74
004FD09A /EB 01 jmp short 图书馆管.004FD09D
004FD09C |E8 F82CE234 call 3531FD99
004FD0A1 F8 clc
004FD0A2 34 BA xor al,0BA
004FD0A4 C0C0 5A rol al,5A
004FD0A7 04 3D add al,3D
004FD0A9 02C1 add al,cl
004FD0AB AA stos byte ptr es:[edi]
004FD0AC ^ E2 CC loopd short 图书馆管.004FD07A <------//循环,到下一行按F4运行,
004FD0AE 89E6 mov esi,esp
...........................
004FD0AE 8B4424 20 mov eax,dword ptr ss:[esp+20] ; kernel32.7C816D4F
004FD0B2 40 inc eax
004FD0B3 78 0A js short 图书馆管.004FD0BF
004FD0B5 C785 71494000 01000>mov dword ptr ss:[ebp+404971],1
004FD0BF 8D85 0D414000 lea eax,dword ptr ss:[ebp+40410D]
004FD0C5 B9 03070000 mov ecx,703
004FD0CA E8 1A030000 call 图书馆管.004FD3E9
004FD0CF 8985 6D494000 mov dword ptr ss:[ebp+40496D],eax
004FD0D5 8B85 65494000 mov eax,dword ptr ss:[ebp+404965]
004FD0DB 83E0 01 and eax,1
004FD0DE /74 40 je short 图书馆管.004FD120 <------//跳得好远
004FD0E0 |8DB5 DD4A4000 lea esi,dword ptr ss:[ebp+404ADD]
004FD0E6 |8D85 BA414000 lea eax,dword ptr ss:[ebp+4041BA]
004FD0EC |8946 08 mov dword ptr ds:[esi+8],eax
004FD0EF |8BFD mov edi,ebp
004FD0F1 |8D85 FB484000 lea eax,dword ptr ss:[ebp+4048FB]
004FD0F7 |33DB xor ebx,ebx
004FD0F9 |50 push eax
004FD0FA |64:FF33 push dword ptr fs:[ebx]
004FD0FD |64:8923 mov dword ptr fs:[ebx],esp
004FD100 |BD 4B484342 mov ebp,4243484B
004FD105 |66:B8 0400 mov ax,4
004FD109 |EB 01 jmp short 图书馆管.004FD10C
004FD10B |FFCC dec esp
004FD10D |8BEF mov ebp,edi ; 图书馆管.004FD763
004FD10F |33DB xor ebx,ebx
004FD111 |64:8F03 pop dword ptr fs:[ebx] ; ntdll.7C930738
004FD114 |83C4 04 add esp,4
004FD117 |3C 04 cmp al,4
004FD119 |74 05 je short 图书馆管.004FD120
004FD11B |EB 01 jmp short 图书馆管.004FD11E
004FD11D -|E9 61C38B85 jmp 85DB9483
004FD122 5D pop ebp ; ntdll.7C930738
004FD123 49 dec ecx
004FD124 40 inc eax
004FD125 0003 add byte ptr ds:[ebx],al
004FD127 40 inc eax
004FD128 3C 05 cmp al,5
...........................
来到这里
004FD120 8B85 5D494000 mov eax,dword ptr ss:[ebp+40495D] ; 图书馆管.00400000
004FD126 0340 3C add eax,dword ptr ds:[eax+3C]
004FD129 05 80000000 add eax,80
004FD12E 8B08 mov ecx,dword ptr ds:[eax] ; kernel32.LoadLibraryA
004FD130 038D 5D494000 add ecx,dword ptr ss:[ebp+40495D] ; 图书馆管.00400000
004FD136 83C1 10 add ecx,10
004FD139 8B01 mov eax,dword ptr ds:[ecx]
004FD13B 0385 5D494000 add eax,dword ptr ss:[ebp+40495D] ; 图书馆管.00400000
004FD141 8B18 mov ebx,dword ptr ds:[eax] ; kernel32.LoadLibraryA
004FD143 899D E94A4000 mov dword ptr ss:[ebp+404AE9],ebx
004FD149 83C0 04 add eax,4
004FD14C 8B18 mov ebx,dword ptr ds:[eax] ; kernel32.LoadLibraryA
004FD14E 899D ED4A4000 mov dword ptr ss:[ebp+404AED],ebx
004FD154 8D85 F14A4000 lea eax,dword ptr ss:[ebp+404AF1]
004FD15A 50 push eax ; <&KeRnEl32.LoadLibraryA>
004FD15B FF95 E94A4000 call dword ptr ss:[ebp+404AE9]
004FD161 8BF0 mov esi,eax ; <&KeRnEl32.LoadLibraryA>
004FD163 8985 FE4A4000 mov dword ptr ss:[ebp+404AFE],eax ; <&KeRnEl32.LoadLibraryA>
004FD169 8D85 024B4000 lea eax,dword ptr ss:[ebp+404B02]
004FD16F E8 19010000 call 图书馆管.004FD28D <------//取得句柄
004FD174 8985 134B4000 mov dword ptr ss:[ebp+404B13],eax ; <&KeRnEl32.LoadLibraryA>
004FD17A 8D85 174B4000 lea eax,dword ptr ss:[ebp+404B17]
004FD180 E8 08010000 call 图书馆管.004FD28D
004FD185 8985 264B4000 mov dword ptr ss:[ebp+404B26],eax ; <&KeRnEl32.LoadLibraryA>
004FD18B 8D85 2A4B4000 lea eax,dword ptr ss:[ebp+404B2A]
004FD191 E8 F7000000 call 图书馆管.004FD28D
004FD196 8985 3D4B4000 mov dword ptr ss:[ebp+404B3D],eax ; <&KeRnEl32.LoadLibraryA>
004FD19C 8D85 414B4000 lea eax,dword ptr ss:[ebp+404B41]
004FD1A2 E8 E6000000 call 图书馆管.004FD28D <------//EAX出现“Createfilea”,记得以前看
过精华6里loveboom关于此壳的分析,下一行并未出现经典的cmp eax,-1。
004FD1A7 8985 4D4B4000 mov dword ptr ss:[ebp+404B4D],eax ; <&KeRnEl32.LoadLibraryA>
004FD1AD 8D85 514B4000 lea eax,dword ptr ss:[ebp+404B51]
004FD1B3 E8 D5000000 call 图书馆管.004FD28D
004FD1B8 8985 5D4B4000 mov dword ptr ss:[ebp+404B5D],eax ; <&KeRnEl32.LoadLibraryA>
004FD1BE 8D85 614B4000 lea eax,dword ptr ss:[ebp+404B61]
004FD1C4 E8 C4000000 call 图书馆管.004FD28D
004FD1C9 8985 6C4B4000 mov dword ptr ss:[ebp+404B6C],eax ; <&KeRnEl32.LoadLibraryA>
004FD1CF 8D85 704B4000 lea eax,dword ptr ss:[ebp+404B70]
004FD1D5 E8 B3000000 call 图书馆管.004FD28D <------//读文件
004FD1DA 8985 794B4000 mov dword ptr ss:[ebp+404B79],eax ; 图书馆管.004FDAC3
004FD1E0 8D85 7D4B4000 lea eax,dword ptr ss:[ebp+404B7D]
004FD1E6 E8 A2000000 call 图书馆管.004FD28D <------//取文件大小
004FD1EB 8985 894B4000 mov dword ptr ss:[ebp+404B89],eax ; 图书馆管.004FDAC3
004FD1F1 8D85 8D4B4000 lea eax,dword ptr ss:[ebp+404B8D]
004FD1F7 E8 91000000 call 图书馆管.004FD28D <------//关闭句柄
004FD1FC 8985 994B4000 mov dword ptr ss:[ebp+404B99],eax ; 图书馆管.004FDAC3
004FD202 8D85 A64B4000 lea eax,dword ptr ss:[ebp+404BA6]
004FD208 50 push eax ; 图书馆管.004FDAC3
004FD209 FF95 E94A4000 call dword ptr ss:[ebp+404AE9] ; <------//调用一个安装在%windir%\system32下的YTuDriver3.dll库文件,用resource hacker打开好象是一个注册组件
004FD20F 8BF0 mov esi,eax ; 图书馆管.004FDAC3
004FD211 8985 B54B4000 mov dword ptr ss:[ebp+404BB5],eax ; 图书馆管.004FDAC3
004FD217 8D85 B94B4000 lea eax,dword ptr ss:[ebp+404BB9]
004FD21D E8 6B000000 call 图书馆管.004FD28D <------//读取驱动,估计是加密狗的驱动
004FD222 8985 C04B4000 mov dword ptr ss:[ebp+404BC0],eax ; 图书馆管.004FDAC3
004FD228 8D85 9D4B4000 lea eax,dword ptr ss:[ebp+404B9D]
004FD22E E8 5A000000 call 图书馆管.004FD28D
004FD233 8985 A24B4000 mov dword ptr ss:[ebp+404BA2],eax ; 图书馆管.004FDAC3
004FD239 8D85 C44B4000 lea eax,dword ptr ss:[ebp+404BC4]
004FD23F 50 push eax ; 图书馆管.004FDAC3
004FD240 FF95 E94A4000 call dword ptr ss:[ebp+404AE9] ; kernel32.LoadLibraryA
004FD246 8BF0 mov esi,eax ; 图书馆管.004FDAC3
004FD248 8985 CF4B4000 mov dword ptr ss:[ebp+404BCF],eax ; 图书馆管.004FDAC3
004FD24E 8D85 D34B4000 lea eax,dword ptr ss:[ebp+404BD3]
004FD254 E8 34000000 call 图书馆管.004FD28D
004FD259 8985 DF4B4000 mov dword ptr ss:[ebp+404BDF],eax ; 图书馆管.004FDAC3
004FD25F 8D85 E34B4000 lea eax,dword ptr ss:[ebp+404BE3]
004FD265 50 push eax ; 图书馆管.004FDAC3
004FD266 FF95 E94A4000 call dword ptr ss:[ebp+404AE9] ; kernel32.LoadLibraryA
004FD26C 8BF0 mov esi,eax ; 图书馆管.004FDAC3
004FD26E 8985 F04B4000 mov dword ptr ss:[ebp+404BF0],eax ; 图书馆管.004FDAC3
004FD274 8D85 F44B4000 lea eax,dword ptr ss:[ebp+404BF4]
004FD27A E8 0E000000 call 图书馆管.004FD28D
004FD27F 8985 FF4B4000 mov dword ptr ss:[ebp+404BFF],eax ; 图书馆管.004FDAC3
004FD285 8D85 43434000 lea eax,dword ptr ss:[ebp+404343]
004FD28B 50 push eax ; 图书馆管.004FDAC3
004FD28C C3 retn
004FD28D 50 push eax ; 图书馆管.004FDAC3
004FD28E 56 push esi ; kernel32.7C800000
004FD28F FF95 ED4A4000 call dword ptr ss:[ebp+404AED] ; kernel32.GetProcAddress
004FD295 C3 retn
004FD296 F785 65494000 10000>test dword ptr ss:[ebp+404965],10
004FD2A0 74 37 je short 图书馆管.004FD2D9
004FD2A2 64:FF35 30000000 push dword ptr fs:[30]
004FD2A9 58 pop eax ; ntdll.7C930738
004FD2AA 85C0 test eax,eax
004FD2AC 78 0F js short 图书馆管.004FD2BD
004FD2AE 8B40 0C mov eax,dword ptr ds:[eax+C]
004FD2B1 8B40 0C mov eax,dword ptr ds:[eax+C]
004FD2B4 C740 20 00100000 mov dword ptr ds:[eax+20],1000
004FD2BB EB 1C jmp short 图书馆管.004FD2D9
004FD2BD 6A 00 push 0
004FD2BF FF95 134B4000 call dword ptr ss:[ebp+404B13] ; kernel32.GetModuleHandleA
004FD2C5 85D2 test edx,edx ; ntdll.7C99C0D8
004FD2C7 79 10 jns short 图书馆管.004FD2D9
004FD2C9 837A 08 FF cmp dword ptr ds:[edx+8],-1
004FD2CD 75 0A jnz short 图书馆管.004FD2D9
004FD2CF 8B52 04 mov edx,dword ptr ds:[edx+4]
004FD2D2 C742 50 00100000 mov dword ptr ds:[edx+50],1000
004FD2D9 8BBD 5D494000 mov edi,dword ptr ss:[ebp+40495D] ; 图书馆管.00400000
004FD2DF 037F 3C add edi,dword ptr ds:[edi+3C]
004FD2E2 8BB5 5D494000 mov esi,dword ptr ss:[ebp+40495D] ; 图书馆管.00400000
004FD2E8 8B4F 54 mov ecx,dword ptr ds:[edi+54]
004FD2EB 8D85 684D4000 lea eax,dword ptr ss:[ebp+404D68]
004FD2F1 50 push eax
004FD2F2 6A 04 push 4
004FD2F4 51 push ecx ; ntdll.7C937304
004FD2F5 FFB5 5D494000 push dword ptr ss:[ebp+40495D] ; 图书馆管.00400000
004FD2FB FF95 264B4000 call dword ptr ss:[ebp+404B26]
004FD301 F785 65494000 08000>test dword ptr ss:[ebp+404965],8
004FD30B 0F84 FD000000 je 图书馆管.004FD40E
004FD311 68 04010000 push 104
004FD316 8DBD 684D4000 lea edi,dword ptr ss:[ebp+404D68]
004FD31C 57 push edi ; 图书馆管.004FDCBB
004FD31D 6A 00 push 0
004FD31F FF95 3D4B4000 call dword ptr ss:[ebp+404B3D] ; kernel32.GetModuleFileNameA
004FD325 B8 0684EBEE mov eax,EEEB8406
004FD32A 8985 364D4000 mov dword ptr ss:[ebp+404D36],eax
004FD330 8D85 324C4000 lea eax,dword ptr ss:[ebp+404C32]
004FD336 50 push eax
004FD337 FFB5 364D4000 push dword ptr ss:[ebp+404D36]
004FD33D 6A 01 push 1
004FD33F 6A 00 push 0
004FD341 FF95 FF4B4000 call dword ptr ss:[ebp+404BFF] <--------//检测加密狗状态
004FD347 0BC0 or eax,eax
004FD349 74 18 je short 图书馆管.004FD363 <--------//有狗则跳转
004FD34B 6A 00 push 0
004FD34D 8D85 034C4000 lea eax,dword ptr ss:[ebp+404C03]
004FD353 50 push eax
004FD354 8D85 084C4000 lea eax,dword ptr ss:[ebp+404C08]
004FD35A 50 push eax
004FD35B 6A 00 push 0
004FD35D FF95 DF4B4000 call dword ptr ss:[ebp+404BDF] ; USER32.MessageBoxA <--------//无狗运行到
这里弹出错误对话窗口“请检查加密锁...”
004FD363 FFB5 364D4000 push dword ptr ss:[ebp+404D36]
004FD369 FF95 A24B4000 call dword ptr ss:[ebp+404BA2] ; YTuDrive.pass
004FD36F FFB5 364D4000 push dword ptr ss:[ebp+404D36]
004FD375 FF95 C04B4000 call dword ptr ss:[ebp+404BC0] ; YTuDrive.driver
004FD37B 6A 00 push 0
004FD37D 68 80000000 push 80
004FD382 6A 03 push 3
004FD384 6A 00 push 0
004FD386 6A 01 push 1
004FD388 68 00000080 push 80000000
004FD38D 57 push edi ; 图书馆管.004FDCBB
004FD38E FF95 4D4B4000 call dword ptr ss:[ebp+404B4D] ; kernel32.CreateFileA
004FD394 83F8 FF cmp eax,-1
004FD397 75 04 jnz short 图书馆管.004FD39D
004FD399 33C0 xor eax,eax
004FD39B EB 71 jmp short 图书馆管.004FD40E
004FD39D 8BF8 mov edi,eax
004FD39F 6A 00 push 0
004FD3A1 57 push edi ; 图书馆管.004FDCBB
004FD3A2 FF95 894B4000 call dword ptr ss:[ebp+404B89] ; kernel32.GetFileSize
004FD3A8 83E8 05 sub eax,5
004FD3AB 96 xchg eax,esi ; 图书馆管.00400000
004FD3AC 56 push esi ; 图书馆管.00400000
004FD3AD 6A 40 push 40
004FD3AF FF95 5D4B4000 call dword ptr ss:[ebp+404B5D] ; kernel32.GlobalAlloc
004FD3B5 0BC0 or eax,eax
004FD3B7 75 02 jnz short 图书馆管.004FD3BB
004FD3B9 EB 4A jmp short 图书馆管.004FD405
004FD3BB 93 xchg eax,ebx ; kernel32.GetProcAddress
004FD3BC 6A 00 push 0
004FD3BE 8D85 684D4000 lea eax,dword ptr ss:[ebp+404D68]
004FD3C4 50 push eax
004FD3C5 56 push esi ; 图书馆管.00400000
004FD3C6 53 push ebx ; kernel32.GetProcAddress
004FD3C7 57 push edi ; 图书馆管.004FDCBB
004FD3C8 FF95 794B4000 call dword ptr ss:[ebp+404B79] ; kernel32.ReadFile
004FD3CE 8BC3 mov eax,ebx ; kernel32.GetProcAddress
004FD3D0 8BCE mov ecx,esi ; 图书馆管.00400000
004FD3D2 53 push ebx ; kernel32.GetProcAddress
004FD3D3 57 push edi ; 图书馆管.004FDCBB
004FD3D4 E8 10000000 call 图书馆管.004FD3E9
004FD3D9 8985 69494000 mov dword ptr ss:[ebp+404969],eax
004FD3DF 5F pop edi ; ntdll.7C930738
004FD3E0 5B pop ebx ; ntdll.7C930738
.............省略若干段
004FD561 /EB 17 jmp short 图书馆管.004FD57A
004FD563 |8B56 04 mov edx,dword ptr ds:[esi+4]
004FD566 |0395 5D494000 add edx,dword ptr ss:[ebp+40495D] ; 图书馆管.00400000
004FD56C |EB 04 jmp short 图书馆管.004FD572
004FD56E |41 inc ecx
004FD56F |83C2 04 add edx,4
004FD572 |833A 00 cmp dword ptr ds:[edx],0
004FD575 ^|75 F7 jnz short 图书馆管.004FD56E
004FD577 |83C6 0C add esi,0C
004FD57A \837E 04 00 cmp dword ptr ds:[esi+4],0
004FD57E ^ 75 E3 jnz short 图书馆管.004FD563 <--------//这里不往回跳,在下一行F4
004FD580 33D2 xor edx,edx
004FD582 B8 05000000 mov eax,5
004FD587 F7E1 mul ecx
004FD589 50 push eax
004FD58A 6A 00 push 0
004FD58C FF95 5D4B4000 call dword ptr ss:[ebp+404B5D] ; kernel32.GlobalAlloc
004FD592 0BC0 or eax,eax
004FD594 75 05 jnz short 图书馆管.004FD59B
004FD596 83C4 04 add esp,4
004FD599 61 popad
004FD59A C3 retn
004FD59B 8907 mov dword ptr ds:[edi],eax
004FD59D 8947 04 mov dword ptr ds:[edi+4],eax
004FD5A0 5E pop esi ; 图书馆管.004FD8C8
004FD5A1 E9 42010000 jmp 图书馆管.004FD6E8 <--------//跳得好远
004FD5A6 8B1E mov ebx,dword ptr ds:[esi]
004FD5A8 039D 5D494000 add ebx,dword ptr ss:[ebp+40495D] ; 图书馆管.00400000
004FD5AE 8BC3 mov eax,ebx
.............
来到这里
004FD6E8 837E 04 00 cmp dword ptr ds:[esi+4],0
004FD6EC ^ 0F85 B4FEFFFF jnz 图书馆管.004FD5A6 <--------//这里不往回跳,在下一行F4
004FD6F2 33C0 xor eax,eax ; MSVBVM60.__vbaFreeStr<--------//原来是VB6
写的
004FD6F4 40 inc eax ; MSVBVM60.__vbaFreeStr
004FD6F5 83F8 01 cmp eax,1
004FD6F8 74 02 je short 图书馆管.004FD6FC
004FD6FA 61 popad
004FD6FB C3 retn
004FD6FC F785 65494000 02000>test dword ptr ss:[ebp+404965],2
004FD706 74 18 je short 图书馆管.004FD720
004FD708 8BBD 5D494000 mov edi,dword ptr ss:[ebp+40495D] ; 图书馆管.00400000
004FD70E 037F 3C add edi,dword ptr ds:[edi+3C]
004FD711 8B4F 54 mov ecx,dword ptr ds:[edi+54]
004FD714 8BB5 5D494000 mov esi,dword ptr ss:[ebp+40495D] ; 图书馆管.00400000
004FD71A C606 00 mov byte ptr ds:[esi],0
004FD71D 46 inc esi ; 图书馆管.004FD8D4
004FD71E ^ E2 FA loopd short 图书馆管.004FD71A
004FD720 8D85 0D414000 lea eax,dword ptr ss:[ebp+40410D]
004FD726 B9 03070000 mov ecx,703
004FD72B EB 01 jmp short 图书馆管.004FD72E
004FD72D - E9 E8B6FCFF jmp 图书馆管.004C8E1A
004FD732 FFEB jmp far ebx ; 非法使用寄存器
004FD734 01C7 add edi,eax
004FD736 8B9D 6D494000 mov ebx,dword ptr ss:[ebp+40496D]
004FD73C 33C3 xor eax,ebx
004FD73E 74 08 je short 图书馆管.004FD748
004FD740 EB 01 jmp short 图书馆管.004FD743
004FD742 2C 61 sub al,61
004FD744 EB 01 jmp short 图书馆管.004FD747
004FD746 E8 C38DBD10 call 110D650E
004FD74B 48 dec eax
004FD74C 40 inc eax
004FD74D 008B F7B9DF00 add byte ptr ds:[ebx+DFB9F7],cl
004FD753 0000 add byte ptr ds:[eax],al
004FD755 33DB xor ebx,ebx
004FD757 AC lods byte ptr ds:[esi]
004FD758 34 79 xor al,79
004FD75A 2AC3 sub al,bl
004FD75C C0C0 02 rol al,2
004FD75F AA stos byte ptr es:[edi]
004FD760 43 inc ebx
004FD761 ^ E2 F4 loopd short 图书馆管.004FD757 <------//循环,到下一行按F4运行
004FD763 8D85 3A4D4000 lea eax,dword ptr ss:[ebp+404D3A]
004FD769 50 push eax ; 图书馆管.004FDC8D
004FD76A FFB5 FE4A4000 push dword ptr ss:[ebp+404AFE] ; kernel32.7C800000
004FD770 FF95 ED4A4000 call dword ptr ss:[ebp+404AED] ; kernel32.GetProcAddress
004FD776 0BC0 or eax,eax ; 图书馆管.004FDC8D
004FD778 74 08 je short 图书馆管.004FD782
004FD77A FFD0 call eax ; 图书馆管.004FDC8D
004FD77C 0BC0 or eax,eax ; 图书馆管.004FDC8D
004FD77E 74 02 je short 图书馆管.004FD782
004FD780 61 popad
004FD781 C3 retn
004FD782 F785 65494000 01000>test dword ptr ss:[ebp+404965],1
004FD78C 74 4F je short 图书馆管.004FD7DD
004FD78E 8DB5 DD4A4000 lea esi,dword ptr ss:[ebp+404ADD]
004FD794 8D85 65484000 lea eax,dword ptr ss:[ebp+404865]
004FD79A 8946 08 mov dword ptr ds:[esi+8],eax ; 图书馆管.004FDC8D
004FD79D 33DB xor ebx,ebx
004FD79F 8D85 2C494000 lea eax,dword ptr ss:[ebp+40492C]
004FD7A5 50 push eax ; 图书馆管.004FDC8D
004FD7A6 64:FF33 push dword ptr fs:[ebx]
004FD7A9 64:8923 mov dword ptr fs:[ebx],esp
004FD7AC 8BFD mov edi,ebp
004FD7AE B8 00440000 mov eax,4400
004FD7B3 EB 01 jmp short 图书馆管.004FD7B6
004FD7B5 C7 ??? ; 未知命令
004FD7B6 CD 68 int 68
004FD7B8 33DB xor ebx,ebx
004FD7BA 64:8F03 pop dword ptr fs:[ebx] ; kernel32.7C800000
004FD7BD 83C4 04 add esp,4
004FD7C0 66:81FF 9712 cmp di,1297
004FD7C5 74 0E je short 图书馆管.004FD7D5
004FD7C7 66:81FF 7712 cmp di,1277
004FD7CC 74 07 je short 图书馆管.004FD7D5
004FD7CE 66:81FF 3013 cmp di,1330
004FD7D3 75 08 jnz short 图书馆管.004FD7DD
004FD7D5 EB 01 jmp short 图书馆管.004FD7D8
004FD7D7 FF61 EB jmp dword ptr ds:[ecx-15]
004FD7DA 01E8 add eax,ebp
004FD7DC C3 retn
004FD7DD 8D85 C4484000 lea eax,dword ptr ss:[ebp+4048C4]
004FD7E3 50 push eax ; 图书馆管.004FDC8D
004FD7E4 C3 retn
004FD7E5 55 push ebp
004FD7E6 8BEC mov ebp,esp
004FD7E8 57 push edi ; 图书馆管.004FD842
004FD7E9 8B45 10 mov eax,dword ptr ss:[ebp+10]
004FD7EC 8BB8 C4000000 mov edi,dword ptr ds:[eax+C4]
004FD7F2 FF37 push dword ptr ds:[edi]
004FD7F4 33FF xor edi,edi ; 图书馆管.004FD842
004FD7F6 64:8F07 pop dword ptr fs:[edi] ; kernel32.7C800000
004FD7F9 8380 C4000000 08 add dword ptr ds:[eax+C4],8
004FD800 8BB8 A4000000 mov edi,dword ptr ds:[eax+A4]
004FD806 C1C7 07 rol edi,7
004FD809 89B8 B8000000 mov dword ptr ds:[eax+B8],edi ; 图书馆管.004FD842
004FD80F B8 00000000 mov eax,0
004FD814 5F pop edi ; kernel32.7C800000
004FD815 C9 leave
004FD816 C3 retn
004FD817 32C0 xor al,al
004FD819 8DBD 0D414000 lea edi,dword ptr ss:[ebp+40410D]
004FD81F B9 85070000 mov ecx,785
004FD824 AA stos byte ptr es:[edi]
004FD825 ^ E2 FD loopd short 图书馆管.004FD824 <------//循环,到下一行按F4运行
004FD827 8DBD EF484000 lea edi,dword ptr ss:[ebp+4048EF]
004FD82D B9 5D040000 mov ecx,45D
004FD832 AA stos byte ptr es:[edi]
004FD833 ^ E2 FD loopd short 图书馆管.004FD832 <------//循环,到下一行按F4运行
004FD835 61 popad
004FD836 50 push eax ; 图书馆管.004FDC8D <------//此壳的标志
004FD837 33C0 xor eax,eax ; 图书馆管.004FDC8D
004FD839 64:FF30 push dword ptr fs:[eax]
004FD83C 64:8920 mov dword ptr fs:[eax],esp
004FD83F EB 01 jmp short 图书馆管.004FD842 <------//异常跳转,一般OEP离此不远了。
004FD841 87EB xchg ebx,ebp
004FD843 0000 add byte ptr ds:[eax],al
004FD845 0000 add byte ptr ds:[eax],al
............................
来到这里
004FD842 0000 add byte ptr ds:[eax],al <------//出现访问违反异常,按shift+F8跳过。
004FD844 0000 add byte ptr ds:[eax],al
004FD846 0000 add byte ptr ds:[eax],al
004FD848 0000 add byte ptr ds:[eax],al
004FD84A 0000 add byte ptr ds:[eax],al
004FD84C 0000 add byte ptr ds:[eax],al
004FD84E 0000 add byte ptr ds:[eax],al
............................
00402912 - FF25 30114000 jmp dword ptr ds:[401130] ; MSVBVM60.__vbaVarTstNe
00402918 - FF25 48114000 jmp dword ptr ds:[401148] ; MSVBVM60.__vbaVarCopy
0040291E - FF25 18104000 jmp dword ptr ds:[401018] ; MSVBVM60.__vbaVarMove
00402924 - FF25 6C114000 jmp dword ptr ds:[40116C] ; MSVBVM60.__vbaVarForNext
0040292A - FF25 6C104000 jmp dword ptr ds:[40106C] ; MSVBVM60.__vbaVarForInit
00402930 - FF25 5C114000 jmp dword ptr ds:[40115C] ; MSVBVM60.__vbaStrVarCopy
00402936 - FF25 B0104000 jmp dword ptr ds:[4010B0] ; MSVBVM60.__vbaAryConstruct2
0040293C - FF25 38114000 jmp dword ptr ds:[401138] ; MSVBVM60.__vbaVarAdd
00402942 - FF25 04104000 jmp dword ptr ds:[401004] ; MSVBVM60.__vbaVarSub
00402948 - FF25 50104000 jmp dword ptr ds:[401050] ; MSVBVM60.rtcVarFromFormatVar
0040294E - FF25 D8104000 jmp dword ptr ds:[4010D8] ; MSVBVM60.EVENT_SINK_QueryInterface
00402954 - FF25 9C104000 jmp dword ptr ds:[40109C] ; MSVBVM60.EVENT_SINK_AddRef
0040295A - FF25 CC104000 jmp dword ptr ds:[4010CC] ; MSVBVM60.EVENT_SINK_Release
00402960 - FF25 C8104000 jmp dword ptr ds:[4010C8] ; MSVBVM60.Zombie_GetTypeInfoCount
00402966 - FF25 64104000 jmp dword ptr ds:[401064] ; MSVBVM60.Zombie_GetTypeInfo
0040296C - FF25 00104000 jmp dword ptr ds:[401000] ; MSVBVM60.EVENT_SINK_GetIDsOfNames
00402972 - FF25 38104000 jmp dword ptr ds:[401038] ; MSVBVM60.EVENT_SINK_Invoke
00402978 - FF25 84104000 jmp dword ptr ds:[401084] ; MSVBVM60.GetMemStr
0040297E - FF25 90104000 jmp dword ptr ds:[401090] ; MSVBVM60.PutMemStr
00402984 - FF25 2C114000 jmp dword ptr ds:[40112C] ; MSVBVM60.ThunRTMain
0040298A 0000 add byte ptr ds:[eax],al
0040298C 68 68314000 push 图书馆管.00403168 ; ASCII "VB5!6&vb6chs.dll"
00402991 E8 EEFFFFFF call 图书馆管.00402984 ; jmp to MSVBVM60.ThunRTMain <------//停在这里,提示被调试的程序无法处理异常,进程终止。
接下来又重复了几遍,仍然如此。后来,仔细分析了出错地址代码及注释,发现了一个问题:每次都是出现访问违反异常后按F8从004FD842直接跳到00402991,然后进程终止,为什么没有经过上一行呢?于是重新载入主程序,清除所有断点,试着直接在命令行中下硬件中断HE 0040298C,F9运行,跳过004FD842处的访问违反异常后,程序断在了0040298C,再按F8单步跟踪,这次在00402991处没有提示无法处理,程序正常运行,又试了几次,都成功运行,所以初步断定0040298C就是OEP。接下来用OD脱壳插件直接在当前调试进程中成功脱壳,程序运行正常。下面发生的事让我百思不得其解:本想正式分析和狗相关代码以便脱狗运行,谁知一个意外却使我到此收工了,去掉狗看看出错提示时,结果没有狗脱壳后的程序也正常运行了。运行未脱壳程序,找到出错提示,在脱壳后的主程序中查找,居然找不到,个人认为这个软件是把狗和壳捆帮在一起了。本人菜鸟一个,对加密狗接触的也不多,请各位大虾多提意见,多批评指正。
【破解总结】:
主要工作是脱壳的过程。查壳得知是yoda's cryptor 1.x / modified,用脱壳机不能正确脱壳,估计做了伪装,手工脱壳注意几个循环和回跳,最后是出错分析,个人感觉,经验比较重要。无狗的情况下也跟了很久,但搞不定,由于已和软件作者联系,待版本升级后再提供此版本供大家练习。