《新劍俠情緣》光碟版變硬碟版
前天去買了一張單張光碟的《新劍俠情緣》(正版要幾張不知道),安裝時看見上面只有500多MB安裝檔案,心想可能是硬碟版,正在暗暗高興俺的光碟機可以不受罪啦!,安裝完畢,取出光碟,馬上啟動遊戲,咚!!!!“請插入《新劍俠情緣》的第一號光碟,再重新執行本程式。”!!我X,D盤也,嗨,只得自己想辦法!
讀取光碟資訊的軟體(此類軟體多為遊戲軟體)一般要呼叫"GetDriveTypeA(判斷一個驅動器的型別)"以及"GetVolumeInformationA(返回卷標資訊)等相關API函式,所以只要反編譯成功後有針對性的分析這些函式所在位置的程式碼,並細心注意關鍵跳躍指令,往往起到事半功倍的效果。有時這些函式可能出現多個,也許單獨出現,也許混合出現,但80%以上都是對光碟進行校驗。
這就動手!
找到可執行檔案NewSword.exe,一看只有280多k,有點懷疑,就用fi檢查沒有加殼(可能讓D版者給脫了?!)。執行 W32dsm89
開啟NewSword.exe,反編譯成功後,單擊“Imports”檢視程式呼叫的相關函式,找到“KERNEL32.GetDriveTypeA”後雙擊將其開啟,我們可看到如下程式碼:
* Reference To: KERNEL32.SetErrorMode, Ord:0264h
|
:0040A507 8B2D20B04300 mov ebp, dword
ptr [0043B020]
* Reference To: KERNEL32.GetVolumeInformationA, Ord:0177h 0177h
<<----這裡是重點!!!!GetVolumeInformationA函式是獲得磁碟機代號卷標的,看看第一張光碟的卷標是什麼。
|
:0040A50D 8B1D24B04300 mov ebx, dword
ptr [0043B024]
:0040A513 C744241000000000 mov [esp+10], 00000000
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040A5A6(C)
|
:0040A51B 8D4C243C lea
ecx, dword ptr [esp+3C]
:0040A51F 51
push ecx
* Reference To: KERNEL32.GetDriveTypeA, Ord:0104h <<-----API函式標誌,判斷一個驅動器的型別
|
:0040A520 FF1538B04300 Call dword ptr
[0043B038]
:0040A526 83F805 cmp
eax, 00000005 <<-----這是什麼!!!5代表是光碟機,3代表是硬碟,
:0040A529 7565
jne 0040A590 <<-----不等於5就跳,關鍵的一跳,磁碟機代號檢查,跳幾次就玩完
:0040A52B 6A01
push 00000001
:0040A52D FFD5
call ebp
:0040A52F 8BF0
mov esi, eax
:0040A531 6A00
push 00000000
:0040A533 8D542418 lea
edx, dword ptr [esp+18]
:0040A537 6A00
push 00000000
:0040A539 8D442420 lea
eax, dword ptr [esp+20]
:0040A53D 52
push edx
:0040A53E 50
push eax
:0040A53F 6A00
push 00000000
:0040A541 8D4C2430 lea
ecx, dword ptr [esp+30]
:0040A545 6A20
push 00000020
:0040A547 8D542454 lea
edx, dword ptr [esp+54]
:0040A54B 51
push ecx
:0040A54C 52
push edx
:0040A54D FFD3
call ebx
:0040A54F 56
push esi
:0040A550 8BF8
mov edi, eax
:0040A552 FFD5
call ebp
:0040A554 85FF
test edi, edi
:0040A556 7438
je 0040A590 <----關鍵的地方,卷標檢查,跳幾次就玩完!
此處以後會有用
:0040A558 8BB42490000000 mov esi, dword ptr
[esp+00000090]
:0040A55F 8D44241C lea
eax, dword ptr [esp+1C]
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040A581(C)
|
:0040A563 8A10
mov dl, byte ptr [eax]
:0040A565 8ACA
mov cl, dl
:0040A567 3A16
cmp dl, byte ptr [esi]
:0040A569 751C
jne 0040A587
:0040A56B 84C9
test cl, cl
:0040A56D 7414
je 0040A583 <----關鍵的一跳,必須跳
:0040A56F 8A5001 mov
dl, byte ptr [eax+01]
:0040A572 8ACA
mov cl, dl
:0040A574 3A5601 cmp
dl, byte ptr [esi+01]
:0040A577 750E
jne 0040A587
:0040A579 83C002 add
eax, 00000002
:0040A57C 83C602 add
esi, 00000002
:0040A57F 84C9
test cl, cl
:0040A581 75E0
jne 0040A563
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040A56D(C)
|
:0040A583 33C0
xor eax, eax
:0040A585 EB05
jmp 0040A58C <----無條件跳,跳向遊戲可以執行的地方!
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0040A569(C), :0040A577(C)
|
:0040A587 1BC0
sbb eax, eax
:0040A589 83D8FF sbb
eax, FFFFFFFF
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040A585(U)
|
:0040A58C 85C0
test eax, eax
:0040A58E 7436
je 0040A5C6 <----關鍵的必須跳,跳向遊戲可以執行的地方!
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0040A529(C), :0040A556(C)
:0040A590 8A44243C mov
al, byte ptr [esp+3C] <<----關鍵的的地方!
:0040A594 FEC0
inc al
:0040A596 8844243C mov
byte ptr [esp+3C], al
:0040A59A 8B442410 mov
eax, dword ptr [esp+10]
:0040A59E 40
inc eax
:0040A59F 83F818 cmp
eax, 00000018 <-----將對24個英文字母(磁碟機代號)清掃一遍
:0040A5A2 89442410 mov
dword ptr [esp+10], eax
:0040A5A6 0F8C6FFFFFFF jl 0040A51B
<----又跳回,再來!跳幾次就玩完
* Possible StringData Ref from Data Obj ->"請插入《新劍俠情緣》的第一號光碟,再重新執行本"
->"程式。"
|
:0040A5AC 689C0A4400 push 00440A9C
* Reference To: Sword.?g_MessageBox@@YAXPADZZ, Ord:0308h
|
:0040A5B1 FF1558B14300 Call dword ptr
[0043B158]
:0040A5B7 83C404 add
esp, 00000004
:0040A5BA 33C0
xor eax, eax
:0040A5BC 5F
pop edi
:0040A5BD 5E
pop esi
:0040A5BE 5D
pop ebp
:0040A5BF 5B
pop ebx
:0040A5C0 83C47C add
esp, 0000007C
:0040A5C3 C20400 ret
0004
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040A58E(C)
|
:0040A5C6 5F
pop edi <<----遊戲可以執行的地方!
:0040A5C7 5E
pop esi
:0040A5C8 5D
pop ebp
:0040A5C9 B801000000 mov eax,
00000001
:0040A5CE 5B
pop ebx
:0040A5CF 83C47C add
esp, 0000007C
:0040A5D2 C20400 ret
0004
:0040A5D5 90
nop
:0040A5D6 90
nop
:0040A5D7 90
nop
:0040A5D8 90
nop
:0040A5D9 90
nop
:0040A5DA 90
nop
:0040A5DB 90
nop
:0040A5DC 90
nop
:0040A5DD 90
nop
:0040A5DE 90
nop
:0040A5DF 90
nop
* Referenced by a CALL at Address:
|:0040A449
|
:0040A5E0 56
push esi
:0040A5E1 57
push edi
:0040A5E2 8BF9
mov edi, ecx
好了,讓這個遊戲不讀光碟的方法有很多。
⑴ 把“0040A526 cmp eax, 00000005”改為“cmp eax, 00000003”,
用UltraEdit開啟NewSword.EXE檔案,
找到:83 F8 05 75 65
改為:83 F8 03 75 65 存檔,搞定!
或:找到:83 F8 05 75 65
改為:83 F8 05 74 65 存檔,搞定!
再把C:盤的卷標改成《新劍俠情緣》第一張光碟的卷標,
這個遊戲軟體不需要讀光碟上的某個檔案,只要卷標檢查透過就行。
⑵ 直接修改關鍵跳轉指令,直接繞過卷標檢查
仔細觀察,跳向“0040A5C6 ”,可以直接繞過卷標檢查,遊戲可以執行。
改什麼地方呢??
這裡,跳向“0040A590”的地方,共有兩處
:0040A529 7565
jne 0040A590
② :0040A556 7438
je 0040A590
把“0040A590”改為“0040A5C6”,用jumpgen算一下,①不行,②正好,運氣!!!
改0040A556 7438
je 0040A590
為0040A556 746E
je 0040A5C6
用UltraEdit開啟NewSword.EXE檔案,
找到:85 FF 74 38
改為:85 FF 74 6E 存檔,搞定!,只需改一個位元組就可以了。。。哈哈哈哈
不過,我有一疑問,只改以上跳轉指令直接繞過卷標檢查,就可以進入遊戲,那麼以下
:0040A526 83F805
cmp eax, 00000005 <<-----5代表是光碟機,3代表是硬碟,
:0040A529 7565
jne 0040A590 <<-----不等於5就跳
又有何用?請高手賜教!
後記
我寫這,是第一次,當然破解光碟遊戲也是第一次,真誠感謝看雪及他的《論壇精華Ⅲ》和《加密與解密--軟體保護技術與解決方案》一書,是他帶我上路。其實論起來,我還是看雪(段鋼)的師兄,而且我們曾同在一個校園待過(我1991年畢業於同濟大學,他1994年),我很以有此師弟為榮。
相關文章
- 《劍俠情緣》的前世今生(下)2019-06-03
- 無等級真江湖!《劍俠情緣2:劍歌行》正式上線2020-08-04
- 《劍俠情緣》的前世今生(上):從單機到手遊2019-06-03
- 西山居劉希、鄭可:《劍俠情緣2:劍歌行》僅是西山居“創新”之路的起點2020-08-05
- 劍俠情緣經典復刻! 《劍網1:歸來》今日10:00全平臺上線2021-10-15
- 從單機到網遊,為了生存而改變,《劍俠情緣》為何徹底告別單機?2019-12-12
- 劍俠聚首,再續前緣!《劍俠世界3》iOS測試定檔9月17日2021-09-08iOS
- “線下+線上”推動創新體驗升級 《新劍俠情緣手遊》第四屆“江湖盛典”都做了什麼?2019-12-20
- 《仙劍奇俠傳移動版》今日開測仗劍江湖 再續前緣2020-02-18
- 情緣2018-05-22
- 求伯君邀億萬劍俠!相聚《劍俠世界:起源》9月26日公測2023-09-15
- 億萬劍俠的節日 《劍俠世界3》一週年盛典今夜實況直播2022-12-29
- 再續劍俠情! 《龍武》手遊7月25日全平臺公測2019-07-25
- 繁華盛唐 風流妖靈《刀劍情緣》首測驚喜來襲2019-08-29
- 中國武俠RPG的30年:起也仙劍落也仙劍,劍俠單機也曾輝煌過2020-01-03
- 劍俠試玩團領銜!《劍俠世界3》7.20安卓首測蓄勢待發2021-07-16安卓
- 《仙劍奇俠傳 7》試玩版體驗報告:劇情部分值得期待2021-01-18
- 仙劍思考領域——《仙劍奇俠傳九野》前瞻2020-02-25
- 難存的情緣2024-05-14
- 含亮老師VS冷少!《劍俠世界:起源》最強劍俠天團助陣9.26公測2023-09-20
- 《劍俠世界2》手遊非遺聯動,於變革時代探尋亙古不變的美2019-11-05
- 新一代劍俠覺醒!《劍俠世界3》iOS不付費刪檔測試定檔9月2021-08-25iOS
- 次世代武俠覺醒!《劍俠世界3》安卓首測今日開啟2021-07-20安卓
- 今日全平臺上線!《劍俠世界》手遊新門派丐幫火爆來襲!2021-06-10
- 情懷新穎兩不誤,力求洗去割韭菜的仙劍IP2021-11-03
- 25歲的《仙劍奇俠傳1》,宿命悲喜2020-07-06
- 《劍俠圖》試玩DEMO現已上架Steam,與製作組一同改變遊戲2021-12-09遊戲
- 新門派五毒來襲!《劍俠世界:起源》年度版3月6日公測2024-02-26
- 女性細分市場或將有新突破口 友誼時光新遊瞄準仙俠題材2021-02-25
- 國風武俠大作 《劍俠世界3》風景實機演示視訊重磅來襲2021-07-15
- 【新夢想幹貨連載】網路情緣之TCP的分包處理2019-11-05TCP
- 相守之約 《仙劍奇俠傳七》今日正式上市2021-10-15
- 夢迴初唐,江湖有你 網易古風情緣手遊《花與劍》9月20日封測2019-09-20
- 《劍網3》懷舊服今日公佈 官宣定名劍網3緣起2021-03-11
- 武俠遊戲演變史:從“俠客英雄傳”到“只狼”2019-05-14遊戲
- 難存的情緣&貨車運輸2024-05-22
- 《仙劍奇俠傳七》試玩版今日正式解鎖2021-01-15
- 御劍九州邂仙緣《御劍決》6月30日首發上線2021-06-24
- 《寶可夢 劍 / 盾》情報彙總2019-06-06