- 博客(99)
- 收藏
- 关注
原创 安全之路 —— 利用APC队列实现跨进程注入
简介在之前的文章中笔者曾经为大家介绍过使用CreateRemoteThread函数来实现远程线程注入,毫无疑问最经典的注入方式,但也因为如此,这种方式到今天已经几乎被所有安全软件所防御。所以今天笔者要介绍的是一种相对比较“另类”的方式,被称作**“APC注入”。APC(Asynchronous Procedure Call),全称为异步过程调用**,指的是函数在特定线程中被异步执行。简单地说,...
2019-03-24 00:41:29
813
1
原创 C++多线程同步技巧(四)--- 信号量
简介信号量是维护0到指定最大值之间的同步对象。信号量状态在其计数大于0时是有信号的,而其计数是0时是无信号的。信号量对象在控制上可以支持有限数量共享资源的访问,可以用于线程同步,预防死锁等领域。信号量的特点和用途可用下列几句话定义:(1)如果当前资源的数量大于0,则信号量有效;(2)如果当前资源数量是0,则信号量无效;(3)系统决不允许当前资源的数量为负值;(4)当前资源数量决不...
2019-03-24 00:34:23
594
原创 C++多线程同步技巧(三)--- 互斥体
简介Windows互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问,在线程同步与保证程序单体运行上都有相当大的用处。代码样例//////////////////////////////////// FileName : MutexDemo.cpp// Creator : PeterZheng// Date...
2019-03-24 00:32:22
397
原创 C++实现程序单实例运行的两种方式
简介在我们编写程序的时候,经常会注意到的一个问题就是如何能够让程序只运行一个实例,确保不会让同一个程序多次运行,从而产生诸多相同进程,给我们的带来不便呢?那么常用的有以下四种方法,第一种方法是通过扫描进程列表比对进程名来检测,第二种方法是通过枚举程序窗口的方式,第三种方法是采用共享全局变量来实现,第四种方法是通过创建互斥体来实现。那么在这些方法中,第一种和第二种方法是有缺陷的,扫描进程列表比...
2019-02-28 19:44:56
1404
原创 使用Windows全局钩子打造键盘记录器
简介键盘记录功能一直是木马等恶意软件窥探用户隐私的标配,那么这个功能是怎么实现的呢?在Ring3级下,微软就为我们内置了一个Hook窗口消息的API,也就是SetWindowsHookEx函数,这个函数能够实现优先拦截提交给特定窗口的信息,并进行拦截者需要的处理,然后再提交给窗口函数或是下一个钩子函数,函数第一个参数为idHook,需要设置钩子的类型,在以下代码样例中我们选择安装的钩子类型为W...
2019-02-18 15:18:36
2568
1
原创 洛谷P1553 数字反转(升级版)
题目简介题目描述      给定一个数,请将该数各个位上数字反转得到一个新数。      这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数。整数反转是将所有数
2018-12-03 20:45:54
678
原创 C++多线程同步技巧(二) ---事件
简介Windows在线程同步方面提供了多种信号处理机制,其中一种便是使用 CreateEvent() 函数创建事件,然后使用信号控制同步。其中将事件变为有信号可使用 SetEvent() 函数,将事件信号复位(变为无信号)可使用 ResetEvent() 函数,信号可以配合 WaitForSingleObject() 函数进行控制,当有信号时,此函数便会放行;无信号时,此函数会将阻塞。提...
2018-10-01 18:46:51
395
原创 安全之路 —— C++实现进程守护
简介所谓进程守护,就是A进程为了保护自己不被结束,创建了一个守护线程来保护自己,一旦被结束进程,便重新启动。进程守护的方法多被应用于恶意软件,是一个保护自己进程的一个简单方式,在ring3下即可轻松实现。而创建守护线程的方法多采用远程线程注入的方式,笔者之前曾介绍过远程线程注入的基本方式,主要分为DLL远程注入和无DLL远程注入。代码实现////////////////////...
2018-09-08 02:06:11
3713
2
原创 安全之路 —— 无DLL文件实现远程进程注入
简介        在之前的章节中,笔者曾介
2018-08-20 01:24:59
1416
原创 C++设计模式 ==> 原型模式
简介        所谓原型模式就是用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。举一个简单的例子,一个人想要批量分发自己的名片,然而名片千篇一律,只是偶
2018-08-17 19:35:30
527
原创 C++设计模式 ==> 工厂模式
简介在之前,笔者曾简单介绍过简单工厂模式,我们说过简单工厂模式可以使用工厂类根据需求动态生成子类对象,从而方便了未来对算法进行维护和扩展。而工厂模式相较之于简单工厂模式更为复杂,工厂模式对工厂类进行了详细的子类化,为每一个算法都建立了独立的工厂,这样的优点在于可以在算法扩展的时候避免修改总工厂类,而只要生成相应的子类就可以了,尽可能避免了违背“开闭原则”的情况,但缺点在于这样switch一类的...
2018-08-15 00:08:41
337
原创 C++设计模式 ==> 代理模式
简介代理模式,顾名思义,就是让一个代理替代真实事物做事情,切结果是是等效的,就相当于现实世界中的中介。在设计模式中,代理模式需要一个代理类来实例化真实事物类的对象,然后可以创建代理对象代替真实对象处理一些事情。代理模式可以起到隔离真实事物类的作用,在网络通信等后面有诸多应用。 下面我们使用一个简单的代码样例来演示一下代理模式的工作过程:假设有一位小A(RealPersuitePeople类)...
2018-08-12 03:12:39
991
原创 C++设计模式 ==> 装饰(者)模式
简介装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。装饰模式使用对象嵌套的思想,实现对一个对象动态地进行选择性的属性赋予与去除,例如有一篇固定的文本,我们可以给它装饰上“词汇过滤”与“文本加密”两个属性,但同时也要注意装饰顺序:例如文本如果先进行加密操作就没法进行词汇过滤的操作了。 下面演示一个简单的装饰模式...
2018-08-11 00:40:21
326
原创 C++设计模式 ==> 策略模式与简单工厂模式结合
简介策略模式相较之于简单工厂模式适用于生产方法经常变化且方法较为繁多的情况,因为生产方法时常变化就会需要频繁修改工厂类,违背了开闭原则,这时就可以用策略类由客户端根据需求动态切换策略。且策略模式通过进一步封装了代码细节,没有像简单工厂模式那样在客户端创建详细的对象,而把任务交给了策略类去执行,所以客户端不会知道太多算法实现的细节。当然,在更多的情况下,策略模式一般可以与简单工厂模式并用,将进行...
2018-08-09 15:54:01
876
原创 C++设计模式 ==> 简单工厂模式
简述工厂模式的核心在于使用一个工厂类根据需求动态生成子类对象,以计算器程序作为例子,加减乘除都分别作为运算类的子类,然后让工厂类根据要求动态实例化子类。图示代码实现///////////////////////////////// @ FileName : Operation.h// @ Date : 2018-08-06 18:04/////////////...
2018-08-08 21:51:58
292
原创 使用C++对物理网卡/虚拟网卡进行识别(包含内外网筛选)
简介 在Socket编程的时候,我们需要实时获取我们所需要的IP地址。例如在编写后门的时候,我们可能需要获得有效的外网IP或内网IP;有时候我们可能需要判断我们获取的是否是虚拟机网卡,这时候就需要对每一张网卡上的IP进行识别。以下笔者总结了一些常用的处理方法供大家参考。C++代码样例头文件(包含IP处理函数)////////////////////////////...
2018-06-22 01:11:48
3285
1
原创 安全之路 —— 利用端口复用技术隐藏后门端口
简介 前面我们介绍到我们可以用进程注入的方法,借用其他应用的端口收发信息,从而达到穿墙的效果,那么今天介绍一种新的方法,叫做端口复用技术,他能够与其他应用绑定同一个端口,但同时进行端口复用的程序会接管之前程序的信息接受权,所以我们在复用端口后,要对非后门信息通过127.0.0.1本机回环地址进行消息转发。C++代码样例///////////////////////////////...
2018-06-01 22:36:32
1645
1
原创 安全之路 —— 借助DLL进行远程线程注入实现穿墙与隐藏进程
简介        大多数后门或病毒要想初步实现隐藏进程,即不被像任务管理器这样典型的RING3级进程管理器找到过于明显的不明进程,其中比较著名的方法就是通过远程线程注入的方法注入将恶意进程的DLL文件注入系统
2018-05-16 17:03:08
1234
转载 SVCHOST启动服务实战
本文转载自:https://blog.csdn.net/huanglong8/article/details/70666987 转载出处: https://sanwen8.cn/p/2cenbHs.html最近在做小项目,用到了一些此类技术,觉得文章很细,手把手教的,粘在这里备忘下。。。...
2018-05-09 18:26:51
3232
原创 安全之路 —— 利用SVCHost.exe系统服务实现后门自启动
简介 在Windows系统中有一个系统服务控制器,叫做SVCHost.exe,它可以用来管理系统的多组服务。它与普通的服务控制不同的是它采用dll导出的ServiceMain主函数实现服务运行,所以我们在使用此方法时,要有两个步骤: 1. 编写dll文件封装ServiceMain导出函数 2. 编写负责服务安装与移除的exe文件 3. 本例中需要将.exe与.dll...
2018-05-09 18:02:30
2699
原创 安全之路 —— 通过映像劫持实现文件自启动
简介 Windows映像劫持技术是微软提供给软件开发者调试使用的在注册表项,能够替换目标进程执行。但如果被病毒木马利用,便会成为触发式自启动的绝佳方式,所以修改映像劫持的操作行为也被反病毒软件列为极其危险的行为之一。 实现映像劫持修改的注册表项为: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVer...
2018-05-06 18:00:16
1084
原创 安全之路 —— C/C++实现利用添加注册表项实现文件自启动
简介 添加注册表项是实现文件自启动的经典方法之一,但因为操作注册表项是一个敏感操作,被报毒可能性较大,但即便如此,这个方法还是值得一学的,因为后期大部分编程都涉及到注册表操作。 最常使用到的注册表项有两项: HKEY_CURRENT_USER\\Software\\Microsoft\\WindowsNT\\CurrentVersion\\Windows 将“l...
2018-05-05 00:19:09
914
原创 安全之路 —— C/C++实现后门的服务自启动
简介 Windows NT系统后门要实现自启动,有许多种方法,例如注册表自启动,映像劫持技术,SVCHost自启动以及本章节介绍的服务自启动等方法,其中服务自启动相对于上述其他三种需要修改注册表的启动方式而言更不容易被发现。C++代码样例////////////////////////////////////////////////////////////////// F...
2018-05-04 23:49:44
2274
原创 通过C/C++基于http下载文件
简介 Windows系统如何通过C/C++下载互联网上的文件呢?这里笔者给大家演示一个最简单的方法,利用Windows提供的urlmon库,可以快速实现文件下载的简单实例。 注:本文参考《非安全》编辑部出版的《Hack编程实例精讲》系列书籍,在此致谢。C++代码样例#include <cstdio>#include <iostream>#i...
2018-04-20 01:09:47
7427
1
原创 安全之路 —— C/C++开3389端口(远程终端)
简介 在渗透测试中开启对方电脑的3389端口是入侵者加入对方计算机账户后要想直接控制对方计算机的必须步骤,即开启对方计算机的远程终端功能,不同的Windows系统要开启3389需要修改不同的注册表项,为了方便,我们直接添加所有可能的注册表项,其中Windwos2000电脑需要重启激活,本程序并未添加此功能,需要的可参考笔者之前的博文:C/C++控制Windows关机/注销/重启的正确姿势。...
2018-04-15 21:59:57
1007
原创 C/C++控制Windows关机/注销/重启的正确姿势
简介 说到代码控制Windows关机/注销/重启的方式,有很多种,最简单的不过就是控制命令行,使用system(“pause”)函数执行一个shutdown -s -t 0,关机就完成了。但这种方式还要借助于命令行的方式解决问题。而Windows早就提供给我们直接控制关机/注销/重启的API了,在WindwosNT系统之前,只需调用ExitWindowsEx()就OK了。但自从出现了Win...
2018-04-13 18:50:41
6117
原创 Win10 + MASM32 + EditPlus 汇编语言编程环境设置
下载安装MASM32汇编环境 官方下载站:MASM32环境变量配置配置MasmHome变量,值为masm32的安装目录: 配置include和lib变量 include : %MasmHome%\include;%include% lib : %MasmHome%\lib;%lib%; 配置Path变量,在原有变量后面加上如下语句,注意原变量后如果没有‘;’...
2018-03-23 00:59:29
3488
原创 dll动态链接库导出函数方法 -- 静态导出(__declspec前缀导出)
简介 在之前已经笔者已经写过利用.def文件进行dll函数动态导出的文章,那么今天就给大家介绍一下,如何利用__declspec函数前缀进行简单的静态函数导出。要点 大家阅读过动态导出的文章后,只需要将原文导出函数的前缀加上extern”C” __declspec(dllexport)前缀,然后删除原项目中的.def文件即可。附上DLL源码与测试源码dll源码...
2018-03-13 22:52:49
931
原创 Windows下文件检索的基本姿势
要点 使用FindFirstFile和FindNextFile两个WindowsAPI,并配合链表或队列存储文件夹序列。C++源码(链表存储)#include &lt;iostream&gt;#include &lt;cstdio&gt;#include &lt;cstdlib&gt;#include &lt;Windows.h&gt;using
2018-03-13 17:50:51
318
原创 论如何对暴力素数算法进行简单优化
简介 这是之前发的一道简单的PAT题目–数素数(PAT1013),由于这道题官方要求的素数范围极小,所以暴力遍历即可解决。素数暴力求法(未优化)#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <cm...
2018-03-06 21:30:42
314
原创 安全之路 —— 零管道反向连接后门解析
简介根据前面两篇Blog介绍的双管道后门和单管道后门,他们的特点是一定需要建立管道以便进行进程间通信。但是能不能不需要管道呢?答案是可以的,这里需要借鉴重叠IO的思想,将程序中的socket函数替换成支持重叠IO的WSASocket函数。核心知识点si.hStdInput = si.hStdOutput = si.hStdError = (HANDLE)sSock;即将Socket...
2018-03-05 17:51:20
1612
原创 安全之路 —— 单管道反向连接后门解析
原理简述 单管道后门相对于双管道后门(参照前面发的Blog),很明显单管道后门使用了“cmd.exe /c [命令]”的用法在进行cmd进程创建时就顺带执行了命令,所以省去了由socket发往cmd的管道。同时笔者为样例程序加上了反向连接的模块,反向连接由宿主机作为client端,操纵者的nc或telnet等作为server端,与前面发的正向连接原理相反,反向连接由宿主机发出连接,可以有效...
2018-03-04 14:20:08
597
原创 洛谷P1308 统计单词数
题目简介 题目描述 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现在,请
2018-02-19 19:40:34
620
原创 安全之路 —— 双管道正向连接型后门解析
简述 后门程序有两个重要的过程,分别是socket与cmd通信的过程和cmd结果回传给socket的过程。而双管道正向连接型后门是后门中最古老的一种,采用两个匿名管道,分别负责上述两个重要过程。其中正向连接的意思是后门充当Server端,然后用户使用telnet或netcat(nc)充当客户端连接工具,主动连接后门,这种连接方式具有被防火墙拦截的危险,所以一般不用于现代后门,但却是后门编程...
2018-02-19 15:01:19
1118
原创 dll动态链接库导出函数方法 -- 动态导出(.def文件导出)
简介 动态链接库最大的优势在于可以提供给其他应用程序共享的资源,最小化应用程序代码的复杂度,其中一个十分重要的功能就是dll可以导出封装函数的功能。导出函数有两种主要方式,分别是静态导入和动态导入,本文主要介绍动态导入功能。方法解析(1)创建DLL动态链接库项目 (2)在DllMain函数的上方或下方创建一个自定义函数(样例使用ShowMessageBox函数)...
2018-02-14 21:23:37
4791
原创 C++多线程同步技巧(一) --- 临界区
简介 C++中关于多线程的内容对于构建工程来说是至关重要的,C++本身也对关于多线程的操作提供了很好的支持。本章笔者就来介绍一下C++有关于多线程的重要知识点—临界区。临界区的作用 线程就像是进程的影子,可以帮助进程几乎在同一个时间内执行更多的任务。但是由于线程不占有资源,所有的线程共享进程的资源,这样就导致多个线程在共享进程资源的时候会出现抢夺资源的情况,这些会被抢夺的资源...
2018-02-14 00:08:48
562
原创 PAT 乙级 -- 1014 -- 福尔摩斯的约会
题目简介 大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间“星期四 14:04”,因为前面两字符串中第1对相同的大写英文字母(大小写有区分)是第4个字母’D’,代表星期四;第2对相同的字符是’E’,那是第5个...
2018-02-13 17:48:26
258
原创 PAT 乙级 -- 1013 -- 数素数
题目简介 令Pi表示第i个素数。现任给两个正整数M <= N <= 104,请输出PM到PN的所有素数。 输入格式: 输入在一行中给出M和N,其间以空格分隔。 输出格式: 输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。 输入样例: 5 27 输出样例: 1...
2018-02-12 22:50:02
252
原创 PAT 乙级 -- 1012 -- 数字分类
题目简介 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和; A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4…; A3 = 被5除后余2的数字的个数; A4 = 被5除后余3的数字的平均数,精确到小数点后1位; A5 = 被5除后余4的数字中最大数字。 ...
2018-02-10 00:19:37
224
原创 RING3级下枚举用户进程的基本姿势
简述 Ring3用户态下查看进程信息的基本方法代码样例#include #include #include #include #include #include //Windows.h头文件必须包含在TlHelp32.h之前using namespace std;int main(void){ LPTSTR buff = new TCHAR[10
2018-02-06 15:59:48
307
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人