c/c++
雨者
纸上得来终觉浅,绝知此事要躬行。
展开
-
安全之路 —— 利用APC队列实现跨进程注入
简介在之前的文章中笔者曾经为大家介绍过使用CreateRemoteThread函数来实现远程线程注入,毫无疑问最经典的注入方式,但也因为如此,这种方式到今天已经几乎被所有安全软件所防御。所以今天笔者要介绍的是一种相对比较“另类”的方式,被称作**“APC注入”。APC(Asynchronous Procedure Call),全称为异步过程调用**,指的是函数在特定线程中被异步执行。简单地说,...原创 2019-03-24 00:41:29 · 818 阅读 · 1 评论 -
C++设计模式 ==> 工厂模式
简介在之前,笔者曾简单介绍过简单工厂模式,我们说过简单工厂模式可以使用工厂类根据需求动态生成子类对象,从而方便了未来对算法进行维护和扩展。而工厂模式相较之于简单工厂模式更为复杂,工厂模式对工厂类进行了详细的子类化,为每一个算法都建立了独立的工厂,这样的优点在于可以在算法扩展的时候避免修改总工厂类,而只要生成相应的子类就可以了,尽可能避免了违背“开闭原则”的情况,但缺点在于这样switch一类的...原创 2018-08-15 00:08:41 · 338 阅读 · 0 评论 -
C++设计模式 ==> 装饰(者)模式
简介装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。装饰模式使用对象嵌套的思想,实现对一个对象动态地进行选择性的属性赋予与去除,例如有一篇固定的文本,我们可以给它装饰上“词汇过滤”与“文本加密”两个属性,但同时也要注意装饰顺序:例如文本如果先进行加密操作就没法进行词汇过滤的操作了。 下面演示一个简单的装饰模式...原创 2018-08-11 00:40:21 · 330 阅读 · 0 评论 -
安全之路 —— 利用端口复用技术隐藏后门端口
简介 前面我们介绍到我们可以用进程注入的方法,借用其他应用的端口收发信息,从而达到穿墙的效果,那么今天介绍一种新的方法,叫做端口复用技术,他能够与其他应用绑定同一个端口,但同时进行端口复用的程序会接管之前程序的信息接受权,所以我们在复用端口后,要对非后门信息通过127.0.0.1本机回环地址进行消息转发。C++代码样例///////////////////////////////...原创 2018-06-01 22:36:32 · 1649 阅读 · 1 评论 -
使用C++对物理网卡/虚拟网卡进行识别(包含内外网筛选)
简介 在Socket编程的时候,我们需要实时获取我们所需要的IP地址。例如在编写后门的时候,我们可能需要获得有效的外网IP或内网IP;有时候我们可能需要判断我们获取的是否是虚拟机网卡,这时候就需要对每一张网卡上的IP进行识别。以下笔者总结了一些常用的处理方法供大家参考。C++代码样例头文件(包含IP处理函数)////////////////////////////...原创 2018-06-22 01:11:48 · 3302 阅读 · 1 评论 -
安全之路 —— 借助DLL进行远程线程注入实现穿墙与隐藏进程
简介        大多数后门或病毒要想初步实现隐藏进程,即不被像任务管理器这样典型的RING3级进程管理器找到过于明显的不明进程,其中比较著名的方法就是通过远程线程注入的方法注入将恶意进程的DLL文件注入系统原创 2018-05-16 17:03:08 · 1242 阅读 · 0 评论 -
安全之路 —— 通过映像劫持实现文件自启动
简介 Windows映像劫持技术是微软提供给软件开发者调试使用的在注册表项,能够替换目标进程执行。但如果被病毒木马利用,便会成为触发式自启动的绝佳方式,所以修改映像劫持的操作行为也被反病毒软件列为极其危险的行为之一。 实现映像劫持修改的注册表项为: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVer...原创 2018-05-06 18:00:16 · 1087 阅读 · 0 评论 -
安全之路 —— C/C++实现利用添加注册表项实现文件自启动
简介 添加注册表项是实现文件自启动的经典方法之一,但因为操作注册表项是一个敏感操作,被报毒可能性较大,但即便如此,这个方法还是值得一学的,因为后期大部分编程都涉及到注册表操作。 最常使用到的注册表项有两项: HKEY_CURRENT_USER\\Software\\Microsoft\\WindowsNT\\CurrentVersion\\Windows 将“l...原创 2018-05-05 00:19:09 · 915 阅读 · 0 评论 -
安全之路 —— C/C++实现后门的服务自启动
简介 Windows NT系统后门要实现自启动,有许多种方法,例如注册表自启动,映像劫持技术,SVCHost自启动以及本章节介绍的服务自启动等方法,其中服务自启动相对于上述其他三种需要修改注册表的启动方式而言更不容易被发现。C++代码样例////////////////////////////////////////////////////////////////// F...原创 2018-05-04 23:49:44 · 2292 阅读 · 0 评论 -
C++设计模式 ==> 代理模式
简介代理模式,顾名思义,就是让一个代理替代真实事物做事情,切结果是是等效的,就相当于现实世界中的中介。在设计模式中,代理模式需要一个代理类来实例化真实事物类的对象,然后可以创建代理对象代替真实对象处理一些事情。代理模式可以起到隔离真实事物类的作用,在网络通信等后面有诸多应用。 下面我们使用一个简单的代码样例来演示一下代理模式的工作过程:假设有一位小A(RealPersuitePeople类)...原创 2018-08-12 03:12:39 · 995 阅读 · 0 评论 -
C++设计模式 ==> 简单工厂模式
简述工厂模式的核心在于使用一个工厂类根据需求动态生成子类对象,以计算器程序作为例子,加减乘除都分别作为运算类的子类,然后让工厂类根据要求动态实例化子类。图示代码实现///////////////////////////////// @ FileName : Operation.h// @ Date : 2018-08-06 18:04/////////////...原创 2018-08-08 21:51:58 · 292 阅读 · 0 评论 -
C++多线程同步技巧(四)--- 信号量
简介信号量是维护0到指定最大值之间的同步对象。信号量状态在其计数大于0时是有信号的,而其计数是0时是无信号的。信号量对象在控制上可以支持有限数量共享资源的访问,可以用于线程同步,预防死锁等领域。信号量的特点和用途可用下列几句话定义:(1)如果当前资源的数量大于0,则信号量有效;(2)如果当前资源数量是0,则信号量无效;(3)系统决不允许当前资源的数量为负值;(4)当前资源数量决不...原创 2019-03-24 00:34:23 · 596 阅读 · 0 评论 -
C++多线程同步技巧(三)--- 互斥体
简介Windows互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问,在线程同步与保证程序单体运行上都有相当大的用处。代码样例//////////////////////////////////// FileName : MutexDemo.cpp// Creator : PeterZheng// Date...原创 2019-03-24 00:32:22 · 400 阅读 · 0 评论 -
C++实现程序单实例运行的两种方式
简介在我们编写程序的时候,经常会注意到的一个问题就是如何能够让程序只运行一个实例,确保不会让同一个程序多次运行,从而产生诸多相同进程,给我们的带来不便呢?那么常用的有以下四种方法,第一种方法是通过扫描进程列表比对进程名来检测,第二种方法是通过枚举程序窗口的方式,第三种方法是采用共享全局变量来实现,第四种方法是通过创建互斥体来实现。那么在这些方法中,第一种和第二种方法是有缺陷的,扫描进程列表比...原创 2019-02-28 19:44:56 · 1407 阅读 · 0 评论 -
使用Windows全局钩子打造键盘记录器
简介键盘记录功能一直是木马等恶意软件窥探用户隐私的标配,那么这个功能是怎么实现的呢?在Ring3级下,微软就为我们内置了一个Hook窗口消息的API,也就是SetWindowsHookEx函数,这个函数能够实现优先拦截提交给特定窗口的信息,并进行拦截者需要的处理,然后再提交给窗口函数或是下一个钩子函数,函数第一个参数为idHook,需要设置钩子的类型,在以下代码样例中我们选择安装的钩子类型为W...原创 2019-02-18 15:18:36 · 2581 阅读 · 1 评论 -
C++多线程同步技巧(二) ---事件
简介Windows在线程同步方面提供了多种信号处理机制,其中一种便是使用 CreateEvent() 函数创建事件,然后使用信号控制同步。其中将事件变为有信号可使用 SetEvent() 函数,将事件信号复位(变为无信号)可使用 ResetEvent() 函数,信号可以配合 WaitForSingleObject() 函数进行控制,当有信号时,此函数便会放行;无信号时,此函数会将阻塞。提...原创 2018-10-01 18:46:51 · 400 阅读 · 0 评论 -
安全之路 —— C++实现进程守护
简介所谓进程守护,就是A进程为了保护自己不被结束,创建了一个守护线程来保护自己,一旦被结束进程,便重新启动。进程守护的方法多被应用于恶意软件,是一个保护自己进程的一个简单方式,在ring3下即可轻松实现。而创建守护线程的方法多采用远程线程注入的方式,笔者之前曾介绍过远程线程注入的基本方式,主要分为DLL远程注入和无DLL远程注入。代码实现////////////////////...原创 2018-09-08 02:06:11 · 3728 阅读 · 2 评论 -
C++设计模式 ==> 原型模式
简介        所谓原型模式就是用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。举一个简单的例子,一个人想要批量分发自己的名片,然而名片千篇一律,只是偶原创 2018-08-17 19:35:30 · 532 阅读 · 0 评论 -
安全之路 —— 无DLL文件实现远程进程注入
简介        在之前的章节中,笔者曾介原创 2018-08-20 01:24:59 · 1422 阅读 · 0 评论 -
C++设计模式 ==> 策略模式与简单工厂模式结合
简介策略模式相较之于简单工厂模式适用于生产方法经常变化且方法较为繁多的情况,因为生产方法时常变化就会需要频繁修改工厂类,违背了开闭原则,这时就可以用策略类由客户端根据需求动态切换策略。且策略模式通过进一步封装了代码细节,没有像简单工厂模式那样在客户端创建详细的对象,而把任务交给了策略类去执行,所以客户端不会知道太多算法实现的细节。当然,在更多的情况下,策略模式一般可以与简单工厂模式并用,将进行...原创 2018-08-09 15:54:01 · 876 阅读 · 0 评论 -
SVCHOST启动服务实战
本文转载自:https://blog.csdn.net/huanglong8/article/details/70666987 转载出处: https://sanwen8.cn/p/2cenbHs.html最近在做小项目,用到了一些此类技术,觉得文章很细,手把手教的,粘在这里备忘下。。。...转载 2018-05-09 18:26:51 · 3253 阅读 · 0 评论 -
安全之路 —— 利用SVCHost.exe系统服务实现后门自启动
简介 在Windows系统中有一个系统服务控制器,叫做SVCHost.exe,它可以用来管理系统的多组服务。它与普通的服务控制不同的是它采用dll导出的ServiceMain主函数实现服务运行,所以我们在使用此方法时,要有两个步骤: 1. 编写dll文件封装ServiceMain导出函数 2. 编写负责服务安装与移除的exe文件 3. 本例中需要将.exe与.dll...原创 2018-05-09 18:02:30 · 2706 阅读 · 0 评论 -
论如何对暴力素数算法进行简单优化
简介 这是之前发的一道简单的PAT题目–数素数(PAT1013),由于这道题官方要求的素数范围极小,所以暴力遍历即可解决。素数暴力求法(未优化)#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <cm...原创 2018-03-06 21:30:42 · 315 阅读 · 0 评论 -
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 · 309 阅读 · 0 评论 -
C++处理char*,char[],string三种类型间的转换
前言 在C和C++中,有一个相当重要的部分,就是字符串的编程描述。在学C的时候,很多人习惯了char[],char*表示法,直到遇见了C++后,出现了第三者:string。这时候,很多初学者就会在这三种字符串表现形式的转换上出现错误,以下是笔者总结的一些最常用的字符串转换方法供大家参考。代码#include #include #include #includ原创 2018-01-30 21:59:25 · 4922 阅读 · 2 评论 -
C++扫雷小游戏(基于CMD命令行)
这个小游戏是笔者在大一C语言课程设计的时候写的,基于命令行,为了显得漂亮一些,特别加上了彩色特效~~~注意:Win10系统须将命令行调为旧版命令行,否则有可能会显示乱码!代码示例:#include <stdio.h> #include <conio.h> #include <stdlib.h> #include <ti...原创 2017-11-10 20:08:30 · 20280 阅读 · 5 评论 -
如何利用C++的time头文件获取系统时间
C++提供了time.h头文件进行时间编辑操作,可以把时间格式化进tm结构体,方便使用。MFC框架中的ctime类就是基于time.h封装的。代码样例:#include #include #include using namespace std;int main(void){ time_t t = time(NULL); //获取当前时间句柄 tm *原创 2017-10-30 18:09:36 · 5190 阅读 · 2 评论 -
基于C++简单Windows API的socket编程(阻塞模式)
1. 概述:简单的基于Windows API的socket点对点聊天程序,为了方便初学者,本文代码均采用阻塞原理编写。2. 代码样例Server.cpp(服务端)#include #include #include #define WIN32_LEAN_AND_MEAN#include #include using namespace std;原创 2017-09-29 19:00:03 · 778 阅读 · 0 评论 -
Windows API初练手 -- 疯狂写文件代码
警告:恶作剧软件,慎用!仅供初学者研究代码所用!!!提示:默认文件创建目录在"D:\test",如果需要使用的话请自行更改目录。1. Windows API 版本 (调用系统函数,速度较快)#include #include #include #include #include using namespace std;#define CREATE原创 2017-09-27 22:24:28 · 632 阅读 · 0 评论 -
对c语言回调函数的理解
对于回调函数,可以简单的理解为一种特别的函数调用方法,我们可以对比一下回调函数与普通函数在调用方法上的区别。1. 普通函数调用一般为实现方在其函数体执行过程中直接调用。代码示例:#include #include #include #include using namespace std;void func(){ printf("原创 2017-07-23 21:41:10 · 801 阅读 · 0 评论 -
C++多线程同步技巧(一) --- 临界区
简介 C++中关于多线程的内容对于构建工程来说是至关重要的,C++本身也对关于多线程的操作提供了很好的支持。本章笔者就来介绍一下C++有关于多线程的重要知识点—临界区。临界区的作用 线程就像是进程的影子,可以帮助进程几乎在同一个时间内执行更多的任务。但是由于线程不占有资源,所有的线程共享进程的资源,这样就导致多个线程在共享进程资源的时候会出现抢夺资源的情况,这些会被抢夺的资源...原创 2018-02-14 00:08:48 · 564 阅读 · 0 评论 -
dll动态链接库导出函数方法 -- 动态导出(.def文件导出)
简介 动态链接库最大的优势在于可以提供给其他应用程序共享的资源,最小化应用程序代码的复杂度,其中一个十分重要的功能就是dll可以导出封装函数的功能。导出函数有两种主要方式,分别是静态导入和动态导入,本文主要介绍动态导入功能。方法解析(1)创建DLL动态链接库项目 (2)在DllMain函数的上方或下方创建一个自定义函数(样例使用ShowMessageBox函数)...原创 2018-02-14 21:23:37 · 4794 阅读 · 0 评论 -
通过C/C++基于http下载文件
简介 Windows系统如何通过C/C++下载互联网上的文件呢?这里笔者给大家演示一个最简单的方法,利用Windows提供的urlmon库,可以快速实现文件下载的简单实例。 注:本文参考《非安全》编辑部出版的《Hack编程实例精讲》系列书籍,在此致谢。C++代码样例#include <cstdio>#include <iostream>#i...原创 2018-04-20 01:09:47 · 7436 阅读 · 1 评论 -
C/C++控制Windows关机/注销/重启的正确姿势
简介 说到代码控制Windows关机/注销/重启的方式,有很多种,最简单的不过就是控制命令行,使用system(“pause”)函数执行一个shutdown -s -t 0,关机就完成了。但这种方式还要借助于命令行的方式解决问题。而Windows早就提供给我们直接控制关机/注销/重启的API了,在WindwosNT系统之前,只需调用ExitWindowsEx()就OK了。但自从出现了Win...原创 2018-04-13 18:50:41 · 6167 阅读 · 0 评论 -
安全之路 —— C/C++开3389端口(远程终端)
简介 在渗透测试中开启对方电脑的3389端口是入侵者加入对方计算机账户后要想直接控制对方计算机的必须步骤,即开启对方计算机的远程终端功能,不同的Windows系统要开启3389需要修改不同的注册表项,为了方便,我们直接添加所有可能的注册表项,其中Windwos2000电脑需要重启激活,本程序并未添加此功能,需要的可参考笔者之前的博文:C/C++控制Windows关机/注销/重启的正确姿势。...原创 2018-04-15 21:59:57 · 1010 阅读 · 0 评论 -
dll动态链接库导出函数方法 -- 静态导出(__declspec前缀导出)
简介 在之前已经笔者已经写过利用.def文件进行dll函数动态导出的文章,那么今天就给大家介绍一下,如何利用__declspec函数前缀进行简单的静态函数导出。要点 大家阅读过动态导出的文章后,只需要将原文导出函数的前缀加上extern”C” __declspec(dllexport)前缀,然后删除原项目中的.def文件即可。附上DLL源码与测试源码dll源码...原创 2018-03-13 22:52:49 · 939 阅读 · 0 评论 -
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 · 320 阅读 · 0 评论 -
安全之路 —— 零管道反向连接后门解析
简介根据前面两篇Blog介绍的双管道后门和单管道后门,他们的特点是一定需要建立管道以便进行进程间通信。但是能不能不需要管道呢?答案是可以的,这里需要借鉴重叠IO的思想,将程序中的socket函数替换成支持重叠IO的WSASocket函数。核心知识点si.hStdInput = si.hStdOutput = si.hStdError = (HANDLE)sSock;即将Socket...原创 2018-03-05 17:51:20 · 1620 阅读 · 0 评论 -
安全之路 —— 单管道反向连接后门解析
原理简述 单管道后门相对于双管道后门(参照前面发的Blog),很明显单管道后门使用了“cmd.exe /c [命令]”的用法在进行cmd进程创建时就顺带执行了命令,所以省去了由socket发往cmd的管道。同时笔者为样例程序加上了反向连接的模块,反向连接由宿主机作为client端,操纵者的nc或telnet等作为server端,与前面发的正向连接原理相反,反向连接由宿主机发出连接,可以有效...原创 2018-03-04 14:20:08 · 600 阅读 · 0 评论 -
安全之路 —— 双管道正向连接型后门解析
简述 后门程序有两个重要的过程,分别是socket与cmd通信的过程和cmd结果回传给socket的过程。而双管道正向连接型后门是后门中最古老的一种,采用两个匿名管道,分别负责上述两个重要过程。其中正向连接的意思是后门充当Server端,然后用户使用telnet或netcat(nc)充当客户端连接工具,主动连接后门,这种连接方式具有被防火墙拦截的危险,所以一般不用于现代后门,但却是后门编程...原创 2018-02-19 15:01:19 · 1121 阅读 · 0 评论