调试
immortal_mcl
这个作者很懒,什么都没留下…
展开
-
OD常用断点大全
<br />OD常用断点 <br />常用断点(OD中) <br />拦截窗口: <br />bp CreateWindow 创建窗口 <br />bp CreateWindowEx(A) 创建窗口 <br />bp ShowWindow 显示窗口 <br />bp UpdateWindow 更新窗口 <br />bp GetWindowText(A) 获取窗口文本 <br />拦截消息框: <br />bp MessageBox(A) 创建消息框 <br />bp MessageBoxExA 创建消息框转载 2010-10-03 21:56:00 · 782 阅读 · 0 评论 -
[教程]逆向反汇编第三课
<br />说完利用堆栈传递参数了,下面该说说使用寄存器传递参数的话题了.寄存器传递传输的方式并没有一个标准,所有与平台相关的方法都是由IDE(也就是编译器)开发人员制定的.尽管没有统一的标准,但绝大多数编译器提供商都在不对兼容性声明的情况下,遵循相应的规范,吉fastcall规范._fastcall顾名思义,特点就是快,因为他是靠寄存器来传递参数的.<br /> 不同编译器实现的fastcall稍有不同,如Microsoft Visual C++编译器采用fastcall规范传递参数时,最左边的转载 2010-10-10 15:56:00 · 788 阅读 · 0 评论 -
[教程]逆向反汇编第八课
在进行软件分析的过程中,经常需要计算转移指令机器码或修改指定的代码.虽然许许多多的辅助工具同样可以做到这些事,但是掌握其原理还是必要的.根据转移的距离远近,还可以分为以下几类:.短转移:无条件转移和条件转移的机器码都是两个字节.转移范围是-128~+127字节.长转移:无条件转移的机器码是5哥字节,条件转移的机器码是6哥字节.这是因为条件转移要用2个字节表示其转移类型(如je jg和jns),其他4哥字节表示转移偏移量.无条件转移要用2个字节表示其转移(如je jg和jns),其他4个字节表示转移偏移量.转转载 2010-10-10 16:11:00 · 1093 阅读 · 0 评论 -
[教程]逆向反汇编第六课
<br />既然要玩逆向,驱动那我们就算不懂但至少要了解下C/C++语言,C++是一门支持OO的语言,对面想对象的软件开发提供了丰富的支持库.但要高效 正确的使用C++中的继承 多态等语言的特性,必须对这些特性性的底层实现有一定得了解. <br /><br /> 其实就核心概念而言,C++的对象模型的核心概念并不多,但最核心的是虚函数.虚函数是在程序运行时刻定义的函数,虚函数的地址是不能在编译时刻确定的,它只能在调用即将进行之前加以确定.对所有虚函数引用通常放在一个专用数组--虚函数表中,每个至少使用转载 2010-10-10 16:04:00 · 942 阅读 · 0 评论 -
[教程]逆向反汇编第四课
<br />在各个语言中有数据结构这个东东,它是计算机存储 组织数据的方式.逆向分析时,确定了数据结构后,算法就容易得到了.有时候事情当然也会反着来,根据特定的算法来判断数据结构.<br /> 先看局部变量的<br /> 局部变量十亿个函数内部定义的变量,只有在函数内才能使用,如计数器,临时变量等.使用局部变量带来的好处,使程序模块化封装变的可能.从汇编语言角度看,局部变量就是在堆栈中进行分配,函数执行完毕后释放这些堆栈,或者直接把局部变量放在寄存器中,我在视频中也告诉各位把寄存器可以转载 2010-10-10 16:00:00 · 1188 阅读 · 1 评论 -
[教程]逆向反汇编第十课
<br />循环是高级语言中可以进行反向引用的一种语言形式,其他类型的分支语句(比如IF-THEN-ELSE等)都是由低向高地址区域走的.因此,通过这点可以较方便的将循环语句识别出来.如果确定某段代码是循环,就可以分析其计数器,一般是用ecx寄存器做计数器,也有用其他方法来控制循环的,如/"test eax,eax/"等. <br />看一个简单的循环代码: <br />xoreax,eax;eax清零 @@: incecx;计数 .... cmpecx,0A;循环10次 ;重复 <br转载 2010-10-10 16:18:00 · 633 阅读 · 0 评论 -
[教程]逆向反汇编第七课
<br />在以C为代表的高级语言中用if-then-else,switch-case等高级语句来构成程序的判断流程, <br />不仅条理清晰且维护性还是不错的.而汇编语言的代码则复杂得多,会看到cmp等指令的后面跟着 各类的跳转指令jz jnz等.识别关键跳转是软件破解的一个重要技能,许多软件用一个或多个跳转 来实现注册或非注册. <br />下面先说说if-then-else语句 <br />将语句if-then-else语句编译代码后,整数用cmp指令比较,而浮点值则是使用fcom fcomp比 较转载 2010-10-10 16:07:00 · 2060 阅读 · 1 评论 -
[教程]逆向反汇编第五课
<br />全局变量作用于整个程序,一直都存在这个我们稍微了解任何一门编程语言都知道,他放在全局变量的内存区;而局部变量则是存在于函数的堆栈区,当函数调用结束后便消失.在大多数程序中,常数一般放在全局变量中,如一些注册版标记 测试版标记等.<br /> 在大多数情况下,在汇编代码中识别全局变量比其他结构要容易的多.全局变量通常位于数据块(.data)的一个固定地址上,当程序需要访问全局变量时,一般会用一个固定的硬编码的地址直接对内存寻址.比如说这样:mov eax,dword ptr [4084c0h转载 2010-10-10 16:02:00 · 875 阅读 · 0 评论 -
[教程]逆向反汇编第二课
既然说的是函数,那么参数肯定不可缺少了,函数是有参数的,可是他们的参数传递却并不全部相同.函数传递参数有三种方式:堆栈方式 寄存器方式和通过全局变量进行隐含参数的传递.如果参数是通过堆栈传递的,就需要定义参数在堆栈中的顺序,并约定函数被调用后,由谁来平衡堆栈如果参数是通过寄存器传递的,就要确定信息存放在那个寄存器中.每种机制都有优缺点,而且这个还是和使用的语言也有关系的. 利用堆栈传递参数 堆栈是一种"先进后出"的存储区,栈顶指针ESP之象堆栈中第一个可用的数据项.调用函数时,调用者转载 2010-10-10 15:50:00 · 1016 阅读 · 0 评论 -
[教程]逆向反汇编第一课
<br />开篇总要说点什么,我也避免不了这种套俗.老生常谈还是那些东西.谁让我们现在的机子大部分都是32位的系统呢.当然也有不少人使用64的了.既然大部分都在32的机子,那我们还是说32咯.<br />在编写32位机子的应用程序的时候,都有一个启动函数WinMain,不管是C或D还是E,但是Windows程序执行并不是从这个函数开始执行的,首先被执行的是启动函数的相关代码,这段代码是由IDE生成的,也就是编译器.首先由启动代码完成一些初始化的进程,再调用WinMain函数.<br />对已C/C++的程序转载 2010-10-10 15:48:00 · 1054 阅读 · 0 评论 -
OD常用断点大全
<br />OD常用断点 <br />常用断点(OD中) <br />拦截窗口: <br />bp CreateWindow 创建窗口 <br />bp CreateWindowEx(A) 创建窗口 <br />bp ShowWindow 显示窗口 <br />bp UpdateWindow 更新窗口 <br />bp GetWindowText(A) 获取窗口文本 <br />拦截消息框: <br />bp MessageBox(A) 创建消息框 <br />bp MessageBoxExA 创建消息框转载 2010-10-03 21:56:00 · 4006 阅读 · 0 评论 -
[教程]逆向反汇编第九课
<br />条件设置指令的形式是:SETcc r/m8,其中r/m8是表示8位寄存器或单字节内存单元. <br />条件设置指令根据处理器定义的16种条件cc,测试一些标志位,然后把结果记录到目标操作数中.当条件满足时,目标操作数会被置1,否则置0.这16种条件与条件转移指令jcc中的条件是一样的. <br />条件设置指令可以用来消除程序中的转移指令.在C语言里,常会见到执行以下功能的语句: <br />c=(a<B)?C1:C2; <br />如果允许出现条件分支,编译器会产生如下的代码或者是非常类似的转载 2010-10-10 16:16:00 · 660 阅读 · 0 评论