西普CTF训练(programe部分分析)
来源:互联网 发布:java方法覆盖 编辑:程序博客网 时间:2024/05/16 03:56
1、计算题 http://ctf8.simplexue.com/jia/
页面在不断刷新,要求在3秒内提交答案,手工是无法在短时间内完成的,可以通过程序计算并自动提交。
可通过js,也可通过python,python稍微麻烦点。简便的是通过浏览器console口执行下列语句,自动计算并提交得到结果。
js代码如下,打开题目页面,F12在chome console口执行即可:
a=document.getElementsByName("my_expr")[0].innerHTML;a=a.replace('x','*');//将x替换为*a=a.replace('x','*');//替换2次document.getElementsByName('pass_key')[0].value=eval(a);//执行并写入框中document.getElementsByTagName('input')[1].click();//点击提交按钮
2、验证码识别计算 http://ctf8.simplexue.com/codeBMP/
压缩包中共9999个文件,每个文件都是一个4位数的验证码,要求用验证码数字乘以文件名数字得到的总和。
验证码识别可用tesseract-ocr,下载调用脚本pytesseract。
由于tesseract识别准确率很低,需要进行训练学习,学习方式详见http://blog.csdn.net/firehood_/article/details/8433077#
学习之后将生成的data拷到对应tesseract目录中,然后就可以运行了,计算结果是250686552492。
注意:有可能部分号码识别不准确,需要输出到文件中再拷贝到excel中核对,每个验证码均为四位数,若出现小于四位数或非数字,需要手动校正并重新计算。
python代码如下:
# -*- coding: utf-8 -*-#识别验证码try: from pytesseract import * from PIL import Image import os import time import randomexcept ImportError: print '模块导入错误,请使用pip安装,pytesseract依赖' raise SystemExitdef vcode(picname): "python验证码识别函数" image=Image.open(picname) filename='%d.tif'%(random.randint(10, 100)) #由于文件操作可能冲突,随机生成文件名,减少冲突概率 image.save(filename) #time.sleep(0.01) image=Image.open(filename) im = image_to_string(image,'num',False,config="-psm 8") #time.sleep(0.01) #os.remove(filename) im = im.replace(' ', '') if im != '': return im else: return ''def ListFilesToTxt(dir,wildcard,recursion): file1 = open('test1.txt','w') exts = wildcard.split(" ") files = os.listdir(dir) num=0 datasum=0 for name in files: fullname=os.path.join(dir,name) if(os.path.isdir(fullname) & recursion): 1#ListFilesToTxt(fullname,wildcard,recursion)#递归调用 else: for ext in exts: if(name.endswith(ext)): #print fullname#file.write(name + "\n") filedata=int(name[0:name.find('.bmp')]) codedata=int(vcode(fullname)) datasum+=filedata*codedata str1='%d:%d:%d:%s'%(num,codedata,datasum,name) print str1 file1.write(str1+'\n') num+=1 break file1.close() return datasumtry: dir="script\\python\\bmp"#path wildcard = ".bmp .jpg" print ListFilesToTxt(dir,wildcard, 1)except KeyboardInterrupt: raise SystemExit('爷,按您的吩咐,已成功退出!')
3、考考你的程序功底 http://ctf1.simplexue.com/program/1/
题目给了一个图片,是一个20*20的矩阵,首先要进行OCR识别,提取出来数据来。推荐用www.newocr.com/来识别提取数据,提取后要修改一下,主要是部分4识别为1了,手动核对修改一下。
计算方法是沿着每行、每列、每个对角线来进行查询计算,得到结果
70600674
[12, 6]
最大乘积结果为70600674,得到KEY:IL0V3Pr0Gr4m@#!!
python代码如下:
# -*- coding: utf-8 -*-f=open(u'num.txt','r')"填充数据到矩阵中"matrix=[[0 for i in range(20)] for j in range(20)]row=0for cl in f: xx=cl.split(' ') col=0 for inn in xx: matrix[row][col]=int(inn) col+=1 row+=1tmpNum=0#计算值tmpm=[0,0]#对应的行列起始位置"行"for rows in range(20): for cols in range(17): tmp=1; for dd in range(4): tmp*=matrix[rows][cols+dd] if tmp>tmpNum: tmpNum=tmp tmpm=[rows,cols]"列"for cols in range(20): for rows in range(17): tmp=1; for dd in range(4): tmp*=matrix[rows+dd][cols] if tmp>tmpNum: tmpNum=tmp tmpm=[rows,cols]"对角线1"for xjj in range(-16,16,1):# if xjj<=0: rowst=0 colst=0-xjj else: rowst=xjj colst=0 while True: rowst+=1 colst+=1 if rowst>16 or colst>16: break tmp=1 for dd in range(4): tmp*=matrix[rowst+dd][colst+dd] if tmp>tmpNum: tmpNum=tmp tmpm=[rowst,colst]"对角线2:逆对角线"for xjj in range(-16,16,1): if xjj<=0: rowst=0 colst=19+xjj else: rowst=xjj colst=19 while True: rowst+=1 colst-=1 if rowst>16 or colst<3: break tmp=1 for dd in range(4): tmp*=matrix[rowst+dd][colst-dd] if tmp>tmpNum: tmpNum=tmp tmpm=[rowst,colst]print tmpNum #打印最大值结果print tmpm #打印所在的行和列
4、算术题:http://ctf1.simplexue.com/program/2/
题目比较明确,只需填10个数,搜索即可,满足条件:10个数各不相同。
经过搜索找到最大的串为6531031914842725,输入后得到key:IL0V3Pr0Gr4ming_###)
代码比较简单,基本是循环,判断,跑出的数复制到excel排个序即可,图中每个数位置如下图:
python代码如下:
def printnum(a,b,c,d,e,f,g,h,i,j): tmp=a tmp=min(a,d,f,g,j) if tmp==a: print '%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d'%(a,b,c,d,c,e,f,e,h,g,h,i,j,i,b) elif tmp==d: print '%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d'%(d,c,e,f,e,h,g,h,i,j,i,b,a,b,c) elif tmp==f: print '%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d'%(f,e,h,g,h,i,j,i,b,a,b,c,d,c,e) elif tmp==g: print '%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d'%(g,h,i,j,i,b,a,b,c,d,c,e,f,e,h) elif tmp==j: print '%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d'%(j,i,b,a,b,c,d,c,e,f,e,h,g,h,i)for a in range(1,11,1): for b in range(1,11,1): if b==a: continue for c in range(1,11,1): if c in [a,b]: continue for d in range(1,11,1): if d in [a,b,c]: continue for e in range(1,11,1): if e in [a,b,c,d]: continue for f in range(1,11,1): if f in [a,b,c,d,e]: continue for g in range(1,11,1): if g in [a,b,c,d,e,f]: continue for h in range(1,11,1): if h in [a,b,c,d,e,f,g]: continue for i in range(1,11,1): if i in [a,b,c,d,e,f,g,h]: continue for j in range(1,11,1): if j in [a,b,c,d,e,f,g,h,i]: continue if a+b+c==d+c+e==f+e+h==g+h+i==j+i+b: printnum(a,b,c,d,e,f,g,h,i,j)
5、简单仿射变换:http://www.simplexue.com/ctf/examctfdetail/717
题目给了公式y=5*x+11对某明文进行变换得到字符串xztiofwhf,只要得到x–>y的映射即可。
js代码如下:
function fff(a,b){var dic={};for(i=0;i<26;i++){ dic[String.fromCharCode((a*i+b)%26+97)]=String.fromCharCode(i+97);} return dic;}pwd="xztiofwhf";pwd_dic=fff(5,11);str="";for(j=0;j<pwd.length;j++){ str+=pwd_dic[pwd[j]];}console.warn(str);
- 西普CTF训练(programe部分分析)
- 西普CTF训练(溢出)
- 西普CTF部分题目(解密)
- CTF训练
- CTF训练
- 强网杯ctf pwn&re writeup (部分)
- 西普部分CTF题目(逆向)
- ctf训练营 包罗万象
- ctf部分题目思路
- [CTF相关]训练第二题
- CTF训练营-牛刀小试-啥?
- 西普部分CTF题目(web)(持续更新)
- 网络安全实验室CTF练习部分题目(持续更新)
- Analytics(分析)训练第2部分 - 如何查找在业务分析过程
- 【人脸检测】“人脸训练代码”项目笔记(4)——代码结构分析:训练部分结构
- 南邮ctf平台部分题解
- CTF dotNet逆向分析
- CTF训练营-牛刀小试-ASCII码而已
- 实战黑帽seo从网站搭建到泛站快速排名
- storyboard
- 关于程序员学英语的经验
- Java基础 System类
- leetcode Basic Calculator II
- 西普CTF训练(programe部分分析)
- sizeof()和strlen()的区别
- UIImageView
- Cookie问题,本地服务器无问题,部署到SAE后未能获取cookie信息
- HDFS学习笔记(2)hdfs_shell & JavaAPI
- 学生信息管理系统——优化
- Objective-C(五、@class,id类型,类对象构造方法,加载和初始化,description,Logging宏)——iOS开发基础
- 什么是黑帽SEO:黑帽seo和白帽seo的效果和区别
- myeclipse 8.5 svn不成功