1. 程式人生 > 其它 >brainfuck python指令碼 && misc題目can_has_stdio?

brainfuck python指令碼 && misc題目can_has_stdio?

技術標籤:CTFpython指標

Brainfuck

在這裡插入圖片描述

Brainfuck是一種極小化的計算機語言,它是由Urban Müller在1993年建立的。由於fuck在英語中是髒話,這種語言有時被稱為brainf*ck或brainf**k,甚至被簡稱為BF。

這種語言,是一種按照“Turing complete(圖靈完備)”思想設計的語言,它的主要設計思路是:用最小的概念實現一種“簡單”的語言,BrainF**k 語言只有八種符號,所有的操作都由這八種符號的組合來完成。

下面是這八種狀態的描述,其中每個狀態由一個字元標識:

字元含義
>指標加一
<指標減一
+指標指向的位元組的值加一
-指標指向的位元組的值減一
.輸出指標指向的單元內容(ASCII碼)
,輸入內容到指標指向的單元(ASCII碼)
[如果指標指向的單元值為零,向後跳轉到對應的]指令的次一指令處
]如果指標指向的單元值不為零,向前跳轉到對應的[指令的次一指令處

比如對於一串brainfuck語句,怎樣翻譯成能看懂的ASCII碼

a = '++++++++++[>+++++++++>++++++++>+++++++<<<-]>>>++.---.<----..+++.'

程式碼

def brainfuck(a):
    li = [0]
    index =
0 kuo = [] output = [] i = 0 while i < len(a): if a[i] == '+' or a[i] == '-': li[index] = eval(str(li[index]) + a[i] + '1') elif a[i] == '>': index += 1 if len(li) <= index: li.append(0) elif a[i] == '<'
: index -= 1 elif a[i] == '.': print(li[index], end=' ') output.append(li[index]) elif a[i] == ',': i += 1 li[index] = ord(a[i]) elif a[i] == '[': if li[index] == 0: while a[i] != ']': i += 1 i += 1 else: kuo.append(i) elif a[i] == ']': if li[index] != 0: i = kuo.pop()-1 else: temp = kuo.pop() i += 1 return output

理解

li 模擬記憶體,最開始只有一個0值

index 表示指標

kuo 模擬一個棧,記錄前中括號(迴圈)的下標

output 返回值,存放‘.’輸出的記憶體值(ASCII碼)

i 指輸入值的索引

相當於 index 為記憶體 li 的指標,i 為函式輸入的brainfuck語句指標

控制指標 i 依次讀入字元,進行以下判斷:

  1. 如果是加 + 減 - 號,則組成 ‘該符號 +/- 1’的表示式,並執行
  2. 如果是 > ,則 index 指標右移,若記憶體 li 不夠長則新增一個0值
  3. 如果是 < , 則 index 指標左移
  4. 如果是 . , 則輸出記憶體中指標指向的值(ASCII碼),並存入output
  5. 如果是 , , 則 i 指標右移讀取下一個輸入字元,並將其ACSCII碼存入記憶體li
  6. 如果是 [ , 則判斷當前指標指向的記憶體 li 值是否為0,是則將指標 i 指向反括號之後,不是則將當前指標 i 存入棧kuo內
  7. 如果是 ] , 則再次判斷當前指標指向的記憶體 li 值是否為0,不是則繼續迴圈,將棧kuo內的棧頂元素賦值給指標 i,是則拋棄棧頂元素,繼續遍歷

輸出測試

呼叫函式,並將返回值轉為字元輸出

output = brainfuck(a)
for i in output:
    print(chr(i), end='')
a = '++++++++++[>+++++++++>++++++++>+++++++<<<-]>>>++.---.<----..+++.'
>> 72 69 76 76 79 HELLO

攻防世界misc題目:can_has_stdio?

ctf = '''                                                                              
                                                                              
                                      +                                       
                                     ++                                       
                                     +++                                      
                                    ++[>                                      
                                    +>++>                                     
                                   +++>++                                     
                                   ++>++++                                    
                                  +>++++++                                    
                                  >+++++++>                                   
                                 ++++++++>+                                   
                                 ++++++++>++                                  
                                ++++++++>+++                                  
                                ++++++++>++++                                 
          ++++++++>+++++++++++++>++++++++++++++>+++++++++++++++>++            
            ++++++++++++++<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>--.++<<              
              <<<<<<<<<<<>>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<<                
                >>>>>>>>>>>>+.-<<<<<<<<<<<<>>>>>>>>>>>>>-.+<                  
                  <<<<<<<<<<<<>>>>>>>>>>>>>>>+++.---<<<<<<                    
                    <<<<<<<<<>>>>>>>>>>>>>---.+++<<<<<<<                      
                      <<<<<<>>>>>>>>>>>>>>+++.---<<<<<                        
                        <<<<<<<<<>>>>>>>>>>>>>>-.+<<                          
                          <<<<<<<<<<<<>>>>>>>>>>>>                            
                          >>----.++++<<<<<<<<<<<<<                            
                          <>>>>>>>>>>>>+.-<<<<<<<<                            
                         <<<<>>>>>>>>>>>>>>--.++<<<                           
                         <<<<<<<<<<<>>>>>>>>>>>>>-.                           
                        +<<<<<<<<<<<<<>>>>>>>>>>>>>>                          
                        +++.---<<<<<<   <<<<<<<<>>>>                          
                       >>>>>>>>-.+<       <<<<<<<<<<<                         
                       >>>>>>>>>>           >>>--.++<                         
                      <<<<<<<<<               <<<>>>>>                        
                      >>>>>>                    >>>-.+                        
                     <<<<<                        <<<<<                       
                     <<<                            <>>                       
                    >>                                >>                      
                                                                              
                                                                              
                                                                              
>>>>>>>>++.--<<<<<<<<<<<<<<>>>>>>>>>>>>-.+<<<<<<<<<<<<>>>>>>>>>>>>>--.++<<<<<<<<<<<<<>>>>>>>>>>>>>>>---.+++<<<<<<<<<<<<<<<>>>>>>>>>>>>>>--.++<<<<<<<<<<<<<<>>>>>>>>>>>>-.+<<<<<<<<<<<<>>>>>>>>>>>>+.-<<<<<<<<<<<<>>>>>>>>>>>>>>--.++<<<<<<<<<<<<<<>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<>>>>>>>>>>>>-.+<<<<<<<<<<<<>>>>>>>>>>>>>>.<<<<<<<<<<<<<<>>>>>>>>>>>>>>++.--<<<<<<<<<<<<<<>>>>>>>>>>>>>>-.+<<<<<<<<<<<<<<>>>>>>>>>>>>>--.++<<<<<<<<<<<<<>>>>>>>>>>>>>+.-<<<<<<<<<<<<<>>>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>---.+++<<<<<<<<<<<<<<<<.
'''
>> 102 108 97 103 123 101 115 111 108 97 110 103 115 95 102 111 114 95 102 117 110 95 97 110 100 95 112 114 111 102 105 116 125 0 
flag{esolangs_for_fun_and_profit}