吾愛破解 - LCG - LSG |安卓破解|病毒分析|破解軟件|www.aejguz.icu

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

搜索
查看: 1359|回復: 17
上一主題 下一主題

[調試逆向] 逆向工程日記之緩沖區溢出的基本原理(一)

  [復制鏈接]
跳轉到指定樓層
樓主
折木穆 發表于 2019-9-30 21:49 回帖獎勵

@TOC

前言

Hello,各位廣大的網友們好。筆者為大二在校大學生,軟件學院。為踐行費曼學習法,并在前輩的建議下開始寫自己的一系列博客,網上對于緩沖區溢出的例子基本在與Linux環境下操作。對未了解Linux內核以及常見操作指令的新手并不友好。鑒于此寫下此文。

實驗前提

  1. 實驗環境 :windows 10;
  2. 使用工具IDA pro , OllyDbg,vc6.0;
  3. 目標軟件 :test1.exe , test2.exe

所需基礎

基礎匯編指令

簡單C語言基礎

數據結構(僅堆棧)

即使上面基礎缺失,本文任有大量的注釋及解釋幫助理解。

概要

通過編寫兩個C例程序,使用工具OD,IDA pro進行逆向分析。針對匯編語句中CALL機制剖析緩沖區溢出的基本原理。

實驗開始

編寫實驗程序text1.exe  , text2.exe

text1.exe中C代碼如下:

#include<stdio.h>  //引入頭文件
#include<string.h>

char name[] = "zhemu";  //定義全局變量

int main()            //返回值 主函數main()
{
    char buffer[8];   //開辟8個字節的空間用來存儲變量name
    strcpy(buffer,name);  //內置函數(作用):將變量name內容賦值給buffer變量
    printf("%s\n",buffer);  //輸出在控制臺
    getchar();               //方便觀察 作用:等待用戶輸入按鍵
    return 0;                //返回值
}

text1.c中 ,變量name賦值給buffer后并未引起緩沖區溢出

text2.exe中C代碼如下:

#include<stdio.h>  //引入頭文件
#include<string.h>

char name[] = "zhemuzhemu";  //定義全局變量 !!多了個zhemu

int main()            //返回值 主函數main()
{
    char buffer[8];   //開辟8個字節的空間用來存儲變量name
    strcpy(buffer,name);  //內置函數(作用):將變量name內容賦值給buffer變量
    printf("%s\n",buffer);  //輸出在控制臺
    getchar();               //方便觀察 作用:等待用戶輸入按鍵
    return 0;                //返回值
}

text1.c中 ,變量name賦值給buffer后引起緩沖區溢出

對text1.exe進行逆向分析。

將vc6.0生成的debug版本exe拖入OllyDBG進行逆向分析

OllyDBG載入方式:
1.鼠標拖動exe進入到OD控件區域
2.文件-附加-選擇運行中的進程
第一次載入
!由于新版本的Visual Studio,微軟加入GS機制,防止緩沖區溢出的情況出現

由上圖:004015B0地址為軟件初始運行地址,并非main函數的起始地址。可通過F7/F8一步步運行至main函數所在地址。過于繁瑣,所以采用IDA快速定位main函數所在地址,如下圖:

在這里插入圖片描述
快速定位main函數所在地址
1.雙擊進入main
2.右鍵選擇Text View,初始默認為Graph View
可得main函數地址如下圖:
在這里插入圖片描述
4.IDA 快捷鍵Ctrl+x 定位上一層交叉引用。(簡單理解就是從哪里來 ,誰調用它)
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
由此可知,開始main函數上一個地址00401693,重返OD進行堆棧溢出研究
在這里插入圖片描述
通過OD中快捷鍵Ctrl+G快速定位到call函數上一條指令地址,快捷鍵F2對00401693下斷點,快捷鍵F9讓調試直接運行到此處代碼。 同時也可以按F4運行于此!

在這里插入圖片描述
F8步過程序,留意右下角棧區調用情況。
調用CALL函數:
1.將CALL下一個地址壓入棧(00401694)
2.jmp CALL

在這里插入圖片描述
由上圖: 壓入棧區為地址(00401694)返回地址。重要關鍵地方
筆者在右下角棧區設置轉換為ASCII數據 方便觀察

在這里插入圖片描述
新手可以忽略之前棧平衡以及棧區開辟空間指令,由地址00401030可知,此時與C語言代碼對應開始,將ASCII壓入棧區,并進行strcpy賦值操作。

對匯編認識可以初步認識此步驟,重點在于調用完CALL之后返回到初始地址下一條

來到call函數調用返回所在位置:

在這里插入圖片描述
可以看出retn返回的地方棧區棧頂指向的地址為:00401699 call函數調用完下一指令

OK,到此為止我們了解了一個CALL函數調用的基本過程,直接進入text2.exe分析,當堆棧溢出棧區會發生什么呢?

對text2.exe進行逆向分析。

步驟不多累贅與text1.exe完全一摸一樣,唯一不一樣在于棧區返回地址被溢出(占用)
在這里插入圖片描述
由上圖可知:
1.原本改返回值:00401699地址被占用 且指向錯誤的地址(或不應該的地址)

緩沖區溢出漏洞原理總結

至此,大家應該已經了解了緩沖區溢出漏洞的原理,它就是因為我們輸入了過長的字符,而緩沖區本身又沒有有效的驗證機制,導致過長的字符將返回地址覆蓋掉了,當我們的函數需要返回的時候,由于此時的返回地址是一個無效地址,因此導致程序出錯。
那么依據這個原理,假設我們所覆蓋的返回地址是一個有效地址,而在該地址處又包含著有效的指令,那么我們的系統就會毫不猶豫地跳到該地址處去執行指令。因此,如果想利用緩沖區溢出的漏洞,我們就可以構造出一個有效地址出來,然后將我們想讓計算機執行的代碼寫入該地址,這樣一來,我們就通過程序的漏洞,讓計算機執行了我們自己編寫的程序。

本文其中例子與實例深受i春秋啟發,并進行歸納總結,筆者才學疏淺,若有錯誤之處歡迎指出

免費評分

參與人數 9威望 +2 吾愛幣 +14 熱心值 +8 收起 理由
Hmily + 2 + 7 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
q59541511 + 1 + 1 終于知道啥是緩沖區溢出漏洞
skrboy + 1 [email protected]
qaz003 + 1 + 1 謝謝分享,麻煩移步13樓
sunnylds7 + 1 + 1 熱心回復!
yns + 1 + 1 我很贊同!
天空藍 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
s_qiu + 1 + 1 用心討論,共獲提升!
snatch2null + 1 用心討論,共獲提升!

查看全部評分

發帖前要善用論壇搜索功能,那里可能會有你要找的答案或者已經有人發布過相同內容了,請勿重復發帖。

推薦
 樓主| 折木穆 發表于 2019-10-4 09:41 <
CalvinMcCain 發表于 2019-10-4 05:20
樓主能否提供test1.exe test2.exe資源鏈接,想自己動手實踐學習一下

相應的代碼都在文章中,可以自己下載個C語言的編譯器自己動手操作一下,效果會好很多
推薦
 樓主| 折木穆 發表于 2019-10-4 14:15 <
qaz003 發表于 2019-10-4 12:39
謝謝分享,辛苦了。。。
感覺上面的地方有點筆誤。。
復制粘貼惹的禍

  感謝糾正

免費評分

參與人數 1熱心值 +1 收起 理由
qaz003 + 1 熱心回復!

查看全部評分

沙發
xixicoco 發表于 2019-10-2 19:13
3#
baolei1988 發表于 2019-10-2 19:38
原理很重要
感謝講解
4#
死循環 發表于 2019-10-2 20:20
感覺可以
5#
a1545515 發表于 2019-10-3 14:54
學習一下菜鳥路過
6#
SherryMefum 發表于 2019-10-3 15:17
據說高手都用VC6。
7#
隱與匿 發表于 2019-10-3 16:00

謝謝分享啦
8#
yns 發表于 2019-10-3 16:00
很詳細,多謝樓主了
9#
LOLQAQ 發表于 2019-10-3 17:45
感謝樓主分享!
10#
CalvinMcCain 發表于 2019-10-4 05:20
樓主能否提供test1.exe test2.exe資源鏈接,想自己動手實踐學習一下
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則 警告:禁止回復與主題無關內容,違者重罰!

快速回復 收藏帖子 返回列表 搜索

RSS訂閱|小黑屋|聯系我們|吾愛破解 - LCG - LSG ( 京ICP備16042023號 | 京公網安備 11010502030087號 )

GMT+8, 2019-10-21 01:01

Powered by Discuz!

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表
宝盈娱乐平台