首页 > 其他 > 详细

[WP]XCTF-elrond32

时间:2020-09-13 09:27:43      阅读:62      评论:0      收藏:0      [点我收藏+]

1、查询基本信息,32位程序

技术分享图片

 2、载入IDA中,查询字符串

技术分享图片

3、进入 main 函数,发现如果要得到正确结果需要运行 function() 和 encrypt() 函数

技术分享图片

4、function() 函数正确运行需要参数在 [3, 9, 4, 1, 0, 5, 6, 7] 中

 技术分享图片

技术分享图片

根据 main() 函数可以知道 function() 的 a2 参数的初值为 0,根据递归部分可以编写脚本

 1 def func1(a2):
 2     a = []
 3     a.append(a2)
 4     while True:
 5         a2 = 7 * (a2 + 1) % 11
 6         if a2 in [3, 9, 4, 1, 0, 5, 6, 7]:          
 7             a.append(a2)
 8         else:
 9             break
10     return a   

switch() 语句,即将上一步得到的列表的各个数值转换为字符

 1 def func2(t):
 2     result = ‘‘
 3     for i in t:
 4         if i == 3: result += n
 5         elif i == 9: result += r 
 6         elif i == 4: result += d 
 7         elif i == 1: result += e 
 8         elif i == 0: result += i 
 9         elif i == 5: result += a 
10         elif i == 6: result += g 
11         elif i == 7: result += s 
12         else: pass
13     return result 

 5、进入 encrypt() 中,程序仅仅是将 v2 和 a1 两个数组中的元素进行了异或运算

 技术分享图片

1 def func3(s, t):
2     result = ‘‘
3     for i in range(33):
4         a = ord(s[i&7])
5         b = a ^ t[i]
6         result += chr(b)
7     return result

当我们查看 unk_8048760 即能得到 v2 的值,需要注意的是其中有一个值为 0

技术分享图片

 6、编写 EXP,运行得到 flag

 1 def main():
 2     v2 = [0x0F, 0x1F, 0x4, 0x9, 0x1C, 0x12, 0x42, 0x9, 0x0C, 0x44, 0x0D, 0x7, 0x9, 0x6, 0x2D, 0x37, 0x59, 0x1E, 0x0, 0x59, 0x0F, 0x8, 0x1C, 0x23, 0x36, 0x7, 0x55, 0x2, 0x0C, 0x8, 0x41, 0x0A, 0x14]
 3     a = func1(0)
 4     print(a)
 5     s = func2(a)
 6     print(s)
 7     flag = func3(s ,v2)
 8     print(flag)
 9 
10 def func1(a2):
11     a = []
12     a.append(a2)
13     while True:
14         a2 = 7 * (a2 + 1) % 11
15         if a2 in [3, 9, 4, 1, 0, 5, 6, 7]:          
16             a.append(a2)
17         else:
18             break
19     return a
20     
21 def func2(t):
22     result = ‘‘
23     for i in t:
24         if i == 3: result += n
25         elif i == 9: result += r 
26         elif i == 4: result += d 
27         elif i == 1: result += e 
28         elif i == 0: result += i 
29         elif i == 5: result += a 
30         elif i == 6: result += g 
31         elif i == 7: result += s 
32         else: pass
33     return result
34 
35 def func3(s, t):
36     result = ‘‘
37     for i in range(33):
38         a = ord(s[i&7])
39         b = a ^ t[i]
40         result += chr(b)
41     return result
42 
43 main()

技术分享图片

 

[WP]XCTF-elrond32

原文:https://www.cnblogs.com/Tsuiyields/p/13659425.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!