一直很惊叹,黑客是如何利用缓冲区溢出,达到入侵,破解系统的。就如IE浏览器上曾出现的图片格式病毒一样,这次对PSP的破解,正是借助一个TIFF格式图片完成的。由于对PSP有爱,决定去了解一下这里面都发生了什么事情。一个神奇的图片是如何破解系统的?

缓存区溢出,学名是memory overflow,实际上就是内存越界。其结果大致表现为,程序死机,系统崩溃。这本来是软件编写的bug,很常见。为什么这个现象能够被黑客们利用呢?

仔细翻查资料发现,崩溃(死机)的现象,是由于机器执行一个不正确的(非法的)指令造成的。原因可能有:(1)、无效的运算条件,比如除零错误;(2)、数据寻址错误,比如越界或数据受保护;(3)、指令寻址错误(类似2);(4)、指令无效或无法识别;(5)、……等等。黑客指出,并不是所有的缓冲区溢出都会引发崩溃(死机),同样并不是所有的崩溃(死机)都是由(3)、(4)情况引起的。大多数缓冲区溢出,对破解都没有帮助。只有缓冲区溢出导致(3)、(4)情况出现时,才对破解有价值(也有人专门研究其他情况下的破解,但是过程过于复杂,而且最终总会归结于3、4情况)。所以,我们来仔细分析一下,3、4情况下到底发生了什么?

(3)很好理解,在32位PC系统中,就是CS:IP的值错误导致越界。原因一般是由于在某些函数中,部分指令越界修改了内存栈,导致ret(或retf)指令在返回地址时得到了错误CS:IP。这些值一般存放于[ebp]-4(或[ebp]-8),而且很容被修改,访问任何一个local变量都可能越界修改到它。

(4)也不难理解,微机原理的机器语言中,详细描述了这个问题。简单来说,一条指令就是一个二进制数,所有CPU能支持的指令集合,就是一个二进制数集合。如果某个指令(二进制数)不在这个集合,就属于无效指令。如果在,当然就是有效指令啦。值得一提的是,这个指令的二进制数和数据的二进制数是同样的。就是说,在某些情况下,数据和指令是可以互相转换的。我们来看,汇编语言的指令mov ax,4C00h等于机器语言的二进制数B8004C,mov sp,16等于BC1000。而这个二进制数B8004C等于图片象素数据的RGB(184,0,76),BC1000等于RGB(188,16,0)。这样,指令与图像数据之间就建立了联系。

下面来了解,缓冲区溢出破解流程。

1、黑客要有个模拟环境,用以不断监测CPU各个寄存器的状态。PC系统中,就是自己的电脑。PSP上,就是已暴力破解(一般是改装硬件)旧型号的PSP1000。

2、不断尝试各种系统功能,查找崩溃(死机)现象。

3、分析机器崩溃(死机)时,CPU各个寄存器的状态,寻找有价值的线索(一个例子是,某个游戏要求输入玩家名称,但是当长度超过一定数量就会死机。某黑客发现,当他将名字输入为AAAAAAAA……(反复),死机时,某寄存器的值为A0A0A0A0,若为BBBBBBBB……(反复),则寄存器值为B0B0B0B0。由此确定输入数值对寄存器数值的影响。)。在这次破解中,是研究图片浏览器预读图片文件时的一个崩溃,并分析了文件中的数据值对寄存器的影响的关系。

4、研究从3中得到的寄存器属性,如果其为指令地址寄存器(相当于PC中的CS:IP,或ebx),那么恭喜。离胜利很接近了,这就是上述的(3)、(4)情况。如果不是,那么还要继续分析这个寄存器对某个指令地址寄存器的影响,找出之间联系。要是实在没有头绪,只能放弃这步,从2开始。

5、此时,已经能确定,如果某个输入数据为X,一定能使某个指令地址寄存器变成Y。大概是Y=f(X)。

6、编写一组目标指令(就是你想运行的程序,如hello world),将其转换成二进制数据,然后导入一个TIFF图片格式文件的某个特定区域中。并在文件中一个特地的位置放入X值。

7、重复崩溃的过程。当死机发生时,某个指令地址寄存器已经按照事先预想的变成Y,并且图片文件的那个特定区域数据已经导入了内存。而这个Y值则正好指向那段内存。

8、接下来,就是CPU按照黑客预想的方式,执行他们的程序。破解完成。

结束语:

黑客也是人,只不过是聪明一点并且勤奋很多的人。

PSP3000破解原理——缓冲区溢出漏洞随谈相关推荐

  1. 缓冲区溢出漏洞攻击原理

    转自互联网 0x00 缓冲区溢出概念 缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据覆盖在合法数据上, 理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符,但 ...

  2. 十二、缓冲区溢出漏洞原理

    缓冲区溢出漏洞是一种非常普遍且危险的漏洞,在各种操作系统.应用软件中广泛存在,在路由器中也不例外.利用缓冲区溢出攻击,可以造成程序运行失败.系统宕机.更为严重的是,利用缓冲区溢出攻击可以执行非授权指令 ...

  3. 缓冲区溢出漏洞攻击——Shellcode编写

    一.实验内容 利用一个程序漏洞,编写shellcode,达成效果:蹦出对话框,显示"You have been hacked!(by JWM)" 二.实验原理 因为输入了过长的字符 ...

  4. 分区起始位置参数溢出_IIS6.0缓冲区溢出漏洞深度分析(CVE-2017-7269)

    漏洞描述 开启WebDAV服务的IIS6.0存在缓冲区溢出漏洞可以任意代码执行,目前针对 Windows Server 2003 R2 可以稳定利用.在WebDAV服务的ScStoragePathFr ...

  5. 浅析缓冲区溢出漏洞的利用与Shellcode编写

    文章目录 前言 汇编语言 寄存器 内存堆栈 CPU指令 函数调用 缓冲区溢出 栈溢出原理 栈溢出攻击 ShellCode 总结 前言 缓冲区溢出(Buffer Overflow)是计算机安全领域内既经 ...

  6. 溢出漏洞,缓冲区溢出漏洞

    溢出漏洞是一种计算机程序的可更正性缺陷. 溢出漏洞的全名:缓冲区溢出漏洞 因为它是在程序执行的时候在缓冲区执行的错误代码,所以叫缓冲区溢出漏洞. 它一般是由于编成人员的疏忽造成的. 具体的讲,溢出漏洞 ...

  7. MS08-067远程代码执行漏洞(CVE-2008-4250) | Windows Server服务RPC请求缓冲区溢出漏洞复现

    MS08-067远程代码执行漏洞(CVE-2008-4250) | Windows Server服务RPC请求缓冲区溢出漏洞复现 文章目录 MS08-067远程代码执行漏洞(CVE-2008-4250 ...

  8. 验证本地缓冲区溢出漏洞攻击

    Info:本篇主要是为了验证本地缓冲区溢出,这是理解缓冲区溢出攻击的第一步,有了这一步,才能更深刻的理解到什么是缓冲区漏洞攻击,从而对以后的学习奠定一定的基础(注意:以下请在linux环境下实验) 基 ...

  9. 缓冲区溢出漏洞浅析(三)

    前面发了两篇都是关于C语言缓冲区溢出的文章,有的同行问,是否C#.Java语言有缓冲区溢出问题吗?答案是否定的.由于C#.Java语言需要虚拟机去执行,属于托管语言,虚拟机会自动检查边界.一般不会出现 ...

  10. kali+php+缓冲区溢出,CVE-2018-18708:Tenda路由器缓冲区溢出漏洞分析

    CVE-2018-18708:Tenda路由器缓冲区溢出漏洞分析 摘要:本文通过对一个ARM路由器缓冲区溢出漏洞的分析,实践逆向数据流跟踪的思路与方法. 假设读者:了解ARM指令集基础知识.了解栈溢出 ...

最新文章

  1. nano在CentOS上的安装和使用
  2. Python Twisted系列教程16:Twisted 进程守护
  3. ubuntu 12.04下搭建web服务器(MySQL+PHP+Apache) 教程
  4. 机器人学习--Turtelbot3学习--如何使用cartographer建图
  5. 因为权限缺乏导致SAP CRM AET字段删除失败
  6. npm --- 包的发布与导入
  7. Good Time 冲刺 六
  8. python第六十天-----RabbitMQ
  9. 使用 PlantUML 绘制时序图
  10. 在DOS下如何加载SATA光驱驱动
  11. 流氓软件清除,周期性出现流氓软件
  12. 质量名人简介——朱兰(Joseph H.Juran)(转载)
  13. PHP生成一寸照片代码,用PS制作1寸证件照方法介绍
  14. 量子计算机物理学,使用量子计算机来测试物理学的基本原理
  15. 【NLP】NO5:文本聚类
  16. Flink反压与背压
  17. 学生信息管理系统(头哥适用版)(c语言)
  18. .net 4.0 ValidateRequest=false 无效解决方法
  19. DDWRT上配置DDNS的方法
  20. 运放的选取标准和规则

热门文章

  1. php解析视频_原创更新:快手短视频无水印直连解析下载PHP前端版
  2. Platform SDK and SB2
  3. FA:萤火虫算法的改进及Python实现
  4. Log4J2 靶场漏洞复现
  5. 一招鲜——交换机配置mstp+vrrp实验
  6. 计算机视觉论文-2021-12-01
  7. 蓝牙数字密钥建立在过去实践的基础上, 以创造更安全的未来
  8. C语言 基础40道编程题库汇总
  9. 增强旋转不变LBP算法及其在图像检索中的应用
  10. fpgrowth算法c语言,关联分析:Apriori和FPgrowth算法原理