影音神探V2.02 bY E語言 (註冊碼與爆破附記憶體序號產生器) (8千字)

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

目標:影音神探V2.02 (E語言寫的)
下載:官方論壇上不去,各大網站都有下,搜尋一下就行了
保護:根據硬碟ID號輸入註冊碼,100次試用
原因:試用後果然是好工具,感謝偉大的神KaoKao
簡介:只要進入電影播放網頁,就能夠獲得影片的真實地址,方便快捷,對現今絕大部分的電影網站都實用,找到電影真實地址後雙擊可以呼叫影音傳送帶來下載;最新版本不但支援電影的嗅探,還支援其它多種檔案型別,如FLASH,HTML,RAR檔案等等


    本不想寫破文,因為爆破的話也不難,但這個工具個人認為有些特殊性,另外KaoKao提醒我現在論壇上關於E語言的破解很少,此文寫得倉促,請高手指正。

    執行程式,出現註冊視窗,顯示你還能用100次,註冊視窗裡顯示你的硬碟ID號,如果輸入錯誤註冊碼的話會提示註冊失敗,註冊視窗消失並進入主程式,程式會開啟作者主頁進入後仍然可以點選“註冊”來輸入註冊碼,因為程式每執行一次或註冊一次的話就會開啟作者主頁,嚴重影響破解和平時使用,所以我們先把這個麻煩的東西去掉。

    用UltraEdit開啟MOVurl.exe檔案,搜尋字串“http://wanjun.gg.ggv”,找到只有一個地方,然後看16進位制區,這個網址的前面有4個位元組是13 00 00 00,把從13開始到網址的最後一個字元全改成00,儲存後執行程式就不會開啟任何網頁或執行IE啦。


    現在開始找註冊碼,程式有兩個地方可以輸入註冊碼,一個是程式開始,一個是程式進入後按“註冊”按鍵,為了除錯方便,我們進入程式後再註冊。E語言和VB差不多,執行E語言的程式都需要它自己的執行庫,也就是說你不能直接看到程式是呼叫什麼函式來工作的,但E語言有個好處是它執行庫封裝的函式都是些標準的函式,所以跟蹤到庫檔案裡的話還能看得明白它是呼叫什麼函式,不象VB的函式很多都不知道是什麼意思。點選“註冊”,輸入任意假註冊碼,註冊碼的長度有沒有限制我沒有去找,我輸入了10位數,程式提示“註冊失敗”,先不要點選“確定”,這時開啟TRW,用bpx lockmytask來下斷,隨便提一下這是個很好的斷點,很久以前看教程學到的,這個斷點的用處是如果程式彈出一個訊息視窗的話,我們只要按下“確定”鍵就能斷下來,然後用PMODULE命令就可以回到程式的領空,這時就可以逆向找到跳到出錯地方的判斷點啦。用這個方法我們找到程式428B66的地方是出現註冊失敗的地方,用W32DASM反彙編我們可以找到程式是從428743的地方判斷後跳過來的,用TRW在428743設斷點,斷下後用r fl z強行讓程式不跳,誰知還是註冊失敗,看來程式不只一個地方在判斷註冊,我們再用bpx lockmytask來找,發現428B0A也是一個註冊失敗的提示視窗,用W32DASM能找到是從4288CE跳過來的。

    整理一下:
    428743(判斷)----->428B66(提示註冊失敗)
    4288CE(判斷)----->428B0A(提示註冊失敗)

    現在只要把這兩個判斷的地方NOP掉或者改成JNZ的話,程式會提示你註冊成功,註冊按鍵消失,遺憾的是,程式重新執行後仍然是未註冊的,只不過你之前能試用此軟體的次數恢復為100次,雖然這樣也算是可以無限使用,但始終是不方便,下面我們想辦法找到正確的註冊碼。

    用bpx hmemcpy下斷攔不下來,想想程式一定會用硬碟ID號來算我們的註冊碼,所以搜尋記憶體找硬碟ID號的儲存地址,一共找到兩個地方,然後用bpm來監視這兩個地址的讀寫,斷下後,你會發現程式的讀寫記憶體都是在庫檔案krnln.fnr的領空裡執行的,斷過幾次你會發現其中一個地址被其它資料覆蓋了,一個地址生成了一串數字,10位的,先把它抄下來,繼續監視,發現在krnln的領空裡它把這串數字和我們輸入的假註冊碼做比較,比較的方法很簡單,是明碼比較,相信這就是正確的註冊碼,退出TRW輸入剛才得到的數字,在428743的地方下斷,程式不會跳到出錯提示那裡去了,也就是說註冊碼是正確的

004286F7    E8 73070000     CALL MOVURLBA.00428E6F
004286FC    83C4 10         ADD ESP,10
004286FF    8945 E8         MOV DWORD PTR SS:[EBP-18],EAX
00428702    8B45 EC         MOV EAX,DWORD PTR SS:[EBP-14]
00428705    50              PUSH EAX
00428706    FF75 E8         PUSH DWORD PTR SS:[EBP-18]
00428709    E8 C66DFFFF     CALL MOVURLBA.0041F4D4
0042870E    83C4 08         ADD ESP,8
00428711    83F8 00         CMP EAX,0
00428714    B8 00000000     MOV EAX,0
00428719    0F94C0          SETE AL
0042871C    8945 E4         MOV DWORD PTR SS:[EBP-1C],EAX  <----記憶體標誌
0042871F    8B5D E8         MOV EBX,DWORD PTR SS:[EBP-18]
00428722    85DB            TEST EBX,EBX
00428724    74 09           JE SHORT MOVURLBA.0042872F
00428726    53              PUSH EBX
00428727    E8 49070000     CALL MOVURLBA.00428E75
0042872C    83C4 04         ADD ESP,4
0042872F    8B5D EC         MOV EBX,DWORD PTR SS:[EBP-14]
00428732    85DB            TEST EBX,EBX
00428734    74 09           JE SHORT MOVURLBA.0042873F
00428736    53              PUSH EBX
00428737    E8 39070000     CALL MOVURLBA.00428E75
0042873C    83C4 04         ADD ESP,4
0042873F    837D E4 00      CMP DWORD PTR SS:[EBP-1C],0    <----比較標誌,不對就完了
00428743    0F84 EF030000   JE MOVURLBA.00428B38

    但是,程式仍然提示註冊失敗,原以為上面的兩個判斷點都是判斷註冊碼的,既然我註冊碼都對了,為什麼還會出錯,在4288CE上設斷,發現程式還是跳到出錯提示那裡了,看來程式還有判斷其它資料的地方。讓我們看看這個判斷的地方

00428879    E8 FD050000     CALL MOVURLBA.00428E7B
0042887E    83C4 04         ADD ESP,4
00428881    68 04000080     PUSH 80000004
00428886    6A 00           PUSH 0
00428888    8B45 EC         MOV EAX,DWORD PTR SS:[EBP-14]
0042888B    85C0            TEST EAX,EAX
0042888D    75 05           JNZ SHORT MOVURLBA.00428894
0042888F    B8 43000000     MOV EAX,43
00428894    50              PUSH EAX
00428895    68 04000000     PUSH 4
0042889A    BB 48010000     MOV EBX,148
0042889F    E8 C5050000     CALL MOVURLBA.00428E69
004288A4    83C4 34         ADD ESP,34
004288A7    8945 E0         MOV DWORD PTR SS:[EBP-20],EAX  <----又在寫標誌,前面的CALL就是在查ID號
004288AA    8B5D EC         MOV EBX,DWORD PTR SS:[EBP-14]
004288AD    85DB            TEST EBX,EBX
004288AF    74 09           JE SHORT MOVURLBA.004288BA
004288B1    53              PUSH EBX
004288B2    E8 BE050000     CALL MOVURLBA.00428E75
004288B7    83C4 04         ADD ESP,4
004288BA    8B5D E4         MOV EBX,DWORD PTR SS:[EBP-1C]
004288BD    85DB            TEST EBX,EBX
004288BF    74 09           JE SHORT MOVURLBA.004288CA
004288C1    53              PUSH EBX
004288C2    E8 AE050000     CALL MOVURLBA.00428E75
004288C7    83C4 04         ADD ESP,4
004288CA    837D E0 FF      CMP DWORD PTR SS:[EBP-20],-1   <----和第一個判斷類似,也是比較標誌
004288CE    0F84 08020000   JE MOVURLBA.00428ADC

    為了弄清楚它到底在判斷什麼,我把硬碟ID號的存放地址、我能找到的我輸入的註冊碼的地址都監視著,看看程式在幹什麼,最後發現經過註冊碼的比較後,程式又拿硬碟ID號來用了,原來程式在拿我的硬碟ID號和記憶體裡一大串的數字在做比較,這一大串數字一看就有點象註冊碼,又象是硬碟ID,我看了看這些數字裡根本就沒有我的硬碟ID,當它比較完後,就退出到上面的地方,然後寫記憶體標誌,當然這個標誌就不是程式要的-1啦,試了幾次,發現這些數字每次都一樣,我的硬碟ID也不會變,所以這個跳轉一定會跳到出錯的,也就是說程式在拿我的硬碟ID號來查表,表裡沒有我的ID號,就提示註冊失敗,原來作者把已經註冊的使用者的ID號都做到檔案裡面,執行的時候先看看我們的ID號是不是註冊使用者的ID,如果不是,就算註冊碼正確也是沒用的。用UltraEdit開啟程式目錄下有可能是資料檔案的都開啟來查詢,都沒有發現任何資料,因為我想如果把表中的某一個ID改成我自己的,那程式就會認為我是註冊過的使用者了,於是用bpm監視那一大串ID表,看看程式是怎樣生成這個表的,最後發現程式是呼叫了dp1.fne來算出這個表的,好象還用了RSA的演算法,於是就放棄了這個方法,因為這樣沒有通用性,改了也只能我自己註冊成功,而且它的表是加密的演算法很複雜,這樣只能暴破了。

    把4288CE的0F8408020000改成0F8508020000,再輸入剛才得到的註冊碼,就顯示註冊成功啦。還沒完,退出再重新啟動程式,程式仍然顯示未註冊,這裡就比較難啦,因為程式肯定啟動會判斷你註冊碼對不對,還要判斷你的ID是不是註冊使用者的,程式執行只顯示註冊視窗,要找到這些比較就有點難了。主要是斷點難下,我在這還是用了開始用的方法,先不關掉註冊視窗,用TRW在記憶體中搜尋硬碟ID的存放地址,然後用bpm監視讀寫,重新啟動程式,還好,程式儲存ID的地址每次都是一樣的,這樣我們就能看到程式在啟動的時候查表了。

00422076    E8 EE6D0000     CALL MOVURLBA.00428E69
0042207B    83C4 34         ADD ESP,34
0042207E    8945 D0         MOV DWORD PTR SS:[EBP-30],EAX  <----寫標誌
00422081    8B5D DC         MOV EBX,DWORD PTR SS:[EBP-24]
00422084    85DB            TEST EBX,EBX
00422086    74 09           JE SHORT MOVURLBA.00422091
00422088    53              PUSH EBX
00422089    E8 E76D0000     CALL MOVURLBA.00428E75
0042208E    83C4 04         ADD ESP,4
00422091    8B5D D4         MOV EBX,DWORD PTR SS:[EBP-2C]
00422094    85DB            TEST EBX,EBX
00422096    74 09           JE SHORT MOVURLBA.004220A1
00422098    53              PUSH EBX
00422099    E8 D76D0000     CALL MOVURLBA.00428E75
0042209E    83C4 04         ADD ESP,4
004220A1    837D D0 FF      CMP DWORD PTR SS:[EBP-30],-1   <----比較標誌位
004220A5    0F84 4D000000   JE MOVURLBA.004220F8

    把4220A5的0F844D000000改成0F854D000000,程式就完美破解了,另外提示一下,找這個地址一定要先進入程式成功註冊一次,不然程式是不會經過這裡的,因為不註冊的話,程式判斷你的註冊碼不對,就直接跳過去了。

    用序號產生器編寫器根據下面資料做個記憶體序號產生器

    中斷地址:4286E3
    中斷次數:1
    第一位元組:83
    指令長度:3
    選擇記憶體方式,暫存器選EAX,其它選項不用選

    在我機上用這個方法得出的註冊碼最後會有一個空格,複製的時候不要把空格也複製了



-=End=-
       _/_/_/
    _/          _/_/_/  _/_/_/  _/_/
     _/_/    _/    _/  _/    _/    _/
        _/  _/    _/  _/    _/    _/
 _/_/_/      _/_/_/  _/    _/    _/

                                            Sam.com[CCG]
                                           23:30 2004-2-27

相關文章