逆向学习笔记二

逆向分析学习笔记旨在与小伙伴们分享小编们的学习心得,主要为一些短小但又精华的小技巧,具体如下:

[[109347]]

一、PE文件各区段解释(区段名称跟功能没有必然关系,这里只是说明常见的定义):

.code或.text段:存放程序的代码数据。

.data段:存放程序运行使用的数据。

.rdata或.idata段:程序的导入表数据。

.edata段:程序的导出表所在的节。

.rsrc段 :程序资源节,为多层的二叉排序树,节点指向PE文件的各种类型资源(图标、对话框、菜单等)。

.reloc段:重定位表所在的节,当程序的加载基址被占用时,要重新分配加载基址,重定位表就用来处理由此产生的问题,加载基址改变之后,程序里的有些数据(如部分全局变量等)地址是写死的,程序加载时将这些数据的地址更新,重定位表就用来存放需要重定位的数据信息。

二、Windbg界面虽然不怎么友好(看雪提供有Windbg高亮插件),偶尔也是可以用来分析应用层程序的,但是Windbg刚加载程序时是在系统断点处断下的,可以载入程序之后在命令行设置断点bp $exentry,再运行就会在程序的入口点断下的。

三、将Windbg设置为默认调试器的方法为在命令行转到Windbg程序的目录下,输入Windbg –I,如果Windbg.exe的目录已经添加到了系统环境变量里,就不用再Cd进Windbg程序的目录了。设置默认调试器可以在程序出现异常时自动挂载程序到出异常的位置,在调试漏洞Poc时非常有用,如果Poc触发了异常就会自动调用Windbg到出问题的代码处。

四、Windbg进行本地调试时需要将系统的调试开关打开,命令为:bcdedit -debug on ,重启生效,同理:bcdedit -debug off为关闭调试开关。

五、使用Windbg进行源代码调试驱动程序时必须首先安装与系统相对应的符号文件,如果驱动程序对应的源码名称为QS2HU4.c,在驱动的入口设置断点的命令为bp QS2HU4!DriverEntry,其中QS2HU4为源码文件名、DriverEntry为驱动的入口函数名(相当于C程序中的Main函数),使用WinDbg打开QS2HU4.c文件之后再加载驱动,就会在源码中DriverEntry函数哪一行断下。(Windbg根据符号文件找出DriverEntry函数位置~)。

六、Windbg调试驱动程序出现蓝屏时,可以根据提示输入并执行!analysis -v,查看系统崩溃的详细信息,比如错误码C0000005代表非法内存访问等,虽然也能将定位到出现错误的源代码中的行或具体的某句汇编指令,但是情景复杂的情况往往需要进行栈回溯等等方法寻找出错的根源。

七、Windbg中查看错误码含义的指令为!error 错误码。例如!error 2。

八、栈溢出主要有覆盖返回地址、覆盖虚表指针、覆盖SEH异常处理链表等形式。

九、堆溢出一般发生在指针拆卸出错,可造成固定地址写任意数据、任意地址写固定数据、任意地址写任意数据等,目前此类型漏洞在Windows系列操作系统中发生的不多,在xp sp2之前的操作系统可以通过向系统关键地址处如进程控制块中的指针等。Ps:路由器操作系统中利用堆溢出漏洞进行拒绝服务攻击甚至是远程代码执行还很常见。

十、为了绕过Windows xp sp2及以上操作系统的dep保护机制,可以利用Immunity Debugger调试器的mona插件可以自动生成Rop链(好像是findantidep插件的升级版),当然可能还需要进行手工调试修正,首先把mona插件的python脚本下到手之后放到Immunity Debugger的plugin目录下即可。

十一、在Immunity Debugger的命令行输入!mona rop -m msvcr71.dll -n(前提是笔记十)。-m选项代表从后面的msvcr71.dll中获取rop链,-n代表过滤掉null byte,也就是“X00″,避免Rop数据被类似strcpy的字符串拷贝函数拷贝时被截断出错,命令执行之后就可以得到ruby、python等各种语言格式的Rop链啦~

十二、在使用Immunity Debugger的mona插件时,注意生成的Rop链中如果带有Ascll字样,代表构成Rop的这些数组的每一个字节的十六进制值都是小于0×80(128)的,也就是在Ascll字符表示范围内,使用这种Rop链的一个好处就是可以避免MultiByteToWideChar和WideCharToMutiByte函数对输入数据的ANSIC与宽字符之间的转换,如果漏洞利用调试过程中自己的利用代码出现了类似的小意外不妨从这里找找原因。

十三、IDA:有时候感觉用IDA的图形视图看汇编代码真是一种享受,不过IDA的强大之处还不止此,不仅可以对字符串、函数找到其交叉参考(查看该字符串或函数的调用情况,便于追根溯源),还有出色的代码标注功能及N多强大的插件(⊙o⊙)哦,比如:hexray……

十四、IDA的hexray插件功能非常强大,可以将汇编代码反编译成的类c语言的伪代码,用法也非常简单:在某调用函数反汇编代码的图形视图按下F5键就有惊喜(⊙o⊙)哦(在反汇编代码视图中光标选定位置F5之后就会得到光标所在函数的反编译代码),这技术还不是非常成熟,但是IDA反编译出的结果还算准确,测试时可以把int 3指令反编译成debugbreak()。(最好不要滥用该技能,建议老老实实的看汇编代码,慢慢打基础)。

十五、IDA以静态反汇编出名,也可以进行调试分析的,看菜单工具栏选项或F9快捷键体验一下吧,个人感觉效果、功能虽不如od的动态调试,图形视图下的调试还算不错的,结合Windbg调试就更爽了。。。

十六、如果一些窗体程序使用起来不合你的胃口,比如说对话框太小了、图片太丑了,先不用考虑放弃这个程序,试试ResHacker、eXeScope等资源编辑工具吧,操作简单,还能将一些灰色按钮的限制功能取消掉(找到相应的属性,修改之后再Rebuild),也是进行汉化操作等的利器。

十七、程序加载到内存时需要根据导入表的结构将程序运行所需要的API函数地址填充到IAT(导入函数地址表)的地址,程序运行时导入表的结构是用不到的,所以一些外壳程序会把导入表结构销毁掉,如果在脱壳过程中对其进行Dump内存镜像的操作之后,得到的程序就没有导入表结构,无法提供程序运行时的API地址信息,导致出错。这也就是为什么Dump内存镜像之后要进行导入表修复操作。

十八、硬件断点:常用的CPU都有8个调试寄存器Dr0-Dr7,其中Dr0-Dr3用于存放设置硬件断点的地址(所以硬件断点最多只能设置四个),Dr4-Dr5一般用于保留,Dr6-Dr7用于指示硬件断点的设置个数及属性(读、写中断)等。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/121471.html<

(0)
管理的头像管理
上一篇2025-02-21 21:42
下一篇 2025-02-21 21:43

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注