-
-
[原创]给暴风影音添加主程序关闭时自动结束传输进程功能
-
发表于:
2011-10-16 11:17
8235
-
[原创]给暴风影音添加主程序关闭时自动结束传输进程功能
【文章标题】:给暴风影音添加主程序关闭时自动结束传输进程功能
【文章作者】:lpfei
【软件名称】:暴风影音Build版本:3.11.9.12 MEE版本:3.11.7.15
【下载地址】:http://115.com/file/aqauicsz#StormII(版本3.11.9.12).rar
【使用工具】: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直播授课