-
-
[原创]利用Ghidra 详细分析一道某国外ctf题
-
发表于:
2019-5-6 20:52
7384
-
[原创]利用Ghidra 详细分析一道某国外ctf题
不再赘述,感兴趣的可以看论坛其他相关帖子,这里给出链接
Ghidra简介与入门:
https://bbs.pediy.com/thread-250056.htm
下载:
https://bbs.pediy.com/thread-249868.htm
ctf地址:
https://www.root-me.org/en/Challenges/Cracking/
这个题目要求获得password,比较简单,旨在学习Ghidra的基本操作
这里和ida一样可以对函数名和参数名重命名,也可以对返回类型和参数类型重新设置
我们这里重新设置一下main函数的返回类型
和参数类型
修改前:
修改后:
这里就是关键函数了
##5. 查看获得密码的函数
就是这个函数获得最后的password
我们要得到这个密码,我们有两种办法
我们看看需要修改哪些地方
在地址0x0804868c处,将JNS改为JMP,绕过Ptrace的检查
改后:
如果用户提供了密码并检查提供的密码以检查它是否是有效字符或其他内容。
我们跳过这个验证
__ctype_b_loc()函数应返回指向当前语言环境中包含当前字符集中每个字符的特征的字符数组的指针。该数组应包含总共384个字符,并且可以使用任何有符号或无符号字符索引(即索引值介于128和255之间)。如果应用程序是多线程的,则该数组应该是当前线程的本地。
修改后:
我们发现我们修改了中间的汇编指令,右边的代码也跟着发生了变化,这一点还是比较方便的
在地址0x0804861e,我们将JNZ修补为JZ
当我们运行这个elf文件的时候就会直接得到password
我们发现password是由FUN_0804851c这个函数得到的
那么我们可以直接调用这个函数就可以了
下面是代码
第一次使用Ghidra就感受到了它的强大和便利,但是和ida pro相比还有很多不如的地方。。。希望Ghidra越来越完善和遍历,毕竟是开源的
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)