od調(diào)試筆記

反匯編窗口:

作用:ollydbg在這里顯示反匯編代碼

在此可以進(jìn)行調(diào)試

這里可以進(jìn)行關(guān)閉分析

寄存器窗口:

堆棧窗口:

數(shù)據(jù)窗口:

其他窗口:

第二章:

數(shù)制系統(tǒng)


最常用的數(shù)制系統(tǒng)是二進(jìn)制,十進(jìn)制和十六進(jìn)制距芬。了解它們霜瘪,最主要的你要知道是:


· 二進(jìn)制:只有符號0和1梆砸,因此稱為二進(jìn)制。

· 十進(jìn)制:出現(xiàn)10個字符(從0到9),因此稱為十進(jìn)制零截。

· 十六進(jìn)制:從0到F(0-9,A秃臣,B涧衙,C,D奥此,E和F弧哎,總共16個字符)。

通常稚虎,除非另有說明撤嫩,當(dāng)我們提及某一具體數(shù)字時都將其認(rèn)作十六進(jìn)制。我們不使用將數(shù)值從一種數(shù)制轉(zhuǎn)換為其它數(shù)制的令人不太愉快的數(shù)學(xué)公式蠢终。當(dāng)前序攘,Cracker們一般使用Windows自帶的計算器茴她,它將更加快捷和容易使用,以避免繁冗的工作程奠。

堆棧是什么丈牢?它是內(nèi)存的一塊區(qū)域,用于短暫存儲數(shù)據(jù)瞄沙,這些數(shù)據(jù)稍后不久就要恢復(fù)取出赡麦。就像在桌上放一疊信件或紙牌,最新的信件或紙牌都是放在最頂部帕识,如果一張張地取走信件或紙牌泛粹,總會從最上面的開始取。

第三章:

什么是寄存器肮疗,有什么作用

寄存器用來做什么晶姊,什么是寄存器?處理器在執(zhí)行程序時需要一個助手伪货。當(dāng)執(zhí)行一條指令時们衙,例如將兩個內(nèi)存單元中存放的內(nèi)容相加,處理器需要先把其中一個的內(nèi)容置入寄存器碱呼,然后再把另一個內(nèi)容置入蒙挑,這是使用寄存器的一個例子(寄存器是CPU內(nèi)部的高速存儲單元,訪問速度比常規(guī)內(nèi)存快很多愚臀。)

1.ESP指向堆棧最頂端的地址忆蚀,現(xiàn)在來看一下這個CrueHead'a CrackMe

2.

EIP – 另一個非常重要的寄存器,它指向當(dāng)前將要執(zhí)行的指令姑裂。

(F7是切換指令)馋袜;

在這里,顯示有EAX舶斧,ECX欣鳖,EDX,EBX茴厉,ESP泽台,EBP,ESI矾缓,EDI和EIP等

它們都被稱為32位寄存器怀酷。

什么是標(biāo)志寄存器


就像我們在第一章看到的,在OllyDbg寄存器信息的下方顯示的就是標(biāo)志寄存器而账。

1)O標(biāo)志(溢出標(biāo)志)溢出標(biāo)志在當(dāng)操作改變了符號位胰坟,返回錯誤值時被設(shè)置(譯注4)。看一下以下在OllyDbg中的例子笔横,同樣使用CrueHead'a的CrackMe竞滓。

我們按照前面講述的方法將EAX的值改為7FFFFFFF,即最大的正數(shù)吹缔。

2)A標(biāo)志(輔助進(jìn)位標(biāo)志)完成操作后商佑,用其它的某種形式對其進(jìn)行記錄。目前我們不需要關(guān)心此標(biāo)志厢塘。

3)P標(biāo)志(奇偶標(biāo)志)

如果指令的結(jié)果用二進(jìn)制表示茶没,該二進(jìn)制數(shù)中的1的總個數(shù)為偶數(shù)時,P標(biāo)志被設(shè)置晚碾。例如:1010抓半,1100,1111000.

4)Z標(biāo)志(零標(biāo)志)

這是在Cracking過程中最著名最有用的一個標(biāo)志格嘁。當(dāng)運算產(chǎn)生的結(jié)果為0時被設(shè)置笛求。

5)S標(biāo)志(符號標(biāo)志)

這個標(biāo)志在運算結(jié)果為負(fù)時設(shè)置為1。來看一下它是如何運作的糕簿,改變EAX的數(shù)值為FFFFFFF8探入,它等于十進(jìn)制-8

6)C標(biāo)志進(jìn)位標(biāo)志

(無符號運算的結(jié)果)在超過最大數(shù)值時設(shè)置,可能是寄存器的值懂诗,例如蜂嗽,將EAX設(shè)為FFFFFFFF,然后加1殃恒,我們會看到植旧,進(jìn)位標(biāo)志位設(shè)為1。

第四章:

NOP(無操作)

運行這條指令不會對寄存器,內(nèi)存以及堆棧造成任何影響,英文單詞的意思是”無操作”芋类,也就是說,它沒有特殊的用途隆嗅。例如界阁,你用一個短指令來替換一個長指令的話侯繁,如果處理器沒有錯誤,多余的空間將會被NOP填充。

PUSH

PUSH指令-將操作數(shù)壓入堆棧中泡躯。我們可以看到,CrueHead'а(CrackMe的作者)的CrackMe的第一條指令就是PUSH指令贮竟。

POP

POP指令是出棧:它會取出堆棧頂部的第一個字母或者第一個值,然后存放到指定的目標(biāo)地址內(nèi)存單元中。例如,POP EAX從棧頂中取出第一個值存放到EAX中,隨后的一個值隨即變成棧頂较剃。

PUSHAD

PUSHAD指令把所有通用寄存器的內(nèi)容按一定順序壓入到堆棧中,PUSHAD也就相當(dāng)于’PUSH EAX,PUSH ECX,PUSH EDX,PUSH EBX,PUSH ESP,PUSH EBP,PUSH ESI, PUSH EDI’咕别。

POPAD

該指令與PUSHAD正好相反,它從堆棧中取值,并將它們放到相應(yīng)的寄存器中。POPAD等價于“POP EDI,POP ESI,POP EBP,POP ESP,POP EBX,POP EDX,POP ECX,POP EAX”写穴。

MOV

該指令將第二個操作數(shù)賦值給第一個操作數(shù)

第五章:

INC和DEC

這兩個指令分別是執(zhí)行增加和減少的操作,如果是INC指令的話,就加1,如果是DEC指令的話,就減1惰拱。

我們跟之前一樣用OD打開cruehead的CrackMe。

ADD

ADD指令有兩個操作數(shù),相加后的結(jié)果存放到第一個操作數(shù)中啊送。ADD EAX,1等價于INC EAX偿短。ADD也將兩個寄存器相加,我們可以到OD里面看一看欣孤。

MUL(無符號數(shù)的乘法)

有兩種乘法,第一個種是MUL,這種是無符號數(shù)乘法,只有一個操作數(shù),另一個操作數(shù)是EAX,結(jié)果存放到EDX:EAX中。

例如:

邏輯指令

邏輯指令有兩個操作數(shù),兩操作數(shù)按位運算,并將結(jié)果存放到第一個操作數(shù)中昔逗。

AND

只有兩個二進(jìn)制位都為1的時候結(jié)果才為1,其他情況,結(jié)果都為0.

1 and 1 = 1

1 and 0 = 0

0 and 1 = 0

0 and 0 = 0

OR

該指令A(yù)ND的不同之處在于,兩位中只要有一位為1,結(jié)果就取1降传。

1 or 1 = 1

1 or 0 = 1

0 or 1 = 1

0 or 0 = 0

XOR

該指令時異或運算,當(dāng)兩位不同時取1,相同時取0。

1 xor 1 = 0

1 xor 0 = 1

0 xor 1 = 1

0 xor 0 = 0

NOT

該指令是簡單的按位取反勾怒。

not 1 = 0

not 0 = 1

第六章:

CMP

該指令是比較兩個操作數(shù),實際上,它相當(dāng)于SUB指令,但是相減的結(jié)構(gòu)并不保存到第一個操作數(shù)中婆排。只是根據(jù)相減的結(jié)果來改變零標(biāo)志位的,當(dāng)兩個操作數(shù)相等的時候,零標(biāo)志位置1。

JUMPS

所有的跳轉(zhuǎn)指令都會指向程序?qū)D(zhuǎn)到的地址笔链。我們在下面的列表中可以看到各種不同類型的跳轉(zhuǎn)指令段只。

JMP – 跳轉(zhuǎn)

JE, JZ – 結(jié)果為零則跳轉(zhuǎn)

JNE, JNZ – 結(jié)果不為零則跳轉(zhuǎn)

JS – 結(jié)果為負(fù)則跳轉(zhuǎn)

JNS – 結(jié)果不為負(fù)則跳轉(zhuǎn)

JP, JPE – 結(jié)果中1的個數(shù)為偶數(shù)則跳轉(zhuǎn)

JNP, JNPE – 結(jié)果為1的個數(shù)為奇數(shù)則跳轉(zhuǎn)

JO – 結(jié)果溢出了則跳轉(zhuǎn)

JNO – 結(jié)果沒有溢出則跳轉(zhuǎn)

JB, JNAE – 小于則跳轉(zhuǎn) (無符號數(shù))

JNB, JAE – 大于等于則跳轉(zhuǎn) (無符號數(shù))

JBE, JNA – 小于等于則跳轉(zhuǎn) (無符號數(shù))

JNBE, JA – 大于則跳轉(zhuǎn)(無符號數(shù))

JL, JNGE – ?小于則跳轉(zhuǎn) (有符號數(shù))

JNL, JGE – 大于等于則跳轉(zhuǎn) (有符號數(shù))

JLE, JNG – 小于等于則跳轉(zhuǎn) (有符號數(shù))

JNLE, JG – 大于則跳轉(zhuǎn)(有符號數(shù))

第七章:

call和ret

Call指令是將轉(zhuǎn)移到指定的子程序處,它的操作數(shù)就是給定的地址。

第八章:

MOV ECX,15h

將計數(shù)器初始化為循環(huán)次數(shù)15h鉴扫。接下來就是循環(huán)體了:

Label:

DEC ECX

該計數(shù)器每次遞減1翼悴。

其實就是循環(huán)體了,循環(huán)體里面可以是任意指令。

最后,你需要添加一個判斷計數(shù)器是否為0的指令以及條件跳轉(zhuǎn)指令幔妨。

CMP ECX,0

JNE Label

第一次判斷,計數(shù)器的值為14h,因為14h不為0,所以將繼續(xù)執(zhí)行循環(huán),以此類推,直到計數(shù)器為0為止鹦赎。

我們完整的來寫一遍上面的循環(huán):

XOR ECX,ECX

ADD ECX,15h

Label:

DEC ECX

;循環(huán)體

TEST ECX,ECX

JNE Label

第九章-第二十章:

普通斷點

這是一個很普通的斷點,我們前面章節(jié)已經(jīng)使用了。在SoftIce中我們可以使用BPX命令來設(shè)置斷點误堡。OD中可以使用BP命令或者F2快捷鍵來設(shè)置斷點古话。也可以再按一次F2快捷鍵來取消斷點。

Remove:從列表中刪除斷點锁施。

Disable:禁用斷點但并不將斷點從列表中刪除陪踩。禁用時,斷點并不會觸發(fā)。

Edit condition:給斷點設(shè)置觸發(fā)條件,我們后面再來討論悉抵。

Follow in disassembler:在反匯編窗口中顯示斷點肩狂。

Disable all or enable all:禁用/啟用列表中的全部斷點。這里沒有啟用的選項,因為列表中唯一的斷點沒有被禁用姥饰。

Copy to Clipboard:把選中斷點的信息復(fù)制到剪貼板傻谁。

內(nèi)存斷點

內(nèi)存訪問斷點有時候也稱之為BPM,但是不要與SoftIce中的BPM弄混淆了,這二者是完全不同的。

這種類型的斷點修改內(nèi)存頁的訪問屬性列粪。當(dāng)前我們設(shè)置了內(nèi)存斷點审磁。任何代碼訪問(讀,寫或者執(zhí)行代碼)了該處代碼的話,都會觸發(fā)異常。

硬件斷點

硬件斷點(簡稱:HBP)是處理器的特性之一,它的工作原理我不是很了解,但是我們會用就行了,我們可以設(shè)置硬件斷點使程序中斷下來岂座。

條件斷點

條件斷點實際上就是普通的CC斷點,只不過該斷點的觸發(fā)需要滿足設(shè)置的條件,如果滿足設(shè)置的條件,那么程序就會中斷下來,如果不滿足條件的話,就和沒有設(shè)置CC斷點差不多态蒂。

條件記錄斷點

條件記錄斷點跟剛剛介紹的條件斷點差不多,區(qū)別在于,我們可以通過設(shè)置該斷點來記錄下設(shè)置的條件的精確值。我們舉個例子,我們給一個API函數(shù)設(shè)置條件記錄斷點,程序中有很多地方調(diào)用了這個API函數(shù),通過該條件記錄斷點我們可以精確的記錄程序中每處調(diào)用該API函數(shù)傳遞給它的內(nèi)容费什。

Windows窗口程序至少有一個消息循環(huán),消息循環(huán)有特定的API函數(shù)構(gòu)成,最常見的是GetMessage和DispatchMessage函數(shù),有的消息循環(huán)也會用到其他的API函數(shù)钾恢。想要深入了解Windows的消息的話,可以參考下面的鏈接中的教程”理解消息循環(huán)”

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子瘩蚪,更是在濱河造成了極大的恐慌刑桑,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件募舟,死亡現(xiàn)場離奇詭異祠斧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)拱礁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門琢锋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人呢灶,你說我怎么就攤上這事吴超。” “怎么了鸯乃?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵鲸阻,是天一觀的道長。 經(jīng)常有香客問我缨睡,道長鸟悴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任奖年,我火速辦了婚禮细诸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘陋守。我一直安慰自己震贵,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布水评。 她就那樣靜靜地躺著猩系,像睡著了一般。 火紅的嫁衣襯著肌膚如雪中燥。 梳的紋絲不亂的頭發(fā)上寇甸,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機(jī)與錄音褪那,去河邊找鬼幽纷。 笑死,一個胖子當(dāng)著我的面吹牛博敬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播峰尝,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼偏窝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起祭往,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤伦意,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后硼补,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驮肉,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年已骇,在試婚紗的時候發(fā)現(xiàn)自己被綠了离钝。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡褪储,死狀恐怖卵渴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鲤竹,我是刑警寧澤浪读,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站辛藻,受9級特大地震影響碘橘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吱肌,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一蛹屿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧岩榆,春花似錦错负、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至粒褒,卻和暖如春识颊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奕坟。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工祥款, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人月杉。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓刃跛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親苛萎。 傳聞我的和親對象是個殘疾皇子桨昙,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容