湖湘杯 联合魔法少女WriteUp

前言:平台傻逼,题也一般甚至拿原题往上怼给我整乐,最后一分钟掉了30多排名,什么成分不用我多说了吧,懂得都懂,反正wp👴也交了,线下爱进不进,最后来膜一下帅宝,直接把RE给ak了tql!!!!!!,妈妈爱你!!!!

图片[1]-湖湘杯 联合魔法少女WriteUp-魔法少女雪殇

点下载,下载无嘴臭纯解题的大赛版wp,内涵完整flag

WEB:

WEB1:

纯nt题,我以为这种过滤还得用什么骚姿势写源码啥的,他妈的写半天脚本把🐎写上去了,你告诉flag藏在phpinfo?傻逼题,就这?

图片[2]-湖湘杯 联合魔法少女WriteUp-魔法少女雪殇

真实给我整乐了

图片[3]-湖湘杯 联合魔法少女WriteUp-魔法少女雪殇

补充一嘴,下午那会平台炸了,我做出来一交flag判我作弊,给我一警告?我一看靶场,好家伙,给我靶场换了,彳亍,那👴就访问你的新靶场,新靶场你妈的访问不了是最牛逼的,还是打的客服给我手动要的,属实sb

图片[4]-湖湘杯 联合魔法少女WriteUp-魔法少女雪殇

WEB4:

也是nt题,好家伙,把cms靶场拿来玩,我注入了114514个小时发现你家题目自带后门是真的牛逼。后门在upload里面有个php3的后缀,密码是个1,笑死我

常规解法:(by Ab4o)

打开后扫了扫目录,发现了directory traverse 问题。有upload等文件夹,从文件夹里内容的相关字段可以确定该CMS为熊海CMS。遂搜索与其相关的漏洞。

后台地址/admin,账号密码弱口令admin/admin。

图片[5]-湖湘杯 联合魔法少女WriteUp-魔法少女雪殇

登录之后是什么都点不动的,然后查看源代码有个链接给注释掉了,所以我觉得他是手动把首页所有跳转搞没了。查阅相关资料发现了如下链接:?r=adset,点进去之后,后台所有的链接都可以正常跳转。

之后查看upload目录,有个touxiang文件夹,里面有个php3后缀的文件,比较可疑。

图片[6]-湖湘杯 联合魔法少女WriteUp-魔法少女雪殇

然后找上传点,在后台可以发布内容,发布内容里面可以发布文章也可以上传附件,我这里考虑传图片马,图片马能正常上去,但是没法传正常的htaccess,所以考虑别的利用方法。

现在想到了之前的php3文件,在修改头像处上传绕过,改MIME与文件后缀为php3,顺利上传shell,蚁剑连接即可。

图片[7]-湖湘杯 联合魔法少女WriteUp-魔法少女雪殇

CRYPTO:

crypto1:

不知道,反正密码人做的

from pylfsr import LFSR
from Crypto.Util.number import *
import random,string
dirct = string.ascii_letters+string.digits+"{}"
enc1=b'\xbb\xd3\x08\x15\xc6:\x08\xb2\xb2\x9f\xe4p\xc7\xec\x7f\xfd)\xf6f\x9c\xe4\xd12\xaeJ\x81\xb1\x88\xab\xa5V\xa9\x88\x14\xdf`~\xf6\xdbJ\xb4\x06S!0\xbb\xe4\x1a\xe6R\x8e\x84X\x19K\x95\x07C\xe8\xb2\'\xa9\x80\x15\xec\x8f\x8dY\nK\x85\x99\xb7!\x134\xa9\xb6\x15\xcf&\r\x9b\xe1\x99\xe4]3h~\xf0\xa9\xa5\x14\xee}\xd19l\x14h\x07v*a0\x12\x14\xfe\x0f\x05\xdem\x1d\xe4s2J\x7f\xc28\xf6RR\x8e\xba\xb2m\x18M\xf1\xef!4\x17\xa8\xb4\x14\xc2\x8f\xb9Y:K\xaa\x06T!\x1b\xbb\xfd\xf6Gv\x8e\x9a\xeb\xd9K\xbb\x06N\x9a\x82c\xa9\xa0\x14\xed!\x04\xdbm\x13\xe5w3B\x7f\xd0\xa9\xbf\xb7\x9c\xe3\xd00\x83K\x86\xab3\x7f\xc1\xbb\xfd\x11\x15\xdf\x8e\x80Y\x07\xd8\xe5]2m\xe9\xbb\xce`\x91o\x8f\x8cY!\x81\xe4J\x92\x8c\xa7T\x16E\x15\xf1WMY(\xb8[\x8e2y~\xcbM\x10\x15\xc7\x1fWY\x0cK\x87\xce\xe5!b\xa8\x83\x14\xec6\xd1!\xc8\x905\xe52L\xf1\xba\xcf\n\x9d\x9d\xe7u\xadm\x06\xe4n2r\xd8\xba\xed\xf6\x7f\x9d\xd8\xd02m\x12G\x07Y\x89\x7f\xc0\xa8\xa4\x15\xe5\x043Y\x1eJ\xae\x07n\x94\x87\xbb\xcf_\x8d\x9d\xd1\x14Y,\x9e\xe5b\xd7\x8c\x7f\xf7\xa8\x8f\x14\xc7\x8f\xb3\xb6\xf1\x93\xe4O\xdd\xc4\xdb\xba\xf6!\x15\xfd.\xd1\x18\xcf\xf6\x03\xea2E\x7f\xe1\xa9\xa5\xfe\x9d\xc9\xd1;\xd9\xee\x05\x06z\xc8\xb2\xbb\xe2\xf7{JW4\xcdm\x1a\xe5U\x8d\x0f&\x14\x7f\xf6\x9d\xd4E\xbf\xc3\xdb\xe4L\xe1\xf7\x90\xbb\xdaZ\xf4\x9d\xd13\xb8m3\xe2D3o~\xf8H\xf6U*\x07lY\x03K\xab\x07~\xa3\x87\xbb\xc9\xf7sAQ\x08Y6J\x86\x07Y\xec\xf7\xbb\xc6s\x15\xc6\x7fEY\x02J\x95\x07Z\x11\xbb\xc6T\x15\xfc-\xd0\x06\xe6\x9f-\x07^\x15\xbb\xccz\x14\xf3\x8f\x97\xd4l9t\x85\xe8\x8a\xbe\xbb\xf9\xf6f\x9d\xf2\xd19\xa2K\xb6\xcd\xcf\xf6~\xd5\xa9\xaa\x15\xd8\x8e\xb3\x81m9\xe4f\xb2!\x1e\xba\xd8s\xfd\x11\x08W\xa1l;\x01\x07_!\x11\xbb\xdd\xf6x\x9d\xf0\x17Y\x15\xfe\x02\xc7\xa0!.W\xa9\xa5\x8f\x9c\xe8\xd1\x12m\x04\xe5s3Q~\xdd\xa9\xa3\x15\xdb\x8f\xac\xaf\xec\xbb\x10\xde2_\xba\xba\xe8\xf6f.\x1e\xd1\x17l\x06\xe4U\xdd\xf0\xd6~\x0fA\x14\xcb\x8e\xb0Y\x1fJ\xb2\xe4\xb3!"\xba\xfeU\x14\xedY\xd0>l-~\x06P1\xbb\xf2\xf6waD\xd1(m\x12`\x06@\xb6~\xfa\xa9\xb1\xb0\x9d\xfb\x18\xfbm&\xe4v2w\xce\xba\xcbo\xd5\x07\x11QX<J\xbd\xb22O\x7f\xd8x>\xc8\x9c\xd3\xd03\x9d\xb5\x1e\xd72S\xf2ry\xf1W\x9c\xc89Y\rK\x8f\xff\x8a\xe0\xb5{\xa9\xae\xb1\x9d\xdd\xd1=\xbeK\xa3\x06e!\x08\xba\xd2\xf6j\x9c\xf6\xd0\x0fl#\xe5o\xf5\xaa~\xc2\xa9\x99\x15\xea6\xd1:\xe7\xa8\xe4n\xbb\nV\xa9\x91\x14\xf9}\xd0!m/\xe5|2o\x81\xba\xf8\r\x14\xeb\tR\xc9\xec\xdd`\xbf\xc6\x81\xdfKXW\xb3o.%\xa9\xcd\xb9\x14\xfd\x97\x83\x8eO\n\x03\xb6iuu\xab\x9d\xbc\x15\xf4\xc3\xd6\xc1'

enc2 =
b'p\xfd\x1ff\xcaB\xa5\xe6`\x87\xa8\x8ci\x855\x92O8P\xa5}^\xd8\xed\x1a\x88=c\xe0\x9f\xedq\xf8\xe1%\x7fX\xd2\xba\xbe\x03\xa8\x9a\x9c\x075\x98"\xca\xed\xa4C^\xc6.j\xec\xfa\x10\xa7\xd9\x01\x06\x87\x90f\xcc\xf6\x1b\x0c\xde\xcc,\xfb\xf0\xc74\x94\xcfj\x8ay\xd5\xd2`.@\xed\xc2\xd8!DSp\xf5\x12f\xf1\xf6#\x80\xbe\x16\xa8\xaeF\xd0\xd1\xd4\xad\xb9\xf7#\x16\x08\xb2[\x1a\x87\x8b\xa0\xfaEF\xbf\x86\x8b\x8c\x90\xa4\xd5\xfbcR\xe2W\x9c\n5\x8b\xcfQ"\xf2\x16\x10\xb2I\x1a\x88\x8b\x8cj\x16\xebp\xccS\xd2\x90\xa8|q\x05\xafq\xfa\xcaHE{\x1a\xba#\xfd\x17/\xb2L\x1a\x87\x8a\x90\xc9Dmp\xef\x0ef\xf2Z|S\x00R\xfc\x1c\x9d\n5\x84\xceS\xb0\xa4M_\xff\xb9\x1a\x8a\x1d\\\x98D\\p\xcb*f\xdcV\xd0\xd5Q\xec\x1a\xfa\xf0\x91\xa8\xd4\x8a\xca\x9c-\x17\x07\xb2_\xff\n\x8a\x83\xfb\xc2\x00\x10\x87\x83\xaeF\xf7#\xd4\xbe\'\xa9\x8a$IMp\x14\xe8\xc0\xa4z\xd1\xb2H\xe6e\x8b\xb0\xcf\xb1\x01<\x87\x88g\xc2Q|H\xbe9\xa9\xad\x9c#4\x8cl8I\x0c\x17$\xb3}\x1b\x94\x01:j7\x00;\x86\xbd\xd2i\xf6\x1a\xa4\'R\xf6?\x9c\x08\xe1\xd4\xab\xdd\x8f\xa4[_\xca/@\xed\xe86\xf7\x9c\x018i\x04\xc3\x90\xa8\xaa\x0c\xde\xf2\xa8\xba?\xf4\xd39\xce\\"\xfe\x16\x0cY/]\xed\xe9l\xce\xa5\x018o,g\xdb\xf7\x12\xdag\xb6=\xfa\xccHgk\xcfH\xbf\x18\x9e\xbd\xb3u\x8f\n$Hk\x0e\xd3\xa6i\xe1\x15=\x16}R]\xb3\xa8\x82\x9b\x0b4\x9a\xcf{\xc2\xa4V\xe8:\x93\x1a\x83\x8a\x97j\t\x82\x88\x86\x80f\xf6*\xa2\xd5\xbe\x08\xa9\x98\x9c#\xf8\\\xceV\xa7\xa5L\xae&/t\xec\xfb\xd9\x02Dnp\xe8Cf\xf0U}R4\x87a\xfb\xf0I_\xd4\xaa\xb4"\xca\x16\x18>/i}\t\x03\xc1\x84\x00!\x86\x93g\xed\xf7\x1d\xc3\xbf\x01c\x06KI[\xd5\x929g\xa4t\x87\xb2\\\x1b\x8d\x0b\xd9\x0bDp\xf5om\xe1\x16\x0e}|ZR\xc4\xfb\xf2H@\xd4\xa28\\c\x17&\x07\xc8\xda~\x8b\x88\x86DS\xeb\x87\x87f\xda\xf73\r\xcaS\xd9\xfa\xfaI`\xd5\x889^R\x97\xaeF\xf6\x1a\x92N\xd8*Er\xc3\x16\xe0)\x91\xba|_Q\x83\x00>;\xff5\x82\xceX"\xd7\x17\x08P\xae\x1a\xb1\x8a\x8f\xc9Ep\xa7\x86\x86g\xf6m|o\xbf\x1c\xa9\xa1\x9c+\xc9\x1e\xcfI#\xfc\x92^\xc1\xb8\x1b\xad\x8a\x9e\xceEu\xb8$\xe0\x0b\x90\x87}[\x0fS\xcab]\xd2\xaaU\xcfh"\xfc\xa2_\xdd/y<C\x05k\x18\x00\x1aw\x1e\x9cA\xf6\x0f\x80w\x83\xae\xb8\x9d\x0e\xdc\xd4\xaf9H\\\xaf\x9ey\xef\x1b\xb4.\xd99Dd\xa2\x87\xa7f\xc6\xf6\n\x0c\xc4R\xd7\xfa\xe4Hc\xd4\xa78Jc\x9c^\xca.u\xed\xfcak&\x8b\x92\x87\x88\xee\x90\x83\x90\x0c\xd9R\xcd\x08\x9c04\xb1\xceC"\xea\xe9^\xe3\xd4\x1a\x9a\x0c[\xfa\xc5\x97\xf5>\x15\xc71\x06\x8d\xac\x19\xa0\t\x0el\xe9\xc6%4\x9d\x80U\xe3\xfdF\x8d\xee\x17.+\x9b\xb3\xf0\x83w\x16\xd9'
k4 = [0]*15
k5 = [0]*31
k4[14] = enc1[809]^ord('}')
for i in range(14,810,15):
   k5[i%31] = enc2[i]^enc1[i]^k4[i%15]
                                                      
for i in range(810):
   if chr(enc2[i]^k5[i%31]) in dirct:
        print(chr(enc2[i]^k5[i%31]),end='')
   else:
        print(end='|')

运行后:

|||||w||||||6|||B|||||||||uyI|||||||mlt|||||||||1|||||||||||||||||||||||F||L|
|||k||N|||||||||||0||||N|||||||||B|D||||||||S||||||||k5|||o||||||||||||||||||
|||qv||||x||||||l|A||||||||||||||||||o||}|||||||||Q||||U||UF1|||||||cn||}p|||
|||1}J||||||||RD|||||||||||||
{||g|||||M|||J||f7||||||d||||||||||a||k||||||I|||||||v|||jZ|||||||||n||||||||
|||||||g|||||c|||||||||||||||||vg||||||||||||W|||||||||J|||V|lR|||||||o||||||
||||||||||tJ|||||||A|||||||||||||||K||F||2V||||||||||a|||||I||||||||O||||N||R
A|h||||||||||||||||||||||||||||C||||F|OED|||||||||||||||||w||Q|||||X|||||||||
|||||||||5C26||||||||pS||||||||j|dt|||||||||B||||||||||||X||||||||||||||F||T|
|||g|||a||||||r||Z|Y|B||||v|||||||||||2|8|||N||||||||||||
{|||||f||||||||||||||||||||||||H||||||
{||H|||J|||||||0|||||||||||8||DASCTF{7cc33bd1c63b029fa27a6a78f1253024}

crypto2:

七星哥哥打了外援,我爱你😗

获得的密钥直接在线网站破解

https://www.guballa.de/vigenere-solver 解密出后,密钥换大写MD5就完事

MISC:

难得体验了一次ak的快感,我爽了

misc1:

一个流量包,直接HTTP导出

图片[8]-湖湘杯 联合魔法少女WriteUp-魔法少女雪殇

找了半天,发现index-demo.html有点内容,根据文件内容获得提示是snow隐写

同时还存在着一堆base64加密

图片[9]-湖湘杯 联合魔法少女WriteUp-魔法少女雪殇

逐行解密发现没啥用,想到是base64隐写,直接解密

获得snow隐写密钥:

图片[10]-湖湘杯 联合魔法少女WriteUp-魔法少女雪殇

利用SNOW工具对index-demo.html解密

图片[11]-湖湘杯 联合魔法少女WriteUp-魔法少女雪殇

将获得的内容依次转换成摩斯电码

a宝写脚本一把梭了:

# -*- coding:utf-8 -*-
res=[]
import  re
unit=3
answer='→_→←_←←_←←_←←_← →_→→_→←_←←_←←_← →_→←_←←_←←_← ←_←←_←←_←→_→→_→ ←_←←_←←_←→_→→_→ ←_← ←_←←_←←_←→_→→_→ →_→→_→→_→→_→←_← →_→←_←←_←←_← ←_←←_←←_←←_←←_← ←_←→_→→_→→_→→_→ →_→→_→→_→→_→→_→ ←_←←_←←_←←_←←_← ←_←←_←→_→←_← →_→←_←←_←←_← ←_←←_←←_←←_←→_→ ←_←→_→ ←_←←_←→_→→_→→_→ →_→→_→→_→→_→←_← ←_←←_←←_←←_←←_← ←_←←_←←_←→_→→_→ ←_←→_→ →_→→_→→_→→_→→_→ →_→←_←→_→←_← ←_← →_→→_→←_←←_←←_← →_→→_→→_→→_→←_← →_→←_←→_→←_← ←_←←_←←_←→_→→_→ ←_←←_←←_←→_→→_→ →_→→_→←_←←_←←_← →_→→_→→_→←_←←_←'
tmp=""
cnt=0
answer=answer.split(" ")
print(answer)
for element in answer:
        s=re.findall(r'.{3}',element)
        for ele in s:

            if ele=='→_→':
                tmp+="-"
            if ele=='←_←':
                tmp+="."

        tmp+='/'
print(tmp)

MISC2

下载获得一个镜像,根据提示,直接利用vol hashdump获得出密钥,

图片[12]-湖湘杯 联合魔法少女WriteUp-魔法少女雪殇

Md5解密后sha1加密即可。

图片[13]-湖湘杯 联合魔法少女WriteUp-魔法少女雪殇

MISC3

下载获得一个zip,bandzip解压不了,360解压不全,猜测是zip包有问题 利用AZR修复后

图片[14]-湖湘杯 联合魔法少女WriteUp-魔法少女雪殇

可以解压,解压后发现有个明文

图片[15]-湖湘杯 联合魔法少女WriteUp-魔法少女雪殇

这不就直球明文爆破了🐎,有个蛋疼点,bandzip打包后爆破不了,我又下载的winrar进行打包,才能爆破,彳亍

明文爆破后获得密钥

图片[16]-湖湘杯 联合魔法少女WriteUp-魔法少女雪殇

flag.txt的内容是这玩意,明显栅栏密码,跳一下就来了

图片[17]-湖湘杯 联合魔法少女WriteUp-魔法少女雪殇

MISC4:

宇宙无敌超级大傻逼题,我怀疑这题是导致平台炸裂的罪魁祸首

常规套路进行取证,使用vol下pslist查看到有notepad.exe在后台运行

利用notepad插件查看内部内容

图片[18]-湖湘杯 联合魔法少女WriteUp-魔法少女雪殇

意义不明,在桌面上找到一个file.txt

图片[19]-湖湘杯 联合魔法少女WriteUp-魔法少女雪殇

获得内容

图片[20]-湖湘杯 联合魔法少女WriteUp-魔法少女雪殇

根据该文本提示,傻逼的地方就来了

图片[21]-湖湘杯 联合魔法少女WriteUp-魔法少女雪殇

你他妈的300多个用户,你让玩家怎么找,球球出题人教教我vol怎么找用户登录历史好吗?我确实菜,但是你的题也确实傻逼,考点与50分题一样,好搞笑

对所有用户批量解密组合,对平台爆破,正确的用户名密码为

图片[22]-湖湘杯 联合魔法少女WriteUp-魔法少女雪殇

最后md5加密就出了,很傻逼

随后我看了一眼官方的文档,说有创新题,嗯,这题目确实创新,对平台爆破的题目我是头一次看见,太棒了


RE:(ak!!!童帅牛逼!!! !!!)

RE1:easyZ(帅宝二血太帅了呜呜呜)

  1. 使用strings找到input相关字符串
  2. 使用vim搜索到偏移量
  3. 根据偏移量找到主函数汇编指令代码
  4. 判断相关的字符串偏移量

1000bc2 wrong

1000bb2 win

#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>
#include <math.h>

void printArray(char *name,uint8_t *data,size_t len){
   printf("==============%s========\n",name);
   for(size_t i=0;i<len;i++){
       printf("0x%02x,",data[i]);
  }
   printf("\n================================\n");
}
uint32_t calc(uint32_t d1,uint32_t d2,uint32_t d3,uint32_t d4){
   return d1*d1*d2+d1*d3+d4;
}
int main(){
   uint32_t addDat[] = {0xb2b0,0x6e72,0x6061,0x565d,0x942d,0xac79,0x391c,0x643d,0xec3f,0xbd10,0xc43e,0x7a65,0x184b,0xef5b,0x5a06,0xa8c0,0xf64b,0xc774,0x02ff,0x8e57,0xaed9,0xd8a9,0x230c,0x74e8,0xc2a6,0x88b3,0xaf2a,0x9ea7,0xce8a,0x5924,0xd276,0x56d4,0x77d7,0x990e,0xb585,0x4bcd,0x5277,0x1afc,0x8c8a,0xcdb5,0x6e26,0x4c22,0x673f,0xdaff,0x0fac,0x86c7,0xe048,0xc483,0x85d3,0x2204,0xc2ee,0xe07f,0x0caf,0xbf76,0x63fe,0xbffb,0x4b09,0xe5b3,0x8bda,0x96df,0x866d,0x1719,0x6bcf,0xadcc,0x0f2b,0x51ce,0x1549,0x20c1,0x3a8d,0x05f5,0x5403,0x1125,0x9161,0xe2a5,0x5196,0xd8d2,0xd644,0xee86,0x3896,0x2e71,0xa6f1,0xdfcf,0x3ece,0x7d49,0xc24d,0x237e,0x9352,0x7a97,0x7bfa,0xcbaa,0x10dc,0x3bd9,0x7d7b,0x3b88,0xb0d0,0xe8bc};
   uint32_t cmpDat[] = {0x08a73233,0x116db0f6,0x0e654937,0x03c374a7,0x16bc8ed9,0x0846b755,0x08949f47,0x04a13c27,0x0976cf0a,0x07461189,0x1e1a5c12,0x11e64d96,0x03cf09b3,0x093cb610,0x0d41ea64,0x07648050,0x092039bf,0x08e7f1f7,0x004d871f,0x1680f823,0x06f3c3eb,0x2205134d,0x015c6a7c,0x11c67ed0,0x0817b32e,0x06bd9b92,0x08806b0c,0x06aaa515,0x205b9f76,0x0de963e9,0x2194e8e2,0x047593bc};
   printf("%d\n",sizeof(addDat)/4);
   printf("%d\n",sizeof(cmpDat)/4);
   printf("0x%08x 0x%08x 0x%08x\n",addDat[0],addDat[1],cmpDat[0]);
   uint8_t flag[33]={0};
   uint32_t addT;
   char dic[] = "0123456789abcdef";

   for(size_t i=0;i<32;i++){

       // flag[i]=(uint32_t)sqrt(cmpDat[i]);
       for(size_t j=0;j<16;j++){
           if(calc(dic[j],addDat[i],addDat[i+32],addDat[i+64])==cmpDat[i]){
               flag[i]=dic[j];
               break;
          }
      }
  }
   printArray("flag",flag,32);
   printf("%s\n",flag);
   printf("%d\n",strlen(flag));
   return 0;
}

RE2:[rev] easyre

  1. IDA进入主函数没发现什么
  2. 使用调试器发现返回后进入变换和检测函数
  3. 程序逻辑为所有数组成一个整体循环右移5位,之后每一个数异或自己的下标。第0Byte异或0所以不受影响
#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>
#include <math.h>

void printArray(char *name,uint8_t *data,size_t len){
   printf("==============%s========\n",name);
   for(size_t i=0;i<len;i++){
       printf("0x%02x,",data[i]);
  }
   printf("\n================================\n");
}
int main(){
   uint8_t a[] = {0x2b, 0x08, 0xa9, 0xc8, 0x97, 0x2f, 0xff, 0x8c, 0x92, 0xf0, 0xa3, 0x89, 0xf7, 0x26, 0x07, 0xa4, 0xda, 0xea, 0xb3, 0x91, 0xef, 0xdc, 0x95, 0xab,0};
   printf("%d\n",sizeof(a));
   uint8_t flag[25]={0};
   for(size_t i=0;i<24;i++){
       a[i]^=i;
  }
   for(size_t i=0;i<24;i++){
       flag[i]=a[(i-1)%24]<<5|a[i]>>3;
  }
   printArray("flag",flag,24);
   printf("%s\n",flag);
   return 0;
}

这个脚本跑出来最后一位错误,但是根据语义推测最后一位为u

ea5yre_1s_50_ea5y_t0_y0u

RE3:easy_c++

把用户输入和下标做异或处理

#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>
#include <math.h>

void printArray(char *name,uint8_t *data,size_t len){
   printf("==============%s========\n",name);
   for(size_t i=0;i<len;i++){
       printf("0x%02x,",data[i]);
  }
   printf("\n================================\n");
}
int main(){
   char s[] = "7d21e<e3<:3;9;ji t r#w\"$*{*+*$|,";
   for(size_t i=0;i<strlen(s);i++){
       s[i]^=i;
  }
   printf("%s\n",s);
   printf("%d\n",strlen(s));

   return 0;
}

RE4:[rev]ReMe

  1. 有个python图标,猜测是pyinstaller打包的
  2. 使用pyinstxtractor解包程序
  3. 解包之后,猜测文件夹中ReMe是主程序的pyc文件,但是没有pyc的文件头
  4. 找个同文件夹下的pyc文件头,插入到这个文件开头,使用uncompyle6反编译,得到1.py文件
  5. 查看程序逻辑之后发现可以按位穷举
import base64
import hashlib
import random,string
from Crypto.Cipher import AES
from math import *
import string
import base64
import ctypes
import time

check = [
'e5438e78ec1de10a2693f9cffb930d23',
'08e8e8855af8ea652df54845d21b9d67',
'a905095f0d801abd5865d649a646b397',
'bac8510b0902185146c838cdf8ead8e0',
'f26f009a6dc171e0ca7a4a770fecd326',
'cffd0b9d37e7187483dc8dd19f4a8fa8',
'4cb467175ab6763a9867b9ed694a2780',
'8e50684ac9ef90dfdc6b2e75f2e23741',
'cffd0b9d37e7187483dc8dd19f4a8fa8',
'fd311e9877c3db59027597352999e91f',
'49733de19d912d4ad559736b1ae418a7',
'7fb523b42413495cc4e610456d1f1c84',
'8e50684ac9ef90dfdc6b2e75f2e23741',
'acb465dc618e6754de2193bf0410aafe',
'bc52c927138231e29e0b05419e741902',
'515b7eceeb8f22b53575afec4123e878',
'451660d67c64da6de6fadc66079e1d8a',
'8e50684ac9ef90dfdc6b2e75f2e23741',
'fe86104ce1853cb140b7ec0412d93837',
'acb465dc618e6754de2193bf0410aafe',
'c2bab7ea31577b955e2c2cac680fb2f4',
'8e50684ac9ef90dfdc6b2e75f2e23741',
'f077b3a47c09b44d7077877a5aff3699',
'620741f57e7fafe43216d6aa51666f1d',
'9e3b206e50925792c3234036de6a25ab',
'49733de19d912d4ad559736b1ae418a7',
'874992ac91866ce1430687aa9f7121fc']

def func(num):
   result = []
   while num != 1:
       num = num * 3 + 1 if num % 2 else num // 2
       result.append(num)

   return result


if __name__ == '__main__':
   print('Your input is not the FLAG!')
   flag = ''
   for j in range(27):
       for i in range(0x20,0x7f):
           ret_list = func(i)
           s = ''
           for idx in range(len(ret_list)):
               s += str(ret_list[idx])
               s += str(ret_list[(len(ret_list) - idx - 1)])
           md5 = hashlib.md5()
           md5.update(s.encode('utf-8'))
           if md5.hexdigest()==check[j]:
               flag+=chr(i)
               print(flag)
               break

   md5 = hashlib.md5()
   md5.update(flag.encode('utf-8'))
   print('You win!')
   print('flag{' + md5.hexdigest() + '}')
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 共5条
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情