PESpin 新版壳/变形壳的脱壳+修复-->DVDFab V1.75
【目 标】: DVDFab V1.75
【工 具】:Olydbg1.1(diy版)、LORDPE、ImportREC1.6F
【任 务】:脱程序的壳,找回壳所抽的代码+简单优化
【操作平台】:WINDOWS 2000 ADV SP2
【作 者】:loveboom[DFCG][FCG]
【相关链接】: 目标软件自己去搜或去DFCG下(不小心删除了,只能自己去搜了)
【简要说明】:昨天有位网友发这么个东东说是PESpin v0.3壳,用我的脚本后,还是不会修复代码,叫我帮他修复一下,我自己也就趁这个机会看了一下,不看不要紧,一看吓了我一下,原来是FFF(FiGHTiNG FoR FuN)组织内部用的变形或新版的PESpin的壳,因为在外面还没看到新版的发布。难怪上次PESpin的作者说新版就要出来了,还是更变态的呢(BTW:上次叫作者发一个新版的给我,可惜到现在还没响应。).不过这次总算先领教了新版/变形壳的利害了。
这个壳说明白一点,后面就是偷人家aspr1.3B的代码。所以如果对1.3b有点了解的朋友,看我这篇文章问题应该不大。如果没接触过的朋友就当是现在开始接触1.3b吧。
这个版本在抽代码处比较PESpin v0.3的更变态的说。
【详细过程】:
这篇文章主要讲代码的修复,所以前面的过程我就没写了,如果你想具体一点的,去看我写的脚本就会明白的。
开工:
设置好后,运行我自己写的PESpin v.03的脱壳脚本(脚本在DFCG或看雪里有得下),一下就到了这里:
004E8C0D BB B4010000 MOV EBX,1B4 ; Stole Code found.please patch OEP code and then dumped it!
注:看到我上面的注释吗?如果是v0.3的在这里就是壳开始抽代码处,但这个壳并不是这里,下面还有的.
004E8C12 EB 01 JMP SHORT DVDFab.004E8C15
按几次F8到这里:
004E6001 0000 ADD BYTE PTR DS:[EAX],AL
004E6003 0000 ADD BYTE PTR DS:[EAX],AL ;不要被这里的00给骗了.
004E6005 E9 69000000 JMP DVDFab.004E6073 ;这里一个远程跳
继续F8跟下去
004E6073 E8 00000000 CALL DVDFab.004E6078 ;这里F7跟进
004E6078 5D POP EBP
004E6079 81ED 4DE14B00 SUB EBP,DVDFab.004BE14D
004E607F 8D85 F2E04B00 LEA EAX,DWORD PTR SS:[EBP+4BE0F2]
004E6085 8D8D 94E14B00 LEA ECX,DWORD PTR SS:[EBP+4BE194]
004E608B 03CB ADD ECX,EBX
004E608D 8941 01 MOV DWORD PTR DS:[ECX+1],EAX
004E6090 8D85 36E14B00 LEA EAX,DWORD PTR SS:[EBP+4BE136]
004E6096 8D8D FAE04B00 LEA ECX,DWORD PTR SS:[EBP+4BE0FA]
004E609C 8901 MOV DWORD PTR DS:[ECX],EAX
004E609E B8 5E140000 MOV EAX,145E
004E60A3 8D8D FFE04B00 LEA ECX,DWORD PTR SS:[EBP+4BE0FF]
004E60A9 8901 MOV DWORD PTR DS:[ECX],EAX
004E60AB 8D8D 94E14B00 LEA ECX,DWORD PTR SS:[EBP+4BE194]
004E60B1 8D85 94F34B00 LEA EAX,DWORD PTR SS:[EBP+4BF394]
004E60B7 51 PUSH ECX
004E60B8 50 PUSH EAX
004E60B9 E8 76FFFFFF CALL DVDFab.004E6034 ;这里f7跟进,或在上面的地方直接F4到这里.再F7跟进
004E60BE 61 POPAD
进去后,看看这段代码,是不是很眼熟(没有接触过aspr1.3B朋友当然不觉得了).
004E6034 55 PUSH EBP
004E6035 8BEC MOV EBP,ESP
004E6037 53 PUSH EBX
004E6038 56 PUSH ESI
004E6039 8B75 0C MOV ESI,DWORD PTR SS:[EBP+C]
004E603C 8B5D 08 MOV EBX,DWORD PTR SS:[EBP+8]
004E603F EB 11 JMP SHORT DVDFab.004E6052
004E6041 0FB703 MOVZX EAX,WORD PTR DS:[EBX]
004E6044 03C6 ADD EAX,ESI
004E6046 83C3 02 ADD EBX,2
004E6049 8BD0 MOV EDX,EAX
004E604B 8BC6 MOV EAX,ESI
004E604D E8 0C000000 CALL DVDFab.004E605E
004E6052 66:833B 00 CMP WORD PTR DS:[EBX],0
004E6056 ^ 75 E9 JNZ SHORT DVDFab.004E6041
004E6058 5E POP ESI
004E6059 5B POP EBX
004E605A 5D POP EBP
004E605B C2 0800 RETN 8 ;直接在这里F4
004E605E 0102 ADD DWORD PTR DS:[EDX],EAX
004E6060 C3 RETN
到达004E605B处后,一路按F8。其实这里开始就是学aspr1.3B,F8走过一堆骗人的东西后,来到这里:
004E6101 FF51 1D CALL DWORD PTR DS:[ECX+1D] ; DVDFab.004E610F 这里F7跟进,如果怕跟"飞"的话就一直按f7好过。
004E6104 699A F3F00F61 4>IMUL EBX,DWORD PTR DS:[EDX+610FF0F3],690>
004E610E 9A 59F2EB01 9A8>CALL FAR 819A:01EBF259 ; Far call
004E6115 D97C76 41 FSTCW WORD PTR DS:[ESI+ESI*2+41]
004E6119 0859 66 OR BYTE PTR DS:[ECX+66],BL
上面跟进后来到这里:
004E610F 59 POP ECX ; DVDFab.004E6104 停在这里
004E6110 F2: PREFIX REPNE: ; Superfluous prefix
004E6111 EB 01 JMP SHORT DVDFab.004E6114
004E6113 9A 81D97C76 410>CALL FAR 0841:767CD981 ; Far call
004E611A 59 POP ECX
本想直接把F7跟下来的代码抓下来,但直接抓下来的代码不好看,所以我用tc保存下来给大家看。
Tc结果如下,下面开始分析代码:
004E6110 Main PREFIX REPNE:
004E6114 Main SBB ECX,841767C
004E611A Main POP ECX
004E611B Main SUB WORD PTR DS:[4E6124],0C139
004E6124 Main JMP SHORT DVDFab.004E6127
004E6127 Main JMP SHORT DVDFab.004E612B
004E612B Main LEA ESP,DWORD PTR SS:[ESP-28]
004E612F Main ADD ESP,67
004E6132 Main SUB ESP,43
004E6135 Main ADD WORD PTR DS:[4E613E],0DEFB
004E613E Main PREFIX REP:
004E6143 Main PUSH EBP ;这里开始程序的代码
004E6144 Main XOR WORD PTR DS:[4E614D],1BAE ;解压下一行代码
004E614D Main JMP SHORT DVDFab.004E6151
004E6151 Main POP DWORD PTR SS:[ESP] ;出栈上面的东西,所以一开始的代码全部无效
004E6155 Main MOV EBP,ESP ;这几行不变,照抄
004E6157 Main PUSH -1
004E6159 Main PUSH DVDFab.0045E5A8
004E615E Main PUSH DVDFab.004548D6
004E6163 Main MOV EAX,DWORD PTR FS:[0]
004E6169 Main SUB