文章目录

  • 前言
  • 界面
  • 代码视图
  • 功能介绍
    • 基础技术
      • 防双开
      • 释放资源
    • 注入技术
      • 全局钩子注入
      • 远程线程注入
      • APC注入
    • 启动技术
      • 三种方式创建进程
      • 内存加载运行dll
    • 自启动技术
      • 注册表
      • 快速启动目录
      • 计划任务
      • 系统服务
    • 提权技术
      • 提升为Debug权限
    • BypassUAC
      • 查看当前进程权限
    • 隐藏技术
      • 进程伪装
      • 傀儡进程
      • DLL劫持
    • 压缩技术
      • 数据解压缩
      • 文件解压缩
    • 加密技术
      • HASH
      • AES加/解密
      • RSA加/解密
      • 实现原理
    • 功能技术
      • 进程遍历
      • 文件遍历
      • 桌面截屏
      • 按键记录
      • 显示CMD结果
      • U盘小偷
      • 文件监控
      • 自删除
  • 说明

前言

前段时间一直在看Windows黑客编程技术详解这本书,然后就想着与其一个例子一个例子的敲,倒不如把书上的例子写成一个项目,作为一个集合,这样既有利于面试 也方便以后代码的复用。最后花了半个月的时间就有了下面的东西。

界面

用MFC写的 界面有点low 不要在意这些细节。

代码视图

代码的话放一个大概的类视图 详细的就不贴了实在是太多。


功能介绍

下面一一介绍每一个功能及其实现原理。

基础技术

防双开

使用最基础的互斥体防双开 函数写在主程序。所以这个按钮只是个象征性的东西。一直都是开启的。

释放资源

使用FindResourceW``SizeofResource``LoadResourceLockResource等API实现资源的释放。

程序会在同级目录下释放后续功能测试所需的DLL。

注入技术

全局钩子注入

使用Windows提供的SetWindowsHookEx将DLL注入到系统。测试DLL为MyHookDll.dll。可通过资源释放技术释放所需dll。也可自行编译。HOOK的消息是WH_GETMESSAGE。dll中只写了一个象征性的MessageBox。即拖拽dll点击开始注入后,当系统中有任意进程接收到消息会弹出一个MessageBox。如果电脑中启动的应用较多可能导致蓝屏卡死等情况。

远程线程注入

  1. 拖拽TestDll.dll(使用资源释放技术释放)或者自行编译
  2. 输入需要注入的进程ID
  3. 点击开始注入后会将测试DLL注入到目标进程 测试DLL只有一个MessageBox
  4. 如果注入的进程权限较高或者检测较严格(如QQ.exe) 则可能失败

实现原理

使用ZwCreateThreadEx函数创建远程线程 实现DLL注入。之所以没有CreateRemoteThread是因为CreateRemoteThread函数内部是被CreateRemoteThread调用的。相对来说这个函数的权限会更高。

APC注入

  1. 拖拽TestDll.dll(使用资源释放技术释放)或自行编译
  2. 输入需要注入的进程名
  3. 点击开始注入后会将测试DLL注入到目标进程 测试DLL只有一个MessageBox
  4. 如果注入的进程权限较高或者检测较严格(如QQ.exe) 则可能失败

实现原理

通过QueueUserAPC把一个函数添加到指定线程的APC队列中

启动技术

三种方式创建进程

  1. 任意拖拽一个exe到窗口,点击按钮后会使用三种不同的方式创建进程
  2. 分别使用CreateProcess``ShellExecuteWinExec三种方式创建进程

内存加载运行dll

  1. 拖拽TestDll.dll(使用资源释放技术释放)
  2. 点击按钮后程序会将TestDll模拟PE加载器加载到本程序内存后直接运行
  3. 如果将DLL隐藏到资源可以不将DLL释放到本地直接运行
  4. 病毒WannaCry和BadRabbit都用了这种方式来运行自己的主逻辑程序

自启动技术

注册表

  1. 拖拽任意exe到窗口
  2. 点击按钮后会将程序的完整路径写到注册表启动项
  3. 目标程序随系统启动而启动
  4. 可自行查看提示窗口的注册表路径进行查看或删除
  5. 原理:通过RegOpenKeyExRegSetValueEx将程序写入到\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

快速启动目录

  1. 拖拽任意exe到窗口
  2. 点击按钮后会将程序的复制到系统的快速启动目录
  3. 目标程序随用户登录而自行启动
  4. 可自行查看提示窗口的快速启动目录路径进行查看或删除
  5. 实现原理:使用SHGetSpecialFolderPath函数获取windows系统中快速启动目录的路径 然后,使用CopyFile函数,将想要自启动的程序复制到快速启动目录下

计划任务

  1. 此功能需使用管理员运行
  2. 拖拽任意exe到窗口
  3. 点击按钮后会将目标程序写入到系统的计划任务
  4. 程序随用户登录而启动
  5. 可自行在计划任务中删除添加的事件
  6. 实现原理:调用COM组件将程序添加到计划任务实现开机自启动

系统服务

  1. 此功能需使用管理员运行
  2. 拖拽ServiceExeTest.exe(服务应用程序 需自行编译)到窗口
  3. 点击按钮后会将ServiceExeTest.exe注册为系统服务
  4. ServiceExeTest.exe将会在后台运行
  5. ServiceExeTest.exe不含任何代码 只是一个空的服务应用程序
  6. 可自行使用任务管理器删除
  7. 实现原理:使用CreateService将编写的服务应用程序注册为系统服务实现开机自启动

提权技术

提升为Debug权限

  1. 此功能需使用管理员运行
  2. 点击按钮后程序将当前进程提升为为Debug权限

BypassUAC

  1. 首先将用户账户控制设置为默认
  2. 点击按钮后会绕过UAC的弹窗提升为管理员权限
  3. 不弹窗开启一个管理员权限的命令行
  4. 实现原理:使用COM组件提权

查看当前进程权限

  1. 点击按钮后将在List控件上显示当前程序的所有权限
  2. 可使用此功能查看提升为Debug权限是否生效

隐藏技术

进程伪装

  1. 点击按钮后会将本进程伪装为Explorer.exe
  2. 本程序为32位 在32为系统下此功能才有效
  3. 实现原理:使用NtQueryInformationProcess获取进程环境块。修改指定进程环境块的进程路径以及命令行信息,从而达到进程伪装的效果。

傀儡进程

  1. 拖拽任意一个exe到窗口
  2. 点击按钮后会将一段MessageBox的ShellCode注入到目标exe
  3. 实现原理:修改某一进程的内存数据,向内存数据写入Shellcode代码,并修改该进程的执行流程,使其执行Shellcode代码。这样,进程还是原来的进程,但执行的操作却替换了。

DLL劫持

  1. 此功能没有写在界面上 需要自行手动操作
  2. 我这里劫持的是FileCleaner2.0.exeoledlg.dll
  3. 找到DllHijackTest.dll(使用资源释放技术释放)或自行编译
  4. 将DLL重命名为oledlg.dll
  5. 找到C:\Windows\SysWOW64目录下的oledlg.dll将其重命名为Old_oledlg(如果无法重命名请自行百度解决方案)
  6. 将oledlg.dll放到SysWOW64目录下
  7. 运行FileCleaner2.0.exe
  8. 劫持的DLL在DllMian中写了一个MessageBox函数 表示劫持成功
  9. 实现原理:在PE加载器加载DLL时 使用自制的DLL替换掉原DLL ,在自制的DLL中转发原DLL的导出函数并添加代码

压缩技术

数据解压缩

  1. 在文本框中输入数据 点击按钮,即可对输入的数据压缩和解压缩
  2. 实现原理:通过Windows提供的RtlDecompressBufferRtlGetCompressionWorkSpaceSize实现对数据的解压缩

文件解压缩

  1. 拖拽文件到窗口,点击按钮 即可对文件进行压缩和解压缩
  2. 使用ZLIB压缩库实现对文件的解压缩

加密技术

HASH

拖拽文件到窗口,点击按钮 即可求得文件的哈希值

AES加/解密

在数据窗口输入数据 点击按钮 即可求得数据经过AES加解密后的值

RSA加/解密

在数据窗口输入数据 点击按钮 即可求得数据经过RAS加解密后的值

实现原理

以上加解密都是使用Windows自带的加密库来实现的,使用的是cryptoAPI

功能技术

进程遍历

对当前所有进程进行遍历

实现原理:使用Process32FirstProcess32Next

文件遍历

  1. 对当前系统所有文件进行遍历 可查看文件属性和磁盘信息
  2. 可查看文件属性和磁盘信息 双击可进入下一层目录
  3. 实现原理:使用FindFirstFileFindNextFile

桌面截屏

  1. 对当前屏幕进行截屏 截图存放在程序同级目录
  2. 实现原理:通过GDI的方式实现屏幕画面抓取

按键记录

  1. 实现了一个键盘记录器 记录下所有的按键记录
  2. 按键记录存储在D盘下的log.txt
  3. 实现原理:利用GetAsyncKeyState函数。该函数可以判断按键状态,根据是否为按下状态来判断用户是否进行了按键操作,从而记录
  4. 之所以没有用全局键盘钩子和原始输入模型是因为这两种方式都有各自的限制,MFC实现起来不太容易

显示CMD结果

  1. 在命令框输入CMD命令 例如ping 127.0.0.0
  2. 等命令执行完成会在数据窗口会显示CMD命令的执行结果
  3. 由于环境不一致 这个功能可能会执行失败
  4. 实现原理:使用命名管道进行进程通讯,从而获得cmd的执行结果

U盘小偷

  1. 在功能窗口此功能默认开启
  2. 对U盘的插入和拔出进行监控
  3. 拷贝U盘里所有的.txt文件到程序的当前目录下,如需拷贝其他文件则修改源码
  4. 实现原理:响应WM_DEVICECHANGE监控U盘,获取盘符之后进行文件遍历 即可拷贝所需要的文件

文件监控

  1. 对D盘上的文件操作进行监控
  2. 实现原理:Windows提供了一个文件监控的接口函数ReadDirectoryChangesW,这个监控函数可以对计算机上的所有文件操作进行监控。

自删除

  1. 点击后程序将退出进程 并删除自身
  2. 实现原理:使用批处理

说明

  1. 本程序仅用于交流和研究,请勿用于其他用途。有任何后果与本人无关
  2. 由于环境不一样 所以不能保证每个功能在每台机器上都是可行的。如果程序有bug还请多多体谅
  3. 如果发现缺dll或者没有测试文件的情况在工程项目下都可找到,可自行编译。
  4. 本程序编写环境为W10 64 VS2017 最后附上源码

Github地址:https://github.com/TonyChen56/HackerTools

开源一个自写的病毒技术工具集相关推荐

  1. 开源作品-PHP写的Redis管理工具(单文件绿色版)-SuRedisAdmin_PHP_1_0

    前言: 项目开发用到了Redis,但是在调试Redis数据的时候,没有一款通用的可视化管理工具.在网络找了一些,但是感觉功能上都不尽人意,于是决定抽出一点时间,开发一个用起来顺手的Redis管理工具. ...

  2. 分享一个自己写的可视化编程工具

    分享一个自己参考UE4蓝图写的可视化编程工具,xVP: 下载地址:链接: https://pan.baidu.com/s/18tcynzp7TbpP6wvMT9XyIA 提取码: qkue

  3. 开源个.NetCore写的 - 并发请求工具PressureTool

    本篇和大家分享的是一个 并发请求工具,并发往往代表的就是压力,对于一些订单量比较多的公司这种情况很普遍,也因此出现了很多应对并发的解决方案如:分布式,队列,数据库锁等: 对于没有遇到过或者不可能线上来 ...

  4. 开源一个优雅的类图生成工具

    前言 首先必须声明,这不是一篇广告或者标题党. 而是我开源了一个工具,可以优雅的为Java or Kotlin 项目生成 Class Diagram. 我推测列为读者会进来阅读,原因无非以下两点: 获 ...

  5. AI代写计划总结怎么做?分享一个代写计划总结小工具

    计划总结是规划和安排工作的重要步骤,可以帮助我们更好地了解任务和目标,明确工作重点和时间表,从而提高工作效率和质量.它还可以帮助我们识别问题和挑战,制定相应的解决方案和应对策略,提高工作的成功率和可持 ...

  6. 开源一个极简的群日程工具

    这是一个极简日程小助手,目前以小程序的形式发布.用户喂给它一段文字,它会帮你解析文字里的时间信息,并且创建一个含有通知的日程,用以备忘一些活动或者会议事项. 当然如果你在没有人的环境,你可以直接:

  7. ×××病毒分析工具集之File Format Identifier v1.0

    本工具是一款辅助进行病毒分析的工具,它包括各种文件格式识别功能,使用×××的格式识别引擎部分代码,集查壳.PE文件编辑.MD5计算以及快捷的第三方工具利用等功能,适合病毒分析中对一些病毒***样本进行 ...

  8. 自己动手写个病毒专杀工具

    下方查看历史精选文章 重磅发布 - 自动化框架基础指南pdf 大数据测试过程.策略及挑战 测试框架原理,构建成功的基石 在自动化测试工作之前,你应该知道的10条建议 在自动化测试中,重要的不是工具 此 ...

  9. 系统运维工具集SysAK使用说明

    SysAK(System Analyse Kit)是阿里云操作系统提供的一个全方位的系统运维工具集,可以覆盖系统的日常监控.线上问题诊断和系统故障修复等常见运维场景.本文为您介绍SysAK的安装部署和 ...

最新文章

  1. 使用Python,OpenCV和Scikit-Image检测低对比度图像
  2. 对偶问题(dual problem)
  3. 【ES6】字符串的拓展
  4. 信号处理函数(2)-sigismember()
  5. 【mysql】mysql的数据库主从(一主一从)
  6. 网页怎么在图片上添加文字_抖音一天可见怎么添加文字-抖音一天可见添加文字文案方法介绍...
  7. 机器学习数据倾斜的解决方法_机器学习并不总是解决数据问题的方法
  8. 命令(CMD)终端的清屏(清除/清空)命令/快捷键
  9. GB/T 17710-1999 PHP生成校验码
  10. 【Nexus3】使用-Nexus3批量上传jar包 artifact upload
  11. 希赛网软考学院将会使系分大大贬值
  12. 周立功ZCANPRO基础使用教程
  13. labelimg安装教程
  14. 利用dem生成横断面数据
  15. 研究:信仰能帮助人坦然面对挫折
  16. nginx 连接php
  17. 深圳大学电信学院《C程序设计》期末大作业:《在二维封闭房间中的弹球模拟程序》
  18. 网页截图怎么截一整张_电脑网页页面太长怎么截图 长网页滚动截图的两种方法...
  19. shadow:人工智能设计,一门自己生长的课
  20. 抖音视频链接数据分析

热门文章

  1. DL之FAN:FAN人脸对齐网络(Face Alignment depth Network)的论文简介、案例应用之详细攻略
  2. DL之R-FCN:R-FCN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  3. 成功解决coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to inc
  4. ML之DT:机器学习根据大量数据,已知年龄、收入、是否上海人、私家车价格的一个人,预测是否有真实购买上海黄浦区楼房的能力
  5. Jmeter接口测试-断言
  6. 嵌入式Tomcat容器的参数(maxParameterCount)设定
  7. Android USB Gadget复合设备驱动(打印机)测试方法
  8. ASP.NET内置对象的总结
  9. 【原创】C++变量作用域(三)
  10. win32创建控件的一些问题