本帖最后由 鬼手56 于 2019-4-27 11:07 编辑
前言前段时间一直在看Windows黑客编程技术详解这本书,然后就想着与其一个例子一个例子的敲,倒不如把书上的例子写成一个项目,作为一个集合,这样既有利于面试 也方便以后代码的复用。最后花了半个月的时间就有了下面的东西。 界面
用MFC写的 界面有点low 不要在意这些细节。 代码视图
代码的话放一个大概的类视图 详细的就不贴了实在是太多。 功能介绍
下面一一介绍每一个功能及其实现原理。 基础技术
防双开 使用最基础的互斥体防双开 函数写在主程序。所以这个按钮只是个象征性的东西。一直都是开启的。 释放资源使用FindResourceW``SizeofResource``LoadResource和LockResource等API实现资源的释放。 程序会在同级目录下释放后续功能测试所需的DLL。 注入技术
全局钩子注入使用Windows提供的SetWindowsHookEx将DLL注入到系统。测试DLL为MyHookDll.dll。可通过资源释放技术释放所需dll。也可自行编译。HOOK的消息是WH_GETMESSAGE。dll中只写了一个象征性的MessageBox。即拖拽dll点击开始注入后,当系统中有任意进程接收到消息会弹出一个MessageBox。如果电脑中启动的应用较多可能导致蓝屏卡死等情况。 远程线程注入拖拽TestDll.dll(使用资源释放技术释放)或者自行编译 输入需要注入的进程ID 点击开始注入后会将测试DLL注入到目标进程 测试DLL只有一个MessageBox 如果注入的进程权限较高或者检测较严格(如QQ.exe) 则可能失败
实现原理 使用ZwCreateThreadEx函数创建远程线程 实现DLL注入。之所以没有CreateRemoteThread是因为CreateRemoteThread函数内部是被CreateRemoteThread调用的。相对来说这个函数的权限会更高。 APC注入拖拽TestDll.dll(使用资源释放技术释放)或自行编译 输入需要注入的进程名 点击开始注入后会将测试DLL注入到目标进程 测试DLL只有一个MessageBox 如果注入的进程权限较高或者检测较严格(如QQ.exe) 则可能失败
实现原理 通过QueueUserAPC把一个函数添加到指定线程的APC队列中 启动技术
三种方式创建进程内存加载运行dll拖拽TestDll.dll(使用资源释放技术释放) 点击按钮后程序会将TestDll模拟PE加载器加载到本程序内存后直接运行 如果将DLL隐藏到资源可以不将DLL释放到本地直接运行 病毒WannaCry和BadRabbit都用了这种方式来运行自己的主逻辑程序
自启动技术
注册表快速启动目录计划任务系统服务此功能需使用管理员运行 拖拽ServiceExeTest.exe(服务应用程序 需自行编译)到窗口 点击按钮后会将ServiceExeTest.exe注册为系统服务 ServiceExeTest.exe将会在后台运行 ServiceExeTest.exe不含任何代码 只是一个空的服务应用程序 可自行使用任务管理器删除 实现原理:使用CreateService将编写的服务应用程序注册为系统服务实现开机自启动
提权技术
提升为Debug权限此功能需使用管理员运行 点击按钮后程序将当前进程提升为为Debug权限
BypassUAC首先将用户账户控制设置为默认 点击按钮后会绕过UAC的弹窗提升为管理员权限 不弹窗开启一个管理员权限的命令行 实现原理:使用COM组件提权
查看当前进程权限隐藏技术
进程伪装傀儡进程DLL劫持此功能没有写在界面上 需要自行手动操作 我这里劫持的是FileCleaner2.0.exe的oledlg.dll 找到DllHijackTest.dll(使用资源释放技术释放)或自行编译 将DLL重命名为oledlg.dll 找到C:\Windows\SysWOW64目录下的oledlg.dll将其重命名为Old_oledlg(如果无法重命名请自行百度解决方案) 将oledlg.dll放到SysWOW64目录下 运行FileCleaner2.0.exe 劫持的DLL在DllMian中写了一个MessageBox函数 表示劫持成功 实现原理:在PE加载器加载DLL时 使用自制的DLL替换掉原DLL ,在自制的DLL中转发原DLL的导出函数并添加代码
压缩技术
数据解压缩文件解压缩加密技术
HASH拖拽文件到窗口,点击按钮 即可求得文件的哈希值 AES加/解密在数据窗口输入数据 点击按钮 即可求得数据经过AES加解密后的值 RSA加/解密在数据窗口输入数据 点击按钮 即可求得数据经过RAS加解密后的值 实现原理以上加解密都是使用Windows自带的加密库来实现的,使用的是cryptoAPI。 功能技术
进程遍历对当前所有进程进行遍历 实现原理:使用Process32First和Process32Next 文件遍历桌面截屏对当前屏幕进行截屏 截图存放在程序同级目录 实现原理:通过GDI的方式实现屏幕画面抓取
按键记录显示CMD结果在命令框输入CMD命令 例如ping 127.0.0.0 等命令执行完成会在数据窗口会显示CMD命令的执行结果 由于环境不一致 这个功能可能会执行失败 实现原理:使用命名管道进行进程通讯,从而获得cmd的执行结果
U盘小偷文件监控自删除点击后程序将退出进程 并删除自身 实现原理:使用批处理
说明本程序仅用于交流和研究,请勿用于其他用途。有任何后果与本人无关 由于环境不一样 所以不能保证每个功能在每台机器上都是可行的。如果程序有bug还请多多体谅 如果发现缺dll或者没有测试文件的情况在工程项目下都可找到,可自行编译。 本程序编写环境为W10 64 VS2017 最后附上源码 Github:https://github.com/TonyChen56/HackerTools
|