- 博客(338)
- 资源 (13)
- 收藏
- 关注
原创 PHP漏洞全解(六)-跨网站请求伪造
CSRF(Cross Site Request Forgeries),意为跨网站请求伪造,也有写为XSRF。攻击者伪造目标用户的HTTP请求,然后此请求发送到有CSRF漏洞的网站,网站执行此请求后,引发跨站请求伪造攻击。攻击者利用隐蔽的HTTP连接,让目标用户在不注意的情况下单击这个链接,由于是用户自己点击的,而他又是合法用户拥有合法权限,所以目标用户能够在网站内执行特定的HTTP链接,从而达到攻
2012-04-16 09:40:03 1045
原创 PHP漏洞全解(四)-xss跨站脚本攻击
XSS(Cross Site Scripting),意为跨网站脚本攻击,为了和样式表css(Cascading Style Sheet)区别,缩写为XSS跨站脚本主要被攻击者利用来读取网站用户的cookies或者其他个人数据,一旦攻击者得到这些数据,那么他就可以伪装成此用户来登录网站,获得此用户的权限。跨站脚本攻击的一般步骤:1、攻击者以某种方式发送xss的http链接给目标用户2
2012-04-16 09:39:03 482
原创 PHP漏洞全解(二)-命令注入攻击
命令注入攻击PHP中可以使用下列5个函数来执行外部的应用程序或函数system、exec、passthru、shell_exec、“(与shell_exec功能相同)函数原型string system(string command, int &return_var) command 要执行的命令 return_var 存放执行命令的执行后的状态值string
2012-04-16 09:37:48 588
原创 用C语言编写复杂的中断干扰处理器
当从外部的硬件或者处理器向CPU发出异常信号的时候,中断就会发生了。CPU通过传递执行流来响应中断服务程序,其中CPU响应的过程是这样的:首先对事件进行处理,处理之后再返回中断代码。ISR本质上是一个不设任何参数和不返回任何值得函数。但是,和一般的规则函数不一样,你几乎可以在任何情况下调用ISR函数,因此在调用的时候要特别小心,特别是登陆和退出ISR函数时,要严格按照特定的执行规则和执行顺序来
2012-04-13 17:41:02 940
原创 一个简单的NT驱动之创建设备对象函数(CreateDevice)
/***************************************************************** 函数名称:CreateDrivce* 功能描述:初始化设备对象* 参数列表: pDriverObject:从I/O管理器中传进来的驱动对象* 返回值:返回初始化状态*************************************
2012-04-13 17:16:43 1764
原创 RemoveHeadList 宏定义
如果查看DDK头文件,会发现有几个内核函数是以宏的方式实现的。这种宏中有几个宏的定义是相当糟糕的。例如,我们看到RemoveHeadList的定义如下:#define RemoveHeadList(ListHead) (ListHead)->Flink; {RemoveEntryList((ListHead)->Flink)}如果以以下方式调用Rem
2012-04-13 15:20:47 1813
原创 #ifdef __cplusplus 倒底是什么意思?
时常在cpp的代码之中看到这样的代码: #ifdef __cplusplus extern "C" { #endif //一段代码 #ifdef __cplusplus } #endif 这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代
2012-04-13 14:01:33 476
原创 Sleep、SleepEx
Sleep和 SleepEx函数的功能是在指定的执行时间内中止所在线程的执行。SleepEx扩展了Sleep的功能,在最短超时时间间隔已到的情况下恢复线程执行外,在以下两种情况下发生时也可以恢复执行:I/O完成回调函数被调用、异步过程调用(APC)被安排进入线程中。函数原型:VOID WINAPI Sleep( DWORD dwMillseconds);DWORD WIN
2012-04-13 13:27:52 7498
转载 wcslen与lstrlen如何区别
size_t strlen( const char *string ); size_t wcslen( const wchar_t *string ); int lstrlen( LPCTSTR lpString // string to count ); strlen()返回ANSI字符串长度; wcslen()返回宽字符串长度; lstrlen()依据字符
2012-04-13 11:06:42 1807
原创 #pragma 预处理指令详解
在所有的预处理指令中,#pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。 其格式一般为: #pragma para 其中par
2012-04-12 17:52:44 441
原创 toa ltoa ultoa三个函数的区别
itoa ltoa ultoa 这3个函数在头文件 中其原形:char *itoa(int value,char *string,int radix)cahr *ltoa(long value,char *string,int radix) char *ultoa(unsigned long value,char *string,int radix)va
2012-04-12 17:21:05 7304
转载 MFC中GetDlgItemText与GetDlgItemInt函数 -
GetDlgItemText 函数 用于获取对话框中指定控件的标题或文本。 UINT GetDlgItemText(HWND hDlg, int nIDDlgItem, LPTSTR lpString, int nMaxCount);hDlg 窗口的句柄。 nIDDlgItem 指定控件的标识符(ID)。 lpString 指向用于接收获取结果的缓冲区的指针。
2012-04-12 17:17:37 20597
原创 GetCurrentProcessID、OpenProcessToken、LookupPrivilegeValue、Adj...
GetCurrentProcessID 得到当前进程的ID OpenProcessToken 得到进程的令牌句柄LookupPrivilegeValue 查询进程的权限AdjustTokenPrivileges 判断令牌权限 要对一个任意进程(包括系统安全进程和服务进程)进
2012-04-12 16:37:09 887
转载 select_sort(选择法排序)==C++源代码
//----数学中有乘法口诀。。那只是工具。我们都很熟悉。//----C++中有一些基本的程序。也只是工具。我们必须像熟悉乘法口诀一样去熟悉这些程序。//----很基础的一些东西,必须熟练。。。 #include using namespace std;int main(){ void select_sort(int array[],int n);
2012-04-12 16:05:54 1154
转载 bubblesort(冒泡法排序)==C++源代码
//----数学中有乘法口诀。。那只是工具。我们都很熟悉。//----C++中有一些基本的程序。也只是工具。我们必须像熟悉乘法口诀一样去熟悉这些程序。//----很基础的一些东西,必须熟练。。。 //-======这些程序写的很粗糙。。。如果想用,请将其做进一步完善与修改。。。。#include using namespace std;int main(){
2012-04-12 16:05:14 728
原创 EnumProcesses函数
当你开发的软件在用户那里运行出错了,想怎么办呢?当然是希望把出错时候的运行环境信息生成报表,然后再Email回来查看了。这里就介绍一个函数可以把当时运行环境的进程全部找到,然后可以输出每个进程的信息。当然,这个函数也可以使用到杀病毒软件里,用来查看可疑的进程信息。函数EnumProcesses声明如下:BOOLWINAPIEnumProcesses ( DWORD
2012-04-12 16:00:11 4813
原创 atoi,atol,strtod,strtol,strtoul实现类型转换
atof(将字符串转换成浮点型数)相关函数 atoi,atol,strtod,strtol,strtoul表头文件 #include 定义函数 double atof(const char *nptr);函数说明 atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时
2012-04-12 15:19:25 503
原创 NTSYSAPI NTSTATUS NTAPI
NTSYSAPINTSTATUS PsLookupProcessByProcessId(IN ULONG ulProcId, OUT PEPROCESS * pEProcess);Winnt.h里有 #define NTSYSAPI DECLSPEC_IMPORT 。对于这么一个NativeAPI,我们使用前必须声明。使用NTSYSAPI表明P
2012-04-12 13:26:24 1950
原创 内核函数系列
如果我们了解系统调用表有关知识,也已知道如何拦截系统调用表中的函数,那么下面,我们再来了解一下我们要钩取的函数:目标函数。这方面,如果我们不仅了解系统调用表中有哪些函数,还知道这些函数的工作机制就最好了。但实际上,ntdll.dll 中的导出函数有好几百个,别说一个一个的探究,就是把它们都列出来,看着看着头都大了。幸运的是,我们不必了解每个函数,只要了解其所在的系列就行了。为什么这么说?因为微软已
2012-04-12 11:46:55 1222
原创 cli/sti 用法
cli 禁止中断发生sti 允许中断发生在对 ss 和sp操作的时候, 如果有中断发生,中断的保存现场的操作是将相关寄存器值保存到ss:sp指向的地址.如果ss 或者sp没有完成赋值操作, 这时候ss:sp指向的地址则是不期望的地方. 如果将系统或者其他应用的数据覆盖,会导致系统/应用崩溃. 下面是两条规则: 1)在改变ss:sp之前,必须用cli指令屏蔽中断
2012-04-12 10:34:04 1045
原创 x86的控制寄存器CR0,CR1,CR2,CR3
状态和控制寄存器组除了EFLAGS、EIP ,还有四个32位的控制寄存器,它们是CR0,CR1,CR2和CR3。这几个寄存器中保存全局性和任务无关的机器状态。CR0中包含了6个预定义标志,0位是保护允许位PE(Protedted Enable),用于启动保护模式,如果PE位置1,则保护模式启动,如果PE=0,则在实模式下运行。1位是监控协处理位MP(Moniter coproc
2012-04-12 10:29:34 1220
转载 C语言中extern关键字详解
内容清单:1. 用extern声明外部变量(1)在一个文件内声明的外部变量(2)在多个文件中声明外部变量(3)在多个文件中声明外部结构体变量2. 用extern声明外部函数3. 总结 1. 用extern声明外部变量定义:外部变量是指在函数或者文件外部定义的全局变量。外部变量定义必须在所有的函数之外,且只能定义一次。(1) 在一个文件内声明的外
2012-04-11 17:34:29 753
原创 汇编指令sysenter 和sysexit这两条新汇编的解释
简单说来就是User模式向System模式的一种调用。做过Native API编程的话应该就知道,即使是看起来像内核的NTDLL.dll也只不过是Ring3级的,最终的系统调用是由ntoskrnl.exe程序向内核发送IO请求,然后内核与驱动程序返回执行结果。这个调用的中间步骤就是用SYSENTER和SYSEXIT来实现,以达到保护模式的作用。以下是转自CSDN的一篇详细一点的文章。SY
2012-04-11 16:37:06 8533
转载 城里城外看SSDT
引子2006年,中国互联网上的斗争硝烟弥漫。这时的战场上,先前颇为流行的窗口挂钩、API挂钩、进程注入等技术已然成为昨日黄花,大有逐渐淡出之势;取而代之的,则是更狠毒、更为赤裸裸的词汇:驱动、隐藏进程、Rootkit……前不久,我不经意翻出自己2005年9月写下的一篇文章《DLL的远程注入技术》,在下面看到了一位名叫L4bm0s的网友说这种技术已经过时了。虽然我也曾想过拟出若干辩解之词
2012-04-11 16:04:34 1166
原创 C语言位运算详解
位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。C语言提供的位运算符列表:运算符 含义 描述& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1
2012-04-11 15:18:11 1484
原创 C语言中地址操作符&的使用
示例一01#include 02int find(int*a);03 04main()05{06 intb = 1;0
2012-04-11 15:12:25 5979
原创 Windows 自旋锁分析(四)
5,KeAcquireInStackQueuedSpinLock的实现机制 在单核处理器(WindowsXP)下观察KeAcquireInStackQueuedSpinLock的实现hal!KeAcquireInStackQueuedSpinLock: mov eax,dword ptr ds:[FFFE0080h] shr eax,4 mo
2012-04-10 15:27:27 1444
原创 Win32 汇编 [23] - 位测试指令: BT、BTC、BTR、BTS
BT、BTS、BTR、BTC;BT(Bit Test): 位测试 ;BTS(Bit Test and Set): 位测试并置位 ;BTR(Bit Test and Reset): 位测试并复位 ;BTC(Bit Test and Complement): 位测试并取反 ;它们的结果影响 CF ;它们的指令格式相同: BT r16/r32,
2012-04-10 15:11:17 7476
原创 原子操作与 x86 上的 lock 指令前缀
原子操作是不可分割的操作,在执行完毕时它不会被任何事件中断。在单处理器系统(UniProcessor,简称 UP)中,能够在单条指令中完成的操作都可以认为是原子操作,因为中断只能发生在指令与指令之间。在多处理器系统(Symmetric Multi-Processor,简称 SMP)中情况有所不同,由于系统中有多个处理器在独立的运行,即使在能单条指令中完成的操作也可能受到干扰。
2012-04-10 14:51:08 20802 1
原创 用汇编实现原子操作
原子操作(1) - 用汇编实现原子操作“最轻量级的锁”,通常也叫”原子操作”,之所以加引号是因为他们在汇编级别并不是原子操作,是用多条指令完成的,这些操作大多都是利用CPU支持的汇编指令.在某些构架过时的CPU体系结构上,它们应该是用比较重量级的线程内锁实现的吧(我的猜测).最常见的原子操作有Compare and Exchange,Self Increase/Decrease等等80
2012-04-10 14:46:02 4088
原创 Windows 自旋锁分析(三)
4,KeAcquireSpinLockRaiseToDpc的实现机制在MSDN上是这么说的:调用KeAcquireSpinLockRaiseToDpc的程序必须运行在IRQLKeAcquireSpinLockRaiseToDpc和KeAcquireSpinLock具有同样的功能,但是比KeAcquireSpinLock具有更高的效率。下面将着重关注KeAcquireSpinLo
2012-04-10 14:26:45 1008
原创 Windows 自旋锁分析(二)
3 KeAcquireSpinLockAtDpcLevel的实现机制MSDN上说明调用KeAcquireSpinLockAtDpcLevel的程序必须运行在DISPATCH_LEVEL上。在多核处理器(Windows2003)下先来查看一下KeAcquireSpinLockAtDpcLevel的汇编代码nt!KeAcquireSpinLockAtDpcLevel: mov
2012-04-10 14:26:14 1374
原创 Windows 自旋锁分析(一)
自旋锁是一种在内核定义,只能在内核态下使用的同步机制。自旋锁用来保护共享数据或者资源,使得并发执行的程序或者在高优先级IRQL的对称多处理器的程序能够正确访问这些数据。分析Windows自旋锁,首先需要介绍Windows的IRQL。 1 Interrupt Request Level(IRQL)介绍IRQL是Interrupt RequestLevel,中断请求级别。一个由window
2012-04-10 14:25:16 3790
原创 CONTAINING_RECORD宏
今天看到别人的代码用了 CONTAINING_RECORD 这样的一个宏,我看了它的定义,如下:#define CONTAINING_RECORD(address, type, field) ((type *)( (PCHAR)(address) - (ULONG_PTR)(&((type*)0)->field)))class A{ char c; in
2012-04-10 11:28:57 466
原创 c union
定义一个联合类型的一般形式为: union 联合名 { 成员表 }; 例如: union w{ int a; char b; }; 联合定义之后,即可进行联合变量说明,被说明为w类型的变量,可以存放整型量a或存放字符数组b。 二、联合变量的说明 联合变量的说明和结构变量的说明方式相
2012-04-10 10:45:52 321
原创 C_C++的union的学习笔记总结
前言 熟悉C的程序员都知道union(联合体)的用法,利用union可以用相同的存储空间存储不同型别的数据类型,从而节省内存空间。当访问其内成员时可用"."和"->"来直接访问。在C++出现后,它继承了union并保留了其在C中的特性。但是在C++中的union又有了新的扩展,这需要大家了解,要不然你会感到费解和迷惑。下面我讲两点。 一、在union中存储对象 在C中union中
2012-04-10 10:44:57 622
原创 C extern
1.引言C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不
2012-04-09 16:17:12 346
原创 WM_CLOSE / WM_DESTROY / WM_QUIT 几个消息的逻辑关系
WM_DESTROY 是关闭程序的WM_CLOSE 是关闭窗口的WM_QUIT 是关闭消息环的以下说明程序是如何退出的:使用者选按【File/Close】,于是发出 WM_CLOSE。CMyFrameWnd 并没有设置WM_CLOSE 处理常式,于是交给预设之处理常式。预设函数对于WM_CLOSE 的处理方式是呼叫 ::DestroyWindow, 并因而发出WM_DE
2012-04-09 15:03:26 720
转载 Windows API FlushFileBuffers和SetFilePointer函数
在PC硬件体系结构里,速度最快的存储器是CPU里面的寄存器,接着到二级缓存,再到系统RAM内存,最后才到硬盘。由于这样的体系结构,就决定了操作系统对文件的操作方式,或者说是最优化的算法。比如操作系统接收到写文件的数据时,就会先把数据保存到RAM里,然后在合适的时间或者合适的数据量时再写到硬盘里。但有时候我们希望数据一定要保存到硬盘里,而不是保存在RAM里,这时就需要使用函数FlushFileBuf
2012-04-09 14:21:44 1784
原创 VC++ CopyFile函数用法
BOOL CopyFile( LPCTSTR lpExistingFileName, // pointer to name of an existing file LPCTSTR lpNewFileName, // pointer to filename to copy to BOOL bFailIfExists // flag for operation if file exis
2012-04-09 14:13:32 61306 3
TensorFlow技术解析与实战 带书签 高清
2019-02-20
深度学习框架PyTorch:入门与实践(陈云)
2019-02-19
王晋东博士迁移学习系列
2019-02-17
apache kylin权威指南
2019-01-27
深度强化学习原理入门
2019-01-25
spark 源码分析
2019-01-25
深入理解Java虚拟机高清PDF
2018-12-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人