破解-小甲魚筆記-15

通過設(shè)置killtimer關(guān)鍵字函數(shù)斷點(diǎn)進(jìn)行尋找突破口

斷點(diǎn)設(shè)置完成之后灶伊,開始運(yùn)行軟件援制,直到運(yùn)行到我們想看到的輸入注冊(cè)碼窗口赠摇,后輸入錯(cuò)誤的注冊(cè)碼,進(jìn)行測(cè)試

輸入完成之后OD上顯示斷點(diǎn)的位置如下:

004DC19D > \83F8 03 cmp eax,0x3
004DC1A0 . 75 1E jnz short DVDMenuS.004DC1C0
004DC1A2 . 8B57 1C mov edx,dword ptr ds:[edi+0x1C] ; Case 3 of switch 004DBDA4
004DC1A5 . 50 push eax ; /TimerID = 0x3
004DC1A6 . 52 push edx ; |hWnd = 00080D4C ('DVD Menu Studio - [Untitled]',class='Afx:400000:8:10003:0:1560cb3')
004DC1A7 . FF15 B4575E00 call dword ptr ds:[<&USER32.KillTimer>] ; \KillTimer
004DC1AD . 6A 00 push 0x0
004DC1AF . 6A 00 push 0x0
004DC1B1 . 68 5C666400 push DVDMenuS.0064665C ; ASCII "The registration code seems to be not valid.\nPlease check if you didn't made any mistake."
004DC1B6 . E8 919D0D00 call DVDMenuS.005B5F4C
004DC1BB . E9 B7000000 jmp DVDMenuS.004DC277
004DC1C0 > 83F8 04 cmp eax,0x4
004DC1C3 . 75 1E jnz short DVDMenuS.004DC1E3
004DC1C5 . 50 push eax ; /TimerID = 0x3; Case 4 of switch 004DBDA4
004DC1C6 . 8B47 1C mov eax,dword ptr ds:[edi+0x1C] ; |
004DC1C9 . 50 push eax ; |hWnd = 00000003
004DC1CA . FF15 B4575E00 call dword ptr ds:[<&USER32.KillTimer>] ; \KillTimer
004DC1D0 . 6A 00 push 0x0
004DC1D2 . 6A 00 push 0x0
004DC1D4 . 68 FC656400 push DVDMenuS.006465FC ; ASCII "Thank you for your support!\nPlease Exit the Software and start it again to validate the code."
004DC1D9 . E8 6E9D0D00 call DVDMenuS.005B5F4C
004DC1DE . E9 94000000 jmp DVDMenuS.004DC277
004DC1E3 > 83F8 05 cmp eax,0x5
004DC1E6 . 75 15 jnz short DVDMenuS.004DC1FD

此時(shí)發(fā)現(xiàn)注冊(cè)成功的標(biāo)志位置:

004DC1D4 . 68 FC656400 push DVDMenuS.006465FC ; ASCII "Thank you for your support!\nPlease Exit the Software and start it again to validate the code."

那通過觀察上下匯編指令区拳,可知要讓其在等于4的時(shí)候成立拘领,做到j(luò)nz指令不跳轉(zhuǎn)從而實(shí)現(xiàn)破解成功。

這是主體實(shí)現(xiàn)破解成功思路樱调。

通過分析约素,我門要找其根源,那么我們就跟進(jìn)下去本涕,從比較條件為3的時(shí)候向上跟蹤业汰。

004DC19D > \83F8 03 cmp eax,0x3

從此處開始, 發(fā)現(xiàn)其跳轉(zhuǎn)來自eax=00000003
跳轉(zhuǎn)來自 004DC04C

通過操作跳轉(zhuǎn)如下:

004DC049 > \83F8 02 cmp eax,0x2
004DC04C . 0F85 4B010000 jnz DVDMenuS.004DC19D

再根據(jù)其條件不等于2 查看跳轉(zhuǎn)來自的地址進(jìn)行回溯跟蹤菩颖。

004DC049 > \83F8 02 cmp eax,0x2
eax=00000003
跳轉(zhuǎn)來自 004DBE01

跳轉(zhuǎn)到下面

004DBDFE > \83F8 07 cmp eax,0x7
004DBE01 . 0F85 42020000 jnz DVDMenuS.004DC049

同上

004DBDFE > \83F8 07 cmp eax,0x7
eax=00000003
跳轉(zhuǎn)來自 004DBDA9

跳轉(zhuǎn)如下:

004DBDA4 . 83F8 01 cmp eax,0x1 ; Switch (cases 1..B)
004DBDA7 . 8BF9 mov edi,ecx
004DBDA9 . 75 53 jnz short DVDMenuS.004DBDFE
004DBDAB . 50 push eax ; /TimerID = 0x3; Case 1 of switch 004DBDA4

此時(shí)發(fā)現(xiàn)跳轉(zhuǎn)到程序的開頭入口點(diǎn)

使用的是switch 語(yǔ)句結(jié)構(gòu)進(jìn)行跳轉(zhuǎn)样漆,跳轉(zhuǎn)條件從1-B

在程序的開頭設(shè)置斷點(diǎn),重新跑程序晦闰,查看程序運(yùn)行過程的eax的值這么發(fā)送變化的放祟。

觀察可知,程序通過switch循環(huán)呻右,進(jìn)行判斷跪妥,當(dāng)輸入錯(cuò)誤的注冊(cè)碼時(shí),eax=3声滥,那么程序運(yùn)行到這個(gè)位置和3進(jìn)行比較相等眉撵,那么就跳轉(zhuǎn),
執(zhí)行到錯(cuò)誤提示的位置如下:

004DC1D4 . 68 FC656400 push DVDMenuS.006465FC ; ASCII "Thank you for your support!\nPlease Exit the Software and start it again to validate the code."

那么此處突破口的關(guān)鍵位置如下:

004DBD9E . 8B45 08 mov eax,dword ptr ss:[ebp+0x8]
004DBDA1 . 53 push ebx ; DVDMenuS.004DBD80
004DBDA2 . 56 push esi
004DBDA3 . 57 push edi
004DBDA4 . 83F8 01 cmp eax,0x1 ; Switch (cases 1..B)

上述理論上通過更改 004DBD9E . 8B45 08 mov eax,dword ptr ss:[ebp+0x8] 為 mov eax, 4
便可得到破解的目的落塑,但通過測(cè)試發(fā)現(xiàn)纽疟,如果這樣修改第一個(gè)會(huì)導(dǎo)致增加后源程序多了兩個(gè)字節(jié)的數(shù)據(jù),這樣就會(huì)導(dǎo)致堆棧不對(duì)稱平衡憾赁,
從而影響整個(gè)程序運(yùn)行污朽,或者運(yùn)行不正常,那么我們就不能這樣修改龙考,所以此處要用到經(jīng)典的破解手法就是內(nèi)聯(lián)補(bǔ)丁蟆肆。

內(nèi)聯(lián)補(bǔ)斗馈:表示就是通過找到程序中沒有實(shí)際代碼指令的位置,添加要破解的指令炎功,通過互相跳轉(zhuǎn)來實(shí)現(xiàn)不影響程序運(yùn)行的目的實(shí)現(xiàn)最終的破解枚冗。

制作內(nèi)聯(lián)補(bǔ)丁(內(nèi)嵌補(bǔ)锻鑫省)

005E47C0 00 db 00
005E47C1 00 db 00
005E47C2 00 db 00
005E47C3 00 db 00
005E47C4 00 db 00
005E47C5 00 db 00
005E47C6 00 db 00
005E47C7 00 db 00
005E47C8 00 db 00
005E47C9 00 db 00
005E47CA 00 db 00
005E47CB 00 db 00
005E47CC 00 db 00
005E47CD 00 db 00
005E47CE 00 db 00
005E47CF 00 db 00
005E47D0 00 db 00
005E47D1 00 db 00
005E47D2 00 db 00

類似找到上面沒有編寫匯編指令的代碼處官紫,在內(nèi)嵌補(bǔ)丁的過程中 盡量不要在剛開始的位置進(jìn)行內(nèi)嵌,要盡量空出幾行進(jìn)行州藕,

那么從地址 005E47D0 開始

根據(jù)下面的關(guān)鍵代碼位置進(jìn)行更改

004DBD9E > . 8B45 08 mov eax,dword ptr ss:[ebp+0x8]
004DBDA1 . 53 push ebx ; DVDMenuS.004DBD80
004DBDA2 . 56 push esi
004DBDA3 . 57 push edi

更改如下:

005E47D0 > B8 04000000 mov eax,0x4
005E47D5 53 push ebx ; DVDMenuS.004DBD80
005E47D6 56 push esi
005E47D7 00 db 00

然后到 地址 004DBD9E 處將其更改為 jmp 005E47D0

讓程序運(yùn)行到此處跳轉(zhuǎn)至我們?cè)O(shè)置好的內(nèi)嵌補(bǔ)丁

然后在地址 005E47D7 添加jmp 004DBDA3 讓其跳轉(zhuǎn)至正常程序的下面代碼執(zhí)行后面的流程,如下:

004DBD9E > /E9 2D8A1000 jmp <DVDMenuS.添加內(nèi)嵌補(bǔ)丁的開頭位置>
004DBDA3 . |57 push edi

上面操作 導(dǎo)致一個(gè)死循環(huán)酝陈,還沒有完全破解床玻。

所以通過整體觀察,發(fā)現(xiàn)switch在跳轉(zhuǎn)到B的時(shí)候沉帮,就會(huì)跳出循環(huán)锈死,最終將其改為如下:

005E47D0 B8 0B000000 mov eax,0xB
005E47D5 . 53 push ebx
005E47D6 . 56 push esi
005E47D7 .^ E9 C775EFFF jmp DVDMenuS.004DBDA3

將005E47D0 B8 0B000000 mov eax,0xB 改為等于B 就跳出循環(huán),成功破解穆壕。

005ABE4D $ B8 442D5E00 mov eax,DVDMenuS.005E2D44

004DC0D1 . E8 77FD0C00 call DVDMenuS.005ABE4D

執(zhí)行完整個(gè)程序待牵,堆棧的調(diào)用過程

調(diào)用堆棧: 主線程
地址 堆棧 函數(shù)過程 / 參數(shù) 調(diào)用來自 結(jié)構(gòu)
0018FA60 758C7C1D user32.758C78C2 user32.758C7C18 0018FA7C
0018FA80 005B044F user32.GetMessageA DVDMenuS.005B0449 0018FA7C
0018FA84 00662858 pMsg = DVDMenuS.00662858
0018FA88 00000000 hWnd = NULL
0018FA8C 00000000 MsgFilterMin = 0x0
0018FA90 00000000 MsgFilterMax = 0x0
0018FA9C 005AF0A2 包含DVDMenuS.005B044F DVDMenuS.005AF09F
0018FAC0 005ABF2E DVDMenuS.005AEFC8 DVDMenuS.005ABF29
0018FAFC 004DC0D6 ? DVDMenuS.005ABE4D DVDMenuS.004DC0D1

我們查找的話,也要查找最后的那個(gè)調(diào)用來自喇勋, 要從這里找缨该,找到調(diào)用nag窗口的來源地址,然后雙擊川背,進(jìn)入

當(dāng)找到這個(gè)關(guān)鍵的地址贰拿,就要在這個(gè)關(guān)鍵位置的上下文的開始下個(gè)斷點(diǎn)進(jìn)行跟進(jìn)

另一種方法,牛逼而且簡(jiǎn)單熄云,待強(qiáng)化

將004DBDC5 /75 1F jnz short DVDMenuS.004DBDE6

修改為nop保存即可膨更。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市缴允,隨后出現(xiàn)的幾起案子荚守,更是在濱河造成了極大的恐慌,老刑警劉巖练般,帶你破解...
    沈念sama閱讀 223,126評(píng)論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矗漾,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡踢俄,警方通過查閱死者的電腦和手機(jī)缩功,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來都办,“玉大人嫡锌,你說我怎么就攤上這事虑稼。” “怎么了势木?”我有些...
    開封第一講書人閱讀 169,941評(píng)論 0 366
  • 文/不壞的土叔 我叫張陵蛛倦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我啦桌,道長(zhǎng)溯壶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,294評(píng)論 1 300
  • 正文 為了忘掉前任甫男,我火速辦了婚禮且改,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘板驳。我一直安慰自己又跛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評(píng)論 6 398
  • 文/花漫 我一把揭開白布若治。 她就那樣靜靜地躺著慨蓝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪端幼。 梳的紋絲不亂的頭發(fā)上礼烈,一...
    開封第一講書人閱讀 52,874評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音婆跑,去河邊找鬼此熬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛洽蛀,可吹牛的內(nèi)容都是我干的摹迷。 我是一名探鬼主播,決...
    沈念sama閱讀 41,285評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼郊供,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼峡碉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起驮审,我...
    開封第一講書人閱讀 40,249評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤鲫寄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后疯淫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體地来,經(jīng)...
    沈念sama閱讀 46,760評(píng)論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評(píng)論 3 343
  • 正文 我和宋清朗相戀三年熙掺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了未斑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,973評(píng)論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡币绩,死狀恐怖蜡秽,靈堂內(nèi)的尸體忽然破棺而出府阀,到底是詐尸還是另有隱情,我是刑警寧澤芽突,帶...
    沈念sama閱讀 36,631評(píng)論 5 351
  • 正文 年R本政府宣布试浙,位于F島的核電站,受9級(jí)特大地震影響寞蚌,放射性物質(zhì)發(fā)生泄漏田巴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評(píng)論 3 336
  • 文/蒙蒙 一挟秤、第九天 我趴在偏房一處隱蔽的房頂上張望壹哺。 院中可真熱鬧,春花似錦艘刚、人聲如沸斗躏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至笛臣,卻和暖如春云稚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沈堡。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評(píng)論 1 275
  • 我被黑心中介騙來泰國(guó)打工静陈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人诞丽。 一個(gè)月前我還...
    沈念sama閱讀 49,431評(píng)論 3 379
  • 正文 我出身青樓鲸拥,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親僧免。 傳聞我的和親對(duì)象是個(gè)殘疾皇子刑赶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評(píng)論 2 361

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