谁能详细解说下脱壳步骤和软件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谁能详细解说下脱壳步骤和软件相关的知识,希望对你有一定的参考价值。

关于脱壳的步骤能详细解说下吗?

【目标软件】WINME下的记事本

【加壳方式】Armadillo3.60 CopyMem-ll Debug-Blocker

【调试环境】:WinXP、Ollydbg、PEiD、LordPE、ImportREC 1.6F

1.前言

为了练习脱壳,前一段时间从网上下了一个Armadillo3.60,然后给记事本加壳,当然本人初学破解,参考了很多大虾们的文章,然后自己模仿脱壳,可是当我修改了Magic Jump后,用401000段“内存断点”大法想到达那个盼望已久的OEP的时候,意外出现了:程序终止,退出!是我做法错误,然后我又实验了N遍,依然如此,为什么?随后又在论坛不停的搜索着,想找一些有关的知识,终于找到了(抱歉,忘记了作者是谁),而且解决了这个问题,为了使象我一样初学者不要重蹈覆辙,我决定详细的写一写,也许你认为很简单,那么请略过。

2.脱壳过程(分以下几步进行)

设置Ollydbg忽略所有的异常选项,用IsDebug 1.4插件去掉Ollydbg的调试器标志。

(1)查找OEP

用OD中载入程序,下bp WaitForDebugEvent,F9运行,中断如下:

77E93A07 k> 55 push ebp <====中断在此处,清除断点

77E93A08 8BEC mov ebp,esp

77E93A0A 83EC 68 sub esp,68

77E93A0D 56 push esi

77E93A0E FF75 0C push dword ptr ss:[ebp C]

查看堆栈窗口:

0012DAC0 00423D67 /CALL 到 WaitForDebugEvent 来自 NOTEPAD.00423D61

0012DAC4 0012EB84 |pDebugEvent = 0012EB84 <====注意这里

0012DAC8 000003E8 \Timeout = 1000. ms

在0012EB84所在的行上点击右键选“转存中跟随”。

然后再下bp WriteProcessMemory,F9运行

77E41A90 k> 55 push ebp <====中断在此处

77E41A91 8BEC mov ebp,esp

77E41A93 51 push ecx

77E41A94 51 push ecx

77E41A95 8B45 0C mov eax,dword ptr ss:[ebp C]

看数据转存窗口:

0012EB84 01 00 00 00 40 07 00 00 ...@ ..

0012EB8C 5C 01 00 00 01 00 00 80 \ .. ..

0012EB94 00 00 00 00 00 00 00 00 ........

0012EB9C CC 10 40 00 02 00 00 00 ?@. ...

0012EBA4 00 00 00 00 CC 10 40 00 ....?@.

0012EBAC CC 10 40 00 00 00 00 00 ?@.....

红色字体的4010CC就是OEP,这样我们接着来第2步

(2)dump文件

现在我们重新用OD中载入程序,下硬件断点,he WaitForDebugEvent,F9运行,中断如下:

77E93A07 k> 55 push ebp <====中断在此处,删除断点

77E93A08 8BEC mov ebp,esp

77E93A0A 83EC 68 sub esp,68

77E93A0D 56 push esi

77E93A0E FF75 0C push dword ptr ss:[ebp C]

Alt F9返回,搜索常数FFFFFFF8,来到(004243D6处):

0042438A > \83BD D0F5FFFF>cmp dword ptr ss:[ebp-A30],0<====参考文章里提到的关键代码

00424391 . 0F8C A9020000 jl NOTEPAD.00424640<====跳转到00424640处,因此在00424640处下断点

00424397 . 8B8D D0F5FFFF mov ecx,dword ptr ss:[ebp-A30]

0042439D . 3B0D E4454500 cmp ecx,dword ptr ds:[4545E4]

004243A3 . 0F8D 97020000 jge NOTEPAD.00424640

004243A9 . 8B95 44F6FFFF mov edx,dword ptr ss:[ebp-9BC]

004243AF . 81E2 FF000000 and edx,0FF

004243B5 . 85D2 test edx,edx

004243B7 . 0F84 AD000000 je NOTEPAD.0042446A

004243BD . 6A 00 push 0

004243BF . 8BB5 D0F5FFFF mov esi,dword ptr ss:[ebp-A30]

004243C5 . C1E6 04 shl esi,4

004243C8 . 8B85 D0F5FFFF mov eax,dword ptr ss:[ebp-A30]

004243CE . 25 07000080 and eax,80000007

004243D3 . 79 05 jns short NOTEPAD.004243DA

004243D5 . 48 dec eax

004243D6 . 83C8 F8 or eax,FFFFFFF8<=====搜索来到这里,向上看

004243D9 . 40 inc eax

004243DA > 33C9 xor ecx,ecx

004243DC . 8A88 802A4500 mov cl,byte ptr ds:[eax 452A80]

004243E2 . 8B95 D0F5FFFF mov edx,dword ptr ss:[ebp-A30]

004243E8 . 81E2 07000080 and edx,80000007

004243EE . 79 05 jns short NOTEPAD.004243F5

004243F0 . 4A dec edx

004243F1 . 83CA F8 or edx,FFFFFFF8

004243F4 . 42 inc edx

004243F5 > 33C0 xor eax,eax

004243F7 . 8A82 812A4500 mov al,byte ptr ds:[edx 452A81]

004243FD . 8B3C8D 60E244>mov edi,dword ptr ds:[ecx*4 44E260]

00424404 . 333C85 60E244>xor edi,dword ptr ds:[eax*4 44E260]

0042440B . 8B8D D0F5FFFF mov ecx,dword ptr ss:[ebp-A30]

00424411 . 81E1 07000080 and ecx,80000007

00424417 . 79 05 jns short NOTEPAD.0042441E

00424419 . 49 dec ecx

0042441A . 83C9 F8 or ecx,FFFFFFF8

0042441D . 41 inc ecx

0042441E > 33D2 xor edx,edx

00424420 . 8A91 822A4500 mov dl,byte ptr ds:[ecx 452A82]

00424426 . 333C95 60E244>xor edi,dword ptr ds:[edx*4 44E260]

0042442D . 8B85 D0F5FFFF mov eax,dword ptr ss:[ebp-A30]

00424433 . 99 cdq

00424434 . B9 1C000000 mov ecx,1C

00424439 . F7F9 idiv ecx

0042443B . 8BCA mov ecx,edx

0042443D . D3EF shr edi,cl

0042443F . 83E7 0F and edi,0F

00424442 . 03F7 add esi,edi

00424444 . 8B15 D4454500 mov edx,dword ptr ds:[4545D4]

0042444A . 8D04B2 lea eax,dword ptr ds:[edx esi*4]

0042444D . 50 push eax

0042444E . 8B8D D0F5FFFF mov ecx,dword ptr ss:[ebp-A30]

00424454 . 51 push ecx

00424455 . E8 FF1F0000 call NOTEPAD.00426459

0042445A . 83C4 0C add esp,0C

0042445D . 25 FF000000 and eax,0FF<====从这里开始修改

00424462 . 85C0 test eax,eax

00424464 . 0F84 D6010000 je NOTEPAD.00424640

在0042438A处下 硬件执行 断点,F9运行到0042438A处,得到ebp-A30=12EB70,这样上述的修改地方修改为:

0042445D FF05 70EB1200 inc dword ptr ds:[12EB70]

00424463 90 nop

00424464 ^ E9 21FFFFFF jmp NOTEPAD.0042438A

把12EB70处置0,去掉所有断点,并在00424640处下断,F9运行,断住。好了,所有代码都强制解压完成。

运行LordPE,有2个关于NOTEPAD的进程,选择第2个,即可完全dump出来了。

(3)修复IAT表

因为Armadillo的壳使得ImportREC的"IAT AutoSearch"失效,所以必须确定IAT的RAV以及大小,为此我们用OD载入刚刚DUMP出来的文件,来确定IAT的RAV以及大小,载入之前先修改入口点为10CC,然后载入:

004010CC d> 55 push ebp

004010CD 8BEC mov ebp,esp

004010CF 83EC 44 sub esp,44

004010D2 56 push esi

004010D3 FF15 F4734000 call dword ptr ds:[4073F4]<====注意这里

004010D9 8BF0 mov esi,eax

我们可以随便找一个CALL入手确定IAT的RAV以及大小(不妨找看到的第一个CALL)。光标定位到数据转存窗口中,然后 Ctrl G,4073F4,可以看到:

004072E4 BE 7D 00 00 00 00 00 00 缄......

004072EC D7 23 DA 77 46 BA 3C 00 ?赵F?.

004072F4 F0 59 DA 77 CC 5E DA 77 餣赵蘜赵

..........(省略若干)

004073DC 7D 15 F5 77 90 9B 3C 00 鮳悰<.

004073E4 03 38 E5 77 67 31 E5 77 8鍂g1鍂

004073EC 3C 51 E5 77 97 2D E5 77 <Q鍂?鍂

004073F4 C7 C3 3C 00 45 9A E5 77 敲<.E氩w<====到达这里,由此处向上和向下看

004073FC 91 B2 3C 00 8D B8 3C 00 懖<.嵏<.

00407404 50 88 3C 00 CE 8A 47 77 P?.螉Gw

..........(省略若干)

00407504 EC 72 D1 77 11 9A D1 77 靣褀 氀w

0040750C 06 81 D1 77 D3 3D D1 77 布w?褀

00407514 37 89 3C 00 B3 22 32 76 7?.?2v

0040751C 39 DC 33 76 3B C2 32 76 9?v;?v

00407524 10 1D 34 76 D6 8B 32 76 4v謰2v

0040752C B7 44 33 76 70 1B 32 76 稤3vp 2v

00407534 8B 88 3C 00 00 00 00 00 媹<.....

这样IAT的大小是终点-始点=00407530-004072EC=244,RVA=72EC。为什么是这样呢,我们看到很多77XXXXXX之类的,而到了00407534处是8B 88 3C 00,为了确定其是否在IAT内,我们可以在OD的CPU窗口内定位光标到401000处,然后Ctrl B,填入 34 75 40,结果搜索不到,而30 75 40能够搜索到,是JMP [407530],因此确定IAT的终点点是407530,用同样的方法可以确定起点点是4072EC。

好了,IAT的RAV以及大小确定了,现在就要修复IAT了,用OD再一次载入未脱壳的程序,bp DebugActiveProcess,F9断下。看堆栈窗口:

0012DAC4 00423BDB /CALL 到 DebugActiveProcess 来自 NOTEPAD.00423BD5

0012DAC8 00000324 \ProcessId = 324<=====子进程句柄

0012DACC 0012FF2C

打开另一个OD附加324这个子进程。然后ALT+F9返回程序:

00433999 N> - EB FE jmp short NOTEPAD.<ModuleEntryPoint><====中断在此处,还原代码

0043399B EC in al,dx

0043399C |. 6A FF push -1

0043399E |. 68 503C4500 push NOTEPAD.00453C50

还原00433999处代码代码,EB FE改为55 8B,接下来就要按照FLY等大虾们的方法了。在接下来的步骤中前一部分可以参考Fly的《壹次脱壳法——Armadillo 双进程标准壳 快速脱壳》,我们从Magic Jump,避开IAT加密开始,取消以前断点,下断:BP GetModuleHandleA 5,

77E59F98 /0F84 23060000 je kernel32.77E5A5C1<====中断在此处,注意看堆栈

77E59F9E |FF7424 04 push dword ptr ss:[esp 4]

77E59FA2 |E8 55080000 call kernel32.77E5A7FC

77E59FA7 |85C0 test eax,eax

在这里中断若干次,注意堆栈窗口的变化,当出现:

......

0012BF20 00AAC807 返回到 00AAC807 来自 kernel32.GetModuleHandleA

0012BF24 00ABD6C8 ASCII "kernel32.dll"

0012BF28 00ABE67C ASCII "VirtualAlloc"

0012BF20 00AAC824 返回到 00AAC824 来自 kernel32.GetModuleHandleA

0012BF24 00ABD6C8 ASCII "kernel32.dll"

0012BF28 00ABE670 ASCII "VirtualFree"

0012BC98 00A9799B 返回到 00A9799B 来自 kernel32.GetModuleHandleA

0012BC9C 0012BDD4 ASCII "kernel32.dll"

然后Alt F9返回,

00A97995 FF15 C480AB00 call dword ptr ds:[AB80C4] ; kernel32.GetModuleHandleA

00A9799B 8B0D E011AC00 mov ecx,dword ptr ds:[AC11E0]<====返回到这里

00A979A1 89040E mov dword ptr ds:[esi ecx],eax

00A979A4 A1 E011AC00 mov eax,dword ptr ds:[AC11E0]

00A979A9 393C06 cmp dword ptr ds:[esi eax],edi

00A979AC 75 16 jnz short 00A979C4

00A979AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]

00A979B4 50 push eax

00A979B5 FF15 CC80AB00 call dword ptr ds:[AB80CC] ; kernel32.LoadLibraryA

00A979BB 8B0D E011AC00 mov ecx,dword ptr ds:[AC11E0]

00A979C1 89040E mov dword ptr ds:[esi ecx],eax

00A979C4 A1 E011AC00 mov eax,dword ptr ds:[AC11E0]

00A979C9 393C06 cmp dword ptr ds:[esi eax],edi

00A979CC 0F84 AD000000 je 00A97A7F<====Magic Jump,修改为JMP

00A979D2 33C9 xor ecx,ecx

00A979D4 8B03 mov eax,dword ptr ds:[ebx]

修改了上面的Magic Jump后,清除所有断点,Alt M ,在401000上下 内存访问断点,F9运行,这次中断到了OEP,然后运行ImportREC,选择324这个进程,OEP填:10CC,RVA:72EC,SIZE:244,然后“Get Imports”,再按“Show Invalid”地址,剪掉修复抓取文件,程序能够正常运行,至此脱壳完毕 !第一次用OD脱壳,感觉就是爽,和Softice比起来,感觉OD脱壳很方便.
参考技术A 要给木马脱壳,需要先知道加了什么壳。PEid一款专用的查壳工具,可以方便的检测出软件到底是使用什么东西加的壳,给脱壳带来了极大的便利!木马Cmdshell.exe是个只有7KB的小木马,通过开放本机的54088端口,实现远程命令行控制。下面就详细介绍一下给木马Cmdshell.exe脱壳的过程。运行软件后,点击“File(文件)”右边的浏览按钮,打开Cmdshell.exe文件,这时在主界面中就可以看到该文件的加壳情况:Cmdshell.exe使用的是UPX加壳通常UPX加壳和脱壳工具是通用的,所以笔者选用了使用起来比较容易的UPX Shell对加壳文件进行脱壳。运行UPX Shell程序,点击“OPen(打开)”按钮,选定被加壳的程序。切换到“Compress(压缩)”标签,选择“Decompress(解压缩)”,再点击“GO(运行)”按钮,即可完成脱壳。脱壳后程序由原来的7K变成了20K,文件脱壳成功总的来说,脱壳要对症下药,先用PEid或PE-Scan查清楚壳的类型,然后找脱这种壳的工具,才能达到脱壳的目的。脱了壳的木马,就失去了保护,几乎所有的杀毒软件或木马查杀工具都能查杀它。当从网络上下载了某些怀疑有木马的程序,可以先用本文介绍的方法来检查一下,看看它是否被加了壳,如果是就要提高警惕了,建议不要使用。 参考技术B 啊,风间仁兄也来了。高手云集啊,呵呵,=fly出场 朋友,不同的壳脱法是不同的。如果所有的壳都是相同的脱法,也就不会有unpackcn存在了。你可以从头开始学调试,学到一定地步就可以脱壳了。当然,如果你急需的话,可以照这样:1 下载Peid(http://www.pediy.com/tools/unpack/File_analysers/peid/peid.rar,无毒)2 侦测程序是什么壳3 到这里http://www.pediy.com/tools/unpacker.htm或者 baidu查找有没有高手制作的脱壳机 总得来说就是这样了。总之要是有时间、兴趣的话,欢迎你加入调试的行列。你可以到pediy和unpackcn上学习 祝 下午愉快 参考技术C 去写黑客网站找些教程久好了。 可以来我们 溜客 66261770 这是我们分群的 号码

Vmware 虚拟机三种网络模式最详细解说转载

由于Linux目前很热门,越来越多的人在学习linux,但是买一台服务放家里来学习,实在是很浪费。那么如何解决这个问题?虚拟机软件是很好的选择,常用的虚拟机软件有vmware workstations和virtual box等。在使用虚拟机软件的时候,很多初学者都会遇到很多问题,而vmware的网络连接问题是大家遇到最多问题之一。在学习交流群里面,几乎每天都会有同学问到这些问题,写这篇详解也是因为群里童鞋网络出故障,然后在帮他解决的过程中,对自己的理解也做一个总结。接下来,我们就一起来探讨一下关于vmware workstations网络连接的三种模式。

vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)NAT(网络地址转换模式)Host-Only(仅主机模式)

打开vmware虚拟机,我们可以在选项栏的“编辑”下的“虚拟网络编辑器”中看到VMnet0(桥接模式)、VMnet1(仅主机模式)、VMnet8(NAT模式),那么这些都是有什么作用呢?其实,我们现在看到的VMnet0表示的是用于桥接模式下的虚拟交换机;VMnet1表示的是用于仅主机模式下的虚拟交换机;VMnet8表示的是用于NAT模式下的虚拟交换机。

技术分享

同时,在主机上对应的有VMware Network Adapter VMnet1和VMware Network Adapter VMnet8两块虚拟网卡,它们分别作用于仅主机模式与NAT模式下。在“网络连接”中我们可以看到这两块虚拟网卡,如果将这两块卸载了,可以在vmware的“编辑”下的“虚拟网络编辑器”中点击“还原默认设置”,可重新将虚拟网卡还原。

技术分享

小伙伴看到这里,肯定有疑问,为什么在真机上没有VMware Network Adapter VMnet0虚拟网卡呢?那么接下来,我们就一起来看一下这是为什么。

一、Bridged(桥接模式)

什么是桥接模式?桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥接的作用下,类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中,所以所有桥接下的网卡与网卡都是交换模式的,相互可以访问而不干扰。在桥接模式下,虚拟机ip地址需要与主机在同一个网段,如果需要联网,则网关与DNS需要与主机网卡一致。其网络结构如下图所示:

技术分享

接下来,我们就来实际操作,如何设置桥接模式。

首先,安装完系统之后,在开启系统之前,点击“编辑虚拟机设置”来设置网卡模式。

技术分享

点击“网络适配器”,选择“桥接模式”,然后“确定”

技术分享

在进入系统之前,我们先确认一下主机的ip地址、网关、DNS等信息。

技术分享

然后,进入系统编辑网卡配置文件,命令为vi /etc/sysconfig/network-scripts/ifcfg-eth0

技术分享

添加内容如下:

技术分享

编辑完成,保存退出,然后重启虚拟机网卡,使用ping命令ping外网ip,测试能否联网。

技术分享

能ping通外网ip,证明桥接模式设置成功。

那主机与虚拟机之间的通信是否正常呢?我们就用远程工具来测试一下。

技术分享

主机与虚拟机通信正常。

这就是桥接模式的设置步骤,相信大家应该学会了如何去设置桥接模式了。桥接模式配置简单,但如果你的网络环境是ip资源很缺少或对ip管理比较严格的话,那桥接模式就不太适用了。如果真是这种情况的话,我们该如何解决呢?接下来,我们就来认识vmware的另一种网络模式:NAT模式。

二、NAT(地址转换模式)

刚刚我们说到,如果你的网络ip资源紧缺,但是你又希望你的虚拟机能够联网,这时候NAT模式是最好的选择。NAT模式借助虚拟NAT设备和虚拟DHCP服务器,使得虚拟机可以联网。其网络结构如下图所示:

技术分享

在NAT模式中,主机网卡直接与虚拟NAT设备相连,然后虚拟NAT设备与虚拟DHCP服务器一起连接在虚拟交换机VMnet8上,这样就实现了虚拟机联网。那么我们会觉得很奇怪,为什么需要虚拟网卡VMware Network Adapter VMnet8呢?原来我们的VMware Network Adapter VMnet8虚拟网卡主要是为了实现主机与虚拟机之间的通信。在之后的设置步骤中,我们可以加以验证。

首先,设置虚拟机中NAT模式的选项,打开vmware,点击“编辑”下的“虚拟网络编辑器”,设置NAT参数及DHCP参数。

技术分享

技术分享

技术分享

将虚拟机的网络连接模式修改成NAT模式,点击“编辑虚拟机设置”。

技术分享

点击“网络适配器”,选择“NAT模式”

技术分享

然后开机启动系统,编辑网卡配置文件,命令为vi /etc/sysconfig/network-scripts/ifcfg-eth0

技术分享

具体配置如下:

技术分享

编辑完成,保存退出,然后重启虚拟机网卡,动态获取ip地址,使用ping命令ping外网ip,测试能否联网。

技术分享

之前,我们说过VMware Network Adapter VMnet8虚拟网卡的作用,那我们现在就来测试一下。

技术分享

技术分享

如此看来,虚拟机能联通外网,确实不是通过VMware Network Adapter VMnet8虚拟网卡,那么为什么要有这块虚拟网卡呢?

之前我们就说VMware Network Adapter VMnet8的作用是主机与虚拟机之间的通信,接下来,我们就用远程连接工具来测试一下。

技术分享

然后,将VMware Network Adapter VMnet8启用之后,发现远程工具可以连接上虚拟机了。

那么,这就是NAT模式,利用虚拟的NAT设备以及虚拟DHCP服务器来使虚拟机连接外网,而VMware Network Adapter VMnet8虚拟网卡是用来与虚拟机通信的。

三、Host-Only(仅主机模式)

Host-Only模式其实就是NAT模式去除了虚拟NAT设备,然后使用VMware Network Adapter VMnet1虚拟网卡连接VMnet1虚拟交换机来与虚拟机通信的,Host-Only模式将虚拟机与外网隔开,使得虚拟机成为一个独立的系统,只与主机相互通讯。其网络结构如下图所示:

技术分享

通过上图,我们可以发现,如果要使得虚拟机能联网,我们可以将主机网卡共享给VMware Network Adapter VMnet1网卡,从而达到虚拟机联网的目的。接下来,我们就来测试一下。

首先设置“虚拟网络编辑器”,可以设置DHCP的起始范围。

技术分享

设置虚拟机为Host-Only模式。

技术分享

开机启动系统,然后设置网卡文件。

技术分享

保存退出,然后重启网卡,利用远程工具测试能否与主机通信。

技术分享

主机与虚拟机之间可以通信,现在设置虚拟机联通外网。

技术分享

我们可以看到上图有一个提示,强制将VMware Network Adapter VMnet1的ip设置成192.168.137.1,那么接下来,我们就要将虚拟机的DHCP的子网和起始地址进行修改,点击“虚拟网络编辑器”

技术分享

重新配置网卡,将VMware Network Adapter VMnet1虚拟网卡作为虚拟机的路由。

技术分享

重启网卡,然后通过 远程工具测试能否联通外网以及与主机通信。

技术分享

测试结果证明可以使得虚拟机连接外网。

以上就是关于vmware三种网络模式的工作原理及配置详解。

 

原文来自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note

 

以上是关于谁能详细解说下脱壳步骤和软件的主要内容,如果未能解决你的问题,请参考以下文章

我是菜鸟 谁能告诉下在 ubuntu 10.10安装软件的步骤 请详细点 说得好加分

如何给程序脱壳

谁能帮我脱壳一个东西

ConfuserEx 脱壳软件 使用教程

PSP2000怎么看小说?请详细解说

小编详细解说:BI管理软件到底有什么特色