做的时候还是有点紧张,一时间想不起来(哎!),先找main函数,如下图,第一个就是(为什么不找字符串,其实字符串就是为了找道主函数)
发现了如下的代码:
以及它们在比较。直接看判断条件,发现了它经过了一系列的加密方式,再与其比较
这是判断条件:
脚本如下:(运行即可得出flag)
这道题还可以,就是换了一下思路,(原题,不过的换个思路!)
发现了一些不同之处,看着特别顺眼,这就不对了,因为逆向是逆过来的,没那么顺眼,那我们就逆着看看,它是个base加密,只不过换个base表,那我们也换个,脚本就不写了(太长,也不好写)所以我们就复制一个网上的脚本,然后换一下base表就行了,运行提交就行了。
这道题还行
这道题怎么说,就是它说你的用post的方式来访问这个页面,所以F12用post直接访问(什么都不用输入)就的到flag了。
这道题怎么说:
得用虚拟机打开,然后才能看到图片
图片如下:
发现一些奇怪的字符,而我知道标准银河字母,但发现不对,所以我们改变了方向,这是个 我的世界 里的字母,那我们就去搜一下,看看到底是个什么东西:
发现了个这个,那我们一一比对即可。最后的flag得加上{}(这里有点迷吧!)
这道题怎么说,还可以(是个原题)(其实有个地方比较迷)
找伪代码:
发现个这个,点WinMain这个进去看看:
再点DialogFunc这个进去看看:
再点sub_401090这个看看:
发现我们所熟悉的东西AGCTF还有其它的东西,那我们拼凑出flag,发现少个v5,那我们进去找找呗
_itoa这个函数是有点问题的
然后我们点进去xtoa这个函数里发现那许多东西(这里也是我比较迷的地方)最关键的是函数尾部,它这里:
这里是有点迷人的(以前做题在攻防是世界上看过的,可能是运气吧),这里其实是复制一样,将a2的值赋给a1,而a1的值我们可以追踪到时123,这是在刚开始的if判断条件里:
if ( v10 == 123 && v12 == 120 && v14 == 122 && v13 == 121 )
这里它说!,那我们就认为它是,所以v10=123,那v5就是123。这样最后的flag就得到了。
如下:(先找字符串)
发现
Welcome to CTF game!\nPlease input d/D to start or input q/Q to quit this program:
这个字符串,那我们就点进去找伪代码。(不过,其实我们还可以发现点不一样的地方:字符串的最后两行)有时候,我们做题多了,会发现不一样的地方,就比如说,字符串里出现了一些很整齐的字符(往往它们都很有用),最后两行可以看到一些字符,我们可以先在心里面默默记下,这里是有一些东西的:
它说的就是,你输入dD就开始游戏,输入qQ就退出游戏,如果我们开始游戏的话,就会进入到 Decry()这个函数,那我们点进去看看:
unsigned __int64 Decry()
{
char v1; // [rsp+Fh] [rbp-51h]
int v2; // [rsp+10h] [rbp-50h]
int v3; // [rsp+14h] [rbp-4Ch]
int i; // [rsp+18h] [rbp-48h]
int v5; // [rsp+1Ch] [rbp-44h]
char src[8]; // [rsp+20h] [rbp-40h]
__int64 v7; // [rsp+28h] [rbp-38h]
int v8; // [rsp+30h] [rbp-30h]
__int64 v9; // [rsp+40h] [rbp-20h]
__int64 v10; // [rsp+48h] [rbp-18h]
int v11; // [rsp+50h] [rbp-10h]
unsigned __int64 v12; // [rsp+58h] [rbp-8h]
v12 = __readfsqword(0x28u);
*(_QWORD *)src = 'SLCDN';//这里我们r键转换下,对了,它实际上是NDCLS,这点我们要记清楚
v7 = 0LL;
v8 = 0;
v9 = 'wodah';//这个也是
v10 = 0LL;
v11 = 0;
text = join(key3, (const char *)&v9);
strcpy(key, key1);
strcat(key, src);
v2 = 0;
v3 = 0;
getchar();
v5 = strlen(key);
for ( i = 0; i < v5; ++i )
{
//这里的@和Z是65和90,在ascll码中是大写字母,它又加个32,这可以说明它是大写变小写
if ( key[v3 % v5] > '@' && key[v3 % v5] <= 'Z' )
key[i] = key[v3 % v5] + 32;
++v3;//它里面为什么是v3 % v5这个,因为v5是它的长度,而v3是个0,它因给是防止它大于key的长度,
}
printf("Please input your flag:", src);
while ( 1 )
{
v1 = getchar();
if ( v1 == '\n' )//换行
break;
if ( v1 == ' ' )//空格
{
++v2;
}
else
{
if ( v1 <= 96 || v1 > 122 )//不能是小写字母
{
if ( v1 > 64 && v1 <= 90 )//大写字母
str2[v2] = (v1 - 39 - key[v3++ % v5] + 97) % 26 + 97;
}//这个就是要编译的脚本
else//不是大写字母也不是小写字母
{
str2[v2] = (v1 - 39 - key[v3++ % v5] + 97) % 26 + 97;
}//这个就是要编译的脚本
if ( !(v3 % v5) )
putchar(32);
++v2;
}
}
if ( !strcmp(text, str2) )//比较字符串,所以一个数输入,一个是要比较的东西
puts("Congratulation!\n");//这个是我们想要的,毕竟值恭喜吗,所以我们可以从这你这推导
else
puts("Try again!\n");
return __readfsqword(0x28u) ^ v12;
}
上脚本
这里我差点写错(应该说我写错了个地方,就是i=0,我写成了i,所以答案出不来,弄了好一会才弄好!)
这道题的用个工具Wireshark,换了台电脑(所以截图弄不上),然后打开它,用全局搜索,就是Filter这里。
不过使用的话得再前面加上个frame contains 然后搜索AGCTF,不然它会显示红色,它变成了绿色就说明语法对了,然后就能搜到flag。
这道题怎么说:
一大堆东西,熊曰:这个东西就是个提示,那我们就能找到与熊论道,弄出来个:
諸隸毘僧降吽諸陀摩毘隸毘僧缽薩毘咤降毘夷缽宣蜜眾毘降嘇僧摩咤毘修眾毘色心毘願毘諦喼所慧闍咒毘諸迦諦毘空所毘僧毘是般如
这一大堆东西,那我们可以看出比较眼熟,找找于佛论禅,但发现错了,然后我就没怎么看这道题,等我们擅长的做完了,又反过了看看,发现是!!!新约佛论禅!!!
就再那的到了这个flag。
这道题学长说了好多遍,其实刚开始就有了思路,我用Notepad++打开,添加了504B0304,不管用。
那我就用winhex打开,我修改了头文件,但不管用,那便是添加头文件,但我没找到怎么去操作这样添加头文件,百度找方法,winhex又提示我不是专业版(哎!)
这道题用了图片转码,我找了一下,并转了码,但还是什么都没有,这就尴尬了!
这道题没做出来,怎么说,我看了一下攻防世界的ping题,有点思路:
这里就卡住了,我想的是
http://123.207.214.123:5002/?ip=1|cat flag.php
但这样没结果,因为提示有说看看源代码,所以我看了看,但还是没发现什么(其实越往后做越做不下,自我感觉我的状态是由衰转盛,由盛转衰,到后面有点头疼)
这道题做出来的人挺多的,(所以我还是有点丢脸)我发现网上有好多MD5碰撞的,但我发现等号有所变化:网上的大都是==,而这里出现了===,所以我用网上的md5碰撞的一些数据是不行的,再后来也没怎么深入思考了。
这里多了个这个,只要提交成功就能获得flag,但臣妾做不到啊!
不过我发现提交的格式是图片(jpg、png)就会出现
上传的一些东西,好像是文件上传吧!
有了思路:上传一句话木马
然后用菜刀连接。
不过我的电脑弄不了一句话木马(它会自动检测为病毒),实验是电脑没法上传,不过在学长的指导下,我明白了怎么去做这道题。
先用php格式上传一句话木马,再用菜刀去连接后台就行了。
总的来说,我基本做的是逆行(而web没怎么去做,misc做的一些,还是后来做的),还是自己的web的技巧不够,看到题不会做,还是在学长们的一再提醒下才做开