① psp的破解历程
启蒙时代:
2005-5-7 PSP游戏光盘已被导出
2005-5-7 HELLO WORLD 1.0登场
2005-5-9 Saturn Expedition Committee发布了一个可以DUMP 1.0版本的PSP FIRMWARE的程序
2005-5-12 PSP上GB模拟器出现
2005-6-13 MD模拟器将PSP的运行频率提高到了333Mhz
UMD引导时代:
2005-6-22 KXploit 1.5发布,1.5破解
2005-7-4 UMD LOADER出现
2005-7-20 HOOK BOOT Ver.0.10 发布(从此我们知道了PSP也能免费玩)
2005-7-26 HOOK BOOT Ver.0.90 放出
2005-7-27 PSP2.0升级
2005-8-4 Fastloader登场(好多游戏的前提只是一张UMD)
2005-8-12 Fastloader V0.6b
2005-8-24 Fastloader 0.7 版放出
2005-9-16DEVHOOK0.22发布
黄金双引导时代(其他破解信息不多,说明了黄金双引导的王道):
2005-9-16 DEVHOOK0.22+DE0.8最强双引导形成(一个时代的开始)
2005-9-28 2.0降级程序发布
MPH引导时代:
2005-12-13 Fanjita放出PSP2.01/2.5的HelloWorld程序(即后来GTA LOADER)
2005-12-15 PMP登场
2005-12-26 Eboot Loader 0.9版放出(2.00)
2006-1-29 Fanjita发布了2.0 eLoader(GTA LOADER) for v2.00、v2.01和v2.50 PSP
2006-1-30 Fanjita发布了2.0 eLoader(GTA LOADER) for v2.60 PSP
2006-2-23 MPH GTA LOADER发布,GTA告破
2006-2-24 MPH GAME LOADER发布,2.0游戏告破
2006-2-25 MPH Game Loader正式版,解除10分钟限制
MPH黄金双引导时代:
2006-3-3 无需UMD玩2.0破解游戏 MPH+devhook gl登场
2006-3-5 MPH Game Loader1.10可运行2.0UMD
DAXZISO时代:
2006-3-6 RUNUMD出世
2006-3-25 DAXZISO 0.4 发布
2006-4-6 DAXZISO升级0.5版
2006-4-11 RUNUMD+UE8.0登场,怪物猎人P告破
2006-4-12 DAXZISO 0.51版正式支持怪物猎人压缩
2006-4-22 DAXZISO 0.55版
2006-4-25 PSP2.7版本升级文件正式放出下载2006-4-27 DEVHOOK放出 0.3 alpha版(这在当时人眼里是最废的引导器,谁知...)
2006-5-6 UMD EMULATOR源代码被公布
2006-5-7 HELLO WORLD一周年
2006-5-6 DEVHOOK 0.32a发布(很烂的引导器,这次的意义主要在于CSO格式的发布,不过DEVHOOK离神坛已经不远了)
2006-5-8 Snes9xTYL 0.4发布(我个人喜欢的模拟器)
2006-5-15 DAXZISO升级0.61版
2006-5-15 Snes9xTYL 升级 0.42版
2006-5-19 DAXZISO升级0.62版(至此,DAXZISO的传奇就结束了,在此感谢Dark_AleX在DAXZISO方面带给我们的欢乐)
2006-5-27 首个PSP直读芯片Undiluted Platinum公布!
2006-5-30 DEVHOOK最新开发情报发布(一些并不起眼的情报,可就在一周之后...)
2006-6-1 PSP升级版本至2.71
DEVHOOK时代:
2006-6-6 DEVHOOK 0.41版发布(想一下吧,SONY有多恨BOOSTER)
2006-6-9 DEVHOOK 0.41A版发布
2006-6-13 DEVHOOK 0.41B版发布
2006-6-14 DEVHOOK 0.41C版发布
2006-6-15 DEVHOOK 0.41D版发布
2006-6-28 2.71固件可提取部分文件
2006-6-29 Dark_AleX发布2.5和2.6降级工具
2006-7-5 DEVHOOK 0.42推出
2006-7-6 Dark_AleX发布工具1.50降回1.00
2006-7-10 2.60/2.71固件解密成功
2006-7-11 Devhook0.43版推出(可模拟2.60)2006-7-14 Devhook0.44版推出(可模拟2.71)
2006-7-15 Dark_Alex制作自定固件 The proof of concept
2006-7-15 PSPVBA:GBA模拟器v1.1.0
2006-7-20 Devhook0.45版推出
2006-7-30 Devhook0.46版推出(可刷机)
2006-7-27 PSP升级固件2.80版本正式发布(很可惜,这次DEVHOOK没跟上,且作者宣布退出devhook的制作)
2006-7-31 GBA模拟器PSPVBA 1.2.3
2006-8-23 GPSP发布,宣告GBA模拟器完美
2006-8-28 Fanjita制作PSP2.8自制程序Hello World运行成功
2006-9-1 Eloader for 2.71公开
2006-9-2 2.71版PSP成功降级
2006-9-6 Eloader 0.9.8发布 FOR 2.60
2006-9-11 全速GBA模拟器最新版本GPSP 0.7公布
2006-9-22 Eloader 0.9.9发布 FOR 2.70/2.71
2006-9-23 Dark_AleX公布Homebrew Enabler for 2.71(免Eloader运行自制程序)
2006-9-24 Dark_AleX正式公布了Devhook Launcher Port to v2.71(意味着2.71告破)
2006-9-25 Dark_AleX公布HEN FOR 2.71B2,成功率99%
2006-9-30 Dark_AleX公布Homebrew enabler vC,可运行1.5的自制程序
2.71SE时代:
2006-10-8 Dark_AleX声明2.71修改版固件将可直接运行自制软件,定名2.71SE
2006-10-9 2.71SE 正式发布
2006-10-25 2.71SE-B 正式发布
2006-10-28 实现免盘引导,2.71SE-B2 正式发布
2006-11-4 TA-086神秘主板登场
2006-11-9 2.71SE-B3 正式发布,摄相头破解
2006-11-19 DARK_ALEK放话,2.8X可以被模拟
2006-11-21 PSP 2.80 固件FLASH 0已经能够写入
2006-11-21 PSP固件3.00系统SCE官方提供下载
2006-11-22 PSP固件3.00系统被导出
2006-11-22 PSP固件3.01系统SCE官方提供下载
2006-11-23 2.71/2.80混合系统发布
2006-11-25 Booster宣布回归破解阵容
2006-11-27 2.71SE-C 正式发布
2006-11-29 2.71SE与3.00混合版发布
未知的时代( 3.XX 时代来临):
2006-11-30 Devhook0.50发布,2.8X告破(虽然还不成熟,但我们有理由相信,它就和Devhook0.3一样,是一个传奇的开始)
2007-1-27 PSP全开放!3.03降级完全傻瓜包教程
2007-1-30 PSP如何对破解,3.10新版推出。但不久传来3.10版本已经全被攻克的消息,索尼表明不会放弃,要继续推出3.11版
2007-7-24 索尼(SCE)官方发布PSP 3.52系统固件程序。
2007-7-26 Team M33 正式发布自制系统3.52 M33。
2007-7-30 Team M33 正式发布系统升级补丁3.52 M33-2(系统界面中文化)。
2007-8-20 Team M33 正式发布系统升级补丁3.52 M33-3。
2007-8-21 Team M33 正式发布系统升级补丁3.52 M33-4。
2007-8-23 Team C+D 正式发布通用反变砖/降级程序潘多拉的电池——神奇电池发布。
2007-9-11 Team M33 正式发布新版PSP-2000第一款自制系统3.60 M33。
2007-9-11 索尼(SCE)官方发布PSP 3.70版系统固件(同时支持PSP-1000和2000)。
2007-9-20 日版PSP2000普通版发售。
接近完美的时代:
2007-9-24 Team M33 正式发布自制系统3.71 M33
2007-10-05 神奇电池V3(Cemetery v3)发布,支持薄机屏幕显示
2007-10-29 神奇电池制作程序加入对新版1200MAH电池的支持(之前只能用厚电池)。
2007-10-30 索尼(SCE)官方发布PSP 3.72系统固件程序
2007-11-01 Team M33 正式发布系统升级补丁3.71M33-3。
2007-11-29 索尼再次升级PSP的系统版本,新版本号为3.73 且升级区域仅为日该地区。
2007-12-13 Dark_Alex正式放出3.71M33-4的升级补丁 并发布3.71M33-4更新内容
2007-12-18 索尼在日本正式发布PSP 3.80版固件系统
2008-1-14 发布PSP 3.80M33-2自制固件
2008-1-28 PSP 3.90固件放出
2008-2-1 Dark_AleX放出PSP 3.90 M33自制系统
2008-2-4 更新的3.90 版发布 修正若干BUG
2008-2-14 Dark Alex发布3.90M33-2自制系统
2008-3-31 Dark Alex发布的自制固件系统的最新版本3.90M33-3
2008-6-21 SONY发布3.92 后续改进系统有3.95,其实并无区别
2008-10-15 SONY正式发售PSP-3000,搭载系统为4.21,美版为4.20
2008-11-24 SONY发布5.00系统
2008-11-26 Dark-Alex发布5.00 M33
2008-11-30 Dark-alex发布5.00 M33-2
2008-12-3 Dark-alex发布 5.00 M33-4
2008-12-27 Dark-Alex 发布5.00 M33-6
破解新时代
2009-4-20 SONY发布5.50官方系统
2009-5-7 DAVEE发布Davee正式放出HEN for PSP3000 破解程序
2009-5-8 DAVEE发布Davee正式放出 HEN修正版 for PSP3000 和PSP2000 TA88V3
2009-5-26 PSP2000所有版本主机破解 Xenogears 和 Becus25 发布CFW Enabler v1.0 for ChickHEN,v3主机可以运行ISO
2009-6-6 5.03 GEN-A(Full)发布3K主机可以运行ISO
2009-6-8 Xenogears发布CFWEnable3.01 3k可以运行ISO
2009-6-11 SONY发布5.51官方系统
2009-6-13 5.50GEN-A(Full) 发布 支持多层文件夹(仅限1000与2000非v3)
2009-6-18 5.50U3R 发布 支持加速读棒
2009-7-2 5.50GEN-B(full)发布 (须5.50GEN-A系统)
2009-8-28 最著名PSP破解网站Dark-AleX宣布关闭(管理员称只是出于论坛维护成本考虑)
2009-9-6 5.50GEN-B2(full)发布 (须5.50GEN-B系统)
2009-9-10 SONY发布6.00官方系统(此前SONY已在多个游戏的UMD中加入了5.55官方系统,且这些游戏的ISO大部分无法在已有的自制系统运行)
2009-9-30 PSPGEN论坛的著名开发者Yoshihiro发布GAME DECRYPTER,能够解密需5.55或6.00系统的游戏镜像的EBOOT.BIN文件,使得大部分需要5.55系统要求的游戏镜像得以在5.50GEN或更低版本的自制系统中运行
2009-10-1 GAME DECRYPTER v2发布,能够解密更多的高版本游戏的EBOOT.BIN
2009-10-1 SONY发布6.10官方系统
2009-10-1 PSP Go(N1000)正式发售(港版、美版、欧版)
2009-10-8 GAME DECRYPTER v3发布 进一步降低游戏的版本需求,使破解后的游戏均得以运行于5.03MHU或5.03GEN
2009-10-9 GAME DECRYPTER v4发布 能够解密6.10版本需求的游戏
2009-10-22 5.50GEN-D(仅支持1K和非v3的2K)发布,可直接运行未破解的5.55-6.xx版本要求的游戏(ISO/CSO及UMD)
2009-10-22 5.50GEN-D2(需5.50GEN-D)发布
2009-11-1 PSPGo日版发售
2009-11-2 5.03GEN-B发布 3K,V3可直接运行未解密的5.55-6.XX版本要求的游戏
2009-11-19 SONY发布6.20官方系统
2009-12-16 GEN小组的最新自制系统5.50GEN-D3(PSP1000/2000非v3适用)/5.03GEN-C(PSP3000/2000v3适用)正式发布
2009-12-25 Date公司推出全世界第一款能够在索尼官方系统中运行的程序 Action Replay PSP
2010-01-07 PSPGEN主创人员将隐退 原因是成果被盗用
2010-01-09 《王国之心:梦中降生》发售,无法在任何现有系统上运行(解密后也不行,6.20悲剧的开始)
2010-02-04《噬神者》发售,同样无法在任何现有系统上运行
2010-03-29 6.20系统成功运行Hello World教程放出
2010-04-15 基于试玩游戏《啪嗒砰2》存档漏洞的E-Loader发布,5.03以上官方系统可运行部分自制软件。
2010-04-29 PSP上首个满分大作《合金装备:和平行者》发售,同样悲剧
2010-04-29 国人liquidzigong破解了 《合金装备 和平行者》为破解6.20游戏展开了序幕。
2010-05-12liquidzigong破解了大作 《王国之心 梦中降生》(需用插件)。
2010-05-15利用破解王国之心所制插件,liquidzigong破解了大作“噬神者”。并且所用的插件可以破解大部分6.20的游戏。可以说liquidzigong破解了6.20游戏。
2010-06-17liquidzigong发布了PSP3000独占的CFW-5.03P版本,可以直接玩6.20游戏!
2010-06-29 6.30官方系统正式发布《啪嗒嘭2》存档漏洞被堵
2010-07-29 6.31官方系统正式发布提高Digital Comics软件运行稳定性(可能是为了封堵Digital Comics可能存在的漏洞)
2010-11-28liquidzigong宣布退出PSP破解活动。
2010-12-24 GEN小组发布了Total_Noob的6.20官方系统破解程序TN-A。
2010-12-25 liguidzigong放出基于TN-A的ISO引导程序Prometheus_ISO_Loader。从此,6.xx系统(包括PSPGO)可以运行ISO
2010-12-31 6.20TN-B发布,部分PSP3000可以通过TN-B降级到5.03系统。
2011-01-17 自制软件签名工具放出。从此,官方系统可直接运行自制软件(包括自制系统刷写程序)
2011-03-08 国人忠贞炙烈之炎发布 6.35/6.31 PRO-B2。破解接近完美。
2011-04-20 国人忠贞炙烈之炎更新 6.20/6.31 /6.35 PRO至B5,大幅度提高了其兼容性并修复了新的引导模式Inferno。
2011-06-20 国人忠贞炙烈之炎更新 6.20/6.35 /6.39 PRO至B7,添加记忆棒加速功能。记忆棒加速功能可以将ISO游戏读盘速度提高25%~50%。
2011-07-08 国人忠贞炙烈之炎更新 6.20/6.35 /6.39 PRO至B8,重构部分Vshctrl代码,改进系统兼容型和操作流畅度。添加对新开发的Popsloader for PRO的支持,完善PS1模拟功能。
2011-08-106.60官方系统正式发布
2011-08-25国人忠贞炙烈之炎更新 6.20/6.35 /6.39/6.60PRO至B9,修复积累的大量BUG和重构代码,支持PSPGO UMD视频挂载,修复了Inferno/np9660模式下待机时的出现的光驱噪声。更新解密部件,6.20/6.3x版本将支持未来的6.60新增PRX加密类型,为6.20/6.3x添加了6.60新增函数,兼容未来的6.60游戏存档,新增6.60 PRO-B9,支持6.60固件(理论上支持包括11g的所有PSP硬件版本)。新增CPU频率166/83,新增对打过KHBBS_patch的ISO的兼容性支持。破解日臻完美。
2011-10-30 PRO至B10,修复了ISOCache的无限循环、不支持>2G的ISO,和运行NFS碳化时赛道消失问题;ISOCache默认缓冲个数改为256;修复了PSPGo下从ISO VIDEO MOUNT模式启动游戏;修复了启动Recovery menu时极低几率死机问题,以及Recovery menu中频率显示中无333/166的问题;修复了不能正确处理ISO文件名问题(thx to popsdeco);修复了从USB挂载UMD时ISO大小问题(thx to neur0ner);优化了补丁应用顺序;修复了解密代码中的问题;减小了FastRecovery的文件大小,加快了恢复速度(thx to neur0ner);支持Satelite和Recovery menu的翻译文件,并可以更换字体文件;启动XMB时长按R键可禁用VSH插件;在Recovery menu中添加了Delete Hibernation(删除休眠文件功能)以及显示高亮效果;2011年版本支持了2G~4G的ISO/CSO读取,就此psp宣告完美破解,所有自制软件,游戏皆可运行。
2012-06-02 忠贞炙烈之炎发布6.20/6.35 /6.39/6.60PRO C系统,增加了WIFI联机功能。此次更新虽然影响并不是很大,但仍是破解历程上的一大步。
2013-03 忠贞炙烈之炎发布6.60PRO C2系统,修正了NoDRM引擎的一个小错误。
2015-01-15 SONY官网宣布对PSP进行6.61官方系统的更新。此次更新与上次6.60官方系统更新已阔别3年零5个月,索尼官网称此次更新“提升了原有系统的稳定性”。原有自制系统在升级官方系统后失效。
2015-01-18 破解工作者wololo发布6.60/6.61PRO C2系统。至此PSP全部系统再次实现破解。
② 通过CMD删除Win10休眠文件hiberfil.sys出现无法执行操作
1、这个隐藏的系统文件hiberfil.sys,体积超大,隐藏在系统盘根目录下(除非你通过regedit注册表修改路径)。这一点与pagefile.sys文件(用于虚拟内存)不一太样,pagefile.sys可以在计算机的系统设置中,自由修改转移到哪个盘。
注意,要找到hiberfil.sys文件,可以在文件夹选项中,取消勾选“隐藏受保护的系统文件”,或者用winrar软件定位到系统盘,查看这个文件。
2、下面,我们使用命令行工具,来彻底关闭Windows的休眠功能,并且希望彻底删除这个体积超大的文件。首先,打开系统开始菜单中的运行(可以按下快捷键Windows+R),然后输入cmd,并按下回车键确定。
3、进入命令行界面。
4、命令窗口中输入 powercfg -h off,即可关闭休眠功能,同时 Hiberfil.sys 文件也会自动删除。
5、当然,上述方法可能不凑效,因为从Win7开始,一些程序运行必须以管理员的身份运行。
6、这时,可以找到系统盘文件夹Windows/system32中的cmd.exe文件,或者在开始菜单中,找到所有程序 > 附件 > 命令提示符图标
7、右击在弹出菜单中,点击“以管理员身份运行”。然后执行上述的命令行任务,即可成功删除Windows系统休眠文件hiberfil.sys
③ 怎样清除新出的华硕笔记本bios密码
找售后吧,他们能根据主板编号给出超级密码
④ 我电脑物理内存写的是2G,但是系统休眠文件却只有1.48G,这是为什么
更全面的回答 求采纳
发这份笔记时,比较惶恐,因为连我自己都觉得,这个东西没用。但是事实上,在很多偏门或机密的领域里,它仍然是非常有价值的。鉴于国内这方面资料比较少,所以写了一篇笔记,与大家共享。
Analyze Hibernation File
Introction
What’s Hibernation File?
Hibernation File也就是系统的休眠文件Hiberfil.sys,位于系统卷的根目录下。windows在系统休眠时,将物理内存中的数据(包括系统运行时的状态数据)mp到Hiberfil.sys,并生成一个有效的文件头。下次系统开机的时候,利用hiberfil.sys文件中的数据恢复系统。
How to generate a valid Hiberfil.sys?
从用户的角度来说,系统停机时,按下休眠按钮,则会自动生成一个有效的Hiberfil.sys。
从电源管理器的角度来说,只有当系统电源状态从S0àS4的时候,才会生成一个有效的休眠文件。
注:当系统正常运行时,电源状态为S0;完全关闭时,电源状态S5;休眠状态时,电源状态S4,此时只有电源电路和唤醒电路才有点滴电流;中间的几个状态S1,S2,S3,都是不同程度的睡眠状态。
从S4àS0的过程,也就是利用Hiberfil.sys恢复系统的过程。
Valuation of Hibernation File
It is quick and easy
恢复系统比重启系统要快。不解释(除特殊情况)。
A new method to mp physical memory
利用hibernation技术mp系统物理内存中的数据。这些数据包括处理器状态,当前EIP, IDT table, GDT table, SSDT table,当前状态的可执行代码和数据…
利用这些数据可以分析系统状态。
Leak Information?
Yes。正常情况下,利用Hiberfil.sys恢复系统,虽然恢复后会清除掉Hiberfil的Header数据(one page),使之无效,但是Header之后的数据还会保留。利用外部工具,构造一个Header,就可以读取该Hiberfil.sys的所有信息了。
Defensive uses
kernel –land malwares detection
分析hibernation file, 可以通过检查SSDT, IDT, GDT表的完整性来判断系统是否被修改。虽然在内核层有了更为轻量级的方法去检测系统关键表的完整性,但是存在anti对抗问题,hibernation提供了一种终极检测方式。
根据hibernation恢复原理,不在hibernation file中的代码,将不会被恢复执行。基于此,可以对抗SMM rootkit。(不做介绍)
Offensive uses
可以获取敏感数据,如:password, keys.
修改hibernation file, 提高某个进程的执行权限;绕过系统登录密码…
Hibernation file internals
Headline of hibernation process
当磁盘被挂起时(S0àS4),Windows内核(ntoskrnl.exe)执行体创建一个hibernation file,并将物理内存中的数据用LZ77算法压缩后,写入文件。
系统恢复时(S4àS0),OSLoader.exe读取hibernation file,加载解压后的数据到物理内存中,使系统以一种快捷方式恢复到休眠时的状态。
注:恢复过程的分析,见appendix 1。
Hibernation file structure
先直观的看下文件结构图:(左侧,域列表,是文件结构的组成域)
format.jpg下载此附件需要消耗2Kx,下载中会自动扣除。
File Header
位于休眠文件的第一页(0x1000 bytes)数据空间。该结构PO_MEMORY_IMAGE由内核调试符号导出。结构中主要包含了休眠文件的创建日期,版本号,校验和,有效标志,物理页数量等信息。
注:用休眠文件恢复系统时,只有第一页数据被清0,也就是file header,其他数据保留不变。
FreeMap Page
包含一个ulong数组,保存了空闲内存页的映射信息。
Processor State
处理器状态,由内核函数KiSaveProcessorControlState保存。包括控制寄存器CRX,GDT, IDT, EIP…
结构定义如下:
typedef struct _KPROCESSOR_STATE32
{
CONTEXT ContextFrame; //
KSPECIAL_REGISTERS SpecialRegisters; //
} KPROCESSOR_STATE32, *PKPROCESSOR_STATE32;
注:从vista版本以后,字段2和3的位置就交换过来了。
Memory Range Array
存储物理内存页的压缩数据。
typedef struct _MEMORY_RANGE_ARRAY
{
MEMORY_RANGE_ARRAY_LINK MemArrayLink;
MEMORY_RANGE_ARRAY_RANGE MemArrayRange[MAX_ARRAY_ENTRY];
} MEMORY_RANGE_ARRAY, *PMEMORY_RANGE_ARRAY;
字段MemArrayLink作为链接表指针,将多个这样的结构链接维护起来;
字段MemArrayRange指向数据区,最多包含255个入口。这也就是为什么要存在一个指向下一个MEMORY_RANGE_ARRAY结构的指针MemArrayLink,因为当休眠文件很大的时候,一个MEMORY_RANGE_ARRAY存储不了所有数据。
结构MEMORY_RANGE_ARRAY_RANGE定义如下:
typedef struct _MEMORY_RANGE_ARRAY_RANGE
{
ULONG PageNo; // ???
ULONG StartPage; // Block start (physical address)
ULONG EndPage; // Block stop (physical address)
ULONG CheckSum; // Always zero, but used under Windows 2000.
} MEMORY_RANGE_ARRAY_RANGE, *PMEMORY_RANGE_ARRAY_RANGE;
指定了页开始地址和页结束地址,在这些地址范围内的数据都是经过压缩算法来压缩后存储的,这个结构所对应的整块数据就是一个压缩块PageCompressedData,压缩快的起始部分是一个结构体,如下:
struct IMAGE_XPRESS_HEADER
{
CHAR Signature[8] = 81h, 81h, "xpress";
BYTE UncompressedPages = 15;
UINT32 CompressedSize;
BYTE Reserved[19] = 0;
};
也就是说,压缩块的标识是:\x81\x81xpress;之后就是压缩数据了。
注:每个压缩快所对应的解压后的块大小为64KB(0x10 pages)。
compression algorithm
This algorithm has been publicly documented since recent Microsoft Interoperability initiative (February 2008)
压缩块算法使用LZ77+DIRECT2;
LZ77用于压缩内存数据,DIRECT2对字节的位置进行编码和解码。
Project and Application
Sandman Project
该开源项目的主要特点是定义了休眠文件的文件结构,并给出了解析休眠文件的代码。
不过,这份代码中存在问题。在虚拟地址转换成物理地址时,作者将页面映射的PAE部分解析错了。
如果开启了PAE页面映射机制(实事上,几乎所有多核计算机都开启了PAE),那么MMU将会用三级表来实现地址转译,分别是:页目录指针表,页目录索引,页表索引,页字节偏移,其中前三项都是8字节长,而作者解析时将其作为4字节处理了。
具体改法:在mm.c文件à MmGetPhysicalAddress函数中,将处理PAE的偏移,改为8;
注:4KB分页时,地址转译只需二级表,页目录索引,页表索引,每项4字节长。
Tiamo NTLDR Project
作者Tiamo基本实现了一个完整的NTLDR,可以替换系统NTLDR,主要包括了利用休眠文件hiberfil.sys恢复系统的C++实现。不过我没有测试过可行性。
项目包括两部分:
16位实模式代码;
32位模式代码,即OsLoader.exe,是windows真正的32位入口程序。作者这部分代码参考了NT4代码,但是NT4代码中并没有实现恢复hiberfil的代码,估计作者是通过逆向写的。
Useful application
利用Sandman,开发了若干免费小工具,一般开发人员用不上。
可访问:http://www.moonsols.com
解析hiberfil.sys,获取系统版本号,休眠文件的创建时间,从休眠文件mp物理内存内容(见附件)。
ANTI SMM Rootkit应用;
其他方面,取证分析,以及未知的应用…
APPENDIX
简述用休眠文件恢复系统的过程
开机过程中,BIOS代码首先获得控制权,执行完硬件检测后跳转到MBR,MBR代码部分主要读取分区表信息,然后将控制权交给系统卷的引导扇区DBR,DBR执行一些初始化后,读取文件NTLDR,NTLDR中的16位模式代码开始执行,同样进行一些必要的初始化工作,然后将处理器切换到32位保护模式。
控制权交给osloader.exe, 此时处理器虽然已经工作在保护模式下,但是它的虚拟地址转译机制尚未开启,所以,处理器仍然直接使用物理地址。
Osloader 在入口函数NtProcessStartup里,调用全局初始化内存函数:
DoGlobalInitialization()-> InitializeMemorySubsystem() ->
实现的功能是: 用一个内存描述符数组把每一段内存的大小和用途记录下来,然后构造页目录和页表,使得16M一下的内存能够通过页面映射(paging)机制进行访问,在loader阶段是不使用高于16M以上的物理内存的,在设置好页目录寄存器,并打开页面映射机制。
之后,osloader 继续执行其他的初始化工作,包括IO设备的初始化。
分配PCR的页面-> 分配TSS的页面-> 初始化内存描述符-> 初始化IO系统BlIoInitialize。
接下来判断控制启动的方式。
函数:BlStartup(BootPartitionName);
过程大概这样:打开启动分区,以便加载驱动;初始化屏幕; 读取hiberfil.sys,如果是一个有效的休眠文件,则系统以hiberfil.sys方式恢复系统。如果不是,打开boot.ini文件,并显示一个引导选择菜单。如果boot.ini只包含一个引导选项,那么,此菜单不显示,而是立即应用该引导选项。
如果检测到hiberfil.sys有效,osloader将控制权交给一段能恢复系统的代码。大致流程如下:
打开hiberfil,不成功则返回-->成功则继续恢复 --> 分配页面缓冲-->解析头文件,判断image signature,有三种标志,分别处理,如果判断标志出错,就直接返回-->进行一些其他的校验工作->接下来分配PTE,读取内存映射页面的数据-> 分配压缩数据的缓冲->解压缩数据到物理内存—> 再经过一系列的恢复工作-> 读取处理器的状态......
通过NT4代码,分析NTLDR的工作流
boot/bootcode/mbr/i386/x86mboot.asm ->
这里执行MBR引导代码,读取分区表,获得引导分区,将引导分区的第一个扇区,即DBR读入到内存,然后将EIP调到DBR引导代码,执行。
boot/bootcode/ntfs/i386/ntfsboot.asm ->
该函数主要用来读取卷上的数据,主要是将ntldr读入到内存,然后执行。(卷上的数据是根据文件系统格式存储和管理的,所以访问卷上的文件内容,需借助文件系统代码去读。)到目前为止,程序还是在实模式下,即16-bit模式。
boot/startup/i386/su.asm ->
直接跳到 JMP RealStart,准备stack和segment,然后去执行suMain函数,该函数位于:
boot/startup/i386/main.c ->
来到了C代码。这里实现一些初始化,包括video ,memory,foppy等。之后在回到su.asm,进行模式切换,至32-bit;
boot/lib/i386/entry.c ->
入口函数NtProcessStartup,这里,进行一些初始化,调用DoGlobalInitialization 初始化16M以下的内存,分页机制开始启动。又进行了一些system memory和I/O system的初始化工作后,理解调用BlStartup函数,也就是说ntldr在BlStartup函数中执行完毕后,就返回了。该函数在:
boot/bldr/i386/initx86.c ->
这个函数打开boot.ini,获取启动选项,继续调用osloader.c;
\boot\bldr\osloader.c
注:NT4不支持hiberfil休眠机制,在XP以后的系统中,恢复hiberfil的过程在 BlStartup过程中被调用。
通过逆向分析NTLDR,分析hibernation file
这里只说下分析方法,省去细节。
恢复Hiberfil的工作是由osloader完成的,所以,通过逆向分析osloader.exe,可以了解恢复hiberfil的一些具体细节。
NTLDR位于系统盘根目录下,是一个具有隐藏只读属性的binary系统文件,不能直接使用IDA进行分析。
NTLDR由两个image组成,一个是16-bit下的binary image,就像是一个.com 文件;另一个是32-bit 下的PE file image,主要包含加载任务,这个PE image对应的文件就是osloader.exe。
提取osloader.exe的方法
用一个16进制编辑器(e.g. WinHex),打开NTLDR, 查找'MZ'或'PE'标志,然后从'MZ'标志开始,将剩下的hex data全部复制并粘贴到另外一个空文件,重命名为:osloader.exe。用winhex的话,会很简单(找到'MZ'标志,ALT+1,然后拖到文件末尾,ALT+2,这样就选中的从'MZ'到文件末尾的区块,然后右键'edit'->' block'->'into a new file')。
提取出osloader之后,用IDA加载,加载的时候会提示从MS官方下载'未公开'的符号,选择YES或NO,等待分析,可能要花2分钟左右时间。
分析osloader.exe文件
常理来说,osloader应该是一个native app,其入口函数是:NtProcessStartup。但是IDA分析后,入口函数为DriverEntry,当成驱动程序来分析了。但是,事实上,native app本质上就是一个驱动。
接下来就是利用各种资源,找自己关注的代码区分析了。