手脱DotFix NiceProtect 3.6主程序
【文章标题】: 手脱DotFix NiceProtect 3.6主程序【文章作者】: 小生我怕怕
【作者主页】: www.52pojie.cn
【软件名称】: DotFix NiceProtect 3.6
【软件大小】: 2M
【下载地址】: 自己搜索下载
【加壳方式】: 全保护
【保护方式】: 全保护
【编写语言】: VB
【使用工具】: od lordPE importRCE
【操作平台】: windows xp2
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
0043336A >60 pushad //OD载入
0043336B BE B91F4000 mov esi,DotFix_N.00401FB9 //发现有些似upx的壳
00433370 8DBE EBAFFFFF lea edi,dword ptr ds: //我们shift+f9运行程序看下是什么语言编写的
00433376 57 push edi //如图1
00433377 83CD FF or ebp,FFFFFFFF //发现有VB的运行库在里面,可判断此为VB编写
0043337A EB 10 jmp short DotFix_N.0043338C //我们从载程序吧
━━━━━━━━━━━━━━━━━━━━━━━━━━
图1
━━━━━━━━━━━━━━━━━━━━━━━━━━
0043336A >60 pushad //了解啦是VB写的,那么就用VB的特征去找
0043336B BE B91F4000 mov esi,DotFix_N.00401FB9 //我们shift+f9运行程序
00433370 8DBE EBAFFFFF lea edi,dword ptr ds:
00433376 57 push edi
00433377 83CD FF or ebp,FFFFFFFF
0043337A EB 10 jmp short DotFix_N.0043338C
━━━━━━━━堆栈窗口━━━━━━━━━━━━
0012FFC4 7C816FD7返回到 kernel32.7C816FD7 //此时程序是运行状态
0012FFC8 7C930738ntdll.7C930738 //我们向上找一个关键地址反汇编窗口里去找
0012FFCC FFFFFFFF //我们向上找第一个SE句柄
0012FFD0 7FFD8000
0012FFD4 8054B6ED
0012FFD8 0012FFC8
━━━━━━━━堆栈窗口━━━━━━━━━━━━
0012FF8C 00000000SE 句柄 //这里就是我们向上的第一句SE句柄
0012FF90 F78BE60A //注意这里的地址
0012FF94 00C7456CDotFix_N.00C7456C
0012FF98 00458868DotFix_N.00458868 //我们点住此句右键,反汇编窗口跟随
0012FF9C 012A014C
━━━━━━━━━━━━━━━━━━━━━━━━━━
00458868 0000 add byte ptr ds:,al //反汇编到了这里
0045886A 0000 add byte ptr ds:,al //我们都知道我们的VB的程序上面有一堆JMP
0045886C 36: prefix ss: //好那么我们就通过他其中的IAT指针去锁定OEP地址
0045886D 26:2A00 sub al,byte ptr es: //我们向上找一个IAT指针看看
00458870 0000 add byte ptr ds:,al
━━━━━━━━━━━━━━━━━━━━━━━━━━
0046AB71 FFE0 jmp eax //向上拉一下我们找到了这里
0046AB73 68 50AB4600 push DotFix_N.0046AB50 //注意一下我们下面的IAT指针
0046AB78 B8 F06A4000 mov eax,DotFix_N.00406AF0 ; jmp to MSVBVM60.DllFunctionCall
0046AB7D FFD0 call eax //我们ctrl+g搜索00406AF0
0046AB7F FFE0 jmp eax
0046AB81 0000 add byte ptr ds:,al
0046AB83 0008 add byte ptr ds:,cl
━━━━━━━━━━━━━━━━━━━━━━━━━━
00406AF0- FF25 CC114000 jmp dword ptr ds: ; MSVBVM60.DllFunctionCall //VB的特征在这里啦,向下看看
00406AF6- FF25 58124000 jmp dword ptr ds: ; MSVBVM60.__vbaUI1I4
00406AFC- FF25 30104000 jmp dword ptr ds: ; MSVBVM60.rtcLog
00406B02- FF25 0C104000 jmp dword ptr ds: ; MSVBVM60.__vbaStrI2
00406B08- FF25 DC114000 jmp dword ptr ds: ; MSVBVM60.__vbaVarOr
00406B0E- FF25 D8114000 jmp dword ptr ds: ; MSVBVM60.__vbaVarLateMemSt
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040709C- FF25 28114000 jmp dword ptr ds: ; MSVBVM60.GetMemVar
004070A2- FF25 34124000 jmp dword ptr ds: ; MSVBVM60.PutMemVar
004070A8- FF25 60124000 jmp dword ptr ds: ; MSVBVM60.SetMemVar
004070AE- FF25 70134000 jmp dword ptr ds: ; MSVBVM60.ThunRTMain //这里右键---断点---设置硬件访问断点
004070B4 27 daa //我们OEP的两字节不见啦
004070B5 2D D9479900 sub eax,DotFix_N.009947D9 //好想办法补回来来吧,我们在上面最后一句IAT处下硬件执行
004070BA 207C20 61 and byte ptr ds:,bh //设置好断点后我们从新加载程序
004070BE 0000 add byte ptr ds:,al
━━━━━━━━━━━━━━━━━━━━━━━━━━
0043336A >60 pushad //从载OD后
0043336B BE B91F4000 mov esi,DotFix_N.00401FB9 //因为我们刚已经下好了断点锁定啦
00433370 8DBE EBAFFFFF lea edi,dword ptr ds: //shift+f9运行程序吧,注意运行慢些,怕跑飞
00433376 57 push edi //shift+f9一次之后我们就停在我们下断点的地方啦
00433377 83CD FF or ebp,FFFFFFFF
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040709C- FF25 28114000 jmp dword ptr ds: //我这里显示IAT还没有读取出来
004070A2- FF25 34124000 jmp dword ptr ds: //不管他,我们先补上我们的OEP
004070A8- FF25 60124000 jmp dword ptr ds: //都知道我们OEP第一句是push[压栈]
004070AE- FF25 70134000 jmp dword ptr ds: //那么我们自然是去我们的堆栈中寻找
004070B4 27 daa //直接看下堆栈会发现如下
004070B5 2D D9479900 sub eax,DotFix_N.009947D9
004070BA 207C20 61 and byte ptr ds:,bh
004070BE 0000 add byte ptr ds:,al
━━━━━━━━堆栈窗口━━━━━━━━━━━━
0012FF94 00C7456CDotFix_N.00C7456C //放眼一看很容易就锁定下面一句啦
0012FF98 00458868DotFix_N.00458868 //这句就是我们的OEP的PUSH
0012FF9C 012A014C //把我们的OEP补上吧
0012FFA0 003FCFA4 //VB只需要补一个PUSH,一个CALL
0012FFA4 7C930738ntdll.7C930738 //CALL的地址就是PUSH上面的一句地址,补好的如下图
━━━━━━━━━━━━━━━━━━━━━━━━━━
图2
━━━━━━━━━━━━━━━━━━━━━━━━━━
004070AE- FF25 70134000 jmp dword ptr ds:
004070B4 68 68884500 push DotFix_N.00458868 //右键在此句新建EIP
004070B9 E8 F0FFFFFF call DotFix_N.004070AE //运行我们的lordPE把程序dump吧,在运行importRCE修复下
004070BE 0000 add byte ptr ds:,al //发现程序可以运行,查壳是VB编写的啦
004070C0 0000 add byte ptr ds:,al //看下文件大小,真大8M,我们给他瘦下身,如下图
━━━━━━━━━━━━━━━━━━━━━━━━━━
图3
━━━━━━━━━━━━━━━━━━━━━━━━━━
我们把图里的这几个区段全部F2下上断点,然后逐一运行,直到程序运行起来,我们在看看有那几个区段未被调用
图4
━━━━━━━━━━━━━━━━━━━━━━━━━━
我们可以发现有6个区段未被调用,但是没有名字的只有4个,好我们把没有被调用的4个区段全部删除
分别是00753000 00c56000 00c75000 00c76000,四个区段用lordPE的PE编辑器,选择区段,然后选
中我们不要的区段清除掉,下图为几个未被调用到的区段
图5
━━━━━━━━━━━━━━━━━━━━━━━━━━
清理好区段后我们从建下PE,在使用Resource Binder优化一下资源发现只有3M多啦,看看加壳程序有2M
差不多啦,最终清理后结果如下图
图6
--------------------------------------------------------------------------------
【经验总结】
这个壳比较象个粽子,有些绕人,所以得出是VB后,心生此特殊方法,写得不好,请高手别见笑
以下地址为该壳下载地址,由于文件比较大,请大家到网盘下载
http://www.rayfile.com/files/5e545a02-c691-11dd-b113-0014221b798a/
下面是我脱壳减肥后的主程序下载地址
http://www.rayfile.com/files/9869f2b0-c691-11dd-802e-0014221b798a/
--------------------------------------------------------------------------------
【版权声明】: 本文原创于小生我怕怕, 转载请注明作者并保持文章的完整, 谢谢!
2008年12月10日 16:01:03 DotFix NiceProtect
这个壳,好像没碰过...汗~
学习一下小生的脱壳方法... 学习一下....掌声在哪里. 真有这么巧????无语中 :Q
掌声在这里。。。。:victory:
[ 本帖最后由 wesley 于 2008-12-10 20:18 编辑 ] 原帖由 wesley 于 2008-12-10 19:59 发表 http://www.52pojie.cn/images/common/back.gif
真有这么巧????无语中 :Q
掌声在这里。。。。:victory:
怎么啦兄弟!什么那么巧! 学习加膜拜:D :D :D 没有见过也没有玩过 学习学习 小生出品 必属精品 学习中。。。 这个得看看