1. 程式人生 > >西普CTF訓練(programe部分分析)

西普CTF訓練(programe部分分析)

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 random
except ImportError:
    print
'模組匯入錯誤,請使用pip安裝,pytesseract依賴' raise SystemExit def 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 datasum try: 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:[email protected]#!!
python程式碼如下:

# -*- coding: utf-8 -*-
f=open(u'num.txt','r')
"填充資料到矩陣中"
matrix=[[0 for i in range(20)] for j in range(20)]
row=0
for cl in f:
    xx=cl.split(' ')
    col=0
    for inn in xx:
            matrix[row][col]=int(inn)
            col+=1
    row+=1

tmpNum=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)
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部分分析

1、計算題 http://ctf8.simplexue.com/jia/ 頁面在不斷重新整理,要求在3秒內提交答案,手工是無法在短時間內完成的,可以通過程式計算並自動提交。 可通過js,也可通過py

西CTF訓練溢位

void main() { asm( "_start:\n\t" "jmp test1\n\t" "test2:\n\t" "pop %ebx\n\t" "m

西CTF部分題目解密

1、simple algorithm 題目地址:http://www.simplexue.com/ctf/examctfdetail/737 題目給了一個py指令碼和一個密文檔案,py指令碼將明文轉換為密文,現在需要將密文檔案中的密文解密得到明文。 加密演

PCA 主成分分析詳解 寫給初學者 結合matlab轉載

整數 變量 行為 保持 sum osc 入參 函數 data 一、簡介 PCA(Principal Components Analysis)即主成分分析,是圖像處理中經常用到的降維方法,大家知道,我們在處理有關數字圖像處理方面的問題時,比如經常用的圖像的查詢

對於同一套應用程序如何發布一個體驗版部分功能完整版有完整功能

service() () ogr com 完整 fine adk testin generic 最近項目中,先做一個版本給用戶(普通用戶作為體驗使用)。之後再有一個完整功能版。 #define OFFLINE using System; using System.

vue 實現 ios 原生picker 效果實現思路分析

sta 效果 cursor touchend orm dex tex sub alt 以前最早實現了一個類似的時間選擇插件,但是適用範圍太窄,索性最近要把這個實現方式發布出來,就重寫了一個高復用的vue組件。 支持安卓4.0以上,safari 7以上 效果預覽 gitHu

算法分析| 集1漸近分析

style 獲得 判斷 永遠 算法 大小為n 大於 set 讓我 為什麽分析算法性能?  應該照顧好許多重要的事情,如用戶友好,模塊化,安全性,可維護性等。為什麽要擔心性能?  對此的答案很簡單,只有我們有表現,才能有上述所有的東西。   比如我們如果表現像貨幣,我們可以買

算法分析| 第4集循環分析

使用 hms other == tle 評估 選擇排序 文章 font 我們在之前的帖子中討論了漸近分析, 最差,平均和最佳案例 還有漸近符號。 在這篇文章中,討論了使用簡單示例分析叠代程序。 1)O(1):如果一個函數(或一組語句)不包含循環,遞歸和調用任何其他非常

建庫建表學習心得知識點誤點分析

.cn 分析 說明 log courses 應該 code 主健 字符類型 建庫建表知識點(下列舉例)、 建庫: CREATE DATABASE EduBase2017 ON (NAME=‘Datefile_1‘ ,FILEN

Go語言Context設計及分析

sin 循環 elf 處理請求 val pri inter text ont context簡單概述:Go服務器的每個請求都有自己的goroutine,而有的請求為了提高性能,會經常啟動額外的goroutine處理請求,當該請求被取消或超時,該請求上的所有goroutine

[python] 詞雲:wordcloud包的安裝、使用、原理源碼分析、中文詞雲生成、代碼重寫

possible 渲染 alias com 表達 問題 compute ural pty 詞雲,又稱文字雲、標簽雲,是對文本數據中出現頻率較高的“關鍵詞”在視覺上的突出呈現,形成關鍵詞的渲染形成類似雲一樣的彩色圖片,從而一眼就可以領略文本數據的主要表

getParameter和getAttribute區別超詳細分析

list 共享 ava 多個 設置 png 過程 技術分享 對象 getParameter和getAttribute區別(超詳細分析) (一)對getParameter過程,如下圖: (二)對getAttribute過程,如下圖 兩者區別: ①getPa

網站分析參數實例分析SimilarWeb插件參數

err arw 初步 流量 nth ffi alt lec 翻譯 閑來無事,看小米官網的時候,點開了之前安裝的similar web插件,對於網站分析也挺感興趣,借著這個插件工具,就初步了解一下網站分析相關。 那麽這些指標是什麽意思呢? SimilarWeb R

小專案文字資料分析--新聞分類任務

1.資料 import pandas as pd import jieba #資料(一小部分的新聞資料) df_news = pd.read_table('val.txt',names=['category','theme','URL','content'],encoding='ut

西電計算機學院原軟體學院軟體工程考研複試

      ①:進行一個自我介紹(中文或英文),若英文水平好的建議用英文,這樣更能引起老師對你的注意。      ②:介紹完成後,在你的前面有五張紙條,上面分別是五段專業英語文章,你去隨便抽一張,抽到以後,先大

Springboot使用Jsp模板檢視開發web應用含問題分析

最近有個springcloud專案,所有服務返回的資訊是json字串,現在需要對專案進行改造,使用jsp頁面返回服務呼叫結果。開發工具為Idea。 先來看一下專案結構(只展示涉及到的部分,如果你的專案中沒有對應資料夾,需要新建資料夾): ├── src │ ├── main │

ElasticSearch權威指南學習對映和分析

概念 對映(mapping)機制用於進行欄位型別確認,將每個欄位匹配為一種確定的資料型別(string, number, booleans, date等)。+ 分析(analysis)機制用於進行全文文字(Full Text)的分詞,以建立供搜尋用的反向索引。 資料型別差異 在索引中

讓你不再害怕指標的應用-全程模擬+註解第二部分陣列

讓你不再害怕指標的應用-全程模擬+註解(第二部分:陣列)(持續更新) 寫此文章一是為了分享,二是為了溫習! 預計包含的內容為:變數如int  、陣列  、結構體  、列舉 、聯合體、(這個自己也在瞭解)。 軟體:CODE::Blocks  &n

python-相互轉換部分功能知識整理

#!/usr/bin/env python# -*- coding:utf-8 -*-# __author__:anxu.qi# Date:2018/11/19## mer = ["電腦","滑鼠","U盤","CPU","硬碟"]# for i in mer:# print(i)# print("

九度oj 專題整理模擬部分4

1070請參見模擬1部分 題目1068:球的半徑和體積 double型別表示的範圍比float和long long大,所以我多用double,注意PI定義 #include <iostream> #include <string> #include <