反汇编

099

99封情书 提交于 2019-12-13 06:53:52
/* c++问题 C++反汇编 1 为什么两个参数: CList<DATA, DATA> m_list; 2 如何编写可移植性较高的代码? 3 编写较好调试信息:错误报告? 4 保护属性和私有属性对派生类的影响 5 启动时判断哪个端口没有被占用 6 try...catch */ 来源: https://www.cnblogs.com/huafan/p/12032914.html

IDA常用快捷键说明

被刻印的时光 ゝ 提交于 2019-12-10 03:47:09
IDA Pro:交互式反汇编器,是典型的递归下降反汇编器。 导航条: 蓝色 表示常规的指令函数 黑色 节与节之间的间隙 银白色 数据内容 粉色 表示外部导入符号 暗黄色 表示ida未识别的内容 IDA主界面: IDA View三种反汇编视图:文本视图、图表视图、路径视图 Hex View 十六进制窗口 Imports 导入函数窗口 Struceures 结构体窗口 Exports 导出函数窗口 Enums 枚举窗口 Strings 字符串窗口 常用功能及快捷键: 空格键:切换文本视图与图表视图 ESC:返回上一个操作地址 G:搜索地址和符号 N:对符号进行重命名 冒号键:常规注释 分号键:可重复注释 Alt+M:添加标签 Ctrl+M:查看标签 Ctrl+S:查看段的信息 代码数据切换 C-->代码/D-->数据/A-->ascii字符串/U-->解析成未定义的内容 X:查看交叉应用 F5:查看伪代码 Alt+T:搜索文本 Alt+B:搜索十六进制 导入jni.h分析jni库函数。 伪C代码窗口: 右键 comment-注释伪c代码。 copy to -assembly-把伪c代码复制到反汇编窗口的汇编代码。 来源: CSDN 作者: piracy123 链接: https://blog.csdn.net/a916879788/article/details/103460742

汇编与反汇编之小技巧

我是研究僧i 提交于 2019-12-07 09:47:41
汇编与反汇编之小技巧 大家都知道,对于位于当前调试目标中的指令,可以使用WinDBG的u命令进行反汇编。u命令的参数是要反汇编代码的地址值或者符号,如果不指定,那么WinDBG会使用当前程序指针寄存器所指向的代码,例如:0:001> untdll!DbgBreakPoint:7c901230 cc int 37c901231 c3 来源: CSDN 作者: justpub 链接: https://blog.csdn.net/justpub/article/details/2623910

WinDbg分析dump文件介绍

橙三吉。 提交于 2019-12-07 09:47:32
WinDbg 分析dump 文件 介绍 1、WinDbg介绍 WinDbg是微软开发的免费源代码级的调试工具。WinDbg可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。具体界面见下图(图1) 图1:主窗体界面 2、WinDbg 分析dump步骤 2.1 、WinDbg分析dump文件基本上试通过命令的方式,所以先介绍几个相关命令。 1)!analyze : 扩展显示当前异常或bug的信息。一般使用!analyze -v 2) kv : 显示栈信息 3) ub : 向前反汇编,例如: ub (地址) 反汇编当前地址之前的两条指令 4) u : 反汇编,例如: u (地址) 反汇编当前地址以后的9条指令 5) uf <function address> : 反汇编函数 5) .exr: 查看EXCEPTION_RECORD信息 6) .cls : 清屏 。。。。。。。。 2.2、打开Dump格式文件 方式一:通过菜单【File】 -> 【Open Crash dump】 选择dump文件打开, 图2:打开dumpe文件 图3:打开后会打印一些dump的信息 方式二:通过CMD打开Dos命令窗口,切换到WinDbg所在目录,利用命令: WinDbg –z “D:/Lines2009-7-25-22-20-33-900.dmp” 这里只介绍第一种方式操作。 2.3

在WinDBG中查看函数的反汇编代码的命令

假装没事ソ 提交于 2019-12-07 09:45:59
命令 ========== u . u $ip 上面的两个命令是效果是一样的, 反汇编当前$ip地址上的8条命令. uf . uf $ip 上面两个命令的效果是一样的, 反汇编当前$ip地址上的整个函数. ub . ub $ip 反汇编$ip之前的8条指令. ub $ip L2a 反汇编$ip地址之前的42条指令. u $ip $ip+a 反汇编地址$ip到地址$ip+10之间的指令. 注意, 这里包括$ip, 不包括$ip+10。 举例: 来源: CSDN 作者: swanabin 链接: https://blog.csdn.net/swanabin/article/details/22657625

0.IDA-基本的反汇编算法

送分小仙女□ 提交于 2019-12-07 09:38:51
1.线性扫描 原理: 一条指令结束,另一条指令开始 关键: 确定起始位置 流程: 从起始,逐条反汇编指令,直到完成整个代码段 优点: 可覆盖程序的所有代码段 缺陷: 如果代码段中混有数据! gdb windbg objdump均采用线性扫描 2.递归下降 原理: 根据一条指令是否被另一条指令引用来决定是否对其进行反汇编 顺序流指令 直接解析它后面的下一条指令,如MOV、PUSH、POP 条件分支指令 解析它的所有条件路径,如JNZ 无条件分支指令 反汇编器会尝试定位到跳转的目标,但有可能失败(如JMP EAX,EAX在静态环境下无法确认) 函数调用指令 和无条件分支指令相似,如CALL EAX 一般默认会直接反汇编CALL指令后,但如果函数中有意窜改返回地址,那就坑了,如下例子: __declspec(naked) void fun() { __asm { inc DWORD PTR[esp] // 此时esp的内容即为返回地址,我们让它的内容加1 retn } } int _tmain(int argc, _TCHAR* argv[]) { __asm { call fun inc eax // 这一句会被跳过 mov ebx,ebx } return 0; } 上面就不会执行inc eax这一句,也就是inc eax这句其实不应该被反汇编的,应该直接从后一句开始,如果不是inc

windbg 学习----#(从反汇编中搜索符合指定模板的数据)

雨燕双飞 提交于 2019-12-07 09:38:38
语法 # [ Pattern ] [ Address [ L Size ]] 参数 Pattern 指定用于在反汇编代码中搜索的模板。 Pattern 可以包含各种通配符和修饰符。关于该语法的更多信息,查看 字符串通配符语法 。如果在 Pattern 中包含空格,需要将模板用引号括起来。模板是不区分大小写的。如果之前使用过 # 命令,并且省略掉 Pattern ,该命令会使用上一次的模板。 Address 指定搜索开始的地址。该语法的更多信息,查看 地址和地址范围语法 。 Size 指定要搜索的指令数量。如果省略掉 Size ,会一直搜索直到遇到匹配项。 0:000> u ntdll!LdrpDoDebuggerBreak+0x2c: 773d054e cc int 3 773d054f 8975fc mov dword ptr [ebp-4],esi 773d0552 eb0e jmp ntdll!LdrpDoDebuggerBreak+0x40 (773d0562) 773d0554 33c0 xor eax,eax 773d0556 40 inc eax 773d0557 c3 ret 773d0558 8b65e8 mov esp,dword ptr [ebp-18h] 773d055b c745fcfeffffff mov dword ptr [ebp-4]

深度剖析C++析构函数

馋奶兔 提交于 2019-12-07 08:25:12
构造函数和析构函数在C 中意味着生命周期的开始和结束,它们的实现原理相同。由于析构函数往往还设置成虚函数,所以这里我重点介绍下C 析构函数的原理和各种场景。 一、析构函数的作用 当对象的生命周期结束时,会自动调用析构函数,以清理一些资源,比如释放内存、关闭文件、关闭数据库连接等等。 二、析构函数调用的时机 (1)基类析构 我们反汇编下查看上面代码: 从反汇编中可以看出,在对象离开它的作用域时,编译器自动给我们添加了一个析构函数调用的语句。 那我们使用new产生的对象会什么时候调用析构函数呢,这里我们把fun1里对象改成动态生成。 void fun1() { Base *base = new Base(); cout<<“fun1 over”<<endl; } 当我们不使用delete释放内存时,看反汇编的情况 此时,没有任何地方调用Base的析构函数 当我们使用delete释放对象时, void fun1() { Base *base = new Base(); delete base; cout<<“fun1 over”<<endl; } 我们反汇编结果: 这里我们看到析构函数调用了,这是因为当我们使用delete删除对象时,编译器会自动在后面添加一条调用析构函数的语句; 从这里我们也可以看书,C

加密与解密day1

点点圈 提交于 2019-12-04 09:07:46
1.1、静态分析技术和动态分析技术 1.2、字节序 1.3、wow64(可运行32位环境) 1.4、虚拟内存 1.5、汇编引擎和反汇编引擎 1.6、32位程序中函数调用的栈(4.1.2) 1.7、全局变量(4.1.3) 1.8、64位程序中函数调用栈(4.2.2) 1.9、C++中的this_call 1.10、攻击序列号    来源: https://www.cnblogs.com/Ccluck-tian/p/11849258.html

ollydbg入门记录

匿名 (未验证) 提交于 2019-12-03 00:40:02
1.软件窗口说明 OllyDBG 中各个窗口的名称如下图。简单解释一下各个窗口的功能, 反汇编窗口:显示被调试程序的反汇编代码,标题栏上的地址、HEX 数据、反汇编、注释可以通过在窗口中右击出现的菜单 界面选项->隐藏标题 或 显示标题 来进行切换是否显示。用鼠标左键点击注释标签可以切换注释显示的方式。 寄存器窗口:显示当前所选线程的 CPU 寄存器内容。同样点击标签 寄存器 (FPU) 可以切换显示寄存器的方式。 信息窗口:显示反汇编窗口中选中的第一个命令的参数及一些跳转目标地址、字串等。 数据窗口:显示内存或文件的内容。右键菜单可用于切换显示方式。 堆栈窗口:显示当前线程的堆栈。 要调整上面各个窗口的大小的话,只需左键按住边框拖动,等调整好了,重新启动一下 OllyDBG 就可以生效了。 2.软件快捷键 F2 //下断点 F3 //加载一个可执行程序 F4 //程序执行到光标处 F5 //缩小,还原当前窗口 F7 //单步步入 F8 //单步步过 F9 //直接运行程序,遇到断点处,程序会暂停 Ctrl+F2 重新运行程序到起始处,用于重新调试程序 Ctrl+F9 //执行到函数的返回处,用于跳出函数 Alt+F9 //执行到用户代码处,用于快速跳出系统函数 Ctrl+G //输入十六进制地址,快速定位到该地址处 Ctrl+F2 //重新运行当前调试的程序 Alt+F2