*輔助工具 1.0 Encrypt by Stkman 完美暴破(應該只能用暴力了) (11千字)
名稱:*輔助工具 1.0
下載:http://www.stkman.net
簡介:一款包含了非常聰明的投注方法的軟體,它可以將你對足球的瞭解充分量化到足彩投注中去。
限制:未註冊只能產生8條投注單
原因:純屬練習
此類軟體對我沒用,只是以前看到stkman在徵集破解,很佩服stkman對演算法的研究,於是下載來練習,不過最近才有空來擺弄,不知是否有人貼過它的破解,我沒留意,至於完美不完美,還是要stkman來表態的
聽stkman說此程式是用他寫的加密工具處理過,只能考慮用暴力破解了,程式是ASPack 2.x加殼,輕鬆脫殼,它用KeyFile來保護的,開啟KeyFile就被那長長的一大串數字嚇倒了,同時還看到了__unreg,既然程式用了KeyFile,我們就先用bpx
readfile來設斷吧,同樣為了不受其它程式的影響,我們先用TRW載入主程式再下斷點,F5,程式彈出一個MessageBox,說KeyFile不存在,呵呵,看來程式一開始就有保護了,重來,這次用bpx
MessageBoxA,攔下後用pmodule進入程式領空,我們來到下面的地方:
==Step 1==================================================
0187:00402BAD PUSH BYTE +00
0187:00402BAF PUSH
EAX
0187:00402BB0 CALL 00411880
<---裡面應該是一些保護吧,沒看
0187:00402BB5 MOV EDX,[004325A8]
0187:00402BBB MOV EAX,[EDX+04]
0187:00402BBE
TEST BYTE [EAX+004325AC],06
0187:00402BC5 JZ
00402BE3 <---如果不跳就是"KeyFile不存在"
0187:00402BC7
PUSH DWORD 2010
0187:00402BCC PUSH DWORD
0042D4C4
0187:00402BD1 PUSH DWORD 0042D580
0187:00402BD6
PUSH BYTE +00
0187:00402BD8 CALL `USER32!MessageBoxA`
0187:00402BDE XOR EAX,EAX
0187:00402BE0
RET 10
0187:00402BE3 CALL 004012D0
<---Call 1
0187:00402BE8 TEST EAX,EAX
0187:00402BEA JZ 00402C08
0187:00402BEC
PUSH DWORD 2010
0187:00402BF1 PUSH DWORD
0042D4C4
0187:00402BF6 PUSH DWORD 0042D548
0187:00402BFB
PUSH BYTE +00
0187:00402BFD CALL `USER32!MessageBoxA`
<---如果上面不跳的話就會彈出"KeyFile不合法"看
0187:00402C03 XOR
EAX,EAX 來上面的Call是在檢驗KeyFile我們先進入看看
0187:00402C05 RET 10
0187:00402C08 MOV
ECX,[ESP+04]
0187:00402C0C PUSH BYTE +00
0187:00402C0E PUSH DWORD 004025F0
0187:00402C13
PUSH BYTE +00
0187:00402C15 PUSH BYTE +65
0187:00402C17 PUSH ECX
0187:00402C18 CALL
`USER32!DialogBoxParamA` <---程式介面
==Call 1==========================================================
這裡只是最後的一部分,前面有很多略掉,因為我猜想stkman肯定不會用一些簡單的演算法來加密的,也許是一些上百位的演算法吧,反正我的數學最差,記得讀大學時那兩冊厚厚的高等數學我只看了20多頁,我自己都不知道是如何畢業的:-)雖然程式來到最後,但我們的KeyFile肯定是沒註冊的啦,那我們看看程式在幹什麼
0187:004014AB CALL 00407050
0187:004014B0
ADD ESP,BYTE +44
0187:004014B3 TEST
EAX,EAX
0187:004014B5 JZ 004014D6
<--- 一定跳
0187:004014B7 PUSH EBP
0187:004014B8
CALL 00406920
0187:004014BD PUSH EDI
0187:004014BE CALL 00406920
0187:004014C3 ADD
ESP,BYTE +08
0187:004014C6 MOV EAX,01
0187:004014CB POP EDI
0187:004014CC
POP ESI
0187:004014CD POP EBP
0187:004014CE POP EBX
0187:004014CF
ADD ESP,09C4
0187:004014D5 RET
0187:004014D6 MOV ESI,0042D454 <---d esi="__unreg"
0187:004014DB LEA EAX,[ESP+38] <---d eax="__unreg"
0187:004014DF MOV DL,[EAX]
0187:004014E1
MOV CL,DL
0187:004014E3 CMP
DL,[ESI] <---兩字串比較,不等就跳走了,這裡我在猜想程式
0187:004014E5
JNZ 00401503 用KeyFile算出裡面的註冊名,與__unreg比較
0187:004014E7 CMP CL,BL
相等的話程式就是未註冊版,於是將[esp+38]
0187:004014E9 JZ
004014FF 裡的__unreg改成Sam.com,F5,程式的註冊使用者
0187:004014EB MOV DL,[EAX+01]
變成Sam.com了,哈哈~~~~既然如此我們就先來
0187:004014EE MOV
CL,DL 給程式做個小手術,請看下面
0187:004014F0
CMP DL,[ESI+01]
0187:004014F3 JNZ
00401503
0187:004014F5 ADD EAX,BYTE +02
0187:004014F8 ADD ESI,BYTE +02
0187:004014FB
CMP CL,BL
0187:004014FD JNZ
004014DF
0187:004014FF XOR EAX,EAX
0187:00401501
JMP SHORT 00401508
0187:00401503 SBB
EAX,EAX
0187:00401505 SBB EAX,BYTE -01
0187:00401508 CMP EAX,EBX
0187:0040150A JNZ
00401514
0187:0040150C MOV [0043274C],EBX
0187:00401512 JMP SHORT 00401546
0187:00401514
LEA EDI,[ESP+38] <---!!
0187:00401518
OR ECX,BYTE -01
0187:0040151B XOR
EAX,EAX
0187:0040151D MOV DWORD [0043274C],01
0187:00401527 REPNE SCASB
<---看到這個我才會有上面的猜想
0187:00401529 NOT ECX
0187:0040152B SUB EDI,ECX
0187:0040152D MOV
EAX,ECX
0187:0040152F MOV ESI,EDI
0187:00401531 MOV EDI,00432790
0187:00401536
SHR ECX,02
0187:00401539 REP MOVSD
0187:0040153B
MOV ECX,EAX
0187:0040153D AND
ECX,BYTE +03
0187:00401540 REP MOVSB
0187:00401542 MOV
EDI,[ESP+14]
0187:00401546 PUSH EBP
0187:00401547 CALL 00406920
0187:0040154C PUSH
EDI
0187:0040154D CALL 00406920
0187:00401552
ADD ESP,BYTE +08
0187:00401555 XOR
EAX,EAX
0187:00401557 POP EDI
0187:00401558
POP ESI
0187:00401559 POP EBP
0187:0040155A POP EBX
0187:0040155B
ADD ESP,09C4
0187:00401561 RET
改程式的目的主要是想將[esp+38]裡的__unreg改成我自己的名字,那我們在那裡找空間來修改呢,其實上面比較字串的那一段的功能只是比較,對程式的其它地方沒有影響,那我們就利用它吧,從4014DF處我改成(用Hiew改,不過要注意在Hiew裡我們看到的程式碼和這裡的有點不同如第一行應寫成mov
d,[eax],2E6D6153):
mov [eax],dword ptr 2E6D6153h <---寫入"Sam.com"
mov [eax+4],dword ptr 006D6F63h
jmp 00401503
改好後試試,呵呵~~~~~~~~成功!!別高興得太早,雖然程式顯示了我的註冊名,但是它的功能限制還沒去掉呢,先試試它的功能,按下"生成投注檔案"程式會生成一個soccer.txt檔案,裡面果然只有8條投注單,那好辦,我們就用bpx
writefile來設斷吧,然後就是漫長的跟蹤,過程也記不起了,最後找到下面的地方:
==Step 2=========================================================
0187:00401B20 MOV EAX,[0043278C] <---每次來到這裡都增加了1
0187:00401B25 MOV ECX,[004327F4] <---裡面是8,應該就是它了吧,將[004327F4]改成FF試試
0187:00401B2B INC EAX
請往下看我的小總結
0187:00401B2C PUSH
ESI
0187:00401B2D CMP EAX,ECX
0187:00401B2F
MOV [0043278C],EAX
0187:00401B34 JG
NEAR 00401C0F <---大於8就跳出Call了
0187:00401B3A
PUSH EBX
0187:00401B3B PUSH EBP
0187:00401B3C
MOV EBP,[ESP+10]
0187:00401B40 PUSH
EDI
0187:00401B41 XOR EBX,EBX
0187:00401B43
MOV EDI,004326E4
0187:00401B48 MOV
ESI,00432758
0187:00401B4D CMP EBX,[EBP*4+0042D2C4]
0187:00401B54 JG 00401B68
0187:00401B56
PUSH DWORD 0042D4D8
0187:00401B5B PUSH ESI
0187:00401B5C PUSH DWORD 00432650
0187:00401B61
CALL 004054E0
0187:00401B66 JMP SHORT
00401B92
0187:00401B68 MOV EAX,[EDI-04]
0187:00401B6B
PUSH DWORD 0042D4D8
0187:00401B70 TEST EAX,EAX
0187:00401B72 JZ 00401B85
0187:00401B74
PUSH DWORD 0042D4D0
0187:00401B79 PUSH DWORD
00432650
0187:00401B7E CALL 004054E0
0187:00401B83
JMP SHORT 00401B92
0187:00401B85 MOV
AL,[EDI]
0187:00401B87 PUSH EAX
0187:00401B88
PUSH DWORD 00432650
0187:00401B8D CALL 00405770
0187:00401B92 ADD ESP,BYTE +08
0187:00401B95
PUSH EAX
0187:00401B96 CALL 004054E0
0187:00401B9B ADD ESP,BYTE +08
0187:00401B9E
ADD ESI,BYTE +04
0187:00401BA1 INC
EBX
0187:00401BA2 ADD EDI,BYTE +08
0187:00401BA5 CMP ESI,0043278C
0187:00401BAB
JL 00401B4D
0187:00401BAD PUSH BYTE
+0A
0187:00401BAF MOV ECX,00432650
0187:00401BB4
CALL 00402CB0
0187:00401BB9 MOV ECX,[00432650]
0187:00401BBF XOR ESI,ESI
0187:00401BC1
POP EDI
0187:00401BC2 POP EBP
0187:00401BC3 MOV EAX,[ECX+04]
0187:00401BC6
POP EBX
0187:00401BC7 TEST BYTE [EAX+00432654],06
0187:00401BCE JNZ 00401BE7
0187:00401BD0
MOV EAX,[EAX+00432678]
0187:00401BD6 MOV
ECX,EAX
0187:00401BD8 MOV EDX,[EAX]
0187:00401BDA CALL NEAR [EDX+2C]
0187:00401BDD
CMP EAX,BYTE -01
0187:00401BE0 JNZ
00401BE7
0187:00401BE2 MOV ESI,04
0187:00401BE7
MOV EAX,[00432650]
0187:00401BEC MOV
ECX,[EAX+04]
0187:00401BEF ADD ECX,00432650
0187:00401BF5 TEST ESI,ESI
0187:00401BF7 JZ
00401C0F
0187:00401BF9 MOV EAX,[ECX+04]
0187:00401BFC MOV EDX,[ECX+28]
0187:00401BFF
OR EAX,ESI
0187:00401C01 TEST EDX,EDX
0187:00401C03 JNZ 00401C07
0187:00401C05
OR AL,04
0187:00401C07 PUSH BYTE +00
0187:00401C09 PUSH EAX
0187:00401C0A CALL
00411880
0187:00401C0F POP ESI
0187:00401C10
RET
小總結:[004327F4]改成FF後我們發現程式生成的投注單已經不止8條了,不過還有問題,程式應該生成700多條的投注單,但我們最多隻能生成15條,看來程式還有其它比較的地方,先不管它,我們先來保證程式能生成最多的投注單,經測試,程式最多也只能生成幾萬條的投注單,那當然了,生成再多的投注單也沒用,我們有這麼多錢去投注嗎:-(
動手吧,我們要改的地方如下(我曾經查詢過[004327F4]的地方想在它生成8這個數的地方修改,只找到了一個地方,但發現它生成這個8並不是簡單的放到記憶體中,而是有一大堆的演算法,還不能亂修改,因為程式的其它地方要呼叫那幾個Call,改後程式執行就不正常了):
0187:00401B20 A18C274300 MOV
EAX,[0043278C]
0187:00401B25 8B0DF4274300 MOV
ECX,[004327F4] <---改成mov ecx,00FFFFFF
0187:00401B2B 40
INC EAX
最後還多了一個位元組,要將它改為nop,
0187:00401B2C 56
PUSH ESI
FFFFFF已經足夠用了
0187:00401B2D 3BC1
CMP EAX,ECX
0187:00401B2F
A38C274300 MOV [0043278C],EAX
0187:00401B34
0F8FD5000000 JG NEAR 00401C0F
我們再找找其它比較的地方,用F12退出這個Call,我們來到下面的地方:
==Step 3=========================================================
0187:00401C20 MOV EAX,[ESP+04]
0187:00401C24
PUSH ESI
0187:00401C25 TEST EAX,EAX
0187:00401C27 MOV EAX,[00432754]
0187:00401C2C
MOV ECX,[EAX*4+0042D2C4]
0187:00401C33 JZ
00401C7C <---跳過去了
0187:00401C35
MOV ESI,[ESP+0C]
0187:00401C39 MOV
DL,[ECX*8+004326E5]
0187:00401C40 TEST ESI,ESI
0187:00401C42 MOV [ECX*4+00432758],DL
0187:00401C49
JNZ 00401C69 <---也跳過去了
0187:00401C4B CMP EAX,[0042D300] <---這裡的比較如果不跳的話就會進入上面Step
2的地方
0187:00401C51 JNL 00401CC7
在這不停的按F7你會發現這個比較有點象查表,10多次後
0187:00401C53 PUSH
EAX 就永遠進不了Step 2,那我們就將401C51這一行nop掉看看,
0187:00401C54 CALL 00401B20
Bingo~~~~~~就是它了
0187:00401C59 MOV
EAX,[00432754] <---出來後我們停在這裡,往上看看可疑的地方
0187:00401C5E ADD
ESP,BYTE +04
0187:00401C61 DEC EAX
0187:00401C62 MOV [00432754],EAX
0187:00401C67
POP ESI
0187:00401C68 RET
總結:至此,我們完全將它的限制去掉了,生成的投注單一個都不少,而且還顯示為註冊版,我們要改的地方只有3個而已,你可以將脫殼後的程式用Hiew修改,不過因為脫殼後的程式比原來大了3倍,於是決定用記憶體補丁的方法來寫一個Loader,生成的Loader只有5KB,效果一樣,要改的資料如下(用序號產生器編寫器裡的"製作記憶體補丁"):
修改地址 長度 原始指令 修改指令
4014DF 6 8A108ACA3A16 C70053616D2E
4014E5 7 751C3ACB74148A C74004636F6D00
4014EC 5 50018ACA3A
E912000000
401B25 6 8B0DF4274300
B9FFFFFF0090
401C51 2 7D74
9090
-=eND=-
_/_/_/
_/ _/_/_/ _/_/_/
_/_/
_/_/ _/ _/ _/
_/ _/
_/ _/ _/
_/ _/ _/
_/_/_/ _/_/_/
_/ _/ _/
Sam.com
7:02 2002-4-3
相關文章
- STEP7KNOW_HOW_PROTECT
version1.0 (Borland C++編寫) 暴破手記 (14千字)2002-10-26C++
- VB黑客程式的暴破(修改)一例 (9千字)2003-02-06黑客
- winrar2.71的破解和對暴破的一點想法 (4千字)2001-04-16
- 班門弄斧之暴破檔案整容專家 3.0 (6千字)2001-10-09
- 班門弄斧之暴破網頁特效小精靈 (6千字)2001-10-10網頁特效
- fail2ban 防止暴力破2020-11-30AI
- 遭受網路暴力該如何應對?實名制可有效遏制網路暴力2022-02-28
- EasyBoot5.03脫殼+暴破2004-11-17boot
- Guitar Pro v3.0 的破文 (11千字)2001-09-08GUI
- 暴破-AQUA 3D Screen Saver v1.5-水族館屏保程式
(15千字)2002-05-053D
- 也談《傲世三國》的暴力破解法 (11千字)2001-01-10
- 暴力破解 程式獵人(Phunter) V1.30 (11千字)2001-10-25
- 暴力破解3 (6千字)2001-02-18
- 圖床失效了?也許你應該試試這個工具2019-05-09圖床
- SYSTEM CLEANER 暴力破解 (1千字)2001-01-04
- 高收益的笨辦法:暴破在Windows提權中的應用2018-06-06Windows
- Takagoraku v1.0 的破解,重新寫了一邊 (5千字)2001-08-14Go
- 應該要PHP轉Java了。。。2023-09-11PHPJava
- MIDI軟體COMPOSER2.0暴破2002-01-14
- 自動釋出工具應該具備的11個標準特徵2016-06-12特徵
- 做不來序號產生器,只好暴破Windows優化大師V4.3 (4千字)2001-11-02Windows優化
- 檔案密使2.0暴力破解及序號產生器的編寫―好久沒寫過東西了。 (11千字)2001-07-10
- CUTEVIDEO 1.0破解 (4千字)2002-02-28IDE
- WinRar 2.71 for windows的破解(暴力) (1千字)2000-10-11Windows
- 暴力破解Security setup II (7千字)2001-10-24
- 申請加入BCG破文二--一位元組暴力破解S-Demo2.0 (7千字)2001-10-27
- 申請加入BCG第三篇破文:鬧鐘&笑話1.0破解過程 (2千字)2001-08-01
- 都2022年了,你的前端工具集應該有vueuse2022-01-17前端Vue
- 二分只能用來查詢元素嗎?2020-10-10
- 迭代暴力破解域名工具2020-08-19
- 暴力破解windows Commander 4.52 (5千字)2001-02-19Windows
- Kryptel 3.8 暴力破解過程 (18千字)2001-09-18
- 聽力之友1.0破解 (3千字)2002-02-28
- Let's Encrypt 推動了 HTTPS 的普及2016-11-05HTTP
- 應該使用什麼 CI/CD 工具?2019-05-05
- QA應該更新的測試工具2017-07-03
- 用 Python 寫了一個 Let's Encrypt 的 wildcard 證照小工具2019-03-24Python
- 如何對登入介面加密欄位進行暴破?2022-08-25加密