记BCTF之旅—真假难辨

作者 ChandlerLeo

我也来凑个热闹,解析一道BCTF——真假难辨。

首当其冲的便是一个偌大的you must login at host computer,看来得想办法绕过了。

抓包!上burp suite神器。

出题者故意很明显的给了我们一个“ip=。。。”,看来这里是突破口,恩。试试,果然127.0.0.1是正解。

有一个偌大的对话框,这里笔者卡了很久,还是不够敏锐啊,最后竟然是admin admin。

同时仍然不要忘了,抓包,改ip。注意!!

接下来,映入眼帘的还真如题目所说,是一个游戏,不过这是笔者玩过的最无节操的僵尸游戏了~僵尸这也太牛了,明显者不是给人玩的,是给僵尸玩的:)

出题者不给咱玩游戏,那就一竿子捅到底,直接上源码,源码搜了下“BCTF”,直接定位flag,然后顺藤摸瓜,理清脉络 ,flag也就自然算出来了嘛~

笔者这里去掉了大部分无关的代码,只留下了flag部分核心的代码。

var player = function(options) {
    this.moveSpeed = 5;
    this.life=5;
    var authp = function(a, b) {
        var c = 0xfff;
        var d = 0xfff;
	var e = a - b;
	var f = a + b;
	var g = a * b;
	c = c * d;
	c += c * d;
	d = d * e + f * g;
	g = f | d;
	g = g ^ f;
	f = g * f;
	return f;
    }
    this.pe = authp(this.moveSpeed, this.life);}var createGhost=function(x,y){
        var newGhost=new ghost({width: 115, height: 136, x:x, y:y });
	newGhost.addAnimation(new cnGame.SpriteSheet("ghostRunLeft",srcObj.ghostRunLeft,{width:1265,height:136,frameSize:[115,136],loop:true}));
	newGhost.addAnimation(new cnGame.SpriteSheet("ghostRunRight",srcObj.ghostRunRight,{width:1265,height:136,frameSize:[115,136],loop:true}));
	newGhost.addAnimation(new cnGame.SpriteSheet("ghostDieRight",srcObj.ghostDieRight,{width:4320,height:176,frameSize:[240,176],frameDuration:150}));
	newGhost.addAnimation(new cnGame.SpriteSheet("ghostDieLeft",srcObj.ghostDieLeft,{width:1800,height:254,frameSize:[225,254],frameDuration:150}));
	newGhost.addAnimation(new cnGame.SpriteSheet("ghostHurtLeft",srcObj.ghostHurtLeft,{width:816,height:157,frameSize:[204,157],frameDuration:150,onFinish:function(){this.relatedSprite.recover();}}));
	newGhost.addAnimation(new cnGame.SpriteSheet("ghostHurtRight",srcObj.ghostHurtRight,{width:816,height:157,frameSize:[204,157],frameDuration:150,onFinish:function(){this.relatedSprite.recover();}}));
	return newGhost;	
    }
    var authnum = function(key, num){
	var list = new Array('a', 'b', 'c', 'd', 'e', 'f', 'g');
	key = "BCTF{" + key + "|";
	for(var i = 0; i < num; i++) {
	    key += list[i%7];
	}
	key = key + "}";
	return key}var ghost = function(options) {    
	    this.init(options);
	    this.moveSpeed=20;
	    this.life=20;
	    var auth = function(a, b) {
		var d = a;
		var e = b;
		var a = 0xfff;
		var b = 0xff;
		var c = 1024;
		a = a << 2;
		a = a << 6;
		b = a + b;
		c = a + b + c + d + e;
		return c;
	    }
	    this.gh = auth(this.moveSpeed, this.life);}
	    var gameObj = {
	        initialize:function(){
		    this.key = ""
		    this.deadghost = 0;
		    var newGhost=createGhost(740,1064);
		    this.key += newGhost.gh;
		    this.key += "%"+this.player.pe;

	    update:function(duration){
	    if(cnGame.collision.col_Between_Rects(this.player.getRect(),this.end.getRect())){
	        if(this.deadghost == 10){
                    this.key = authnum(this.key, this.deadghost);
		    alert("The Key is:" + this.key);
	        }

大概说下脉络:

首先可以看到flag分了两部分,一部分是key,它是传进来的,另一部分是authnum这个函数算出来的。所以重点在key,

顺着函数的调用,我们会发现key有两次更新,第一次更新是在this.key += newGhost.gh;第二次是在this.key += "%"+this.player.pe。脉络理清了,剩下的就是算了。

BCTF{2097959%2400|abcdefgabc}

over~

大牛勿喷!

感谢BCTF团队提供的平台!

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2014-03-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户2442861的专栏

Pyqt phonon的使用

Qt phonon地址:http://wenku.baidu.com/link?url=nH_dZ8lZbXHy8N5__8jAWLXcuMYf4yRjdCK...

20210
来自专栏Kurt Niu 的博客

我用C#写的CF外挂

        妈的,你就是想变瘦,你可以卖个减肥药什么的都可以,但是你卖女人就是不行。

48130
来自专栏牛客网

19届前端实习生面经

17500
来自专栏游戏杂谈

游戏繁体化那些让人蛋疼的事儿

项目首先从国内开始做,然后跟台湾那边谈了合作,要发行台湾版本。这过程中遇到一些问题,特别的坑,特此记录一下

14720
来自专栏iOSDevLog

初试 iOS 11 新框架:Vision Framework 让文字检测变得更容易

63740
来自专栏即时通讯技术

调皮的程序员:Linux之父雕刻在Linux内核中的故事

因为LINUX操作系统的流行,Linus 已经成为地球人都知道的名人。虽然大家可能都听过钱钟书先生的名言:“假如你吃个鸡蛋觉得味道不错,又何必认识那个下蛋的母鸡...

17240
来自专栏睿哥杂货铺

我的2017年度盘点

https://www.gitbook.com/book/riboseyim/linux-perf-master/details

22280
来自专栏生信技能树

GEO数据挖掘-第一期-胶质母细胞瘤(GBM)

lncRNAs PVT1 and HAR1A are prognosis biomarkers and indicate therapy outcome for...

71760
来自专栏IT平头哥联盟

做完小程序项目、老板给我加了6k薪资~

  大家好,这里是@IT·平头哥联盟,我是首席填坑官——苏南(South·Su),今天要给大家分享的是最近公司做的一个小程序项目,过程中的一些好的总结和遇到的坑...

18840
来自专栏Java帮帮-微信公众号-技术文章全总结

Java案例-俄罗斯方块/蜘蛛纸牌

《俄罗斯方块》(Tetris, 俄文:Тетрис)是一款由俄罗斯人阿列克谢·帕基特诺夫于1984年6月发明的休闲游戏。 该游戏曾经被多家公司代理过。经过多轮诉...

44070

扫码关注云+社区

领取腾讯云代金券