03 2009 档案

摘要:被忽悠了,一直以为lea和mov指令差不多的,今天算是知道了,顺便测试了下C内联汇编的效率关于对MOV(指令组)与LEA指令的讨论 kanxue语录:LEA EAX,[EBX + 4] 相当于:eax=ebx+4 ,lea指令允许用户在一个时钟内完成计算,速度快。ADD EBX,4; 相当于 ebx=ebx+4所不同MOV EAX,EBX + 4不合法,你可以在OD里键入这句指令测试一下。 c... 阅读全文
posted @ 2009-03-27 21:47 Fan Zhang 阅读(193) 评论(0) 推荐(0)
摘要:fs:[4]记录着栈顶地址。打开OD,点击M按钮,查看内存情况。显示堆栈区域是0x12e000~0x12efff,大小8K。PE文件参数SizeOfStackReserve = 100000 (1MB)SizeOfStackCommit = 1000 (4KB)也就是堆栈最大可为1MB大小,但是堆栈增长是以4KB为步进的。对堆栈是否溢出,就是将指针指向堆栈底部,读取这个指针指向的内容。然后将指针减... 阅读全文
posted @ 2009-03-27 01:18 Fan Zhang 阅读(240) 评论(0) 推荐(0)
摘要:在应用程序中查看错误代码记住错误码,查看ddk中的ntstatus.h文件或者vc中的winnt.h或者winbase.h如0xC00000FDL对应着STATUS_STACK_OVERFLOW#define STATUS_STACK_OVERFLOW ((DWORD )0xC00000FDL) 阅读全文
posted @ 2009-03-26 19:20 Fan Zhang 阅读(349) 评论(0) 推荐(0)
摘要:今天想总结一下栈的知识。栈是和线程关联的,每个线程会有一个栈。默认情况下,应用程序的栈是1MB,kernel程序的的栈是256KB。在设置栈的时候有两个参数(/STACK:reserve[,commit]) 其中reserve是栈的最大容量,但线程刚启动的时候,栈并没有那么大,随着需要增长。commit是增长的一个步进。在ring3中,线程相关的信息存储在_TEB块里,位于fs段中。_TEB的最前... 阅读全文
posted @ 2009-03-26 16:38 Fan Zhang 阅读(208) 评论(0) 推荐(0)
摘要:1.导入函数(1)如果程序静态连接时,声明函数采用了__declspec(dllimport) 调用Foo时,被翻译成call [_imp_Foo]其中_imp_Foo是idata节里面的数据,dll的loader会修改这个地址里的数值。_imp_Foo是FirstTrunk值。(2)如果程序静态连接时,没有采用了__declspec(dllimport) 调用Foo时,被翻译成call _Foo... 阅读全文
posted @ 2009-03-20 22:42 Fan Zhang 阅读(254) 评论(0) 推荐(0)
摘要:思路来源于看雪的一篇文章: http://bbs.pediy.com/showthread.php?t=55942扫雷内部的数据结构肯定是n*m的一个动态数组。数组元素中不同的值代表不同的状态。用spy++查看扫雷的窗体,发现那些小方格不是不是button,而是BitBlt画上去的。因此在BitBlt下断点,发现有两处。一处位于一个2维循环中,于是在这里找突破口。发现每个循环中的BitBlt的sr... 阅读全文
posted @ 2009-03-19 17:49 Fan Zhang 阅读(458) 评论(0) 推荐(0)
摘要:转自:http://blog.csdn.net/int2e/archive/2008/01/09/2032732.aspxFS寄存器指向当前活动线程的TEB结构(线程结构) 偏移 说明 000 指向SEH链指针 004 线程堆栈顶部 008 线程堆栈底部 00C SubSystemTib 010 FiberData 014 ArbitraryUserPointer 018 FS段寄... 阅读全文
posted @ 2009-03-19 14:56 Fan Zhang 阅读(372) 评论(0) 推荐(0)
摘要:转自:http://hi.baidu.com/gz1x/blog/item/c3c8f8f8b028040cd9f9fd90.html2007-10-10 15:21 gz1X [gz1x(at)tom(dot)com]2005.6.30 [什么是shellcode]———————————Shellcode是一个攻击程序(Exploit)的核心代码,能够在溢出后改变系统的正常流程,取得系统的控制... 阅读全文
posted @ 2009-03-19 14:53 Fan Zhang 阅读(502) 评论(0) 推荐(0)
摘要:1.以前的一个误解在ring3时候,fs段指向的是TEB。以前一直有个误解,fs:[0]和fs:[1]记录着EXCEPTION_REGISTRATION其实不然,而是fs:[0]记录着EXCEPTION_REGISTRATION的指针。2.数据结构,它可以形成一个链表,这个链表的首地址记录在fs:[0],其中handle是异常处理函数。_EXCEPTION_REGISTRATION struc ... 阅读全文
posted @ 2009-03-19 10:40 Fan Zhang 阅读(291) 评论(0) 推荐(0)
摘要://__except_handler3函数原型 int __except_handler3( struct _EXCEPTION_RECORD * pExceptionRecord, //ebp+8 struct EXCEPTION_REGISTRATION * pRegistrationFrame,//ebp+C struct _CONTEXT *pCont... 阅读全文
posted @ 2009-03-19 10:38 Fan Zhang 阅读(674) 评论(0) 推荐(0)
摘要:数据传输指令───────────────────────────────────────它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.1. 通用数据传送指令.MOV 传送字或字节.MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压入堆栈.POP 把字弹出堆栈.PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.POPA 把DI,SI,B... 阅读全文
posted @ 2009-03-18 17:33 Fan Zhang 阅读(351) 评论(0) 推荐(0)
摘要:1.得到当前指令寄存器(IP)地址 call temptemp: pop ebp这样ebp里面的值就是temp的地址。2.shell code覆盖缓冲区写shell code时需要覆盖缓冲区,覆盖函数返回地址,应选择call esp 或jump esp的地址。call esp和jump esp在程序中会有很多,搜索相应地址,填入将覆盖的地址。这样jump esp或者ca... 阅读全文
posted @ 2009-03-18 13:11 Fan Zhang 阅读(279) 评论(0) 推荐(0)
摘要:想学习 阅读全文
posted @ 2009-03-18 00:05 Fan Zhang 阅读(163) 评论(0) 推荐(0)
摘要:1.点击M图标,进入内存查看。 可以找出PE header 阅读全文
posted @ 2009-03-17 23:57 Fan Zhang 阅读(220) 评论(0) 推荐(0)
摘要:修改自https://forum.eviloctal.com/thread-28859-1-1.html在VC6编译通过#include #include // 保存原始的6个字节代码BYTE orig_code[6] = {0x90, 0x90, 0x90, 0x90, 0x90,0x90};// JMP 0xXXXXXXXXBYTE hook_code[5] = { 0xe9, 0, 0, 0... 阅读全文
posted @ 2009-03-17 18:39 Fan Zhang 阅读(240) 评论(0) 推荐(0)
摘要:hook有很多种形式,这里分析inline hook api这种形式的hook只针对被hook的进程,而不会影响到其他进程。例如,某个进程用到了MessageBox这个API,程序希望改变原有MessageBox这个函数的行为,可以进行这种hook。Inline hook有个几种方式1.先执行hook函数,然后再执行原API。2.先执行原API,再执行hook函数。需要了解的几个知识点:1.如果在... 阅读全文
posted @ 2009-03-16 17:56 Fan Zhang 阅读(373) 评论(0) 推荐(0)
摘要:1. offset关键字的认识push offset s1;push s1;的区别:push offset s1;//这个是将s1的这个符号的地址push内存push s1//这个将s1这个符号认为一个DWORD地址2.VC中内嵌汇编注意地方(1)引用全局函数、变量mov dwTemp,offset XXXX(2)应用局部变量lea eax,local_buffermov dwTemp,e... 阅读全文
posted @ 2009-03-16 17:46 Fan Zhang 阅读(346) 评论(0) 推荐(0)
摘要:Tree Control控件使用此控件一般先将“Has buttons”、"Has lines"、"Lines at root"属性设置上。WTL、MFC等库封装了InsertItem函数,原理是填好了TVINSERTSTRUCT数据结构,然后向控件发送TVM_INSERTITEM消息。最简单的InsertItem函数:HTREEITEM InsertItem( LPCTSTR lpszIt... 阅读全文
posted @ 2009-03-10 16:33 Fan Zhang 阅读(428) 评论(0) 推荐(0)
摘要:Owner Drawer 和 Custom Draw1.Owner Drawer有些控件支持Owner Drawer属性,如Button。如果控件的这个属性被设为TRUE,则程序员需要负责绘制这个控件。这样可以绘制与默认控件不同的形状,如绘制特殊形状的Button。Owner Draw的控件会给父对话框WM_DRAWITEM、WM_COMPAREITEM、WM_MEASUREITEM等消息。2.C... 阅读全文
posted @ 2009-03-10 10:57 Fan Zhang 阅读(390) 评论(0) 推荐(0)
摘要:WM_NOTIFY消息和WM_COMMAND消息在一个对话框中,子控件可以有两种方式与父对话框通信。1.向父对话框发送WM_COMMAND消息,但这种消息传递的信息量比较少。2.向父对话框发送WM_NOTIFY消息,信息量比较大。idCtrl = (int) wParam; pnmh = (LPNMHDR) lParam; pnmh->code可以得到notify码,一般是NM_XX的宏... 阅读全文
posted @ 2009-03-09 23:30 Fan Zhang 阅读(455) 评论(0) 推荐(0)
摘要:WM_NOTIFY消息和WM_COMMAND消息在一个对话框中,子控件可以有两种方式与父对话框通信。1.向父对话框发送WM_COMMAND消息,但这种消息传递的信息量比较少。2.向父对话框发送WM_NOTIFY消息,信息量比较大。idCtrl = (int) wParam; pnmh = (LPNMHDR) lParam; //也不一定是NMHDR,也有可能是一个包含NMHDR结构的数据... 阅读全文
posted @ 2009-03-09 17:09 Fan Zhang 阅读(794) 评论(0) 推荐(0)
摘要:这部分介绍如何编写Rendering Plug-Ins。这个plug-in是一个COM组件,需要向系统提供一个IPrintOemUni2接口的COM组件。其中比较重要的函数是:1.EnableDriver2.DisableDriver在EnableDriver中需要注册一组函数指针数组,这些函数用来hook中相应的DDI解释部分。这样就可以改变默认Universal Printer Driver的... 阅读全文
posted @ 2009-03-08 23:48 Fan Zhang 阅读(4268) 评论(0) 推荐(1)
摘要:在Windows中,打印机驱动的作用是编写一组接口。应用程序调用的GDI函数会变成相应的DDI函数,打印机驱动提供的这组接口负责将DDI函数转变为打印机识别的的指令。至于是通过网口、串口等接口与真实打印机相连接,这是Printer Moniter的职责,而不是Printer Driver的职责。打印机驱动一般分为两个部分。1.printer graphics DLL 2.Printer Inter... 阅读全文
posted @ 2009-03-08 23:33 Fan Zhang 阅读(9980) 评论(1) 推荐(0)
摘要:1.模式对话框DialogBoxDialogBoxParam这连个函数区别在于是否为WM_INITDIALOG消息传入一个参数。2.无模式对话框CreateDialogCreateDialogParam对于Property Sheet的各个Sheet,都要用CreateDialogParam创建,并返回一个窗口句柄。然后对这个句柄设置SetWindowLong的GWL_ID设置。 阅读全文
posted @ 2009-03-06 18:21 Fan Zhang 阅读(355) 评论(0) 推荐(0)
摘要:Message Crackers是Platform SDK提供的一组封装消息映射的宏,使用的时候需要包含头文件windowsx.h。传统消息映射映射使用一个大的的switch...case组合,这样会代码很臃肿。MFC的框架很好的解决了这个问题,但是有时候开发我们想只用纯SDK开发,这时候使用Message Crackers提供的宏则是一个不错的选择。消息映射用HANDLE_MSG宏LRESULT... 阅读全文
posted @ 2009-03-06 14:54 Fan Zhang 阅读(337) 评论(0) 推荐(0)
摘要:控件编程一般指的是在对话框中,程序员对控件的控制。WTL提供了几种灵活的做法。 连接一个CWindow对象这个方法就是用GetDlgItem得到控件的窗口句柄,然后将这个句柄通过Attach到控件的类中,如CEdit,CButton等。 包容器窗口(CContainedWindow)这个方法其实是子例化的简单版本。如果子例化,必须编写一个CWindow的子类。但这种方法,不用编写子类就可以达到修... 阅读全文
posted @ 2009-03-06 00:45 Fan Zhang 阅读(380) 评论(0) 推荐(0)
摘要:1.Flashgothttp://addons.mozine.cn/firefox/72.Foxmarks Bookmark Synchronizer(书签同步)https://addons.mozilla.org/en-US/firefox/addon/24103.ScribeFire(用来编写离线博客)https://addons.mozilla.org/en-US/firefox/addon... 阅读全文
posted @ 2009-03-04 11:34 Fan Zhang 阅读(236) 评论(0) 推荐(0)
摘要:Windows快速显示桌面快捷键:win+DVC跳到定义:F12VC转到汇编:Ctrl+F11...F2:设置断点,只要在光标定位的位置(上图中灰色条)按F2键即可,再按一次F2键则会删除断点。(相当于 SoftICE 中的 F9)F8:单步步过。每按一次这个键执行一条反汇编窗口中的一条指令,遇到 CALL 等子程序不进入其代码。(相当于 SoftICE 中的 F10)F7:单步步入。功能同单步步... 阅读全文
posted @ 2009-03-01 11:22 Fan Zhang 阅读(201) 评论(0) 推荐(0)