iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 25
1
Security

資安0~100K只要30天系列 第 25

Day 25 - 逆向會被開罰單哦 (一)

  • 分享至 

  • xImage
  •  

逆向工程

一個在資安中非常重要的一大分類
對於這項技術相信各位一定都不陌生
應該說跟大家都息息相關
因為你各位阿如果有在用所謂的 "破解版軟體"
其實都是出自於這項技術喔~

執行檔

在 windows 中叫做 PE 格式的 exe
在 linux 中叫做 ELF
經由原始碼編譯後所產生的二進位檔案

例如我們將這份 .c 編譯後產生的執行檔放到文字編輯器中看看

就會看到一堆十六進位
然後什麼都看不懂

這種東西稱為機器碼
是給電腦看的

透過一些工具例如 IDA, Ghidra, GDB 等
可以將這種一堆數字轉換成人類看得懂組合語言 (Assembly)
以下用 IDA 當作範例

有沒有發現比上面的一堆十六進位親切多了呢

組語

而在逆向工程中
因為不太可能獲得該支程式的原始碼
所以必須透過看組合語言的方式
盡量還原出原本的邏輯
找出其中的漏洞或是可被我們利用的部分

在這之中最重要的就是組語的能力了
因為看不懂也別想逆東西XD

這邊就介紹幾個重要的指令以及觀念

暫存器

在組語中
與一般高階語言不同
每一個運算都需要透過 register 這個東西
在不同的架構中有不同數量的暫存器可以使用
且每個暫存器都有屬於它的重要功能

底下使用 X86 架構的組語來當作範例

  • 通用暫存器
    • AX
      • 算數運算的暫存器
    • BX
      • 基址暫存器
    • CX
      • 計數器暫存器
    • DX
      • 資料暫存器
    • SP
      • 指向 stack 頂端的暫存器
    • BP
      • 指向 stack 底部的暫存器
    • IP
      • 指向下一行組語指令位址

這些通用暫存器都為 16 bit 的版本
如果是 32 bit 的暫存器會統一在前面加上 E
例如 EAX

如果是 64 bit 會加上 R
例如 RAX

X 結尾的暫存器又可以切成更小的 8 bit 版本
AX 當例子
切出來的兩個分別叫做 AHAL
分別為原本的高位 (High) 與低位 (Low)

指令

有太多了
實在沒辦法一一列舉
可以到這邊有詳細的說明 點我

明天的教學
會用一個簡單的逆向 CTF 帶大家熟悉組語的操作


上一篇
Day 24 - 現代密碼 (二)
下一篇
Day 26 - 逆向會被開罰單哦 (二)
系列文
資安0~100K只要30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言