xfocus logo xfocus title
首页 焦点原创 安全文摘 安全工具 安全漏洞 焦点项目 焦点论坛 关于我们
添加文章 English Version

借助“网易短信王”利用手机监控电脑


创建时间:2003-04-17
文章属性:原创
文章来源:自创
文章提交:showking (showking_at_263.net)

网易短信王能够接收用户手机发送的短信,利用这一特点,在短信王的程序中加入插件,对短信内容解释执行,将执行结果以短信方式送回,即可实现手机对电脑的监控。利用这种方式,配合命令行的短信发送程序,还能够实现大部分的移动梦网服务,如短信点播天气预报,短信游戏,短信发送Email等。
    插件的原理很简单,使用的是DLL替换。由于短信王在接收到短信后,会调用winmm.dll中的PlaySoundA函数,我自己实现了一个伪winmm.dll,在该dll的PlaySoundA函数中,查找短信王用来显示短信内容的SysListView窗口句柄,获取短信内容并解释执行。将伪winmm.dll放在短信王的目录下,即可取代系统目录的winmm.dll。
    命令行方式的短信发送程序实现非常简单,在此不作说明。伪winmm.dll的源代码如下:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define PlaySoundA _PlaySoundA
#include <windows.h>
#undef PlaySoundA
#include <commctrl.h>

extern "C"
{

BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM)
{
    char text[_MAX_PATH];
    RealGetWindowClass(hwnd, text, sizeof(text));
    //查找显示短消息内容的窗口句柄
    if (strcmp(text, "SysListView32"))
    {
        return TRUE;
    }
    int i = ListView_GetItemCount(hwnd) - 1;
    //如下只把短消息内容当命令执行,还可以加上对消息发送者的限制
    ListView_GetItemText(hwnd, i, 2, text, sizeof(text));
    char cmd[_MAX_PATH];
    switch (text[0])
    {
    //只处理以“/”打头的短消息
    case '/':
        WinExec(&text[1], SW_SHOW);
        break;
    default:
        return FALSE;
    }
    char path[_MAX_PATH];
    GetModuleFileName(NULL, path, sizeof(path));
    strcpy(strrchr(path,'\\')+1, "smscmd.log");
    FILE *fp = fopen(path, "a");
    time_t ltime;
    time(&ltime);
    fprintf(fp, "time= %s  command= %s\n", ctime(&ltime), text);
    fclose(fp);
    return FALSE;
}

_declspec(dllexport)
BOOL _stdcall PlaySoundA(LPCSTR, HMODULE, DWORD)
{
    MessageBeep(MB_OK);
    //根据标题查找“网易短信王”的主窗口,不同手机号码标题不一样
    HWND hParent = FindWindow(NULL, "13611112222 - 网易短信王");
    EnumChildWindows(hParent, EnumChildProc, 0);
    return TRUE;
}

}