zishen 发表于 2023-12-21 15:15

CTF ezre

在攻防世界上刷到了一个题,是一道迷宫题
在IDA上提取数据后这样的


题解这样说,有点没明白,为什么dworld类型的数据是4位一组,只取第一位作为数值{:1_908:},请各位大佬解惑一下!

这个是我写的转换的,虽然是对的,但是不明白{:1_908:}
原wp链接:https://blog.csdn.net/m0_65080524/article/details/134223723

yes2 发表于 2023-12-21 15:47

本帖最后由 yes2 于 2023-12-21 15:54 编辑

我看了一下原帖,对比了他贴出来的ida图,有以下猜测:
所谓的“dword类型的数据是4位一组,只取第一位作为数值”,首先这个表达是错误的,dword类型是4字节一组,而不是位。
作者描述的“位”是哪里来的呢?是因为他导出的数组是unsigned char类型的数组,那一个dword肯定是导出成4个单字节啊。
作者说的“第一位”应该是指第一个字节,在内存中就是dword的低8位。刚好题目中数值都比较小,另外3个字节中都是0。
算是歪打正着吧。。。错误的理解实现了正确的结果。

至于为什么导出的是unsigned char类型的数组,我认为ida应该是支持dword数组的,可能需要在ida里先手动将dword_202020地址识别为dword数组,
然后导出的时候可能就正确了。我没有尝试过,但我认为ida这么牛逼的软件,不可能连这点功能都实现不了。
如果正确导出为dword数组,那应该就不需要去除后3位这个环节了。
对不起我错了,试了一下ida确实只能导出单字节,这么睿智的吗。。。
那其实还有办法,就是ida导出的字节数组unsigned char ida_chars,你可以自己强转一下:
unsigned int* my_dwords = (unsigned int*)ida_chars;
然后后面使用my_dwords来显示数据就好了。

没有贬低原作者的意思,愿意将ctf解题思路分享出来都值得受益者感谢。

lies2014 发表于 2023-12-21 17:29

IDA中设置好数组格式直接复制出来就可以了

zishen 发表于 2023-12-21 16:23

yes2 发表于 2023-12-21 15:47
我看了一下原帖,对比了他贴出来的ida图,有以下猜测:
所谓的“dword类型的数据是4位一组,只取第一位作为 ...

牛啊大佬!感谢回复!我试了一下强转类型,确实可以。再次感谢!!!{:301_987:}

Tree24 发表于 2023-12-21 19:32

导出数据的话可以试试LazyIDA这个插件,能省不少时间
页: [1]
查看完整版本: CTF ezre