无DLL线程注入
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线程注入的更多相关文章
- 无DLL远程注入
界面如下: 主要代码如下: #define STRLEN 20 typedef struct _DATA { DWORD dwLoadLibrary; DWORD dwGetProcAddress; ...
- 安全之路 —— 无DLL文件实现远程线程注入
简介 在之前的章节中,笔者曾介绍过有关于远程线程注入的知识,将后门.dll文件注入explorer.exe中实现绕过防火墙反弹后门.但一个.exe文件总要在注入时捎上一个.dll文件着 ...
- 安全之路 —— 借助DLL进行远程线程注入实现穿墙与隐藏进程
简介 大多数后门或病毒要想初步实现隐藏进程,即不被像任务管理器这样典型的RING3级进程管理器找到过于明显的不明进程,其中比较著名的方法就是通过远程线程注入的方法注入将恶意进程的DLL文 ...
- 详细解读:远程线程注入DLL到PC版微信
一.远程线程注入的原理 1.其基础是在 Windows 系统中,每个 .exe 文件在双击打开时都会加载 kernel32.dll 这个系统模块,该模块中有一个 LoadLibrary() 函数,可以 ...
- Dll注入技术之远程线程注入
DLL注入技术之远线程注入 DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EX ...
- 远程线程注入dll,突破session 0
前言 之前已经提到过,远线程注入和内存写入隐藏模块,今天介绍突破session 0的dll注入 其实今天写这个的主要原因就是看到倾旋大佬有篇文章提到:有些反病毒引擎限制从lsass中dump出缓存,可 ...
- 安全之路 —— 无DLL文件实现远程进程注入
简介 在之前的章节中,笔者曾介绍过有关于远程线程注入的知识,将后门.dll文件注入explorer.exe中实现绕过防火墙反弹后门.但一个.exe文件总要在注入时捎上一个.dll文件着实是怪麻烦的,那 ...
- 远程线程注入DLL突破session 0 隔离
远程线程注入DLL突破session 0 隔离 0x00 前言 补充上篇的远程线程注入,突破系统SESSION 0 隔离,向系统服务进程中注入DLL. 0x01 介绍 通过CreateRemoteTh ...
- 远程线程注入DLL
远程线程注入 0x00 前言 远程线程注入是一种经典的DLL注入技术.其实就是指一个新进程中另一个进程中创建线程的技术. 0x01 介绍 1.远程线程注入原理 画了一个图大致理解了下远程线程注入dll ...
随机推荐
- WCF架构日记-1
WCF功能很强大,但是真的能把其中的原理说清楚,对于我比较困难,今天对之前的笔记总结一下: 首先WCF的契约可以总结为四大类:消息契约.数据契约.服务契约.错误处理契约. [客户端处理是如何处 ...
- 程序员怎样在复杂代码中找 bug?(简单)
分享下我的debug的经验 1. 优先解决那些可重现的,可重现的bug特别好找,反复调试测试就好了,先把好解决的干掉,这样最节约时间. 2. 对于某些bug没有头绪或者现象古怪不知道从哪里下手,找有经 ...
- Java Script基础(二) 基本语法
一.变量的声明和使用 JavaScript是一种弱类型的语言,没有明确的数据类型,在声明变量时,不需要指定变量的类型,变量的类型由赋给变量的值决定. 变量声明的语法: var 变量名; 示例: var ...
- CSS属性(常用的属性)
CSS属性(常用的属性)http://www.w3school.com.cn/cssref/index.asp 一:文本与字体属性 1.字体属性 (1):font-size:字体的大小(例如:font ...
- php 短信网关短信内容不能有空格
最近在做一个短信通知功能,接口参数都按文档写好了,就是不能发送短信,查了半天,原来是短信内容有空格,之前短信用的英文标点符号,符号后都有一个空格,用了date('Y-m-d H,i,s')函数,后来把 ...
- javaweb学习总结二十四(servlet经常用到的对象)
一:ServletConfig对象 1:用来封装数据初始化参数,在服务器web.xml配置文件中可以使用<init-param>标签配置初始化参数. 2:实例演示 web.xml文件中配置 ...
- TortoiseSVN 更新时忽略指定文件夹
命令行可以这么来svn update –set-depth=exclude 文件夹 那么TortoiseSVN客户端呢?在文件夹右键中的”更新至版本(U)”更新深度选”排除”,确定,搞定下次更新就不会 ...
- 一个网站的head和body是如何进行优化的
我们知道任何一个网站都要被解析成html后,浏览器才能识别,换句话说,用任何一门技术做的网站,都是被浏览器解析成为html.因此我们必须懂得,一个html页面由三部分组成,那就是html的开始标签和结 ...
- 【CSS3】---background-origin background-clip background-size
background-origin 设置元素背景图片的原始起始位置. 语法: background-origin : border-box | padding-box | content-box; 参 ...
- Datazen 自定义地图--中国地图
背景: 关于Datazen可以google一下,因为目前Datazen还没有中文版,所以google出来的资料会多一点,由于公司想用Datazen来做报表展示,所以有了下文. 参考文章: 中文---h ...