buu部分逆向题目wp

144 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

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

 

app1

拖进ide中查看源码

 

可以看到成功的条件是str1.length()= = str2.length()

在上面可以看到str2等于 versionName(版本名)

然后str2与 i 进行了异或操作

在上面同样可以看到 i 等于versionCode(版本号)

然后找到软件的版本名与版本号

写出逆向脚本

data = 'X<cP[?PHNB<P?aj'
data1=''
for i in range(len(data)):
    data1 += chr(ord(data[i]) ^ 15)
print(data1)

得到结果

 

 

 

 

 

luc_guy

查壳后拖进ida,查看主函数后没有发现有用信息

查看字符串

 

然后双击这一行跟进

可以看到输出flag由f1和f2组成

双击f1跟进可以看到f1部分的字符串

然后f2经过case4和case5的加密再经过f1

所以先对case4进行分析,看不懂,先看case5

case5对8个字符进行了遍历,取余后余数为1的f2+j后减2

否则f2只进行+j(应该是这样)

所以case4应该是给了 f2 一个值

s应该是赋值的,但是s后面的没看懂

搜索了一下

s给的是16进制数组,s的存储方式是小端存储,所以要逆序

写出逆向脚本

data = [0x69,0x63,0x75,0x67,0x60,0x6f,0x66,0x7f]
f2 = ''
for i in range(8):
    if i % 2 == 1:
        f3 = data[i] - 2
    else:
        f3 = data[i] - 1
    data[i] = f3
for i in data:
    f2 += chr(i)
print(f2)

得到f2

拼起来得到flag

flag{do_not_hate_me}