好友
阅读权限40
听众
最后登录1970-1-1
|
小生我怕怕
发表于 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
━━━━━━━━━━━━━━━━━━━━━━━━━━
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
━━━━━━━━━━━━━━━━━━━━━━━━━━
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
━━━━━━━━━━━━━━━━━━━━━━━━━━
我们把图里的这几个区段全部F2下上断点,然后逐一运行,直到程序运行起来,我们在看看有那几个区段未被调用
图4
━━━━━━━━━━━━━━━━━━━━━━━━━━
我们可以发现有6个区段未被调用,但是没有名字的只有4个,好我们把没有被调用的4个区段全部删除
分别是00753000 00c56000 00c75000 00c76000,四个区段用lordPE的PE编辑器,选择区段,然后选
中我们不要的区段清除掉,下图为几个未被调用到的区段
图5
━━━━━━━━━━━━━━━━━━━━━━━━━━
清理好区段后我们从建下PE,在使用Resource Binder优化一下资源发现只有3M多啦,看看加壳程序有2M
差不多啦,最终清理后结果如下图
图6
--------------------------------------------------------------------------------
【经验总结】
这个壳比较象个粽子,有些绕人,所以得出是VB后,心生此特殊方法,写得不好,请高手别见笑
以下地址为该壳下载地址,由于文件比较大,请大家到网盘下载
http://www.rayfile.com/files/5e5 ... -b113-0014221b798a/
下面是我脱壳减肥后的主程序下载地址
http://www.rayfile.com/files/986 ... -802e-0014221b798a/
--------------------------------------------------------------------------------
【版权声明】: 本文原创于小生我怕怕, 转载请注明作者并保持文章的完整, 谢谢!
2008年12月10日 16:01:03 |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|