=============================
THUNDER SOFTWARE Thunder 4.7.3.53 PEdiy Tutorial
=============================

=============================
程序说明

什么是迅雷?
迅雷是一款新型的基于P2SP技术的下载软件。它使得您的下载更稳定和更迅速。 
要进一步了解迅雷,就要了解到什么是P2SP。
我想大多数人对P2P并不陌生,P2P的下载概念,简单点说,
就是下载不再象传统方式那样只能依赖服务器,内容的传递可以在网络上的各个终端机器中进行。
P2SP除了包含P2P以外,P2SP的“S”是指服务器。
P2SP有效地把原本孤立的服务器和其镜像资源以及P2P资源整合到了一起。
也就是说,在下载的稳定性和下载的速度上,都比传统的P2P或P2S有了非常大的提高。
=============================

=============================
破解说明

保护方式:
Freeware+Advertisement

破解目的:
最近迅雷在网上大行其道,其下载速度确实不凡。
不过本人一直使用本本,屏幕太小,Thunder的广告条窗口让俺本来就小小的屏幕变的更小了。
郁闷中,想起以前的FlashGet等下载软件都有人对其进行过修改,去掉了广告条。
我也自己试试,看看能不能来个简单的DIY。

破解结果:
通过修改3个字节,修改掉广告条窗口。
可惜的是,播放广告内容的函数好像和整个软件的功能有关,
不敢随便乱改,就让它在消失的窗口里播放去吧,^_^。
=============================

=============================
破解分析

1. PEiD检测主程序Thunder.exe,无壳,VC6编译。

2. 因为是DIY,与加密解密无关,以往使用的加密算法检测就省略了。
   
3. 用OllyDbg载入Thunder.exe,搜索当前模块中的名称。
   因为要DIY的与窗口有关,搜索MoveWindow API,没有发现,看来程序使用的MFC封装。
   在MFC库里寻找,发现MFC42.#4299_CWnd::MoveWindow。
   对所有参考设断,共29处。
   F9运行,程序中断第一个MFC42.#4299_CWnd::MoveWindow处。
   向下查看源码,发现了4个连续的DeferWindowPos
   挨个分析MFC42.#4299_CWnd::MoveWindow和DeferWindowPos的参数,
   正好与程序开始显示的窗口大小结构相同。
   
   修改第1个DeferWindowPos的参数,使其高度为零。
   修改第2个DeferWindowPos的参数,使其高度使原第1、2个DeferWindowPos高度的和(C0+103);
   原点位置为原第1个DeferWindowPos的原点(0,0)。
   
   F9,继续运行,,取消其他MFC42.#4299_CWnd::MoveWindow断点。
   程序运行,广告条消失,修改成功!    
=============================

=============================
源码分析

通过对MFC42.#4299_CWnd::MoveWindow设断,一步跟踪到以下代码:

0041ED4C   |.  E8 CD9E0800      call <jmp.&MFC42.#4299_CWnd::MoveWindow>        ; --->中断在这里
0041ED51   |.  6A 04            push 4                                          ; /Count = 4
0041ED53   |.  FF15 508F5500    call dword ptr ds:[<&USER32.BeginDeferWindowPos>; \BeginDeferWindowPos
0041ED59   |.  8D75 CC          lea esi,dword ptr ss:[ebp-34]                   ; --->开始定义窗口位置,个数为4
0041ED5C   |.  8D7D EC          lea edi,dword ptr ss:[ebp-14]
0041ED5F   |.  A5               movs dword ptr es:[edi],dword ptr ds:[esi]
0041ED60   |.  A5               movs dword ptr es:[edi],dword ptr ds:[esi]
0041ED61   |.  A5               movs dword ptr es:[edi],dword ptr ds:[esi]
0041ED62   |.  8945 FC          mov dword ptr ss:[ebp-4],eax
0041ED65   |.  8D83 D0000000    lea eax,dword ptr ds:[ebx+D0]
0041ED6B   |.  85C0             test eax,eax
0041ED6D   |.  A5               movs dword ptr es:[edi],dword ptr ds:[esi]
0041ED6E   |.  74 03            je short Thunder.0041ED73
0041ED70   |.  8B40 20          mov eax,dword ptr ds:[eax+20]
0041ED73   |>  6A 04            push 4                                          ; /Flags = SWP_NOZORDER
0041ED75   |.  6A 3C            push 3C                                         ; |
0041ED77   |.  59               pop ecx                                         ; |--->修改为00
0041ED78   |.  2B4D F0          sub ecx,dword ptr ss:[ebp-10]                   ; |
0041ED7B   |.  51               push ecx                                        ; |Height=3C->00 
0041ED7C   |.  8B4D F4          mov ecx,dword ptr ss:[ebp-C]                    ; |
0041ED7F   |.  2B4D EC          sub ecx,dword ptr ss:[ebp-14]                   ; |
0041ED82   |.  51               push ecx                                        ; |Width
0041ED83   |.  FF75 F0          push dword ptr ss:[ebp-10]                      ; |Y=0
0041ED86   |.  FF75 EC          push dword ptr ss:[ebp-14]                      ; |X=0
0041ED89   |.  6A 00            push 0                                          ; |hAfterWnd = HWND_TOP
0041ED8B   |.  50               push eax                                        ; |hWnd
0041ED8C   |.  FF75 FC          push dword ptr ss:[ebp-4]                       ; |hDefer
0041ED8F   |.  FF15 4C8F5500    call dword ptr ds:[<&USER32.DeferWindowPos>]    ; \DeferWindowPos
0041ED95   |.  8D75 CC          lea esi,dword ptr ss:[ebp-34]                   ; --->广告条窗口
0041ED98   |.  8D7D EC          lea edi,dword ptr ss:[ebp-14]
0041ED9B   |.  A5               movs dword ptr es:[edi],dword ptr ds:[esi]
0041ED9C   |.  A5               movs dword ptr es:[edi],dword ptr ds:[esi]
0041ED9D   |.  A5               movs dword ptr es:[edi],dword ptr ds:[esi]
0041ED9E   |.  8D83 68010000    lea eax,dword ptr ds:[ebx+168]
0041EDA4   |.  85C0             test eax,eax
0041EDA6   |.  A5               movs dword ptr es:[edi],dword ptr ds:[esi]
0041EDA7   |.  74 03            je short Thunder.0041EDAC
0041EDA9   |.  8B40 20          mov eax,dword ptr ds:[eax+20]
0041EDAC   |>  8B4D F4          mov ecx,dword ptr ss:[ebp-C]
0041EDAF   |.  6A 04            push 4                                          ; /Flags = SWP_NOZORDER
0041EDB1   |.  2B4D EC          sub ecx,dword ptr ss:[ebp-14]                   ; |
0041EDB4   |.  68 03010000      push 103                                        ; |Height = 103 (259.)--->修改为13F(103+3C)
0041EDB9   |.  51               push ecx                                        ; |Width
0041EDBA   |.  6A 3C            push 3C                                         ; |Y = 3C (60.)--->修改为00
0041EDBC   |.  FF75 EC          push dword ptr ss:[ebp-14]                      ; |X
0041EDBF   |.  6A 00            push 0                                          ; |hAfterWnd = HWND_TOP
0041EDC1   |.  50               push eax                                        ; |hWnd
0041EDC2   |.  FF75 FC          push dword ptr ss:[ebp-4]                       ; |hDefer
0041EDC5   |.  FF15 4C8F5500    call dword ptr ds:[<&USER32.DeferWindowPos>]    ; \DeferWindowPos
0041EDCB   |.  8D75 CC          lea esi,dword ptr ss:[ebp-34]                   ; --->下载项目窗口
0041EDCE   |.  8D7D EC          lea edi,dword ptr ss:[ebp-14]
0041EDD1   |.  A5               movs dword ptr es:[edi],dword ptr ds:[esi]
0041EDD2   |.  A5               movs dword ptr es:[edi],dword ptr ds:[esi]
0041EDD3   |.  A5               movs dword ptr es:[edi],dword ptr ds:[esi]
0041EDD4   |.  A5               movs dword ptr es:[edi],dword ptr ds:[esi]
0041EDD5   |.  8B45 F4          mov eax,dword ptr ss:[ebp-C]
0041EDD8   |.  8D8B 3C1C0000    lea ecx,dword ptr ds:[ebx+1C3C]
0041EDDE   |.  48               dec eax
0041EDDF   |.  85C9             test ecx,ecx
0041EDE1   |.  8945 F4          mov dword ptr ss:[ebp-C],eax
0041EDE4   |.  74 03            je short Thunder.0041EDE9
0041EDE6   |.  8B49 20          mov ecx,dword ptr ds:[ecx+20]
0041EDE9   |>  2B45 EC          sub eax,dword ptr ss:[ebp-14]
0041EDEC   |.  6A 04            push 4                                          ; /Flags = SWP_NOZORDER
0041EDEE   |.  68 C0000000      push 0C0                                        ; |Height = C0 (192.)
0041EDF3   |.  50               push eax                                        ; |Width
0041EDF4   |.  68 3F010000      push 13F                                        ; |Y = 13F (319.)
0041EDF9   |.  FF75 EC          push dword ptr ss:[ebp-14]                      ; |X
0041EDFC   |.  6A 00            push 0                                          ; |hAfterWnd = HWND_TOP
0041EDFE   |.  51               push ecx                                        ; |hWnd
0041EDFF   |.  FF75 FC          push dword ptr ss:[ebp-4]                       ; |hDefer
0041EE02   |.  FF15 4C8F5500    call dword ptr ds:[<&USER32.DeferWindowPos>]    ; \DeferWindowPos
0041EE08   |.  8D75 CC          lea esi,dword ptr ss:[ebp-34]
0041EE0B   |.  8D7D EC          lea edi,dword ptr ss:[ebp-14]
0041EE0E   |.  A5               movs dword ptr es:[edi],dword ptr ds:[esi]
0041EE0F   |.  A5               movs dword ptr es:[edi],dword ptr ds:[esi]
0041EE10   |.  A5               movs dword ptr es:[edi],dword ptr ds:[esi]
0041EE11   |.  A5               movs dword ptr es:[edi],dword ptr ds:[esi]
0041EE12   |.  8B45 F4          mov eax,dword ptr ss:[ebp-C]
0041EE15   |.  81C3 A41B0000    add ebx,1BA4
0041EE1B   |.  85DB             test ebx,ebx
0041EE1D   |.  8D48 FF          lea ecx,dword ptr ds:[eax-1]
0041EE20   |.  74 03            je short Thunder.0041EE25
0041EE22   |.  8B5B 20          mov ebx,dword ptr ds:[ebx+20]
0041EE25   |>  6A 04            push 4                                          ; /Flags = SWP_NOZORDER
0041EE27   |.  2BC1             sub eax,ecx                                     ; |
0041EE29   |.  68 C0000000      push 0C0                                        ; |Height = C0 (192.)
0041EE2E   |.  50               push eax                                        ; |Width
0041EE2F   |.  68 3F010000      push 13F                                        ; |Y = 13F (319.)
0041EE34   |.  51               push ecx                                        ; |X
0041EE35   |.  6A 00            push 0                                          ; |hAfterWnd = HWND_TOP
0041EE37   |.  53               push ebx                                        ; |hWnd
0041EE38   |.  FF75 FC          push dword ptr ss:[ebp-4]                       ; |hDefer
0041EE3B   |.  FF15 4C8F5500    call dword ptr ds:[<&USER32.DeferWindowPos>]    ; \DeferWindowPos
0041EE41   |.  FF75 FC          push dword ptr ss:[ebp-4]                       ; /hDefer
0041EE44   |.  FF15 548F5500    call dword ptr ds:[<&USER32.EndDeferWindowPos>] ; \EndDeferWindowPos
0041EE4A   |.  5F               pop edi
0041EE4B   |.  5E               pop esi
0041EE4C   |.  5B               pop ebx
0041EE4D   |.  C9               leave
0041EE4E   \.  C3               retn
=============================

=============================
PEdiy

用UltraEdit修改相应代码:
1ED76处3C->00
1EDB5处03->3F
1EDBB处3C->00
=============================

=============================
Greets

感谢PEiD/C32ASM/OllyDbg及其插件的开发、修改者,没有他们的杰出工作也就没有本文。
=============================

=============================
MrBeer[CCG]
19/Jul/2005
=============================