本文已参与「新人创作礼」活动,一起开启掘金创作之路。
刮开有奖
打开
查壳后拖进ida
先查看下字符串
有个变表的base64加密
然后看波主函数
没看出啥东西
先将ASCII码转成字符串
string应该是要求的字符串,有八位
然后没思路了
[BUUCTF]REVERSE——刮开有奖_Angel~Yan的博客-CSDN博客
参考了一下大佬的wp
先用脚本解出base64
import base64
data0= 'ak1w'
print(base64.b64decode(data0))
data1= 'V1Ax'
print(base64.b64decode(data1))
这里不知道为啥用变表解出来不对,只能用正常base64
得到6位字符串
然后
sub_4010F0(v7, 0, 10); //39行的这个函数对v7进行了升序排序
使用excll表排序
排序结果为
51 67 69 72 74 78 83 90 97 103 110
即
3,C,E,H,J,N,S,Z,a,g
然后接着看第50行
纯计算题,算出结果后转为ASCII码
if ( String[0] == v7[0] + 34 //str0 = U
&& String[1] == v10 //str1 = J
&& 4 * String[2] - 141 == 3 * v8 //str2 = W
&& String[3] / 4 == 2 * (v13 / 9) //str3 = P
得到字符串顺序,同时也知道了前两位字符串,拼接上得到
UJWP1jMp
Java逆向
下载后是个.class类文件
用IntelliJ IDEA打开查看
可以看到
我们输入的字符串+64后再与32异或
然后与KEY数组进行比较
所以根据算法写出逆向脚本
list=[180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65]
s = []
flag=''
for i in range(18):
s.append(list[i]-64^32)
print(s)
for i in s:
flag += chr(i)
print(flag)
得到flag