当前位置: 代码迷 >> 综合 >> XCTF-elrond32
  详细解决方案

XCTF-elrond32

热度:36   发布时间:2023-11-26 00:18:03.0

XCTF-elrond32

  • 1、查壳
  • 2、ida静态分析
  • 提取密文获得flag

1、查壳

无壳,32位ELF文件
在这里插入图片描述

2、ida静态分析

在这里插入图片描述
主要由两个函数组成,sub_8048414用来验证key,sub_8048538函数用来进行与key的的异或加密。
sub_8048141函数:
在这里插入图片描述
一开始传入一个二维数组的行指针和0,里面直接进行一个switch和case的判断,由0进入则可以知道*a1==105即key的第一个元素的ASCII码为105,之后跳转到label19处,传入a1+1和一个生产关键码的运算。

a2=0
for i in range(7):a2 = 7 * (a2 + 1) % 11print(a2,end=' ')
#最终遍历顺序为0 7 1 3 6 5 9 4
print()
key=[105,115,101,110,103,97,114,100]

根据这个生产关键码的算法依次得到key的每个元素。

提取密文获得flag

sub_8048538函数
在这里插入图片描述
主要内容是将unk_8048760字符串的值存到v2里,依次与key异或。可知密文字符串每个元素为字符型,占一个字节,而v2开辟的是int型的数组,所以其中3个字节会用0来填充,写脚本提出就好。

在这里插入图片描述

key=[105,115,101,110,103,97,114,100]
str=[15,   0,   0,   0,  31,   0,   0,   0,   4,   0,0,   0,   9,   0,   0,   0,  28,   0,   0,   0,18,   0,   0,   0,  66,   0,   0,   0,   9,   0,0,   0,  12,   0,   0,   0,  68,   0,   0,   0,13,   0,   0,   0,   7,   0,   0,   0,   9,   0,0,   0,   6,   0,   0,   0,  45,   0,   0,   0,55,   0,   0,   0,  89,   0,   0,   0,  30,   0,0,   0,   0,   0,   0,   0,  89,   0,   0,   0,15,   0,   0,   0,   8,   0,   0,   0,  28,   0,0,   0,  35,   0,   0,   0,  54,   0,   0,   0,7,   0,   0,   0,  85,   0,   0,   0,   2,   0,0,   0,  12,   0,   0,   0,   8,   0,   0,   0,65,   0,   0,   0,  10,   0,   0,   0,  20,   0,0,   0]
c=[]
for i in range(len(str)//4):c.append(str[4*i])
for i in range(len(c)):print(chr(c[i]^key[i%8]),end='')
#flag{s0me7hing_S0me7hinG_t0lki3n}

完结线:re弟弟的做题笔记,有时可能会带点稀奇古怪的思路,如有问题还望师傅们指正,专栏内容会随着比赛记录而不断更新哦。爬~