Buuctf-Reverse(逆向) Zer0pts2020-easy strcmp Write up

本来不想上传,没想到越写越多,虽然是比较简单的一题,但分析程序流还是蛮有意思,还发现和前几天打出来的那题长城杯差不多!!那如果我先做了这题,然后打长城杯不是秒解了,就一血了啊!!淦。--9.22

参考文章:

​​​​​[Zer0pts2020]easy strcmp 分析与加法_Tokameine的博客-CSDN博客

BUU逆向 [Zer0pts2020]easy strcmp wp_苗_的博客-CSDN博客

0x00 日常查壳

无壳64位

0x01 分析主函数

0x02 分析程序流

分析可疑的6EA函数

找到init函数

发现这三个函数

按g跳往这个地址

分析795函数

0x03 正式分析6EA

于是绕了一大圈发现 其实就只要逆6EA这个函数就好了 不过这样分析起来更踏实

那么逆就直接拿给出的数据加1060的数据即可

0x04 GetFlag

由于小端存储的原因

import binascii

enc = "********CENSORED********"
key = [0x410A4335494A0942, 0x0B0EF2F50BE619F0, 0x4F0A3A064A35282B]

flag = b''			#创建一个字节型变量
# p = enc[1 * 8:(1 + 1) * 8]
# a = binascii.b2a_hex(p.encode('ascii')[::-1])                 #为了对应key的小端存储
# print(a)
# print(int(a,16))                                              #之前a是变成是16进制于是要转次10进制与key相加
# print(key[1])                                                 #从数组里取出来默认是10进制
# b = binascii.a2b_hex( hex(int(a,16) + key[1])[2:] )[::-1]     #现在是高到低的显示 但显示字符串还是得低到高??
# print(b)

for i in range(len(key)):
    p = enc[i * 8:(i + 1) * 8][::-1]
    a = binascii.b2a_hex(p.encode('ascii'))
    b = binascii.a2b_hex( hex(int(a, 16) + key[i])[2:] )[::-1]
    flag += b
print(flag)

有些人好像对小端存储直接理解 但我总自我意识的想成大段存储 最后显示字符串还不是太清楚 有大佬能解释下欢迎评论

GetFlag!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值