逆向学习笔记二

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

[[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

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

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