史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   Hacker/Cracker 及加解密技術文件 (http://forum.slime.com.tw/f132.html)
-   -   音神探V2.02 bY E語言 (註冊碼與爆破附記憶體註冊機) (http://forum.slime.com.tw/thread103315.html)

psac 2004-04-01 06:35 AM

音神探V2.02 bY E語言 (註冊碼與爆破附記憶體註冊機)
 
目標:影音神探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]


所有時間均為台北時間。現在的時間是 07:51 PM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1