0%

分析

cipher.txt内容如下

1
Ld hcrakewcfaxr, f hofjjlhfo hlaxuc lj f krau ev hlaxuc kxfk zfj tjui xljkeclhfoor gtk dez xfj vfooud, vec kxu pejk afck, ldke iljtju. Ld hedkcfjk ke peiucd hcrakewcfaxlh foweclkxpj, pejk hofjjlhfo hlaxucj hfd gu acfhklhfoor hepatkui fdi jeoyui gr xfdi. Xezuyuc, OrmkO3vydJCoe2qyNLmcN2qlpJXnM3SxM2Xke3q9 kxur fcu foje tjtfoor yucr jlpaou ke gcufn zlkx peiucd kuhxdeoewr. Kxu kucp ldhotiuj kxu jlpaou jrjkupj tjui jldhu Wcuun fdi Cepfd klpuj, kxu uofgecfku Cudfljjfdhu hlaxucj, Zecoi Zfc LL hcrakewcfaxr jthx fj kxu Udlwpf pfhxldu fdi guredi. F btlhn gcezd veq mtpa eyuc kxu ofsr iew.

推测是移位的密码,使用WinCrypto分析得到(也可以使用quip在线分析并修复)

1
In cryptography, a classical cipher is a type of cipher that was used historically but now has fallen, for the most part, into disuse. In contrast to modern cryptographic algorithms, most classical ciphers can be practically computed and solved by hand. However, LyjtL3fvnSRlo2xvKIjrK2ximSHkJ3ZhJ2Hto3x9 they are also usually very simple to break with modern technology. The term includes the simple systems used since Greek and Roman times, the elaborate Renaissance ciphers, World War II cryptography such as the Enigma machine and beyond. A quick brown fox jump over the lazy dog.

发现该句子其实来源于英文维基百科的经典加密(Classical cipher)
发现最后一句话其实就是A quick brown fox jumps over the lazy dog.
(包含26个字母的最短句子)并去掉s
由此可以得到对照表然后恢复(当然使用WinCrypto就直接是这个字符串了)
所以可以得到原本的字符是LyjtL3fvnSRlo2xvKIjrK2ximSHkJ3ZhJ2Hto3x9

解密

直接解base64发现行不通
移位爆破
得到ZmxhZ3tjbGFzc2ljYWxfY2lwaGVyX3NvX2Vhc3l9是可以解的

爆破代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def toAlpha(c,i):
num = ord(c)
if num >= 65 and num <= 90:
num = 65 + ((num - 65) + i) % 26
elif num >= 97 and num <= 122:
num = 97 + ((num - 97) + i) % 26
return chr(num)

def encrypt(string,i):
string_new = ''
for s in string:
string_new += str(toAlpha(s,i))
print(string_new)
return string_new

def decrypt(string):
for i in range(26):
encrypt(string, -i)
encode = "LyjtL3fvnSRlo2xvKIjrK2ximSHkJ3ZhJ2Hto3x9"
decrypt(encode)

encrypt函数中加上base64解密代码即可爆破

增加代码

1
2
3
s = str(base64.b64decode(string_new))
if "flag" in s:
print(s)

参考

凯撒密码与python实现

解压

解压得到四个文件,有一个public.key和三个加密过的文件,于是先把p和q解出来

得到e和n

openssl rsa -pubin -text -modulus -in warmup -in public.key
得到

1
2
Exponent: 65537 (0x10001)
Modulus=D99E952296A6D960DFC2504ABA545B9442D60A7B9E930AFF451C78EC55D555EB

使用yafu分解,得到p和q

1
2
p = 302825536744096741518546212761194311477
q = 325045504186436346209877301320131277983

求出d

使用gmpy

解密并打印出flag

使用rsa模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import rsa

n = 0xD99E952296A6D960DFC2504ABA545B9442D60A7B9E930AFF451C78EC55D555EB
e = 0x10001
p = 302825536744096741518546212761194311477
q = 325045504186436346209877301320131277983
d = 0x4547B732CBC3527104CB57C4728D6899B44C4994FAE2713D6B594BC0F522A41
ret = ""
privatekey = rsa.PrivateKey(n , e , d , p , q)
with open("encrypted.message1" , "rb") as f:
ret += (rsa.decrypt(f.read(), privatekey).decode())
with open("encrypted.message2" , "rb") as f:
ret += (rsa.decrypt(f.read(), privatekey).decode())
with open("encrypted.message3" , "rb") as f:
ret += (rsa.decrypt(f.read(), privatekey).decode())
print(ret)

得到

1
2
3
flag{3b6d3806-4b2b
-11e7-95a0-
000c29d7e93d}

去掉回车得到最终flag

不使用rsa模块

其实就是自己实现rsa.decrypt中的转换16进制操作
以第一个文件为例,解密出来转化为16进制:
25a8007e9ad2809abbf5a00666c61677b33623664333830362d346232620a
位数为奇数,所以左边补0,得到
025a8007e9ad2809abbf5a00666c61677b33623664333830362d346232620a
转换为ascii码得到
Z��( ��Z�flag{3b6d3806-4b2b

剩下文件同理

参考

i春秋第二届春秋欢乐赛RSA256writeup

Hello World

观察

浏览器打开,只有一个Hello, World!
查看源代码看到有个

1
<script src="flag.xmas.js"></script>

结果没有该文件,尝试打开flag.js,看到混淆过的js,全选复制,放到控制台运行,得到

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
var Key = "7a57a5a743894a0e";
CryptoJS.pad.Iso10126 = {
pad: function(data, blockSize) {
var blockSizeBytes = blockSize * 4;
var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;
data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1))
},
unpad: function(data) {
var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;
data.sigBytes -= nPaddingBytes
}
};
var aesEncrypt = function(data, keyStr, ivStr) {
var sendData = CryptoJS.enc.Utf8.parse(data);
var key = CryptoJS.enc.Utf8.parse(keyStr);
var iv = CryptoJS.enc.Utf8.parse(ivStr);
var encrypted = CryptoJS.AES.encrypt(sendData, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Iso10126
});
return CryptoJS.enc.Base64.stringify(encrypted.ciphertext)
};
var aesDecrypt = function(data, keyStr, ivStr) {
var key = CryptoJS.enc.Utf8.parse(keyStr);
var iv = CryptoJS.enc.Utf8.parse(ivStr);
var decrypted = CryptoJS.AES.decrypt(data, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Iso10126
});
return decrypted.toString(CryptoJS.enc.Utf8)
};
var hint = "SSNRTPIuHLUxqtJmq8mDDPtexRU7RTjNO34tLqz+Tpw=";
阅读全文 »

概述

Adobe Flash Player 从 30 版本开始,中国大陆地区用户只能使用特供版
后台存在广告服务、弹出广告窗口、捆绑流氓软件的行为。
由于有的网站只能用flash,而安装国际版flash又提示地区不符,所以需要找个办法解决。

解决方案

安装直装版(由roustar31制作)

运行程序后,会卸载原版flash再自动安装。

IE浏览器使用AX版本
Chrome系浏览器及QQ使用PPAPI版本
Firefox或其他使用NPAPI版本

PS:若安装后仍无效,请使用压缩包中的文件替换系统及浏览器的pepflashplayer.dll(具体路径自行搜索)

下载地址

直装版

https://lanzous.com/b00e2zxej
密码:gz09

补丁

https://lanzous.com/b00dx336j
密码:f0ph

来源

Adobe Flash Player AX/NP/PP 特别版

问题

使用pygame开发游戏(完成作业时),VS Code总是在pygame处报E1101错误,刚开始设置的python.linting.mypyArgs毫无用处

1
"python.linting.mypyArgs": ["--disable=E1101",]

解决

继续谷歌一下,找到vs code中pylint报错E1101问题的解决
于是设置python.linting.pylintArgs参数,值为”–generate-members”,总算解决了这个问题

修改settings.json代码

1
"python.linting.pylintArgs": ["--generate-members",],

原因

函数或值是动态被设置的,而pylint的推断系统里没有该值,因此触发了E1101报错。可以通过配置 generate-members 参数来避免此类报错。

思路

获取到cookie后转化为dictionary(使用requests.utils.dict_from_cookiejar方法转化CookieJar为dictionary),再以字符串形式保存到文件
读取时把字符串转换为字典(json.load方法),再设置为requests请求的cookies

注意

这里有个坑,保存到文件时是单引号,使用json读取时需要双引号,所以需要replace一下

代码

保存

1
2
3
4
5
6
#转换为dictionary
load_cookies = requests.utils.dict_from_cookiejar(res.cookies)
#转换为字符串保存到文件
fo = open("cookie", "w")
fo.write(str(load_cookies))
fo.close()

读取

1
2
3
4
##读取文件内容到text变量后
#转换为dictionary
dic = json.loads(text.replace("'","\""))
res = requests.post(url,cookies=dic)

参考

Python——Cookie保存到本地

概述

服务器恢复快照以后,一大堆东西都要重新安装。
安装PyCrypto时发生错误,提示
Python.h: No such file or directory
于是 首先执行 yum upgrade,升级下试试
然而还是编译错误,所以肯定是没有安装依赖

解决方案

查了一下是没安装开发环境(然而之前好像是可以直接编译的。。)
python-devel已安装,然而搜不到python3-devel
于是搜索python3,找到了python36u-devel
yum install python36u-devel
安装后编译成功

参考

Centos7 “fatal error: Python.h: No such file or directory “commmand ‘gcc’ failed with exit status 1