MBR知识整理

MBR简介
MBR,全称为Master Boot Record,即硬盘的主引导记录。为了便于理解,一般将MBR分为广义和狭义两种:广义的MBR包含整个扇区(引导程序、分区表及分隔标识),也就是上面所说的主引导记录;而狭义的MBR仅指引导程序而言。硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。它由三个部分组成,主引导程序、硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA)。在总共512字节的主引导扇区里主引导程序(boot loader)占446个字节,可在FDISK程序中找到,它用于硬盘启动时将系统控制转给用户指定的并在分区表中登记了的某个操作系统。第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。第三部分是magicnumber,结束标志,占2个字节,固定为55AA,存储时低位在前,高位在后,即看上去是55AA(十六进制)。
MBR示意图
操作MBR
MBR是不属于任何一个操作系统,也不能用操作系统提供的磁盘操作命令来读取它,但可以通过命令来修改和重写,如在minix3里面,可以用命令:installboot -m /dev/c0d0 /usr/mdec/masterboot来把masterboot这个小程序写到mbr里面,masterboot通常用汇编语言来编写。我们也可以用ROM-BIOS中提供的INT13H的2号功能来读出该扇区的内容,也可用软件工具Norton8.0中的DISKEDIT.EXE来读取。
调用参数
用INT13H的读磁盘扇区功能的调用参数如下:
入口参数:AH=2 (指定功能号)
AL=要读取的扇区数
DL=磁盘号(0、1-软盘;80、81-硬盘)
DH=磁头号
CL高2位+CH=柱面号
CL低6位=扇区号
CS:BX=存放读取数据的内存缓冲地址
出口参数:CS:BX=读取数据存放地址
错误信息:如果出错CF=1 AH=错误代码
用DEBUG读取位于硬盘0柱面、0磁头、1扇区的操作如下:
A>DEBUG
-A 100
XXXX:XXXX MOV AX,0201 (用功能号2读1个扇区)
XXXX:XXXX MOV BX,1000 (把读出的数据放入缓冲区的地址为CS:1000)
XXXX:XXXX MOV CX,0001 (读0柱面,1扇区)
XXXX:XXXX MOV DX,0080 (指定第一物理盘的0磁头)
XXXX:XXXX INT 13
XXXX:XXXX INT 3
XXXX:XXXX (按回车键)
-G=100 (执行以上程序段)
-D 1000 11FF (显示512字节的MBR内容)
在windows操作系统下,例如xp,2003,Vista,windows7,有微软提供的接口直接读写mbr;
FILE * fd=fopen(“\\\\.\\PHYSICALDRIVE0″,”rb+”);
char buffer[512];
fread(buffer,512,1,fd);
//then you can edit buffer[512] as your wish……
fseek(fd,0,SEEK_SET); //很重要
fwrite(buffer,512,1,fd); //把修改后的MBR写入到你的机器
fclose(fd); //大功告成
MBR组成
一个扇区的硬盘主引导记录MBR由4个部分组成。
·主引导程序(偏移地址0000H–0088H),它负责从活动分区中装载,并运行系统引导程序。
·出错信息数据区,偏移地址0089H–00E1H为出错信息,00E2H–01BDH全为0字节。
·分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH–01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4。
·结束标志字,偏移地址01FE–01FF的2个字节值为结束标志55AA,如果该标志错误系统就不能启动。
MBR的结构如下表所示
字节偏移(16进制) 字节数 描述
00~1BD         446          引导代码
1BE~1CD       16            分区表项1
1CE~1DD       16            分区表项2
1DE~1ED       16            分区表项3
1EE~1FD       16            分区表项4
1FE~1FF        2              签名值“55AA”
MBR扇区示意图
具体含义如下:
(1) 0x00~0x1BD:446个字节,包含一段指令,用以通知计算机如何访问分区表并定位操作系统的位置。这部分的代码会因为操作系统不同而不同,利用引导代码可以实现多重系统引导。多系统引导有两种方法可以实现:一种方法是用Windows操作系统在引导分区中设置一段代码,先加载进入用户选择系统的界面,允许用户选择要进入的系统,再进入指定的系统;第二种方法是改变MBR中的引导代码,该代码直接呈现给用户一个选择系统的界面。
(2) 0x1BE~0x1FD:64个字节,4个分区表项,每个表项占用16个字节,描述一个分区,最多可以描述4个分区(这就是为什么MBR分区体系只能分成4个区【我们平时看到的分区一般可以从26个字母中选取任意多个当做分区标识(多于4个),这是因为那些分区是逻辑分区,这里的4个分区指的是主分区和扩展分区的数目,而逻辑分区是在扩展分区中划分出来的,也叫做二级、三级扩展分区。】)。分区表项并没有顺序要求,即不要求第一个分区表项在第二个分区表项前。分区表也不要求从第一个分区表项开始
(3) 0x1FE~0x1FF:2个字节,有效结束标志“55AA”。如果没有这个标志,操作系统会认为磁盘没有初始化,无法正确加载磁盘的分区。
分区项表(16字节)内容及含义

  • 第1字节: 引导标志。若值为80H表示活动分区,若值为00H表示非活动分区。
  • 第2、3、4字节: 本分区的起始磁头号、扇区号、柱面号。其中:磁头号——第2字节;扇区号——第3字节的低6位; 柱面号——为第3字节高2位+第4字节8位。
  • 第5字节: 分区类型符。00H——表示该分区未用(即没有指定);06H——FAT16基本分区;0BH——FAT32基本分区;05H——扩展分区;07H——NTFS分区;0FH——(LBA模式)扩展分区(83H为Linux分区等)。
  • 第6、7、8字节: 本分区的结束磁头号、扇区号、柱面号。其中:磁头号——第6字节;扇区号——第7字节的低6位;柱面号——第7字节的高2位+第8字节。
  • 第9、10、11、12字节: 本分区之前已用了的扇区数。
  • 第13、14、15、16字节: 本分区的总扇区数。

MBR的主要功能及工作流程
启动PC机时,系统首先对硬件设备进行测试,测试成功后进入自举程序INT 19H,然后读系统磁盘0柱面、0磁头、1扇区的主引导记录(MBR)内容到内存指定单元0:7C00地址开始的区域,并执行MBR程序段。
MBR程序段的主要功能如下:
·检查硬盘分区表是否完好。
·在分区表中寻找可引导的“活动”分区。
·将活动分区的第一逻辑扇区内容装入内存。在DOS分区中,此扇区内容称为DOS引导记录。

php混淆代码整理

php代码经过zend混淆加密后的部分函数逆向修复:

obfuscate_ORcrdBxtIGAWaw                                 strtoupper
_obfuscate_K2kO                                                   md5
_obfuscate_YS5qCw                                              trim
_obfuscate_FidtNw                                                 each
_obfuscate_CmQQIAo                                            ksort
_obfuscate_L18HOwxxES96biQ3Zzho                   function_exists
_obfuscate_A0AiNnx1fAFraH4Jdjw2YAdsGg         mb_convert_encoding
_obfuscate_Ci9kDSo                                               iconv
_obfuscate_e34nCjE1bXlr                                       stripslashes
_obfuscate_YwJjMg                                                 date
_obfuscate_amIjeA                                                   rand
dmeqjch                                                                    explode
_obfuscate_d1x0cApj                                               header
_obfuscate_XHJdJwsLYGUROw                             array_rand
_obfuscate_GBcde1sU                                            stristr 对大小写不敏感
_obfuscate_KTkfXSxjHBsOcGtoaw                         base64_decode
_obfuscate_MGYpc2l6CjY                                        in_array
_obfuscate_aTNpCi8iDl1odhk                                  array_merge
_obfuscate_e34nCjE1bXlr                                        urlencode / base64_encode
_obfuscate_W3dsaTRid3UdKmJrAQUxKG4            file_get_contents
_obfuscate_XGkLCg47bQ                                        defined
_obfuscate_CSBmAn9z                                            define
_obfuscate_aAFqNWoGfQ87Pjg                               str_replace
_obfuscate_bShjLzcWFHZ5H2ZgAQ08                     error_reporting
_obfuscate_c2ssCnw1                                                substr
_obfuscate_aBF4alti                                                    mktime
_obfuscate_FThtJDI                                                    exit
_obfuscate_ElwMa2Z3                                                getenv
_obfuscate_B2chbS9wCA                                           is_file
@_obfuscate_Km9mBw                                             @exec
_obfuscate_IHNwNyJo                                                strlen
ovhsc                                                                            round

 

下面网站提供php解密修复工具,http://www.zhaoyuanma.com/phpzendfix.html

memcache

memcache简介
memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用。它的缓存是一种分布式的,也就是可以允许不同主机上的多个用户同时 访问这个缓存系统, 这种方法不仅解决了同时共享内存只能是单机的弊端,也解决了数据库检索的压力,最大的优点是提高了访问获取数据的速度。(摘自百度百科)在结合apache服务器时有这样一种说法,apache服务器运行时,消耗内存小,消耗cpu大;memcached运行时,消耗cpu小,消耗内存大。
Memcache官方网站:http://www.danga.com/memcached

memcache服务器端
linux下安装memcached:
目前memcached最新版本为1.4.10 ,在这里(官网)下载。因为Memcache用到了libevent这个库用于Socket的处理,所以还需要安装libevent,libevent的最新版本是libevent-2.0.16。在这里(官网)下载
首先安装libevent,可以指定位置path_libevent安装。安装memcached时,在配置编译选项时,./configure –prefix=path_memcached –with-libevent=path_libevent。安装完成后,在指定的path_memcached/bin/文件夹下会有名为memcached的文件(有网友说会有memcached-debug这个文件,我安装后没有发现,还未深究)。
运行memcached:
在终端输入memcached -d -m 10 -u root -l 127.0.0.1 -p 11211 -c 256 -P(也可以启动多个守护进程,不过端口不能重复。)
/tmp/memcached.pid
memcached的参数:
-p memcached监听的TCP端口,默认为11211
-l 监听的ip地址,如果需要多个服务器都能够读取这台memcached的缓存数据,那么就必须设定 这个ip
-d 以daemon方式运行,将程序放入后台
-u memcached的运行用户,可以设定为nobody,memcache默认不允许以root用户登录
-P memcached的pid文件路径
-m memcached可以使用的最大内存数量
-c memcached同时可以接受的最大的连接数
如果希望以socket方式来访问memcached,那么在启动的时候就必须去掉 -l和-p参数,并加上-s参数:
-s memcached的socket文件路径
-vv显示debug信息

memcache客户端:
memcache客户端支持多种流行编程语言,像php,java,c/c++等都有其客户端api。http://code.google.com/p/memcached/wiki/Clients,在这里有相应的api下载及相关文档。
MemCache接口介绍
Memcache客户端包含两组接口,一组是面向过程的接口,一组是面向对象的接口
Memcache面向对象的常用接口包括:
Memcache::connect — 打开一个到Memcache的连接
Memcache::pconnect — 打开一个到Memcache的长连接
Memcache::close — 关闭一个Memcache的连接
Memcache::set — 保存数据到Memcache服务器上
Memcache::get — 提取一个保存在Memcache服务器上的数据
Memcache::replace — 替换一个已经存在Memcache服务器上的项目(功能类似Memcache::set)
Memcache::delete — 从Memcache服务器上删除一个保存的项目
Memcache::flush — 刷新所有Memcache服务器上保存的项目(类似于删除所有的保存的项目)
Memcache::getStats — 获取当前Memcache服务器运行的状态
php中memcache文档:http://cn.php.net/memcache/

php中添加memcache扩展有几种方式,首先可以编译添加memcache库文件,并在php.ini中添加扩展配置就可以了。还有一种无须任何php配置,只要一个包含客户端php文件就可以了,使用语句  include “memcache-client.php”。文件下载地址: memcached-client-php-0.1.2.tar,这种方式并非底层,所以性能上面自然是稍逊不少。
java中应用memcache:http://blog.chenlb.com/2008/12/use-memcache-java-client-demo.html
http://hi.baidu.com/gladfeel/blog/item/3732d5ce3b0f341393457eb6.html

Sad Angle

生活是一种连续的影响,每个小人物都有小人物的伟大故事。从开头的情侣,到美丽的丝带,从清洁老伯到卖气球的小贩,从摩登女郎到路上抢匪,那个失意的女孩和表演的女孩,从微笑到最后定格的鲜花,不得不说MV把曲子表达的淋漓尽致。作者以旁人的角度看生活这场剧,看到形形色色的人过着不同的生活,当我们静下心来注意身边的风景时,也会用不一样的方式表达同样的心情。悲伤来临的时候,我们的内心都住着天使,用最干净的眸子看世界。看待命运。灰色地带说的对,生活仍在继续,我们就应该抱着积极的心态去面对生活。 感谢这个曲子,在我人生最矛盾徘徊的时候,给了我如此多的启示 。:)
也许只有在悲伤来临之时,才能如此平静的看人来人往,永远只是旁观。看的见别人的悲喜,忘记繁杂的思绪。