IDF実験室の逆行逆施python ByteCode
1975 ワード
ダウンロードしたのはpycファイルで、uncompyle 2で逆コンパイルして、コードを得ます:
はい、ソースコードが見えました.暗号化アルゴリズムは(ord(v)+seed^ord(key[seed])%255です.
この暗号化は逆方向では推しにくいようですが、直接暴力的に解読しましょう.pythonがよく分からないので、C#で書きました.
OK、結果が出た、WCTF{ILOVEPYTHONSOMUCH}、提出、通過!
def encrypt(key, seed, string):
rst = []
for v in string:
rst.append((ord(v) + seed ^ ord(key[seed])) % 255)
seed = (seed + 1) % len(key)
return rst
if __name__ == '__main__':
print 'Welcome to idf\'s python crackme'
flag = input('Enter the Flag: ')
KEY1 = 'Maybe you are good at decryptint Byte Code, have a try!'
KEY2 = [124, 48, 52, 59, 164, 50, 37, 62, 67, 52, 48, 6, 1, 122, 3, 22, 72, 1, 1, 14, 46, 27, 232]
en_out = encrypt(KEY1, 5, flag)
if KEY2 == en_out:
print 'You Win'
else:
print 'Try Again !'
はい、ソースコードが見えました.暗号化アルゴリズムは(ord(v)+seed^ord(key[seed])%255です.
この暗号化は逆方向では推しにくいようですが、直接暴力的に解読しましょう.pythonがよく分からないので、C#で書きました.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace TestDecode
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string KEY1 = "Maybe you are good at decryptint Byte Code, have a try!";
int[] KEY2 = { 124, 48, 52, 59, 164, 50, 37, 62, 67, 52, 48, 6, 1, 122, 3, 22, 72, 1, 1, 14, 46, 27, 232 };
for(int i = 0; i < KEY2.Length; i++)
{
for(int j=0;j<255;j++)
if (encrypt(KEY1, i + 5, (char)j) == KEY2[i])
{
textBox1.Text += (char)j;
break;
}
}
}
private int encrypt(string key, int seed, char v)
{
return ((int)v + seed ^ (int)key[seed]) % 255;
}
}
}
OK、結果が出た、WCTF{ILOVEPYTHONSOMUCH}、提出、通過!