CHM瀏覽器破解+演算法分析
呵呵,我又來了。 又快到期末了,學習更忙了,但還是抑制不住對破解的興趣,於是又帶來三篇文章,請各位前輩指教!
第一篇
【破解作者】 WXHing
【作者郵箱】 WXHing@163.com
【使用工具】 OllyDbg1.09,W32dasm8.93
【破解平臺】 Win9x/NT/2000/XP
【軟體名稱】 CHM瀏覽器
【下載地址】 中國共享軟體註冊中心
[保護方式] 註冊碼保護
【軟體簡介】CHM瀏覽器 是一個 CHM 工具,它能幫助你匯出 CHM 中的檔案。
CHM瀏覽器能夠反編譯出已編譯的Windows HTML幫忙檔案(*.chm)中的任何型別檔案。它處理CHM檔案就像ZIP檔案一樣。你可以像使用Winzip檢視ZIP檔案一樣來執行或檢視CHM中的檔案。你可以透過雙擊檔案的圖示來檢視HTML檔案或圖片檔案。
【軟體大小】 500Kb
【破解宣告】 本人菜鳥一隻,初學破解,如有不當之處,還望各位前輩指教,先行謝過!
--------------------------------------------------------------------------------
【破解內容】首先用PEID檢查無殼,執行之,選擇註冊,輸入使用者名稱 WXHing,試練碼 9876543210,確定,出錯!好,請出我的屠龍寶刀OD,裝載目標程式,F9執行,註冊它,彈出錯誤對話方塊,不要關它,回到OD介面,ALT+M,檢視記憶體映象,搜尋WXHing,下硬體訪問斷點dword,重新執行,重複第一步,確定。
0040FA02 . 8807 mov byte ptr ds:[edi], al ; 中斷在這
0040FA04 . 8B45 08 mov eax, dword ptr ss:[ebp+8]
0040FA07 . 5E pop esi
0040FA08 . 5F pop edi
0040FA09 . C9 leave
0040FA0A . C3 retn
0040FA0B 90 nop
0040FA0C > 8A06 mov al, byte ptr ds:[esi]
0040FA0E . 8807 mov byte ptr ds:[edi], al
004227AD |. E8 6DD5FFFF call CHMUnpac.0041FD1F ; ecx指向試練碼
004227B2 |. EB 13 jmp short CHMUnpac.004227C7
004227B4 |> 8BCE mov ecx, esi
004227B6 |. E8 D2ECFFFF call CHMUnpac.0042148D
004227BB |. 85C0 test eax, eax
004227BD |. 74 08 je short CHMUnpac.004227C7
004227BF |. 57 push edi
004227C0 |. 8BC8 mov ecx, eax
004227C2 |. E8 52FFFFFF call CHMUnpac.00422719
004227C7 |> 8B07 mov eax, dword ptr ds:[edi]
004227C9 |. 5F pop edi
004227CA |. 5E pop esi
004227CB |. 8B40 F8 mov eax, dword ptr ds:[eax-8] ;eax=試練碼位數‘9’
004227CE \. C2 0800 retn 8
.........
........
00405A8F . E8 CDCC0100 call CHMUnpac.00422761
00405A94 . 8B5424 0C mov edx, dword ptr ss:[esp+C]
00405A98 . 68 30C94400 push CHMUnpac.0044C930 ; /Arg2 = 0044C930
00405A9D . 52 push edx ; |Arg1
00405A9E . E8 83910000 call CHMUnpac.0040EC26 ; \CHMUnpac.0040EC26
00405AA3 . 83C4 08 add esp, 8
00405AA6 . 85C0 test eax, eax ; 檢測使用者名稱是否為空
00405AA8 . 75 0C jnz short CHMUnpac.00405AB6
00405AAA . 53 push ebx
00405AAB . 53 push ebx
00405AAC . 68 94A54400 push CHMUnpac.0044A594
00405AB1 . E9 3B010000 jmp CHMUnpac.00405BF1
00405AB6 > 8B4424 08 mov eax, dword ptr ss:[esp+8]
00405ABA . 68 30C94400 push CHMUnpac.0044C930 ; /Arg2 = 0044C930
00405ABF . 50 push eax ; |Arg1
00405AC0 . E8 61910000 call CHMUnpac.0040EC26 ; \CHMUnpac.0040EC26
00405AC5 . 83C4 08 add esp, 8
00405AC8 . 85C0 test eax, eax ;檢測註冊碼是否為空
00405ACA . 75 0C jnz short CHMUnpac.00405AD8
00405ACC . 53 push ebx
00405ACD . 53 push ebx
00405ACE . 68 84A54400 push CHMUnpac.0044A584
00405AD3 . E9 19010000 jmp CHMUnpac.00405BF1
00405AD8 > 68 80A54400 push CHMUnpac.0044A580
00405ADD . 8D4C24 0C lea ecx, dword ptr ss:[esp+C]
00405AE1 . E8 FC6F0100 call CHMUnpac.0041CAE2
00405AE6 . 68 80A54400 push CHMUnpac.0044A580
00405AEB . 8D4C24 0C lea ecx, dword ptr ss:[esp+C]
00405AEF . E8 4F6F0100 call CHMUnpac.0041CA43
00405AF4 . 8B4424 08 mov eax, dword ptr ss:[esp+8]
00405AF8 . 8378 F8 10 cmp dword ptr ds:[eax-8], 10 ;檢測註冊碼長度是否等於0x10,十
00405AFC . 74 0C je short CHMUnpac.00405B0A 進位制16
00405AFE . 53 push ebx
00405AFF . 53 push ebx
00405B00 . 68 70A54400 push CHMUnpac.0044A570
00405B05 . E9 E7000000 jmp CHMUnpac.00405BF1
00405B0A > 68 5CA54400 push CHMUnpac.0044A55C ; /Arg2 = 0044A55C ASCII "eLRYdMs7IhHiObJg" ;未知字串入棧
00405B0F . 50 push eax ; |Arg1 ; 試練碼入棧
00405B10 . E8 11910000 call CHMUnpac.0040EC26 ; \CHMUnpac.0040EC26
00405B15 . 83C4 08 add esp, 8
00405B18 . 85C0 test eax, eax
00405B1A . 0F84 CA000000 je CHMUnpac.00405BEA ;相等則跳轉,跳過去會顯示這是被破解的註冊碼,迷惑人的
00405B20 . 8B4C24 08 mov ecx, dword ptr ss:[esp+8]
00405B24 . 68 48A54400 push CHMUnpac.0044A548 ; /Arg2 = 0044A548 ASCII "FkZQYRjGoBNcgJVU"
;未知字串入棧
00405B29 . 51 push ecx ; |Arg1
; 試練碼入棧
00405B2A . E8 F7900000 call CHMUnpac.0040EC26 ; \CHMUnpac.0040EC26
00405B2F . 83C4 08 add esp, 8
00405B32 . 85C0 test eax, eax
00405B34 . 0F84 B0000000 je CHMUnpac.00405BEA ;相等則跳轉,跳過去會顯示這是被破解的註冊碼,迷惑人的
00405B3A . 8D5424 10 lea edx, dword ptr ss:[esp+10]
00405B3E . 57 push edi
00405B3F . 52 push edx ; /pHandle
00405B40 . 68 2CA54400 push CHMUnpac.0044A52C ; |Subkey = "Software\YBSoft\CHMUnpacker"
00405B45 . 68 02000080 push 80000002 ; |hKey = HKEY_LOCAL_MACHINE ;
00405B4A . FF15 10B04300 call dword ptr ds:[<&ADVAPI32.RegCreat>; \RegCreateKeyA ;看到了嗎,過了這裡,將把你的使用者名稱和註冊碼寫入登錄檔,接下去軟體將會提示你下次啟動時檢驗註冊碼是否正確,可以陰險的笑一下了,呵呵
00405B50 . 8B4424 0C mov eax, dword ptr ss:[esp+C]
00405B54 . 8D4C24 0C lea ecx, dword ptr ss:[esp+C]
00405B58 . 8B40 F8 mov eax, dword ptr ds:[eax-8]
00405B5B . 50 push eax
00405B5C . 6A 01 push 1
00405B5E . E8 6DA10100 call CHMUnpac.0041FCD0
00405B63 . 8B4C24 18 mov ecx, dword ptr ss:[esp+18] ; |
00405B67 . 8B3D 0CB04300 mov edi, dword ptr ds:[<&ADVAPI32.RegS>; |ADVAPI32.RegSetValueExA
00405B6D . 50 push eax ; |Buffer
00405B6E . 6A 01 push 1 ; |ValueType = REG_SZ
00405B70 . 53 push ebx ; |Reserved
00405B71 . 68 80A24400 push CHMUnpac.0044A280 ; |ValueName = "Version"
00405B76 . 51 push ecx ; |hKey
00405B77 . FFD7 call edi ; \RegSetValueExA
00405B79 . 8B5424 10 mov edx, dword ptr ss:[esp+10]
00405B7D . 8D4C24 10 lea ecx, dword ptr ss:[esp+10]
00405B81 . 8B42 F8 mov eax, dword ptr ds:[edx-8]
.....................
..................
好,重新執行,下斷bp RegCreateKeyA ,不停按F9,太煩了,讀了那麼多登錄檔鍵值,一不留神就會跟丟的,好,清楚倚天劍吧,用W32dasm去分析,找到字串“ V1.3 - 未註冊21天試用版",這是未註冊版本的標誌,看看它是從那裡跳來的,004041CA(C), :004041F7(C), :00404229(C)
OK,重新載入,下斷點,bpx 4041ca,F9執行,輕鬆著陸
004041CA . /75 6A jnz short CHMUnpac.00404236
004041CC . |8D5424 14 lea edx, dword ptr ss:[esp+14]
004041D0 . |8D4424 3C lea eax, dword ptr ss:[esp+3C]
004041D4 . |52 push edx ; /pBufSize
004041D5 . |8B5424 14 mov edx, dword ptr ss:[esp+14] ; |
004041D9 . |8D4C24 2C lea ecx, dword ptr ss:[esp+2C] ; |
004041DD . |50 push eax ; |Buffer
004041DE . |51 push ecx ; |pValueType
004041DF . |6A 00 push 0 ; |Reserved = NULL
004041E1 . |68 80A24400 push CHMUnpac.0044A280 ; |ValueName = "Version"
004041E6 . |52 push edx ; |hKey
004041E7 . |C74424 2C FF000000 mov dword ptr ss:[esp+2C], 0FF ; |
004041EF . |FF15 04B04300 call dword ptr ds:[<&ADVAPI32.RegQuery>; \RegQueryValueExA
004041F5 . |85C0 test eax, eax
004041F7 . |75 3D jnz short CHMUnpac.00404236
004041F9 . |8B4424 10 mov eax, dword ptr ss:[esp+10]
004041FD . |50 push eax ; /hKey
004041FE . |FF15 30B04300 call dword ptr ds:[<&ADVAPI32.RegClose>; \RegCloseKey
00404204 . |33DB xor ebx, ebx
00404206 . 8D7C24 3C lea edi, dword ptr ss:[esp+3C] ;edi指向試練碼
0040420A > 8A4F 01 mov cl, byte ptr ds:[edi+1] ;獲取後一字元
0040420D . 51 push ecx ;F7跟進
0040420E . E8 1DFBFFFF call CHMUnpac.00403D30
00404213 . 8A17 mov dl, byte ptr ds:[edi] ;獲取前一字元
00404215 . 52 push edx
00404216 . 0FBEE8 movsx ebp, al ;剛轉換後的字元存入ebp
00404219 . E8 12FBFFFF call CHMUnpac.00403D30
0040421E . 0FBEC0 movsx eax, al ;擴充套件存入eax
00404221 . 03E8 add ebp, eax ;ebp=ebp+eax
00404223 . 83C4 08 add esp, 8 ;esp=esp+8
00404226 . 83FD 3D cmp ebp, 3D ;ebp=3d嗎
00404229 . 75 0B jnz short CHMUnpac.00404236 ;不等,就OVER了,改,讓它等於0x3D 註冊碼改為s7t6u5v4w3x2y1z0
0040422C . 83C7 02 add edi, 2
0040422F . 83FB 08 cmp ebx, 8
00404232 .^ 7C D6 jl short CHMUnpac.0040420A
00404234 . EB 5C jmp short CHMUnpac.00404292
00404236 > 8D4C24 10 lea ecx, dword ptr ss:[esp+10]
0040423A . 51 push ecx
0040423B . 8BCE mov ecx, esi
0040423D . E8 EE060000 call CHMUnpac.00404930
00404242 . 68 38A44400 push CHMUnpac.0044A438
00404247 . 8D5424 18 lea edx, dword ptr ss:[esp+18]
0040424B . 50 push eax
0040424C . 52 push edx
0040424D . C68424 50010000 04 mov byte ptr ss:[esp+150], 4
00404255 . E8 DBB80100 call CHMUnpac.0041FB35
0040425A . 8B00 mov eax, dword ptr ds:[eax]
0040425C . 8D8E AC000000 lea ecx, dword ptr ds:[esi+AC]
00404262 . 50 push eax
00404263 . C68424 48010000 05 mov byte ptr ss:[esp+148], 5
0040426B . E8 B9B70100 call CHMUnpac.0041FA29
00404270 . 8D4C24 14 lea ecx, dword ptr ss:[esp+14]
00404274 . C68424 44010000 04 mov byte ptr ss:[esp+144], 4
0040427C . E8 1FB60100 call CHMUnpac.0041F8A0
00404281 . 8D4C24 10 lea ecx, dword ptr ss:[esp+10]
00404285 . C68424 44010000 01 mov byte ptr ss:[esp+144], 1
0040428D . E8 0EB60100 call CHMUnpac.0041F8A0
00404292 > 8D4424 10 lea eax, dword ptr ss:[esp+10]
00404296 . 50 push eax ; /pHandle
00404297 . 68 88A24400 push CHMUnpac.0044A288 ; |Subkey = "SOFTWARE\YBSoft\CHMUnpacker"
0040429C . 68 02000080 push 80000002 ; |hKey = HKEY_LOCAL_MACHINE
004042A1 . FF15 08B04300 call dword ptr ds:[<&ADVAPI32.RegOpenK>; \RegOpenKeyA
004042A7 . 85C0 test eax, eax
004042A9 . 0F85 41010000 jnz CHMUnpac.004043F0
004042AF . 8D4C24 14 lea ecx, dword ptr ss:[esp+14]
004042B3 . 8D5424 3C lea edx, dword ptr ss:[esp+3C] ;edx指向試練碼
004042B7 . 51 push ecx ; /pBufSize
004042B8 . 8B4C24 14 mov ecx, dword ptr ss:[esp+14] ; |
004042BC . 8D4424 2C lea eax, dword ptr ss:[esp+2C] ; |
004042C0 . 52 push edx ; |Buffer
004042C1 . 50 push eax ; |pValueType
004042C2 . 6A 00 push 0 ; |Reserved = NULL
004042C4 . 68 80A24400 push CHMUnpac.0044A280 ; |ValueName = "Version"
004042C9 . 51 push ecx ; |hKey
004042CA . C74424 2C FF000000 mov dword ptr ss:[esp+2C], 0FF ; |
004042D2 . FF15 04B04300 call dword ptr ds:[<&ADVAPI32.RegQuery>; \RegQueryValueExA
004042D8 . 85C0 test eax, eax
004042DA . 0F85 10010000 jnz CHMUnpac.004043F0
004042E0 . 8B5424 10 mov edx, dword ptr ss:[esp+10]
004042E4 . 52 push edx ; /hKey
004042E5 . FF15 30B04300 call dword ptr ds:[<&ADVAPI32.RegClose>; \RegCloseKey
004042EB . 33ED xor ebp, ebp
004042ED . 8D7C24 3D lea edi, dword ptr ss:[esp+3D] ;edi指向試練碼
004042F1 > 8A47 FF mov al, byte ptr ds:[edi-1] ;eax取第一字元
004042F4 . 3C 61 cmp al, 61 ;eax<61碼
004042F6 . 7C 04 jl short CHMUnpac.004042FC ;小於則跳
004042F8 . 2C 3D sub al, 3D ;al=al-3d
004042FA . EB 0A jmp short CHMUnpac.00404306
004042FC > 3C 41 cmp al, 41 ;al<41嗎
004042FE . 7C 04 jl short CHMUnpac.00404304
00404300 . 2C 37 sub al, 37 ;小於則跳
00404302 . EB 02 jmp short CHMUnpac.00404306
00404304 > 2C 30 sub al, 30 ;al=al-30
00404306 > 8AD8 mov bl, al ;bl=al
00404308 . 8A07 mov al, byte ptr ds:[edi] ;al取下一位字元
0040430A . 50 push eax
0040430B . E8 20FAFFFF call CHMUnpac.00403D30 ;進入這個call進行字元變換
00404310 . 0FBEC8 movsx ecx, al ;變換後的字元擴充套件存入ecx
00404313 . 0FBED3 movsx edx, bl ;bl擴充套件存入edx
00404316 . 03CA add ecx, edx ;ecx=ecx+edx
00404318 . 83C4 04 add esp, 4
0040431B . 83F9 3D cmp ecx, 3D ;ecx=3d嗎
0040431E . 0F85 CC000000 jnz CHMUnpac.004043F0 ;不等則OVER
00404324 . 45 inc ebp
00404325 . 83C7 02 add edi, 2
00404328 . 83FD 08 cmp ebp, 8
0040432B .^ 7C C4 jl short CHMUnpac.004042F1
.........
.........以後是一些啟動資訊,與註冊無關了
注意!很多地方都用到這個call,有必要研究一下
00403D30 /$ 8A4424 04 mov al, byte ptr ss:[esp+4] ;eax=獲取的字元16進位制
00403D34 |. 3C 61 cmp al, 61 ; eax<61嗎
00403D36 |. 7C 04 jl short CHMUnpac.00403D3C ;小於則跳
00403D38 |. 83E8 3D sub eax, 3D ;不小於,eax=eax-3d
00403D3B |. C3 retn
00403D3C |> 3C 41 cmp al, 41 ;eax<41嗎
00403D3E |. 7C 04 jl short CHMUnpac.00403D44 ;小於則跳
00403D40 |. 83E8 37 sub eax, 37 ;不小於,eax=eax-37
00403D43 |. C3 retn
00403D44 |> 83E8 30 sub eax, 30 ;小於,eax=eax-30
00403D47 \. C3 ret
這個call是將字元轉換
--------------------------------------------------------------------------------
【破解總結】
這個軟體的註冊碼與使用者名稱無關,只是滿足關係式即可(註冊碼長度必須為16)
if eax>61
eax=eax-3D;
else eax>41
eax=eax-37;
else eax=eax-41;
前後兩字元變換後的代數和等於0x3D,就OK了!
洋洋灑灑的一大篇,終於完成了,其實演算法很簡單。最後感謝您看完本文,謝謝!
--------------------------------------------------------------------------------
【版權宣告】 本文純屬技術交流, 轉載請註明作者並保持文章的完整, 謝謝!
相關文章
- 瀏覽器安全問題分析2017-11-20瀏覽器
- 瀏覽器HTTP快取原理分析2015-10-25瀏覽器HTTP快取
- 【瀏覽器】瀏覽器基本工作原理2021-04-30瀏覽器
- 使用瀏覽器計算力,對抗密碼破解2016-11-03瀏覽器密碼
- 瀏覽器2024-11-15瀏覽器
- Chrome 瀏覽器修改 UA 模擬其它瀏覽器,包括移動瀏覽器2021-09-09Chrome瀏覽器
- 基石-初見瀏覽器(一):瀏覽器渲染2019-12-08瀏覽器
- Min瀏覽器: 更快更輕量瀏覽器2018-11-04瀏覽器
- .net火狐瀏覽器 ie瀏覽器 判斷2014-05-05瀏覽器
- IE瀏覽器修復工具 V1.1 不完全演算法分析2003-07-07瀏覽器演算法
- microsoft edge是ie瀏覽器嗎 edge瀏覽器和ie瀏覽器一樣嗎2022-10-11ROS瀏覽器
- 前端面試瀏覽器系列:瀏覽器快取2019-04-24前端面試瀏覽器快取
- “木偶”瀏覽器2019-03-02瀏覽器
- 瀏覽器原理2018-05-27瀏覽器
- 瀏覽器核心2018-05-10瀏覽器
- vivaldi瀏覽器2017-11-17瀏覽器
- Mozilla瀏覽器2004-01-24瀏覽器
- 瀏覽器引擎2013-02-16瀏覽器
- 瀏覽器渲染2024-10-29瀏覽器
- [瀏覽器]LocalStorage2024-07-06瀏覽器
- js檢測搜狗瀏覽器、百度瀏覽器、微信瀏覽器程式碼例項2017-04-02JS瀏覽器
- Visual CHM 4.0的演算法“特別破解” (8千字)2015-11-15演算法
- 判斷當前瀏覽器是不是微信瀏覽器2018-04-12瀏覽器
- CSS動畫的效能分析和瀏覽器GPU加速2018-10-31CSS動畫瀏覽器GPU
- 9大瀏覽器端快取機制分析2015-12-31瀏覽器快取
- Edge瀏覽器被搜狗瀏覽器篡改的解決方法2021-04-15瀏覽器
- javascript判斷當前瀏覽器是不是微信瀏覽器2017-04-08JavaScript瀏覽器
- 使用chrome瀏覽器驅動自動開啟瀏覽器2024-08-02Chrome瀏覽器
- [BUG反饋]IE瀏覽器,百度瀏覽器,搜狗瀏覽器批量操作功能都不相容!!!!傲遊、火狐、谷歌瀏覽器可以2019-05-11瀏覽器谷歌
- 瀏覽器安全(一)2020-08-19瀏覽器
- 瀏覽器事件解析2019-02-16瀏覽器事件
- 瀏覽器快取2018-11-10瀏覽器快取
- 使用瀏覽器事件2018-09-04瀏覽器事件
- IE瀏覽器相容2018-07-18瀏覽器
- 瀏覽器渲染流程2020-11-23瀏覽器
- 瀏覽器全屏API2020-12-03瀏覽器API
- 【瀏覽器】聊聊DOM2021-11-09瀏覽器
- 瀏覽器沙箱模型2018-06-02瀏覽器模型