- 博客(48)
- 资源 (5)
- 收藏
- 关注
原创 知识点记录
1、在DLL的初始化函数中应该仅进行一些简单的初始化任务,例如设置线程局部存储(TLS),创建同步对象和打开文件等。它绝对不能调用 LoadLibrary 函数,因为这可能在 DLL 加载顺序上造成循环依赖。这可能导致即将使用一个 DLL 但是系统还未对它进行初始化。同样,你也不能在入口点函数中调用 FreeLibrary 函数,因为这可能导致即将使用一个 DLL 但是系统已经执行完了它的终止代码
2016-07-26 18:21:25 401
原创 关于类的大小
类的大小可以归纳以下几个原则:1、类的大小为类的非静态成员数据的类型大小之和,也就是说静态成员数据不作考虑。2、类的大小与类中的构造函数、析构函数以及其他的普通成员函数无关(虚函数除外),只与它当中的成员数据有关。3、虚函数由于要维护虚函数表,所以要占据一个指针大小,也就是4字节。4、为了优化存取效率,类的总大小也遵守类似class字节对齐的(与基本数据类型中的长度最大的对齐)。
2013-08-15 10:47:34 1882
原创 关于VC的一些编译错误
1、fatal error C1010: unexpected end of file while looking for precompiled header directive解决:在cpp文件中加入#include "StdAfx.h"
2013-08-15 10:45:30 690
原创 Kali安装VirtualBox
1、到https://www.virtualbox.org/wiki/Linux_Downloads下载VirtualBox的安装文件。我下载的是:Debian 7.0 ("Wheezy") i386 | AMD642、进入到存放安装文件的目录,执行命令安装VBox:dgkg -i virtualbox-4.2_4.2.16-86992~Debian~wheezy_amd64.
2013-08-13 16:24:10 7913
原创 关于rootkit
一、定义rootkit是由有用的小型程序组成的工具包,使得攻击者能够保持访问计算机上具有最高权限的用户“root”。换句话说,rootkit是能够持久或可靠地、无法检测地存在于计算机上的一组程序和代码。rootkit提供了两个主要功能:远程命令和控制,以及软件窃听。远程命令和控制(简称远程控制):包括对文件进行控制,导致系统重启或“死机蓝屏”,以及访问命令shell(即cmd.exe或
2013-06-24 18:17:33 1397
转载 用于同步的等待函数
等待函数可使线程自愿进入等待状态,直到一个特定的内核对象变为已通知状态为止。这些等待函数中最常用的是WaitForSingleObject:DWORD WaitForSingleObject(HANDLE hObject, DWORD dwMilliseconds); 当线程调用该函数时,第一个参数hObject标识一个能够支持被通知/未通知的内核对象(前面列出的任何一种对象都适用
2013-06-23 06:12:35 878
转载 关于线程池
线程池的技术背景 在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。如何利用已有对象来服务就是一个需要解决的关键问题,其实这就是一些"池化资源"技术产生的原因。比如
2013-06-23 05:51:51 561
原创 线程的同步(四)---信号量
信号量内核对象用于对资源进行计数。它们与所有内核对象一样,包含一个使用数量,但是它们也包含另外两个带符号的32位值,一个是最大资源数量,一个是当前可用资源数量。最大资源数量用于标识信标能够控制的资源的最大数量,而当前资源数量则用于标识当前可以使用的资源的数量。信号量的使用规则如下:• 如果当前可用资源的数量大于0,则发出信标信号。• 如果当前可用资源数量是0,则不发出信标信号。
2013-06-23 03:49:58 829
原创 DiffingSuite的安装问题
1、下载地址:http://www.eeye.com/Resources/Security-Center/Research/Tools/eEye-Binary-Diffing-Suite-EBDS2、下载完成后安装,安装好后IDA的插件里应该就有AnalIDA(Alt+9)的插件了,如果没有,则需要手动拷贝文件:1)将Diffing Suite\Plugins目录下的ana
2013-03-06 15:12:04 1408
原创 壳的世界(一)
1、所有的Delphi7界面程序,进入到OEP后的第一个函数内容都类似于如下形式:00405BC8 /$ 53 push ebx00405BC9 |. 8BD8 mov ebx, eax00405BCB |. 33C0 xor eax, eax00405BCD |. A3 9CD0440
2012-12-08 00:03:41 1788
原创 ACProtect 1.40 - 1.41 - RISCO Software Inc. 脱壳
文章整理自黑鹰视频教程1、查壳显示“ACProtect 1.40 - 1.41 - RISCO Software Inc.”2、OD载入(用看雪论坛上的OD即可),打开“调试选项->异常”,除了“非法访问内存”和“同时忽略以下指定的异常或范围”这两项不勾以外,其他的都打勾。3、重新载入程序,F9运行,程序断下来,如下所示:0043374D |. CD 01 in
2012-11-22 11:33:01 2312
原创 驱动对象和设备对象
----------------以下内容摘自《寒江独钓》-------------------1、驱动对象: 一个驱动对象代表了一个驱动程序。或者说一个内核模块。驱动对象的结构如下(这个结构的定义取自 WDK中的 wdm.h)。下面有一些域用省略号代替。 typedef struct _DRIVER_OBJECT { // 结构的类型和大小。 CSHORT T
2012-11-02 11:28:29 2053
原创 main函数的识别
一般来说,用IDA反汇编程序时,IDA会自动识别出main函数。如果我们不是用IDA反汇编,那又怎么识别main函数呢?1、WinMain函数的识别先来看看WinMain函数的原型: int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance,
2012-10-30 11:15:52 1604
转载 CPUID详解
转自http://hi.baidu.com/sinbad_li/item/341e0b2c16cbef0a73863e23CPUID是Intel Pentium以上级CPU内置的一个指令(486级及以下的CPU不支持),它用于识别某一类型的CPU,它能返回CPU的级别(family),型号(model),CPU步进(Stepping ID)及CPU字串等信息,从此命令也可以得到CPU的缓存与T
2012-10-24 15:56:31 1249
原创 反汇编中遇到的一些特殊的指令
1、CDQ CDQ 把原来的 EAX 扩展成 EDX:EAX (带正负值), 这个指令把 EAX 的第 31 bit 复制到 EDX 的每一个 bit 上。例如: 假设 EAX 是 FFFFFFFB (-5) ,它的第 31 bit (最左边) 是 1, 执行 CDQ 后, CDQ 把第 31 bit 复制至 EDX 所有 bit EDX 变成 FFFFFF
2012-10-24 15:33:00 1413
原创 Windows下查看进程对应的应用程序
1、在 “运行”里面输入“wmic”并回车 (注意:第一次使用会出现“正在安装WMIC”的字样),会进入一个类似cmd命令行的界面。 2、输入“Process”并回车,即可以看到进程对应的应用程序了,如下所示:C:\Documents and Settings\Administrator>wmicwmic:root\cli>processCaption
2012-09-24 16:25:38 6044
原创 视频笔记(一)
第二课:1、定位到是否注册的代码1)运行程序2)打开可执行模块窗口,双击本程序的模块,进入到反汇编窗口,如果代码如下所示:00401000 6A DB 6A ; CHAR 'j'00401001 FF DB FF00401002 6
2012-08-13 14:16:07 733
转载 关于万能消息断点
在看雪上看到个帖子,帮了我很大的忙,记录一下:http://bbs.pediy.com/showthread.php?t=98274 1、在user32空间搜索二进制:引用:55 8B EC 56 57 53 68 CD AB BA DC 56 FF 75 18 FF 75 14 FF 75 10 FF 75 0C找到如下所示:77D1870C 55
2012-03-29 20:02:32 1025
转载 shl和shr
shl和shr是逻辑移位指令。shl是逻辑左移指令,它的功能为:(1)将一个寄存器或内存单元中的数据向左移位;(2)将最后移出的一位写入CF中;(3)最低位用0补充。 指令:mov al,01001000bshl al,1 ;将al中数据左移一位 执行后(al)=10010000b,CF=0。 注意:如果移动位数大于1时,必须将移动位数放在cl中
2012-03-15 10:50:26 7043
转载 PECompact 2.5脱壳
文章来源于黑鹰教程PECompact 2.5 Retail -> Jeremy Collake设置Ollydbg忽略所有的异常选项。od载入01001000 N> B8 90BA0101 mov eax,NOTEPAD.0101BA9001001005 50 push eax
2012-01-03 16:43:35 1222
原创 简单爆破java程序
最近遇到一个java后台管理程序在输入用户名和密码登录时会判断是否有加密狗存在,如果无狗则不让登录。 首先要确定是哪一个文件中判断狗的存在,我用了比较笨的方法,就是反编译出每一个可疑的.class文件,看哪一个文件中是处理登录的,一般用于登录的函数都会有login字样,然后再看登录程序的处理过程,即可确定到判断狗的地方。反编译.class文件我用的是jd-gui.exe程序,绿色小巧,只有六
2011-12-31 16:26:16 2392
原创 关于windows下IDA远程调试linux
以前不会,现在会了,写篇文章,以防忘记!1、安装IDA后,在安装目录下会有linux_server程序,将该程序拷贝到linux机器上,比如放在/home目录下。2、在linux机器上“./linux_server”运行该程序。3、将linux系统中要调试的程序拷贝一份到windows,比如在linux中,要调试的程序是“/sbin/link”,在windows中是“D:\work\l
2011-12-31 15:44:06 9253 3
转载 IP地址 DWORD与字符串转换
<br />CString dwIP2csIP(DWORD dwIP){ CString strIP = _T(""); WORD add1,add2,add3,add4; add1=(WORD)(dwIP&255); add2=(WORD)((dwIP>>8)&255); add3=(WORD)((dwIP>>16)&255); add4=(WORD)((dwIP>>24)&255); strIP.Format("%d.%d.%d.%d",add4,add3,add2
2011-05-19 13:18:00 6785 1
原创 脱壳操作
常规操作:1、寻找OEP:OD载入,找到OEP,停在OEP处(一般在push ebp代码处)。2、生成转存文件:打开LordPE,选中程序的进程,右键“修正镜像大小”,然后右键“完整转存”,输入文件名,保存。此步也可用OD自带的插件进行,在代码区右键“用OllyDump脱壳调试进程”,此外如果勾选了“重建输入表”,后面就不需要再用ImportREC修正输入表了,如果不勾选,则需要进入第3步
2011-03-26 17:40:00 2429
原创 寻找OEP
1、使用ESP定律OD载入后,F8一次,在寄存器窗口的ESP的内容上(如0012FFA4)右键:“在数据窗口中跟随”,到内存数据窗口,将内存数据窗口以HEX数据形式显示,在刚才的地址起始位置上(如0012FFA4)上右键:“断点”->“硬件访问”->“字”,F9直接运行,再F8一次或二次,一般会到push ebp这句代码,这句代码所在的地址,就是OEP。 2、二次断点法OD载入后,
2011-03-26 02:26:00 8395
原创 实现爆破的几种方法
1、找到关键跳转语句,将其强制改为跳到注册成功的地方,如je改为jne,或者jmp无条件跳转等。2、找到关键跳转前面的关键call,在call中要返回的地方,修改eax的值(具体改为什么要看关键跳的语句),即改变了关键call的返回值,以达到更改跳转的目的。3、可以把跳转到注册失败的地跳转语句nop掉。方法为:在跳转语句上右键:“二进制”->“用NOP填充”。
2011-03-26 00:45:00 1175
原创 指令详解
1、test指令测试指令 格式:TEST DEST,SRC 功能:目的操作数和源操作数按位进行逻辑与操作,结果不回送目的操作数。源操作数可以为通用寄存器、存储器或立即数。目的操作数可以为通用寄存器或存储器操作数。 例1: TEST DWORD PTR [BX],80000000H TEST AL,CL TEST指令常用于测试操作数中某位是否为1,而且不会影响
2011-03-25 23:57:00 2681
原创 寻找关键点
弹出框1、根据弹出的提示信息,在代码窗口右键:“查找”->“所有参考文本字串”,然后在打开的字符串页面中,右键:“查找文本”,查找提示信息,Ctrl+L查找下一个。关于查找字符串,如果是带壳查找,则需要到达OEP后再查找,否则可能查找不到,因为解码还没有完成。如果不想到达OEP后再查找,可如下操作:OD载入,F9运行,然后Alt+E打开“可执行模块”界面,找到主程序的模块,双击,在新打开的
2011-03-25 23:46:00 755
原创 转移指令
转移指令是汇编语言程序员经常使用的一组指令。在高级语言中,时常有“尽量不要使用转移语句”的劝告,但如果在汇编语言的程序中也尽量不用转移语句,那么该程序要么无法编写,要么没有多少功能,所以,在汇编语言中,不但要使用转移指令,而且还要灵活运用,因为指令系统中有大量的转移指令。转移指令分无条件转移指令和有条件转移指令两大类。1、无条件转移指令无条件转移指令包括:JMP、子程序的调用和返回指令
2011-03-25 01:55:00 1790
原创 算法
1、xor eax,eax常见用法:0041000 call [0041100]0041006 je 042000......0041100 ...... //call 调用的子函数 start......0041120 xor eax,eax0041122 retn //call end说明:(1)0041120 xor eax,eax 这句的作用是把e
2011-03-25 01:48:00 563
原创 操作技巧
1、在OD中对代码进行修改后,想要撤消修改,可选中修改过的代码,右键“撤销选择处的修改”。 2、OD中,Ctrl+G快捷键可到达指定地址处,在代码窗口、内存窗口、堆栈窗口均有效。 3、跟程序的过程中,如果想要看某个地址表达式的结果以及其数据,如mov eax,[ebp-8],可在内存窗口或堆栈窗口Ctrl+G,输入ebp-8查看。 4、PEID查看时,可点击“=>”按钮,选
2011-03-25 01:17:00 933
转载 OllyDbg通用快捷键
<br />http://blog.csdn.net/paste/archive/2006/06/10/785526.aspx<br /> <br />无论当前的OllyDbg窗口是什么,这些快捷键均有效:<br /><br />Ctrl+F2 - 重启程序,即重新启动被调试程序。如果当前没有调试的程序,OllyDbg会运行历史列表[history list]中的第一个程序。程序重启后,将会删除所有内存断点和硬件断点。<br />译者注:从实际使用效果看,硬件断点在程序重启后并没有移除。<br />Alt+
2011-03-22 11:17:00 574
原创 线程的同步(三)---互斥
<br />互斥对象(mutex)能够确保线程拥有对单个资源的互斥访问权。实际上互斥对象是因此而得名的。互斥对象包含一个使用数量,一个线程I D和一个递归计数器。互斥对象的行为特性与临界区相同,但是互斥对象属于内核对象,而临界区则属于用户方式对象。这意味着互斥对象的运行速度比关键代码段要慢。但是这也意味着不同进程中的多个线程能够访问单个互斥对象,并且这意味着线程在等待访问资源时可以设定一个超时值。<br />只有拥有互斥对象的线程才具有访问资源的权限,由于互斥对象只有一个,因此就决定了任何情况下此共享资源都
2011-03-17 23:24:00 549
原创 线程的同步(二)---事件
事件是一个允许一个线程在某种情况发生时,唤醒另外一个线程的同步对象,或者说当应用程序必须等到发生某事才能访问资源,应该使用事件对象。在所有的内核对象中,事件内核对象是个最基本的对象。它们包含一个使用计数(与所有内核对象一样),一个用于指明该事件是个自动重置的事件还是一个人工重置的事件的布尔值,另一个用于指明该事件处于已通知状态还是未通知状态的布尔值。 事件能够通知一个操作已经完成。有两种不同类型的事件对象。一种是人工重置的事件,另一种是自动重置的事件。当人工重置的事件得到通知时,等待该事件的
2011-03-14 00:15:00 683
原创 线程的同步(一)---临界区
<br />当多个线程访问一个独占性共享资源时,可以使用“临界区”对象。任一时刻只有一个线程可以拥有临界区对象,拥有临界区的线程可以访问被保护起来的资源或代码段,其他希望进入临界区的线程将被挂起等待,直到拥有临界区的线程放弃临界区时为止,这样就保证了不会在同一时刻出现多个线程访问共享资源。<br />以下的临界区用法中,CRITICAL_SECTION一般是在SDK下使用,而CCriticalSection类是MFC对CRITICAL_SECTION使用的封装。如果是在MFC下编程,推荐使用CCritica
2011-03-13 22:59:00 948
原创 动态创建Radio Button
项目中遇到要动态创建单选按钮的情况,把代码整理如下:对话框的成员变量:private: std::list m_radioList; //用来保存动态创建的按钮的指针,便于释放 对话框的成员函数:private: void ClearRadioList(); //释放动态创建的按钮在对话框的OnInitDialog函数里添加创建按钮的代码: CRect rcBtn(20,0,120,15); //按钮高度为15,间隔高度为10 for (int i = 0; i
2011-03-12 15:05:00 3436
原创 CListCtrl选中行
1、设置CListCtrl选中行m_list.SetItemState(nIndex,LVIS_SELECTED,LVIS_SELECTED);2、选中行改变项目中用到ClistCtrl,当选中行改变时,另外一个控件的详细信息也随之改变,最开始使用鼠标点击事件:void CMyDlg::OnClickList(NMHDR* pNMHDR, LRESULT* pResult) { TODO: Add your control notification handler code here int n
2011-03-07 13:25:00 13875 2
原创 带滚动条的对话框类
<br />在codeproject上看到了个有滚动条的对话框DEMO,原文http://www.codeproject.com/KB/dialog/scroll_dialog.aspx,不过是用SDK写的,为了在MFC下使用方便,把它改写成了类CScrollDialog,使用时把自己的对话框从CScrollDialog类继承,并把自己对话框类代码中的CDialog都替换为CScrollDialog即可。代码如下:<br />ScrollDialog.h文件<br />// ScrollDialog.h:
2011-03-05 00:55:00 8604 2
原创 对话框的隐藏
<br />1.在OnInitDialog中添加<br /> WINDOWPLACEMENT wp; <br /> wp.length=sizeof(WINDOWPLACEMENT);<br /> wp.flags=WPF_RESTORETOMAXIMIZED; <br /> wp.showCmd=SW_HIDE; <br /> SetWindowPlacement(&wp);<br /> <br /> ModifyStyleEx(WS_EX_APP
2011-03-01 14:19:00 1687
原创 VC 窗口特效(栅条)
想做一个栅条特效的窗口,在网上找到一篇VC窗口特效的文章,原文:http://blog.csdn.net/qiaozhangchi/archive/2008/12/11/3497367.aspx,发现并没有栅条特效,在网上找了很久也没找到,无奈只好自己想办法了。灵光一现下,想到以前做的异形窗口,便想用SetWindowRgn函数加定时器来实现。主要用到三个函数: BOOL CreateRectRgn(int x1, int y1, int x2, int y2); int Combine
2011-02-28 23:28:00 1706
解除VC6图片资源256色的限制
2011-03-22
菜鸟破解入门(学习破解的入门文章)
2010-03-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人