BUUCTF逆向wp [ACTF新生赛2020]easyre

第一步 查壳。本题是有壳的题目,要把下载的attachment解压得到easyre.exe文件,再脱壳。

现在就ok了,是32位,拖入ida。

第二步 找main,按tab键,并分析。

简单分析一下

  1. qmemcpy(v4, "*F'\"N,\"(I?+@", sizeof(v4)); - 这行代码使用了qmemcpy函数,将"*F'\"N,\"(I?+@"复制到v4中。
  2. printf("Please input:"); - 这会在屏幕上输出 "Please input:"
  3. scanf("%s", v6); - 这行代码等待用户输入,并将输入存储到v6中。
  4. if ( v6[0] != 'A' || v6[1] != 'C' || v6[2] != 'T' || v6[3] != 'F' || v6[4] != '{' || v10 != '}' ) return 0; - 这是一个条件语句,如果v6的前五个字符不是 "ACTF{" 并且最后一个字符不是 "}",则返回0
  5. 接下来的代码将v7v8v9分别赋给v5数组的前三个元素。
  6. 然后使用一个循环检查v4数组与另一个数据数组的内容是否匹配,如果不匹配则返回0
  7. 最后,如果以上条件都满足,则输出 "You are correct!"

分析一下循环

1、for ( i = 0; i <= 11; ++i ) - 这是一个循环语句,它从0开始迭代到11(包括11),每次迭代增加1

2、*((char *)v5 + i) - 这是一个指针操作,将v5的地址加上i的偏移量,然后将其转换为char类型的指针。这样做是为了访问v5数组中的特定元素。由此得出v5原本是int数组,v5指针把v5转换成了char数组。本题主要与v4有关

这就是v4数组(如图)

V4数组进制转换一下[42,70,39,34,78,44,34,40,73,63,43,64]

Code密文:}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=

<;:9876543210/.-,+*)(',27h,'&%$# !"

注:写脚本时的密文格式  定义名称=‘~密文 ’

第三步  编写脚本

分析脚本

  1. v4=[42,70,39,34,78,44,34,40,73,63,43,64] - 这行代码定义了一个整数数组v4,其中包含了一系列整数。
  2. flag='' - 这行代码定义了一个空字符串变量flag,用于存储转换后的字符。
  3. x=[] - 这行代码定义了一个空列表变量x,用于存储转换后的整数。
  4. for i in v4: - 这是一个循环语句,它遍历v4数组中的每个元素,并将当前元素赋值给变量i
  5. x.append(code.find(chr(i))+1) - 这行代码将通过以下步骤将整数转换为字符的索引值:

a. chr(i) - 这将整数i转换为对应的字符。

b. code.find(chr(i)) - 这将在字符串code中查找字符chr(i)的索引位置。

c. code.find(chr(i))+1 - 由于索引从0开始,这里将索引值加1,以便与字符的位置对应。

d. x.append(code.find(chr(i))+1) - 将转换后的整数添加到列表x中。

 6、for i in x: - 这是另一个循环语句,它遍历列表x中的每个元素,并将当前元素赋值给变量i

 7、flag+=chr(i) - 这行代码将通过以下步骤将整数转换为字符:

a. chr(i) - 这将整数i转换为对应的字符。

b. flag+=chr(i) - 将转换后的字符追加到字符串flag的末尾。

 8、print(flag) - 这行代码将打印最终转换后的字符串flag

得到flag 

flag{U9X_1S_W6@T?}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无 双

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值