将安全君呀设为"星标⭐️"
第一时间收到文章更新
声明: 安全君呀 公众号文章中的技术只做研究之用,禁止用来从事非法用途,如有使用文章中的技术从事非法活动,一切后果由使用者自负,与本公众号无关。
文章声明:本篇文章内容部分选取网络,如有侵权,请告知删除。
CTF(Capture The Flag)比赛中的逆向题目通常要求参赛者对给定的二进制文件(如可执行程序、库文件等)进行分析,找出其中的漏洞、隐藏信息或者实现某些功能的代码。以下是解决逆向题目的一些基本思路和步骤:
-
理解题目要求:
-
仔细阅读题目描述,理解需要达到的目标,比如找到某个隐藏的字符串、破解一个加解密算法、获取一个flag值等。 -
静态分析:
-
使用反编译工具(如IDA Pro、Ghidra、Binary Ninja)对二进制文件进行反编译,查看代码的结构和逻辑。 -
分析程序的入口点、函数调用、重要的代码段和数据段。 -
查看字符串表,寻找可能的提示或敏感信息。 -
动态分析:
-
使用调试器(如GDB、OllyDbg、x64dbg)运行程序,观察程序的执行流程和行为。 -
设置断点,跟踪函数调用和返回值,监控内存和寄存器的变化。 -
使用动态二进制分析工具(如Dynomite、Intel Pin)收集运行时信息。 -
寻找漏洞:
-
分析程序中可能存在的漏洞,如缓冲区溢出、格式化字符串漏洞、整数溢出等。 -
利用漏洞进行进一步的分析,比如利用缓冲区溢出改变程序的执行流程。 -
代码还原:
-
尝试将汇编代码还原成高级语言代码,以便更好地理解程序逻辑。 -
重构程序的控制流图(CFG),帮助理解复杂的跳转和逻辑结构。 -
密码学分析:
-
如果题目涉及加密或解密,分析加密算法的实现,寻找密钥或算法的弱点。 -
使用密码学工具和库(如OpenSSL、Crypto++)辅助分析。 -
利用已知漏洞:
-
检查程序是否使用了已知有漏洞的库或框架,利用这些漏洞获取额外的信息或权限。 -
社会工程学:
-
有时候逆向题目会包含一些需要社会工程学技巧的信息,比如隐藏在注释中、硬编码的密码等。 -
文档和资源:
-
查阅相关的开发者文档、API文档、开源项目,了解程序可能使用的技术和算法。 -
合作与交流:
-
在解题过程中,与其他参赛者或团队成员交流思路和发现,协作解题。 -
编写Exploit:
-
如果找到了漏洞或者理解了程序的保护机制,尝试编写exploit代码来利用这些漏洞。 -
测试和验证:
-
在安全的环境下测试你的发现和exploit代码,确保它们能够稳定工作。
逆向题目的难度各异,解题过程可能需要综合运用多种技能和工具。耐心和细致的分析是解决逆向题目的关键。
下面分享三道例题与大家分享学习交流。
运行程序,需要输入passwd
用IDA打开程序,按shift+f12找到字符串,找到主程序入口按F5查看伪代码。
v4是下标与自身内容相加,将输入与修改后的v4比较,如果相等就打印机GOOD。
本题有两种做法
一是写算法进行逆向
b='' a=[0x66,0x6B,0x5F,0x64,0x77,0x62,0x5F,0x6D,0x18,0x60,0x6A,0x15,0x56,0x6C,0x12,0x55,0x55,0x51,0x63,0x54,0x53,0x50,0x5C,0x66] >>> for i in range(0,len(a)): a[i]+=i >>> for i in range(0,len(a)): b+=chr(a[i]) >>> b 'flag{get it by debugger}'
设置断点进行调试
运行到断点处已计算出flag,双击进入得到flag
程序为64位ELF程序
用IDA查看伪代码
使用gdb进行调试 得到flag
更改程序跳转流程
更改程序跳转,跳转到 _main_0更改为:跳转到flag计算函数(sub_45E940 上面的函数)
保存更改后的程序运行得到flag:
Tips
欢迎大家在下面点赞评论加关注,让我们一起在网安之路越走越远!!!
原文始发于微信公众号(安全君呀):CTF逆向题目解题思路
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论