记BCTF之旅—真假难辨
时间:2022-04-26
本文章向大家介绍记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团队提供的平台!
- .NET Core采用的全新配置系统[10]: 配置的同步机制是如何实现的?
- C+实现神经网络之贰—前向传播和反向传播
- 通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[上]:采用管道处理请求
- 2017奇葩机器人大盘点:一言不合让你变瞎
- 【机器学习实战】第14章 利用SVD简化数据
- 异步数据存储声明
- 区块链学堂——公有链、私有链、联盟链、侧链、互联链
- 人工智能将让我们更擅长辩论
- ASP.NET路由系统实现原理:HttpHandler的动态映射
- 腾讯、卓健科技、恩泽医疗合力打造“互联网+智慧医院”
- 区块链,不是比特币(1)
- 小程序缓存 删不删你都该知道的事儿
- 32位 or 64位:Apache CloudStack系统VM架构选择
- Apache CloudStack系统VM架构选择
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Spring JPA 查询创建
- 『Python动手学』Python处理.mat文件
- Swift 打开三方地图 腾讯地图、百度地图、高德地图、Apple 地图
- 初学者应该看的JavaScript Promise 完整指南
- React Advanced Topics
- try catch引发的性能优化深度思考
- 用于自动驾驶车辆视觉定位的地图存储:ORB-SLAM2的一种拓展
- c# 动态产生控件 注册动态控件事件
- leetcode 一些算法题及答案
- 得分--UVa1585
- 如何计算一个程序的运行时间
- c语言输入回车结束输入
- C# devExpress BandedGridView属性 备忘
- 结构体的应用及所有形式
- 百炼1003