码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • windows 各种inject/hook学习材料(自用)


    1,https://www.freesion.com/article/39911454630/

       主要介绍四种常见的 Windows DLL 注入技术。

        分别为全局钩子、远线程钩子、突破 SESSION 0 隔离的远线程注入和 APC 注入。

       有代码段。

    2,https://oyeah.blog.csdn.net/article/details/120265888

      介绍了十种dll注入方式,配有文字说明和图片,没有代码。

    3 https://github.com/suvllian/process-inject

          有文字说明,有完整代码。

    4 https://blog.csdn.net/CodeBowl/article/details/120171458  

         hook介绍

    5,https://github.com/EasyHook/EasyHook 

         hook 库

    6,https://github.com/TsudaKageyu/minhook

    关于注入的监控与防护

         注入操作,简单来说就是,将本来不属于该进程的代码强行写入该进程的内存空间,并执行。首先,进程句柄的权限控制,一旦获得了进程的内存空间读写权限就可以往进程中写入任意数据。 其次,是可执行代码完整性检查,检测非法模块或可执行内存块。

    关于反射式注入(ReflectiveInject)原理及使用

          以dll注入为例,相较于创建远程线程,然后直接调用LoadLibrary来加载dll实现注入;反射式注入也是通过创建远程线程,只是后半部分有差异;反射式注入的dll需要在dll中提供一个接口函数(导出或者不导出)被 远程线程调用,这个函数实现的功能相当于LoadLibrary。反射式注入的好处是实现了无文件注入,操作都是在内存中完成,可以在一定的程度上避免被拦截。

    关于远程线程创建

      通常使用CreateRemoteThread来创建远程线程来执行在另一个进程空间里面的代码,通过创建线程通知函数(PsSetCreateThreadNotifyRoutine)可以发现系统运行时会有大量的远程线程被创建。首先,当一个进程被创建时,该进程的第一个线程是被其父进程创建的;其次,一个进程可以通过CreateRemoteThread api在某个进程中创建线程。 下面是CreateThreadNotifyRoutine的代码:

    1. NTSTATUS MonitorRemoteThread(HANDLE ProcessId, HANDLE ThreadId,BOOLEAN Create)
    2. {
    3. NTSTATUS status = STATUS_SUCCESS;
    4. PKTHREAD Thread = NULL;
    5. PEPROCESS Process = NULL;
    6. HANDLE ParentPid = NULL;
    7. //线程创建通知函数是在执行创建线程的进程上下文下触发的
    8. //PsGetCurrentProcessId()在ProcessId进程中创建了线程ThreadId
    9. HANDLE CreatingProcess=PsGetCurrentProcessId();
    10. if (Create == TRUE&&
    11. CreatingProcess>(HANDLE)4)
    12. {
    13. if (ProcessId && ThreadId)
    14. {
    15. status = PsLookupThreadByThreadId(ThreadId, &Thread);
    16. if (NT_SUCCESS(status))
    17. {
    18. Process = IoThreadToProcess(Thread);
    19. if (Process)
    20. {
    21. //获取父进程pid
    22. ParentPid=PsGetProcessInheritedFromUniqueProcessId(Process);
    23. if (CreatingProcess!=ParentPid&&
    24. CreatingProcess!=ProcessId)//排除本地线程创建
    25. {
    26. DbgPrint("[%s]pid:%d create a suspicious remote thread %d in pid:%d\n",
    27. __FUNCTION__,
    28. CreatingProcess,
    29. ThreadId,
    30. ProcessId);
    31. }
    32. }
    33. //else
    34. //{
    35. // DbgPrint("[%s] IoThreadToProcess fails!\n", __FUNCTION__);
    36. //}
    37. }
    38. else
    39. {
    40. DbgPrint("[%s]PsLookupThreadByThreadId fails,status:0x%x\n", __FUNCTION__, status);
    41. }
    42. }
    43. }
    44. if (Thread)
    45. {
    46. ObDereferenceObject(Thread);
    47. }
    48. return status;
    49. }

    运行效果如下图:

     

  • 相关阅读:
    Windows10系统鼠标移出屏幕右侧
    Linux下安装Tomcat
    百日筑基第二十天-一头扎进消息队列3-RabbitMQ
    基于BP神经网络的多因素房屋价格预测matlab仿真
    onlyOfice取消上传文件大小的限制
    【黑马程序员】STL实战--演讲比赛管理系统
    webapi 设置帮助页面隐藏或显示
    HDU 1712:ACboy needs your help ← 分组背包问题
    企业开发中名词解析— —加密与脱敏及部分开发规范
    ElasticSearch--优化写入速度的方法--修改配置
  • 原文地址:https://blog.csdn.net/pureman_mega/article/details/128129136
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号