----逆向反汇编
文章平均质量分 83
eGanWo
联系方式:641290869@qq.com
展开
-
逆向反汇编--- 虚函数特征识别与虚表的建立
一、虚函数重要性虚函数是面向对象的重要组成部分,是多态的基础,如果定义了虚函数但是没有定义构造函数,编译器必须提供默认的构造函数(因为必须要初始化虚表指针);二、虚函数特性与识别虚表指针一定是在对象的首地址的前4个字节(固定的,且4字节,这一点很重要),虚表指针指向的虚函数表的首地址,虚函数作为成员函数使用; 对于开发者来说,虚表和虚表指针都是隐藏的;如果类没有虚函数,构造的时候不...原创 2019-03-08 23:14:32 · 1008 阅读 · 0 评论 -
如何将汇编语言逆向成为C语言
一、应用场景 逆向过程中往往需要将汇编语言逆向成为C语言,IDA是一个很好的工具,给我们逆向工作带来了很大的便利,但是,如果IDA没有识别出来代码呢,jumpOUT,我们需要掌握将汇编语言直接转成C。二、反汇编技巧(摘取自 天书夜读) 2.1 首先,将流程代码与数据计算的代码分开,我们使用 F: 用于标识 调用函数或者作为函数被调用,出栈、入栈...原创 2019-05-12 17:18:00 · 30405 阅读 · 0 评论 -
逆向反汇编: 内存操作、常用指令操作数、寻址方式
一、常用指令:MOV指令、ADD指令、SUB指令、AND指令、OR指令、XOR指令、NOT指令MOV 的语法: MOV r/mX,rX r 通用寄存器,X 表示位数可以8、16、32 MOV rX,r/mX m 代表内存 MOV rX, immX imm 代表立即数1、源操作数可以是立即数、通用寄存器、段寄存器、或者内存单元.2、目标操作数...原创 2019-04-24 01:05:16 · 2521 阅读 · 0 评论 -
逆向反汇编:从C/C++到汇编 (持续更新)
各位读者,总结如有错误请指正,谢谢。2.1 常见指令2.1.1堆栈相关命令Push:把一个32位操作压入堆栈中。Esp -4,我们认为栈顶是最小的区域;Pop:与push相反,一个数据出栈;sub:减法:第一个是被减数的寄存器,第二个参数是减数;Add:加法:Ret:返回,自动的弹出返回地址;Call:调用函数。将下一条指令的地址压入堆栈中,然后指向它调用的函数的开头;区别:...原创 2018-09-09 11:29:57 · 4754 阅读 · 0 评论 -
堆栈
1、堆栈是系统启动时已经分配好的一段内存(4G),供程序执行使用;内存窗口查看:dd [FS] 可以查看得到,也可以在堆栈窗口上下拉到顶,就可以看到当前执行的程序分配的栈顶和栈底;2、堆栈从高地址向低地址使用;3、esp: 栈指针寄存器,表示当前程序使用堆栈到了那里;从堆栈中可以看到当前程序执行的记录;4、mov DWORD PTR DS:[esp],1 ;向堆栈中压...原创 2019-04-21 17:41:37 · 224 阅读 · 0 评论 -
C++ 友元
1、友元 是C++中的垃圾,破坏了封装,很有可能是因为C++设计者想要兼容以前已经大量存在的面向过程的代码;不推荐使用;2、友元是单向的,友元函数可以调用当前类的成员;3、友元函数和类的成员函数的区别(1) 成员函数有this指针,而友元函数没有this指针(2) 友元函数是不能被继承的,就像父亲的朋友未必是儿子的朋友4、什么情况下需要友元函数:(1) 运算符重载的某...原创 2019-04-21 16:41:29 · 1267 阅读 · 0 评论 -
C结构体与C++类的本质与区别
1、从汇编上看,C与C++本质是一样的,只是C++由编译器添加了一些新的东西;2、结构体和类作为参数传递时,一样是存于栈区,由esp-0xAA来拉高栈顶,然后一个个成员赋值到栈顶,如果成员多了,赋值多了,效率就会很低,所以,参数和返回值 最好是使用指针进行传参;如果是基本类型数据,使用的是Push... ;3、体会封装:封装就是将函数定义在结构体中,成员函数能直接使用成员函数,默认this...原创 2019-04-21 11:30:04 · 810 阅读 · 0 评论 -
OD 脚本的编写与思考
一、OD脚本 OD脚本语言是一种类汇编的语法,将OD里面的操作以命令的方式组织起来;二、OD脚本语法 命令有很多,但是记住一些常用的缩写,记住也就不难了(多看多用,自然就熟悉) BP: break Point HW:hardWare M: memory C: clear CND: condtio...原创 2019-04-03 00:02:27 · 2462 阅读 · 0 评论 -
逆向反汇编:X86常用的寄存器及一般使用的场景
一、数据寄存器 1.1 EAX: Acculturator 累加寄存器(32位), AX 算术运算主要寄存器(高16位),可作为函数返回值; 1.2 EBX:base 基址寄存器,存放指针,内存寻址时存放的基址,寄存器间接寻址方式; 1.3 ECX:Count 计数寄存器,可做thiscal 中this指针存放的位置,可做Rep前缀指令和Loop指令的内定寄存器...原创 2019-03-17 21:30:09 · 702 阅读 · 0 评论 -
逆向反汇编: X86进入函数的时候到底发生了什么?
一、引入问题 随便问一个软件开发人员,函数调用的时候发生了什么,大家都会说出,“函数先保存环境,再执行函数,再恢复环境,再返回”,这样是不错,但是不够具体,我们要知道函数的调用约定、帧栈的形成、平栈、函数的识别等具体的细节;二、函数调用完整的代码及汇编函数调用部分: bool bFlag = testFunction(i, l);00D2...原创 2019-03-15 23:16:23 · 393 阅读 · 0 评论 -
逆向反汇编 --寄存器的种类和用法(转)
一、4个数据寄存器(EAX、EBX、ECX和EDX)EAX:rep 每次初始化的内容、函数返回值存储、系统调用标号;ECX:rep 循环的额次数;fastcall的第一个参数;EDX:fastcall的第二个参数;EBX:32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取,不会影响高16位的数据。这些低16位寄存器分别命名为:AX、BX、CX和D...转载 2019-02-10 12:06:32 · 1576 阅读 · 0 评论 -
IDA 逆向代码--- 指针类型的使用
场景:指针、地址、数组访问、一维二维数组转换在IDA F5 之后的伪代码里面时常被用到;理解:指针指向的是地址,指针表示的是 从某个地址开始 按照 指定数据类型 读取数据;如下函数定义: int v12; // r3@32 unsigned int v39[96]= { //int v39; // [sp+94h] [bp-1074h]@1 ...原创 2019-09-07 16:15:15 · 1729 阅读 · 0 评论