ctf逆向动调调试技巧学习及总结

前言

该文内容是作者在学习逆向时遇到有关动态调试的内容总结,希望能够帮助到各位有该方面学习需求的友友。

简介

先来了解一下下面的几个问题:

1.什么是动态调试和静态调试?

静态调试

静态分析是一种调试方法,通过自动检查源代码来完成,而无需执行程序。简单来说就是通过肉眼输入在大脑中执行程序的过程。

动态调试

动态调试是指软件作者利用集成环境(IDE)自带的调试器跟踪自己软件的运行,来协助解决自己软件的错误。 要成为一位优秀的软件工程师,调试能力是不可或缺的。

2.怎么动态调试?

一般的话我们可以使用IDA和ollydbg实现动态调试,(注:早期的ollydbg只能运行32位程序,不过后面吾爱有大佬写出了64位的,有需要的话可以去找找)

下面是我们在做题中可能遇到的动态调试相关使用问题,并有例题作为讲解,有些题目是可以在nssctf平台上直接搜索找到原题,方便各位对照上手学习。

技巧一:调用未引用函数

  1. 使用情况:

一般当静态分析无法解决问题时,可以考虑使用动态调试。

  1. 例:[[BJDCTF 2020]Easy]

在静态分析之后找到关键函数,但是发现这个函数并没有被引用,因此有两种思路来调用函数,

方法一是我们可以在IDA中通过修改eip来使其跳转到ques函数;

步骤:

  1.先记下ques的引用地址,此处为0x00401520;

  2.之后主主函数运行的途中随便下一个断点:

  3.选择调试器后进行动调,然后将对应的EIP修改成ques函数的地址即可:

  4.继续运行,即可看到ques中的内容

方法二是在OD中直接将函数设置成新的EIP然后运行;

步骤:

  1.先在IDA中找到函数的入口地址:

  2.在此处push处可知地址为0x00401520,然后打开OD找到该地址:

  3.然后将这里设置新的EIP

  4.然后f9运行即可:

技巧二:获取进程内容数据

  1. 当发现题目中涉及到的程序内部值无法查看和获取时,可以通过动调获取内容数值。

  2. 例:[HUBUCTF 2022 新生赛]help

迷宫题,找迷宫,

拿不到,在程序运行处下断点,然后运行:

进去随便输:

之后再点击map即可看到地图:

技巧三:匹配绕过

  1. 当发现有if判断比对时,可通过动调加载获取匹配值

  2. 例:[HNCTF 2022 Week1]CrackMe

进入函数后看到有个循环,然后有string1和string2的子串比对,进而输出判断结果;

经分析可知string1为输入值,string2为所需的注册码,故在判断结束的地方下断点然后运行可获得匹配值,这里依旧用IDA调试和OD调试两种办法;

2.1 IDA调试:

之后即可获得匹配值:

2.2 OD调试

在IDA中我们已经知道了程序的判断条件,故直接f9运行之后跟随到上一条指令:

条件跳转到上个函数口:

之后即可在上个窗口发现匹配值:

技巧四:修改判断函数跳转值

例:game

反编译查看getflag函数

下一个断点调试

f8调试,将zf标志位处更改为0x1 (这里是因为zf是条件判断的符号标志位,1代表真,0代表假)

修改完成后f8运行即可看见flag

技巧五:SMC解密

例:[羊城杯 2021]BabySmc

这里可以参考一个大佬的WP,写得非常好!

https://blog.csdn.net/weixin_61154173/article/details/128695474

关于SMC:

SMC,即Self Modifying Code,动态代码加密技术,指通过修改代码或数据,阻止别人直接静态分析,然后在动态运行程序时对代码进行解密,达到程序正常运行的效果。

而计算机病毒通常也会采用SMC技术动态修改内存中的可执行代码来达到变形或对代码加密的目的,从而躲过杀毒软件的查杀或者迷惑反病毒工作者对代码进行分析。

判断特征:

1.VirtualProtect()

参数

lpAddress是要改变属性的内存起始地址, dwSize是要改变属性的内存区域大小, flAllocationType是内存新的属性类型, lpflOldProtect内存原始属性类型保存地址

2.mprotect()

技巧六:elf文件远程调试

具体步骤:

Linux:

chmod + x linux_server64 chmod +x 你的待调试文件名

./linux_server64

相关推荐

  1. 深度学习参策略简要总结

    2024-04-08 12:28:01       35 阅读
  2. [安卓逆向]常见调试和反调试解决方案

    2024-04-08 12:28:01       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-08 12:28:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-08 12:28:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-08 12:28:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-08 12:28:01       20 阅读

热门阅读

  1. Oracle insert日期to_date()含时分秒

    2024-04-08 12:28:01       16 阅读
  2. opencv如何寻找图片轮廓

    2024-04-08 12:28:01       13 阅读
  3. AI技术创业机会之教育科技

    2024-04-08 12:28:01       16 阅读
  4. 1分钟带你了解代付业务|代付业务简介

    2024-04-08 12:28:01       14 阅读