最专业的脚本、辅助学习平台,易语言培训/C++教程学习基地
设为首页
收藏本站
——> 学习是最好最高效的投资!
开启辅助访问
切换到宽版
登录
|
立即注册
搜索
搜索
热搜:
易语言
易语言
编程培训
大漠插件
模拟脚本
内存挂
本版
帖子
用户
首页
网站图文首页
论坛
BBS
培训课程
培训课程
常见问题
常见问题
vip会员介绍
会员详细说明
开通会员
学习路线
编程人生文章
关于我们
关于天野学院
免责声明
快捷导航
每日签到
天野学院自有课程
合作代售课程
vip会员介绍
代售课程收费说明
专题课程打包
论坛文章
天野学院
»
论坛
›
技术交流区
›
内存辅助技术交流
›
脱壳入门初级教学之认识壳
返回列表
查看:
5266
|
回复:
0
脱壳入门初级教学之认识壳
[复制链接]
admin
admin
当前离线
积分
7637369
窥视卡
雷达卡
TA的每日心情
奋斗
2025-3-3 12:12
发表于 2018-9-16 15:18:17
|
显示全部楼层
|
阅读模式
1. 什么是壳?
在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,就把这样的程序称为“壳”了。
推荐文档:
一切从“壳”开始
2. 壳的加载过程
这里谈的加壳工具不是WinZIP、WinRAR等数据压缩工具,而是谈压缩可执行文件EXE或DLL的工具。加壳过的EXE文件是可执行文件,它可以同正常的EXE文件一样执行。用户执行的实际上是外壳程序,这个外壳程序负责把用户原来的程序在内存中解压缩,并把控制权交还给解开后的真正程序,这一切工作都是在内存中运行的,整个过程对用户是透明的。
壳和病毒在某些方面比较类似,都需要比原程序代码更早的获得控制权。壳修改了原程序的执行文件的组织结构,从而能够比原程序的代码提前获得控制权,并且不会影响原程序的正常运行。
这里简单说说一般壳的装载过程。(参考了Ljtt以前写过的一篇文章)
1)获取壳自己所需要使用的API地址
如果用PE编辑工具查看加壳后的文件,会发现未加壳的文件和加壳后的文件的输入表不一样,加壳后的输入表一般所引入的DLL和API函数很少,甚至只有Kernel32.dll以及GetProcAddress这个API函数。
壳实际上还需要其他的API函数来完成它的工作,为了隐藏这些API,它一般只在壳的代码中用显式链接方式动态加载这些API函数:
3个脱壳相关的重要函数介绍
2)解密原程序的各个区块(Section)的数据
壳出于保护原程序代码和数据的目的,一般都会加密原程序文件的各个区块。在程序执行时外壳将会对这些区块数据解密,以让程序能正常运行。 壳一般按区块加密的,那么在解密时也按区块解密,并且把解密的区块数据按照区块的定义放在合适的内存位置。
如果加壳时用到了压缩技术,那么在解密之前还有一道工序,当然是解压缩。这也是一些壳的特色之一,比如说原来的程序文件未加壳时1~2M大小,加壳后反而只有几百K。
3)重定位
文件执行时将被映像到指定内存地址中,这个初始内存地址称为基地址(ImageBase)。当然这只是程序文件中声明的,程序运行时能够保证系统一定满足其要求吗?
对于EXE的程序文件来说,Windows系统会尽量满足。例如某EXE文件的基地址为0x400000,而运行时Windows系统提供给程序的基地址也同样是0x400000。在这种情况下就不需要进行地址“重定位”了。由于不需要对EXE文件进行“重定位”,所以加壳软件把原程序文件中用于保存重定位信息的区块干脆也删除了,这样使得加壳后的文件更加小巧。有些工具提供“Wipe Reloc”的功能,其实就是这个作用。
不过对于DLL的动态链接库文件来说,Windows系统没有办法保证每一次DLL运行时提供相同的基地址。这样“重定位”就很重要了,此时壳中也需要提供进行“重定位”的代码,否则原程序中的代码是无法正常运行起来的。从这点来说,加壳的DLL比加壳的EXE更难修正。
4)HOOK-API
程序文件中的输入表的作用是让Windows系统在程序运行时提供API的实际地址给程序使用。在程序的第一行代码执行之前,Windows系统就完成了这个工作。
壳一般都修改了原程序文件的输入表,然后自己模仿Windows系统的工作来填充输入表中相关的数据。在填充过程中,外壳就可填充HOOK-API的代码的地址,这样就可间接地获得程序的控制权。
5)跳转到程序原入口点(OEP)
从这个时候起壳就把控制权交还给原程序了,一般的壳在这里会有明显的一个“分界线”。但现在的猛壳己没这界限了,壳里有肉,肉里有壳。
3. 压缩引擎
各类加壳软件,其压缩算法一般不是自己实现的,大多是调用其他的压缩引擎。目前压缩引擎种类比较多,不同的压缩引擎有不同特点,如一些对图像压缩效果好,一些对数据压缩效果好。而加壳软件选择压缩引擎有一个特点,在保证压缩比的条件下,压缩速度慢些关系不是太大,但解压速度一定要快,这样加了壳的EXE文件运行起来速度才不会受太大的影响。例如下面几个压缩引擎就能满足这要求:
1. aPLib压缩引擎
http://www.ibsensoftware.com/
,这个库对于低于64K的文件压缩效果较好,速度较快。
2. JCALG1压缩引擎,相对于aPlib,JCALG1对于大文件效果好些。
3. LZMA压缩引擎
http://www.7-zip.org/zh-cn/sdk.html
,LZMA 是 7-Zip 程序中 7z 格式 的默认压缩算法,压缩率很高。
诛仙世界无坐标A星寻路
AI智能插件——离火插件
天野学院特征码提取工具V1.37下载
xx世界自动寻路并上架渔获
VC98Linker
文件关联修复
代理之星
易语言编程实现封包自动打怪
2020VC++大漠多线程框架(雷电模拟器演示)
大漠图色+封包多开框架源码(多进程多开及多线程多开两种)
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
返回列表
懒得打字嘛,点击右侧快捷回复
选择快捷回复
楼主发贴辛苦了,谢谢楼主分享!
楼主太厉害了!楼主,I*老*虎*U!
这个帖子不回对不起自己!
这东西我收了!谢谢楼主!
我看不错噢 谢谢楼主!
既然你诚信诚意的推荐了,那我就勉为其难的看看吧!
其实我一直觉得楼主的品味不错!呵呵!
感谢楼主的无私分享!
楼主,大恩不言谢了!
楼主,我太崇拜你了!
社区不能没有像楼主这样的人才啊!
【右侧内容,后台自定义】
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
关闭
站长推荐
/4
作为游戏工作室、脚本培训老师,讲讲五年来写脚本的经历
在游戏打金及由其延伸开的这个领域,我目前有两种身份,作为游戏打金者,我管理着一家三十多台e5的中小型游戏工作室,作为游戏脚本培训老师,我开办了一个脚本编程培训平台。
查看 »
部分学员成品源码脚本界面截图
部分学员成品源码脚本界面截图
查看 »
A星寻路讲解
模拟脚本A星寻路流程演示和代码实现 1、制作一个黑白地图 2、加载地图 3、计算路径,是否可通行 4、如果可通行,则计算下一步移动坐标 5、将下一步移动坐标转换为屏幕坐标,点击移动 6、移动中不断判断是否到达目的地,如果到达目的地,则寻路结束
查看 »
在线直播课报名
在线直播课,主要针对基础较差或者零基础学员,从最基础的编程知识开始讲解,一直讲到成品制作。为方便课后总结,当天在线课结束后提供当天视频教程及课堂源码。
查看 »
工作时间:
9:00-22:00
天野学院2群:648301976(建议加好友再发信息,有时候直接发消息可能收不到))
快速回复
返回顶部
返回列表