### psp-chickhen-源代码 #### 概述 本文档主要介绍了一个与PSP相关的项目——“psp-chickhen-源代码”。该项目基于libTIFF进行开发,并通过MaTiaZ编写的exploit及由Team Typhoon团队修改后的版本实现。此exploit利用了TIFF图像格式中的漏洞来执行自定义代码(Eggcode)。通过分析和注释源代码,可以了解到如何利用该漏洞以及如何在PSP平台上部署自定义应用程序或修改系统行为。 #### 主要知识点详解 ##### 1. **libTIFF Exploit** - **背景**:libTIFF是一个用于处理TIFF格式图片的库。由于其广泛应用于各种操作系统和设备中,因此成为了攻击者关注的目标之一。 - **目的**:利用libTIFF中存在的安全漏洞,注入并执行自定义代码(Eggcode)。 - **方法**: - 利用TIFF格式的特点,构造特定的恶意图片。 - 当这些图片被加载到使用libTIFF库的应用程序时,会触发预设的安全漏洞。 - 通过控制堆栈指针等手段,使得自定义代码得以执行。 ##### 2. **Eggcode** - **定义**:Eggcode是指在利用安全漏洞后所执行的一段代码。这段代码通常包含开发者希望在目标系统上运行的功能。 - **作用**:在本项目中,Eggcode的主要目的是展示如何利用libTIFF漏洞,并且可能包括一些简单的功能演示,如显示消息、修改系统设置等。 - **示例**:部分Eggcode的伪代码如下: ```plaintext # Iʼ00000000:a0<-0x0440000000000004:a1<-0x047a0000---- # Fillswithzeros thememorysegment between (a0) and (a1) 00000008:w(a0)<-00000000 c:a0<-a0+4 000000010:if a0<>a1 then pc<-pc-8 (ZERO_FILLING) ``` 这段代码表示将内存区间从`a0`到`a1`的部分清零。 ##### 3. **PSP平台上的应用** - **PSP简介**:PlayStation Portable(简称PSP)是索尼公司推出的一款掌上游戏机,具有强大的多媒体功能和游戏性能。 - **适用性**:由于PSP内置的操作系统存在一些已知的安全漏洞,因此利用这些漏洞可以在不破坏硬件的情况下扩展其功能。 - **具体实现**: - 利用libTIFF漏洞,可以通过PSP内置的浏览器或其他支持TIFF格式的应用程序来触发exploit。 - 成功触发后,Eggcode将会被执行,从而实现开发者预设的功能。 ##### 4. **代码分析** - **关键变量**: - `a0` 和 `a1`:分别表示要清零的内存区间的起始地址和结束地址。 - `s0`:用于保存当前程序计数器(PC)的值,以便后续引用。 - `v1`、`s2`、`s3`:分别表示模块的起始地址、未知地址和偏移量。 - **指令解析**: - `00000008:w(a0)<-00000000`:将地址为`a0`处的内存写入`0`。 - `c:a0<-a0+4`:将`a0`的值增加`4`。 - `000000010:if a0<>a1 then pc<-pc-8 (ZERO_FILLING)`:如果`a0`不等于`a1`,则程序计数器回退`8`个字节,继续清零操作。 ##### 5. **进一步研究** - **社区支持**:开发者可以通过访问网站`http://advancedpsp.freeforums.org`来获取更多关于项目的资料和支持。 - **论坛讨论**:在论坛中可以与其他开发者交流经验、解决问题,并分享最新的研究成果。 - **扩展阅读**:为了更深入地了解这一领域的知识,可以参考链接中的资源,例如`http://psp.cngba.com/psp3000/psp3000pj/2009052371384.shtml`提供了更多的技术细节和实现思路。 通过上述内容的介绍,我们不仅了解了如何利用libTIFF漏洞在PSP上执行自定义代码的基本原理,还学习到了如何进行代码分析和调试的方法。这对于那些对PSP黑客技术感兴趣或者希望扩展PSP功能的开发者来说是非常有价值的参考资料。
# libTIFF Exploit by MaTiaZ, modified by Team Typhoon
# Eggcode in TIFF, disassembled and commented
# Any new information or questions: http://advancedpsp.freeforums.org
-- CHICKHEN程序开始--
# I初始化
00000000: a0 <- 0x04400000
00000004: a1 <- 0x047a0000
-- 添零 --
# Fills with zeros the memory segment between (a0) and (a1)
00000008: w(a0) <- 0
0000000c: a0 <- a0 + 4
00000010: if a0 <> a1 then pc <- pc - 8 (ZERO_FILLING)
# Saves in s0 current pc value, which is EGG_START + 0x20
# This is done because we don't know at which memory address
- 粉丝: 0
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助