是男人就上120層破解教程
;#########################
;是男人就上120層破解記錄
;2004-02-01
;ohko.com@163.com
;http://www.ohko.com
;如果轉載請不要刪除此資訊
;#########################
今天在網上逛,看到一篇關於這個遊戲的文章,突然想起,自己的這個程式還沒註冊.哎呀,就動手來試試吧.這個遊戲早就出來了,
相信大家都玩過了,也可能已經註冊了.如果不是自己的註冊碼就看下去,搞個自己的註冊碼來註冊吧.
;#########################
;程式:是男人就上120層
;工具:Ollydbg (如果沒有,網上到處都有,很小的,下載吧.)
;時間:不會超過0.5小時的
;#########################
開啟Ollydbg,載用"是男人就上120層"這個程式.好,載入出,自動停在了程式的入口點上了.
不要急,現在我們要先下斷點.按"CTRL+N".找到"GetDlgItemTextA",按"回車",會彈出視窗的,在每一項上按"F2",每一個都斷點.
好,現在斷點好了,按"F9"執行程式.遊戲執行後,點註冊.
使用者名稱: ohko
註冊碼: 1234567
確定.怎麼樣,斷點對了,攔截在00402FC6處.
就是下面的程式碼了.
下面就一下一下的按"F8"
00402FC6 > 68 00010000 PUSH 100 ; /Count = 100 (256.)
00402FCB . 8D85 FCFDFFFF LEA EAX, DWORD PTR SS:[EBP-204] ; |
00402FD1 . 50 PUSH EAX ; |Buffer
00402FD2 . 68 EB030000 PUSH 3EB ; |ControlID = 3EB (1003.)
00402FD7 . 8B45 08 MOV EAX, DWORD PTR SS:[EBP+8] ; |
00402FDA . 50 PUSH EAX ; |hWnd
00402FDB . FF15 78F34000 CALL DWORD PTR DS:[<&USER32.GetDlg>; GetDlgItemTextA 取得使用者輸入的註冊碼
00402FE1 . 8D85 FCFDFFFF LEA EAX, DWORD PTR SS:[EBP-204]
00402FE7 . 50 PUSH EAX ; [註冊碼]
;注意這裡了00402FE8,下面就是驗證註冊碼的了,要跟進去,按"F7"進入.
00402FE8 . E8 C0010000 CALL 是男人就.004031AD ;!!!這裡就是驗證註冊碼了就.004031AD!!!
00402FED . 83C4 04 ADD ESP, 4
00402FF0 . 85C0 TEST EAX, EAX ; 測試EAX,就是說註冊碼是否是正確的
00402FF2 . 0F85 37000000 JNZ 是男人就.0040302F ; 是對的就跳,不對不完了,失敗框框302F
00402FF8 . 68 00010000 PUSH 100 ; /Count = 100 (256.)
00402FFD . 8D85 FCFEFFFF LEA EAX, DWORD PTR SS:[EBP-104] ; |
00403003 . 50 PUSH EAX ; |Buffer
00403004 . 6A 04 PUSH 4 ; |RsrcID = STRING "註冊碼不煌炅?失?"
00403006 . A1 98D24000 MOV EAX, DWORD PTR DS:[40D298] ; |
0040300B . 50 PUSH EAX ; |hInst => 00400000
0040300C . FF15 BCF34000 CALL DWORD PTR DS:[<&USER32.LoadSt>; LoadStringA
00403012 . 6A 10 PUSH 10 ; /Style = MB_OK|MB_ICONHAND|MB_APPLMODAL
00403014 . 68 6CC24000 PUSH 是男人就.0040C26CNHAN ; |Title = "NS-TOWER"
00403019 . 8D85 FCFEFFFF LEA EAX, DWORD PTR SS:[EBP-104] ; |
0040301F . 50 PUSH EAX ; |Text
00403020 . 8B45 08 MOV EAX, DWORD PTR SS:[EBP+8] ; |
00403023 . 50 PUSH EAX ; |hOwner
00403024 . FF15 B8F34000 CALL DWORD PTR DS:[<&USER32.Messag>; MessageBoxA
0040302A . E9 41000000 JMP 是男人就.00403070[<&U
0040302F > 68 00010000 PUSH 100 ; /Count = 100 (256.)
00403034 . 8B45 FC MOV EAX, DWORD PTR SS:[EBP-4] ; |
00403037 . 83C0 10 ADD EAX, 10 ; |
0040303A . 50 PUSH EAX ; |Buffer
0040303B . 68 EA030000 PUSH 3EA ; |ControlID = 3EA (1002.)
00403040 . 8B45 08 MOV EAX, DWORD PTR SS:[EBP+8] ; |
00403043 . 50 PUSH EAX ; |hWnd
00403044 . FF15 78F34000 CALL DWORD PTR DS:[<&USER32.GetDlg>; GetDlgItemTextA
0040304A . 6A 08 PUSH 8 ; /Count = 8
0040304C . 8B45 FC MOV EAX, DWORD PTR SS:[EBP-4] ; |
0040304F . 05 10010000 ADD EAX, 110 ; |
00403054 . 50 PUSH EAX ; |Buffer
00403055 . 68 EB030000 PUSH 3EB ; |ControlID = 3EB (1003.)
0040305A . 8B45 08 MOV EAX, DWORD PTR SS:[EBP+8] ; |
0040305D . 50 PUSH EAX ; |hWnd
0040305E . FF15 78F34000 CALL DWORD PTR DS:[<&USER32.GetDlg>; GetDlgItemTextA
00403064 . 6A 00 PUSH 0 ; /Result = 0
00403066 . 8B45 08 MOV EAX, DWORD PTR SS:[EBP+8] ; |
00403069 . 50 PUSH EAX ; |hWnd
0040306A . FF15 7CF34000 CALL DWORD PTR DS:[<&USER32.EndDia>; EndDialog
004031AD $ 55 PUSH EBP
004031AE . 8BEC MOV EBP, ESP
004031B0 . 83EC 04 SUB ESP, 4
004031B3 . 53 PUSH EBX
004031B4 . 56 PUSH ESI
004031B5 . 57 PUSH EDI
004031B6 . 8B45 08 MOV EAX, DWORD PTR SS:[EBP+8] ; 註冊碼給[EAX]
004031B9 . 33C9 XOR ECX, ECX ; 清空ECX
004031BB . 8A48 07 MOV CL, BYTE PTR DS:[EAX+7] ; 把註冊碼的第8個註冊碼給CL,下面要用於判斷的
004031BE . 85C9 TEST ECX, ECX ; 測試ECX是否是空
004031C0 . 0F84 07000000 JE 是男人就.004031CD ; 如果是空就跳,不是空就繼續.也就是說,註冊碼必須小於8位.
004031C6 . 33C0 XOR EAX, EAX ; 清空EAX
004031C8 . E9 45010000 JMP 是男人就.00403312 ; 彈出[註冊失敗的框框]
004031CD > C745 FC 0000000>MOV DWORD PTR SS:[EBP-4], 0 ; 這個地址放的資料是迴圈用的,從0到7
004031D4 . E9 03000000 JMP 是男人就.004031DC ; 跳
004031D9 > FF45 FC INC DWORD PTR SS:[EBP-4] ; 迴圈數++
004031DC > 837D FC 07 CMP DWORD PTR SS:[EBP-4], 7 ; 迴圈數與7比較
004031E0 . 0F8D 2B000000 JGE 是男人就.00403211 ; 迴圈數>=7就跳
004031E6 . 8B45 FC MOV EAX, DWORD PTR SS:[EBP-4] ; 迴圈數給EAX
004031E9 . 8B4D 08 MOV ECX, DWORD PTR SS:[EBP+8] ; 註冊碼地址給ECX
004031EC . 8A0408 MOV AL, BYTE PTR DS:[EAX+ECX] ; 迴圈數+註冊碼地址裡的資料給AL
004031EF . 50 PUSH EAX ; EAX進棧
004031F0 . E8 22010000 CALL 是男人就.00403317 ; 呼叫子程式,如果是數字就轉換成16進位制數(31h->1h),如果是字母,就轉換成大寫.不能是符號
004031F5 . 83C4 04 ADD ESP, 4
004031F8 . 33C9 XOR ECX, ECX ; ECX清空
004031FA . 8AC8 MOV CL, AL ; AL給CL
004031FC . 83F9 24 CMP ECX, 24 ; 把用一位註冊碼算出的資料與24"$"比較
004031FF . 0F8E 07000000 JLE 是男人就.0040320C ; 這裡說明註冊碼只能是數字或字母,不然就給你註冊失敗的框框
00403205 . 33C0 XOR EAX, EAX ; 清空EAX
00403207 . E9 06010000 JMP 是男人就.00403312 ; 彈出[註冊失敗的框框]
0040320C > E9 C8FFFFFF JMP 是男人就.004031D9
00403211 > 8B45 08 MOV EAX, DWORD PTR SS:[EBP+8] ; 註冊碼地址給EAX
00403214 . 8A40 05 MOV AL, BYTE PTR DS:[EAX+5] ; 把註冊碼的第6位給AL
00403217 . 50 PUSH EAX ; EAX進棧
00403218 . E8 FA000000 CALL 是男人就.00403317 ; 這個子程式不是很清楚是做什麼的,我想是用註冊碼的第6位來算出個金鑰吧,可後面還呼叫了它,再看看吧.
0040321D . 83C4 04 ADD ESP, 4
00403220 . 33DB XOR EBX, EBX
00403222 . 8AD8 MOV BL, AL ; 呼叫子程式換算出的東東給BL
00403224 . 8B45 08 MOV EAX, DWORD PTR SS:[EBP+8] ; 註冊碼地址給EAX
00403227 . 8A40 02 MOV AL, BYTE PTR DS:[EAX+2] ; 註冊碼第3位給AL
0040322A . 50 PUSH EAX ; EAX進棧
0040322B . E8 E7000000 CALL 是男人就.00403317 ; 上面以呼叫過此子程式了,又來了.就不用跟進去了
00403230 . 83C4 04 ADD ESP, 4
00403233 . 33C9 XOR ECX, ECX
00403235 . 8AC8 MOV CL, AL ; 呼叫子程式換算出的東東給CL
00403237 . BE 24000000 MOV ESI, 24 ; ESI=24
0040323C . 8D4459 1C LEA EAX, DWORD PTR DS:[ECX+EBX*2+1C] ; 哦,這裡把換算回的兩個數字加起來了,把[ECX+EBX*2+1C]算出的值給EAX
00403240 . 99 CDQ ; 清空EDX,下面要做除法了
00403241 . F7FE IDIV ESI ; EAX/ESI(24h),商給EAX,餘於給EDX
00403243 . 8BDA MOV EBX, EDX ; 餘數給EBX
00403245 . 8B45 08 MOV EAX, DWORD PTR SS:[EBP+8] ; 註冊碼地址給EAX
00403248 . 8A00 MOV AL, BYTE PTR DS:[EAX] ; 註冊碼第1位給AL
0040324A . 50 PUSH EAX ; EAX進棧
0040324B . E8 C7000000 CALL 是男人就.00403317 ; 這個子程式又呼叫了,不用跟了
00403250 . 83C4 04 ADD ESP, 4
00403253 . 33C9 XOR ECX, ECX
00403255 . 8AC8 MOV CL, AL ; 轉回的東東給CL
00403257 . 3BD9 CMP EBX, ECX ; 上面數出來的餘數和註冊碼第一位算出的數比較
00403259 . 0F85 AC000000 JNZ 是男人就.0040330B ; 哎呀,不得了,如果不相等就跳,跳出失敗框框哦
0040325F . 8B45 08 MOV EAX, DWORD PTR SS:[EBP+8] ; 註冊碼地址再次給了EAX
00403262 . 8A40 04 MOV AL, BYTE PTR DS:[EAX+4] ; 把註冊碼第5位給AL
00403265 . 50 PUSH EAX ; EAX進棧
00403266 . E8 AC000000 CALL 是男人就.00403317 ; 看,是不是,這個子程式又呼叫了,哈哈,不用跟了
0040326B . 83C4 04 ADD ESP, 4
0040326E . 33DB XOR EBX, EBX
00403270 . 8AD8 MOV BL, AL ; 哎呀,累不累,下面這一段不用看也知道是,和上面一樣的嘛,一看就知道
00403272 . 8B45 08 MOV EAX, DWORD PTR SS:[EBP+8] ; 這下面就簡單說說了
00403275 . 8A40 01 MOV AL, BYTE PTR DS:[EAX+1] ; 註冊碼第2位
00403278 . 50 PUSH EAX
00403279 . E8 99000000 CALL 是男人就.00403317
0040327E . 83C4 04 ADD ESP, 4
00403281 . 33C9 XOR ECX, ECX
00403283 . 8AC8 MOV CL, AL
00403285 . BE 24000000 MOV ESI, 24
0040328A . 8D4459 1C LEA EAX, DWORD PTR DS:[ECX+EBX*2+1C] ; 做算術(ECX+EBX*2+1C)
0040328E . 99 CDQ
0040328F . F7FE IDIV ESI ; 做除法(EAX/ESI)
00403291 . 8BDA MOV EBX, EDX
00403293 . 8B45 08 MOV EAX, DWORD PTR SS:[EBP+8]
00403296 . 8A40 06 MOV AL, BYTE PTR DS:[EAX+6] ; 註冊碼第7位給AL
00403299 . 50 PUSH EAX
0040329A . E8 78000000 CALL 是男人就.00403317 ; 又呼叫了這個子程式,不跟
0040329F . 83C4 04 ADD ESP, 4
004032A2 . 33C9 XOR ECX, ECX
004032A4 . 8AC8 MOV CL, AL
004032A6 . 3BD9 CMP EBX, ECX ; 和上面一樣,比來個比較,上次上第6位和第3位算出的資料與第1位算出的比較,這次就是第5位和第2位算出的資料和第7位算出的資料比較
004032A8 . 0F85 5D000000 JNZ 是男人就.0040330B ; 不等就跳,跳到失敗框
004032AE . 8B45 08 MOV EAX, DWORD PTR SS:[EBP+8] ; 下面又是一樣的
004032B1 . 8A40 06 MOV AL, BYTE PTR DS:[EAX+6] ; 這是第7位給AL
004032B4 . 50 PUSH EAX
004032B5 . E8 5D000000 CALL 是男人就.00403317 ; 調
004032BA . 83C4 04 ADD ESP, 4
004032BD . 33DB XOR EBX, EBX
004032BF . 8AD8 MOV BL, AL
004032C1 . 8B45 08 MOV EAX, DWORD PTR SS:[EBP+8]
004032C4 . 8A00 MOV AL, BYTE PTR DS:[EAX] ; 這是第1位給AL
004032C6 . 50 PUSH EAX
004032C7 . E8 4B000000 CALL 是男人就.00403317 ; 調
004032CC . 83C4 04 ADD ESP, 4
004032CF . 33C9 XOR ECX, ECX
004032D1 . 8AC8 MOV CL, AL
004032D3 . BE 24000000 MOV ESI, 24
004032D8 . 8D4459 1C LEA EAX, DWORD PTR DS:[ECX+EBX*2+1C] ; 再做一次算數
004032DC . 99 CDQ
004032DD . F7FE IDIV ESI ; 再做一次除法
004032DF . 8BDA MOV EBX, EDX
004032E1 . 8B45 08 MOV EAX, DWORD PTR SS:[EBP+8]
004032E4 . 8A40 03 MOV AL, BYTE PTR DS:[EAX+3] ; 第4位給AL,下面去調子程式算
004032E7 . 50 PUSH EAX
004032E8 . E8 2A000000 CALL 是男人就.00403317 ; 又調
004032ED . 83C4 04 ADD ESP, 4
004032F0 . 33C9 XOR ECX, ECX
004032F2 . 8AC8 MOV CL, AL
004032F4 . 3BD9 CMP EBX, ECX
004032F6 . 0F85 0F000000 JNZ 是男人就.0040330B ; 不等就給你失敗框
004032FC . B8 01000000 MOV EAX, 1 ; EAX=1,就是說註冊碼驗證成功
00403301 . E9 0C000000 JMP 是男人就.00403312 ; 好了註冊碼看來是驗證完了,準備跳出這個子程式了,回到主程式
00403306 . E9 07000000 JMP 是男人就.00403312
0040330B > 33C0 XOR EAX, EAX
0040330D . E9 00000000 JMP 是男人就.00403312
00403312 > 5F POP EDI
00403313 . 5E POP ESI
00403314 . 5B POP EBX
00403315 . C9 LEAVE
00403316 . C3 RETN
00403317 /$ 55 PUSH EBP
00403318 |. 8BEC MOV EBP, ESP
0040331A |. 53 PUSH EBX
0040331B |. 56 PUSH ESI
0040331C |. 57 PUSH EDI
0040331D |. 33C0 XOR EAX, EAX
0040331F |. 8A45 08 MOV AL, BYTE PTR SS:[EBP+8] ; 呼叫此子程式時傳來的東東給AL,這裡是註冊碼的第6位
00403322 |. 83F8 61 CMP EAX, 61 ; EAX與61"a"比較
00403325 |. 0F8C 0B000000 JL 是男人就.00403336 ; 小於就跳
0040332B |. 33C0 XOR EAX, EAX ; 清空EAX
0040332D |. 8A45 08 MOV AL, BYTE PTR SS:[EBP+8] ; 轉來的東東給AL
00403330 |. 83E8 20 SUB EAX, 20 ; EAX-20h
00403333 |. 8845 08 MOV BYTE PTR SS:[EBP+8], AL ; 還回去
00403336 |> 33C0 XOR EAX, EAX ; 清空EAX
00403338 |. 8A45 08 MOV AL, BYTE PTR SS:[EBP+8] ; 傳來的東東再次給AL
0040333B |. 83F8 41 CMP EAX, 41 ; EAX與41"A"比較
0040333E |. 0F8C 0B000000 JL 是男人就.0040334F ; 小於就跳
00403344 |. 33C0 XOR EAX, EAX ; 清空EAX
00403346 |. 8A45 08 MOV AL, BYTE PTR SS:[EBP+8] ; 把轉來的西西給AL
00403349 |. 83E8 07 SUB EAX, 7 ; EAX-7
0040334C |. 8845 08 MOV BYTE PTR SS:[EBP+8], AL ; 還給轉來的東東
0040334F |> 33C0 XOR EAX, EAX ; 再清空EAX
00403351 |. 8A45 08 MOV AL, BYTE PTR SS:[EBP+8] ; 還是那個傳來的東西給AL
00403354 |. 83E8 30 SUB EAX, 30 ; EAX-30"0",也就是把ASCII數字轉換成十六進位制了.上面已經判斷出不是字母,那就一定是數字了
00403357 |. E9 00000000 JMP 是男人就.0040335C ; 沒什麼用,多於的跳轉命令,不如刪除了
0040335C |> 5F POP EDI
0040335D |. 5E POP ESI
0040335E |. 5B POP EBX
0040335F |. C9 LEAVE
00403360 . C3 RETN
好了,結束了,演算法出來了,就是這樣了
([3]+[6]*2+1C) % 24 與 [1]
([2]+[5]*2+1C) % 24 與 [7]
([1]+[7]*2+1C) % 24 與 [4]
if [?]<"a" then jl _NEXT
else [?]-20h
if [?]<"A" then jl _NEXT
else [?]-7h
_NEXT [?]-30h
相關文章
- 是男人就下100層小遊戲開發教程2019-05-11遊戲開發
- 李興球Python是男人就下一百層測試程式tkinter遊戲2020-10-30Python遊戲
- 是男人,就玩《閃耀暖暖》?2019-09-05
- IDEA破解教程2018-09-26Idea
- GoLand 2020.1.3破解教程2020-07-07GoLand
- IntelliJ IDEA 破解教程2019-06-19IntelliJIdea
- Navicat 破解版下載,Navicat破解教程2021-10-12
- 網路是七層、五層還是四層?2022-10-09
- Charles破解與抓包教程2018-10-25
- 是男人就過8題!樓教主出題,請接招!2018-03-26
- OBQ 問答| OceanBase 是如何支援 HTAP 的?技術問題,就上 OBQ!2021-04-16
- Studio 3T for MongoDB 破解教程2019-04-29MongoDB
- 破解教程之手脫UPX的DLL2019-05-11
- IDEA2018無期限永久破解教程2019-03-15Idea
- iOS:一用就上癮的BottomSheetView2018-08-05iOSView
- IntelliJ IDEA 2023 for Mac破解版 IntelliJ IDEA 2023完整破解安裝教程2023-11-01IntelliJIdeaMac
- 最新最全的史上最簡單的IDEA破解教程(破解到2100年)2019-03-14Idea
- 什麼是暴力破解?暴力破解的方法有哪些?2023-11-06
- 幽默:男人想談“物件”,女人實際要的是“函式”關係2019-04-06物件函式
- Navicat Premium 16 下載與安裝破解教程(詳細教程)2022-05-07REM
- 爬蟲進階教程:極驗(GEETEST)驗證碼破解教程2018-12-24爬蟲
- SecureCRT For Mac 7.3.0破解版安裝教程、2018-11-09SecurecrtMac
- 男人至少的道德底線2020-04-05
- 這5款黑科技app用了就上癮2018-10-16APP
- Camera List Record - 1202024-11-08
- [LeetCode] 120. Triangle2019-01-19LeetCode
- Photoshop CC 2018 軟體安裝包+破解教程2023-11-01
- IntelliJ IDEA 永久破解啟用教程(親測有效)2022-02-13IntelliJIdea
- Acrobat Pro DC 2021破解版安裝教程2021-02-28BAT
- 成為海賊王的男人2018-11-14
- 一起來用 Python 做個是男人就堅持100秒遊戲2020-12-29Python遊戲
- 最新Turbo Boost Switcher Pro補丁破解版 Turbo Boost Switcher Pro破解安裝教程2023-09-25
- Rider破解安裝啟用最新教程 附Rider2023破解工具及啟用碼2023-11-06IDE
- myeclipse-2017-ci-10(含安裝檔案、破解檔案、破解步驟和使用教程)2018-06-14Eclipse
- HoudahSpot 破解補丁最新 HoudahSpot 中文 for Mac安裝教程2024-01-15Mac
- mac版office破解版安裝教程,office for mac2023-04-26Mac
- SolidCAM 2020 SP3破解版安裝教程2020-10-29Solid
- Cesium官方教程5--地形圖層2018-11-23
- 是男人你就刪!馬斯克真把SpaceX和特斯拉的FB頁面刪了2018-03-24馬斯克