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

Buuctf-Reverse FlareOn3-Challenge Write up

Android逆向系列文章— Android基础逆向

Android逆向-Android基础逆向(2-2)