-
-
flashget 1.6的下载线程增加
-
发表于:
2005-1-10 20:56
7923
-
不是什么好文章,大家随便看看就好了
用空到我的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,呵呵,结果程序死了。哎,线程不要太多,不然会快的受不了。只要高兴就好。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!