注意要在release方式编译


//线程函数

DWORD WINAPI RemoteThreadProc(LPVOID lpParam)

{

     PDATA pData = (PDATA)lpParam;



     //定义API函数原型

     HMODULE (_stdcall *MyLoadLibrary)(LPCTSTR);

     FARPROC (_stdcall *MyGetProcAddress)(HMODULE,LPCSTR);

     HMODULE (_stdcall *MyGetModuleHandle)(LPCTSTR);

     int (_stdcall *MyMessageBox)(HWND , LPCTSTR , LPCTSTR,UINT);

     DWORD (_stdcall *MyGetModuleFileName)(HMODULE , LPTSTR , DWORD);



     MyLoadLibrary = (HMODULE (_stdcall *) (LPCTSTR)) pData ->dwLoadLibrary;

     MyGetProcAddress = (FARPROC(_stdcall *)(HMODULE,LPCSTR))pData ->dwGetProcAddress;

     MyGetModuleHandle = (HMODULE (_stdcall *)(LPCSTR))pData ->dwGetModuleHandle;

     MyGetModuleFileName = (DWORD (_stdcall *)(HMODULE,LPTSTR,DWORD nSize))pData ->dwGetModuleFileName;



     HMODULE hModule = MyLoadLibrary( pData ->User32Dll);

     MyMessageBox = (int (_stdcall *)(HWND , LPCTSTR ,LPCTSTR,UINT))MyGetProcAddress

          (hModule , pData->MessageBox);

     char szModuleName[MAX_PATH] = {0};

     MyGetModuleFileName(NULL,szModuleName,MAX_PATH);



     MyMessageBox(NULL,pData->Str,szModuleName,MB_OK);

    

     return 0;

}



void CNoDllInjectDlg::InjectCode(DWORD dwPid)

{

     DWORD error = 0;

     //提升权限

     DebugPrivilege();



     HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwPid);

     if( hProcess == NULL)

     {

          MessageBox("OpenProcess Error");

          error = GetLastError();

          return ;

     }



     DATA Data = {0};

     Data.dwLoadLibrary = (DWORD)GetProcAddress(

                              GetModuleHandle("kernel32.dll"),

                              "LoadLibraryA");

     Data.dwGetProcAddress = (DWORD)GetProcAddress(

                                   GetModuleHandle("kernel32.dll"),

                                   "GetProcAddress");

     Data.dwGetModuleHandle = (DWORD)GetProcAddress(

                                   GetModuleHandle("kernel32.dll"),

                                   "GetModuleHandleA");

     Data.dwGetModuleFileName = (DWORD)GetProcAddress(

                                   GetModuleHandleA("kernel32.dll"),

                                   "GetModuleFileNameA");



     lstrcpy(Data.User32Dll , "user32.dll");

     lstrcpy(Data.MessageBox,"MessageBoxA");

     lstrcpy(Data.Str , "Inject Code !!!");



     LPVOID lpData = VirtualAllocEx(hProcess,

                                   NULL,

                                   sizeof(DATA),

                                   MEM_COMMIT | MEM_RESERVE,

                                   PAGE_READWRITE);

     DWORD dwWriteNum = 0;

     WriteProcessMemory(hProcess , lpData , &Data, sizeof(DATA) , &dwWriteNum);



     DWORD dwFunSize = 0x2000;

     LPVOID lpCode = VirtualAllocEx(hProcess,

                                   NULL,

                                   dwFunSize,

                                   MEM_COMMIT,

                                   PAGE_EXECUTE_READWRITE);

     WriteProcessMemory(hProcess , lpCode , RemoteThreadProc , dwFunSize , &dwWriteNum);



     HANDLE hRemoteThread = CreateRemoteThread(hProcess,

                                             NULL,

                                             0,

                                             (LPTHREAD_START_ROUTINE)lpCode,

                                             lpData,

                                             0,

                                             NULL);

     WaitForSingleObject(hRemoteThread,INFINITE);



     CloseHandle(hRemoteThread);

     CloseHandle(hProcess);



}





void CNoDllInjectDlg::OnBtnInject()

{

     // TODO: Add your control notification handler code here

     CString str;

     GetDlgItemText(IDC_EDIT_INJECT,str);

     InjectCode(atoi(str.GetBuffer(str.GetLength())));

}



void CNoDllInjectDlg::DebugPrivilege()

{

     HANDLE hToken = NULL;

     //打开当前进程的访问令牌

     int hRet = OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hToken);

    

     if( hRet)

     {

          TOKEN_PRIVILEGES tp;

          tp.PrivilegeCount = 1;

          //取得描述权限的LUID

          LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tp.Privileges[0].Luid);

          tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

          //调整访问令牌的权限

          AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL);

         

          CloseHandle(hToken);

     }

    

}

无DLL线程注入的更多相关文章

  1. 无DLL远程注入

    界面如下: 主要代码如下: #define STRLEN 20 typedef struct _DATA { DWORD dwLoadLibrary; DWORD dwGetProcAddress; ...

  2. 安全之路 —— 无DLL文件实现远程线程注入

    简介         在之前的章节中,笔者曾介绍过有关于远程线程注入的知识,将后门.dll文件注入explorer.exe中实现绕过防火墙反弹后门.但一个.exe文件总要在注入时捎上一个.dll文件着 ...

  3. 安全之路 —— 借助DLL进行远程线程注入实现穿墙与隐藏进程

    简介        大多数后门或病毒要想初步实现隐藏进程,即不被像任务管理器这样典型的RING3级进程管理器找到过于明显的不明进程,其中比较著名的方法就是通过远程线程注入的方法注入将恶意进程的DLL文 ...

  4. 详细解读:远程线程注入DLL到PC版微信

    一.远程线程注入的原理 1.其基础是在 Windows 系统中,每个 .exe 文件在双击打开时都会加载 kernel32.dll 这个系统模块,该模块中有一个 LoadLibrary() 函数,可以 ...

  5. Dll注入技术之远程线程注入

    DLL注入技术之远线程注入 DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EX ...

  6. 远程线程注入dll,突破session 0

    前言 之前已经提到过,远线程注入和内存写入隐藏模块,今天介绍突破session 0的dll注入 其实今天写这个的主要原因就是看到倾旋大佬有篇文章提到:有些反病毒引擎限制从lsass中dump出缓存,可 ...

  7. 安全之路 —— 无DLL文件实现远程进程注入

    简介 在之前的章节中,笔者曾介绍过有关于远程线程注入的知识,将后门.dll文件注入explorer.exe中实现绕过防火墙反弹后门.但一个.exe文件总要在注入时捎上一个.dll文件着实是怪麻烦的,那 ...

  8. 远程线程注入DLL突破session 0 隔离

    远程线程注入DLL突破session 0 隔离 0x00 前言 补充上篇的远程线程注入,突破系统SESSION 0 隔离,向系统服务进程中注入DLL. 0x01 介绍 通过CreateRemoteTh ...

  9. 远程线程注入DLL

    远程线程注入 0x00 前言 远程线程注入是一种经典的DLL注入技术.其实就是指一个新进程中另一个进程中创建线程的技术. 0x01 介绍 1.远程线程注入原理 画了一个图大致理解了下远程线程注入dll ...

随机推荐

  1. IOS plist轻量级操作

    plist,全名PropertyList,即属性列表文件,它是一种用来存储串行化后的对象的文件.这种文件,在ios开发过程中经常被用到.这种属性列表文件的扩展名为.plist,因此通常被叫做plist ...

  2. 《MFC游戏开发》笔记三 游戏贴图与透明特效的实现

    本系列文章由七十一雾央编写,转载请注明出处. 313239 作者:七十一雾央 新浪微博:http://weibo.com/1689160943/profile?rightmod=1&wvr=5 ...

  3. ionic项目的一些简单操作

    1.首先保证开发环境没问题: 2.下载一个ionic项目:命令ionic start myApp tabs(myApp的项目的名称) 3.在运行项目之前,要先创建平台: ionic platform ...

  4. Windows 7 无线网络故障

    朋友打电话来问为何他的PC不能连接到家里的无线网络,而手机等其他设备都可以?相互交谈之中,我问如下几个问题: 是否可以搜索到其他无线网络? 答:是.(想确实无线网卡工作是否正常) 新的手机是否可以连接 ...

  5. DNS的递归查询和迭代查询

    百度运维部二面,直接懵逼的节奏 (1)递归查询 递归查询是一种DNS 服务器的查询模式,在该模式下DNS 服务器接收到客户机请求, 必须使用一个准确的查询结果回复客户机. 如果DNS 服务器本地没有存 ...

  6. poj 1695 动态规划

    思路:和黑书上的跳舞机类似 #include<map> #include<set> #include<cmath> #include<queue> #i ...

  7. CentOS 6.5_X64下安装MongoDB数据库

    1.下载MongoDB 官网下载地址:https://www.mongodb.org/downloads 具体链接:https://fastdl.mongodb.org/linux/mongodb-l ...

  8. Oracle中的内置函数在sql中的转换整理

    程序里面经常会即支持Oracle数据库,又支持sql数据库.而有些Oracle内置函数用的比较多,但在sql中语法有些不同,我做了些整理,希望可以帮助大家.... 1.oracle中的内置函数:ora ...

  9. SkinSoft中.vssf样式文件在VS2005中的应用(图文)

    前些天在项目中应用了皮肤控件,涉及到了(.ssk),也做了相应的记录. 但还是觉得.ssk的并不算满意,所以今天又粗略的研究了一下SkinSoft这个软件: 如题,他的作用就是自定义控件与窗体样式. ...

  10. HTML5_用语义化标记重新定义博客

    HTML5文档的第一行便是文档类型声明,文档类型声明的作用有两个 一:验证器依据文档类型来判断采用何种验证规则去验证代码 二:文档类型声明能够强制IE6,IE7,IE8以“标准模式”渲染页面 1: & ...