小生我怕怕 发表于 2008-12-10 16:08

手脱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

zzage 发表于 2008-12-10 17:34

DotFix NiceProtect
这个壳,好像没碰过...汗~
学习一下小生的脱壳方法...

yihsam 发表于 2008-12-10 19:21

学习一下....掌声在哪里.

wesley 发表于 2008-12-10 19:59

真有这么巧????无语中    :Q

掌声在这里。。。。:victory:

[ 本帖最后由 wesley 于 2008-12-10 20:18 编辑 ]

小生我怕怕 发表于 2008-12-10 20:27

原帖由 wesley 于 2008-12-10 19:59 发表 http://www.52pojie.cn/images/common/back.gif
真有这么巧????无语中    :Q

掌声在这里。。。。:victory:
怎么啦兄弟!什么那么巧!

ximo 发表于 2008-12-10 20:52

学习加膜拜:D :D

evilangel 发表于 2008-12-10 21:27

:D   没有见过也没有玩过   学习学习

半两 发表于 2008-12-11 12:41

小生出品 必属精品

johnllon 发表于 2008-12-11 14:12

学习中。。。

googlehsg 发表于 2008-12-12 00:23

这个得看看
页: [1] 2 3
查看完整版本: 手脱DotFix NiceProtect 3.6主程序