实现调用加壳的外壳中的子程序
来源:互联网 发布:linux hplib开发资料 编辑:程序博客网 时间:2024/06/05 19:26
加壳往往是实现对原PE的节数据加密、压缩,若能加壳的同时,让加壳后的程序调用壳中的某些子程序,那加壳强度大大增加。这样处理后,即使脱掉了壳,程序执行也肯定不正常,因为脱壳的同时也将这些子程序脱掉了!
怎样实现呢?作为探讨性的介绍,还是搞一个最基本的来说(假设现在您已经会写PE-exe、PE-dll等PE加壳程序):
我的实现是这样的:作为一个PE文件,多多少少程序中会有mov eax,1或mov eax,0的语句,就是从这里开刀,因为mov eax,xxxxxxxx这样的指令长度正好与Call xxxxxxxx指令的长度一样,处理起来相对简单。在加壳程序加壳时,查找这些语句统统换成:
call shellSub
//
shellSub实现如下:
shellSub()
{
mov eax,1 或 mov eax,0
}
当然,这里有个问题是怎样计算这个Call xxxxxxxx的xxxxxxxx,其实想一想也很简单,加壳时候我们已经计算出了外壳程序的入口RVA,只要以这个RVA为基准,就可以得到:(shellSub的RVA)-(mov eax,1的RVA)的差值,这个差值再减去5(Call的指令长度)就是xxxxxxxx。
这里仅仅抛砖引玉的介绍了最基本的方法,其实通过变化,可以对原程序的很多特定语句实现改成调用外壳中不同的sub,大大增加了外壳的保密强度。
这样处理后,可想而知,脱壳后的运行情况:Windows错误,某个地址不能为读或写。。呵呵,要的就是这个效果!!!
错误之处,恳请各位高手指正!
- 实现调用加壳的外壳中的子程序
- 调用子程序
- VC++的程序调用汇编的子程序
- 运行时动态调用子程序的例子
- SAP ABAP子程序SUBMIT调用的方法
- 子程序调用和中断的几个概念
- SAP ABAP子程序SUBMIT调用的方法
- 十八、使用call和ret指令实现子程序的调用和返回
- 冒泡排序_汇编语言的子程序调用与宏定义实现
- 【按键精灵】sub子程序、调用子程序
- python的subprocess:子程序调用(调用执行其他命令);获取子程序脚本当前路径问题
- 调用子程序来返回 某个字段在数组中的位置
- 在显存显示字符串(调用子程序实现)
- 基于计数排序子程序的基数排序实现
- KWIC:基于主程序/子程序风格的实现
- COBOL子程序调用
- COBOL子程序调用
- 子程序调用语句
- RTP如何打包H264数据 .
- 标准正态分布表
- Root用户以telnet登录Linux操作系统
- 移动手机消息推送机制
- C++的测试及问题的提出
- 实现调用加壳的外壳中的子程序
- 分析Android 根文件系统启动过程(init守护进程分析)
- vs调试连接库
- 求两个数组的交集、并集和差集算法分析与实现(转自http://blog.sina.com.cn/s/blog_616e189f0100mrdn.html)
- mpeg4网络传输 以及Livemedia 结构分析 .
- 订单号数据类型修改--删除和创建复制订阅项目(只需要操作指定字段作为主键的那些)
- 实际用户ID、有效用户ID、设置用户ID的区别
- live555 --RTSP SET_UP PLAY 执行流程分析 .
- shell 中的双括号