絕對菜鳥解狗教程――qdcrack作品之一(發表在我論壇的文章)寫得非常好!初學者必看呀! (11千字)

看雪資料發表於2015-11-15

絕對菜鳥解狗教程――qdcrack作品之一
作者:qdcrack
轉載:大老
我的解狗論壇:http://dalao2002.yeah.net
歡迎轉載!轉載請保留完整!
有些朋友在破解軟體之前,言必稱什麼什麼狗,似乎知道什麼狗之後就有章可循,有法可依了,其實對於加密狗來講,一般的說,對於狗得型別資料比較重要的是硬複製狗,和對狗殼的研究,因為那都是狗公司現成的作品,但是對於一幫朋友來言,似乎都是比較複雜的事情!要弄清楚,搞明白似乎可能性不是很大!至於在軟體破解中,狗對埠的呼叫每種狗確實有些不同,似乎分別還挺明顯,於是很多朋友熱衷於對這類資料的蒐集,以為搞清楚了呼叫實質,就能以不變應萬變.其實殊不知加密狗廠商對於他們的程式,那時費了很大心血的,他們的加密重點也就是放在這個地方,吾不知以個人之力量對付別人專業集團之力量是否真正能行!至少非常難!非常非常難!
如!深思III的種子呼叫很隱蔽,GS-**狗令人眼花繚亂的花指令等等!我覺得大家還是好好看看小牧童寫的文章,明白一點:軟體狗的加密,重點應該放在軟體本身.我覺得大家應該好好體會一下,也許每個人對這句話的理解不同!但我想有個有個規律在裡面:
1:如果您是新手或者初學破解又或者破過幾個,但是破不出來的居多,我覺得您首先對軟體除錯和軟體爆破進行加強功力.多看看資料,其實很多技術是從簡單的破解軟體序列號開始的,他們之間有什麼本質不同哪??
2:如果您能破解大部分加密狗的軟體,那麼恭喜,我想現在最大的目標是簡化您的修改程式碼!追入真正的讀狗核心,讓最簡練的修改,獲得最穩定的效果.
3:如果您是高手,那才是真正要分析總結一下各種狗的特點,去蕪存精,寫點東西!讓後來的人瞭解,免得走寫彎路,至於敝帚自珍,真的沒什麼意思!現在我發現!很多真正的高手寫的東西卻很少。菜鳥吧,到是願意寫一些文章,但是又怕別人笑話!


ok!我等是菜鳥,作我們菜鳥應該做的事情:破解,發表,然後寫文章交流
目標:管家婆輝煌門板店8.2d
先安裝SQL7.0(SQL2000也可以!安裝軟體,伺服器端程式,再安裝門板店程式)
OK!老習慣,用PEID檢測一下程式是否加殼,雖然這些大型軟體不喜歡加殼!但是幸運的很,測出來ASPACK2.11的殼
!我發現一個規律,管家婆的軟體主要是輝煌版才加殼!別的都沒有!可能是不同開發小組的作風不同!赫赫,但是看看他們內部程式的流程!又好象差不太多!
別說廢話了!用ASPDIE2.1來脫殼!提示"看起來成功了!"呵呵!作者也把握不準自己的東西是否有100%脫殼能力!ASPDIE做得不錯!就是針對版本性比較強,CASPR好像就厲害多了!可喜對最新的ASPACK支援的不夠好!
試試看!脫殼成功否!程式執行,提示再印表機埠沒發現軟體狗,然後推出!看來脫的好、脫的妙、脫的結果呱呱叫!呵呵
現在也找到軟體提示點了!用WDASM32反彙編吧!軟體比較大,需要多等會!點支菸,放鬆一下!(你要是不會抽別學我)順便翻翻看學精華,哈!竟然找到兩篇介紹的文章,看他們說的好簡單呀!不過版本都老點了,不知道現在的是否還合適?(破解軟體之前開開別人的文章熱熱身!蠻好的!推薦大家試試看!)

反彙編完了!煙還沒抽完,算了!等會再抽工作要緊!掐滅!
察看字串,找到沒狗的提示!雙擊,我在雙擊,噢!!提示的地方沒有變化,說明只有一處!我喜歡!呵呵
看到出錯的CALL上面有個比較,下面接著跳轉!試試看!下斷點
:005FBED6 A1FC936000              mov eax, dword ptr [006093FC]
:005FBEDB C700E8030000            mov dword ptr [eax], 000003E8
:005FBEE1 E854340000              call 005FF33A
:005FBEE6 85C0                    test eax, eax
:005FBEE8 743C                    je 005FBF26          **************
:005FBEEA 6A00                    push 00000000

* Possible StringData Ref from Code Obj ->"stop"
                                |
:005FBEEC 68C0C45F00              push 005FC4C0
:005FBEF1 8D45A4                  lea eax, dword ptr [ebp-5C]
:005FBEF4 50                      push eax

* Possible StringData Ref from Code Obj ->"myok"
                                |
:005FBEF5 B9D0C45F00              mov ecx, 005FC4D0

* Possible StringData Ref from Code Obj ->"系統在列印口沒有找到軟體狗,請再試!"
                                |
:005FBEFA BAE0C45F00              mov edx, 005FC4E0


下斷點BPX 5FBEE8  執行程式 !!!什麼什麼???竟然正常執行了!我建套帳,我進入!我點、我點。。。。。竟然沒有錯誤!!不會吧!!今天讓我逮了個熟鴿子!比共享軟體還共享!!哈哈!不好意思,這個不算,本來想給大家說點有經驗的地方,沒想到臭屁放了一個!哈哈!換一個吧!

千方百計POS前臺
同上面的步驟,安裝軟體,檢測殼!沒發現,執行軟體,還是提示沒在列印口發現軟體狗,不會又是一隻熟鴿子吧?嘿嘿!

反彙編,這次比較大,需要耐心!我找,再找。啊!菸頭菸頭終於找到了!點上繼續!呵呵!我發現了菸頭的味道非常之不好!有股煙臭味,但是我省!為了我國早日步入現代化,我省!!
其實上面的程式也未必沒有收穫!我們不是高手!我們要學會先從簡單的辦法入手,查出錯框,然後看看上面的跳轉,能改掉最好了!不能改掉再研究!說不定某天你會發現你只用了幾分鐘就破解了一個狗加密的軟體(雖然這種機會比較少),蠻有成就感吧?呵呵!上面的程式你還可以在研究!就是那個CALL,看看子程式裡面到底是那一步導致EAX不等於零,找到關鍵的CALL和跳轉!你可以修改子程式!如果這個子程式被多次呼叫,你就會避免不少暗樁,最好是一直追到讀狗的子子程式CALL,呵呵!我有時候也沒那個耐心和精力!

廢話少說!反彙編完成!老規矩找出錯字串參考,雙擊、雙擊、雙擊、再雙擊、!KAO!有四處地方,3處提示上面有比較明顯的跳轉!有一處地方看不明白出處!算了!死馬當活馬醫,把那三出現改掉,試著執行一下!嘿嘿!這次沒那麼幸運了!看來需要TRW出來運作一下!高手門都講用BPX 378和BPX DEVICEIOCONTROL這些專業的斷點來做!如果你比較精通!你可以去做!千萬別看這篇文章了!這篇文章是給沒有經驗的朋友的來看的!
  執行TRW,點OK!什麼斷點也不用設,然後執行程式!出現提示出錯的框!這時候用CTR+N來撥出你的TRW,還是什麼都不用設!一直按F12,知道退出TRW來到程式!這時候就是等著你點確定了!點完後TRW迅速接管,落在:00454BF2處。不過剛中斷的地方上面這些程式一般都是處理你點選“確定“以後要處理的程式!和出現錯誤提示的地方一般相距還比較遠,如果你不放心!可以再454BED處按F9設斷點!才次執行,看看是否能在出提示框之前中斷!如果不能!說明你選的不對,需要再RET到上面的一個CALL裡面,然後再上面的CALL內部設斷點,當然這個斷點儘量設的有經驗點,別讓人笑話!,一般是在一個跳轉的上面,因為跳轉對我們來說很重要,多試試看!不行的話再重來!誰讓我們是菜鳥!不是高手,能夠很快進入關鍵的CALL,然後找到關鍵的跳轉!其實用BPX 378 和BPX DEVICEIOCONTROL也同樣存在著我們們碰到的問題!就是在什麼地方在此設斷,這個地址非常重要,如果能很快找到!那你也是老鳥了!呵呵

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00454BF8(U)
|
:00454BEA 8B45FC                  mov eax, dword ptr [ebp-04]
:00454BED E87AFDFFFF              call 0045496C
:00454BF2 C3                      ret


廢話少說!經過多次不停的測試!我們初步把範圍縮小到!

:0045CEB8 53                      push ebx
:0045CEB9 6683783200              cmp word ptr [eax+32], 0000
:0045CEBE 740A                    je 0045CECA
:0045CEC0 8BD8                    mov ebx, eax
:0045CEC2 8BD0                    mov edx, eax
:0045CEC4 8B4334                  mov eax, dword ptr [ebx+34]
:0045CEC7 FF5330                  call [ebx+30]    *********

這個CALL非常重要!那麼怎麼判斷是非常重要的CALL哪!這裡面有這樣幾個特點

1:攔住這個CALL應該再出現錯誤之前
2:它的下面一個子CALL應該在錯誤之後意思就是說
                   
                          1
                    1.1    1.2  1.3  1.4  .......
            1.1.1  1.1.2  1.2.1 1.2.2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果你發現你當斷點設在1的地方!錯誤還沒出現  但是斷點設在1.1.1(或者1.1.2等等)的時候,已經出錯了!
那麼說明出錯的CALL一定在1.1或者1.2這些CALL的等級中間!詳細的跟蹤他們是你的關鍵!我們由此不難發現
我們可以設斷電45CEC7  然後執行程式跟蹤!發現在執行中被中斷了兩次!你不用跟蹤第一次!因為我們把斷點設的等級太高!此處會被別的多次呼叫!關鍵是下面的子CALL!


:00761160 0300                    add eax, dword ptr [eax]
:00761162 0000                    add byte ptr [eax], al
:00761164 55                      push ebp
:00761165 8BEC                    mov ebp, esp
:00761167 B911000000              mov ecx, 00000011

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00761171(C)
|
:0076116C 6A00                    push 00000000
:0076116E 6A00                    push 00000000
:00761170 49                      dec ecx
:00761171 75F9                    jne 0076116C
:00761173 51                      push ecx
:00761174 53                      push ebx
:00761175 56                      push esi
:00761176 57                      push edi
:00761177 8945FC                  mov dword ptr [ebp-04], eax
:0076117A 33C0                    xor eax, eax
:0076117C 55                      push ebp
:0076117D 683C197600              push 0076193C
:00761182 64FF30                  push dword ptr fs:[eax]
:00761185 648920                  mov dword ptr fs:[eax], esp
:00761188 8B45FC                  mov eax, dword ptr [ebp-04]
:0076118B 83B8580B000000          cmp dword ptr [eax+00000B58], 00000000
:00761192 0F8539070000            jne 007618D1                              ***********
:00761198 8B45FC                  mov eax, dword ptr [ebp-04]
:0076119B C780580B000001000000    mov dword ptr [ebx+00000B58], 00000001

* Possible StringData Ref from Data Obj ->"@"
                                |
:007611A5 A178677700              mov eax, dword ptr [00776778]
:007611AA 803800                  cmp byte ptr [eax], 00
:007611AD 0F8469060000            je 0076181C                                *************

* Possible StringData Ref from Data Obj ->""
                                |
:007611B3 A124687700              mov eax, dword ptr [00776824]
:007611B8 8B00                    mov eax, dword ptr [eax]

* Possible StringData Ref from Data Obj ->""
                                |
:007611BA 8B15AC5E7700            mov edx, dword ptr [00775EAC]
:007611C0 3B02                    cmp eax, dword ptr [edx]
:007611C2 7415                    je 007611D9

* Possible StringData Ref from Data Obj ->""
                                |
:007611C4 A124687700              mov eax, dword ptr [00776824]
:007611C9 8B00                    mov eax, dword ptr [eax]

* Possible StringData Ref from Data Obj ->""
                                |
:007611CB 8B15F05E7700            mov edx, dword ptr [00775EF0]
:007611D1 3B02                    cmp eax, dword ptr [edx]
:007611D3 0F853A030000            jne 00761513

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:007611C2(C)
|

* Possible StringData Ref from Data Obj ->"@["
                                |
:007611D9 A1106A7700              mov eax, dword ptr [00776A10]
:007611DE 8B00                    mov eax, dword ptr [eax]

* Possible StringData Ref from Data Obj ->""
                                |
:007611E0 8B1540677700            mov edx, dword ptr [00776740]
:007611E6 3B02                    cmp eax, dword ptr [edx]
:007611E8 7415                    je 007611FF

* Possible StringData Ref from Data Obj ->"@["
                                |
:007611EA A1106A7700              mov eax, dword ptr [00776A10]
:007611EF 8B00                    mov eax, dword ptr [eax]

* Possible StringData Ref from Data Obj ->""
                                |
:007611F1 8B156C677700            mov edx, dword ptr [0077676C]
:007611F7 3B02                    cmp eax, dword ptr [edx]
:007611F9 0F8514030000            jne 00761513



我們會在00761192處和007611AD出發現兩個比較大的跳轉,試試看!你會發現如果在761192處跳的話!嘿嘿!你會發現你連使用者名稱都不用敲就進去了!沒有提示找不到狗!運氣不錯!但是你點選一下選單!麻煩出來了!不好用!
OK!換!007611AD,讓他跳轉!這次不錯!成功出現提示連線資料庫!然後選擇伺服器!選擇資料庫,使用者名稱!密碼!哈哈!進去了!試著執行一下!怎麼樣???不錯吧!就是這麼簡單!需要的就是時間和精力!

我的文章完了!我向大家看不懂得地方就是那些什麼什麼一級一級的子CALL吧!我實在想不出別的辦法來描述我心中的想法,我會在找時間好好琢磨一下自己的語言!希望您能看得懂!這是我處理軟體的最先的辦法!一般來說!能解決大部分問題!當然有些軟體這樣來回的簡單跳轉是不能解決問題的!還需要TRW去好好分析讀狗流程!這不是我這篇菜鳥教程中的內容!下期再說吧!


--------------------------------------------------------------------------------
QQ:150025153  EMAIL:qdcrack@sina.com

相關文章