Windows 下程序偷跑

前言

当你在别人的服务器上偷偷跑东西时,总是会提心吊胆,如果管理员上线了怎么办?跑的一半半突然管理员登陆上来看到一个黑框框岂不是全部木大?特此我们得来研究研究一些如何偷跑程序的方法

方法1 --- Windows 消息系统

windows下任何东西都离不开windows消息机制,就连RDP登录登出注销也一样。所以我们创建个窗口直接接受windows消息就行

直接参考代码:管理员登陆报警器

缺点:就是需要创建窗体

方法2 --- 计划任务:空闲时运行

photo_2021-08-30_22-50-39.jpg
缺点:不要(x) --- 停不下来了(√)

方法3 --- CMD query user

直接query user也不是不可,但是很多系统语言不同导致你的判断依据失败

典型的比如中文是 运行中 而 英文是 Active

最好的办法是运行chcp 65001 && query user,然后匹配Active就行了。

当然一定要注意忽略chcp的Active code page: 65001

缺点:如果你的程序运行在SYSTEM下你的chcp会失效。

方法4 --- WINDOWS API

方法和上面差不多,但是我TMD当场进行一个API查询
直接查阅msdn:WTSEnumerateListenersA

最后随便找了段代码

PWTS_SESSION_INFO psi;
    _WTS_CONNECTSTATE_CLASS a;
    DWORD dwCount;

    BOOL bRet = WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE, 0, 1, &psi, &dwCount);

    if (!bRet)
        return 0;
    wstring strName;
    for (unsigned int i = 0; i < dwCount; i++)
    {
        printf("%s \t", psi[i].pWinStationName);
        printf("%d \t", psi[i].SessionId);
        printf("%d \n", psi[i].State);
    }
    WTSFreeMemory(psi);
    

然后对应结果直接去查询这个

typedef enum _WTS_CONNECTSTATE_CLASS {
    WTSActive,              // User logged on to WinStation
    WTSConnected,           // WinStation connected to client
    WTSConnectQuery,        // In the process of connecting to client
    WTSShadow,              // Shadowing another WinStation
    WTSDisconnected,        // WinStation logged on without client
    WTSIdle,                // Waiting for client to connect
    WTSListen,              // WinStation is listening for connection
    WTSReset,               // WinStation is being reset
    WTSDown,                // WinStation is down due to error
    WTSInit,                // WinStation in initialization
} WTS_CONNECTSTATE_CLASS;

最后判断下是否有WTSActive的就说明有无人在线了。

Tags: none

添加新评论 »