[Zer0pts2020]easy strcmp

[Zer0pts2020]easy strcmp

die查壳

image-20241104195901674

找到加密函数

image-20241104200556844

如何找到加密函数的

image-20241105182327952

找到init函数,跟进funcs_889

image-20241105182342226、跟进

image-20241105182412059

使用x交叉引用qword_201090

image-20241105183024506

即可找到主加密函数

那这个加密函数是如何连上main函数的呢?

main

image-20241104211112677

main函数这里运用了strcmp,但我们却找不到strcmp到底对比了什么

但根据我们刚刚的分析,即可知道 qword_201090是连上strcmp的地址的,然后通过加密函数返回加密值,也就是上面图sub_6EA返回的a1

这下逻辑明了了

主要是使用main函数中的加密字符串与qword_201060进行相加,注意这里是八个字节 直接相加

编写解密函数

from binascii import *
enc = [0x410A4335494A0942, 0x0B0EF2F50BE619F0, 0x4F0A3A064A35282B]
key = '********CENSORED********'
flag = b''
for i in range(len(enc)):
    tmp1 = b2a_hex(key[8*i:(8*i)+8][::-1].encode())
    tmp2 = a2b_hex((hex(int(tmp1,16) + enc[i])[2:]))[::-1]
    flag += tmp2
print(flag)

注意这里是对qword直接进行操作,因此如果把qword拆分成byte然后进行运算就会出现变量溢出(溢出0xff)的情况,如果是对qword进行整体的操作,就会将溢出移到下一位,不会丢失数据

posted @ 2024-11-05 18:36  结城希亚  阅读(7)  评论(0编辑  收藏  举报