随笔分类 -  汇编

反调试技术揭秘(转)
摘要:在调试一些病毒程序的时候,可能会碰到一些反调试技术,也就是说,被调试的程序可以检测到自己是否被调试器附加了,如果探知自己正在被调试,肯定是有人试图反汇编啦之类的方法破解自己。为了了解如何破解反调试技术,首先我们来看看反调试技术。一、Windows API方法Win32提供了两个API, IsDebuggerPresent和CheckRemoteDebuggerPresent可以用来检测当前进程是否正在被调试,以IsDebuggerPresent函数为例,例子如下:BOOL ret = IsDebuggerPresent();printf("ret = %d\n", ret) 阅读全文

posted @ 2013-03-04 20:49 原来... 阅读(8103) 评论(0) 推荐(2)

SEH链和展开操作
摘要:SEH链和展开操作每次我们定义了一个新的SEH异常处理回调函数,EXCEPTION_REGISTRATION结构的prev字段都被要求填写上一个EXCEPTION_REGISTRATION结构的地址,随着应用程序对模块的调用一层层深入下去的时候,那么最后回调函数会形成一个SEH链当程序中有多个线程在运行的时候,每个线程中都会存在各自的SEH链,这些SEH链中指定了多个回调函数,除他们以外,系统中可能还会存在一个全局性的筛选器,再者如果进程被调试,调试器进程也相当于一个异常处理的程序存在.那么当一个异常发生的时候,系统究竟该听谁的呢?在这种情况下,系统按一定的步骤选择一个回调函数并执行他,如果这 阅读全文

posted @ 2012-05-23 16:49 原来... 阅读(1321) 评论(0) 推荐(0)

为什么 远程钩子 必须使用动态链接库dll(而且是.data? 段共享的动态链接库)
摘要:动太链接库可以被所有的进程调用,如果不是动态链接库就只能被当前的进程调用.首先在DLL中会有一个SetHookWindowEx函数它会设置一个全局的的钩子和当前所有的线程相关联.如果此时有一个进程中的一个线程给系统发送了消息,操作系统就会去检查这个线程是否已经安装了钩子过程,如果说发现安装了全局钩子过程,于是就会找到包含了这个钩子过程的动态链接库.将这个动态链接库映射到这个进程的地址空间当中。然后再调用钩子过程函数。将系统消息传给动态链接库中定义的钩子过程函数。 阅读全文

posted @ 2012-05-19 16:29 原来... 阅读(413) 评论(0) 推荐(0)

为什么被除数位数是除数位数的2倍
摘要:汇编中,我们都知道div除法指令,要求被除数默认存放在ax,或者dx和ax中,而且要求被除数的位数,必须是除数的2倍,比如说,除数位8位,被除数就为16位,为什么被除数的位数一定要为除数的2倍呢,有种解释是这样的: 因为CPU只会做加法运算,把其它一切的算法都转换成加法,比如说,除数 就先转换加法,例如36/6 当CPU看到这个运算时,就会这样想,需要多少个6 相加才能得到36呢,然后CPU就从1个6 ,2个6...........这样一种算下去,终于最后发现原来是6个6啊,从这我们可以看出,CPU是不断的用除数相加,知道找到结果为止,这就出现问题了,如果被除数不是除数位数的2倍,再相加的过程 阅读全文

posted @ 2012-04-09 12:24 原来... 阅读(802) 评论(0) 推荐(0)

函数参数压栈,栈帧ebp,esp怎样移动的?
摘要:压栈一次esp-4,ebp不变esp是栈顶指针寄存器,堆栈操作只和esp有关比如有一个函数a,有两个参数,一般是这样的PUSH 1 参数2压栈,esp-4PUSH 2 参数1压栈,esp-4CALL a 调用a:PUSH EBP 保存ebpMOV EBP,ESP 改变栈帧,以后访问参数通过ebp,访问局部变量通过espSUB ESP,8 分配局部变量空间...ADD ESP,8POP EBP 恢复ebpRETN 8 返回,esp+8C语句对应汇编语句:例如函数:int aaa(int a,int b){int c;c=a+b;return c;}aaa(1,2);调试版aaa的代码PUSH E 阅读全文

posted @ 2012-03-04 20:54 原来... 阅读(11777) 评论(0) 推荐(0)

堆栈平衡
摘要:先说明。原发者iso9001http://www.ghoffice.com/bbs/read.php?tid-35165.html他提供的地址(当他是个指针好了:P)http://ajiannet.cnblogs.com/下边是我看到的一个很经典对于汇编 。堆栈的说明。通俗易懂。[汇编学习]献给汇编初学者-函数调用堆栈变化分析(转自黑客风云)跟一个朋友谈堆栈的时候 就写下了这段文字,顺便发到这里给需要的看看吧汇编初学者比较头痛的一个问题////////////////////////////////////////////////////////////////////比如 我们有这样一个C函 阅读全文

posted @ 2012-03-01 15:42 原来... 阅读(1397) 评论(0) 推荐(0)

用debug如何查看当前标志寄存器的标志位值?
摘要:-r用这个指令,得到的信息右下角: NV UP EI PL NZ NA PO NC这些符号代表的就是标志寄存器里常用标志位的值。这个是符号值对应表:溢出标志OF(Over flow flag)OV(1)NV(0)方向标志DF(Direction flag)DN(1)UP(0)中断标志IF(Interrupt flag)EI(1)DI(0)符号标志SF(Sign flag)NG(1)PL(0)零标志ZF(Zero flag)ZR(1)NZ(0)辅助标志AF(Auxiliary carry flag)AC(1)NA(0)奇偶标志PF(Parity flag)PE(1)PO(0)进位标志CF(Car 阅读全文

posted @ 2012-02-25 16:56 原来... 阅读(11912) 评论(0) 推荐(1)

导航