1、[GWCTF 2019] pyre
2、rsa
[GWCTF 2019] pyre
下载拿到的是一个pyc文件,要用uncompyle反汇编成py
输入的字符串经过一次取模一次异或,得到code
注意是每一位和后一位异或,循环次数又是 l -1,所以最后一位没变
往回逆的思路就是,从后往前每一位和前一位异或,然后。。之前的wp里提过这里逆的时候,要注意是解出的flag跟code异或才能得到下一位flag
取模+128后再次取模这一步要注意,提示了逆的时候如果 imput [i] - i 为负数要加128
#include<iostream>
#define _CRT_SECURE_NO_WARNINGS
using namespace std;
int main()
{
char code[23] = {
'\x1f', '\x12', '\x1d', '(', '0', '4', '\x01', '\x06', '\x14', '4', ',', '\x1b', 'U', '?', 'o', '6', '*', ':', '\x01', 'D', ';', '%', '\x13' };
char temp = '\x13';
int j = 21;
int flag[23] = {
};
flag[0] = '\x13';
for (int i = 1; i < 23; i++)
{
flag[i] = temp ^ code[j];
temp = flag[i];
j--;
}
for (int i = 0; i < 23; i++)
{
flag[i] = (flag[i] - (22 - i)) % 128;
if (flag[i] < 0)
{
flag[i] += 128;
}
}
for (int i = 22; i >= 0; i--)
{
printf("%c", flag[i]);
}
}
看别人写的python脚本十分简洁,可惜我是个只会写C++的废物呜呜。。。
包上flag{}提交即可
rsa
拿到两个文件,pub.key里给出了公钥,由于flag.enc里是乱码,好像不能直接套gmpy2解
由于python的库太过优越,这道题完全得用python(现学。。。
因为公钥是由给定的 n, e 生成的,可以用强大的Crypto库解出n, e
分解 n ,好用的在线网站
接下来由于我的 python3 装不了gmpy,python2装不了rsa。。。。
分开写了两个脚本,切换Interpreter运行
先用gmpy2 求出d,才能生成私钥
用 rsa库 解出flag
PS: rsa 库在setting里面可以搜到,直接 install package 即可
emmmmm因为写了三个。。。就不放脚本了。。吧。。( 想要的可以评论 ?
开学第一天!写完wp要去写工数作业了唉。。。。