首页
社区
课程
招聘
upx去除Crc校验
发表于: 2004-5-8 00:36 9612

upx去除Crc校验

David 活跃值
20
2004-5-8 00:36
9612
【脱文标题】 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
....................................................................

--------------------------------------------------------------------------------  
  

【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

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

收藏
免费 7
支持
分享
最新回复 (5)
雪    币: 228
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看代码,这个程序好像不是P_code的哦...
2004-5-8 02:56
0
雪    币: 203
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
二哥,你这里的代码:
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校验解除了。

将jnz改成jmp,OD直接修改保存,Crc校验解除,我在ollydbg里怎么找不到有
保存文件的功能,我用的是你的ukillod版的1.10c,不知道这里你是借助什么来
实现代码保存的
2004-5-9 08:29
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
4
最初由 honhon 发布

将jnz改成jmp,OD直接修改保存,Crc校验解除,我在ollydbg里怎么找不到有
保存文件的功能,我用的是你的ukillod版的1.10c,不知道这里你是借助什么来
实现代码保存的


右键->复制到可执行文件
2004-5-9 13:01
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
5
解除自校验一直以来就是我的心病,因为我一个都没有成功过(虽然我只遇见一个bt程序),顶完再学习!
2004-5-9 15:53
0
雪    币: 203
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢版主!!!要两次右键选择啊,真是笨,怎么没看到!!!呵呵
2004-5-9 18:11
0
游客
登录 | 注册 方可回帖
返回
//