高校战“疫”网络安全分享赛Writeup——天津垓

拿到题目,发现由于缺少cygwin1.dll本机并没有办法运行,但是题还是要做的
直接拖进IDA里,进行分析,查找字符串
高校战“疫”网络安全分享赛Writeup——天津垓_第1张图片看起来是有点东西,双击其中一个
高校战“疫”网络安全分享赛Writeup——天津垓_第2张图片然后按住x查找引用
在这里插入图片描述但是目测这个函数并不能帮到我们,继续对函数名称查找引用
高校战“疫”网络安全分享赛Writeup——天津垓_第3张图片
高校战“疫”网络安全分享赛Writeup——天津垓_第4张图片
进入第一个函数,有点东西了
高校战“疫”网络安全分享赛Writeup——天津垓_第5张图片
高校战“疫”网络安全分享赛Writeup——天津垓_第6张图片大体逻辑是将字符串“Rising_Hopper!”作为key,v1到v18作为数组Number,遍历输入Str,满足一个简单逻辑,Python解密核心代码如下

for i in range(18):
	for n in range(255)
		if Number[i]=~((n & Key[i % 14]) & (n |Key[i % 14]))
			Result.append(chr(n))
			break

运行结果:Caucasus@s_ability
然后就愉快的提交flag!发现长得这样像flag的东西居然不是flag…
后面的参考星盟安全的大佬们发布的Writeup自己复现了一下
查找Str的引用:
高校战“疫”网络安全分享赛Writeup——天津垓_第7张图片
高校战“疫”网络安全分享赛Writeup——天津垓_第8张图片
发现有个函数没见过???

VirtualProtect([要修改内容的起始地址],[修改的长度],0x40(表示修改为可读写),....)

大概意思是要对某块数据要开始修改,以输入的Str作为key,让地址指向的内容与key的[i%18]进行异或
高校战“疫”网络安全分享赛Writeup——天津垓_第9张图片这就是所谓的代码加密吧,瑟瑟发抖
执行Python脚本,

import idc
str=list('Caucasus@s_ability')
keybox=[]
for i in str:
    keybox.append(ord(i))
addr=0x10040164D
for i in range(1045):
    now=get_bytes(addr+i,1)
    final=ord(now)^keybox[i%18]
    idc.PatchByte(addr+i,final)

新手引导:
高校战“疫”网络安全分享赛Writeup——天津垓_第10张图片高校战“疫”网络安全分享赛Writeup——天津垓_第11张图片选择Python,放到里面运行即可,IDAPython的常见用法可参看最近写的另一篇博客
解密后:
高校战“疫”网络安全分享赛Writeup——天津垓_第12张图片依然看不懂,对吧?
选中0x10040164D至0x100401A68,右键,选择Analyese Selected area

高校战“疫”网络安全分享赛Writeup——天津垓_第13张图片
选中函数名Create Function,
高校战“疫”网络安全分享赛Writeup——天津垓_第14张图片
按下Tab获得伪代码
高校战“疫”网络安全分享赛Writeup——天津垓_第15张图片
这个逻辑…比获得Key还要简单…

以v9开头的数组为Number,

for i in range(0x33):
        for n in range(255):
            if Number[i] == 19683 * n % 0x8000000B:
                Result.append(c)
                break

得到flag:flag{Thousandriver_is_1000%_stronger_than_zero-one}
果真还是自己资历尚浅,这次比赛和大佬们学习了

你可能感兴趣的:(CTF,逆向)