(十八)、first

First

 

一、查壳

 

Elf文件

 

二、IDA静态分析

1、字符串搜索

 

 

2、浏览代码逻辑

 

 

byte_602180是我们输入的字符串

 

程序在这里对字符串进行了处理

 

 

这里创建了线程,点开回调函数

 

 

其中,sub_400E10是md5摘要算法

qword_602120是已有数据的数组

unk_602220是要输出的数据

 

 

代码逻辑比较简单,我们只需要逆向出byte_602180即可

这里还要注意到程序中互斥锁的使用,我们需要考虑到线程执行先后顺序的所有情况

 

 

三、写出解密脚本

 

import hashlib
#qword_602120 = [0x0F59BB02BDBB4647,0x5CFCE8EC2128ACBE,0x0EF0375CA659274AD,0x27422CC18FB38643,0xA72DECA745CC3EB0,0xE8341712FE5F3CBE]
qword_602120 =["4746bbbd02bb590f",  "beac2821ece8fc5c", "ad749265ca7503ef", "4386b38fc12c4227", "b03ecc45a7ec2da7", "be3c5ffe121734e8"]
#根据函数可以发现密文是4个字节
#爆破
ans = 0
qwe = 0
for a in range(48,126):
    for b in range(48,126):
        for c in range(48, 126):
            for d in range(48, 126):
                    apart = chr(a) + chr(b) + chr(c) + chr(d)
                    # m = hashlib.md5()
                    # m.update(apart.encode("utf8"))
                    m=hashlib.md5(apart.encode("utf8")).hexdigest()
                    for f in range(0,6):
                        if m[0:16] == qword_602120[f]:#出错原因:将16进制数用str转化会变成10进制字符串
                            print(f,end="   ")
                            print(apart)
                            ans = ans+1
                        if ans == 6:
                            print("结束")
                            exit()

 

四、排列组合试一遍

 

只得到了一个假的flag..

提交到攻防世界却不对

返回main函数

五、重新查看代码逻辑

 

 

 

byte_60221F 好像与 dword_602220 指向的位置十分相似

我们手动写出解密脚本

 

input1='juhuhfenlapsiuerhjifdunu'
input2='juhuhfenlapsdunuhjifiuer'
byte_6020DF=[0xfe,0xe9,0xf4,0xe2,0xf1,0xfa,0xf4,0xe4,0xf0,0xe7,0xe4,0xe5,0xe3,0xf2,0xf5,0xef,0xe8,0xff,0xf6,0xf4,0xfd,0xb4,0xa5,0xb2]
len=24
i=0
v11=0
while(i!=len):
    v12=ord(input1[i])+i
    v11=v11^v12
    i=i+1
flag=''
for i in range(24):
    temp=ord(input2[i])^v11^byte_6020DF[i]
    flag+=chr(temp)
print(flag)

 

用input1做实验,得到:

我们重新进行排列组合,最后发现了,juhuhfenlapsdunuhjifiuer  组合得到的结果最像flag

 

 这就是最后的flag

六、拿到flag

goodjobyougetthisflag233

 

 

七、总结

六个线程产生数据的随机排列,md5加密算法(对md5算法还不是很了解),最后还需要字节写出解密脚本拿到flag

我还有一个疑惑,为什么运行程序,输入  juhuhfenlapsdunuhjifiuer   后却显示错误,不应该直接拿到flag嘛,如果juhuhfenlapsdunuhjifiuer   是不正确的,为什么 本该正确的juhuhfenlapsiuerhjifdunu得到的flag 又不对呢。。。无语

posted @ 2022-02-09 23:11  TLSN  阅读(35)  评论(0)    收藏  举报