IDA逆向小技巧

文章探讨了在逆向工程中,如何通过修改ESP+12的值和将ida.exe重命名跳过检查。重点介绍了如何处理Dword_5545a1地址的数据,通过undefine转换为字节并根据不同内容判断是code还是data,针对加壳代码的识别策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 条件断点

比如判断间接寻址地址[esp+12]的值大于100:

Dword(ESP+12)>100

当eax为0时,会触发断点:

eax = 0
  1. 反调试:将ida.exe改名为run.exe(或者其他名字)可以跳过部分反汇编器的检查。
  2. 地址当作数组时,比如Dword_5545a1[2],5545A1地址处开始的数据被当做dword来处理,取第三个元素。而地址值直接使用时,被当作变量,即Dword_5545a1代表5545a1地址处的值。
  3. 代码或者数据(被加壳导致)不能被识别的处理:先鼠标右键,选择"undefine",然后转换为字节(db),根据内容选择code或者data。
  4. 将地址处的指令反汇编为函数,按p键;将地址处的值反汇编,按c键。
  5. 快速关闭窗口。鼠标放在子窗口中,然后在"菜单"中点击 "close window"按钮。
  6. offset操作符代表取地址操作。
  7. linux下的网络程序,在成功调用accept函数获得返回的客户端socket后,既可以使用recv来接收数据,也可以使用read函数来接收数据。因此,要逆向linux网络程序,如果发现recv断点无效,就要考虑一下,程序是否使用了read函数来读写网络数据。既要在read处设置断点,也不要忘记recv,单单使用recv可能会面临断点无法触发的尴尬境地。综合来看,使用accept函数是比较合适的入口选择。
  8. ida下的寻址方式
    跟第3点类似。如下图所示,mov esi, off_499674指令,该指令是将off_499674地址中的值送入esi寄存器,而不是将499674传入esi寄存器。注意此指令与mov esi, offset_499674的区别。

指令执行后的esi寄存器以及指令的反汇编截图如下:
在这里插入图片描述

一般来说,指令码8b都是内存取值,即将操作数看作地址,从地址中取出该地址的值。be指令码才是取立即数操作。实际执行结果如下图:

在这里插入图片描述

  1. test和jle、jg等组合跳转指令
test edi,edi
jle _ABC

上述代码等价于:

if(edi >= 0)
	goto _ABC

因为test指令会修改ZF和SF标志。

  1. 使用ida修改指令。首先找到修改的代码地址,然后菜单上依次点击"编辑" “Patch Program” “Change Byte”,在打开的指令中,修改相应的机器码,然后依次点击: “编辑” “Patch Program” "Apply patches to input file"即可。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. usercall使用eax,edx,ecx传递3个参数,假若还不够,依次push到堆栈中。usercall跟fastcall差不多。注意,寄存器参数的顺序是eax,edx,ecx,顺序不能出错,有严格要求。
    usercall截图如下:
    在这里插入图片描述

  2. 对vmware虚拟机远程gdb调试时,则localhost字段填写的是虚拟机的网卡ip地址,而不是虚拟机中操作系统的ip地址。

  3. vmware下使用vmx调试,比如使用bios.bootDelay = "30000"时,会产生调试器(gdb, ida等)跟被调试vmware虚拟机的通信数据格式不识别的问题,此时虚拟机卡死,无论怎样关闭虚拟机都是无效的,只能强杀或者重启物理机。但是此时存在一个问题,强杀之后启动vmware,虚拟机的网络会产生各种问题,一旦恢复虚拟机默认网络设置,里面的虚拟机如果是固定ip又会导致其他问题。此时的解决方法是:强杀时只杀vmware-vmx.exe进程,也可以杀死vmware-tray进程、vmware.exe进程,而vmnat.exe vmnetdhcp.exe vmware-hostd.exe wmware-authd.exe vmware-usbarbitrator64.exe 等进程千万不要杀!然后从vmware中关闭虚拟机、删除虚拟机目录下的*.lck文件,再打开虚拟机、启动即可!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值