逆向初学者做题记录 buuctf 3.14

lucky_guy

首先查壳,64位无壳,然后打开

进入patch_me

进入get_flag

f2是空的,而且又给出了case4,5,所以应该是先4对f2赋值,然后5给f2加密

但是考虑到f1和f2拼接,所以f2应该是一串字母之类的。整数和字节数组之间的转化。(这里我是向AI请教了几次)

在计算机编程中,整数和字节数组之间的转换非常常见,其主要目的是将整数数据存储为字节数组或从字节数组中读取整数数据。
这种转换的主要用途之一是网络通信。在网络通信中,数据以二进制形式传输,因此需要将整数转换为字节数组,以便它可以在网络上传输。同样地,从网络中接收到的字节数组需要转换回整数形式,以便它可以在计算机程序中使用。
此外,整数和字节数组之间的转换也在加密和安全领域中发挥着重要的作用。例如,在密码学中,常常需要将整数数据转换为字节数组形式,以便它们可以进行加密或签名。同样地,从加密消息中读取整数数据时,需要将字节数组转换为整数形式,以便它们可以被计算机程序解密或验证签名。
总之,整数和字节数组之间的转换是计算机编程中非常重要的一部分,它们被广泛应用于网络通信、加密、安全和其他许多领域。

然后写一个python代码,来将整数转换为字节数组,需要注意的是,x86、AMD和绝大多数处理器架构都是采用小端序来处理多字节数据类型,因此下面脚本是'little'

# 输入整数
num = int(input("请输入一个整数:"))

# 将整数转换为字节数组
byte_array = num.to_bytes((num.bit_length() + 7) // 8, byteorder='little')

# 将字节数组转化为[]形式,每一位用十六进制表示
byte_array1 = byte_array
hex_list = [hex(byte) for byte in byte_array]

# 输出该十六进制的数组
print(hex_list)

运行后,输入9180147350284624745,结果为:

['0x69', '0x63', '0x75', '0x67', '0x60', '0x6f', '0x66', '0x7f']

然后写脚本出flag

flag = 'GXY{do_not_'
f2 = [0x69,0x63,0x75,0x67,0x60,0x6F,0x66,0x7F]
s = ''
for i in range(8):
    if i % 2 == 1:
        s = chr(int(f2[i]) - 2)
    else:
        s = chr(int(f2[i]) - 1)
    flag += s
print(flag)

GXY{do_not_hate_me}

JustRE

首先查壳

然后打开一看,哇看不懂

这里看了别人的WP,详细步骤就不写了

http://t.csdn.cn/WkH4I

然后说一下我学到的东西:

  • ida进去后先找main函数,没有main就找敏感的字符串(快捷键shift+F12)

  • 交叉引用ctrl+x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值