flashget 1.6的下載執行緒增加

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

標 題: 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,呵呵,結果程式死了。哎,執行緒不要太多,不然會快的受不了。只要高興就好。

相關文章