使用远程线程制作不死进程

关于dll注入方式的学习(远程线程注入) 的地址(由于Windows引入了基址随机化ASLR安全机制,所以导致每次开机启动时系统DLL加载基址都不一样,有些系统dll(kernel,ntdll)的加载地址,允许每次启动基址可以改变,但是启动之后必须固定,也就是说两个不同进程在相互的虚拟内存中,这样的系统dll地址总是一样的),在注入进程中创建线程(PAGE_GUARD: 区域第一次被访问时进入一个STATUS_GUARD_PAGE异常,这个标志要和其他保护标志合并使用,表明区域被第一次访问的权限。PAGE_READONLY: 该区域为只读。 阅读详情
远程线程指把当前进程部分代码注入到其他进程做为线程执行,虽然钩子程序能挂钩其他程序的消息,但钩子程序退出,注入的dll也就退出了,而远程线程不会 随着本地进程退出而结束。而且可以处理更多的事情,而不局限于消息。由于98不支持所以只能在nt内核上运行,下面是制作远程线程需要使用的api。
获取进程句柄方法之一是使用GetWindowThreadProcessId函数,这个函数可以从一个窗口句柄获得创建窗口进程的id,而获得一个窗口句柄可以用FindWindow轻易得到。
HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName);
lpClassName, // 窗口类名称,可以指定为NULL,光指定窗口名称即可
lpWindowName // 窗口名称。
如果两个参数都为0,则获得最顶层窗口的句柄。
DWORD GetWindowThreadProcessId(HWND hWnd,LPDWORD lpdwProcessId);
Hwnd 进程拥有的窗口句柄
LpdwProcessID 指向用来存放进程ID的变量
得到进程ID 之后,可以使用 OpenProcess函数来获得进程句柄
HANDLE OpenProcess(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwProcessId);
DwDesiredAccess,对打开的进程的访问权限,可以是下列值的组合:
PROCESS_ALL_ACCESS--------------------等于下面所有权限的组合
PROCESS_CREATE_THREAD-----------------允许创建远程线程
PROCESS_DUP_HANDLE--------------------允许进程句柄被复制
PROCESS_QUERY_INFORMATION-------------允许使用GetExitCodeProcess函数查询和GetProrityClass 查询进程信息
PROCESS_SET_INFORMATION---------------允许使用SetPriorityClass函数设置进程的优先级
PROCESS_TERMINATE----------------------允许结束进程
PROCESS_VM_OPERATION-------------------允许使用WriteProcessMemory函数或者VirtualProtectEx来修改进程的地址空间
PROCESS_VM_READ------------------------允许对读取进程地址空间
PROCESS_VM_WRITE-----------------------允许使用写入进程地址空间
BInheritHandle参数,指定返回的进程句柄是否可以被当前进程的子进程继承
DwProcessId 参数指定目标进程的进程ID

还有一种方法是使用CreateToolhelp32Snapshot(快照)函数来获得进程句柄,上面的方法进程必须要有窗口,而快照函数不需要进程拥有窗口,暂不介绍

下面是读写进程数据的两个api函数:
BOOL ReadProcessMemory(
HANDLE hProcess, // 进程句柄
LPCVOID lpBaseAddress, // 要读取的目标进程起始内存
LPVOID lpBuffer, // 本地进程用来存放读取内容的数据缓冲区
SIZE_T nSize, // 要从目标进程读取得数据长度
SIZE_T * lpNumberOfBytesRead // 要读出的到本地的数量,为NULL则忽略这个参数

BOOL WriteProcessMemory(
HANDLE hProcess, // handle to process
LPVOID lpBaseAddress, // base of memory area
LPVOID lpBuffer, // data buffer
SIZE_T nSize, // count of bytes to write
SIZE_T * lpNumberOfBytesWritten // count of bytes written
);

要注入远程线程,必须要在目标进程中开辟一段空间,来存放远程线程代码。
LPVOID VirtualAllocEx(
HANDLE hProcess, // 要开辟内存的进程
LPVOID lpAddress, // 从进程那个地址开始分配,为NULL,则系统决定
SIZE_T dwSize, // 要分配的空间大小
DWORD flAllocationType, // 分配的类型,一般用 MEM_COMMIT即可
DWORD flProtect // 这段内存访问的权限,PAGE_EXECUTE_READWRITE,远程线程所处空间必须可读可执行
);

下面是注入远程线程的需要使用的函数:
HANDLE CreateRemoteThread(
HANDLE hProcess, // 要写入远程线程进程句柄
LPSECURITY_ATTRIBUTES lpThreadAttributes, // 线程安全属性
DWORD dwStackSize, // 初始化堆栈大小
LPTHREAD_START_ROUTINE lpStartAddress, // 远程线程函数
LPVOID lpParameter, // 远程线程参数
DWORD dwCreationFlags, // 标志,可以创建挂起的线程等等
LPDWORD lpThreadId // 用来返回线程ID的指针
);
代码重定位
有 了这些函数就可以把一段代码插入到目标进程,这段代码将作为目标进程中一个独立的线程运行。但是代码编译时,全局变量、Api函数等等,将被编译为地址形 式,这是地址对于本地进程是可读可执行的,对于目标进程,读取这些地址是非法的,windows这样做,可以保证每个进程都拥有自己独立的4GB空间,而 不互相干扰(处于ring3的进程互相访问是非法的)。对于所有的高级语言,包括C语言,根本不能解决重定位问题,程序只能先写一个dll文件,然后用 CreateRemoteThread 把LoadLibrary 函数注入到目标进程中。LoadLibrary 函数调用dll 文件,执行自己想要的功能,不过这样用一些进程工具可以看到目标进程多了一个dll。重定位是汇编语言的拿手好戏。
Call @F
@@:
pop ebx
sub ebx,offset @B
现在 ebx 即得到了代码的实际地址和汇编地址之间的偏差,所以在需要重定位的代码上加上这个偏移值即可。

远程线程小例子
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;使用远程线程注入到explorer中,避免出现在win2k任务管理器中,并实现看护win2k进程,发现进程退出
;马上启动同样的另一个进程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 使用 nmake 或下列命令进行编译和链接:
; ml /c /coff RemoteThread.asm
; rc RemoteThread.rc
; Link /subsystem:windows RemoteThread.obj RemoteThread.res
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.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
include macro.inc
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
KnlOpenProcessStr db 'OpenProcess',0
KnlWaitForObjectStr db 'WaitForSingleObject',0
KnlWinExecStr db 'WinExec',0
KnlGetModuleHandleStr db 'GetModuleHandleA',0
KnlGetProcAddressStr db 'GetProcAddress',0
FileName db 'nodead.exe',0
szDllKernel db 'Kernel32.dll',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;下面两个变量是explorer.exe 进程窗口的类名(RegisterClassA参数中设定的)和进程标题名字
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
szDesktopClass db 'Progman',0
szDesktopWindow db 'Program Manager',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
KnlOpenProcess dd ?
KnlWaitForSingleObject dd ?
KnlWinExec dd ?
KnlGetModuleHandle dd ?
KnlGetProcAddress dd ?
dwProcessID dd ?
dwThreadID dd ?
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include RemoteCode.asm
Start:
invoke GetModuleHandle,addr szDllKernel
mov ebx,eax
invoke GetProcAddress,ebx,offset KnlOpenProcessStr
mov KnlOpenProcess,eax
invoke GetProcAddress,ebx,offset KnlWaitForObjectStr
mov KnlWaitForSingleObject,eax
invoke GetProcAddress,ebx,offset KnlWinExecStr
mov KnlWinExec,eax
invoke GetProcAddress,ebx,offset KnlGetProcAddressStr
mov KnlGetProcAddress,eax
invoke GetProcAddress,ebx,offset KnlGetModuleHandleStr
mov KnlGetModuleHandle,eax

invoke FindWindow,addr szDesktopClass,addr szDesktopWindow
invoke GetWindowThreadProcessId,eax,offset dwProcessID
mov dwThreadID,eax
invoke OpenProcess,PROCESS_ALL_ACCESS,FALSE,dwProcessID
test eax,eax
jz OpenProcessError
mov ebx,eax
invoke VirtualAllocEx,ebx,NULL,REMOTE_CODE_LENGTH,MEM_COMMIT,PAGE_EXECUTE_READWRITE
or eax,eax
jz OpenProcessError
mov edi,eax
push eax
invoke WriteProcessMemory,ebx,edi,offset REMOTE_CODE_START,REMOTE_CODE_LENGTH,NULL
invoke WriteProcessMemory,ebx,edi,offset KnlOpenProcess,sizeof dword * 5,NULL
add edi,offset Protect2kProc - offset REMOTE_CODE_START
invoke CreateRemoteThread,ebx,NULL,0,edi,0,0,NULL
invoke CloseHandle,ebx
invoke Sleep,100h
invoke MessageBoxA,0,offset FileName,offset FileName,0
OpenProcessError:
invoke ExitProcess,0
end Start
macro.inc
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 将参数列表的顺序翻转
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
reverseArgs macro arglist:VARARG
local txt,count

txt TEXTEQU <>
count = 0
for i,
count = count + 1
txt TEXTEQU @CatStr(i,,<%txt>)
endm
if count GT 0
txt SUBSTR txt,1,@SizeStr(%txt)-1
endif
exitm txt
endm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 建立一个类似于 invoke 的 Macro
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_invoke macro _Proc,args:VARARG
local count

count = 0
% for i,< reverseArgs( args ) >
count = count + 1
push i
endm
call dword ptr _Proc

endm

RemoteThread.asm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 注入远程进程执行的代码
;equ this [:类型],则变量包含的段和偏移地址都和下一句相同,类型指变量类型
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
REMOTE_CODE_START equ this byte
_KnlOpenProcess dd ?
_KnlWaitForSingleObject dd ?
_KnlWinExec dd ?
_KnlGetModuleHandle dd ?
_KnlGetProcAddress dd ?

_KnlSleep dd ?
_Error2 db 'overflow2',0;循环把这个字符串覆盖了?
_FileName db 'c:/wap32.exe',0; 要看护的进程路径
_WinName db 'Our First Dialog Box',0;要看护的进程窗口名字
_hInstance dd ?
_KnlFindWindow dd ?
_KnlMessageBox dd ?
_ErrorMsg db 'overflow',0 ;循环把这个字符串覆盖了?
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 要从User32 中提取使用的api函数名称
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_szDllUser db 'user32.dll',0
_szDllKernel db 'kernel32.dll',0
szFindWindow db 'FindWindowA',0
szMessageBox db 'MessageBoxA',0,0 ;多一个0用于结束循环

szSleep db 'Sleep',0,0

Protect2kProc proc uses ebx edi esi
local hModuleUser
local hModuleKernel
call @F
@@:
pop ebx
sub ebx,offset @B
_invoke [ebx+ _KnlGetModuleHandle],NULL
test eax,eax
jz ExitProtectProc
mov [ebx+ _hInstance],eax
lea eax,[ebx+ offset _szDllUser]
_invoke [ebx+_KnlGetModuleHandle],eax
mov hModuleUser,eax
lea esi,[ebx+offset szFindWindow]
lea edi,[ebx+offset _KnlFindWindow]
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 从User32.dll中取api函数地址的循环
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.while TRUE
_invoke [ebx+_KnlGetProcAddress],hModuleUser,esi
mov [edi],eax
add edi,4
@@:
lodsb
or al,al
jnz @B
.break .if ! byte ptr [esi+1]
.endw
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 从Kernel32.dll中取api函数地址的循环
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
lea eax,[ebx+ offset _szDllKernel]
_invoke [ebx+_KnlGetModuleHandle],eax
mov hModuleKernel,eax
lea esi,[ebx+offset szSleep]
lea edi,[ebx+offset _KnlSleep]
.while TRUE
_invoke [ebx+_KnlGetProcAddress],hModuleKernel,esi
mov [edi],eax
add edi,4
@@:
lodsb
or al,al
jnz @B
.break .if ! byte ptr [esi+1]
.endw
call _WinMain
ExitProtectProc:
ret
Protect2kProc endp

_WinMain proc uses ebx esi edi
call @F
@@:
pop ebx
sub ebx,@B
lea edi,[ebx+ offset _ErrorMsg]
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 看护循环,发现进程退出马上重启一个
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.while TRUE
lea esi,[ebx+offset _WinName]
_invoke [ebx+_KnlFindWindow],NULL,esi
.if ! eax
lea esi,[ebx+ offset _FileName]
_invoke [ebx+_KnlWinExec],esi,SW_SHOWNORMAL
.endif
_invoke [ebx+_KnlSleep],110h
.endw
ret
_WinMain endp

REMOTE_CODE_END equ this byte
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;REMOTE_CODE_LENGTH 获取整个插入代码的长度,在nodead.asm中,VirtualAllocEx 中制定远程线程
;长度可以使用此参数
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
REMOTE_CODE_LENGTH equ offset REMOTE_CODE_END - offset REMOTE_CODE_START 
win7 64bit下远程线程注入技术(进程劫持入门技术) http://blog.youkuaiyun.com/arvon2012/article/details/7766439 本文是配合上文学习和使用的。上文中,最后,我们生成了可以hook api的dll,那么怎么把它发射到其他进程中,让其他进程调用运行我们的dll呢? 远程线程注入技术可以解决这个问题。   原理: 远程线程注入是这样的,首先在当前运行的进程中找到目标进程,然后将我们的dll的内容写 阅读详情

相关推荐

远程线程注入

文章目录一、流程二、演示三、完整代码 DLL程序: 一、流程 1、获取进程句柄 2、计算Dll路径名长度,并且要加上0结尾的长度 3、在目标进程分配内存 4、拷贝DLL路径名到目标进程的内存 5、获取模块地址 6、获取LoadLibraryA函数地址 7、创建远程线程,加载DLL 8、关闭句柄 二、演示 1、获取进程句柄 //获取进程句柄 hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessID); if(hProcess == NUL

qq_41232519的博客 954

什么是远程线程注入?

远程线程注入 首先,要说明白远程线程注入,必须得弄明白什么是远程线程以及什么是注入! 远程线程 这里的远程指的是别的进程空间,大家应该都在自己代码中或多或少运用过多线程,这里给出常见的win32创建线程接口的使用,如下: 本地线程创建 1 、官方给的接口: HANDLE CreateThread( [in] LPSECURITY_ATTRIBUTES lpThreadAttributes, //安全描述符,一般填NULL [in] SIZE_T dwStac

航行的土豆的博客 7854

卸载远程线程中的DLL

如何卸载其他进程中的DLL。要卸载其他进程中的DLL一般都要首先提升本进程的权限。相关的操作也很简单,我已经将其封装为一个函数/*********************************************************************/BOOL BDebugProcess2(HANDLE hProcess, LPCTSTR PrivilegeName){HANDLE

星空陨的专栏 2113

GetWindowThreadProcessId用法

函数功能:该函数返回创建指定窗口线程的标识和创建窗口的进程的标识符,后一项是可选的。    函数原型;DWORD GetWindowThreadProcessld(HWND hwnd,LPDWORD lpdwProcessld);    参数:    hWnd:窗口句柄。    lpdwProcessld:接收进程标识的32位值的地址。如果这个参数不为NULL,GetWindwThreadProc

若水 3万+

告别代码恐惧!用KRobot图形化编程,10分钟搞定Arduino巡线小车(附完整接线图)

本文介绍如何使用KRobot图形化编程工具快速搭建Arduino巡线小车,无需编写代码。从硬件准备到逻辑构建,详细讲解传感器数据处理、电机控制优化及高级功能扩展,帮助教育工作者和创客爱好者10分钟内完成项目。

weixin_30632089的博客 398

Unity URP炫彩干涉效果:从薄膜干涉原理到Shader Graph实现

薄膜干涉是一种常见的光学现象,指光在透明薄膜上下表面反射后产生干涉,形成彩虹色条纹。其原理基于光程差导致的相长与相消干涉,不同波长的光被选择性增强或削弱。在计算机图形学中,这一物理现象被抽象为高效的数学模型,通过Shader编程实现动态色彩变化,为游戏和实时渲染带来独特的视觉表现力。技术实现上,常采用正弦函数结合噪声纹理来模拟色彩循环,利用法线与视角点积作为基础变量,加入噪声扰动模拟厚度不均,实现随视角变化的虹彩效果。在Unity URP渲染管线中,可通过Shader Graph可视化工具或手写HLSL代码

weixin_34026997的博客 296

Windows API详解——GetWindowThreadProcessId 获得窗口所在进程ID和线程ID

在得到窗口句柄后我们可以通过GetWindowThreadProcessId这个函数来获得窗口所属进程ID和线程ID,从而判断创建窗口的进程和线程。 函数原型: DWORD GetWindowThreadProcessId(HWND hWnd,LPDWORD lpdwProcessId); 参数说明: hWnd:传入的窗口句柄;lpdwProcessId:返回的进程ID地址

小米的修行之路 1万+

Windows 上安装 Everything:快速查找电脑上的文件

windows 快速查找文件

jhgj56的博客 1523

一文读懂远程线程注入

在红队行动中,红队的目的都是要在不暴露自身行动的前提下,向蓝队发动攻击。他们使用各种技术和程序来隐藏C2连接和数据流。攻击活动的第一步是获得初始访问权。他们会使用定制的恶意软件和有效载荷来躲避防杀软和EDR等防御工具。本文涉及知识点实操练习:[DLL注入型病毒实验](https://www.hetianlab.com/expc.do?wemedia)(通过实验了解DLL注入型病毒的攻击过程)进程注入是用来逃避防御机制的重要技术之一。

Karka_的博客 660

深入浅出ISP:用RKISP2.x Tuner工具理解AWB、AE、HDR等核心模块的实战调参

本文深入解析RKISP2.x Tuner工具在ISP图像处理中的实战应用,重点探讨AWB、AE、HDR等核心模块的调参技巧。通过环境搭建、调试工具使用和实际案例,帮助开发者掌握如何在不同光照条件下优化图像质量,实现精准的白平衡、曝光控制和动态范围处理。

weixin_26802933的博客 489

嵌入式开发:用状态机实现STM32按键消抖,告别阻塞延时

在嵌入式系统开发中,处理异步事件和实时响应是核心挑战。状态机作为一种强大的编程模型,通过定义有限的状态、事件和状态转换规则,将复杂的、非线性的控制逻辑转化为清晰、确定且易于维护的代码结构。其技术价值在于实现逻辑的模块化、异步化和非阻塞化,能显著提升代码的可读性、可扩展性和系统实时性。这一思想广泛应用于协议解析、用户界面交互、传感器数据处理等场景。本文以嵌入式开发中基础的按键处理为例,针对传统“延时消抖”方法会阻塞主循环、影响实时性的痛点,深入讲解如何运用状态机思维重构按键消抖逻辑。通过分析状态机的核心三要素

weixin_33377602的博客 341

利用远程线程将代码注入到目标进程中执行

<br />/* ************************************<br />* remote.c<br />* 创建远程线程、将代码注入到其他进程中执行<br />**************************************/<br />/* 头文件 */<br />#include <windows.h><br />#include <Tlhelp32.h><br />/*************************************<br />* BO

yiruirui0507的专栏 3257

人形机器人新产品导入(NPI)工艺工程师的角色与技术解析

本文系统解析人形机器人NPI工程师的核心职责与能力要求。主要内容包括:1)NPI工程师需主导装配工艺设计、样品试做及问题闭环,涉及公差分析(如尺寸链计算)、工艺评审与FMEA应用;2)要求输出完整工艺文档体系,并跟踪试产至量产全过程;3)任职资格强调3年以上机器人/智能制造行业经验,掌握SPC、公差计算等质量工具,熟悉点胶/焊接等工艺及特殊材料特性;4)通过实际案例展示关节精度优化、新物料验证等典型工作场景;5)提供基于职责的面试问题及技术性解答方案。文章聚焦技术细节,为从业者提供实用参考框架。

郑伟强dev的专栏 382

使用远程线程来注入DLL

windows内的各个进程有各自的地址空间。它们相互独立互不干扰保证了系统的安全性。但是windows也为调试器或是其他工具设计了一些函数,这些函数可以让一个进程对另一个进程进行操作。虽然他们是为调试器设计的,但是任何应用程序都可以调用它们 。接下来我们来谈谈使用远程线程来注入DLL。          从根本上说,DLL注入就是将某一DLL注入到某一进程的地址空间。该进程中的一个线程调

a904003695的专栏 2496

ansys license许可证问题:Ansys License Manager Release 2024 R1...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 5371

【数据分析】比较SparCC、Pearson和Spearman相关性估计方法在合成组学数据上的表现

【数据分析】比较SparCC、Pearson和Spearman相关性估计方法在合成组学数据上的表现

专注生信领域 664

win32相关(远程线程和远程线程注入)

作用:创建在另一个进程的虚拟地址空间中运行的线程。

weixin_43754657的博客 1124

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

使用远程线程进行DLL注入的介绍

首先声明,我是一个初学者,这篇文章只是我学习编程过程中的一个记录 ,仅供大家参考。文章中涉及的源代码是我在Windows核心编程一书中和网上的一些资料里学习到的,在此向那些前辈表示感谢。本源代码没有版权,网友可随意复制修改,但请注明引用出处 http://blog.youkuaiyun.com/scienwu。此代码仅供学习参考之用,用此代码修改而成的程序所造成的损失作者ScienWu不承担任何责任。由于

ScienWu的专栏 2888

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

c语言进行远程注入进程,远程线程注入详解

作者:黎伟鑫一、 前言:远程线程技术指的是通过在其他进程中创建新线程的方法进入该进程的内存地址空间,从而获得对该进程的控制权的方法。在进程中可以通过CreateThread函数创建线程,被创建的新线程与主线程共享地址空间以及其他的资源。同样,通过CreateRemoteThread函数可以在其他进程内创建新线程,新创建的的远程线程可以共享远程进程的地址空间。所以通过在远程进程中创建新的方法,就可以...

weixin_34036423的博客 1215

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

使用C#实现远程线程插入.

使用.NET可以实现远程线程插入吗?使用严格的C#,不借助任何其它技术.远程线程插入是不能在.NET平台上实现的.然而在shellcode技术和远程线程插入之代码插入的基础上.完全可以实现基于.NET平台的混合型远程线程插入.最终效果是这样的:用于将线程插入到其它进程的可执行程序是.NET程序(混合几百字节的机器码),用于被插入到其它进程的DLL或EXE也是纯.NET实现的.可被插入的对象是所有有

-云在青天水在瓶 1694

DLL注入之使用远程线程注入

原理分析: 远程线程注入是很常见且古老的注入方式之一。其原理是根据Win32函数CreateRemoteThread在目标进程中创建一个线程,然后加载注入DLL。无巧不成书,创建线程的所需的回调函数恰恰与LoadLibrary声明结构几乎一模一样。 //Thread PROC DWORD WINAPI ThreadProc(_In_ LPVOID lpParameter); //显式加载D...

even的博客 1249

易语言远程线程注入DLL到游戏

远程线程注入CreateRemoteThread通过获取注入目标进程的句柄,把我们的DLL注入到目标进程内存地址,远程线程的意思是另一个进程中的线程,并非远控的意思,也就是远程线程注入是指一个进程在另一个进程中创建线程的技术, 下面我们先看一下步骤: 1、获取游戏进程句柄,0表示不继承句柄 2、在远程进程中(游戏进程中)申请内存空间,用来存放模块路径 3、WriteProcessMemor...

511遇见 9784

CreateRemoteThread远程线程注入dll到游戏

远程线程注入是指通过CreateRemoteThread在目标进程创建一个线程,然后加载注入我们的DLL,由于易语言只能编译32位DLL,所以我们只能注入到32进程,本课录制视频分为3个课时,第一课时主要完成线程注入的主程序。 远程线程注入 .版本 2 .支持库 spec 模块名称 = 编辑框1.内容 ' 1、 获取游戏进程句柄,0表示不继承句柄 进程句柄 = OpenProcess (2035711, 0, 到数值 (编辑框2.内容)) .如果真 (进程句柄 = 0) 信息框 (“打开进.

511遇见 4410
上一篇: Windows NT File System Internals》学习笔记之物理内存管理简介
下一篇: Win2k病毒Demo
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值