远程dll注入与代码注入

C++ DLL远程线程注入实战:从原理到代码实现 动态链接库(DLL)是Windows系统中实现代码复用和模块化的重要机制,其核心原理在于允许程序在运行时加载外部代码模块。通过系统API如LoadLibrary,进程可以动态引入功能,这构成了软件扩展和插件系统的基础。在软件调试、安全研究和功能扩展等应用场景中,有时需要主动将DLL载入目标进程,这就引出了进程注入技术。其中,远程线程注入是一种经典方法,它利用CreateRemoteThread等API,在目标进程内开辟线程执行LoadLibrary,从而加载指定DLL。本文聚焦于C++实现,深入解析了该技术 阅读详情
程序说明:找到计算器进程把c盘下的modll.dll注入.
DLL编绎参数: ml /c /coff modll.asm
link /dll /subsystem:windows /def:modll.def modll.obj
def文件:只有一行(无导出函数哈):LIBRARY modll.dll
dll的作用:显示被注入进程的PID号.

masm6.11+win2k pro调试通过.
程序下载:http://www.cnwill.com/soft/czy/modll.dll
http://www.cnwill.com/soft/czy/mo.exe

如果是代码注入:作用弹一个msgbox出来

---------------------------------rthread.asm------------------
.386
.model flat,stdcall
option casemap:none

include ../include/user32.inc
includelib ../lib/user32.lib
include ../include/kernel32.inc
includelib ../lib/kernel32.lib
include ../include/windows.inc


.data
hello db '2K下建远程线程',0
tit db '计算器',0
szFormat db 'PID是:%d',0
szBuffer dd 20 dup(0),0
pid dd 0
hProcess dd 0
hThread dd 0
pCodeRemote dd 0
dllname db 'c:/modll.dll',0

.const
szmsg db 'MessageBoxA',0
userdll db 'User32.dll',0
szloadlib db 'LoadLibraryA',0 ;注意和LoadLibraryW的区别哟
kerdll db 'kernel32.dll',0

.code
codebegin:
dispdata db "iam remote thread",0
szTit db "nsfocus.czy",0
datalen =$-codebegin
Rproc proc msgbox ;MessageBoxA的地址为参数
CALL @F ;push esi
@@:
POP EBX
SUB EBX,OFFSET @B
LEA ECX,[EBX+dispdata]
LEA EDX,[EBX+szTit]
push 1
push edx
push ecx
push 0
call msgbox
ret ;重要
Rproc endp
codelen =$-codebegin ;代码长度13字节

start:
invoke FindWindow,0,offset tit ;返回计算器窗口句柄
invoke GetWindowThreadProcessId,eax,offset pid ;计算机器程序的进程PID号
;invoke wsprintf,offset szBuffer,offset szFormat,pid ;把PID用十进制显示
invoke OpenProcess,PROCESS_ALL_ACCESS,FALSE,pid ;打开进程,得到进程句柄
mov hProcess,eax ;保存进程句柄

;-------------------------------------------下面是把程序代码注入
;invoke VirtualAllocEx,hProcess,0, codelen, MEM_COMMIT, PAGE_EXECUTE_READWRITE
;mov pCodeRemote,eax
;invoke WriteProcessMemory,hProcess,pCodeRemote,offset codebegin,codelen,NULL

;mov esi,pCodeRemote
;add esi,datalen
;push esi
;invoke LoadLibrary,offset userdll
;invoke GetProcAddress,eax,offset szmsg
;pop esi
;invoke CreateRemoteThread,hProcess,0,0,esi,eax,0,0
;--------------------------------------------下面是DLL注入
invoke VirtualAllocEx,hProcess,0, sizeof dllname, MEM_COMMIT, PAGE_EXECUTE_READWRITE
mov pCodeRemote,eax
invoke WriteProcessMemory,hProcess,pCodeRemote,offset dllname,sizeof dllname,NULL
invoke LoadLibrary,offset kerdll
invoke GetProcAddress,eax,offset szloadlib
invoke CreateRemoteThread,hProcess,0,0,
eax, ;这个参数在代码注入中为代码起始地址,现在成了LoadLibraryA的起始地址了
pCodeRemote, ;要加载的DLL的名字
0,0
;--------------------------------------------没有用FreeLibrary所以只能加载一次
mov hThread,eax ; 返回线程句柄
.if hThread
invoke WaitForSingleObject,hThread, INFINITE ;等待线程结束
invoke CloseHandle,hThread ;关闭线程句柄
.endif

invoke VirtualFreeEx,hProcess,pCodeRemote,codelen,MEM_RELEASE ;释放空间
invoke CloseHandle,hProcess ;关闭进程句柄
;invoke MessageBoxA,0,offset szBuffer,offset szBuffer,1
invoke ExitProcess,0
end start

----------------------------------end---------------------


----------------------modll.asm--------------------
.386
.model flat,stdcall
option casemap:none
include /masm32/include/windows.inc
include /masm32/include/user32.inc
include /masm32/include/kernel32.inc
includelib /masm32/lib/user32.lib
includelib /masm32/lib/kernel32.lib

.data
pid dd 0
szFormat db 'PID是:%d',0
szBuffer dd 20 dup(0),0
tit db '显示被注入进程的PID',0

.code
DllEntry proc hInstDLL:HINSTANCE, reason:DWORD, reserved1:DWORD

.if reason==DLL_PROCESS_ATTACH ;dll加载时
invoke GetCurrentProcessId
mov pid,eax
invoke wsprintf,offset szBuffer,offset szFormat,pid
invoke MessageBoxA,0,offset szBuffer,offset tit,0
.endif
mov eax,TRUE
ret
DllEntry Endp


End DllEntry
----------------------end-------------------------- 
vc使用dll远程注入系统自带计算器程序 vc使用dll远程注入系统自带计算器程序,下载运行请修改相应的dll程序 立即下载

相关推荐

DLL版计算器 编程练习必备

DLL版计算器 附源码VC 6.0++工程文件

Hook技术:通过Dll注入Hook IAT让计算器显示中文数字(附源码)

计算机的计算器是我们常用的一个小工具(小时候,总是计算机计算器分不开来,哈哈)。 众所周知,计算器在计算的过程中,显示的都是阿拉伯数字,因为阿拉伯数字是一个全世界通用的表示方法,那么如何让计算器显示中文数字"一、二、三......"呢? 这里我们就可以使用Dll注入去hook关键API实现**计算器显示中文数字**。

weixin_43742894的博客 3415

dll远程线程注入(支持64bit win7)

dll注入远程线程。使用的时候创建一个空的工程,然后把代码当做主文件放到工程中,自己写个mian函数调用injectDLL函数就能注入了。菜鸟级友情提醒:64位别忘了编译成x64的可执行文件

loadlibrary释疑

在利用loadlibrary显示装载某动态库的时候例如: HINSTANCE hDll = LoadLibrary("./abc.dll");  结果编译器报错说不能将char[]转换为LPCWSTR,    查阅msdn函数原型为 HMODULE WINAPI LoadLibrary(   __in          LPCTSTR lpFileName ); 将代码改为:

莫问收获、敢问耕耘 6282

[dll注入实现IAT勾取] 计算器显示中文

勾取dll源码详解: 首先在创建时候来保存原始IAT地址到全局变量,然后通过Hook_iat函数来进行iat函数的勾取 BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { switch( fdwReason ) { case D...

diheqiu3577的博客 1086

逆向project第004篇:令计算器程序显示汉字(下)

一、前言         钩子技术是一项很有有用价值的技术。在Windows下HOOK技术的方法比較多,使用比較灵活,常见的应用层的HOOK方法有Inline HOOK(详见《反病毒攻防研究第012篇:利用Inline HOOK实现主动防御》)、IAT HOOK、Windows钩子……HOOK技术涉及到了DLL相关的知识(详见《反病毒攻防研究第009篇:DLL注入(上)——DLL文件的编...

weixin_34242509的博客 410

软件安全之代码注入技术 向目标 PE 文件注入 DLL notepad lpk.dll 远程线程函数 提权函数 OpenProcess VirtualAllocEx

实验 4 代码注入技术 引言 1、实验说明 代码注入是将用户代码注入到其他进程或者可执行文件中,实现拦截目标进程运行过程的关键信息、改变目标进程或可执行文件原本执行流程等目的 2、实验目的 本实验通过远程线程和输入表注入,向目标进程注入代码、向目标 PE 文件注入 DLL,以加深对代码注入技术的理解。 3、实验原理 课程第 6 讲代码注入技术 4、实验环境 Windows 7 系统、Visual Studio 6.0 及以上版本 5、实验内容 (1)远程线程注入 (2)利用 Detours 实现输入表注入

SKPrimin的博客 3727

DLL远程注入代码

BOOL RtlFileExists(WCHAR* InPath) { HANDLE hFile; if((hFile = CreateFileW(InPath, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE) return FALSE; Cl

baggiowangyu的专栏 1910

VB远程注入卸载DLL代码

很多人说VB不能远程注入DLL,其实是错误的VB其实也能象C++等其他语言一样轻松搞定!!不信请看下面代码!其实网上也有类似VB代码但是只有注入没有下载,而且注入通用性很差很多会出现非法操作,我的这个代码经过充分测试包括系统进程都可以正常注入和卸载,就连杀毒软件都能注入。(希望不要干坏事哦!!)地近期将更新所有原创作品贴在我的博客上!Option ExplicitPrivate Const

1099

linux创建dll同名的进程,自己动手写远程进程注入DLL代码,并远程创建线程运行远程注入DLL函数...

本帖最后由 cosmoslife 于 2011-10-8 15:09 编辑(我们重在自己动手一步一步写代码)自己动手写远程进程注入DLL代码,并远程创建线程运行远程注入DLL函数说明:共有三个文件第一步,要注入DLL代码一份,创建步骤打开VC6.0后,选“文件”----“新建”----在弹出的对话框中选”Win32 Dynamic-Link Library”创建一个动态库程序,选择空,然后自...

weixin_33304375的博客 339

c语言远程线程注入代码,萌新逆向学习笔记——远程线程注入DLL

前言在上一篇文章中,笔者学习并整理了有关消息钩子的原理,实现了一个键盘记录器。撇开键盘记录器这个具体的功能不说,从更加抽象的角度来看,消息钩子的利用让我们得以在"别人的EXE"中实现了自己的代码功能,只不过这功能仅限于类似鼠标,键盘的输入监听罢了。而今天的主题——远程线程注入DLL则是更为广泛的,用以在他人EXE中实现自己代码功能的操作,这次就不仅限于键盘记录了。准备工作阅读并实现本文主题,需要以...

weixin_30369183的博客 476

DLL远程注入代码详解

DLL远程注入代码详解 首先,四个你要知道的东西: 1.“远程线程‘’是指跨进程,而不是跨计算机。 2.计算机每个进程的地址空间都是独立隔离的。 3.简单说,进程A在进程B创建一个线程就叫远程线程。 4.多用在木马外Gua等注入dll文件的运行不会单独创建一个进程,它的运行被加载到进程的地址空间中,因此其隐蔽性相对较好。 主要的函数如下: - 一. CreatRemoteThread()//创建...

qq_41853215的博客 1913

Dll远程线程注入之关键代码描述总结

一、使用BCB实现关键代码的调用(我这里为了使dll注入时程序不至于卡主,所以重新创建了一个线程DllThreadTest) (1)声明全局变量 HWND hWnd; DWORD pid; HANDLE hThread; HANDLE hProcess; void* pLibNameRemote; HMODULE hKernel32; DWORD hLibModule; (2)Dll注入之前

zhangwenlong136的专栏 955

win7和win10下的dll远程注入代码和inline hook 进程隐藏

win7和win10远程注入dll代码不通用,归纳代码如下 判断当前系统类型: DWORD checkOS() { OSVERSIONINFO os_version; os_version.dwOSVersionInfoSize = sizeof(os_version); if (GetVersionEx(&os_version)) { if (os_version...

Yvan Jiang的专栏 3163

远程代码注入DLL注入教程(InlineHook)---植物大战僵尸为例

远程代码注入DLL注入教程 说明 ​ 本人刚开始学习逆向,不知道有没有动力学下深去,这一块也没有详细的实战教学,学多少就上传多少,希望能给想学的朋友一点帮助吧,本教程想通过植物大战僵尸这一经典游戏来抛砖引玉,教大家如何编写一个单机辅助。 ​ CE找数据的过程本教程不提供,本文着重讲述如何根据找到的数据实现无限阳光,无冷却,其他诸如秒杀僵尸,后台运行等均大同小异。 所需基础 CE找关键数据基址(网...

SkyHyko的博客 4158

Windows C++远程线程(CreateRemoteThread注入DLL方法、代码示例。

这是盗版软件或者游戏外挂什么的经常使用的方式,在其他进程里搞一些自己的东西。使用远程线程CreateRemoteThread的方法可以在其他进程中注入自己想注入DLL,千万不要用这个方法搞破坏哦。5. 在kernal32中获得LoadLibraryW的地址,此地址也是被注入进程的LoadLibraryW地址。被注入DLL的进程代码,这个可以随意写,只要程序能一直run就可以。我们搞一个可以弹窗的DLL代码,让进程只要LOAD DLL就会弹窗。1. 获得要注入进程的进程ID,可以使用进程名获得。

Bobowen的博客 2558

VC++ 实现dll远程注入代码示例

<br />#include "windows.h" #include "string.h" #include<iostream> using namespace std; int main() { char* DllPath = "C://Documents and Settings//Administrator//桌面//Temp//apihook.dll"; BOOL bRet = FALSE; //提权 HANDLE hToken; TOKEN_PRIVILEGES

暧昧倾城的专栏 1768
上一篇: 进行DLL注入的三种方法
下一篇: 极限编程(Extreme Programming)
zerray
博客等级 码龄23年 16粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值