逆向学习5.6

buuctf通关10-13

SimpleRev

查壳,发现64位无壳,用64位IDA打开。

421d3f9ff1764ff0a2921c7402fe2eb7.png

b74017905475475abce0e95b8ce1abf2.png

77515708b5ab44ed8f39fd015233ffe2.png

join函数

7123ed03ae654e9b80c5f611daf20722.png

2c6f619efbd045eb95f2091148ca2a3f.png

8f93cade9c2748e8aaf6e115f51f9aad.png

分析伪代码

1.v1是我们输入的flag。

2.进入join函数,分析函数用法可知效果为连接key3和v9,由于v9是char格式读取,要读取要用小端序,即text为killshadow。

3.把key1(ADSFK)的值复制给key,再连接key和src(SLCDN),所以key = ‘ADSFKNDCLS’ (src 为小端序,故读取时要逆序)。

4.通过循环将key数组里ASCll码在64到90的字符都加上32,key字符串变为’adsfkndcls’。

5.比较text和变换后的值str2,如果相等,则我们的输入是正确的flag,通过脚本暴力破解,用带入字母法得到flag。

flag = ''
text = 'killshadow'
key = 'adsfkndcls'
for i in range(len(text)):
    for x in range(65,123):
        if text[i] == chr((x - 39 - ord(key[i]) + 97) % 26 + 97):
            flag += chr(x)
            break
print('flag{'+flag+'}')

 

Java逆向解密

根据题目提示是java语言编写的程序,用jd-gui反编译一下

c6b9f85fcad24ac48719006ab2863eaa.png

 

分析代码

1.我们输入的flag是加密前的字符串,在Encrypt函数中,每个字符加上了一个‘@’,再与32异或。

2.加密后的字符以整型返回存到Resultlist里,key中的数用i(整型)表示后存入KEYList里。

3.如果Resltlist与KEYList相等,即为flag。

用倒推的方式写脚本进行解密,得到flag{This_is_the_flag_!}。

KEY = [180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65]
flag = 'flag{'
x = 0
for i in range(0,len(KEY)):
    x = (KEY[i] - ord('@')) ^ 32
    flag = flag + chr(x)
print(flag)

 

[GXYCTF2019]luck_guy  1

查壳,发现64位无壳,用64位IDA打开

165c4454d765440aa15711c89a046972.png

shift+F12打开字符串,查找关键信息,ctrl+Tab查看伪代码。

197982cb0c5c4d50b142314e53ca59df.png

d12223daebde46d8a3931450e7d9bde8.png

分析代码

1.flag前部分内容,即f1已知,而f2不知,认为是进行了case4和5的操作。

2.case5的操作大致是让字符串中大小为奇数的数减2,偶数减1.

思路明确,进行脚本修复。

flag="GXY{do_not_" #f1内容
f2=[0x7F,0x66,0x6F,0x60,0x67,0x75,0x63,0x69][::-1] #小端序要逆序
for j in range(0,len(f2)):
    if j%2==1 :
        s=chr(f2[j]-2)
    else:
        s=chr(f2[j]-1)

    flag+=s

print (flag)

对case4的s按h转换成十六进制为0x69,0x63,0x75,0x67,0x60,0x6f,0x66,0x7f(小端序读取顺序)

 

[BJDCTF2020]JustRE  1

查壳,发现是32位无壳,用32位IDA打开

cd3f848671b34c06b2fb35048bc2f971.png

shift +F12查看字符串,下拉发现一串疑似flag。

cfc4cc17bd05418fa9552b5a7317dcdb.png

ctrl+x,Tab进入伪代码。

af7c0476734c4fd488bf389b00155e17.png

19999和0代替两个%d,得到flag{1999902069a45792d233ac}。

 

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值