標 題: flashget 1.6的下載執行緒增加
發帖人:peansen
時 間: 2005-01-10 20:56
詳細資訊:
不是什麼好文章,大家隨便看看就好了
用空到我的blog裡看看
http://peansen.blog.edu.cn/
flashget 1.6的下載執行緒增加
作者:peansen
日期:2005-1-10
flashget確實是一個練習MFC破解的好地方
我想大家對flashget一定很熟悉。他的最大下載執行緒是10,在這裡我想記下我修改下載執行緒的過程。
首先我們開啟flashget工具預設-下載屬性,改為檔案分成11部分下載,點確定,我們看到對話方塊提示我們資料必須在1-10之間,好,我們就從這裡入手,用odbg載入flashget,下斷點bp MessageBoxA。重複上述操作。被斷下,執行到使用者程式碼並關掉flashget跳出的提示框,我們可以看到
004BF433 |> \8D85 ECFEFFFF lea eax,dword ptr ss:[ebp-114]
004BF439 |. 68 04010000 push 104 ; /BufSize = 104 (260.)
004BF43E |. 50 push eax ; |PathBuffer
004BF43F |. 6A 00 push 0 ; |hModule = NULL
004BF441 |. 8DBD ECFEFFFF lea edi,dword ptr ss:[ebp-114] ; |
004BF447 |. FF15 A8F34D00 call near dword ptr ds:[<&KERNEL32.GetMod>; \GetModuleFileNameA
004BF44D |> 53 push ebx ; /Style
004BF44E |. 57 push edi ; |Title
004BF44F |. FF75 08 push dword ptr ss:[ebp+8] ; |Text
004BF452 |. FF75 F4 push dword ptr ss:[ebp-C] ; |hOwner
004BF455 |. FF15 10F74D00 call near dword ptr ds:[<&USER32.MessageB>; \MessageBoxA
004BF45B |. 85F6 test esi,esi ; flashget.005107DC
004BF45D |. 8BF8 mov edi,eax
現在我們要做的是找出這個函式的呼叫函式,一層一層往上找。這裡要緊跟一個線索:堆疊裡的字串,看看是誰壓入這個字串的。我們跟到這邊
0040CB8F . 8BC8 mov ecx,eax
0040CB91 . E8 AA740000 call flashget.00414040//eax從這個函式里來----進入
0040CB96 . 8B4C24 14 mov ecx,dword ptr ss:[esp+14]
0040CB9A . 50 push eax ; /Arg4這個eax=0a(就是限制值)
0040CB9B . 6A 01 push 1 ; |Arg3 = 00000001
0040CB9D . 51 push ecx ; |Arg2
0040CB9E . 57 push edi ; |Arg1
0040CB9F . E8 22160B00 call flashget.004BE1C6 ; \flashget.004BE1C6
0040CBA4 . 8B5424 14 mov edx,dword ptr ss:[esp+14]
跟進,下面是其中一部分
004140A6 |. C2 0400 retn 4
004140A9 |> 8B81 38010000 mov eax,dword ptr ds:[ecx+138] ; Case 2D of switch 00414044
004140AF |. C2 0400 retn 4
004140B2 |> 8B81 C8010000 mov eax,dword ptr ds:[ecx+1C8] 我們的是這個,看他的地址 ; Case 2 of switch 00414044
004140B8 |. C2 0400 retn 4
004140BB |> 8B81 CC010000 mov eax,dword ptr ds:[ecx+1CC] ; Case 3 of switch 00414044
004140C1 |. C2 0400 retn 4
我們看到上面的記憶體地址:510908
好了,清楚我們剛才跟蹤的所有斷點(函式一層層跟蹤時設的好多斷點)重新載入程式,在記憶體510908處設寫入記憶體斷點,F9我們來到
004171EF |. E8 E0200B00 call flashget.004C92D4
004171F4 |. 6A 08 push 8
004171F6 |. 68 908A5000 push flashget.00508A90 ; ASCII "ConnType"
004171FB |. 68 D48A5000 push flashget.00508AD4 ; ASCII "Connection"
00417200 |. 8BCE mov ecx,esi
00417202 |. 8986 E0000000 mov dword ptr ds:[esi+E0],eax
00417208 |. E8 C7200B00 call flashget.004C92D4
0041720D |. 6A 0A push 0A//最大是10
0041720F |. 68 C08C5000 push flashget.00508CC0 ; ASCII "Max Parallel Num"
00417214 |. 68 AC715000 push flashget.005071AC ; ASCII "General"
00417219 |. 8BCE mov ecx,esi
0041721B |. 8986 E4000000 mov dword ptr ds:[esi+E4],eax
00417221 |. E8 AE200B00 call flashget.004C92D4
00417226 |. 83F8 1E cmp eax,1E//超過擇直接用30,就是你只改上面是不夠的
00417229 |. 8986 C8010000 mov dword ptr ds:[esi+1C8],eax
0041722F |. 7E 0A jle short flashget.0041723B
00417231 |. C786 C8010000 1>mov dword ptr ds:[esi+1C8],1E
0041723B |> 6A 08 push 8
0041723D |. 68 B48C5000 push flashget.00508CB4 ; ASCII "MaxSimJobs"
00417242 |. 68 AC715000 push flashget.005071AC ; ASCII "General"
00417247 |. 8BCE mov ecx,esi
上面的程式碼很容易分析,猜也猜的到。我開始作了這個修改
0041720D |. 6A 0A push 0A-----------〉改為f0
0041720F |. 68 C08C5000 push flashget.00508CC0 ; ASCII "Max Parallel Num"
00417214 |. 68 AC715000 push flashget.005071AC ; ASCII "General"
00417219 |. 8BCE mov ecx,esi
0041721B |. 8986 E4000000 mov dword ptr ds:[esi+E4],eax
00417221 |. E8 AE200B00 call flashget.004C92D4
00417226 |. 83F8 1E cmp eax,1E-------------〉改為f0
執行程式顯示檔案分成-16,我靠。變成負數了,我管那麼多,我也不想再去取掉這個unsigned的問題了,直接把f0改成7f(呵呵,在可能的範圍內取最大利益。)上面的兩處改了就好了。在1-127之間,我想夠了。我拿了個做實驗,用120,呵呵,結果程式死了。哎,執行緒不要太多,不然會快的受不了。只要高興就好。