加壳与脱壳
- 格式:ppt
- 大小:216.00 KB
- 文档页数:16
第1章计算机信息安全概述习题参考答案1. 对计算机信息安全造成威胁的主要因素有哪些?答:影响计算机信息安全的因素有很多,主要有自然威胁和人为威胁两种。
自然威胁包括:自然灾害、恶劣的场地环境、物理损坏、设备故障、电磁辐射和电磁干扰等。
人为威胁包括:无意威胁、有意威胁。
自然威胁的共同特点是突发性、自然性、非针对性。
这类不安全因素不仅对计算机信息安全造成威胁,而且严重威胁着整个计算机系统的安全,因为物理上的破坏很容易毁灭整个计算机信息管理系统以及网络系统。
人为恶意攻击有明显的企图,其危害性相当大,给信息安全、系统安全带来了巨大的威胁。
人为恶意攻击能得逞的原因是计算机系统本身有安全缺陷,如通信链路的缺陷、电磁辐射的缺陷、引进技术的缺陷、软件漏洞、网络服务的漏洞等。
2. 计算机信息安全的特性有哪些?答:信息安全的特性有:⑴完整性完整性是指信息在存储或传输的过程中保持未经授权不能改变的特性,即对抗主动攻击,保证数据的一致性,防止数据被非法用户修改和破坏。
⑵可用性可用性是指信息可被授权者访问并按需求使用的特性,即保证合法用户对信息和资源的使用不会被不合理地拒绝。
对可用性的攻击就是阻断信息的合理使用。
⑶保密性保密性是指信息不被泄露给未经授权者的特性,即对抗被动攻击,以保证机密信息不会泄露给非法用户或供其使用。
⑷可控性可控性是指对信息的传播及内容具有控制能力的特性。
授权机构可以随时控制信息的机密性,能够对信息实施安全监控。
⑸不可否认性不可否认性也称为不可抵赖性,即所有参与者都不可能否认或抵赖曾经完成的操作和承诺。
发送方不能否认已发送的信息,接收方也不能否认已收到的信息。
3. 计算机信息安全的对策有哪些?答:要全面地应对计算机信息安全问题,建立一个立体的计算机信息安全保障体系,一般主要从三个层面来做工作,那就是技术、管理、人员。
(1)技术保障指运用一系列技术层面的措施来保障信息系统的安全运营,检测、预防、应对信息安全问题。
对DLL脱壳的一点见解-电脑资料一般外壳都是加在PE文件最后,所以脱壳后获得的真正的重定位表所指向的地方的RVA跟脱壳前是一样的,哪位要是写个加壳的东西将外壳加在PE文件所有节前面或中间(指外壳实体放在PE最前面或中间),不知道给脱壳又要增加多少麻烦,。
建议D.Boy试试吧。
加壳的DLL处理重定位表有n中方法,常见的有下面4种情况:1、完整的保留了原重定位表,RVA也没有变化(即在加壳的程序中后看到的重定位表就原来真正的重定位表,我原来发给您的我写的加壳例子就是这样);2、原重定位表的RVA进行了加密,但重定位数据没有加密(即将原重定位数据做了搬移);3、对原重定位表的RVA和重定位数据都进行了加密处理;4、对原重定位表的RVA和重定位数据、以及原程序中被重定位项所指向的数据同时进行了加密。
以上几种情况中,都有可能在原重定位表中增加了外壳的重定位数据,所以脱壳后还要将外壳的重定位项去掉。
当然,如果不是真正脱掉外壳(保留脱壳后的外壳尸体)去不去掉也无所谓,若真正脱了壳,一定要去掉,否则PE装载时可能会报告:Windows错误,xxxxxxxx的地址不能为Write。
另外,DLL加载时候,基地址一般跟编译器生成的基地址是不同的,所以脱壳后的程序中被原重定位项所指向的地方是已经重定位了的数据。
所以,还要将这些地方还原为编译器生成的数据。
方法可以写一个程序,扫描获得的“真正的原重定位表”取得这些地方数据并减去脱壳时候的基地址,再加上编译器生成时候的基地址(重定位项的属性一共有7种情况,但在PE中只能看到0和3这两种情况,0---没有什么意义;3---对32位都要修正,即PE文件在重定位表中每项所指向的地方肯定是个32位的地址)。
第一种情况,是最简单的,因为完全保留了原来的重定位表,所以重定位的过程让PE装载器给完成了。
脱壳后只要将获得得原来的重定位数据复制到脱壳后的程序的重定位表中,再按照上面的方法修正重定位项所指的地方的数据就可以了。
软件加壳与脱壳技术的实现
夏绍春;易波;刘威
【期刊名称】《现代计算机(专业版)》
【年(卷),期】2004(000)003
【摘要】本文介绍了软件加壳与脱壳的原理,并用Delphi6.0实现了文件加壳与脱壳程序以及自解压脱壳程序.文中根据该原理对加壳与脱壳的编程思路作了概括和分析,并给出了加壳与脱壳两个关键模块的实现代码.
【总页数】4页(P78-81)
【作者】夏绍春;易波;刘威
【作者单位】湖南大学计算机与通信学院,长沙,410082;湖南大学计算机与通信学院,长沙,410082;湖南大学计算机与通信学院,长沙,410082
【正文语种】中文
【中图分类】TP3
【相关文献】
1.基于椭圆曲线数字签名的软件加壳保护技术的实现 [J], 田润芙;蔡永泉
2.基于流的加壳与脱壳技术实现 [J], 费明德;鞠永生;胡涛
3.多态技术加壳软件的实现 [J], 陈虹;汤明月;章三妹
4.基于流的加壳与脱壳技术实现 [J], 费明德;鞠永生;胡涛
5.软件加壳技术的研究与实现 [J], 李璇; 李林鹏; 李理
因版权原因,仅展示原文概要,查看原文内容请购买。
Armadillo标准加壳的程序的脱壳和引入表修复方案作者:jwh51 来源:看雪论坛加入时间:2003-6-14用过ARMADILLO的人都知道,用它加壳有两种方式,一是使用COPY MEMII,一是标准加壳.用COPY MEMII 的一般可用DILLODUMP脱(当然也有时脱不了),而用标准加壳用DILLODUMP是脱不了的,这是DILLODUMP中的说明,我们来看看:NOTE: This only really works on programs that are at least protected to some extent.For example, it will not work on "Standard Protection" aramadillo files, which isn'ta big deal, because for those you do not need to have any "advanced" tools to dump. I planon released a "lite" version to support those files soon..本人E文很菜,只能了解大意,是说标准加壳的脱壳比较简单,不需用工具.但是对我等菜来说,还是要用工具的好,不过既然现在还没有,还是手脱吧.脱壳目标:SoundEdit pro v1.30.634,5月29日更新.下载:/getit.asp?pid=6&server=/programs/sep13.exe加壳程序:Armadillo v3.00a工具:OLLYDBG,LOADPE,importRECSoundEdit是一个声音编辑软件(国外的),采用了ARMADILLO的KEY加密,启动要你输入KEY,否则要等N 秒才能让你启动,还有30天试用期,所以,如果脱了壳,上述现象都将没有了.现在开始脱壳历程.!!第一步,DUMP出程序:用OLLYDBG载入程序.在调试选项中忽略所有异常,这样可以少按SHIFT+F9BP V irtualProtect,F9运行,这时会有异常,用SHIFT+F9过程序会断下来,这时你不停按F9,一般在第5次会出现注册框,OK后再次中断,这时你要注意堆棧开始记下F9的次数了.我这第20下时在堆棧出现如下信息: 0012F214 7342F406 /CALL to V irtualProtect from MSVBVM60.7342F400说明程序,已经运行了.(VB是先运行MSVBVM60.DLL的,在其中也用调用V irtualProtect,如果是DELPHI等程序,可一直F9到程序运行为止)现在重新载入程序,到出现这个信息的前一次中断停下来,然后按几次CTRL+F9到程序中(也就是地址较低的地方,一般都是004*****,005*****,本程序在这:004DA060 83C4 04 ADD ESP, 4004DA063 8945 FC MOV DWORD PTR SS:[EBP-4], EAX004DA066 837D B8 00 CMP DWORD PTR SS:[EBP-48], 0004DA06A 74 0A JE SHORT SoundEdi.004DA076004DA06C 8B45 B8 MOV EAX, DWORD PTR SS:[EBP-48]004DA06F 50 PUSH EAX004DA070 FF15 E8615000 CALL DWORD PTR DS:[<&USER32.DestroyWi>; USER32.DestroyWindow 004DA076 8B45 FC MOV EAX, DWORD PTR SS:[EBP-4]004DA079 8BE5 MOV ESP, EBP004DA07B 5D POP EBP004DA07C C3 RETN这时小心地用F8,因为有一堆的JMP,JNZ,JO等,不过也用不了多久的,大概20多次就可来到这:004DB483 61 POP AD004DB484 6A 00 PUSH 0004DB486 E8 6E000000 CALL SoundEdi.004DB4F9004DB48B 83C4 04 ADD ESP, 4004DB48E 6A 00 PUSH 0004DB490 E8 46830000 CALL SoundEdi.004E37DB004DB495 83C4 04 ADD ESP, 4004DB498 837D E4 01 CMP DWORD PTR SS:[EBP-1C], 1004DB49C 75 11 JNZ SHOR T SoundEdi.004DB4AF004DB49E 68 E8965000 PUSH SoundEdi.005096E8004DB4A3 FF15 0C975000 CALL DWORD PTR DS:[50970C] ,这个CALL用F7跟进004DB4A9 83C4 04 ADD ESP, 4004DB4AC 8945 E4 MOV DWORD PTR SS:[EBP-1C], EAX004DB4AF 68 0C9E4D00 PUSH SoundEdi.004D9E0C在4db4a3这个CALL用f7跟进,然后继续F8,几次后就来到这:00D0B5E0 /75 29 JNZ SHOR T 00D0B60B00D0B5E2 |E8 A05AFFFF CALL 00D0108700D0B5E7 |FF76 04 PUSH DWORD PTR DS:[ESI+4]00D0B5EA |8BF8 MOV EDI, EAX00D0B5EC |A1 CCEED100 MOV EAX, DWORD PTR DS:[D1EECC]00D0B5F1 |FF76 08 PUSH DWORD PTR DS:[ESI+8]00D0B5F4 |8B48 70 MOV ECX, DWORD PTR DS:[EAX+70]00D0B5F7 |3348 50 XOR ECX, DWORD PTR DS:[EAX+50]00D0B5FA |6A 00 PUSH 000D0B5FC |3348 34 XOR ECX, DWORD PTR DS:[EAX+34]00D0B5FF |03F9 ADD EDI, ECX00D0B601 |E8 815AFFFF CALL 00D0108700D0B606 |50 PUSH EAX00D0B607 |FFD7 CALL EDI ; SoundEdi.004059B0看到最后这个CALL EDI吗,004059B0就是程序的OEP了,我们F7跟进:00405996 - FF25 3C114000 JMP DWORD PTR DS:[40113C]0040599C - FF25 8C104000 JMP DWORD PTR DS:[40108C]004059A2 - FF25 B0104000 JMP DWORD PTR DS:[4010B0]004059A8 - FF25 E8114000 JMP DWORD PTR DS:[4011E8]004059AE 0000 ADD BYTE PTR DS:[EAX], AL004059B0 68 787D4000 PUSH SoundEdi.00407D78 ,这是OEP了,004059B5 E8 EEFFFFFF CALL SoundEdi.004059A8呵,典型的VB代码.拿出LOADPE,快快DUMP吧.我们把DUMP的程序保存为DUMPED.EXE第二步,引入表的修复以前总以为它的修复很难,但实际上只要修改程序流程,完全可得到正确的引入表的.1.可先用importREC试试,有一个指针无效,如果CUT程序退出时会出错,所以要修复它.通过它我们可看到iat 的rva为1000,错误指针为1030,(如果很多指针无效,只要记住一个无效的RV A就可以了)2.重新载入程序,BP V irtualProtect,断下后f9,注意堆棧的变化,当出现如下信息时要注意了:0012DB28 00D0887E /CALL to V irtualProtect from 00D088780012DB2C 00401000 |Address = SoundEdi.004010000012DB30 000CB000 |Size = CB000 (831488.)0012DB34 00000004 |NewProtect = PAGE_READWRITE0012DB38 0012F034 \pOldProtect = 0012F034它将往401000也就是IAT所在的地方写入信息:这是再按一下F9,又停下来,D 401000,我们可看到,IA T所在的位置已经写入了东西,还不是dll的地址,还记得那个无效指针的地址吗:401030,我们清掉断点,然后在在内存定位到401030处,"右键-->breakpoint-->hardware on write-->dword",然后按F9运行,程序停了下来:00D0942F 8B85 5CFBFFFF MOV EAX, DWORD PTR SS:[EBP-4A4]00D09435 8B8D 48F9FFFF MOV ECX, DWORD PTR SS:[EBP-6B8]00D0943B 8908 MOV DWORD PTR DS:[EAX], ECX00D0943D 8B85 5CFBFFFF MOV EAX, DWORD PTR SS:[EBP-4A4] ; 停在这00D09443 83C0 04 ADD EAX, 400D09446 8985 5CFBFFFF MOV DWORD PTR SS:[EBP-4A4], EAX00D0944C ^ E9 78FEFFFF JMP 00D092C9看到上述二行:MOV ECX,DWORD PRT [EBP-6B8],我们再往上找几行可看到这个语句:00D093E3 E8 F8C0FEFF CALL 00CF54E000D093E8 8985 48F9FFFF MOV DWORD PTR SS:[EBP-6B8], EAX00D093EE 83BD 48F9FFFF 0>CMP DWORD PTR SS:[EBP-6B8], 000D093F5 75 38 JNZ SHORT 00D0942F在第二行也有个[EBP-6B8],注意前面这个CALL,我们去看一看00CF54E0 55 PUSH EBP00CF54E1 8BEC MOV EBP, ESP00CF54E3 53 PUSH EBX00CF54E4 56 PUSH ESI00CF54E5 57 PUSH EDI00CF54E6 33FF XOR EDI, EDI00CF54E8 33DB XOR EBX, EBX00CF54EA 66:F745 0E FFFF TEST WORD PTR SS:[EBP+E], 0FFFF00CF54F0 75 03 JNZ SHORT 00CF54F500CF54F2 8B5D 0C MOV EBX, DWORD PTR SS:[EBP+C]00CF54F5 57 PUSH EDI00CF54F6 FF15 A430D100 CALL DWORD PTR DS:[D130A4] ; kernel32.GetModuleHandleA 00CF54FC 3945 08 CMP DWORD PTR SS:[EBP+8], EAX00CF54FF 75 07 JNZ SHOR T 00CF550800CF5501 BE C053D100 MOV ESI, 0D153C000CF5506 EB 60 JMP SHOR T 00CF556800CF5508 393D 9859D100 CMP DWORD PTR DS:[D15998], EDI00CF550E B9 9859D100 MOV ECX, 0D1599800CF5513 74 3C JE SHORT 00CF555100CF5515 8B35 B8B1D100 MOV ESI, DWORD PTR DS:[D1B1B8]00CF551B A1 CCEED100 MOV EAX, DWORD PTR DS:[D1EECC]00CF5520 F641 08 01 TEST BYTE PTR DS:[ECX+8], 100CF5524 74 0E JE SHORT 00CF553400CF5526 8B50 70 MOV EDX, DWORD PTR DS:[EAX+70]00CF5529 3350 60 XOR EDX, DWORD PTR DS:[EAX+60]00CF552C 3350 3C XOR EDX, DWORD PTR DS:[EAX+3C]00CF552F F6C2 80 TEST DL, 8000CF5532 75 13 JNZ SHORT 00CF554700CF5534 8B50 70 MOV EDX, DWORD PTR DS:[EAX+70]00CF5537 3350 64 XOR EDX, DWORD PTR DS:[EAX+64]00CF553A 3350 58 XOR EDX, DWORD PTR DS:[EAX+58]00CF553D 3350 20 XOR EDX, DWORD PTR DS:[EAX+20]00CF5540 3316 XOR EDX, DWORD PTR DS:[ESI]00CF5542 3955 08 CMP DWORD PTR SS:[EBP+8], EDX00CF5545 74 1E JE SHORT 00CF556500CF5547 83C1 0C ADD ECX, 0C00CF554A 83C6 04 ADD ESI, 400CF554D 3939 CMP DWORD PTR DS:[ECX], EDI00CF554F ^ 75 CF JNZ SHORT 00CF552000CF5551 FF75 0C PUSH DWORD PTR SS:[EBP+C]这里面有几个跳转,其中最后一个CF554F是往上跳的.我们看一个就可发现:00CF5513 74 3C JE SHORT 00CF5551,这个跳正好可跳出这个循环.只要改这个跳,就不会破坏引入表了.再次重新载入,BP V irtualProtect,出现注册框后OK,程序再断下来,这时清除断点(包括硬件断点),CTRL+F9回程序领空,把CF5513的74 3c改成eb 3c,按F9运行,程序运行后打开importREC,选中程序,入口填入59b0,-->IA T自动搜索-->获得输入信息",如果还有无效的大可放心的cut,因为它们本来就不是有用指针了(也可能是importREC把IA T的大小判断错了),.然后修复脱壳后的文件.OK,大功告成.测试了下脱壳后的程序,运行正常,那个烦人的注册框没有,时间限制也注册了,别说30天,就是30年都没问题.。
什么是APP加壳?加壳是移动应用加密的一种方式。
APP加壳是指在二进制的应用程序中植入一段代码,对原始二进制原文进行加密、隐藏、混淆;加壳是应用加密的一种手法,应用加壳后,在运行的时候会优先取得程序的控制权,做一些额外的安全工作。
APP加壳的作用加壳的程序可以有效阻止对程序的反汇编分析,以达到它不可告人的目的,这种技术也常用来保护软件版权,防止被软件破解。
通俗的解释,加壳可以有效防止APP被植入恶意代码导致的程序被破解、被山寨的风险,同时保护用户隐私信息和数据泄露等。
如今,安卓apk文件很容易暴露出来,这也是安卓本身的特性。
安卓危险的原因:第一个原因就是签名机制问题,安卓上没有中央的签名机制,签名的原因造成现在安卓这个市场上二次打包的现象非常严重。
第二个原因是技术问题,安卓采用JA VA语言开发的,源码很容易泄露。
第三个原因就是安卓的开放性,苹果控制了签名,使下载程序的来源变得单一,而在安卓上你可以在任何地方下载应用程序,其实安卓不安全的真正原因就是这个因素造成的。
在这种情况下,我们还会经常碰到一些问题,现在会暴露一些服务器的漏洞。
为了支持手机的客户端,新开发了一套接口,而这套接口没有经过调试,黑客仿编你的客户端,通过未调试的接口就会发现你后台有一些相关的漏洞,从而通过这种方式进行一些入侵。
作为开发者或开发商,是应用程序产生的源头。
建议将安全融入到应用开发生命周期当中去,在开发阶段进行安全测试和检测,及时发现应用程序缺陷和安全漏洞,减少不必要的安全风险;在应用发布阶段进行应用安全加固,增加应用安全强度,防止应用被破解和二次打包;在运营阶段进行渠道监测,及时发现盗版应用,保障自身合法权益不受恶意损害。
APP加壳的利弊通过使用APP加壳技术,开发者可以有效保护自己的核心代码算法,提高破解、盗版程序和二次打包的难度;技术层面,APP加壳可以缓解代码注入、动态调试、内存注入攻击,加强了APP的安全;目前主流的移动应用安全服务商都将APP加壳作为主要的应用加密手段,辅以其他保护APP的手段。
壳加壳脱壳介绍壳的一些基本常识壳(Shell)是计算机操作系统的一种用户接口,它提供了用户与操作系统内核之间的交互方式。
它是用户与操作系统之间的纽带,使用户能够通过命令、脚本等方式与操作系统进行交互。
加壳(Packaging)指的是给软件程序添加额外的代码,以便增加安全性、保护程序免受非法分析和篡改。
加壳技术可以对软件进行加密,防止逆向工程和盗版,同时还可以实现防病毒和反调试的功能。
脱壳(Unpacking)是指将被加壳的软件程序恢复为原始的可执行文件。
通常情况下,脱壳是为了分析软件的结构和行为,或者绕过加壳的保护机制进行非法操作。
下面是一些基本的壳常识:1. 壳的种类:常见的壳包括命令行壳和图形用户界面壳。
命令行壳(例如Bash、PowerShell等)提供了一个命令行界面,用户可以通过输入命令来与操作系统进行交互。
图形用户界面壳(例如Windows的资源管理器、macOS的Finder等)提供了可视化的界面,用户可以通过鼠标点击和拖放来进行操作。
2.壳的功能:壳作为用户接口,提供了很多功能,例如操作文件和文件夹、运行程序、管理系统设置等。
它还可以提供脚本语言的支持,使用户可以通过编写脚本来自动化任务和定制操作。
3.壳的配置和定制:壳通常可以进行配置和定制,用户可以根据自己的需求设置壳的外观和行为。
例如,可以更改壳的主题、布局和颜色,添加自定义菜单和工具栏,设置快捷键等。
4. 壳脚本:壳脚本是一种用于定制壳行为的脚本语言。
例如,在Bash中,用户可以编写Shell脚本来自动执行一系列命令和操作。
壳脚本可以用于自动化任务、批处理、系统管理等方面。
5.加壳的原因和目的:加壳可以增加软件的安全性,保护知识产权和商业机密。
它可以防止软件被逆向工程,避免黑客和破解者篡改程序逻辑或者盗版软件。
加壳还可以实现软件的防病毒功能,使病毒难以对软件进行分析和感染。
6.加壳的原理和技术:加壳通常通过改变软件的结构和代码来实现。
四川省第三届信息安全大赛试题21.网络信息探测中第一步要做的是什么工作?(B )A.扫描B.Ping C.隐藏自己D.溢出22.$1$TLGHx5co$vq6xM0WG1hYfIV1AZEWgD是什么系统的密码加密值?(B )A.Windows B.Linux C.UNIX D.AIX23.下面哪个是流行的加壳鉴别工具? (C )A.superscan B.peid C.upxshell D.Armadillo24.下面哪种不是壳对程序代码的保护方法?(B )A.加密B.指令加花C.反跟踪代码D.限制启动次数25.请根据下面的shellcode代码,选择number正确的值完善shellcode代码。
(B )/* shellcode.c */#include <windows.h>#include <winbase.h>char shellcode[]={0x8b,0xe5 /* mov esp,ebp */0x55, /* push ebp */0x8b,0xec, /* mov ebp,esp */0x83,0xec,0x0c, /* sub esp,0000000c */0xb8,0x63,0x6f,0x6d,0x6d /* move ax,6d6d6f63 */……略};int main( ){int *ret;LoadLibrary("msvcrt,dll");ret = (int *)&ret + number;(*ret) = (int)shellcode}A.1 B.2 C.3 D.426.增加主机抵抗DoS攻击能力的方法之一是(A )。
A.缩短SYN Timeout时间B.调整TCP窗口大小C.增加SYN Timeout时间D.IP-MAC绑定27.UNIX系统日志文件通常是存放在(A )。
A./var/log B./usr/admC./etc/ D./var/run28.下面选项中关于交换机安全配置方法正确的是(D )。
加壳和脱壳通常是在软件工程中使用的术语,它们涉及到对二进制代码进行加密和解密。
加壳:这是将代码进行加密的过程。
当代码被加壳时,它变得难以阅读和理解。
这可以防止未经授权的人查看或修改代码。
加壳后的代码通常会以一种特殊的方式执行,这使得原始代码在运行时才能被解密并执行。
脱壳:这是将加壳的代码进行解密的过程。
当你想查看或修改加壳的代码时,你需要进行脱壳。
脱壳后的代码通常是原始代码,可以被阅读和理解。
以下是一个简单的Python加壳和脱壳的示例:加壳:```pythondef obfuscate_code(code):encrypted_code = ""for char in code:encrypted_code += chr(ord(char) ^ 42) # XOR with 42 to encrypt the codereturn encrypted_codeoriginal_code = "print('Hello, World!')"encrypted_code = obfuscate_code(original_code)exec(encrypted_code) # This will run the encryptedcode```脱壳:```pythondef deobfuscate_code(encrypted_code):decrypted_code = ""for char in encrypted_code:decrypted_code += chr(ord(char) ^ 42) # XOR with 42 to decrypt the codereturn decrypted_codeencrypted_code = "print('Hello, World!')" # This is the encrypted code from the previous exampledecrypted_code = deobfuscate_code(encrypted_code)exec(decrypted_code) # This will run the decrypted code, which will print "Hello, World!"```请注意,这只是一个简单的示例,实际的加壳和脱壳技术要复杂得多,并且可以包括更高级的加密和混淆技术。
电脑病毒加壳是什么意思在一些计算机软件里也有一段专门,负责保护软件不被非法修改或反编译的壳。
它们一般都是先于程序运行,拿到控制权,然后做保护软件的工作。
下面由店铺给你做出详细的电脑病毒加壳介绍!希望对你有帮助!电脑病毒加壳介绍:动植物的壳一般都是在身体外面同样软件的壳也是如此,但后来也出现了所谓的“壳中带籽”的壳。
推荐文章从“壳”又延伸出“加壳”和“脱壳”两个词汇,“加壳”指的是对编译好的EXE、DLL等文件采用加壳来进行保护;“脱壳”指的就是将文件外边的壳去除,恢复文件没有加壳前的状态。
壳出于程序作者想对程序资源压缩、注册保护的目的,把壳分为压缩壳、密码壳、加密壳三种。
顾名思义,压缩壳只是为了减小程序体积对资源进行压缩,常见的压缩壳包括FSG、ASPack、UPX、北斗等;加密壳也就是常说的保护壳、猛壳,它对程序输入表等内容进行加密保护,具有良好的保护效果,常见的加密壳包括ASPROTECT、ACPROTECT、PELock、幻影等;密码壳平时使用得不多,加密壳的程序只有在正确输入密码后才能运行。
电脑病毒加壳案例如今黑客使用病毒加壳,主要是对使用的木马等恶意程序进行保护,从而避免它们被杀毒软件所查杀。
比如大名鼎鼎的冰河木马,原版本被作者用UPX加壳,可是这种加壳方式已经被杀毒软件列入封杀名单。
所以人们现在要使用冰河的时候,首先需要将原来的UPX壳脱掉,接着通过修改特征码、修改程序入口地址、加花指令等不同的方法进行免杀操作,然后再加壳进行保护,这样一个免杀的冰河木马就诞生了。
当然有的人可能不会去进行麻烦的免杀操作,所以只要对脱壳的服务端程序进行多层加壳即可,不过一般都是先加加密壳,再加压缩壳,顺序不能颠倒。
电脑病毒加壳简单防御方法:有人说过:壳之初,性本善。
本来壳的诞生是为了帮助程序作者更好地保护自己编写的程序,但谁知道现在却成为了黑客的帮凶,为此我们更应该做好防范。
(一)通过Windows注册表监视工具对注册表的变化进行及时的监控,比如Regmon等,可以很好的实时监视并显示对整个系统注册表的访问,让用户了解某些恶意程序在系统运行后的状况。
壳是什么?脱壳又是什么?这是很多经常感到迷惑和经常提出的问题,其实这个问题一点也不幼稚。
当你想听说脱壳这个名词并试着去了解的时候,说明你已经在各个安全站点很有了一段日子了。
下面,我们进入“壳”的世界吧。
一、金蝉脱壳的故事我先想讲个故事吧。
那就是金蝉脱壳。
金蝉脱壳属于三十六计中的混战计。
金蝉脱壳的本意是:寒蝉在蜕变时,本体脱离皮壳而走,只留下蝉蜕还挂在枝头。
此计用于军事,是指通过伪装摆脱敌人,撤退或转移,以实现我方的战略目标的谋略。
稳住对方,撤退或转移,决不是惊慌失措,消极逃跑,而是保留形式,抽走内容,稳住对方,使自己脱离险境达到己方战略目标,己方常常可用巧妙分兵转移的机会出击另一部分敌人。
三国时期,诸葛亮六出祁山,北伐中原,但一直未能成功,终于在第六次北伐时,积劳成疾,在五丈原病死于军中。
维遵照诸葛亮的吩咐,在诸葛亮死后,秘不发丧,对外严密封锁消息。
他带着灵柩,秘密率部撤退。
司马懿派部队跟踪追击蜀军。
姜维命工匠仿诸葛亮摸样,雕了一个木人,羽扇纶巾,稳坐车中。
并派杨仪率领部分人马大张旗鼓,向魏军发动进攻。
魏军远望蜀军,军容整齐,旗鼓大张,又见诸葛亮稳坐车中,指挥若定,不知蜀军又耍什么花招,不敢轻举妄动。
司马懿一向知道诸葛亮“诡计多端”,又怀疑此次退兵乃是诱敌之计,于是命令部队后撤,观察蜀军动向。
姜维趁司马懿退兵的大好时机,马上指挥主力部队,迅速安全转移,撤回汉中。
等司马懿得知诸葛亮已死,再进兵追击,为时已晚。
相信这个故事,大家在大型连续剧《三国演义》里已经看过了。
呵呵,只是没有理解得这么深入罢了!而在黑客入侵技术中,金蝉脱壳则是指:删除系统运行日志攻击者攻破系统后,常删除系统运行日志,隐藏自己的痕迹...呵呵二、壳,脱壳,加壳在自然界中,我想大家对壳这东西应该都不会陌生了,由上述故事,我们也可见一斑。
自然界中植物用它来保护种子,动物用它来保护身体等等。
同样,在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。
壳,加壳,脱壳,介绍壳的一些基本常识免杀入门 2009-08-06 16:58 阅读7 评论0 字号:大大中中小小在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。
它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。
就像动植物的壳一般都是在身体外面一样理所当然(但后来也出现了所谓的“壳中带籽”的壳)。
由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,大家就把这样的程序称为“壳”了。
就像计算机病毒和自然界的病毒一样,其实都是命名上的方法罢了。
从功能上抽象,软件的壳和自然界中的壳相差无几。
无非是保护、隐蔽壳内的东西。
而从技术的角度出发,壳是一段执行于原始程序前的代码。
原始程序的代码在加壳的过程中可能被压缩、加密……。
当加壳后的文件执行时,壳-这段代码先于原始程序运行,他把压缩、加密后的代码还原成原始程序代码,然后再把执行权交还给原始代码。
软件的壳分为加密壳、压缩壳、伪装壳、多层壳等类,目的都是为了隐藏程序真正的OEP(入口点,防止被破解)。
关于“壳”以及相关软件的发展历史请参阅吴先生的《一切从“壳”开始》。
(一)壳的概念作者编好软件后,编译成exe可执行文件。
1.有一些版权信息需要保护起来,不想让别人随便改动,如作者的姓名,即为了保护软件不被破解,通常都是采用加壳来进行保护。
2.需要把程序搞的小一点,从而方便使用。
于是,需要用到一些软件,它们能将exe可执行文件压缩,3.在黑客界给木马等软件加壳脱壳以躲避杀毒软件。
实现上述功能,这些软件称为加壳软件。
(二)加壳软件最常见的加壳软件ASPACK ,UPX,PEcompact 不常用的加壳软件WWPACK32;PE-PACK ;PETITE NEOLITE (三)侦测壳和软件所用编写语言的软件因为脱壳之前要查他的壳的类型。
1.侦测壳的软件fileinfo.exe 简称fi.exe(侦测壳的能力极强)。
2.侦测壳和软件所用编写语言的软件language.exe(两个功能合为一体,很棒),推荐language2000中文版(专门检测加壳类型)。
软件加壳、脱壳基础介绍什么是加壳加壳的全称应该是可执⾏程序资源压缩,压缩后的程序可以直接运⾏。
加壳,顾名思义,就是给⼀个东西加上⼀个壳,只不过这⾥是程序。
就好⽐这⼤⾃然中的种⼦⼀样,为了保护⾃⼰,有⼀层壳,要想看到⾥⾯的东西,就要剥开这层壳。
加壳的另⼀种常⽤的⽅式是在⼆进制的程序中植⼊⼀段代码,在运⾏的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的⽬的是隐藏程序真正的OEP(⼊⼝点,防⽌被破解)。
⼤多数病毒就是基于此原理。
加壳的程序需要阻⽌外部程序或软件对加壳程序本⾝的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运⾏。
这种技术也常⽤来保护软件版权,防⽌软件被破解。
但对于病毒,加壳可以绕过⼀些杀毒软件的扫描,从⽽实现它作为病毒的⼀些⼊侵或破坏的⼀些特性。
加壳的⼯具分为压缩壳和加密壳:* UPX ASPCAK TELOCK PELITE NSPACK … ** ARMADILLO ASPROTECT ACPROTECT EPE SVKP …*什么是脱壳 脱壳就是将外⾯的保护程序脱掉,看到⾥⾯的程序。
对于有壳的程序,每次程序的⼊⼝点总是从壳开始,,这个⼊⼝点是EP,那么源程序的⼊⼝点是OEP,壳将真正的OEP隐藏了,我们脱壳就是修改程序的⼊⼝点。
如何脱壳 如果没有基础的汇编知识,那就查出相应的壳,⽤相应的脱壳机进⾏脱壳,那如果,脱壳机⽆法脱呢?⼿动脱壳!基础知识1.PUSHAD (压栈)代表程序的⼊⼝点,2.POPAD (出栈)代表程序的出⼝点,与PUSHAD想对应,⼀般找到这个OEP就在附近3.OEP:程序的⼊⼝点,软件加壳就是隐藏了OEP(或者⽤了假的OEP/FOEP),只要我们找到程序真正的OEP,就可以⽴刻脱壳。
脱壳的⽅法清单⽅法⼀:单步跟踪法1.⽤OD载⼊,点“不分析代码!”2.单步向下跟踪F8,实现向下的跳。
也就是说向上的跳不让其实现!(通过F4)3.遇到程序往回跳的(包括循环),我们在下⼀句代码处按F4(或者右健单击代码,选择断点——>运⾏到所选)4.绿⾊线条表⽰跳转没实现,不⽤理会,红⾊线条表⽰跳转已经实现!5.如果刚载⼊程序,在附近就有⼀个CALL的,我们就F7跟进去,不然程序很容易跑飞,这样很快就能到程序的OEP6.在跟踪的时候,如果运⾏到某个CALL程序就运⾏的,就在这个CALL中F7进⼊7.⼀般有很⼤的跳转(⼤跨段),⽐如 jmp XXXXXX 或者 JE XXXXXX 或者有RETN的⼀般很快就会到程序的OEP。
脱壳知识什么是壳因为许多软件为了保护⾃⼰的软件不被和修改,通常会加壳,代码加密,增加破解的难度,从⽽达到保护软件的⽬的。
⾸先⼤家应该先明⽩“壳”的概念。
在⾃然界中,我想⼤家对壳这东西应该都不会陌⽣了,植物⽤它来保护种⼦,动物⽤它来保护⾝体等等。
同样,在⼀些计算机软件⾥也有⼀段专门负责保护软件不被⾮法修改或反编译的程序。
它们⼀般都是先于程序运⾏,拿到控制权,然后完成它们保护软件的任务。
举个例⼦,核桃⼤家都知道吧,想要吃到⾥⾯的⾁,就必须得先打开核桃外⾯那⼀层坚硬的壳,同样,外⾯想要看到⼀个程序的内部逻辑代码,就要脱掉外⾯的⼀层壳。
程序作者在编好软件后,编译成exe可执⾏⽂件。
有⼀些版权信息需要保护起来,不想让别⼈随便改动,如作者的姓名,即为了保护软件不被破解,通常都是采⽤加壳来进⾏保护。
需要把程序搞的⼩⼀点,缩⼩程序的体积,减少内存容量,从⽽⽅便使⽤。
于是,需要⽤到⼀些软件,它们能将exe可执⾏⽂件压缩,在⿊客界给⽊马等软件加壳以躲避杀毒软件。
实现上述功能,这些称为加壳。
⾃然有加壳就会有脱壳。
为什么要脱壳脱壳是为了能够学习⼀个软件的程序设计逻辑,达到我们想要的⽬的。
如果不脱壳,我们就不能够了解软件的逻辑,也就⽆法得到源代码,也就⽆法破解⼀个软件,也就不会有这篇⽂章了。
我们拿到⼀个软件想要了解它的编程逻辑,那么我们就需要对它进⾏反汇编,当然有壳,也必须先脱壳(有些软件也可以不脱壳破解)。
如果我们需要对⼀个病毒或者⽊马进⾏分析,也是需要脱壳的,如果病毒⽊马不加壳,早被杀毒软件杀掉了。
⼀些常见的壳1、aspack壳2.caspr2、upx壳3、PEcompact壳等等...我们要脱壳,就需要⽤到⼀些汇编的指令,这是必须的,如果不懂汇编指令的话,那么就⽆法进⾏软件的脱壳了。
下⾯我就来介绍破解需要的⼀些主要的汇编指令⼀、数据传输指令───────────────────────────────────────它们在存贮器和寄存器、寄存器和输⼊输出端⼝之间传送数据.1. 通⽤数据传送指令.MOV 传送字或字节.MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压⼊堆栈.POP 把字弹出堆栈.PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压⼊堆栈.POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压⼊堆栈.POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP 交换32位寄存器⾥字节的顺序XCHG 交换字或字节.( ⾄少有⼀个操作数为寄存器,段寄存器不可作为操作数)CMPXCHG ⽐较并交换操作数.( 第⼆个操作数必须为累加器AL/AX/EAX )XADD 先交换再累加.( 结果在第⼀个操作数⾥ )XLAT 字节查表转换.── BX 指向⼀张 256 字节的表的起点, AL 为表的索引值 (0-255,即0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )2. 输⼊输出端⼝传送指令.IN I/O端⼝输⼊. ( 语法: IN 累加器, {端⼝号│DX} )OUT I/O端⼝输出. ( 语法: OUT {端⼝号│DX},累加器 )输⼊输出端⼝由⽴即⽅式指定时, 其范围是 0-255; 由寄存器 DX 指定时,其范围是 0-65535.3. ⽬的地址传送指令.LEA 装⼊有效地址.例: LEA DX,string ;把偏移地址存到DX.LDS 传送⽬标指针,把指针内容装⼊DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES 传送⽬标指针,把指针内容装⼊ES.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS 传送⽬标指针,把指针内容装⼊FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 传送⽬标指针,把指针内容装⼊GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 传送⽬标指针,把指针内容装⼊SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF 标志寄存器传送,把标志装⼊AH.SAHF 标志寄存器传送,把AH内容装⼊标志寄存器.PUSHF 标志⼊栈.POPF 标志出栈.PUSHD 32位标志⼊栈.POPD 32位标志出栈.⼆、算术运算指令───────────────────────────────────────ADD 加法.ADC 带进位加法.INC 加 1.AAA 加法的ASCII码调整.DAA 加法的⼗进制调整.SUB 减法.SBB 带借位减法.DEC 减 1.NEC 求反(以 0 减之).CMP ⽐较.(两操作数作减法,仅修改标志位,不回送结果).AAS 减法的ASCII码调整.DAS 减法的⼗进制调整.MUL ⽆符号乘法.IMUL 整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),AAM 乘法的ASCII码调整.DIV ⽆符号除法.IDIV 整数除法.以上两条,结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令───────────────────────────────────────AND 与运算.OR 或运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL 逻辑左移.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上⼋种移位指令,其移位次数可达255次.移位⼀次时, 可直接⽤操作码. 如 SHL AX,1.移位>1次时, 则由寄存器CL给出移位次数.如 MOV CL,04SHL AX,CL四、串指令─────────────────────────────────────── DS:SI 源串段寄存器 :源串变址.ES:DI ⽬标串段寄存器:⽬标串变址.CX 重复次数计数器.AL/AX 扫描值.D标志 0表⽰重复操作中SI和DI应⾃动增量; 1表⽰应⾃动减量. Z标志⽤来控制扫描或⽐较操作的结束.MOVS 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. ) CMPS 串⽐较.( CMPSB ⽐较字符. CMPSW ⽐较字. )SCAS 串扫描.把AL或AX的内容与⽬标串作⽐较,⽐较结果反映在标志位.LODS 装⼊串.把源串中的元素(字或字节)逐⼀装⼊AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )STOS 保存串.是LODS的逆过程.REP 当CX/ECX<>0时重复.REPE/REPZ 当ZF=1或⽐较结果相等,且CX/ECX<>0时重复.REPNE/REPNZ 当ZF=0或⽐较结果不相等,且CX/ECX<>0时重复.REPC 当CF=1且CX/ECX<>0时重复.REPNC 当CF=0且CX/ECX<>0时重复.五、程序转移指令─────────────────────────────────────── 1>⽆条件转移指令 (长转移)JMP ⽆条件转移指令CALL 过程调⽤RET/RETF过程返回.2>条件转移指令 (短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )JA/JNBE 不⼩于或不等于时转移.JAE/JNB ⼤于或等于转移.JB/JNAE ⼩于转移.JBE/JNA ⼩于或等于转移.以上四条,测试⽆符号整数运算的结果(标志C和Z).JG/JNLE ⼤于转移.JGE/JNL ⼤于或等于转移.JL/JNGE ⼩于转移.JLE/JNG ⼩于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z).JE/JZ 等于转移.JNE/JNZ 不等于时转移.JC 有进位时转移.JNC ⽆进位时转移.JNO 不溢出时转移.JNP/JPO 奇偶性为奇数时转移.JNS 符号位为 "0" 时转移.JO 溢出转移.JP/JPE 奇偶性为偶数时转移.JS 符号位为 "1" 时转移.3>循环控制指令(短转移)LOOP CX不为零时循环.LOOPE/LOOPZ CX不为零且标志Z=1时循环.LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.JCXZ CX为零时转移.JECXZ ECX为零时转移.4>中断指令INT 中断指令INTO 溢出中断IRET 中断返回5>处理器控制指令HLT 处理器暂停, 直到出现中断或复位信号才继续.WAIT 当芯⽚引线TEST为⾼电平时使CPU进⼊等待状态.ESC 转换到外处理器.LOCK 封锁总线.NOP 空操作.STC 置进位标志位.CLC 清进位标志位.CMC 进位标志取反.STD 置⽅向标志位.CLD 清⽅向标志位.STI 置中断允许位.CLI 清中断允许位.其实上⾯我们⽤到的也就主要有⼀些赋值指令和⼀些跳转指令⽽已,⼤部分我们⽬前是⽤不到的。