国产精品久av福利在线观看_亚洲一区国产精品_亚洲黄色一区二区三区_欧美成人xxxx_国产精品www_xxxxx欧美_国产精品久久婷婷六月丁香_国产特级毛片

錦州市廣廈電腦維修|上門維修電腦|上門做系統|0416-3905144熱誠服務,錦州廣廈維修電腦,公司IT外包服務
topFlag1 設為首頁
topFlag3 收藏本站
 
maojin003 首 頁 公司介紹 服務項目 服務報價 維修流程 IT外包服務 服務器維護 技術文章 常見故障
錦州市廣廈電腦維修|上門維修電腦|上門做系統|0416-3905144熱誠服務技術文章
(調試逆向) 堆溢出研究二

作者: 佚名  日期:2017-05-14 20:28:59   來源: 本站整理

 堆溢出研究二##目錄

  • 調試中認識堆表
  • 調試中識別堆的分配,釋放,合并

調試中識別堆表
工具:OllyDbg 2.0版本 & vc6.0(release模式)  編譯選項默認 os: windows2000   


函數的抽離
在堆中進行內存分配的時候,C語言函數調用的是malloc()函數,c++中調用new()函數,當動態調試進入函數內部的時候察覺此兩個函數調用的都是底層 ntdll.dll中的 RtAllocateHeap()函數,所有的windows分配堆的函數在底層調用的都是此函數,這也死程序員可以看到的關于堆的最底層函數。因此研究堆分配,重點關注此函數即可。   

堆的調試
在此之前需要理解一個概念:調試堆與調試棧不同,不能直接加載或者attach 程序,否則堆管理策略就會采用調試狀態下的堆管理策略,使用調試狀態下的堆管理函數。     


正常堆和調試堆的區別:
1.調試堆只采用空表分配,不采用快表分配
2.所有的堆塊末尾都加上十六個字節的用來防止程序溢出,(僅僅是用來防止程序溢出,而不是堆溢出),其中這十六個字節包括: 
8 * 0xAB + 8 * 0x00
3.塊首的標志標志位不同,調試狀態下的堆和正常堆的區別如同debug下的PE文件和release下的PE文件類似,做堆移除實驗的時候,調試器中可以v正常運行的shellcode,單獨運行卻不行。很可能就是調試堆與正常堆的差異造成的。   


為拉避免采用調試狀態下的堆,我i們直接在程序中嵌入 int3 斷點,然后調用實時調試器即可: 源碼: #include <windows.h>main(){    HLOCAL h1,h2,h3,h4,h5,h6;    HANDLE hp;    hp = HeapCreate(0,0x1000,0x10000);    __asm int 3    h1 = HeapAlloc(hp,HEAP_ZERO_MEMORY,3);    h2 = HeapAlloc(hp,HEAP_ZERO_MEMORY,5);    h3 = HeapAlloc(hp,HEAP_ZERO_MEMORY,6);    h4 = HeapAlloc(hp,HEAP_ZERO_MEMORY,8);    h5 = HeapAlloc(hp,HEAP_ZERO_MEMORY,19);    h6 = HeapAlloc(hp,HEAP_ZERO_MEMORY,24);    HeapFree(hp,0,h1); //free to freelist[2]     HeapFree(hp,0,h3); //free to freelist[2]     HeapFree(hp,0,h5); //free to freelist[4]    HeapFree(hp,0,h4); //coalese h3,h4,h5,link the large block to freelist[8]    return 0;}
step: 1. 調整ollydbg 為 just in time (實時調試器)
2. 直接進行編譯鏈接運行程序,根據程序中的 int3 斷點. ollydbg會直接斷在int3斷點出如圖所示:

如上圖所示程序斷點段在拉地址 VA = 0040101D處,此時使用快捷鍵 ALT + M 查看內存映射窗口來到如圖所示重點部分已經標注出來:

如上圖所示可以、得到信息:發現進程堆地址為:  00130000 大小為0x6000  (此處可以通過函數 GetPcocessHeap()函數獲得句柄)如圖:

還有我們程序中創建出來的堆地址是0x00360000 size = 0x1000識別堆表
根據上圖中的信息我們直接轉到程序中創建出的堆地址 0x360000處在(數據窗口  直接 快捷鍵 ctrl + g )
  
對于上圖來到地址 0x360000處后,根據和堆溢出有關的數據結構我們直接關注 空表索引區即可(即偏移地址 0x178地址處):   堆初始化時的狀態


當堆剛被初始化的時候結構很簡單,
1. 其中只包含一個空閑大塊(稱為 “尾塊”)
2. 此尾塊地址位于 0x178(360178)處 (未啟用塊表的情況下)算上基地址就是 0x360688  (又稱為freelist【0】 )   
    
3.freelist[0] 指向“尾塊 ‘,八個字節 (前四個字節是前向指針 后四個字節是后向指針 即:空表中的一對指針) ,其余的各項索引都指向其自身     

對堆塊塊首做一個簡介 ####
堆塊的塊首占八個字節下面根據占用態和空閑態分別介紹:
  
  
共同點:   


0-2 字節代表本快的大小(包括塊首)
2-4字節表示計算單位是多少字節   


不同點


Flags出 占用態標志是1  空閑態標志是 0
空閑態塊首后的八個字節為一對指針,分別是前向指針和后向指針。當堆塊變為占用態的時候重新回分配數據。
實際上尾塊的起始位置是 0x360680   


因此根據地址 0x360680處八個字節的情況可以知道:此尾塊的大小是 0x130  計算單位是 0x0008 個字節  總大小是 0x980字節。    調試中識別堆的分配,釋放,合并堆塊的分配
我們直接在cpu窗戶 命令 F8單步執行程序到地址:0x00401028地址處也就是在源碼中我們執行完:h1 = HeapAlloc(hp,HEAP_ZERO_MEMORY,3);
當h1被分配完以后直接查看地址:0x360178地址處的值:    
 
此時的地址0x360178處的值已經從0x360688改變為0x360698  同時跳轉到 0x360698,如下圖:
  
如上圖所示:在地址0x360698出值為0x360178 鏈表的條件。
同樣的根據地址0x360688處的值即:分配的h1可以發現,h1的大小是 0x002 size = 16bytes
接下來直接運行到地址 0x00401059 此時直接查看 0x360178的地址出看到 值已經更改為:0x360708.接下來直接來到0x360680處進行查看
h1 - h6的分配情況如下圖所示:  

如上所示:尾塊現在的地址是:0x360700 大小是 0x120 = 0x130 - 0x2 * 4 - 0x4 * 2 
以上從h1 - h6的分配情況驗證啦 空表分配中的找零錢現象(從一個大塊中依次一小塊一小塊地進行切割)堆塊的釋放
接著上面的程序執行,直接執行到地址:00401077地址處HeapFree(hp,0,h1); //free to freelist[2] HeapFree(hp,0,h3); //free to freelist[2] HeapFree(hp,0,h5); //free to freelist[4]
分別釋放啦堆塊 h1 h3 h5這樣做是防止相鄰堆塊進行堆塊的合并。直接查看地址 0x360178地址處的值重點觀察變化的值如下圖:
  
從上圖中可以發現地址 0x360188 的值發生啦變化 從原來的指向自身現在變為指向:0x360688  0x3608A8  
地址0x360198處的值變化為: 0x003606C8 和 0x003606c8
由上圖可知 h1 h3分別被釋放到 freelist[2] 空表中, h5被釋放到啦 freelist【4】空表中。   


根據freelist【2】 的空表索引 以及h1 h3堆塊的指針組,可以發現 :

如圖所示左邊箭頭是前向指針,順序為 Frllist -> h1 > h3  右邊是后向指針 順序是 h3> h1 > freelist[2]
對于h5堆快倒是沒啥 ,freelist【5】直接索引到 地址 0x3606c8   

堆表的合并
接著程序運行直接運行到地址 0x401080地址處,執行的是代碼:HeapFree(hp,0,h4); //coalese h3,h4,h5,link the large block to freelist[8]
當釋放h4的時候會發生堆塊的合并現象(兩個連續的空閑塊就會發生合并)。首先是先從空表中將三個空閑塊摘下,重新計算合并后的堆塊的大小,然后合并成新的空閑塊,鏈入空表。如下圖所示分別為空表索引區狀態和合并后堆塊狀態:  


如上圖所所示:地址 0x3606A0處的值 0x0008 即是:合并后的堆塊的大小。后八個字節的指針對,則指向空表的索引區。   注意事項

  • 以上是空表中的堆塊的合并,并且只發生在空表中。
  • 整個過程比較費時,繁瑣,在強調效率的情況下,堆塊合并就會被禁止,設置為占用太。
  • 空表中第一個塊的情況下不會向前發生合并,最后一個塊不會向后進行合并。

快表的申請與釋放
快表和空表的區別在于 HeapCreate()函數的參數的不同。   hp = HeapCreate(0,0,0);//塊表hp = HeapCreate(0,0x1000,0x10000);//空表
源碼:#include <stdio.h>#include <windows.h>void main(){    HLOCAL h1,h2,h3,h4;    HANDLE hp;    hp = HeapCreate(0,0,0);    __asm int 3    h1 = HeapAlloc(hp,HEAP_ZERO_MEMORY,8);    h2 = HeapAlloc(hp,HEAP_ZERO_MEMORY,8);    h3 = HeapAlloc(hp,HEAP_ZERO_MEMORY,16);    h4 = HeapAlloc(hp,HEAP_ZERO_MEMORY,24);    HeapFree(hp,0,h1);    HeapFree(hp,0,h2);    HeapFree(hp,0,h3);    HeapFree(hp,0,h4);    h2 = HeapAlloc(hp,HEAP_ZERO_MEMORY,16);    HeapFree(hp,0,h2);}
與空表的申請大致類似。
環境:與空表使用的環境一樣
直接在dunp窗口中進行跳轉到 0x360688處,此時發現快表為空。這也是為什么要反復申請釋放內存的原因,接下來分別申請 8,8,16,24字節的內存,然后進行釋放,(快表未滿時釋放到快表中)。  
先運行程序到地址 0x40109F處。此時直接觀察快表中的變化,此時發現讓然為空,下面運行釋放程序,直接單步執行命令運行到地址:0x401106處,這是觀察快表的變化如圖所示:

運行程序到地址 0x40110D處觀察堆塊是否鏈如塊表:
  
如上圖所示h1 - h4已經鏈接進入塊表中并且都是處于占用態。 地址 0x361e90指向下一個堆塊(因為h1 h2 同時為八字節的空閑堆塊) 
當程序運行到地址 0x401140時(也就是執行完申請內存的代碼時)   h2 = HeapAlloc(hp,HEAP_ZERO_MEMORY,16);
此時申請的堆塊應該從塊表中申請,此時查看堆表區的索引:
  

從以上兩圖中可以看到當繼續申請內存的時候,是從快表lookside[2]處卸下的堆塊。當釋放的時候,還是將空閑堆塊釋放到此處執行代碼:   HeapFree(hp,0,h2); 
執行完后繼續查看上圖中地址的值:

如圖所示:當釋放完堆塊后還是鏈接進入啦快表 looksize[2]
參考文檔《0day安全軟件漏洞的分析技術》     



熱門文章
  • 機械革命S1 PRO-02 開機不顯示 黑...
  • 聯想ThinkPad NM-C641上電掉電點不...
  • 三星一體激光打印機SCX-4521F維修...
  • 通過串口命令查看EMMC擦寫次數和判...
  • IIS 8 開啟 GZIP壓縮來減少網絡請求...
  • 索尼kd-49x7500e背光一半暗且閃爍 ...
  • 樓宇對講門禁讀卡異常維修,讀卡芯...
  • 新款海信電視機始終停留在開機界面...
  • 常見打印機清零步驟
  • 安裝驅動時提示不包含數字簽名的解...
  • 共享打印機需要密碼的解決方法
  • 圖解Windows 7系統快速共享打印機的...
  • 錦州廣廈電腦上門維修

    報修電話:13840665804  QQ:174984393 (聯系人:毛先生)   
    E-Mail:174984393@qq.com
    維修中心地址:錦州廣廈電腦城
    ICP備案/許可證號:遼ICP備2023002984號-1
    上門服務區域: 遼寧錦州市區
    主要業務: 修電腦,電腦修理,電腦維護,上門維修電腦,黑屏藍屏死機故障排除,無線上網設置,IT服務外包,局域網組建,ADSL共享上網,路由器設置,數據恢復,密碼破解,光盤刻錄制作等服務

    技術支持:微軟等
    正在播放日韩精品| 亚洲狼人综合网| 免费久久久久久| 国产精品美女视频网站| 91精品国产综合久久久蜜臀粉嫩| 99久久精品免费看| 日韩亚洲国产欧美| 欧美久久亚洲| 成人女同在线观看| y4480在线8影院| 欧美日韩**字幕一区| 加勒比在线一区| 黄色一级大片在线免费观看| 中文字幕第三区| 免费 成 人 黄 色| 日韩欧美一区二区视频在线播放 | 日韩精品一区二区久久| 色猫猫成人app| 人人澡人人添人人爽一区二区| 嘿咻视频在线看| 免费看美剧网站| 男人扒开美女尿口无遮挡图片| 精品一区二三区| 久久9999久久免费精品国产| 亚洲欧洲韩国日本视频| 日韩 欧美一区二区三区| 国产高清欧美| 国产精品亚洲二区| 精品一区二区三区亚洲| 五月天国产在线| 户外极限露出调教在线视频| 成r视频免费观看在线播放| 2018天天操夜夜操| 日本老妇乱子| 三级毛片网站| 成人欧美精品久久久久影院| 亚洲精品无遮挡| 一二区在线观看| 91看片在线播放| 国产一级在线播放| 久久精品www| 波兰性xxxxx极品hd| 亚洲AV无码国产成人久久| 好吊操视频这里只有精品| 91香蕉视频在线观看视频| 欧美丝袜在线观看| 成年网站免费在线观看| 免费网站在线观看黄| 三日本三级少妇三级99| 亚洲成人av免费观看| 91丝袜超薄交口足| 91精品国产三级| av漫画在线观看| 亚洲最大成人网站| 天堂av网手机版| 欧美日韩在线视频免费| 久久夜靖品2区| 综合久久中文字幕| 日韩少妇高潮抽搐| 伊人成年综合网| 亚洲av无码国产精品久久不卡| 国产91免费看| 久久久电影免费观看完整版| 欧美一区二区高清| 天天射综合网视频| 国产乱码精品一区二区三区四区 | 巨骚激情综合| 日本中文字幕伦在线观看| avav免费在线观看| 成人免费高清观看| 精品国产黄a∨片高清在线| 亚洲视频一起| 色婷婷一区二区三区| 亚洲三级国产| 国产一区二区免费视频| 国产网站一区二区| 亚洲成人av一区| 4hu四虎永久在线影院成人| 亚洲天堂色网站| 97在线观看免费| 成人性色av| 久久最新免费视频| 手机在线成人免费视频| 一级片视频免费看| 麻豆久久久久久久久久| 人成网站在线观看| 免费看a网站| 亚洲kkk444kkk在线观看| 人交獸av完整版在线观看| 亚洲人成777| 伊人久久大香线| 国产河南妇女毛片精品久久久| 国产精品国产三级国产aⅴ中文 | 午夜精品久久久久久久久| 精品粉嫩超白一线天av| 久久亚洲精品一区| 亚洲aⅴ日韩av电影在线观看 | 色综合视频二区偷拍在线| 激情内射人妻1区2区3区| 少妇毛片一区二区三区| 国产一区二区视频网站| 欧美四级剧情无删版影片| 三级国产三级在线| 超碰国产一区| 91精品电影| 91免费观看视频在线| 欧美巨大另类极品videosbest| 色综合久久久久久中文网| 日本不卡二区| 精品人妻二区中文字幕| 波多野结衣 久久| 丝袜脚交免费网站xx| 里番在线观看网站| 亚洲伊人春色| 成人h动漫精品一区二区| 欧美无砖专区一中文字| 2019中文字幕在线| 成人免费在线视频播放| 免费看特级毛片| 国产在线视精品麻豆| 国产露出视频在线观看| 女同久久另类99精品国产| 久久国产精品一区二区| 亚洲电影第1页| 国产大陆a不卡| 日韩欧美精品网址| 一区二区三区精品99久久 | 免费黄色片网站| 丰满熟妇乱又伦| 中文字幕免费在线| 国产 日韩 欧美| 久久成人精品无人区| 欧美色精品在线视频| 国产成人免费91av在线| 18岁网站在线观看| 日本午夜小视频| 五月婷婷丁香激情| 国产日韩另类视频一区| 美女露隐私免费网站| 欧美色网一区| 日本不卡一区二区三区| 欧美日韩在线播放三区| 成人精品在线观看| 91在线第一页| 免费a级片在线观看| 神马久久久久| 成人情趣视频| 亚洲精品福利视频网站| 久久99久国产精品黄毛片入口| 精品视频在线观看一区二区| 久草国产精品视频| 啦啦啦中文高清在线视频| 天堂俺去俺来也www久久婷婷 | 国产ts人妖一区二区| 亚洲第一色中文字幕| 日韩国产高清一区| 久久久久久激情| 日本调教视频在线观看| 精品一区在线| 亚洲影视资源网| 国产精品久久久一区| 日韩大尺度视频| 欧美free性| 四虎成人精品一区二区免费网站| 国产+成+人+亚洲欧洲自线| 国产婷婷97碰碰久久人人蜜臀| 国产精品av免费| 中国一级片黄色一级片黄| 岛国在线大片| 亚洲一区二区毛片| 日韩午夜激情免费电影| 一区二区三区偷拍| 午夜久久久久久久久久影院| yw视频在线观看| 日韩av电影天堂| 在线观看久久av| 亚洲色图久久久| 亚洲国产成人影院播放| 日韩在线你懂得| 亚洲激情图片小说视频| 91九色国产视频| 久草视频免费在线| 黄视频在线观看免费| 三级亚洲高清视频| 国产亚洲精品久久久优势| 污污视频网站免费观看| 久热中文字幕精品视频在线| 日本一区影院| 精品久久久久久中文字幕一区奶水 | 欧美自拍小视频| 欧美成人禁片在线观看网址| 136福利精品导航| 欧美日韩国产在线| 中日韩午夜理伦电影免费 | 日韩欧美一二三四区| 久久视频免费在线| 女人18毛片水真多18精品| 国产成人福利夜色影视| 亚洲自拍偷拍九九九| 日韩精品一线二线三线|