在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例Android手机应用开发 → c++ DLL注入调用

c++ DLL注入调用

Android手机应用开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:0.28M
  • 下载次数:25
  • 浏览次数:752
  • 发布时间:2019-06-13
  • 实例类别:Android手机应用开发
  • 发 布 人:88551686
  • 文件格式:.rar
  • 所需积分:2
 相关标签: d dLL

实例介绍

【实例简介】

【实例截图】

from clipboard

【核心代码】

#include "stdafx.h"

#include <Ws2spi.h>
#include <Sporder.h> // 定义了WSCWriteProviderOrder函数
#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "USER32.lib")
#pragma comment(lib, "Ws2_32.lib")
#pragma comment(lib, "Rpcrt4.lib") // 实现了UuidCreate函数

char* pLocalMem;
HANDLE hFileMapping = 0;
GUID ProviderGuid = { 0xd3c21100, 0x85e1, 0x48f3, { 0x9a, 0xb6, 0x23, 0xd9, 0x0c, 0x75, 0x08, 0xef } };
LPWSAPROTOCOL_INFOW GetProvider(LPINT lpnTotalProtocols)
{
 DWORD dwSize = 0;
 int nError;
 LPWSAPROTOCOL_INFOW pProtoInfo = NULL;
 // 取得需要的长度
 if (::WSCEnumProtocols(NULL, pProtoInfo, &dwSize, &nError) == SOCKET_ERROR)
 {
  if (nError != WSAENOBUFS)
   return NULL;
 }
 pProtoInfo = (LPWSAPROTOCOL_INFOW)::GlobalAlloc(GPTR, dwSize);
 *lpnTotalProtocols = ::WSCEnumProtocols(NULL, pProtoInfo, &dwSize, &nError);
 return pProtoInfo;
}
void FreeProvider(LPWSAPROTOCOL_INFOW pProtoInfo)
{
 ::GlobalFree(pProtoInfo);
}
BOOL InstallProvider(WCHAR *pwszPathName)
{
 WCHAR wszLSPName[] = L"TiredLSP";
 LPWSAPROTOCOL_INFOW pProtoInfo;
 int nProtocols;
 WSAPROTOCOL_INFOW OriginalProtocolInfo[3];
 DWORD dwOrigCatalogId[3];
 int nArrayCount = 0;
 DWORD dwLayeredCatalogId; // 我们分层协议的目录ID号
 int nError;
 // 找到我们的下层协议,将信息放入数组中
 // 枚举所有服务程序提供者
 pProtoInfo = GetProvider(&nProtocols);
 BOOL bFindUdp = FALSE;
 BOOL bFindTcp = FALSE;
 BOOL bFindRaw = FALSE;
 for (int i = 0; i < nProtocols; i )
 {
  if (pProtoInfo[i].iAddressFamily == AF_INET)
  {
   if (!bFindUdp && pProtoInfo[i].iProtocol == IPPROTO_UDP)
   {
    memcpy(&OriginalProtocolInfo[nArrayCount], &pProtoInfo[i], sizeof(WSAPROTOCOL_INFOW));
    OriginalProtocolInfo[nArrayCount].dwServiceFlags1 =
     OriginalProtocolInfo[nArrayCount].dwServiceFlags1 & (~XP1_IFS_HANDLES);
    dwOrigCatalogId[nArrayCount ] = pProtoInfo[i].dwCatalogEntryId;
    bFindUdp = TRUE;
   }
   if (!bFindTcp && pProtoInfo[i].iProtocol == IPPROTO_TCP)
   {
    memcpy(&OriginalProtocolInfo[nArrayCount], &pProtoInfo[i], sizeof(WSAPROTOCOL_INFOW));
    OriginalProtocolInfo[nArrayCount].dwServiceFlags1 =
     OriginalProtocolInfo[nArrayCount].dwServiceFlags1 & (~XP1_IFS_HANDLES);
    dwOrigCatalogId[nArrayCount ] = pProtoInfo[i].dwCatalogEntryId;
    bFindTcp = TRUE;
   }
   if (!bFindRaw && pProtoInfo[i].iProtocol == IPPROTO_IP)
   {
    memcpy(&OriginalProtocolInfo[nArrayCount], &pProtoInfo[i], sizeof(WSAPROTOCOL_INFOW));
    OriginalProtocolInfo[nArrayCount].dwServiceFlags1 =
     OriginalProtocolInfo[nArrayCount].dwServiceFlags1 & (~XP1_IFS_HANDLES);
    dwOrigCatalogId[nArrayCount ] = pProtoInfo[i].dwCatalogEntryId;
    bFindRaw = TRUE;
   }
  }
 }
 // 安装我们的分层协议,获取一个dwLayeredCatalogId
 // 随便找一个下层协议的结构复制过来即可
 WSAPROTOCOL_INFOW LayeredProtocolInfo;
 memcpy(&LayeredProtocolInfo, &OriginalProtocolInfo[0], sizeof(WSAPROTOCOL_INFOW));
 // 修改协议名称,类型,设置PFL_HIDDEN标志
 wcscpy_s(LayeredProtocolInfo.szProtocol, wszLSPName);
 LayeredProtocolInfo.ProtocolChain.ChainLen = LAYERED_PROTOCOL; // 0;
 LayeredProtocolInfo.dwProviderFlags |= PFL_HIDDEN;
 // 安装
 if (::WSCInstallProvider(&ProviderGuid,
  pwszPathName, &LayeredProtocolInfo, 1, &nError) == SOCKET_ERROR)
 {
  printf("%d", nError);
  return FALSE;
 }
 // 重新枚举协议,获取分层协议的目录ID号
 FreeProvider(pProtoInfo);
 pProtoInfo = GetProvider(&nProtocols);
 for (int i = 0; i < nProtocols; i )
 {
  if (memcmp(&pProtoInfo[i].ProviderId, &ProviderGuid, sizeof(ProviderGuid)) == 0)
  {
   dwLayeredCatalogId = pProtoInfo[i].dwCatalogEntryId;
   break;
  }
 }
 // 安装协议链
 // 修改协议名称,类型
 WCHAR wszChainName[WSAPROTOCOL_LEN 1];
 for (int i = 0; i<nArrayCount; i )
 {
  swprintf_s(wszChainName, L"%ws over %ws", wszLSPName, OriginalProtocolInfo[i].szProtocol);
  wcscpy_s(OriginalProtocolInfo[i].szProtocol, wszChainName);
  if (OriginalProtocolInfo[i].ProtocolChain.ChainLen == 1)
  {
   OriginalProtocolInfo[i].ProtocolChain.ChainEntries[1] = dwOrigCatalogId[i];
  }
  else
  {
   for (int j = OriginalProtocolInfo[i].ProtocolChain.ChainLen; j>0; j--)
   {
    OriginalProtocolInfo[i].ProtocolChain.ChainEntries[j]
     = OriginalProtocolInfo[i].ProtocolChain.ChainEntries[j - 1];
   }
  }
  OriginalProtocolInfo[i].ProtocolChain.ChainLen ;
  OriginalProtocolInfo[i].ProtocolChain.ChainEntries[0] = dwLayeredCatalogId;
 }
 // 获取一个Guid,安装之
 GUID ProviderChainGuid;
 if (::UuidCreate(&ProviderChainGuid) == RPC_S_OK)
 {
  if (::WSCInstallProvider(&ProviderChainGuid,
   pwszPathName, OriginalProtocolInfo, nArrayCount, &nError) == SOCKET_ERROR)
  {
   return FALSE;
  }
 }
 else
  return FALSE;
 // 重新排序Winsock目录,将我们的协议链提前
 // 重新枚举安装的协议
 FreeProvider(pProtoInfo);
 pProtoInfo = GetProvider(&nProtocols);
 PDWORD dwIds = (PDWORD)malloc(sizeof(DWORD)* nProtocols);
 int nIndex = 0;
 // 添加我们的协议链
 for (int i = 0; i<nProtocols; i )
 {
  if ((pProtoInfo[i].ProtocolChain.ChainLen > 1) &&
   (pProtoInfo[i].ProtocolChain.ChainEntries[0] == dwLayeredCatalogId))
   dwIds[nIndex ] = pProtoInfo[i].dwCatalogEntryId;
 }
 // 添加其它协议
 for (int i = 0; i < nProtocols; i )
 {
  if ((pProtoInfo[i].ProtocolChain.ChainLen <= 1) ||
   (pProtoInfo[i].ProtocolChain.ChainEntries[0] != dwLayeredCatalogId))
   dwIds[nIndex ] = pProtoInfo[i].dwCatalogEntryId;
 }
 // 重新排序Winsock目录
 if ((nError = ::WSCWriteProviderOrder(dwIds, nIndex)) != ERROR_SUCCESS)
 {
  return FALSE;
 }
 FreeProvider(pProtoInfo);
 return TRUE;
}
BOOL RemoveProvider()
{
 LPWSAPROTOCOL_INFOW pProtoInfo;
 int nProtocols;
 DWORD dwLayeredCatalogId;
 // 根据Guid取得分层协议的目录ID号
 pProtoInfo = GetProvider(&nProtocols);
 int nError;
 int i;
 for (i = 0; i < nProtocols; i )
 {
  if (memcmp(&ProviderGuid, &pProtoInfo[i].ProviderId, sizeof(ProviderGuid)) == 0)
  {
   dwLayeredCatalogId = pProtoInfo[i].dwCatalogEntryId;
   break;
  }
 }
 if (i < nProtocols)
 {
  // 移除协议链
  for (i = 0; i<nProtocols; i )
  {
   if ((pProtoInfo[i].ProtocolChain.ChainLen > 1) &&
    (pProtoInfo[i].ProtocolChain.ChainEntries[0] == dwLayeredCatalogId))
   {
    ::WSCDeinstallProvider(&pProtoInfo[i].ProviderId, &nError);
   }
  }
  // 移除分层协议
  ::WSCDeinstallProvider(&ProviderGuid, &nError);
 }
 else return FALSE;
 return TRUE;
}
BOOL SetShareRAM(char * ProxyExeName, char *ProxyIP, int Proxyport, BOOL Verification, char *UserName, char *PassWord, int SetPort, int ProxyMode, char *ShutIP, char *Key)
{
 pLocalMem = (char*)MapViewOfFile(hFileMapping, FILE_MAP_WRITE, 0, 0, 100);
 if (NULL == pLocalMem)
 {
  return FALSE;
 }
 //pLocalMem = "mir1.dat|122.192.32.77|7280|1|admin|admin133|0|2|11|Key";
 sprintf_s(pLocalMem, 100, "%s|%s|%d|%d|%s|%s|%d|%d|%s|%s", ProxyExeName, ProxyIP, Proxyport, Verification, UserName, PassWord, SetPort, ProxyMode, ShutIP, Key);
 //UnmapViewOfFile(pLocalMem);
 //MessageBoxA(NULL, (char*)pLocalMem, "提示", MB_OK);
 return TRUE;
}
void main(int argc, char *argv[])
{
 WCHAR szBuf[MAX_PATH] = { 0 };
 GetCurrentDirectoryW(MAX_PATH, szBuf);
 wcscat(szBuf, L"\\LSP.dll");
 hFileMapping = CreateFileMappingW(HANDLE(0xFFFFFFFFFFFFFFFF), NULL, PAGE_READWRITE, 0, 100, L"mySharedMemory");
 SetShareRAM(argv[1], argv[2], atoi(argv[3]), TRUE, "username", "password", 0, 2, "000", "Key");  //写入代理信息
 if (InstallProvider(szBuf))
 {
  system("pause");
 }
 if (strcmp(argv[4], "StopProxy") == 0) RemoveProvider();
}

标签: d dLL

实例下载地址

c++ DLL注入调用

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警