亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

Sql Server之旅——第六站 使用winHex利器加深理解數據頁

2024-08-31 00:54:53
字體:
來源:轉載
供稿:網友
Sql Server之旅——第六站 使用winHex利器加深理解數據頁

  

這篇我來介紹一個winhex利器,這個工具網上有介紹,用途大著呢,可以用來玩數據修復,恢復刪除文件等等。。。。它能夠將一個file解析成

hex形式,這樣你就可以對hex進行修改,然后你就可以看到修復后的結果,為什么要在sqlserver系列中說這個呢???很簡單呀,sqlserver的DB本

質上也是一個mdf文件,對吧,既然是文件,我就可以利用winhex對它進行隨意的修改,然后你也知道sqlserver的數據都是以數據頁的形式封裝的,

那我就可以修改它的數據頁,對不對,這樣我就可以隨便改變記錄的順序,包括槽位,記錄,頁頭等等。。。說干就干吧!??!

一:準備數據

  我計劃在數據庫中插入三條測試數據,如圖:

1 DROP TABLE dbo.Person2 3 CREATE TABLE Person(ID INT IDENTITY,NAME VARCHAR(5),Age INT)4 5 INSERT dbo.Person VALUES('amy',20)6 INSERT dbo.Person VALUES('anna',25)7 INSERT dbo.Person VALUES('smart',28)8 9 SELECT * FROM dbo.Person

接下來通過上一章介紹的DBCC命令,查看下三條記錄的數據頁情況,如下圖:

DBCC TRACEON(3604)DBCC IND(Ctrip,Person,-1)DBCC PAGE(Ctrip,1,78,2)
 1 DATA: 2  3  4 Memory Dump @0x00000000100EA000 5  6 00000000100EA000:   01010400 00800001 00000000 00000c00 †................  7 00000000100EA010:   00000000 00000300 3f000000 551fa500 †........?...U...  8 00000000100EA020:   4e000000 01000000 8e000000 66000000 †N...........f...  9 00000000100EA030:   03000000 00000000 00000000 00000000 †................ 10 00000000100EA040:   01000000 00000000 00000000 00000000 †................ 11 00000000100EA050:   00000000 00000000 00000000 00000000 †................ 12 00000000100EA060:   30000c00 01000000 14000000 03000001 †0............... 13 00000000100EA070:   00160061 6d793000 0c000200 00001900 †...amy0......... 14 00000000100EA080:   00000300 00010017 00616e6e 6130000c †.........anna0.. 15 00000000100EA090:   00030000 001c0000 00030000 01001800 †................ 16 00000000100EA0A0:   736d6172 74000000 00000000 00000000 †smart........... 17 00000000100EA0B0:   00000000 00000000 00000000 00000000 †................ 18 19 ....20               21 00000000100EBFC0:   20202020 20202020 20202020 20202020 †                 22 00000000100EBFD0:   20202020 20200000 00000000 00000000 †      .......... 23 00000000100EBFE0:   00000000 00000000 00000000 00000000 †................ 24 00000000100EBFF0:   00000000 00000000 1f0b8d00 76006000 †............v.`. 25 26 OFFSET TABLE:27 28 Row - Offset                         29 2 (0x2) - 141 (0x8d)                 30 1 (0x1) - 118 (0x76)                 31 0 (0x0) - 96 (0x60)   

  我想大家現在都清楚了,數據頁中的一條條存儲記錄都是通過頁尾的槽位指向的,具體可以參見前幾篇對數據頁的介紹,比如你看到頁尾的:

8d0076006000了嗎?要注意,這些都是按照字節逆序來的。

  1. 6000 這個就是slot0,也就是 (0x0) - 96 (0x60)

  2. 0x76 這個就是slot1,也就是(0x1) - 118 (0x76)

  2. 0x8d 這個就是slot2,也就是(0x2) - 141 (0x8d)

是不是有點意思,如果你一定要看到slot具體指向的內容,你可以繼續用上一節介紹的DBCC命令,一清二楚。

1 DBCC PAGE(Ctrip,1,78,1)
PAGE: (1:78)BUFFER:BUF @0x0000000083FD8E00bpage = 0x0000000083ADC000           bhash = 0x0000000000000000           bpageno = (1:78)bdbid = 8                            breferences = 0                      bUse1 = 2495bstat = 0x1c0000b                    blog = 0xbbbbbbbb                    bnext = 0x0000000000000000PAGE HEADER:Page @0x0000000083ADC000m_pageId = (1:78)                    m_headerVersion = 1                  m_type = 1m_typeFlagBits = 0x4                 m_level = 0                          m_flagBits = 0x8000m_objId (AllocUnitId.idObj) = 63     m_indexId (AllocUnitId.idInd) = 256  Metadata: AllocUnitId = 72057594042056704                                 Metadata: PartitionId = 72057594041204736                                 Metadata: IndexId = 0Metadata: ObjectId = 341576255       m_PRevPage = (0:0)                   m_nextPage = (0:0)pminlen = 12                         m_slotCnt = 3                        m_freeCnt = 8021m_freeData = 165                     m_reservedCnt = 0                    m_lsn = (142:102:3)m_xactReserved = 0                   m_xdesId = (0:0)                     m_GhostRecCnt = 0m_tornBits = 0                       Allocation StatusGAM (1:2) = ALLOCATED                SGAM (1:3) = ALLOCATED               PFS (1:1) = 0x61 MIXED_EXT ALLOCATED  50_PCT_FULL                         DIFF (1:6) = CHANGEDML (1:7) = NOT MIN_LOGGED            DATA:Slot 0, Offset 0x60, Length 22, DumpStyle BYTERecord Type = PRIMARY_RECORD         Record Attributes =  NULL_BITMAP VARIABLE_COLUMNSRecord Size = 22                     Memory Dump @0x000000000F7FC0600000000000000000:   30000c00 01000000 14000000 03000001 †0............... 0000000000000010:   00160061 6d79††††††††††††††††††††††††...amy           Slot 1, Offset 0x76, Length 23, DumpStyle BYTERecord Type = PRIMARY_RECORD         Record Attributes =  NULL_BITMAP VARIABLE_COLUMNSRecord Size = 23                     Memory Dump @0x000000000F7FC0760000000000000000:   30000c00 02000000 19000000 03000001 †0............... 0000000000000010:   00170061 6e6e61††††††††††††††††††††††...anna          Slot 2, Offset 0x8d, Length 24, DumpStyle BYTERecord Type = PRIMARY_RECORD         Record Attributes =  NULL_BITMAP VARIABLE_COLUMNSRecord Size = 24                     Memory Dump @0x000000000F7FC08D0000000000000000:   30000c00 03000000 1c000000 03000001 †0............... 0000000000000010:   00180073 6d617274 †††††††††††††††††††...smart         OFFSET TABLE:Row - Offset                         2 (0x2) - 141 (0x8d)                 1 (0x1) - 118 (0x76)                 0 (0x0) - 96 (0x60)                  DBCC 執行完畢。如果 DBCC 輸出了錯誤信息,請與系統管理員聯系。

仔細觀察下上面的藍色字體,有沒有總結出各個slot槽位對應的記錄內容,比如:

slot0槽位指向的記錄內容: amy => 616d79。

slot1槽位指向的記錄內容: anna => 616e6e61。

slot2槽位指向的記錄內容: smart => 736d617274。

這里你要知道,這里都是16進制表示的,所以2個16進制對應一個字節。

二:使用WinHex修改數據

  我們大家都知道,sqlserver引擎會通過掃描slot槽位來呈現數據,就像上面的記錄那樣,依次掃描slot0...slot1....slot2...來呈現數據,如下圖:

上面這個截圖沒什么稀奇的地方,大家也覺得見怪不怪的,那下面就有一個想法來了,如果我通過winHex來交換slot0和slot1的順序,那效果會是

怎樣???按照常理說,這時候引擎還是按照slot槽位依次掃描,這時候應該會將ID=2的記錄先噴出來,然后再噴出ID=1,ID=3。。。事實是不是

這樣子呢?好奇吧,我們來看看。。。

三:相關步驟

1. 我們知道Ctrip數據庫是聯機的,我們要修改它必須先脫機,然后再關掉數據頁的一致性校驗(這個也是數據庫的保護機制,防止第三方惡意的去篡

改數據),這個應該大家都明白,如下圖:

2. 從網上下載一個破解版的winhex,然后打開本地的Ctrip.mdf文件,調整winhex的編輯模式為默認的可讀寫,如圖:

3. 我們知道一個數據頁的大小是8KB=8192B,那么第78號數據頁的起始位置的偏移量應該就是:78*8192=638976,然后通過快捷鍵

Alt+G打開偏移量列表,鍵入638976,如下圖:

找到記錄的內容之后,我們再來找槽位,槽位的開始位置在78號數據頁的末尾,那怎么算呢?這個算法也很簡單,offset=79*8192-1=647167。

說干就干。

當你真的找到了偏移量,是不是很興奮呢?下面要做的就是把60和76交換一下,也就是將slot0和slot1交換,看看怎么樣????

4. 交換完畢后,ctrl+s保存,然后讓Ctrip數據庫聯機,并使用Sql語句查看下現在的效果???

當你看到這張圖的時候,是不是已經瘋了。。。。這樣我就非??隙ǖ恼撟C了,引擎真的就是通過依次掃描slot的槽位來指向記錄的,如果你

大概理解了上面的操作,現在你可以修改任意數據頁的數據了,只要你找得到數據頁的偏移量,然后任由你發揮啦~~~~感謝感謝。。。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久成人av| 亚洲天堂免费视频| 久久综合免费视频影院| 97人人模人人爽人人喊中文字| 亚洲国产精品99| 国产精品久久77777| 亚洲国产毛片完整版| 国产日本欧美在线观看| 97香蕉久久超级碰碰高清版| 成人免费视频xnxx.com| 久久久精品视频在线观看| 亚洲精品福利免费在线观看| 亚洲成人黄色在线| 欧美激情日韩图片| 久久久久国产精品免费网站| 国产欧美日韩丝袜精品一区| 91av视频在线观看| 欧美一级视频免费在线观看| 日韩黄色在线免费观看| 国产成人精品a视频一区www| 欧美老女人在线视频| 久久精品国产96久久久香蕉| 一本大道亚洲视频| 午夜精品一区二区三区在线| 不卡av电影院| 久久久久久com| 7777精品久久久久久| 日韩精品免费综合视频在线播放| 成人国产精品色哟哟| 欧美激情一区二区三级高清视频| 91精品免费久久久久久久久| 日韩精品视频免费在线观看| 亚洲人精品午夜在线观看| 国产成人精品在线观看| 久久国产精品亚洲| 九九视频这里只有精品| 欧美xxxx做受欧美.88| 亚洲精品不卡在线| 精品久久久久久电影| 在线视频日本亚洲性| 亚洲18私人小影院| 欧美中文字幕在线播放| 亚洲第一页中文字幕| 色婷婷成人综合| 欧美精品videos| 亚洲一区二区三区在线视频| 热草久综合在线| 欧美另类在线观看| 国产精品视频中文字幕91| 91精品久久久久久综合乱菊| 永久免费毛片在线播放不卡| 日本免费久久高清视频| 亚洲欧洲国产一区| 日韩日本欧美亚洲| 97在线免费观看视频| 亚洲xxxxx性| 日韩美女视频在线观看| 日韩黄色av网站| 欧美理论电影在线观看| 日韩大片免费观看视频播放| 中文字幕久热精品在线视频| 亚洲女人天堂色在线7777| 91久久精品美女| 久久精品2019中文字幕| 国产精品国产福利国产秒拍| 亚洲网站在线观看| 日韩有码在线视频| 亚洲精品在线不卡| 福利视频导航一区| 福利一区福利二区微拍刺激| 欧洲精品毛片网站| 在线看日韩欧美| 国产精品视频免费在线观看| 久久久视频免费观看| 欧美日本国产在线| 国产精品免费一区豆花| 国产精品美乳在线观看| 亚洲国产精品va在看黑人| 久久伊人色综合| 久久久久久久电影一区| 精品自拍视频在线观看| 欧美老女人性生活| 国产视频福利一区| 国产精品美女久久| 国产精品亚洲精品| 久久久久久国产精品三级玉女聊斋| 日本一欧美一欧美一亚洲视频| 国产成人aa精品一区在线播放| 亚洲国产成人久久综合| 久久精品成人欧美大片古装| 久久久国产视频91| 亚洲视频axxx| 国产精品日韩在线播放| 亚洲午夜性刺激影院| 97成人精品视频在线观看| 日韩中文字幕精品| 欧美精品日韩www.p站| 国产成人精品久久二区二区91| 国产一区二区三区毛片| 欧美野外猛男的大粗鳮| 亚洲欧美制服另类日韩| 国产91成人video| 国产精品毛片a∨一区二区三区|国| 91在线高清免费观看| 奇门遁甲1982国语版免费观看高清| 在线播放日韩精品| 亚洲女人被黑人巨大进入| 日韩中文字幕精品| 国产精品一区二区久久久| 国产一区二区三区在线观看视频| 精品视频在线播放| 亚洲免费av网址| 久久大大胆人体| 欧美激情伊人电影| 精品成人乱色一区二区| 97视频在线观看免费高清完整版在线观看| 亚洲成人动漫在线播放| 亚洲高清不卡av| 久久最新资源网| 亚洲日本欧美中文幕| 2018中文字幕一区二区三区| 日韩中文字幕在线视频| 久久久久久香蕉网| 久久91精品国产91久久久| 最好看的2019年中文视频| 九九热精品在线| 国产精品久久久久久久久久99| 日韩在线视频中文字幕| 91精品国产综合久久香蕉922| 韩国精品美女www爽爽爽视频| 成人免费观看49www在线观看| 日韩精品久久久久| 97免费视频在线播放| 91av福利视频| 国产亚洲欧美aaaa| 热久久这里只有精品| 亚洲综合精品一区二区| 日本精品免费一区二区三区| 亚洲精品成人久久电影| 国语自产精品视频在线看抢先版图片| 日韩精品视频观看| 国产日韩精品电影| yw.139尤物在线精品视频| 欧美福利视频网站| 日韩av观看网址| 一区二区三区视频免费| 国产日韩欧美视频| 久久免费视频这里只有精品| 欧美激情在线观看视频| 日韩大片在线观看视频| 欧美一区二区三区图| 亚洲欧洲一区二区三区在线观看| 精品欧美国产一区二区三区| 欧美精品久久久久久久| 国产精品人成电影| 亚洲国产日韩欧美在线动漫| 91国产美女在线观看| 欧美综合国产精品久久丁香| 国产精品白嫩美女在线观看| 亚洲va国产va天堂va久久| 欧美孕妇毛茸茸xxxx| 亚洲另类xxxx| 国产欧美欧洲在线观看| 亚洲高清av在线|