引言

距离蓝帽杯已经过去了很久了,鸽到端午节才想起来更一下博客(真是丢人啊退群吧)
这也是第一次跑出去参加这样的线下赛,深刻诠释了什么叫做公费旅游,赛场摸鱼。
说来也挺神奇,我们队只派了我一个代表,三个人的队伍就只有我一个人在那里坐着,有够尴尬的。
作为一个出去见世面的新手炮灰队,最后自然也是没有晋级orz
不过收获还是不少的,见到了很多师傅,也学到了很多的新东西,甚至还在太原打到了maimai!
作为逆向手,接下来就分析一下半决赛的逆向题。

src_leak

不是很懂这题考的是个啥,貌似就是个代码阅读的能力,只需要花一点时间学习一下语法再进行翻译爆破就可以出来。
下面直接上脚本看一下就行了。
更何况,这道题还是个原题。。。【Writeup】i春秋网络安全领域专项技能赛_Reverse_srcleak
甚至flag都不变,wtm……还我时间啊kora!!!
我的脚本:

#include <cstdio>
#include <cmath>
#include <iostream>
#include <windows.h>
using namespace std;

unsigned long long int func(unsigned long long int a,unsigned long long int l,unsigned long long int r){
    if(l == r) return l;
    unsigned long long int mid = (l + r + 1) / 2;
    if(a < mid*mid) return func(a,l,mid - 1);
    else return func(a,mid,r);
}

unsigned long long int fun2(unsigned long long int a){
    if(a == 0) return 0;
    return fun2(a / 2) + a % 2;
}
int fun3(int a,int b){
    int x1,x2;
	if(a == 0) return 0;
	if(b == 0) return 1;
    if(a % b != 0) x1 = 1;
    else x1 = 0;
	int c = x1 * a;
    if(b*b <= a) x2 = b+1;
    else x2 = 0;
	int d = x2;
	return fun3(c,d);
}

int fun4(int a){
	if(a == 1) return 0;
	if(a == 2) return 1;
	int x; 
    x = fun3(a,2);
    return x;
}
int main(){
    int num[5] = {963,4396,6666,1999,3141};
    printf("flag{");
    for(int j = 0;j < 5; j++){
        for(unsigned long long int i = 1;i <= 99999999999;i++){
            unsigned long long int x1 = i;
            unsigned long long int m = func(x1,1,x1);
            unsigned long long int n = fun2(x1) % 2;

            if(m == num[j] && n == 1) {printf("%lld-",x1);break;}
            }
    }
    int cout = 0;

    for(int i = 1;i <= 10000; i++){
        int x = fun4(i);
        if(x == 1) cout++;
    }
    printf("%d}\n",cout);
    system("pause");
    return 0;
}

py交易

好的,pyc文件,直接上Easy Python Decompiler进行反汇编,失败!
嗯!知识盲区,不会了!摸鱼开始

好吧,这题确实直到比赛结束了都不会做,直到下来看到师傅们的wp,好家伙又是原题。
怎么你们这么喜欢出原题啊!!!

Python字节码解混淆 -安全客
Python字节码解混淆之反控制流扁平化 -安全客

这两篇文章挺值得去研究的,看完之后收益良多。
首先要了解pyc文件的结构,然后是字节码,其实这个东西和汇编语言挺像的,不过我倒是感觉比汇编简单多了。
自己修改py自带的dis模块,对字节码进行解析之后再去除错误指令
最后再反汇编或者直接阅读字节码之类乱七八糟的方法获得flag

当然因为自己水平有限,py没学好,所以并没有进行实际操作
以后再说吧,摸了。

可靠

嗯...... 什么?你问我为什么没有初赛的wp?xs一道都写不来。