自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

倒计时

记录学习、生活。

  • 博客(118)
  • 资源 (4)
  • 收藏
  • 关注

原创 博客转移

最近好久不来CSDN了,自己搭建了一个博客,http

2014-07-17 08:40:19 1131

原创 BCTF_海报探秘(300)

这个题目来自上周的BCTF比赛,题目是海报探秘(300),一张png图片中隐藏了KEY,解出KEY,具体报告,请下载:http://download.csdn.net/detail/l0g1n/7042787我对217战队的这个题目报告进行了学习,对他的代码进行注释,理解.我至少学习到了三点:png文件的解压,文件对齐的处理,还有这优雅的代码。分享给大家:#include #include

2014-03-14 23:38:31 1982

原创 BCTF总结

缘由上周,我们小组Sigma参加了“百度杯”BCTF比赛,经历了难忘的双休,这次的BCTF跟以前参加的国内类似的安全比赛有些不同,时间只有48小时,题目不多,但难度大,完全跟国际接轨(我自己的感觉)。反思我完成了两个题目,都是与逆向有关:1、题目简单,nop掉MessageBox,下个断点,跑起来就出来KEY了。2、很明显的考查了算法的逆向,回想起来是很简单的算法逆向,只是除以

2014-03-14 22:40:37 2349

原创 驱动学习总结

持续了大约两个月的驱动学习终于结束了。目前已经掌握的知识如下:1、各种类型的Hook、Patch,并都写过代码,深入理解。2、对SSDT、ShadowSSDT,内部的函数执行流程,由Ring3到Ring0层的各种函数调用关系都有深入了解。3、使用驱动处理PE头的各种信息。4、对驱动编程的框架,通信框架有了深入理解。5、可以实现对文件、进程、DLL隐藏的隐藏。6、可以实现

2014-03-02 17:58:37 1399 2

原创 HookAPI通信

这段时间学习驱动,到了HookAPI通信这部分,简单记录一下。HookAPI通信:在Ring3与Ring0之间进行数据交互,我们都知道,在调用一个函数时,该函数会调用内核中对应的函数来实现相应的功能,在这里,我们选择一个具有缓冲区的函数来传输我们自己的数据,在这个函数调用内核层对应的函数时,我们对其Hook,然后取出相应数据。做个不是太恰当的比喻,就像一个马帮,从A地(Ring3)到向B地

2014-02-20 11:01:16 1713

原创 PE导出表操作

代码很简单,只是需要对PE文件头的理解,在这段代码中,我遇到的问题是结构体指针的问题,目前已经理解,具体请看代码中注释。BOOL EnumEATTable(PVOID pModuleBase){ PIMAGE_DOS_HEADER pDosHeader = NULL; PIMAGE_NT_HEADERS pNtHeader = NULL; PIMAGE_EXPORT_DIRECTORY

2014-02-08 13:53:54 1433

原创 2013&2014

2013总结2013,毕业了,算是正式工作半年,2013年7月开始,算是我的生活,工作之外的时间都是自己的。收获“压力测试”差不多算是一个月的时间,疯狂的一个月,想哭的一个月,每天都徘徊于IDA和VS2010之间,完成了对四个可执行程序代码的还原。每天都在进行分析程序,还原代码,优化代码,调试BUG。回想起来,那一个月是我提高最快的时候,尤其是使用IDA和程序调试部分。感谢曾经

2014-01-01 23:51:49 4759 3

原创 InlineHook是什么?

简单来说,就是修改函数体实现部分。但是如何来修改,这样修改的意义又是什么?我今天一直在寻找一个比较好的方式来说明白如何进行InlineHook,画了几次图,试了好几个工具,最后完成了一个流程,希望大家能看明白。图片:说明:左上的图片这个结构是我们在代码中写入的一个函数代码如下:__declspec(naked) NTSTATUS NtQueryD

2013-12-26 22:00:31 4234 4

原创 ShadowSSDT Hook

ShadowSSDT表的获取这里的ShadowSSDT表的获取是通过函数KeAddSystemServiceTable来获取的。使用这个函数的原因:1、这个函数是已经导出的,可以在代码中直接使用。2、这个函数里面使用了ShadowSSDT,包含了ShadowSSDT的地址。可以使用WinDbg查看该函数代码,如下:kd> u KeAddSystemServiceTabl

2013-12-26 00:49:24 3388 1

原创 程序调试

我高中接触过VB语言(当时主要是用笔抄写书中代码),写过一个计算器。大学主要写 C++程序,工作后需要一些脚本,写过一段时间Python。下面主要是针对C++程序。问题分类:在编程中很容易就会出现各种各样的问题,我觉得初步可以分为下面几种类型:1、代码编译不成功。2、编译成功,运行出错。3、运行后得不到想要的结果。4、内存泄漏。下面分别来说一下:第一

2013-12-25 23:04:00 1146

原创 md5小工具

/**************************************************************************************** AUTHOR : L0g1n* DATE : 2013-12-23* MODULE : md5ToClipboard* * MD5计算工具* 双击运行程序后会自动拷贝文件到系统目录下、添加鼠标右键菜单、原

2013-12-24 09:28:11 1087

原创 SSDT Hook的两种方式

#ifndef _SSDT_H_#define _SSDT_H_#include typedef struct _SERVICE_DESCRIPTOR_TABLE{ PULONG ServiceTable; PULONG CounterTable; ULONG TableSize; PUCHAR ArgumentTable;}SERVICE_DESCRIPTOR_TABLE,

2013-11-28 23:54:31 2382

原创 一段ShellCode

//此ShellCode为0day安全:软件漏洞与分析技术书中的。只是对流程进行了梳理,添加了注释。//注释中实际内存地址,就是虚拟地址。#include #include int main(){ _asm { CLD push 0x1e380a6a ;MessageBoxA push 0x4fd18963 ;ExitProcess push 0x0c9174

2013-10-12 23:55:55 1208

原创 PMA学习第一章

Practical Malware Analysis对于第一章,主要是通过一些静态工具来对恶意程序分析。收获:新接触了三款重要软件:PEBrowsePro:PE文件头的查看,不过我还是更喜欢Stud_PE。depends.exe:导入导出表和链接库能很清楚的看出,通过这些可以初步猜测一下恶意程序的大体功能。Resource Hacker:我觉得这个软件,目前我发现的最大

2013-03-23 10:23:54 1094

原创 封装的摄像头类

/*这个类目前封装了三种采集卡的摄像头:两个模拟摄像头采集卡MV-750,MV-E8000;个数字摄像头采集卡MV-1300。与一个学长共同完成,是完成的第一个感觉很满意的类,今天整理了一下发出来。对外接口:载入,打开,关闭,拍照。希望给对学习类封装的同学有点帮助。采集卡、摄像头是北京维视的。 by l0g1nCameraV1.h*

2012-12-17 09:44:05 2507

原创 一个CrackMe核心代码的不完整分析

第一次对反汇编代码做深入阅读,学到了很多东西,但还没成系统。00401BD0 /$ 55 push ebp00401BD1 |. 8BEC mov ebp, esp00401BD3 |. 81EC 14040000 sub esp, 41400401BD9 |. 56 push es

2012-12-04 09:47:02 873

原创 PE中节&对齐

PE中的节是存放不同类型数据(代码、数据、常量、资源)的地方,不同的节具有不同的访问权限。节是PE文件中存放代码或数据的基本单元。有些数据类型不同,分别属于不同的数据目录,但由于其访问属性相同,便被归类到同一个节中,节可能会占用一个或多个页面,页面的属性包括只读、只写、读写等。PE中的对齐有三类:数据在内存中对齐Windows操作系统对内存属性的设置以页为单位,

2012-12-02 22:22:34 1522

原创 PE中涉及的地址

PE中涉及的地址有四类:虚拟内存地址(VA)用户的PE文件被操作系统加载进内存后,PE对应的进程支配了自己独立的4GB虚拟空间,范围00000000h--0fffffffh。进程本身的VA被解释为:进程的基地址+相对虚拟内存地址。相对虚拟内存地址(RVA)进程被加载进虚拟内存后,相关的动态链接库也会被加载,这些文件称为模块。模块都有基地址,不同模块的基地址一般不同。相对虚拟内存

2012-12-02 21:42:57 942

原创 内存映射文件&PE内存映像

内存映射文件是指将硬盘上的文件不做修改的装载到内存中,(为什么?)在硬盘上,文件是被分割开存放的,当我们访问时,计算机需要先将不同位置的内容读取到内存,而有了内存文件映射,访问就会变得更轻松和快捷,由于读取磁盘操作放到了一起,读写效率会提高很多,所以许多大型的编辑软件经常会使用内存映射文件存取磁盘文件。PE内存映像是指按照一定的规则装载到内存中,装入后的整个文件头内容不会发生变化,但PE文件的

2012-12-01 21:38:08 2478

原创 网络通信模型(一)

Winsock提供了一些I/O模型帮助应用程序以异步方式在一个或者多个套接字字上管理I/O。大概共有6种:阻塞(blocking)模型、选择(select)模型、WSAAsyncSelect模型、WSAEvenetSelect模型、重叠模型、完成端口模型。阻塞模式:套接字字创建时,默认工作在阻塞模式下。当recv接受不到消息时会一直等待,从面造成阻塞。好处:使用简单,适合开始学习。缺点

2012-11-26 10:48:04 1096

原创 西南石油大学第三届信息安全大赛总结

西南石油大学第三届信息安全大赛总结写于2012年11月6日总体自我感觉很差:基础做了15题、渗透做了6题,其它的都没做,分数4200,排名115。第一次做的是绿盟科技和北京理工大学搞的那个,这个是第二次,同时也在做成都的一个。这些比赛的类型是我喜欢的,不像那ACM那样,不太喜欢。从中学到了一些,总结一下:基础1:源代码方法:查看网页源代码,很基本。基础2:BASE6

2012-11-07 10:04:29 5221 5

原创 VS2012安装后 VS2010出现fatal error LNK1123: failure during conversion to COFF

最近安装了VS2012,但是为了与其它人更新方便,有时候不得不使用VS2010,当再编译VS2010程序时,出现问题:fatal error LNK1123: failure during conversion to COFF。找到了两个资料,整理了一下。下面是MSDN上发现的。意思应该就是cvtres.exe需要更新到sp1。在CSDN上又发现了这个朋友发的资源:

2012-11-05 15:57:43 3539

原创 西南石油大学第三届信息安全大赛之QR码

这几天在玩这个,发一下关于QR码的程序吧。题目如下:题目标题说明是QR码,看来是需要用程序来把上面的数字来生成QR码。代码如下:(基于OPENCV来实现的)//由于图片太小,这里把图片放大了十倍#include #include #include "cv.h"#include "cvaux.h"#include "cxcore.h"#include "

2012-11-03 19:50:23 2406

原创 一些网站收藏

几个精品小站:http://www.nxadmin.com/http://www.freebuf.com/http://www.mythhack.com/http://lx.shellcodes.org/RFID:http://radiowar.org/WebShellhttp://www.webshell.cc/Linux站http://www.linux

2012-10-29 11:44:00 1220 2

原创 内存管理

采用基于页面映射的“虚拟内存”机制,或者说提供“页式内存管理”。在硬件上,这是由CPU芯片内部(或外部)的“存储管理单元”MMU支持。在软件上,则由操作系统内核中的内存管理模块实现。广义的“内存管理”指一切与内存有关的管理,包括缓冲区的分配与释放。狭义的“内存管理”实际上就是指页面映射以及与此有关的操作。采用页式内存管理时,程序中所使用的内存地址,即CPU中的去处单元ALU所发

2012-10-29 09:02:28 830

原创 Duilib登录窗口

先上效果图(自己感觉还不错):功能不完善,一是为了熟悉xml的写法,手写,不建议使用编辑器,二了为了理顺程序的流程,加入了部分注释。xml文件 程序代码://2012.10.16 by l0g1n。#include "stdafx.h"class CFrameWindowWnd:pu

2012-10-16 22:01:52 9894

原创 主引导记录(MBR)信息分析与获取

前段时间在安装黑苹果时,发现一个问题,电脑在启动时,会找激活分区,如果没有找到,那就启动不起来。那能否写个小程序读取一下MBR信息,把激活分区换成其它,搞点恶作剧呢,于是就有了这篇读取MBR信息的文章,但是没写入,不敢尝试。通过动手学习,对硬盘MBR信息有了更好的了解。1、我的硬盘主引导记录信息及分析80 01 01 00 07 FE FF FF 3F 00 00 00 0D F0

2012-10-12 21:14:46 7186 1

转载 MFC下多线程UpdateData的使用方法

本文转载于http://blog.pfan.cn/yuqiexing/52543.html线程中是不可以调用父窗口的UpdateData,原因如下: 当创建窗口的线程和UpdateData调用所在的线程不是同一线程的时候MFC就会出错。为MFC把部分信息储存在线程的TLS中,这些信息对于MFC的执行非常重要,因此MFC会在很多代码里面检查线程状态是否正确。当在线程中调用

2012-10-11 14:38:15 2688

原创 类中线程的使用

自己写了个例子,不知这种方式是否是常用方式,欢迎交流。例子中所含有的点:1、在类中函数创建线程,创建信号量。2、在线程中调用类中函数。3、线程检测信号量,来判断是否结束线程自身。程序中包含一个类CTest,一个主函数main.cpp。//Test.h//2012.10.10 by l0g1n#pragma once#include #include #incl

2012-10-10 14:48:44 2988

原创 C++ Primer笔记(10)

数组形参void printValues(int*);void printValues(int[]);void printValues(int[10]);//以上三种是等价的。通常,将数组形参直接定义为指针要比使用语法定义更好。第三种方式,形参的长度容易引起误解。当编译器检查数组形参关联的实参时,它只会检查实参是不是指针、指针的类型和数组的类型是否匹配,而不会检查数组的长度

2012-10-09 08:32:56 736

原创 C++ Primer笔记(9)

参数传递每次调用函数时,都会重新创建该函数所有的形参,此时所传递的实参将会初始化对应的形参。形参的初始化与变量的初始化一样,如果形参具有非引用类型,刚复制实参的值,如果形参为引用类型,则它是实参的别名。非引用实参表示对应实参的局部副本。对这类形参的修改仅仅改变了局部副本的值。一旦函数执行结束,这些局部变量的值也就没有了。指针形参---不能修改指针的值,但可以修改指针指向

2012-10-08 20:44:39 692

原创 C++ Primer笔记(8)

何时发生隐式类型转换1、混合类型表达式中,其操作数被转换为相同的类型。2、用作条件表达式的被转换为bool类型3、用一表达式初始化某个变量,或赋值,表达式会转化为变量的类型。4、函数调用中也可能发生隐式类型转换。显式转换也称为强制转换,强制类型转换符:static_cast、dynamic_cast、const_cast、reinterpret_cast;何时需

2012-10-08 10:56:06 555

原创 C++ Primer笔记(7)

建议:只有在必要时才使用后置操作符。前置操作需要做的工作更少,只需要加1后返回加1后的结果即可。而后置操作符则必须先保存操作数原来的值,以便返回未加1之前的值作为操作的结果。逗号操作符:表达式从左向右计算。逗号表达式的结果是其最右边表达式的值。new表达式返回指向新创建对象的指针,我们通过该指针来访问对象。double *pd=new double(33);delete pd;

2012-10-08 10:43:17 571

原创 C++ Primer笔记(6)

与vector类型相比,数组的显著缺陷在于:数组的长度是固定的,而且程序员无法知道一个给定数组的长度。数组没有获取其容量大小的size操作,也不提供push_back操作的其中自动添加元素。如果需要更改数组的长度,程序员只能创建一个更大的新数组,然后把原数组的所有元素复制到新数组空间中去。现在C++程序更多地使用vector来取代数组,只有当性能测试表明使用vector无法达到必要的速

2012-09-25 16:58:05 611

原创 C++ Primer笔记(5)

class Sales_item{public:Sales_item(void);~Sales_item(void);private:string isbn;unsigned units_sold;double revenue;};这些操作和数据是类的一部分,也称为类的成员。操作称为成员函数,数据则称为数据成员。定义变量和定义数据成员存在非常重要的区

2012-09-19 14:11:38 603

原创 C++ Primer笔记(4)

定义const对象,一个用不可改变的变量代表一常数的解决办法。非const变量默认为extern,要使const变量能够在其它的文件中访问,必须显式地指定它为extern。extern const bufSize=500;引用:int ival=1024;int &refVal=ival;const引用是指向const对象的引用。const int ival=102

2012-09-16 17:06:03 493

原创 C++ Primer笔记(3)

SRWLock允许我们区分那些想要读取资源的值的线程(读取者线程)和想要更新资源的值的线程(写入者线程)。让所有的读取者线程在同一时刻访问共享资源是可行的,因为不存在破坏数据的风险。只有当写入者想要对资源进行更新的时候才需要进行同步。这种情况下,写入者线程应该独占对资源的访问权:任何其它线程,无论是读取者还是写入者线程,都不允许访问资源。初始化VOID Initia

2012-09-13 15:22:22 585

原创 C++ Primer笔记(2)

关键段:CRITICAL_SECTION g_cs;EnterCriticalSection(&g_cs);//加入访问共享资源的代码LeaveCriticalSection(&g_cs);由于关键段中使用了Interlocked函数,因此执行速度非常快。最大的缺点在于它们无法用来在多个进程之间对线程进行同步。一般把CRITICAL_SECTION结构作为全局变量来分配

2012-09-12 16:25:30 687

原创 C++ Primer笔记(1)

volatile类型修饰符----被设计用来修饰被不同线程访问和修改的变量。如果没有volatile,要么无法编写多线程,要第编译器失去大量优化的机会(足以说明它的重要性)。Q1:一个参数是否可以同时使用const和volatile来修饰?A1:可以,例如:只读的状态寄存器,它是volatile因为它可能被意想不到地改变,它是const因为程序不应该试图去修改它。Q2:一个指针

2012-09-12 16:23:46 676

原创 【源码】VS2010清理助手

#include #include #include #include #include using namespace std;#pragma comment(lib,"Shlwapi.lib")void FileDelete(char* directory){ SHFILEOPSTRUCT shFileOp; memset(&shFileOp,0,sizeof(shFi

2012-08-04 22:31:38 1959

BCTF_Writeups

百度杯BCTF线上赛前8名队伍的Writeup,大家可以学习一下,推荐看217写的。

2014-03-14

MD5计算工具

代码中包含:自动请求Admin权限、注册表操作、自删除、剪贴板、鼠标右键添加等

2013-12-24

Duilib做的登录窗口

Duilib来实现的登录窗口,VS2010开发平台。 功能不多,只为理解程序与xml。

2012-10-16

VS2010清理助手源码

编译器VS2010,会清理VS2010生成项目的.sdf文件,ipch、Release、Debug三个文件夹及里面所有文件。

2012-08-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除