首页
社区
课程
招聘
[讨论]用APC回调函数代替WriteProcessMemory函数实现进程内存覆盖的详解
发表于: 2022-9-15 19:20 5856

[讨论]用APC回调函数代替WriteProcessMemory函数实现进程内存覆盖的详解

2022-9-15 19:20
5856

这是一个用用户模式的APC实现WriteProcessMemory功能的示例,也就是说:这仅仅只是一个概念模型,与实际应用还差几条街的距离。但它提供远程进程内存覆盖的一种新方法,完全可以取代API WriteProcessMemory应用程序界面。

WriteProcessMemoryAPC Proc USES RBX RSI RDI hProcess:HANDLE,pAddress:QWORD,pData:QWORD,dqLength:QWORD
    Local hThread:HANDLE
    ;// create suspended thread (ExitThread)

    invoke    pNtCreateThreadEx, addr hThread,NT_CREATE_THREAD_EX_ALL_ACCESS,0,hProcess,pExitThread,0, NT_CREATE_THREAD_EX_SUSPENDED, NULL, 0, 0, NULL
;int 3
    .if rax != 0
        ;invoke    ErrorMessage,CStr("pNtCreateThreadEx")
        mov    rax,1
        ret
    .endif

    ;// write memory    
    xor    rbx,rbx
    ;invoke    MessageBox, 0, pAddress, 0, 0
    ;invoke    MessageBox, 0, pData, 0, 0
    .repeat
        mov    rsi,pAddress
        mov    rdi,pData
        add    rsi,rbx
        mov    al,byte ptr [rdi+rbx]
        ;// schedule a call to RtlFillMemory to update the current byte
        invoke    pNtQueueApcThread,hThread,pRtlFillMemory,rsi,1,al
        .if rax != 0
            ;// error
            invoke    TerminateThread,hThread,NULL
            invoke    CloseHandle,hThread
            mov    rax,1
            .break
        .endif
        inc rbx
    .until rbx == dqLength
    
    ;// resume thread to execute queued APC calls
    invoke    ResumeThread,hThread
    ;// wait for thread to exit
    invoke    WaitForSingleObject,hThread, INFINITE
    ;// close thread handle
    invoke    CloseHandle,hThread

    mov    rax,0
    ret    

WriteProcessMemoryAPC EndP


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
APC需要线程处于alertable状态
抛开此前提不说,首先就需要把传递的APC例程和参数写入到目标进程
这样的话,就已经代替不了WriteProcessMemory
当然了,驱动层就不说了
2022-9-15 22:16
0
雪    币: 328
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
楼主的意思是利用apc回调函数 在远程进程写内存吗? 那么回调函数明显不可控,常见场景是WriteProcessMemory 写shellcode, apc执行。
2022-9-16 03:00
0
雪    币: 405
活跃值: (2285)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
现在很多安全软件都会监控WriteProcessMemory,估计是为了过检测的一种方式,正常没意义,但做恶意来说,可能是一个检测盲点。
2022-9-16 10:55
0
雪    币: 10936
活跃值: (3293)
能力值: (RANK:520 )
在线值:
发帖
回帖
粉丝
5
写自身进程不会拦,写别的进程,有遍历进程 以及申请空间的操作一样会被主动防御拦截

因此还没到WriteProcessMemory时就被拦截了

2022-9-16 21:42
0
雪    币: 248
活跃值: (1096)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
天下没有不透风的墙,原作者(本人翻译解释者)说:这里透风。你都懒得去那里吹一下。
2022-9-17 14:40
0
游客
登录 | 注册 方可回帖
返回
//