关于svkprotect1.32脱壳手迹,本文不是说如何脱壳的,而是在看了很多文章还有教程以后得出的一些方法,但是
结果和文章中的还是有不一样的地方,主要就是在最后的函数修复方面,但是还是成功了,现在想和大家来讨
论讨论。
我们知道关于svkp是一个猛壳,对于像我们这样的出学者来说实在是太难了,起码这是我的想法,好了废话
我不说了,下面我们看看具体的思路。
OD载入
再次之前我们忽略所有异常,使用IsDebug来隐藏就ok了
0040A000 > 60 pushad 进入OD以后停留在这里
0040A001 E8 0000000>call EnableMe.0040A006
0040A006 5D pop ebp
0040A007 81ED 06000>sub ebp,6
0040A00D EB 05 jmp short EnableMe.0040A014
0040A00F B8 0636420>mov eax,423606
0040A014 64:A0 2300>mov al,byte ptr fs:[23]
0040A01A EB 03 jmp short EnableMe.0040A01F
0040A01C C784E8 84C>mov dword ptr ds:[eax+ebp*8+3EBC084],7>
0040A027 67:B9 4900>mov ecx,49
0040A02D 8DB5 C5020>lea esi,dword ptr ss:[ebp+2C5]
0040A033 56 push esi
0040A034 8006 44 add byte ptr ds:[esi],44
0040A037 46 inc esi
0040A038 ^ E2 FA loopd short EnableMe.0040A034
命令行下断:bp GetModuleHandleA+5,Shift+F9 两次,断下后取消断点,Alt+F9返回!(问:为什么要下这个断点,在fly的小册子上面也提到了这个方法。我所说的小册子是fly在x档案04年的时候给我们奉献的脱壳大餐呀)
06CF018F E8 0200000>call 06CF0196 返回到这里
06CF0194 CD20 83042>vxdcall 8240483
06CF019A C3 retn
06CF019B E8 EB020FE>call EEDE048B
06CF01A0 50 push eax
06CF01A1 52 push edx
06CF01A2 EB 02 jmp short 06CF01A6
1、搜索特征码,搜索所有命令:mov dword ptr ds:[edi],eax
双击第4行,用SVKP 1.32插件去下花指令!
去除花指令以后应该是下面这个样子的
06CF2B9C 8907 mov dword ptr ds:[edi],eax
06CF2B9E 7C 03 jl short 06CF2BA3
06CF2BA0 90 nop
06CF2BA1 90 nop
06CF2BA2 90 nop
06CF2BA3 90 nop
06CF2BA4 90 nop
06CF2BA5 61 popad
06CF2BA6 E8 0100000>call 06CF2BAC
06CF2BAB 9A 83C4049>call far 9090:9004C483
06CF2BB2 90 nop
然后,把这段代码的popad移到mov dword ptr ds:[edi],eax上,nop掉原先的popad
2、搜索所有命令 cmp dword ptr ds:[ebx],251097CC //用来处理特殊加密
双击第一个来到代码处
06CF0F64 813B CC971>cmp dword ptr ds:[ebx],251097CC
06CF0F6A EB 03 jmp short 06CF0F6F
记住的地址是06CF0F6A以后用的到
06CF0F64 813B CC971>cmp dword ptr ds:[ebx],251097CC //F2下断 shift+F9运行,然后取消断点。
F8单步向下(遇到CALL按F7跟进)
06CF0FF4 /0F84 EB300>je 06CF40E5
06CF0FFA |60 pushad
我们要找的就是PUSHAD的地址06CF0FFA 现在按ctrl+G回到刚才叫大家记住的地址06CF0F6A
把JMP SHORT 06CF0F6F换 JMP 06CF0FFA(也就是PUSHAD的地址)
继续bp GetModuleHandleA+5,Shift+F9中断2次 通过所有异常,断下后取消断点,Alt+F9返回
06CF018F E8 0200000>call 06CF0196 返回到这里
06CF0194 CD20 83042>vxdcall 8240483
06CF019A C3 retn
06CF019B E8 EB020FE>call EEDE048B
06CF01A0 50 push eax
06CF01A1 52 push edx
06CF01A2 EB 02 jmp short 06CF01A6
3.下命令行断点hr 0012FFB0,Shift+F9中断3次!
取消断点
命令行下tc ebp==12FFC0(12FFC0=12FFC4-4) //12FFC4是壳入口处的ESP值
右键--分析代码,避免我们向上翻看的时候代码混乱!
纠正一下地址开始脱壳,不能运行,需要修复一下 不能修复
我们用LORDPE来脱壳 OD插件有时不好用
这个壳比较难修复,这个无效我试过剪切、等级1和等级3都不行修复
差相关资料试了好久才找到一种方法可行
双击无效指针,名称填GetModuleHandleA 确定 提示:(这里和教程文章说的不一样,我的始终有多处不能修复的函数,看图(1)而且使用ImportREC1.6始终不可以。所以使用1.4了)
然后我使用了svkpIAT的插件才修复的,如图2 图3是使用插件修复好的。现在就可以抓去dump文件了。
壳已经脱了。
我的QQ是:80265480
希望能和大家多多交流。
[注意]看雪招聘,专注安全领域的专业人才平台!