逆向笔记【贰】

一、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用于指示硬件断点的设置个数及属性(读、写中断)等。

<think>好的,用户想查找关于逆向工程、反编译的笔记或资料。首先,我需要根据提供的引用内容来整理相关信息。引用1提到了逆向工程的基本概念和应用,引用2讨论了代码混淆和专利保护,引用3详细介绍了Java的jar命令用法,这可能在反编译过程中用到。 用户可能需要具体的操作步骤、工具推荐或者学习资源。比如,如何反编译Java程序的步骤,或者常用的反编译工具如JD-GUI、FernFlower。此外,混淆技术如ProGuard的使用方法,以及专利保护的重要性也是相关点。 还要考虑用户可能的背景,可能是开发者或安全研究人员,需要实用信息。因此,回答中应包含工具、步骤、法律保护方法,并引用提供的资料来支持。最后,生成相关问题时要覆盖工具使用、混淆技术、法律保护和应用场景等方面。</think>### 逆向工程与反编译相关资料整理 #### 1. 逆向工程基础概念 逆向工程指通过分析软件系统理解其内部逻辑和架构,常用于性能优化、漏洞挖掘或代码重构[^1]。例如,分析Java程序的`.class`文件时,可通过反编译工具还原部分源代码逻辑[^2]。 #### 2. Java反编译技术 Java程序的逆向工程通常涉及以下步骤: - **使用`jar`命令操作JAR包**:例如解压JAR包的命令为: ```bash jar -xvf yourfile.jar -C 目标目录 ``` 参数`-x`表示解压,`-v`显示详细信息,`-f`指定文件名[^3]。 - **反编译工具**:常用工具如JD-GUI、FernFlower等,可将`.class`文件转换为可读的Java代码。 #### 3. 代码保护与混淆 - **混淆技术**:通过工具(如ProGuard)重命名类/方法名,增加逆向难度。例如: ```java // 混淆前 public class PaymentService { ... } // 混淆后 public class a { ... } ``` - **专利保护**:核心算法或创新点可通过申请专利保护,避免被逆向后直接复制[^2]。 #### 4. 反编译实战案例 - **查看JAR包内容**: ```bash jar -tf yourfile.jar # 列出JAR包内文件列表[^3] ``` - **生成索引文件**: ```bash jar -i yourfile.jar # 创建索引以加快类加载速度 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值