admin 管理员组

文章数量: 1087678

通过注入DLL来控制小飞信LibFx.exe发短信

 说明:小飞信LibFX最新版2.0beta6,采用静态编译libfection库,因此没有独立的dll可以调用。但是LibFx.exe主程序中还是有飞信相关函数的输出存在。因此,可以通过注入DLL的方式去调用这些函数,为第三方程序提供短信调用。

 

被注入的DLL代码示例://Visual Studio 2010下编译,编译选项:把unicode改为多字节字符集,以免字符处理麻烦。

#include "windows.h"
#include <stdio.h>
#include <process.h>#define MYTESTDLL_API extern "C" __declspec(dllexport)//以自己给自己发短信为例,用到fx_send_sms_to_self函数
typedef void(* EventListener)(int message, WPARAM wParam, LPARAM lParam, void *args);
typedef int (*pfx_send_sms_to_self)( const char *  message, EventListener  func,void *  args);//空回调,什么都不做。void MyEventListener(int message, WPARAM wParam, LPARAM lParam, void *args){}//被注入的DLL,运行这个线程负责与主程序通信。
void StubThread(LPVOID);//一些进程通信用到的数据,全局变量。
#pragma data_seg("shared")int len=0; 
char buf[255]="test";
pfx_send_sms_to_self fx_send_sms_to_self=0;
#pragma data_seg()#pragma comment(linker, "/SECTION:shared,RWS")//DLL被注入后,直接调用start函数,获取小飞信相关函数,设置事件,等待主程序通知。
MYTESTDLL_API void start(void)
{fx_send_sms_to_self=(pfx_send_sms_to_self)GetProcAddress(GetModuleHandle(NULL), "fx_send_sms_to_self");if(fx_send_sms_to_self !=NULL){HANDLE ev=CreateEvent(NULL,TRUE,TRUE, "fx" ) ;ResetEvent(ev);_beginthread(StubThread,NULL,NULL) ;}
}void StubThread (LPVOID )
{HANDLE ev=OpenEvent(EVENT_ALL_ACCESS,false,"fx");while ( true ){WaitForSingleObject (ev, INFINITE ) ;fx_send_sms_to_self(buf,MyEventListener,NULL); //事件被激活后,就发送一次短信,发完了,取消激活。ResetEvent(ev);}
}MYTESTDLL_API void SetValue(int n,char *str)
{len = n;for(int i=0;i<n;i++){buf[i]=str[i];}
}MYTESTDLL_API void init(void)
{for(int i=0;i<255;i++){buf[i]=0x0;}len=0;
}



与被注入的DLL进行通信的主程序代码示例:

int _tmain(int argc, _TCHAR* argv[])
{STARTUPINFO si = {0};PROCESS_INFORMATION pi = {0};BOOL result = FALSE;char * exeString = "C:\\Users\\dongyuejiang\\Desktop\\win_LibFetion_V2.0_beta6\\LibFx.exe";char * workingDir ="C:\\Users\\dongyuejiang\\Desktop\\win_LibFetion_V2.0_beta6";char* dllPath="D:\\Projects\\MyInJectDll\\Debug\\TestDLL.dll";si.cb = sizeof(STARTUPINFO);result = CreateProcess(NULL, exeString, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, workingDir, &si, &pi);if(!result){MessageBox(0, "Process could not be loaded!", "Error", MB_ICONERROR);return -1;}ResumeThread(pi.hThread);Sleep(30000);    //留点时间让小飞信自己登录服务器,完成登录初始化。//负责DLL注入,参考.aspx;Inject(pi.hProcess, dllPath, "start");///typedef void (*pSetValue)(int n,char *str);typedef void (*pinit)();typedef void (*pSendSMS)();HINSTANCE hDll;pSetValue SetValue;pinit init;hDll=LoadLibrary("TestDll.dll");if(hDll != NULL){SetValue=(pSetValue)GetProcAddress(hDll,"SetValue"); init=(pinit)GetProcAddress(hDll,"init");if(SetValue!=NULL){init();char s[]="11111111111";SetValue(strlen(s),s);SetEvent(OpenEvent(EVENT_ALL_ACCESS,false,"fx"));//激活事件,发一次Sleep(5000);SetEvent(OpenEvent(EVENT_ALL_ACCESS,false,"fx"));}FreeLibrary(hDll);}return 0;
}

本文标签: 通过注入DLL来控制小飞信LibFxexe发短信