- 博客(69)
- 资源 (2)
- 收藏
- 关注
原创 Windows Socket 编程_单个服务器对多个客户端简单通讯
单个服务器对多个客户端程序:一。简要说明二。查看效果三。编写思路四。程序源代码五。存在问题 一。简要说明: 程序名为:TcpSocketOneServerToMulClient 程序功能:实现单个服务器对多个客户端通讯功能的小程序。 PS: 这是继上次简单的 Tcp Windows Socket 编程后的再一程序,程序实现依然不是很严谨,还待完善~ 二。
2017-10-11 09:15:22 478
原创 IOCP模型与网络编
一。前言: 在老师分配任务(“尝试利用IOCP模型写出服务端和客户端的代码”)给我时,脑子一片空白,并不知道什么是IOCP模型,会不会是像软件设计模式里面的工厂模式,装饰模式之类的那些呢?嘿嘿,不过好像是一个挺好玩的东西,挺好奇是什么东西来的,又是一个新知识啦~于是,开始去寻找一大堆的资料,为这个了解做准备,只是呢,有时还是想去找一本书去系统地学习一下,毕竟网络的资料还是有点零散。话
2017-10-11 09:15:19 322
原创 非阻塞模式(ioctlsocket)
1 //Server.cpp 2 #include 3 #include //winsock.h (2种套接字版本) 4 #pragma comment(lib,"ws2_32.lib") //wsock32.lib 5 6 #define MAXSIZE 100 //
2017-10-11 09:15:15 1358
原创 GDT与LDT
保护模式下的段寄存器 由 16位的选择器 与 64位的段描述符寄存器 构成段描述符寄存器: 存储段描述符选择器:存储段描述符的索引PS:原先实模式下的各个段寄存器作为保护模式下的段选择器,80486中有6个(即CS,SS,DS,ES,FS,GS)80位的段寄存器,同时提供6个段左右机器当前运行的地址空间。由选择器CS对应表示的段仍为代码段,选择器SS对应表示的段仍为堆栈段 (1)全
2017-10-11 09:15:10 303
原创 常见程序入口点(OEP)特征
delphi: 55 PUSH EBP 8BEC MOV EBP,ESP 83C4 F0 ADD ESP,-10 B8 A86F4B00 MOV EAX,PE.004B6FA8vc++ 55 PUSH EBP 8BEC MOV EBP,ESP 83EC 44 SU
2017-10-11 09:15:05 2060
原创 手动脱壳—dump与重建输入表(转)
文章中用到的demo下载地址:http://download.csdn.net/detail/ccnyou/4540254附件中包含demo以及文章word原稿用到工具:OllydbgLordPEImportREC这些工具请自行下载准备 Dump原理这里也不多做描述,想要了解google it!常见的dump软件有LordPE,ProcDump,PETools等
2017-10-11 09:15:02 490
原创 纯手工编写的PE可执行程序
【文章标题】: 纯手工编写的PE可执行程序【文章作者】: Kinney【下载地址】: 自己搜索下载【使用工具】: C32【操作平台】: win 7【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教! 最近,学习PE结构的知识。之后深有感触,随即便萌发了不依赖任何开发环境和编译器,纯手工写一个小程序的念头。所以我打算就写一个弹出MessageBox的小程序吧(弹出“Hello Kin
2017-10-11 09:15:00 657
原创 菜鸟脱壳之脱壳的基础知识(六)——手动查找IAT和修复Dump的程序
前面讲了如何寻找OEP和脱壳,有的时候,Dump出来的时候不能正常运行,是因为还有一个输入表没有进行处理,一些加密壳会在IAT加密上面大做文章,用HOOK - API的外壳地址来代替真是的IAT的地址,让脱壳者无法正确的还原程序的原始IAT,使得程序不能被破解,所以我们处理这些被加密IAT的地址的办法是找到加密这些IAT的地址的跳转(就是Magic Jump),将它修改为强制跳转(JMP),使之无
2017-10-11 09:14:57 1814
原创 菜鸟脱壳之脱壳的基础知识(五)——利用内存断点寻找OEP
经过第一节的基础知识,我们都知道了,加壳程序首先解把原来压缩的代码解压,然后放到所对应的区块中,当外壳程序执行完毕后,跳回到OEP执行,我们都知道,OEP是放在代码段中,也就是当外壳程序处理完毕后,跳回到代码段来执行,那我们是不是可以利用壳的这个特点来进行脱壳呢?答案是肯定的,是可以的!有的时候紧紧在代码段下断是不够的,那怎么办呢?其实很简单,用两次内存断点就可以了,一般的壳会一堆对.text、.
2017-10-11 09:14:54 468
原创 菜鸟脱壳之脱壳的基础知识(四)——利用ESP定律来寻找OEP
.上节说的是单步跟踪法,这节讲的是利用堆栈平衡(ESP定律)来进行脱壳!想必大家都听说过ESP定律这个大名吧!ESP定律运用的就是堆栈平衡原理!一般的加壳软件在执行时,首先要初始化,保存环境(保存各个寄存器的值),一般利用PUSHAD(相当于把eax,ecx,edx,ebx,esp,ebp,esi,edi都压栈),当加壳程序的外壳执行完毕以后,再来恢复各个寄存器的内容,通常会用POPAD(相当与把
2017-10-11 09:14:52 456
原创 菜鸟脱壳之脱壳的基础知识(三)——寻找OEP
这节我们来讲讲如何寻找一个程序的OEP,即Original Entry Point。一些PE加壳程序在被加密的程序上面加了一个区段(有的壳也会合并区段),当外壳代码执行完毕以后,会跳到程序的本身的代码来执行,所以我们可以依靠跨区段的转移指令来寻找程序的入口点。我们来看看加壳之前的Delphi7.0的程序,用LordPE来打开Delphi7.0程序,我们看到程序的入口点是004C498:看区段,没有
2017-10-11 09:14:49 518
原创 菜鸟脱壳之脱壳的基础知识(二) ——DUMP的原理
菜鸟脱壳之脱壳的基础知识(二)——DUMP的原理当外壳的执行完毕后,会跳到原来的程序的入口点,即Entry Point,也可以称作OEP!当一般加密强度不是很大的壳,会在壳的末尾有一个大的跨段,跳向OEP,类似一个壳与程序入口点的“分界线!当我们到达了程序的OEP,我们就需要进行DUMP程序了,那么什么时候去DUMP一个程序呢?这里我引用了fly的一句话!“手动脱壳理想的最佳dump时机是指壳已经
2017-10-11 09:14:46 1480
原创 菜鸟脱壳之脱壳的基础知识(一)
脱壳技术一、基础知识壳的定义:在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,大家就把这样的程序称为“壳”了,无非是保护、隐蔽壳内的东西。而从技术的角度出发,壳是一段执行于原始程序前的代码。原始程序的代码在加壳的过程中可能被压缩、加密……。当加壳
2017-10-11 09:14:44 581
原创 UPX脱壳全程分析(转)
【文章标题】: UPX脱壳全程分析【保护方式】: 本地验证【使用工具】: OllyDBG【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!-------------------------------------------------------------------------------- 004629D0 > 60
2017-10-11 09:14:41 2283
原创 对话框和控件编程(转)
本文讲述 MiniGUI 中的对话框和控件编程。首先讲解 MiniGUI 中的控件类和控件实例的关系,并举例说明控件子类化的概念及应用;其次讲解 MiniGUI 对话框的编程技术,包括对话框模板的定义和对话框回调函数的编程;最后解释模态对话框和非模态对话框之间的区别。引言对话框编程是一个快速构建用户界面的技术。通常,我们编写简单的图形用户界面时,可以通过调用 CreateWindow
2017-10-11 09:14:36 862
原创 VC基础学习:初学者指针指南( 转)
何为指针? 指针基本上和其它的变量一样,唯一的一点不同就是指针并不包含实际的数据,而是包含了一个指向内存位置的地址,你可以在这个地址找到某些信息。这是一个很重要的概念,并且许多程序或者思想都是将指针作为它们的设计基础,例如链表。 开始 如何定义一个指针?呃,就像定义其它的变量一样,不过你还需要在变量名之前添加一个星号。例如,下面的代码创建了两个指向整数的指针: int* pNumberOn
2017-10-11 09:14:33 245
原创 VC常用知识重温(转)
这次我们将会带大家再次回顾一下VC的常用知识,包括得到系统时间日期(使用GetLocalTime)、分离字串等。 1: 得到系统时间日期(使用GetLocalTime) CString sTime,sYear,sMonth,sDay; SYSTEMTIME CurTime; GetLocalTime(&CurTime); sYear.Format("%d年"
2017-10-11 09:14:28 182
原创 VC实用小知识总结 (一) (转)
(1) 如何通过代码获得应用程序主窗口的 指针? 主窗口的 指针保存在CWinThread::m_pMainWnd中,调用AfxGetMainWnd实现。 AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED) //使程序最大化. (2) 确定应用程序的路径 Use GetModu
2017-10-11 09:14:26 210
原创 VC调试入门(转)
VC调试入门概述调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。这里我简要的根据自己的经验列出调试中比较常用的技巧,希望对大家有用。本文约定,在选择菜单时,通过/表示分级菜单,例如File/Open表示顶级菜单File的子菜单Open。设置为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWi
2017-10-11 09:14:23 221
原创 VC基础学习:初学者指针指南(转)
何为指针? 指针基本上和其它的变量一样,唯一的一点不同就是指针并不包含实际的数据,而是包含了一个指向内存位置的地址,你可以在这个地址找到某些信息。这是一个很重要的概念,并且许多程序或者思想都是将指针作为它们的设计基础,例如链表。 开始 如何定义一个指针?呃,就像定义其它的变量一样,不过你还需要在变量名之前添加一个星号。例如,下面的代码创建了两个指向整数的指针: int* pNumberOn
2017-10-11 09:14:20 187
原创 理解消息循环和窗口过程(转)
1.2 消息和消息循环在Windows系列操作系统中,广泛使用了消息驱动的概念。在MiniGUI中,我们也使用了消息驱动作为应用程序的创建构架。在消息驱动的应用程序中,计算机外设发生的事件,例如键盘键的敲击、鼠标键的按击等,都由支持系统收集,将其以事先的约定格式翻译为特定的消息。应用程序一般包含有自己的消息队列,系统将消息发送到应用程序的消息队列中。应用程序可以建立一个循环,在这个循环中
2017-10-11 09:14:18 1032
原创 windows消息宏(转)
WM_COMMAND 消息控制函数映射入口 函数原型ON_COMMAND(, ) afx_msg void FUN();ON_COMMAND_EX(, ) afx_msg bool FUN(UINT);子窗口通知消息控制函数映射入口 函数原型一般的控制通知代码ON_CONTROL(,, ) afx_msg void FUN();ON_NOTIFY(,, ) afx_msg void FUN();用
2017-10-11 09:14:15 268
原创 消息映射的实现(转)
消息映射的实现 Windows消息概述Windows应用程序的输入由Windows系统以消息的形式发送给应用程序的窗口。这些窗口通过窗口过程来接收和处理消息,然后把控制返还给Windows。 消息的分类 队列消息和非队列消息从消息的发送途径上看,消息分两种:队列消息和非队列消息。队列消息送到系统消息队列,然后到线程消息队列;非队列消息直接送给
2017-10-11 09:14:12 305
原创 Windows程序的基本结构(转)
一、概述 Windows程序具有相对固定的结构,对编写者而言,不需要书写整个过程,大部分过程由系统完成。 程序中只要按一定的格式填写系统留给客户的那一小部分。 所需要完成的有: 窗口类的定义、窗口的建立、消息函数的书写、消息循环。二、消息处理函数 Windows程序是事件驱动的,对于一个窗口,它的大部分例行维护是由系统维护的。没个窗口都有一个消息处理函数。 在消息处理函数中,对传入的
2017-10-11 09:14:09 1275
原创 初级 WINDOWS API C++语言版 编程(转)
当我们使用着漂亮的界面,方便快捷的应用程序的时候。我们才会发现,以前曾编写的程序是多么的粗糙(TC编写的程序)。简单的界面,16色的显示系统,大大的落后于计算机的发展。简单的说就是杀鸡用牛刀。如何该改变这种情况呢?Microsoft公司在推出windows操作系统的时候给出了简单易行的解决方案。这就是WINDOWS平台API应用程序接口。当然API也是发展的,它从WIN 16 API发展到了现在普
2017-10-11 09:14:07 1504
原创 C程序优化 - I/O篇(转)
C程序优化 - I/O篇liyuming1978(原作) 如果有文件读写的话,那么对文件的访问将是影响程序运行速度的一大因素。提高文件访问速度的主要办法有两个:一是采用内存映射文件,二是使用内存缓冲。下面是一组测试数据(见《UNIX环境高级编程》3.9节),显示了用18种不同的缓存长度,读1,468 ,802字节文件所得到的结果。缓冲大小用
2017-10-11 09:14:04 258
原创 VC最常用操作程序20项列举(转)
一、打开CD-ROM mciSendString("Set cdAudio door open wait",NULL,0,NULL); 二、关闭CD_ROM mciSendString("Set cdAudio door closed wait",NULL,0,NULL); 三、关闭计算机 OSVERSIONINFO OsVersionInfo; //包含操作系统版本
2017-10-11 09:14:01 186
原创 Windows API-GDI入门基础知识详解(转)
GDI是Graphics Device Interface的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。 在Windows操作系统下,绝大多数具备图形界面的应用程序都离不开GDI,我们利用GDI所提供的众多函数就可以方便的在屏幕、打印机及其它输出设备上输出图形,文本等操作。GDI的出现使程序员无需要关心硬件设备及设备驱动,就
2017-10-11 09:13:58 375
原创 VC Afx全局函数、数据类型、字符串转化函数(转)
Afx全局函数及MFC常见数据类型AfxBeginThread:开始一个新的线程AfxEndThread:结束一个旧的线程AfxFormatString1:类似printf一般地将字符串格式化AfxFormatString2:类似printf一般地将字符串格式化AfxMessageBox:类似Windows API 函数 MessageBoxAfxOuputDebugString:将字符串输往除错
2017-10-11 09:13:56 212
原创 API编程的详细介绍(转)
什么是API 首先,有必要向大家讲一讲,什么是API。所谓API本来是为C和C++程序员写的。API说来说去,就是一种函数,他们包含在一个附加名为DLL的动态连接库文件中。用标准的定义来讲,API就是Windows的32位应用程序编程接口,是一系列很复杂的函数,消息和结构,它使编程人员可以用不同类型的编程语言编制出的运行在Windows95和Windows NT操作系统上的应用程序。可以说,如果你
2017-10-11 09:13:53 5008
原创 MFC应用程序框架入门(转)
1 MFC概述顾名思意,MFC应用程序框架是以MFC作为框架基础的,以此程序框架模式搭建起来的应用程序在程序结构组织上是完全不同于以前的Win32 SDK编程方式的。自20世纪90年代初问世以来,MFC一直试图把Windows API函数封装到类库中个各个逻辑类中。MFC的这种封装并非简单地对API函数进行分组与打包,而是更多地通过类来试图实现全部的系统策略。随着越来越多系统功能的加入,MFC的规
2017-10-11 09:13:50 4642
原创 MFC编程(转)
微软基础类库(MFC:Microsoft Foundation Class)是微软为Windows程序员提供的一个面向对象的Windows编程接口,它大大简化了Windows编程工作。使用MFC类库的好处是:首先,MFC提供了一个标准化的结构,这样开发人员不必从头设计创建和管理一个标准Windows应用程序所需的程序,而是“站在巨人肩膀上”,从一个比较高的起点编程,故节省了大量的时间;其次,它提供
2017-10-11 09:13:47 815
原创 VC++中2进制,10进制,16进制相互转换
下面是一个图例表示转换过程使用的函数 BinToDec CString::Format 2 --------------------------> 10 ---------------------------> 16 2 DecToBin strtoul 1. 2 进制 -----> 10 进制 CString BinToDec(CString strBin) {
2017-10-11 09:13:42 453
原创 API之子窗口创建 (转)
子窗口的创建非常非常重要步骤:1、新建窗口类,在窗口类中指名对应的自定义的窗口过程。窗口类类名要唯一,它 是各窗口类相互区别的标识。注意,类名或为静态变量,或为全局变量,因为程 序随时都用他们。 2、创建窗体时,指定其风格之一为WS_CHILD, 指定其父窗口句柄,得到父窗体实 例句柄,并赋给子窗体。
2017-10-11 09:13:37 758
原创 API之绘图(转)
组成GDI的几百个函数呼叫可以分为几大类:1、取得(或者建立)和释放(或者清除)设备内容的函数取得有关设备内容信息的函数绘图函数设定和取得设备内容参数的函数使用GDI对象的函数GDI基本图形 您在屏幕或打印机上显示的图形型态本身可以被分为几类,通常被称为「基本图形」,它们是:1、直线和曲线2、填充区域当一系列直线或者曲线封闭了一个区域时,该区域可以使用目前
2017-10-11 09:13:34 1872
原创 函数调用规范__cdecl和__stdcall的区别一目了然(表格形式)(二)
__cdecl __stdcall C 和 C++ 程序的缺省调用规范 为了使用这种调用规范,需要你明确的加上 __stdcall(或 WINAPI )文字。即 return-type __stdcallfunction-name [(argument-list )] 在被 调用函数 (Callee) 返回
2017-10-11 09:13:30 254
原创 _cdecl 和_stdcall及其他调用方式 (一)
_cdecl 是C Declaration的缩写,表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。被调用函数无需要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。_stdcall 是Standard Call的缩写,是C++的标准调用方式:所有参数从右到左依次入栈,如果是调用类成员的话,最后一个入栈的是th
2017-10-11 09:13:27 190
原创 各种字符集和编码详解
在软件的编码和实现中,我们可能会碰到个 一个比较头疼的问题--编码,不同字符间的编码和解码,你确定了解各种字符的编码吗?一个朋友问到了我这个问题,我虽然能回答一两个出来,但是感觉已经有点模糊,混乱了,在网上搜了搜,在书上翻了翻,总结一下吧。首先按照字符编码的历程来看:1. ASCII 我们需要了解的最早编码是ASCII码。它用7个二进制位来表示,由于那个时期生产的大多数计算机使用8位大小
2017-10-11 09:13:24 258
原创 strcpy、memcpy的区别
strcpy和memcpy的区别strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制。即memcpy对于需要复
2017-10-11 09:13:22 133
原创 memset的使用
memest原型 (please type "man memset" in your shell)void *memset(void *s, int c, size_t n);memset:作用是在一段内存块中填充某个给定的值,它对较大的结构体或数组进行清零操作的一种最快方法。常见的三种错误第一: 搞反了c 和 n的位置.一定要记住 如果要把一个char a[20]清零,
2017-10-11 09:13:19 144
简单截图工具
2008-04-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人