#include <windows.h>
#include <stdio.h>
#include "Shlwapi.h"
HMODULE g_hMSIMG32 = NULL;
LPCTSTR lpzDllPath=".\\TabSiPlus\\TabSiPlus.dll";
LPCTSTR lpszSourceInsight = "Source Insight";
LPCTSTR lpszSiFrameWndClass = "si_Frame";
LPCTSTR lpszChindFrameWndClass = "si_Sw";
LPCTSTR lpszMdiClientWndClass = "MDIClient";
LPCTSTR lpszTextMark = " with TabSiPlus";
BOOL IsSourceInsightFrameWnd(HWND hWnd)
{
TCHAR szClassName[128],szTitle[256];
int nRtn = GetClassName(hWnd,szClassName,128);
if(nRtn == 0)
return FALSE;
nRtn = GetWindowText(hWnd,szTitle,256);
if(nRtn == 0)
return FALSE;
//类名是si_Frame,并且窗口标题又Source Insight字样,可基本判定是一个Source Insignt窗口
if((lstrcmp(lpszSiFrameWndClass,szClassName) == 0) && (StrStr(szTitle,lpszSourceInsight) != NULL))
{
if(StrStr(szTitle,lpszTextMark) != NULL)//有这个mark说明已经Hook过了,不要载骚扰source insignt窗口了
return FALSE;
return TRUE;
}
return FALSE;
}
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
BOOL bSuccess = TRUE;
DWORD dwProcessID=0;
GetWindowThreadProcessId(hwnd,&dwProcessID);
if (dwProcessID==GetCurrentProcessId())
{
if( IsSourceInsightFrameWnd(hwnd))
{
if(lParam)
{
HWND *pHwnd = (HWND *)lParam;
*pHwnd = hwnd;
bSuccess = FALSE;//已经找到一个Source Insight窗口,退出枚举
}
}
}
return bSuccess;
}
DWORD __stdcall ThreadProc(LPVOID lpParam)
{
HWND hSiFrmWnd = NULL;
do
{
::EnumWindows(EnumWindowsProc,(LPARAM)&hSiFrmWnd);
Sleep(10);
} while (hSiFrmWnd==NULL);
char szBuffer[ MAX_PATH ] = "";
GetModuleFileName(NULL, szBuffer, sizeof( szBuffer ));
for( int i = lstrlen(szBuffer) - 1; i >= 0; i-- )
{
if(szBuffer[i] == '\\' )
{
szBuffer[i]='\0';
break;
}
}
strcat( szBuffer, lpzDllPath);
WIN32_FIND_DATA FindFileData;
if (FindFirstFile(szBuffer,&FindFileData)!=INVALID_HANDLE_VALUE)
{
HMODULE hTabSiPluss = LoadLibrary( szBuffer );
FARPROC fpInitialize=GetProcAddress( hTabSiPluss, "Initialize");
fpInitialize();
}
else
{
MessageBox(NULL,"未找到.\\TabSiPlus\\TabSiPlus.dll文件","msimg32.dll",MB_OK|MB_ICONWARNING);
}
return 0;
}
BOOL __stdcall DllMain( HMODULE hModule, DWORD dwReason, LPVOID lpReserved )
{
if( dwReason == DLL_PROCESS_ATTACH )
{
HANDLE m_hThread=CreateThread(NULL,0,ThreadProc,NULL,0,NULL);
CloseHandle(m_hThread);
}
else if( dwReason == DLL_PROCESS_DETACH )
{
}
return TRUE;
}
#define MSIMG32_DEF_IMPORT(x, y) g_fp##x = GetProcAddress( g_hMSIMG32, y );
#define MSIMG32_BUILD_STUB(x) __declspec(naked) void x ( void ) { \
__asm pushad \
__asm call MSIMG32InitializeImports \
__asm popad \
__asm jmp g_fp##x## \
}
FARPROC g_fpvSetDdrawflag;
FARPROC g_fpAlphaBlend;
FARPROC g_fpDllInitialize;
FARPROC g_fpGradientFill;
FARPROC g_fpTransparentBlt;
void MSIMG32InitializeImports( void )
{
if( g_hMSIMG32 == NULL )
{
char szBuffer[ MAX_PATH ] = "";
GetSystemDirectory( szBuffer, sizeof( szBuffer ) );
strcat( szBuffer, "\\msimg32.dll");
g_hMSIMG32 = LoadLibrary( szBuffer );
MSIMG32_DEF_IMPORT( vSetDdrawflag, "vSetDdrawflag" );
MSIMG32_DEF_IMPORT( AlphaBlend, "AlphaBlend" );
MSIMG32_DEF_IMPORT( DllInitialize, "DllInitialize" );
MSIMG32_DEF_IMPORT( GradientFill, "GradientFill" );
MSIMG32_DEF_IMPORT( TransparentBlt, "TransparentBlt" );
}
}
MSIMG32_BUILD_STUB(vSetDdrawflag)
MSIMG32_BUILD_STUB(AlphaBlend)
MSIMG32_BUILD_STUB(DllInitialize)
MSIMG32_BUILD_STUB(GradientFill)
MSIMG32_BUILD_STUB(TransparentBlt)
TabSiPlus msimg32注入文件源码
5星 · 超过95%的资源 需积分: 10 69 浏览量
2012-08-28
11:51:40
上传
评论
收藏 22KB RAR 举报
chivalrys
- 粉丝: 126
- 资源: 20
最新资源
- 什么是移动应用开发-关于移动应用开发的相关介绍
- 第二组汇报 PPT.pptx
- 什么是大数据开发-相关介绍-关于大数据开发的相关介绍
- 什么是软件测试-相关介绍-关于软件测试的相关介绍
- 前端开发-什么是前端开发-关于前端开发的一些相关介绍
- Sora AI-关于文生视频的使用场景说明
- suno AI文生视频的相关教程和介绍使用
- 什么是后端开发-关于后端开发的一些小介绍分享
- Jurassic Pack Vol. II Dinosaurs 侏罗纪包卷恐龙二号Unity游戏模型资源unitypackage
- Jurassic Pack Vol. III Dinosaurs 侏罗纪包卷恐龙三号Unity游戏模型资源unitypackag
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页