加壳与脱壳

合集下载

基于流的加壳与脱壳技术实现

基于流的加壳与脱壳技术实现

F I n — ej Yo g se g Hu a E g d ,u n —hn , Mi To ( n f gCo Do g n mmec l hc eh i l ne o L Sia 4 0 1 Chn) e ri ieT c nc t f aVe l a Ce r DF , h n4 20 , ia y
之后 , 附加 代 码 首 先 执 行 , 查 密 码 是 否 正 确 , 果 正 确 则 转 入 原 来 的 程 序 中执 行 。否 则 , 检 如 则退 出程 序 。
的 基 类 , 能 直 接 生 成 对 象 。在 具 体 的 应 用 中, 要 使 用 它 的 子 孙 类 :FlSr m 文件 流;Sr g t a : 符 串流 ;Me oyt a 内 不 主 T i ta e e T tnSr m 字 i e T m rS em r 存 流 ;R sucSra 资源 文件 流等 。本 文 就 是 利 用 内存 流 对 应 用 程 序 进 行 加 壳脱 壳 的 。T m rSra 类 的 有 关方 法 主要 有 : T eo ret m e Me oyt m e R a 法 实 现 将 数 据 从 内存 流 中读 出 ; ie 法 实 现 将 数 据 写 入 内存 流 中 ;ek方 法 从 内 存 流 中读 取 指 针 的移 动 ; oy rm ed方 Wr 方 t Se C pFo
软 件 加 密 技 术 是 软 件 保 护 的 重 要 手 段 。这 些 加 密 措 施 给 非 法 拷 贝 或非 法 使 用 造 成 一 定 的 障 碍 。 某 种 程 度 上 增 加 了 破解 难 度 。 在 因现 在 互 联 网 的普 及 , 种 破 解 软 件 可 以从 网上 轻 易 下 载 , 增 加 破 解 难 度 , 写 自己 的加 密程 序是 很 有 必要 的 。 现 在 加 密 程 序 的 各 为 编 重 要 手 段 之 一 就 是 对 程 序 加 壳 。 果 加 壳 程 序 使 用 压 缩 算 法 还 可 以 减少 程序 的体 积 。 止 破解 的人 非 法 修 改 程 序 。 文 介 绍 一 种 利 如 防 本 用 流 技 术 的加 壳 脱 壳 方 法 来 实 现 对 软 件 的 加 密 保 护 。

《计算机信息安全技术》课后习题及参考答案

《计算机信息安全技术》课后习题及参考答案

第1章计算机信息安全概述习题参考答案1. 对计算机信息安全造成威胁的主要因素有哪些?答:影响计算机信息安全的因素有很多,主要有自然威胁和人为威胁两种。

自然威胁包括:自然灾害、恶劣的场地环境、物理损坏、设备故障、电磁辐射和电磁干扰等。

人为威胁包括:无意威胁、有意威胁。

自然威胁的共同特点是突发性、自然性、非针对性。

这类不安全因素不仅对计算机信息安全造成威胁,而且严重威胁着整个计算机系统的安全,因为物理上的破坏很容易毁灭整个计算机信息管理系统以及网络系统。

人为恶意攻击有明显的企图,其危害性相当大,给信息安全、系统安全带来了巨大的威胁。

人为恶意攻击能得逞的原因是计算机系统本身有安全缺陷,如通信链路的缺陷、电磁辐射的缺陷、引进技术的缺陷、软件漏洞、网络服务的漏洞等。

2. 计算机信息安全的特性有哪些?答:信息安全的特性有:⑴完整性完整性是指信息在存储或传输的过程中保持未经授权不能改变的特性,即对抗主动攻击,保证数据的一致性,防止数据被非法用户修改和破坏。

⑵可用性可用性是指信息可被授权者访问并按需求使用的特性,即保证合法用户对信息和资源的使用不会被不合理地拒绝。

对可用性的攻击就是阻断信息的合理使用。

⑶保密性保密性是指信息不被泄露给未经授权者的特性,即对抗被动攻击,以保证机密信息不会泄露给非法用户或供其使用。

⑷可控性可控性是指对信息的传播及内容具有控制能力的特性。

授权机构可以随时控制信息的机密性,能够对信息实施安全监控。

⑸不可否认性不可否认性也称为不可抵赖性,即所有参与者都不可能否认或抵赖曾经完成的操作和承诺。

发送方不能否认已发送的信息,接收方也不能否认已收到的信息。

3. 计算机信息安全的对策有哪些?答:要全面地应对计算机信息安全问题,建立一个立体的计算机信息安全保障体系,一般主要从三个层面来做工作,那就是技术、管理、人员。

(1)技术保障指运用一系列技术层面的措施来保障信息系统的安全运营,检测、预防、应对信息安全问题。

对DLL脱壳的一点见解-电脑资料

对DLL脱壳的一点见解-电脑资料

对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标准加壳的程序的脱壳和引入表修复方案

Armadillo标准加壳的程序的脱壳和引入表修复方案

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加壳是指在二进制的应用程序中植入一段代码,对原始二进制原文进行加密、隐藏、混淆;加壳是应用加密的一种手法,应用加壳后,在运行的时候会优先取得程序的控制权,做一些额外的安全工作。

APP加壳的作用加壳的程序可以有效阻止对程序的反汇编分析,以达到它不可告人的目的,这种技术也常用来保护软件版权,防止被软件破解。

通俗的解释,加壳可以有效防止APP被植入恶意代码导致的程序被破解、被山寨的风险,同时保护用户隐私信息和数据泄露等。

如今,安卓apk文件很容易暴露出来,这也是安卓本身的特性。

安卓危险的原因:第一个原因就是签名机制问题,安卓上没有中央的签名机制,签名的原因造成现在安卓这个市场上二次打包的现象非常严重。

第二个原因是技术问题,安卓采用JA VA语言开发的,源码很容易泄露。

第三个原因就是安卓的开放性,苹果控制了签名,使下载程序的来源变得单一,而在安卓上你可以在任何地方下载应用程序,其实安卓不安全的真正原因就是这个因素造成的。

在这种情况下,我们还会经常碰到一些问题,现在会暴露一些服务器的漏洞。

为了支持手机的客户端,新开发了一套接口,而这套接口没有经过调试,黑客仿编你的客户端,通过未调试的接口就会发现你后台有一些相关的漏洞,从而通过这种方式进行一些入侵。

作为开发者或开发商,是应用程序产生的源头。

建议将安全融入到应用开发生命周期当中去,在开发阶段进行安全测试和检测,及时发现应用程序缺陷和安全漏洞,减少不必要的安全风险;在应用发布阶段进行应用安全加固,增加应用安全强度,防止应用被破解和二次打包;在运营阶段进行渠道监测,及时发现盗版应用,保障自身合法权益不受恶意损害。

APP加壳的利弊通过使用APP加壳技术,开发者可以有效保护自己的核心代码算法,提高破解、盗版程序和二次打包的难度;技术层面,APP加壳可以缓解代码注入、动态调试、内存注入攻击,加强了APP的安全;目前主流的移动应用安全服务商都将APP加壳作为主要的应用加密手段,辅以其他保护APP的手段。

软件加壳脱壳技术教程

软件加壳脱壳技术教程
附加一点内容
一.壳的概念
作者编好软件后,编译成exe可执行文件
1.有一些版权信息需要保护起来,不想让别人
随便改动,如作者的姓名等
2.需要把程序搞的小一点,从而方便使用
于是,需要用到一些软件,他们能将exe可执行文件压缩,
实现上述两个功能,这些软件称为加壳软件或压缩软件.
它不同于一般的winzip,winrar等压缩软件.
好,我们先从一个基本的Upx壳入手。
本地下载
首先必须的工具要准备好,
查壳工具
Peid0.91,Fileinfo,Language2000,File Scanner等。
查入口工具。
Peid0.91首推,冲击波(9X)系统专用,Asloader,自己的感觉,程序跨段跳跃点。
脱壳工具。
Ollydbg首选,LoadPe,PEditor,ProcDump等,够用了。
傻瓜式软件,运行后选取待侦测壳的软件即可(open)
脱壳教程2:手动脱壳入门第一篇
【使用工具】Ollydbg1.10b,ImportREC1.6F
【破解平台】Win2000/XP
前言,作者写这篇文章只是举个例子,希望读者能够举一反三,看清思路.
本论坛中破解高手很多,不会手动脱壳者人数仍然不少。有人会说,我有Unaspack,Caspr,ProcDump等众多脱壳工具,不会手动脱壳用工具脱就可以了。但有部分壳如Asprotect1.23Rc4,本论坛高手仙剑(将自己加密壳伪装成C++),有漏洞,用Peid查壳,Ep区段写有Xj,用Od载入提示有壳,更有甚一些软件如大嘴日语加了四层壳,这些都是工具无法脱壳的。随着加密壳的不断出现,基本壳都不会,高版本的加密壳以后脱壳盲根本无从入手。所以,手动脱壳Crack必修。

壳加壳脱壳介绍壳的一些基本常识

壳加壳脱壳介绍壳的一些基本常识

壳加壳脱壳介绍壳的一些基本常识壳(Shell)是计算机操作系统的一种用户接口,它提供了用户与操作系统内核之间的交互方式。

它是用户与操作系统之间的纽带,使用户能够通过命令、脚本等方式与操作系统进行交互。

加壳(Packaging)指的是给软件程序添加额外的代码,以便增加安全性、保护程序免受非法分析和篡改。

加壳技术可以对软件进行加密,防止逆向工程和盗版,同时还可以实现防病毒和反调试的功能。

脱壳(Unpacking)是指将被加壳的软件程序恢复为原始的可执行文件。

通常情况下,脱壳是为了分析软件的结构和行为,或者绕过加壳的保护机制进行非法操作。

下面是一些基本的壳常识:1. 壳的种类:常见的壳包括命令行壳和图形用户界面壳。

命令行壳(例如Bash、PowerShell等)提供了一个命令行界面,用户可以通过输入命令来与操作系统进行交互。

图形用户界面壳(例如Windows的资源管理器、macOS的Finder等)提供了可视化的界面,用户可以通过鼠标点击和拖放来进行操作。

2.壳的功能:壳作为用户接口,提供了很多功能,例如操作文件和文件夹、运行程序、管理系统设置等。

它还可以提供脚本语言的支持,使用户可以通过编写脚本来自动化任务和定制操作。

3.壳的配置和定制:壳通常可以进行配置和定制,用户可以根据自己的需求设置壳的外观和行为。

例如,可以更改壳的主题、布局和颜色,添加自定义菜单和工具栏,设置快捷键等。

4. 壳脚本:壳脚本是一种用于定制壳行为的脚本语言。

例如,在Bash中,用户可以编写Shell脚本来自动执行一系列命令和操作。

壳脚本可以用于自动化任务、批处理、系统管理等方面。

5.加壳的原因和目的:加壳可以增加软件的安全性,保护知识产权和商业机密。

它可以防止软件被逆向工程,避免黑客和破解者篡改程序逻辑或者盗版软件。

加壳还可以实现软件的防病毒功能,使病毒难以对软件进行分析和感染。

6.加壳的原理和技术:加壳通常通过改变软件的结构和代码来实现。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
加壳与脱壳

1.什么是壳? 2.加壳与脱壳 3.加壳的加载过程 4.脱壳的实现过程
什么是壳?
在一些计算机软件里也有一段专门负 责保护软件不被非法修改或反编译的程序。 它们一般都是先于程序运行,拿到控制权, 然后完成它们保护软件的任务。由于这段 程序和自然界的壳在功能上有很多相同的 地方,基于命名的规则,就把这样的程序 称为“壳”了。
壳的加载过程
3.重定位 文件执行时将被映像到指定内存地址 中,这个初始内存地址成为基地址。 对于EXE的程序文件来说,Windows 系统会尽量满足,所以加壳软件把源程序 文件中用于保存重定位信息的区块干脆也 删除了。
壳的加载过程
4.HOOK-API 程序文件中的输入表的作用是让 Windows系统在程序运行时提供API的实际 地址给程序使用。在程序的第一行代码执 行之前,Windows系统就完成了这个工作。 壳一般都修改了原程序文件的输入表, 然后自己模仿Windows系统的工作来填充 输入表中相关的数据。
什么是壳?
壳的加载过程
1.获取壳自己所需要使用的API地址 如果用PE编辑工具查看加壳后的文件,会发 现未加壳的文件和加壳后的文件的输入表不一样, 加壳后的输入表一般所引入的DLL和API函数很少, 甚至只有Kernel32.dll以及GetProcAddress这个 API函数。 壳实际上还需要其他的API函数来完成它的 工作,为了隐藏这些API,它一般只在壳的代码 中用显式链接方式动态加载这些API函数
脱壳
一般的压缩壳,都有专用的脱壳机,或者 用万能脱壳机也可以,如:procdump。而 加密壳一般很少有脱壳机,必须手动脱 壳手动脱壳----三步 1.查找程序的真正入口点(OEP) 2.抓取内存映像文件 3.输入表重建
注:OEP是Original Entry Point缩写
查找OEP
1.根据跨段指令寻找OEP 2.根据堆栈平衡原理找OEP 3.根据变异语言特点找OEP 4.用内存断点找OEP
注:使用ImportREC实现
谢谢!!!
壳的加载过程
5.跳转到程序原入口点(OEP) 从这个时候起壳就把控制权交还给原 程序了,一般的壳在这里会有明显的一个 “分界线”。但现在的猛壳己没这界限了, 壳里有肉,肉里有壳。
常见的加壳工具
1.压缩壳 (主要目的是减小程序体积) ASPack UPX 等等 2.加密壳 ASProtect Xtreme-Protector 等等
注:使用OllyIce实现
抓取内存映像文件
外壳程序解压还原后就会跳到OEP处执 行,此时内存映像文件是己解压的程序。 这时就可抓取内存映像文件了(该过程称 为Dump)。
注系统交道的途 径是API,而API的地址已经替换成了壳的 HOOK-API的地址,那程序每一次与系统打交道, 都会让壳的代码获得一次控制权。重建输入表的 关键是获得没加密的IAT ,一般的做法是跟踪加 壳程序对IAT处理过程,修改相关指令,不让外 壳加密IAT。
壳的加载过程
2.解密原程序的各个区块(Section)的数据 壳出于保护原程序代码和数据的目的, 一般都会加密原程序文件的各个区块。在 程序执行时外壳将会对这些区块数据解密, 以让程序能正常运行。 壳一般按区块加密 的,那么在解密时也按区块解密,并且把 解密的区块数据按照区块的定义放在合适 的内存位置。
相关文档
最新文档