1. 脚本在CTF比赛中的作用

CTF夺旗赛中往往分为杂项(MISC)、密码(CRYPTO)、WEB、逆向(REVERSE)和PWN。

在目前的比赛中,各种工具起到的作用在不断下降,一击必杀拿到flag很少见了。往往需要根据题目临时编制脚本,进行调试、爆破、破解算法才能顺利解题。
多以参加CTF比赛一定要有自己写脚本的能力。

2. 编程技术不好,怎么办

往往很多同学会说编程技术不好是不是要重新学开发才可以。其实大可不必,脚本不是web开发或是网络编程,不需要那么高的要求。
就像你英语不好,但置身国外怎么办,你要拿英语书从头学吗?当然不是,想尽办法,只要能让对方get到你的意思就行。努力去说去沟通,慢慢就会了。脚本编制也依然,需要用到什么,就搞懂哪里,多写多练,慢慢就能上手。到那时再系统学编程也为时不晚。

下面我就简单举例介绍下脚本是怎么一步步根据题目写出来的。 有编程基础的同学,可能一看就会,基础薄弱的同学,不要紧,get到思路勤加练习是最重要的。CTF中根据线索和源码找到解题思路和实操能力才是最重要的。

主要以python脚本为主

代码中的函数不认识怎么办,百度搜索看下很快就能掌握这个函数的用法,仅此而已,学以致用是脚本的关键。

3. 脚本编制简单举例

3.1杂项题目:一个充满0、1的TXT文件

拿到题目,是个txt文件,里面写满了0和1。

有点想法了是不是,杂项中经常考二维码,大家已经习惯了使用工具去分析。难道此题另辟蹊径,不直接提供二维码,反而需要自行构建?以CTF各种反人类的出题方式,可能性很高呢。可如何构建,下面就来一步步分析,分析完脚本也就出来了。

  1. 首先,构建二维码就要知道二维码的边长(正方形哦),所以python脚本就要读取txt文件,获取文件的大小,再开方不就得到了边长吗?
import math# 1.判断二维码数据是否可用
f = open('txt文件路径', 'r')
s = f.read()
print(len(s))
# 开平方根,如果二进制大小能整除,证明是正方形,得出宽、高  x=y=260
print(math.sqrt(len(s)))# 结果是260,解题思路正确的概率飙升到80%
  1. 不管题目,绘制二维码本质上就是要在边长为260的画布上画图 吗?这就要用上python大名鼎鼎的库PIL了。

记住PIL库创建画布的代码套路,永远都这样,就记住下面几行代码就行,套路都一样的。

from PIL import Image
x = 260
y = 260
image_new = Image.new('RGB', (x,y), (0,0,0)) # RGB模式,边长均为260,黑色(0,0,0)\白色(255,255,255)
image_new.show()


3. 那下一步是什么,结合题目 线索就是0,1。那简单啊,(反正复杂的也不会,哈哈)二维码就两个颜色白色和黑色,随机吧核心逻辑就是判断是0还是1, 0就将该橡塑上黑色(0,0,0),1就上白色(255,255,255)

还是老样子,PIL库如何对不同像素上色呢,使用函数putpixel,代码记套路。哪里不会就百度哪里。循环语句和文件读取语法,如果真是小白,这个可以百度学习python相关内容,自学时间3h吧。不要学太深,能看懂脚本的程度就可以。

# 3. 区分0或1分别上色黑或白,修复完整二维码
idx = 0    # idx表示txt文件中数据序号,第一个数据为0号,对应坐标点(0,0)  下一个1号对用坐标点(1,0)
for y in range(0, 260):   # 就是平面坐标(x,y)初中几何的知识,只不过用代码写出来for x in range(0, 260):data = s[idx]  if data == '0': # 假如txt中第一个数据为0,对应坐标点(0,0),就给他上黑丝(黑色)img_new.putpixel((x,y),(0,0,0)) elif data == '1':img_new.putpixel((x,y),(255,255,255))idx += 1
img_new.show()
  1. 汇总以上3个步骤,完整脚本和结果如下。
import math
from PIL import Image# 1.判断二维码数据是否可用
f = open('txt文件路径', 'r')
s = f.read()
print(len(s))
# 开平方根,如果二进制大小能整除,证明是长方形,得出宽、高  x=y=260
print(math.sqrt(len(s)))# 2. 测试每个像素点上色(全白、全黑)
x = 260
y = 260
img_new = Image.new('RGB', (x,y), (0,0,0)) # RGB模式,边长均为260,黑色(0,0,0)\白色(255,255,255)
# image_new.show()# 3. 区分0或1分别上色黑或白,修复完整二维码
idx = 0
for y in range(0, 260):for x in range(0, 260):data = s[idx]if data == '0':img_new.putpixel((x,y),(0,0,0))elif data == '1':img_new.putpixel((x,y),(255,255,255))idx += 1
img_new.show()


大家放心扫码吧,不是我的收款码~

3.2 加密题目:标准凯撒爆破脚本

基础知识:凯撒密码是一种最简单且最广为人知的加密 技术,它属于替代加密,明文中的所有字母都在字母表上向后(或 向前)按照一个固定数目进行偏移后被替换成密文。
举例如下:
原始字母表 ABCDEFGHIGKLMNOPQRSTUVWXYZ key=3 每个字母右移3位
新的字母表 DEFGHIGKLMNOPQRSTUVWXYZABC
若明文M=“HEASON”
则密文C = “KHDVRQ” 解密同理左移3位即可
所谓的密钥就是上面的key,他只有25中可能(key=1就是自己去掉这个)。所以写个脚本遍历出所有结果,看到那个字段有意义,其实就完成破解了。

from string import ascii_letters
str1 = 'ComeChina'
str2 = str1.lower()
num = 1
table = ascii_letters
for i in range(26):print("{}:  ".format(num), end='')for temp in str2:if temp not in table:print(chr(ord(temp)), end="")elif ((ord(temp)+num)>ord('z')):print(chr((ord(temp)+num)-26), end='')else:print(chr((ord(temp)+num)), end='')num += 1print("")
# 结果会输出26种全部结果,其中有个flag

如果你看不懂这段代码,我想不是脚本多难,而是

  1. 你可能不知道ascii码的相关知识 就是脚本中的ord函数。本质上就是将一个字符转换成唯一的十进制数,方便运算。每个字符均会对应一个十进制数。后面chr就是反过来,将十进制数转换为对应字符。动手网上搜下ascii就能了解了,自学时长20min吧
  2. 前文说了循环结构需要学下。不会的函数百度下,瞬间就会明了。

3.3 加密题目:变异凯撒脚本

有了上面一题的铺垫,此题就好理解了。变异凯撒不是固定key,而是key有规律变化,如本例题,第一个字符,key=5加密。后面每个字符,key都增加1再进行加密,依次类推。
脚本如下,设置个初始key=5,然后在循环中,处理完一个字符,就增加1即可。

key = 5  # 初始key值
result = ""
content = "afZ_r9VYfScOeO_UL^RWUc"  # 密文
for i in range(len(content)):ori = ord(content[i]) + keyresult += chr(ori)key += 1
print(result)# 输出结果 flag{Caesar_variation}

3.4 逆向题目

本文不关心逆向解题方法,只关注脚本。所以逆向的脚本反而最简单,原伪代码中算法都写好了,脚本反着写就行。
省略掉逆向题目的前期分析,直接上伪代码

注意第32行,是伪代码的算法。我们编制的脚本很简单,既然要破解,那就把算法反过来运算,不就行了?

# 1.原始24位字符串
key1 = 'xIrCj~<r|2tWsv3PtIzndka'
flag = ""# 2. 获取每位的ascii值,(x^6)-1  注意异或运算优先级低于加减
for i in range(0, len(key1)):flag += chr((ord(key1[i])^6) - 1) # 注意:异或运算优先级低于加减,所以要写成(ord()^6)-1#3. 倒序输出
print(flag)
print(flag[::-1]) # 逆序输出# }NsDkw9sy3qPto4UqNx{galf
# flag{xNqU4otPq3ys9wkDsN}

脚本很简单吧,简单到令人发指。

4. 总结

所以,CTF比赛中脚本的编制,没有大家想象的那么难。真正难得地方是思路,是找到破题点。

如果基础较弱,在日常CTF学习中,遇到不明白的函数,随遇随学,多记套路用法即可。不断练习已经理解的脚本,不断重温新学的函数,写的多,自然就入门了。等真正有时间,再系统学习一门编程语言即可。
个人经验,为了学习而学习,永远学不好。为了一个目标,用“偷懒”的办法,学以致用,不断巩固练习,效果反而好。

要写脚本,编程不好不要紧--浅谈CTF中脚本的编写方法相关推荐

  1. 浅谈CTF中各种花式绕过的小trick

    文章目录 浅谈CTF中各种花式绕过的小trick 前言 md5加密bypass 弱比较绕过 方法一:0e绕过 方法二:数组绕过 强比较绕过 方法:数组绕过 md5碰撞绕过 方法:使用Fastcoll生 ...

  2. 浅谈自动化测试中的验证码处理方法小总结

    今天跟大家聊一聊自动化测试中的验证码处理方法一些小总结,希望对你们有帮助,有说的不好的地方,还请多多指教! 目前,不少网站在用户登录.用户提交信息登登录和输入的页面上使用了验证码技术.验证码技术可以有 ...

  3. php 可以编辑treegrid,浅谈EasyUI中编辑treegrid的方法

    主从表,从表是一个treegrid,加载完数据后,点击节点进入编辑状态. 复制代码 代码如下: columns : [ [ { title : "ID", field : &quo ...

  4. php 可以编辑treegrid,浅谈EasyUI中编辑treegrid的方法_jquery

    主从表,从表是一个treegrid,加载完数据后,点击节点进入编辑状态. columns : [ [ { title : "ID", field : "id", ...

  5. 浅谈JAVA中如何利用socket进行网络编程(二)

    转自:http://developer.51cto.com/art/201106/268386.htm Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以 ...

  6. python sys模块作用_浅谈Python中的模块

    模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件就称之为一个模块(Mod ...

  7. gather torch_浅谈Pytorch中的torch.gather函数的含义

    pytorch中的gather函数 pytorch比tensorflow更加编程友好,所以准备用pytorch试着做最近要做的一些实验. 立个flag开始学习pytorch,新开一个分类整理学习pyt ...

  8. scale和java比较_浅谈java中BigDecimal的equals与compareTo的区别

    这两天在处理支付金额校验的时候出现了点问题,有个金额比较我用了BigDecimal的equals方法来比较两个金额是否相等,结果导致金额比较出现错误(比如3.0与3.00的比较等). [注:以下所讲都 ...

  9. python读取图像数据流_浅谈TensorFlow中读取图像数据的三种方式

    本文面对三种常常遇到的情况,总结三种读取数据的方式,分别用于处理单张图片.大量图片,和TFRecorder读取方式.并且还补充了功能相近的tf函数. 1.处理单张图片 我们训练完模型之后,常常要用图片 ...

最新文章

  1. SQL Server 2014 许可证(五)降级与升级
  2. 我!90后!重庆女孩!在淘宝给别人改简历,年入百万!
  3. python界面图片-python图形用户界面(六):可视化给图片添加上文字
  4. PAI分布式机器学习平台编程模型演进之路
  5. 【NLP】一文了解基于深度学习的自然语言处理研究
  6. viewer vue 文档_vue基于viewer实现的图片查看器
  7. 面试:一文搞懂Java集合
  8. IDEA常用提升开发效率的插件及快捷键(持续更新)
  9. 牛客 黑龙江大学程序设计竞赛重现 19-4-25 D
  10. 更改 Office 解决方案的安装路径
  11. iOS-常用宏定义大全
  12. MySQL查询数据库日志的查询
  13. Android 控件数组
  14. 云服务到底是什么东西?
  15. (软件构造) 关于JDK版本更换问题(附jdk下载链接以及jdk环境变量全教程)
  16. 不会英语能学Java吗?
  17. 论文笔记之Stein变分梯度下降
  18. SPSS使用过程中出现的问题整理 包括因子分析 感谢各位大佬们
  19. LabVIEW控制Arduino实现舵机联控(基础篇—9)
  20. 设计模式之----匹配器处理器模式(Matcher-Handler)的理解

热门文章

  1. 天然气/化学污染物泄漏定量分析模型解读
  2. 【Docker】五 Docker Hub管理镜像
  3. 数学基础之平方和公式
  4. GUI(图形化界面)
  5. 雾霾卷土重来,实力派高颜值口罩让你坚强活下去 | 钛空舱
  6. php学习(一):从基础PHP到高级PHP知识,一站式学习
  7. ALU——调用加法乘法模块
  8. 阅读作业之The New Methodology——洪虹
  9. 夜莺(Flashcat)V6监控(四):categraf-mtail日志收集插件详解
  10. 【转】招行的密码有很多种(一直挺…