攻防世界re新手

1.open-source

拿到题目,发现这是一段C语言代码。
在这里插入图片描述
此处,我用devc打开,得到如下的几个主函数。
在这里插入图片描述
从中可以发现,这是要我们改变first,second,argv[3]才能得到正确的flag。
开始分析第一个first,这里发现if语句,如果括号中的条件成立,那么就将输出"you are wrong",并直接退出,我们考虑把first直接改成oxcafe(提示你该喝咖啡了)对应的十进制数:51,966。
接下来是second,同样的方法,使if成立的条件,我偏就改成使其不成立的;很简单的,second=25时就能使if不成立。
最后是argv[3],直接把字符串复制下来就行;然后编写一段新的程序。

int main(){
	unsigned int hash = 51966 * 31337 + (25 % 17) * 11 + strlen("h4cky0u") - 1615810207;
    printf("Get your key: ");
    printf("%x\n", hash);
    return 0;
}

跑一跑程序,就能获得flag在这里插入图片描述

2.insanity

在这里插入图片描述
直接将其保存到本地,然后拖入IDA,试试shift+f12查找字符串,惊讶的发现,flag就在其中。
在这里插入图片描述

3.python-trade

保存附件到本地,发现得到一下pyc文件,那么pyc文件是什么呢?
pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python的虚拟机来执行的,这个是类似于JAVA或者.NET的虚拟机的概念。pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的,2.5编译的pyc文件,2.4版本的 python是无法执行的。
我打开了在线反编译的网页,将pyc文件转为py文件,我们就可以正常打开了,即使反编译无法完整的还原代码,但是这是目前能想到的唯一办法。
在这里插入图片描述
反编译得到的代码如上,然后开始分析代码。发现第3行开始的encode函数是主要的改变用户输入的flag的处理函数,处理后将其与create比较,全部正确则输出correct。
现在利用correct里面的字符串进行逆向,找出flag,书写如下脚本:
在这里插入图片描述
得到flag:nctf{d3c0mpil1n9_PyC}

4.getit

直接用ida打开给出的文件,32位不行就上64位!F5反编译一下得到代码。
在这里插入图片描述
分析代码。找到s和t的对应的值
在这里插入图片描述
用s和t对应的值进行编译,我们可以模拟输出:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

#pragma warning(disable:4996)
int main(void)
{
    __int64 v5;
    char v3;
    char s[] = "c61b68366edeb7bdce3c6820314b7498";
    char t[] = "SharifCTF{????????????????????????????????}";
    v5 = 0;
    while(v5 < strlen(s))
    {
        if(v5 & 1)
        {
            v3 = 1;
        }else
        {
            v3 = -1;
        }
        *(t+v5+10) = s[v5]+v3;
        v5 += 1;
    }
    printf("%s",t);
    system("PAUSE");
    return 0;
}

跑一跑得到字符串,试试发现它就是flag。
SharifCTF{b70c59275fcfa8aebf2d5911223c6589}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值