吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11466|回复: 20
收起左侧

[原创] 手脱DotFix NiceProtect 3.6主程序

[复制链接]
小生我怕怕 发表于 2008-12-10 16:08
【文章标题】: 手脱DotFix NiceProtect 3.6主程序
【文章作者】: 小生我怕怕[LCG]
【作者主页】: 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:[esi+FFFFAFEB]    //我们shift+f9运行程序看下是什么语言编写的
  00433376    57              push edi                               //如图1
  00433377    83CD FF         or ebp,FFFFFFFF                        //发现有VB的运行库在里面,可判断此为VB编写
  0043337A    EB 10           jmp short DotFix_N.0043338C            //我们从载程序吧
  ━━━━━━━━━━━━━━━━━━━━━━━━━━
  图1
   1.gif
  ━━━━━━━━━━━━━━━━━━━━━━━━━━
  0043336A >  60              pushad                                 //了解啦是VB写的,那么就用VB的特征去找
  0043336B    BE B91F4000     mov esi,DotFix_N.00401FB9              //我们shift+f9运行程序
  00433370    8DBE EBAFFFFF   lea edi,dword ptr ds:[esi+FFFFAFEB]
  00433376    57              push edi
  00433377    83CD FF         or ebp,FFFFFFFF
  0043337A    EB 10           jmp short DotFix_N.0043338C
  ━━━━━━━━堆栈窗口━━━━━━━━━━━━
  0012FFC4   7C816FD7  返回到 kernel32.7C816FD7                     //此时程序是运行状态
  0012FFC8   7C930738  ntdll.7C930738                               //我们向上找一个关键地址反汇编窗口里去找
  0012FFCC   FFFFFFFF                                               //我们向上找第一个SE句柄
  0012FFD0   7FFD8000
  0012FFD4   8054B6ED
  0012FFD8   0012FFC8
  ━━━━━━━━堆栈窗口━━━━━━━━━━━━
  0012FF8C   00000000  SE 句柄                                     //这里就是我们向上的第一句SE句柄
  0012FF90   F78BE60A                                              //注意这里的地址
  0012FF94   00C7456C  DotFix_N.00C7456C
  0012FF98   00458868  DotFix_N.00458868                           //我们点住此句右键,反汇编窗口跟随
  0012FF9C   012A014C
  ━━━━━━━━━━━━━━━━━━━━━━━━━━
  00458868    0000            add byte ptr ds:[eax],al            //反汇编到了这里
  0045886A    0000            add byte ptr ds:[eax],al            //我们都知道我们的VB的程序上面有一堆JMP
  0045886C    36:             prefix ss:                          //好那么我们就通过他其中的IAT指针去锁定OEP地址
  0045886D    26:2A00         sub al,byte ptr es:[eax]            //我们向上找一个IAT指针看看
  00458870    0000            add byte ptr ds:[eax],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:[eax],al
  0046AB83    0008            add byte ptr ds:[eax],cl
  ━━━━━━━━━━━━━━━━━━━━━━━━━━
  00406AF0  - FF25 CC114000   jmp dword ptr ds:[4011CC]                ; MSVBVM60.DllFunctionCall        //VB的特征在这里啦,向下看看
  00406AF6  - FF25 58124000   jmp dword ptr ds:[401258]                ; MSVBVM60.__vbaUI1I4
  00406AFC  - FF25 30104000   jmp dword ptr ds:[401030]                ; MSVBVM60.rtcLog
  00406B02  - FF25 0C104000   jmp dword ptr ds:[40100C]                ; MSVBVM60.__vbaStrI2
  00406B08  - FF25 DC114000   jmp dword ptr ds:[4011DC]                ; MSVBVM60.__vbaVarOr
  00406B0E  - FF25 D8114000   jmp dword ptr ds:[4011D8]                ; MSVBVM60.__vbaVarLateMemSt
  ━━━━━━━━━━━━━━━━━━━━━━━━━━
  0040709C  - FF25 28114000   jmp dword ptr ds:[401128]                ; MSVBVM60.GetMemVar
  004070A2  - FF25 34124000   jmp dword ptr ds:[401234]                ; MSVBVM60.PutMemVar
  004070A8  - FF25 60124000   jmp dword ptr ds:[401260]                ; MSVBVM60.SetMemVar
  004070AE  - FF25 70134000   jmp dword ptr ds:[401370]                ; MSVBVM60.ThunRTMain                //这里右键---断点---设置硬件访问断点
  004070B4    27              daa                                  //我们OEP的两字节不见啦
  004070B5    2D D9479900     sub eax,DotFix_N.009947D9            //好想办法补回来来吧,我们在上面最后一句IAT处下硬件执行
  004070BA    207C20 61       and byte ptr ds:[eax+61],bh          //设置好断点后我们从新加载程序
  004070BE    0000            add byte ptr ds:[eax],al
  ━━━━━━━━━━━━━━━━━━━━━━━━━━
  0043336A >  60              pushad                              //从载OD后
  0043336B    BE B91F4000     mov esi,DotFix_N.00401FB9           //因为我们刚已经下好了断点锁定啦
  00433370    8DBE EBAFFFFF   lea edi,dword ptr ds:[esi+FFFFAFEB] //shift+f9运行程序吧,注意运行慢些,怕跑飞
  00433376    57              push edi                            //shift+f9一次之后我们就停在我们下断点的地方啦
  00433377    83CD FF         or ebp,FFFFFFFF
  ━━━━━━━━━━━━━━━━━━━━━━━━━━
  0040709C  - FF25 28114000   jmp dword ptr ds:[401128]          //我这里显示IAT还没有读取出来
  004070A2  - FF25 34124000   jmp dword ptr ds:[401234]          //不管他,我们先补上我们的OEP
  004070A8  - FF25 60124000   jmp dword ptr ds:[401260]          //都知道我们OEP第一句是push[压栈]
  004070AE  - FF25 70134000   jmp dword ptr ds:[401370]          //那么我们自然是去我们的堆栈中寻找
  004070B4    27              daa                                //直接看下堆栈会发现如下
  004070B5    2D D9479900     sub eax,DotFix_N.009947D9
  004070BA    207C20 61       and byte ptr ds:[eax+61],bh
  004070BE    0000            add byte ptr ds:[eax],al
  ━━━━━━━━堆栈窗口━━━━━━━━━━━━
  0012FF94   00C7456C  DotFix_N.00C7456C                        //放眼一看很容易就锁定下面一句啦
  0012FF98   00458868  DotFix_N.00458868                        //这句就是我们的OEP的PUSH
  0012FF9C   012A014C                                           //把我们的OEP补上吧
  0012FFA0   003FCFA4                                           //VB只需要补一个PUSH,一个CALL
  0012FFA4   7C930738  ntdll.7C930738                           //CALL的地址就是PUSH上面的一句地址,补好的如下图
  ━━━━━━━━━━━━━━━━━━━━━━━━━━
  图2
   2.GIF
  ━━━━━━━━━━━━━━━━━━━━━━━━━━
  004070AE  - FF25 70134000   jmp dword ptr ds:[401370]
  004070B4    68 68884500     push DotFix_N.00458868            //右键在此句新建EIP
  004070B9    E8 F0FFFFFF     call DotFix_N.004070AE            //运行我们的lordPE把程序dump吧,在运行importRCE修复下
  004070BE    0000            add byte ptr ds:[eax],al          //发现程序可以运行,查壳是VB编写的啦
  004070C0    0000            add byte ptr ds:[eax],al          //看下文件大小,真大8M,我们给他瘦下身,如下图
  ━━━━━━━━━━━━━━━━━━━━━━━━━━
  图3
   3.GIF
  ━━━━━━━━━━━━━━━━━━━━━━━━━━
  我们把图里的这几个区段全部F2下上断点,然后逐一运行,直到程序运行起来,我们在看看有那几个区段未被调用
  图4
   4.GIF
  ━━━━━━━━━━━━━━━━━━━━━━━━━━
  我们可以发现有6个区段未被调用,但是没有名字的只有4个,好我们把没有被调用的4个区段全部删除
  分别是00753000 00c56000 00c75000 00c76000,四个区段用lordPE的PE编辑器,选择区段,然后选
  中我们不要的区段清除掉,下图为几个未被调用到的区段
  图5
   5.GIF
  ━━━━━━━━━━━━━━━━━━━━━━━━━━
  清理好区段后我们从建下PE,在使用Resource Binder优化一下资源发现只有3M多啦,看看加壳程序有2M
  差不多啦,最终清理后结果如下图
  图6
   6.GIF
--------------------------------------------------------------------------------
【经验总结】
  这个壳比较象个粽子,有些绕人,所以得出是VB后,心生此特殊方法,写得不好,请高手别见笑
  以下地址为该壳下载地址,由于文件比较大,请大家到网盘下载
http://www.rayfile.com/files/5e5 ... -b113-0014221b798a/
下面是我脱壳减肥后的主程序下载地址
http://www.rayfile.com/files/986 ... -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

掌声在这里。。。。

[ 本帖最后由 wesley 于 2008-12-10 20:18 编辑 ]
 楼主| 小生我怕怕 发表于 2008-12-10 20:27
原帖由 wesley 于 2008-12-10 19:59 发表
真有这么巧????  无语中    :Q

掌声在这里。。。。

怎么啦兄弟!什么那么巧!
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
这个得看看
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 16:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表