逆向笔记【贰】

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

  1. .code.text段:存放程序的代码数据。
  2. .data段:存放程序运行使用的数据。
  3. .rdata.idata段:程序的导入表数据。
  4. .edata段:程序的导出表所在的节。
  5. .rsrc段 :程序资源节,为多层的二叉排序树,节点指向PE文件的各种类型资源(图标、对话框、菜单等)。
  6. .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的这些数组的每一个字节的十六进制值都是小于0x80(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用于指示硬件断点的设置个数及属性(读、写中断)等。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript逆向工程涉及到逆向分析、代码还原、代码修改等多个方面,其中Webpack作为一个重要的静态模块打包器,也是逆向工程中需要重点关注的一部分。以下是一些关于Webpack逆向笔记: 1. Webpack的打包过程是从入口文件开始的,Webpack会递归地遍历所有依赖模块,并将它们打包成一个或多个Bundle文件。因此,逆向工程的第一步就是找到Webpack打包的入口文件。 2. 在入口文件中,Webpack会通过require或import语句加载其他模块,并递归地遍历所有依赖模块。因此,我们可以通过分析入口文件来了解应用的整体结构和模块依赖关系。 3. 在Webpack的打包过程中,每个模块都会被赋予一个唯一的标识符,这个标识符可以通过module.id来获取。因此,我们可以通过分析打包后的代码,来了解每个模块的标识符和依赖关系。 4. 在Webpack的打包过程中,Loader和Plugin是非常重要的扩展机制,它们可以对模块进行转换和优化。因此,我们可以通过分析Loader和Plugin的源代码,来了解它们的作用和实现原理。 5. 在逆向工程中,我们可以使用Webpack的source-map选项来生成源映射文件,从而方便我们进行代码还原和调试。同时,我们也可以使用Webpack的devtool选项来设置不同的调试工具,以便更好地进行逆向分析和调试。 总的来说,Webpack作为静态模块打包器,在JavaScript逆向工程中扮演着重要的角色。通过对Webpack的逆向分析,我们可以更加深入地了解应用的整体结构和模块依赖关系,从而更好地进行代码还原和调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值