【脱文标题】 upx去除Crc校验
【脱文作者】 weiyi75[Dfcg]
【作者邮箱】 [email]weiyi75@sohu.com[/email]
【作者主页】 Dfcg官方大本营
【使用工具】 Peid,Upxshell,olldbg
【破解平台】 WinNT/2000/XP
【软件名称】 EasyDialog V1.6.6
【下载地址】
http://www.skycn.com/soft/13122.html
【软件简介】 EasyDialog能够做什么?(为了增强Windows通用打开/保存对话框,能够快速的打开经常访问的文件夹或者文件)一、快速地在通用打开/保存对话框中打开你经常访问的文件夹/文件。二、快速地在WindowsExplorer中打开经常访问的文件夹/文件。三、快速地在IE浏览器打开你经常访问的网站。四、快速地给你的朋友发Email五、能够使您方便地按照逻辑分类来组织和管理您的文件夹/文件,您经常访问的网址,您的Email地址。
【软件大小】 543 KB
【加壳方式】 UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】
首先用Peid查壳,upx 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo ".这个程序有自校验,又是个VB程序,51Crack提出这个程序Bt度很高,果然很BT,Crc脱壳校验+Pcode。先要搞定它的自校验。唉,在基础知识和汇编知识不全的情况下真困难,一直无法解决这个程序,放在我心里没搞定的程序越来越多,人也越来越瘦。历时1个月,今天终于搞定了它的自校验。
首先UpxShell直接完美干净脱壳,运行程序,程序直接退出,无任何提示。我用Aspack2.12压缩这个程序,可以正常运行,看来它的Crc大小校验有一定范围,大概在100k-200k左右视为正常。
判断文件大小有
bp GetFileSize C语言和其它语言常用,这个程序不适用。
bp rtcFileLen VB最常用这个函数比较文件大小。
bp __vbaExitProc
bp __vbaEnd //这三个退出相关函数都没有找到关键比较点,限于篇幅没有写过程。
bp ExitProcess
最后还是OD载入脱壳程序
OD异常设置忽略全部异常,F9运行。
bp rtcFileLen
660D5D72 > 55 PUSH EBP //中断
660D5D73 8BEC MOV EBP,ESP
660D5D75 81EC 40010000 SUB ESP,140
660D5D7B 8D85 C0FEFFFF LEA EAX,DWORD PTR SS:[EBP-140]
660D5D81 50 PUSH EAX
660D5D82 FF75 08 PUSH DWORD PTR SS:[EBP+8]
660D5D85 E8 E9000000 CALL MSVBVM60.660D5E73
660D5D8A 85C0 TEST EAX,EAX
660D5D8C 74 06 JE SHORT MSVBVM60.660D5D94
660D5D8E 50 PUSH EAX
660D5D8F E8 1F80FFFF CALL MSVBVM60.660CDDB3
660D5D94 8B85 E0FEFFFF MOV EAX,DWORD PTR SS:[EBP-120]
660D5D9A C9 LEAVE
660D5D9B C2 0400 RETN 4
堆栈友好提示
0012F8D8 00472342 返回到 EasyDial.00472342 来自 MSVBVM60.rtcFileLen
0012F8DC 00152A9C UNICODE "C:\Program Files\EasyDialog\EasyDialogV1.6.6.exe"
0012F8E0 001500B0
0012F8E4 00000001 //注意我们不断的F9,这个地址的值从00000001一直到00000064,然后程序退出。
我们一直狂按F9直到它为00000064,停。
取消断点,Alt+F9返回程序。
00472342 . 8B55 0C MOV EDX,DWORD PTR SS:[EBP+C] //回到这里。
00472345 . 8902 MOV DWORD PTR DS:[EDX],EAX
00472347 . E9 C8000000 JMP EasyDial.00472414
00472414 > \8B55 E0 MOV EDX,DWORD PTR SS:[EBP-20]
00472417 . 8955 D8 MOV DWORD PTR SS:[EBP-28],EDX
0047241A . FF15 F8104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaExitProc>] ;
MSVBVM60.__vbaExitProc
00472420 . 68 71244700 PUSH EasyDial.00472471
00472425 . EB 39 JMP SHORT EasyDial.00472460
00472460 > \8D4D DC LEA ECX,DWORD PTR SS:[EBP-24]
00472463 . 8B35 E0134000 MOV ESI,DWORD PTR DS:[<&MSVBVM60.__vbaFreeStr>] ;
MSVBVM60.__vbaFreeStr
00472469 . FFD6 CALL ESI ;
<&MSVBVM60.__vbaFreeStr>
0047246B . 8D4D D4 LEA ECX,DWORD PTR SS:[EBP-2C]
0047246E . FFD6 CALL ESI
00472470 . C3 RETN
00472471 . 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00472474 . 8B08 MOV ECX,DWORD PTR DS:[EAX]
00472476 . 50 PUSH EAX
00472477 . FF51 08 CALL DWORD PTR DS:[ECX+8]
0047247A . 8B55 10 MOV EDX,DWORD PTR SS:[EBP+10]
0047247D . 8B45 D8 MOV EAX,DWORD PTR SS:[EBP-28]
00472480 . 8902 MOV DWORD PTR DS:[EDX],EAX
00472482 . 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
00472485 . 8B4D E4 MOV ECX,DWORD PTR SS:[EBP-1C]
00472488 . 64:890D 00000>MOV DWORD PTR FS:[0],ECX
0047248F . 5F POP EDI
00472490 . 5E POP ESI
00472491 . 5B POP EBX
00472492 . 8BE5 MOV ESP,EBP
00472494 . 5D POP EBP
00472495 . C2 0C00 RETN 0C
00472508 . 3BC3 CMP EAX,EBX
0047250A . 7D 12 JGE SHORT EasyDial.0047251E
0047251E > \8B55 0C MOV EDX,DWORD PTR SS:[EBP+C]
00472521 . 8B4D DC MOV ECX,DWORD PTR SS:[EBP-24]
00472524 . 33DB XOR EBX,EBX
00472526 . 6A 00 PUSH 0
00472528 . 8B02 MOV EAX,DWORD PTR DS:[EDX]
0047252A . 56 PUSH ESI
0047252B . 3BC8 CMP ECX,EAX
0047252D . 6A 01 PUSH 1
0047252F . 8D45 D8 LEA EAX,DWORD PTR SS:[EBP-28]
00472532 . 6A 0B PUSH 0B
00472534 . 50 PUSH EAX
00472535 . 6A 02 PUSH 2
00472537 . 0F9FC3 SETG BL
0047253A . 68 80000000 PUSH 80
0047253F . 4B DEC EBX
00472540 . FF15 E8114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaRedimPreserve>] ;
MSVBVM60.__vbaRedimPreserve
00472546 . 8B4D D8 MOV ECX,DWORD PTR SS:[EBP-28]
00472549 . 83C4 1C ADD ESP,1C
0047254C . 85C9 TEST ECX,ECX
0047254E . 74 25 JE SHORT EasyDial.00472575
00472550 . 66:8339 01 CMP WORD PTR DS:[ECX],1
00472554 . 75 1F JNZ SHORT EasyDial.00472575
00472556 . 8B51 14 MOV EDX,DWORD PTR DS:[ECX+14]
00472559 . 8B41 10 MOV EAX,DWORD PTR DS:[ECX+10]
0047255C . 8BFE MOV EDI,ESI
0047255E . 2BFA SUB EDI,EDX
00472560 . 3BF8 CMP EDI,EAX
00472562 . 72 09 JB SHORT EasyDial.0047256D
0047256D > 8D043F LEA EAX,DWORD PTR DS:[EDI+EDI]
00472570 . 8B7D 08 MOV EDI,DWORD PTR SS:[EBP+8]
00472573 . EB 09 JMP SHORT EasyDial.0047257E
0047257E > 8B49 0C MOV ECX,DWORD PTR DS:[ECX+C]
00472581 . 66:891C01 MOV WORD PTR DS:[ECX+EAX],BX
00472585 . 8B4D D8 MOV ECX,DWORD PTR SS:[EBP-28]
00472588 . B8 01000000 MOV EAX,1
0047258D . 03C6 ADD EAX,ESI
0047258F . 0F80 CD000000 JO EasyDial.00472662
00472595 . 8BF0 MOV ESI,EAX
00472597 . 33DB XOR EBX,EBX
00472599 .^ E9 4CFFFFFF JMP EasyDial.004724EA //这里要往回跳
0047259E > \BB 01000000 MOV EBX,1 //F4直接下来。
004725A3 > B8 64000000 MOV EAX,64
004725A8 . 3BD8 CMP EBX,EAX
004725AA . 7F 7B JG SHORT EasyDial.00472627
004725AC . 85C9 TEST ECX,ECX
004725AE . 74 24 JE SHORT EasyDial.004725D4
004725B0 . 66:8339 01 CMP WORD PTR DS:[ECX],1
004725B4 . 75 1E JNZ SHORT EasyDial.004725D4
004725B6 . 8B51 14 MOV EDX,DWORD PTR DS:[ECX+14]
004725B9 . 8B41 10 MOV EAX,DWORD PTR DS:[ECX+10]
004725BC . 8B3D A0114000 MOV EDI,DWORD PTR DS:[<&MSVBVM60.__vbaGenerateBound>;
MSVBVM60.__vbaGenerateBoundsError
004725C2 . 8BF3 MOV ESI,EBX
004725C4 . 2BF2 SUB ESI,EDX
004725C6 . 3BF0 CMP ESI,EAX
004725C8 . 72 05 JB SHORT EasyDial.004725CF
004725CF > 8D0436 LEA EAX,DWORD PTR DS:[ESI+ESI]
004725D2 . EB 0F JMP SHORT EasyDial.004725E3
004725E3 > 8B51 0C MOV EDX,DWORD PTR DS:[ECX+C]
004725E6 . 85C9 TEST ECX,ECX
004725E8 . 74 1E JE SHORT EasyDial.00472608
004725EA . 66:8339 01 CMP WORD PTR DS:[ECX],1
004725EE . 75 18 JNZ SHORT EasyDial.00472608
004725F0 . 8B51 14 MOV EDX,DWORD PTR DS:[ECX+14]
004725F3 . 8B41 10 MOV EAX,DWORD PTR DS:[ECX+10]
004725F6 . 8BF3 MOV ESI,EBX
004725F8 . 2BF2 SUB ESI,EDX
004725FA . 3BF0 CMP ESI,EAX
004725FC . 72 05 JB SHORT EasyDial.00472603
00472603 > 8D0436 LEA EAX,DWORD PTR DS:[ESI+ESI]
00472606 . EB 05 JMP SHORT EasyDial.0047260D
0047260D > \8B51 0C MOV EDX,DWORD PTR DS:[ECX+C]
00472610 . 66:8B0402 MOV AX,WORD PTR DS:[EDX+EAX]
00472614 . 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX
00472617 . B8 01000000 MOV EAX,1
0047261C . 03C3 ADD EAX,EBX
0047261E . 70 42 JO SHORT EasyDial.00472662
00472620 . 8BD8 MOV EBX,EAX
00472622 .^ E9 7CFFFFFF JMP EasyDial.004725A3 //又回跳,不弄出真像之前不能回头。
00472627 > \68 39264700 PUSH EasyDial.00472639 //F4直接下来。
0047262C . 8D4D D8 LEA ECX,DWORD PTR SS:[EBP-28]
0047262F . 51 PUSH ECX
00472630 . 6A 00 PUSH 0
00472632 . FF15 DC104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaAryDestruct>] ;
MSVBVM60.__vbaAryDestruct
00472638 . C3 RETN
00472639 . 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
0047263C . 50 PUSH EAX
0047263D . 8B10 MOV EDX,DWORD PTR DS:[EAX]
0047263F . FF52 08 CALL DWORD PTR DS:[EDX+8]
00472642 . 8B45 10 MOV EAX,DWORD PTR SS:[EBP+10]
00472645 . 66:8B4D E8 MOV CX,WORD PTR SS:[EBP-18]
00472649 . 66:8908 MOV WORD PTR DS:[EAX],CX
0047264C . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0047264F . 8B4D EC MOV ECX,DWORD PTR SS:[EBP-14]
00472652 . 5F POP EDI
00472653 . 5E POP ESI
00472654 . 64:890D 00000>MOV DWORD PTR FS:[0],ECX
0047265B . 5B POP EBX
0047265C . 8BE5 MOV ESP,EBP
0047265E . 5D POP EBP
0047265F . C2 0C00 RETN 0C
00466840 . DBE2 FCLEX
00466842 . 8985 64FFFFFF MOV DWORD PTR SS:[EBP-9C],EAX
00466848 . 83BD 64FFFFFF>CMP DWORD PTR SS:[EBP-9C],0
0046684F . 7D 26 JGE SHORT EasyDial.00466877
00466877 > C785 20FFFFFF>MOV DWORD PTR SS:[EBP-E0],0
00466881 > 0FBF85 78FFFF>MOVSX EAX,WORD PTR SS:[EBP-88]
00466888 . 85C0 TEST EAX,EAX
0046688A . 0F85 B1000000 JNZ EasyDial.00466941 //注意这个跳转,Magic Jump
对比加壳程序,这里跳转了,找了很久就是它,爆掉, jmp 00466941 ,OD直接修改保存,Crc校验解除了。
0006688A E9 B2000000 JMP 00066941
0006688F 90 NOP
00466890 . C745 FC 07000>MOV DWORD PTR SS:[EBP-4],7
00466897 . 833D D86F4700>CMP DWORD PTR DS:[476FD8],0
0046689E . 75 1C JNZ SHORT EasyDial.004668BC
004668BC > C785 1CFFFFFF>MOV DWORD PTR SS:[EBP-E4],EasyDial.00476FD8
004668C6 > 8B8D 1CFFFFFF MOV ECX,DWORD PTR SS:[EBP-E4]
004668CC . 8B11 MOV EDX,DWORD PTR DS:[ECX]
004668CE . 8995 6CFFFFFF MOV DWORD PTR SS:[EBP-94],EDX
004668D4 . 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
004668D7 . 50 PUSH EAX
004668D8 . 8D4D CC LEA ECX,DWORD PTR SS:[EBP-34]
004668DB . 51 PUSH ECX
004668DC . FF15 28114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaObjSetAddref>] ;
MSVBVM60.__vbaObjSetAddref
004668E2 . 50 PUSH EAX
004668E3 . 8B95 6CFFFFFF MOV EDX,DWORD PTR SS:[EBP-94]
004668E9 . 8B02 MOV EAX,DWORD PTR DS:[EDX]
004668EB . 8B8D 6CFFFFFF MOV ECX,DWORD PTR SS:[EBP-94]
004668F1 . 51 PUSH ECX
004668F2 . FF50 10 CALL DWORD PTR DS:[EAX+10] //这个Call是死亡Call
004668F5 . DBE2 FCLEX
..................................................................
77F9FB90 8B1C24 MOV EBX,DWORD PTR SS:[ESP] //内存异常。
77F9FB93 51 PUSH ECX
77F9FB94 53 PUSH EBX
77F9FB95 E8 86B3FEFF CALL ntdll.77F8AF20
77F9FB9A 0AC0 OR AL,AL
77F9FB9C 74 0C JE SHORT ntdll.77F9FBAA
77F9FB9E 5B POP EBX
77F9FB9F 59 POP ECX
77F9FBA0 6A 00 PUSH 0
77F9FBA2 51 PUSH ECX
77F9FBA3 E8 EE2BFFFF CALL ntdll.ZwContinue //退出指令,不久程序退出。
77F9FBA8 EB 0B JMP SHORT ntdll.77F9FBB5
77F9FBAA 5B POP EBX
77F9FBAB 59 POP ECX
77F9FBAC 6A 00 PUSH 0
77F9FBAE 51 PUSH ECX
77F9FBAF 53 PUSH EBX
77F9FBB0 E8 3D65FEFF CALL ntdll.ZwRaiseException
....................................................................
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)