Buuctf-Reverse(逆向) Zer0pts2020-easy strcmp Write up
Posted 水番正文
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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!
以上是关于Buuctf-Reverse(逆向) Zer0pts2020-easy strcmp Write up的主要内容,如果未能解决你的问题,请参考以下文章
Buuctf-Reverse(逆向) Crackme Write up
Buuctf-Reverse(逆向) [RoarCTF2019]Polyre && SangFor(深育杯)-Reverse(逆向) XOR_Exercise Write up(代码片
Buuctf-Reverse(逆向) Zer0pts2020-easy strcmp Write up