菜鳥的ollydbg1.08b教學篇 (10千字)
寫之前先說點廢話(誰扔的香蕉皮,雞蛋^^^^^^^^^^^):
ollydbg是個功能強大的軟體,以前我也不用他(不習慣),而且很多經典教程都是用trw和softice作為示例工具寫的.
初學者(注:和我一樣的人)往往一開始就接觸這些工具,做練習也就用這些工具!可以說已經上手了!
對ollydbg的動態除錯功能也就陌生了!
現在一個很現實的問題讓我改變了習慣,我的鍵盤滑鼠是usb的,顯示器也給我作對!trw和softice都用不成!
無奈只好學用ollydbg.發現這個東西實在太好了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*動態除錯的時候還能聽歌聊天泡MM(TRW,SOFTICE只能對黑屏)
*除錯方便,又有函式參考,可以隨意加註釋,輕鬆複製,清楚看到堆疊的變化^^^^^^^
*介面優美,可以隨意設定背景顏色!
*有強大的右鍵功能,使用起來特別方便!(特別適合老人小孩使用~~~~)
*說不出來了~~~其他的優點你自己去發掘吧!!!
我是一隻大菜鳥,接觸破沒多長時間,腦子也不怎麼靈光,水平低得可憐,說的不對的地方請高手指正!!!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~OLLYDBG簡介~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
現在就讓我這隻菜鳥給菜鳥們介紹一下:
1*工作介面:(我們從上往下看)
看到標題欄,選單欄和工具欄(不用讓我做名詞解釋了吧!)
記住:工具欄的所有功能都能在選單欄裡找到,工具欄是選單欄的快捷按鈕(廢話!)
各項詳細功能我們在下面說!
再往下看有四個視窗他們是程式碼窗(左上),暫存器視窗(右上),記憶體視窗(左下)和堆疊視窗(右下)
2*選單欄各項命令功能
*檔案(F)----這些命令用說嗎?
|____注意**該選單的下部有你上次開啟的紀錄,該紀錄儲存有你上次未清除的斷點**注意**
*檢視(V)------這個選單我只介紹一下我常用的,別的我不會!:-)
|____執行模組(快捷鍵ALT+E):檢視該程式使用的動態連線庫(我的理解)
|
|____斷點(快捷鍵ALT+B):這個是檢視你所有的斷點,(有時自己設到哪裡都忘了,可以看一下)起到一個輔助功能.
我就會這麼多!:-(
*除錯(D)-------這個選單是關鍵,不明白你就別除錯軟體了!也只說常用的!
|_______執行(F9)載入程式後,執行!
|
|_______暫停(F12)
|
|_______單步進入(F7)遇見CALL就進!進入該子程!行話:"跟進去"
|
|______單步跳過(F8)遇見CALL不進去!不去管子程的內部!第一次粗跟的時候常用!
|
|______執行到返回(ALT+F9)就是執行到該子程的返回語句!
剩下的選單不重要~我也不費口舌了~~~我是"天下第一懶"(乾隆皇帝賜給我的名號)
知道這麼多就能開工了~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~例項分析~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
目標:FlashPT 2.1 Build 3067
破解人:winroot
工具:PEiD,W32DASM,ASPACKDIE,OLLYDBG
目的:一篇ollydbg的教程,軟體相對簡單!
下載地址:http://www.softreg.com.cn/shareware_view.asp?id=/4C7E305E-226A-43B9-98D2-BE0410D46806/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~破解過程~~~~~~~~~~~~~~~~~~~~~~~~~~~~
破解過程:
該軟體安裝後有3各元件隨便註冊哪一個都一樣.
我選擇Flash轉換解密
1*PEiD查殼,ASPack
2.12 -> Alexey Solodovnikov
2*使用ASPACKDIE脫殼.脫殼後檔名為unpacked.exe
3*使用W32DASM反編譯進行靜態分析!
載入unpacked.exe-->反編譯-->點選單欄的"參考"選擇字串資料參考
找到"註冊碼錯誤,請重新輸入!"雙擊我們來到
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004D1174(C)
| ~~~~~~~~~~~~~~~~~~~~是從這裡跳過來的,我們就到這裡看看
:004D120D
6A00 push
00000000
* Possible StringData Ref from Code Obj ->"提示"
|
:004D120F B974124D00
mov ecx, 004D1274
* Possible StringData Ref from
Code Obj ->"註冊碼錯誤,請重新輸入!"
#######################我們來到了004D1174#############################
:004D116B 8B55E4
mov edx, dword ptr [ebp-1C]
:004D116E 58
pop eax
:004D116F E8C42CF3FF
call 00403E38
:004D1174 0F8593000000
jne 004D120D
;看到了吧!就是從這裡我們走向了死亡!
~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~
:004D117A B201
mov dl, 01
:004D117C A1DCCA4400
mov eax, dword ptr [0044CADC]
:004D1181
E856BAF7FF call 0044CBDC
:004D1186 8BD8
mov ebx, eax
:004D1188 BA02000080
mov edx, 80000002
:004D118D 8BC3
mov eax, ebx
:004D118F E8E8BAF7FF
call 0044CC7C
:004D1194 B101
mov cl, 01
* Possible StringData Ref from Code Obj ->"software\microsoft\windows\currentversion\chan"
->"gid"
|
:004D1196 BA98124D00
mov edx, 004D1298
:004D119B 8BC3
mov eax, ebx
:004D119D E83EBBF7FF
call 0044CCE0
:004D11A2 84C0
test al, al
:004D11A4 745E
je 004D1204
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~省略部分程式碼
* Possible StringData
Ref from Code Obj ->"提示"
|
:004D11E2
B974124D00 mov ecx, 004D1274
* Possible StringData Ref from Code Obj ->"註冊成功!謝謝您使用本軟體!
程式需要重新啟動"
~~~~~~~~~~~~~~~~~~~~~~~~~~*****爆破******~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
爆破就是爆著破:-)
看一下我們的分析:
:004D1174 0F8593000000
jne 004D120D
;看到了吧!就是從這裡我們走向了死亡!
那我們就不走這裡了!他jne我們就改成je
*開工!!!!!!!!!!!
*首先,執行ollydbg載入脫殼後的unpacked.exe找到地址004D1174
004D1174 0F85
93000000 JNZ UNPACKED.004D120D
咦!!!!!!!怎麼變成jnz了?(我也不知道為什麼)但他與爆破無關!我們把他改成jz就能起到一樣的效果
1)我們雙擊這裡: JNZ UNPACKED.004D120D是改變它的彙編程式碼___________________注{
2)我們把他改成JZ
004D120D 點彙編後,他就變紅了 再點取消!
{
3)然後右鍵單擊JZ 004D120D選擇"複製到可執行檔案"
{雙擊位址列是絕對地址和相對地址的轉換
4)這時彈出一個視窗最上面就是000D1174 0F84 93000000 JE 000D120D
{ 例如:我們雙擊004D1174 就會變成$ ==>
我們再右鍵單擊JE 000D120D選擇"儲存檔案"
{ 雙擊機器碼欄就是設這個地址為斷點
5)輸入你設想的檔名就可以了
{例如:雙擊0F85
93000000我們可以看到變紅了
6)執行,呵呵!!已註冊!
{說明我們已經把004D1174設定為斷點再雙擊就恢復
~~~~~~~~~~~~~~~~~~~~~~~~~***爆破結束***~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
經過上面的過程
如果你覺得不過癮就到登錄檔HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\changid
刪除該鍵的鍵值(如果已註冊沒註冊就不用了)
我們繼續這次我們要動態分析了~~
################################動態分析###################################
動態分析的前提就是靜態分析,我們回過頭看一下靜態分析的結果
:004D116B 8B55E4
mov edx, dword ptr [ebp-1C]
:004D116E
58
pop eax
:004D116F E8C42CF3FF
call 00403E38 //這個是比較的call
:004D1174 0F8593000000
jne 004D120D
那麼我們就在004D116B設定斷點吧~~~
F2或者雙擊機器碼欄設定斷點---F9(執行)--輸入使用者名稱winroot,獲取ID,ID號碼4835812338,點選註冊,
程式被OLLYDBG攔截,
乖乖~~
你猜我們看見了什麼!!!!一串數字耶!!!3230027325再往右下看堆疊視窗一行ID號碼4835812338,一行3230027325
你看他那張臉,長得都像註冊碼~~~
退出來試一下~~~你快看我的臉 :-)
呵呵~~~~成功~~~
記憶體序號產生器你就自己作吧~鍛鍊一下!
##################################################################
破的還不過癮~~~~~~~~!!!
怎麼辦?
crack的宗旨就是製作出keygen
下面我們就來試一下,
首先還的分析~~透過上面的動態分析我們知道序列號的生成肯定在004D116B上面的某一段程式,
~如何確定只有跟蹤,看註冊碼最新一次是在哪個地方出現!
所以我們再向上看的時候發現了一個迴圈!非常可疑,下斷點跟蹤!
(ollydbg會把迴圈標出來!)
004D10EA |. C745 F0 000000>MOV DWORD PTR SS:[EBP-10],0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~F2或者雙擊機器碼欄設定斷點-
--F9(執行)--輸入使用者名稱winroot,獲取ID,ID號碼4835812338,點選註冊,程式被OLLYDBG攔截.
我們按F8(單步跳過)一下一下地執行,注意觀察暫存器和堆疊的變化!!
004D10F1 |. C745 F4 000000>MOV DWORD PTR SS:[EBP-C],0
004D10F8
|. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004D10FB
|. E8 282CF3FF CALL UNPACKED.00403D28
004D1100 |. 8BF0
MOV ESI,EAX
004D1102 |. 85F6
TEST ESI,ESI
004D1104 |. 7E 2D
JLE SHORT UNPACKED.004D1133
004D1106 |. BB 01000000
MOV EBX,1
//計數器
004D110B |> 8B45 FC /MOV EAX,DWORD
PTR SS:[EBP-4]//取id字串
004D110E |. 807C18 FF 00 |CMP BYTE PTR
DS:[EAX+EBX-1],0
004D1113 |. 74 1A
|JE SHORT UNPACKED.004D112F //是零就跳!
004D1115 |. 8B45 FC
|MOV EAX,DWORD PTR SS:[EBP-4]//EAX=STR
004D1118
|. 8A4418 FF |MOV AL,BYTE PTR DS:[EAX+EBX-1]//AL=STR[EBX-1]
004D111C |. 25 FF000000 |AND EAX,0FF
004D1121
|. 33D2 |XOR EDX,EDX
004D1123 |.
0345 F0 |ADD EAX,DWORD PTR SS:[EBP-10]//和第一次的值相加
004D1126 |. 1355 F4 |ADC EDX,DWORD PTR SS:[EBP-C]
004D1129 |. 8945 F0 |MOV DWORD PTR SS:[EBP-10],EAX//存進去
004D112C |. 8955 F4 |MOV DWORD PTR SS:[EBP-C],EDX
004D112F |> 43 |INC EBX//計數器加1
004D1130 |. 4E |DEC ESI
004D1131 |.^75 D8 \JNZ SHORT UNPACKED.004D110B//迴圈取累加和
004D1133 |> 6A 00 PUSH 0
004D1135 |.
68 F1E05D00 PUSH 5DE0F1
//入棧
004D113A |. 8B45 F0
MOV EAX,DWORD PTR SS:[EBP-10]//取序列號的累加和
004D113D |. 8B55 F4
MOV EDX,DWORD PTR SS:[EBP-C]
004D1140 |. E8 874FF3FF
CALL UNPACKED.004060CC //累加和*0x5DE0F1
004D1145
|. 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX
004D1148
|. 8955 F4 MOV DWORD PTR SS:[EBP-C],EDX
004D114B
|. 8D55 E8 LEA EDX,DWORD PTR SS:[EBP-18]
004D114E
|. 8B87 F8020000 MOV EAX,DWORD PTR DS:[EDI+2F8]
004D1154 |. E8
B7D3FBFF CALL UNPACKED.0048E510 //變成10進位制--真序列號
004D1159 |. 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18]
//取假序列號的字串
004D115C |. 50
PUSH EAX
004D115D |. FF75 F4 PUSH DWORD
PTR SS:[EBP-C] ; /Arg2;返回值
004D1160 |. FF75 F0 PUSH DWORD PTR SS:[EBP-10]
; |Arg1;序列號
004D1163 |. 8D45
E4 LEA EAX,DWORD PTR SS:[EBP-1C]
; |
004D1166 |. E8 0574F3FF CALL
UNPACKED.00408570
; \UNPACKED.00408570
004D116B |. 8B55 E4
MOV EDX,DWORD PTR SS:[EBP-1C]
004D116E |. 58
POP EAX
004D116F |. E8 C42CF3FF CALL UNPACKED.00403E38//比較
004D1174 |. 0F85 93000000 JNZ UNPACKED.004D120D//跳出錯誤
注意:所有的註釋都是你跟蹤以後根據暫存器和堆疊的變化得出的!也不是在一次跟蹤中得出的,是跟蹤了多次後得出的結論!
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
結論:我們可以看出序列號是這樣產生的,ID的每一位的ASCII值的累加和再和0x5DE0F1相乘得出的值轉化為10進位制形成序列號~~
所以
name:winroot
id:4835812338
ser=[(0x34+0x38+0x33+0x35+0x38+0x31+0x32+0x33+0x33+0x38)*0x5DE0F1]
=[C0864E3D] =[3230027325]
16 16
10
簡單吧~~
希望我們菜鳥群能出幾個高手~~能寫出來最好的教程,不像我這樣~~貽誤他人~
菜鳥心得:
crack是門操作性很大的學問,所以一定要動手,
看到好的文章一定要試一下自己就會有更深一步的體會,不要看到別人寫過了就不去破了.
學習來不得半點虛假!
相關文章
- 菜鳥教學--密碼學概述 (10千字)2015-11-15密碼學
- 菜鳥破解一篇:vcrkme01 (11千字)2001-10-19
- 一個菜鳥對密碼學的理解 (4千字)2015-11-15密碼學
- 【菜鳥學Java】10:Cookie技術2016-01-18JavaCookie
- 菜鳥請教rbac的基礎知識2005-02-01
- IT菜鳥的學習生活2012-06-08
- 從菜鳥到專家 vi編輯器全程教學2011-02-28
- 菜鳥破解錄(10)之 A Day in the Life 1.51
(6千字)2000-07-23
- 菜鳥也玩mysql之學習筆記篇2017-11-08MySql筆記
- 菜鳥學破解(七)之 PowerZip V5.2 (3千字)2000-07-21
- MySQL索引基礎--菜鳥篇2014-01-03MySql索引
- 菜鳥破解錄(12)之 AxMan3.10 (3千字)2000-07-26
- 菜鳥破解錄之 The Cleaner (4千字)2000-08-12
- 菜鳥破解錄之 DlgXRSizer (4千字)2000-08-17
- 菜鳥的資訊保安學習之路2020-08-15
- 菜鳥學習寫的Ioc工具2013-03-27
- 2個菜鳥級軟體 (1千字)2001-03-26
- 菜鳥破解錄之 Animated Screen (4千字)2000-08-13
- 菜鳥破解錄之 CleanReg 3.2.6 (3千字)2000-08-15
- 菜鳥破解錄之 AutoDialogs (3千字)2000-08-18
- 菜鳥學Linux 第111篇筆記 Memory2017-11-20Linux筆記
- 菜鳥學Linux第055篇筆記php基礎2017-11-13Linux筆記PHP
- vcasm的多程式反跟蹤技術學習心得(菜鳥篇)2004-12-15ASM
- 菜鳥之作--FanPlayer
V1.8--(FCG的一篇作業)在看雪論壇學習的成果 (13千字)2002-05-27
- 跟著菜鳥學python2020-11-13Python
- 菜鳥學Java(十七)——Jboss瘦身2014-01-28Java
- 菜鳥學Java(十八)——異常2014-03-31Java
- 菜鳥學習SQL注射(轉)2007-08-11SQL
- 菜鳥學Java(九)——Servlet的基本配置2013-08-14JavaServlet
- 菜鳥破解錄(九)之 CDSpace 1.95 (4千字)2000-07-22
- 菜鳥破解錄(17)之 BackupXpress Pro (3千字)2000-08-05
- 菜鳥破解錄(19)之 XMLwriter 1.21 (9千字)2000-08-08XML
- SuperCleaner演算法分析----菜鳥級
(12千字)2015-11-15演算法
- 網站設計菜鳥得到的6個慘痛教訓2012-08-27網站
- Linux“菜鳥”到“菜鳥的一些建議2020-10-15Linux
- 鳥哥私房菜-基礎篇小筆記2018-05-31筆記
- JVM菜鳥進階高手之路十四:分析篇2017-11-27JVM
- 菜鳥破解錄 JPEG Optimizer3.15 (6千字)2000-08-14