栈溢出笔记1.8 字符串问题
来源:互联网 发布:mac pro忘记登录密码 编辑:程序博客网 时间:2024/06/04 01:33
在前面编写Shellcode的过程中,我们用到的字符串要么直接使用DB定义,要么通过PUSH直接压入栈上(相当于定义局部变量),这样的话,如果一个Shellcode中的字符串多一点的话,仅字符串就要占用不少空间。而且,在1.7节中,我们在kernel32.dll的导出表中查找函数名称的时候,有一个字符串比较的过程,要将我们指定的函数名(如LoadLibraryA)与导出表中的函数名比较,这样一方面我们要保存需要查找的函数名,另一方面比较字符串占用了比较多的代码。还有,字符串问题会有前面的NULL字节的问题。
我们能不能把字符串去掉一些呢?常用的方法是Hash,即将一个字符串算出一个Hash值,然后进行比较,这样,我们就不需要保存待查找的函数名,而只保存一个Hash值,同样,比较的代码也会少一些。当然,效率可能会降低,因为每个字符串都需要算完整的Hash值,而直接比较的话,差别比较大的字符串马上就可以判断出来。但在Shellcode中,效率一般不是优先考虑的,优先考虑的是代码体积,如果能用十几个字节能解决问题,就不要用几十个字节,因为,有漏洞的程序留给我们可用的空间是有限的,每一个字节都是宝贵的。而且,代码量越大,隐蔽性越差,被人发现的概率越大。
那么需要找一个字符串Hash算法,这个算法至少要保证在一个dll中,所有的函数名算出来的Hash值是唯一的。最常用的是ROR13 Hash算法,这也是Metasploit中使用的算法,它的思想如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
算法来自:https://www.fireeye.com/blog/threat-research/2012/11/precalculated-string-hashes-reverse-engineering-shellcode.html
这里只记录这样一个方法,具体实现与上一节大同小异,不过是换掉函数compare_string而已,就不写代码了。
实现请看这篇文章:http://www.tophertimzen.com/blog/shellcodeTechniquesCPP/
- 栈溢出笔记1.8 字符串问题
- 栈溢出笔记1.8 字符串问题
- 栈溢出笔记1.6 地址问题(1)
- 栈溢出笔记1.7 地址问题(2)
- 栈溢出笔记1.6 地址问题(1)
- 栈溢出笔记1.7 地址问题(2)
- 关于栈溢出笔记
- 一个栈溢出问题
- 栈溢出shellcode字符串push
- 栈溢出笔记(1)
- 栈溢出笔记1.11 SafeSEH
- 栈溢出笔记1.11 SafeSEH
- 关于函数栈溢出问题
- 服务器栈溢出的问题
- java 字符串转化为整数溢出问题处理
- 栈溢出笔记1.10 基于SEH的栈溢出
- 栈溢出笔记1.10 基于SEH的栈溢出
- 溢出问题
- 正则
- 栈溢出笔记1.7 地址问题(2)
- 《Very Deep Convolutional Networks for Large-Scale Image Recogition》
- PAT 1103. Integer Factorization (30) DFS+树状数组。还是人家的代码好
- ssm 框架整合学习记录
- 栈溢出笔记1.8 字符串问题
- EBS杂项出库事务处理
- Android-签到日历
- 如何判断整型算数运算是否溢出
- 浮点数部分输出方面
- 使用ideaIU创建web工程图文说明
- (算法分析Week1)Majority Element[Easy]
- 栈溢出笔记1.9 认识SEH
- 输入挂 fread