-
-
[原创]给暴风影音添加主程序关闭时自动结束传输进程功能
-
发表于:
2011-10-16 11:17
8355
-
[原创]给暴风影音添加主程序关闭时自动结束传输进程功能
【文章标题】:给暴风影音添加主程序关闭时自动结束传输进程功能
【文章作者】:lpfei
【软件名称】:暴风影音Build版本:3.11.9.12 MEE版本:3.11.7.15
【下载地址】:314K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5I4y4g2)9J5k6h3y4G2L8g2)9J5c8X3k6A6L8r3g2Q4x3V1k6S2M7h3q4#2K9h3y4K6P5W2)9J5x3#2y4@1L8%4u0E0d9f1W2Q4x3U0S2Q4c8e0N6Q4z5o6W2Q4z5o6S2Q4c8e0k6Q4z5f1y4Q4b7f1x3K6i4K6u0W2x3e0q4Q4x3X3f1&6i4K6u0W2x3e0u0Q4x3U0W2Q4x3X3g2J5j5i4t1`.
【使用工具】:OllyDbg,LordPE,Rebaser.exe,Vc,WinHex
【操作平台】:Windows XP Sp2
--------------------------------------------------------------------------------
【详细过程】
暴风影音没有提供主程序关闭时结束Stormtray.exe功能,Stormtray.exe会占用宽带资源,于是就想让它随主程序"同死"。
参考不问年少前辈的这篇文章http://bbs.pediy.com/showthread.php?t=82841。在此表示感谢。
我发现暴风播放控件mps.dll每次都加载到0x1950000处,可以在它的入口函数处添加"同死"代码。可是它的ImageBase为0x10000000,于是可以用Rebaser.exe把ImageBase修改成0x1950000,修改mps.dll的重定位表,这样就没有地址重定向的问题了。
然后就可以在dll入口处添加自己的代码了,因为我比较菜,把结束代码先用c写了一遍(其实也是在网上抄的),参考反汇编代码写dll入口代码。
#include <windows.h>
#include <Tlhelp32.h>
main()
{
HANDLE SnapShot,ProcessHandle;
SHFILEINFO shSmall;
PROCESSENTRY32 ProcessInfo;
BOOL Status;
char msg[20]={"explorer.exe"}; //可以在此添加需要关闭的进程名称
SnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(SnapShot!=NULL)
{
ProcessInfo.dwSize=sizeof(ProcessInfo); //设置ProcessInfo的大小
Status=Process32First(SnapShot,&ProcessInfo);
while(Status)
{
if(!strcmp(msg,ProcessInfo.szExeFile))
{
//获取进程句柄,强行关闭
ProcessHandle=OpenProcess(PROCESS_ALL_ACCESS,FALSE,ProcessInfo.th32ProcessID);
TerminateProcess(ProcessHandle,0);
break;
}
//获取下一个进程的信息
Status=Process32Next(SnapShot,&ProcessInfo);
}
}
return 0;
}
用LordPE添加需要的api函数,具体怎么添加可以参考不问年少前辈的文章。添加的时候一定要把总是查看FirstThunk选上。记下ThunkRVA值,我这里是这样的:
CreateToolhelp32Snapshot:00141024
Process32First: 00141046
OpenProcess: 00141065
TerminateProcess: 00141089
Process32Next: 001410AA
这样就可以用call [00141024]调用CreateToolhelp32Snapshot函数。Strcmp直接从c反汇编代码copy下就可以使用了。
设计要使用的变量:
msg[20]:可以用WinHex在.data区段写入”Stormtray.exe”字符串
其余的使用局部变量比较方便:
SnapShot: ---->ebp-4
ProcessHandle: ---->ebp-8
Status: ---->ebp-C
ProcessInfo: ebp-10 --- ebp-134
typedef struct tagPROCESSENTRY32 {
DWORD dwSize; ---->ebp-134
DWORD cntUsage;
DWORD th32ProcessID; ---->ebp-12C
ULONG_PTR th32DefaultHeapID;
DWORD th32ModuleID;
DWORD cntThreads;
DWORD th32ParentProcessID;
LONG pcPriClassBase;
DWORD dwFlags;
TCHAR szExeFile[MAX_PATH]; ---->ebp-110
} PROCESSENTRY32, *PPROCESSENTRY32;
总共需要134h字节的堆栈空间。
使用od在.text区段写代码:

Dll入口会执行2次,我们只需要卸载dll的情况。
Pushad后的堆栈:

开辟堆栈:

主体程序:

最后用LordPE修改mps.dll入口点为0x0009E400。因为修改了多个文件,提供下载的暴风文件可能会被报毒。
本文介绍的方法局限性比较大,xp下修改的mps.dll直接放在win7测试了不可用,不过暴风影音的最新版本倒是可以用。就到这里了,有不对的地方欢迎指正。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课