【資安淺談】揭密程式在底層的運作原理
相信大家都知道電腦裡可以「跑」的東西叫程式吧!!!(廢話)那大家都知道任何的資料(包括程式、圖檔等...)存放在電腦底層都是0和1吧!!因為如此一來只須找到一種物質能輕易保持兩種型態就可以拿來做為電腦的晶片了,事情當然是越簡單越好嘛!因為廠商很懶...不是,是因為越簡單越好控制,也可以越做越小...哀,扯太遠了,拉回來。好,所以現在我們知道程式是
由1和0所組成...ㄟ,不對阿,我看駭都可以打一些程式碼...不用廢話,就是1跟0,我知道,一定沒人看得懂1、0阿,所以我們假設有一對資料長這樣:
1001101100011001(我亂打的)
我們先將它分成八個一組,以上就可分成兩組,再把每一組轉換成16近位,...
「殺小??神麼死六進位?」
我們一般常用的數字是0~9,這是十近位,十六進位就是0~f,不懂的話上網查一下就有,繼續,我們把程式『翻譯』成十六進位候,大概長這樣:
1 2 3 4 5 6 7 | #include <iostream> #include <stdlib.h> using namespace std; int main(){ cout<<"Hello World!\n"; system("pause"); } |
這東西是給CPU去執行的,一個指令一個動作,指令就是指op code,但...你還是看不懂對不對?正常,好的,在介紹完基本的概念後就可以開始講幹話拉...不是,是介紹主題啦!接下來我們把程式放到olly dbg裡面看看
請注意
你可以點擊圖片放大,沒錯,你看到Hello World!這串字,在來看左邊數來第二欄,那不就是剛剛說的機械碼嗎?
在看看最左邊,那坨是記憶體位置,今天的重頭戲來啦,程式在開啟時會被載入到記憶體(統稱RAM,「隨機存取記憶體」),而那些記憶體位址就是告訴CPU要去哪裡找指令,也就是找在記憶體某處的機械碼,olly dbg很貼心的幫我們把那一坨拉庫的東西排好,讓我們知道哪個記憶體位置對應到哪個機械碼且對應到哪個組合語言指令...
「等等,組合屋?...不對,組合什麼?」
組合語言是一種由一些簡單的指令所構成的一種低階程式語言,不是說他很爛,資深的資安人員都知他很重要,他是介於火星文班的機械碼和英文之間的電腦語言,每個組合語言指令都會對應到一串或一個機械碼,組語的可讀性又比機械碼高,所以在駭客們眼中算是很重要的一種語言,精通組語的可少的呢,比起像Java這種高階語言,組語還是難了些,不過沒差,你會讀就好,不用會寫啦!!
關於在olly dbg顯示的其他數值之後會一一解釋,總而言之,今天你至少知道成是在執行時會被載入到記憶體,然後CPU會根據"地址"去找尋"火星文",再來執行指令,這就是本文的主旨啦!!!(我是這麼以為,你若有其他想法不妨提出啦)
0 意見