jarvis OJ

版权声明:本文为博主原创,未经博主允许不得转载。 https://blog.csdn.net/one_of_a_kind/article/details/83757843

basic

Baby’s Crack

程序大概就是打开一个命令行输入的 file,然后打开一个 tmp,对 file 加密写入 tmp,将 file 删除,将 tmp 重命名为 file。
直接在 ida 中 F5,关键的代码就是:

while (feof(*(_QWORD *)&argc, argv, v8, v16) == 0) {
	v17 = fgetc(*(_QWORD *)&argc, argv, v9, v16);
    if (v17 != -1 && v17) {
		if (v17 > 47 && v17 <= 96) {
			v17 += 53;
		}
		else if (v17 <= 46) {
			v17 += v17 % 11;
		}
		else {
			v17 -= v17 % 61;
		}
		fputc(*(_QWORD *)&argc, argv, v15, (unsigned int)v17);
	}

我们用 python 对所有 ascii 字符进行加密,然后对照这个密码表,对密文进行解密就行了:

s = "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
for i in range(len(s)):
	o = ord(s[i])
	
	if o > 47 and o <= 96:
		o += 53
	elif o <= 46:
		o += o % 11
	else:
		o -= o % 61
	
	print( s[i] + " " + chr(o))

部分输出是这样的:

......
- .
. 0
/
0 e
1 f
2 g
3 h
4 i
5 j
6 k
7 l
8 m
9 n
: o
; p
< q
= r
> s
? t
@ u
A v
B w
C x
D y
E z
F {
G |
H }
I ~
J 
K €
L 
M ‚
.....

对照这个密码表,对密文进行解密即可,然后得到的十六进制转换为字符就行了

Easy RSA

推荐看看这个 https://www.anquanke.com/post/id/84632
这里给出一般化脚本,egcd 是拓展欧几里得算法,modinv 是求逆元。

def gcd(a, b):
	if a < b:
		a, b = b, a
	while b != 0:
		temp = a % b
		a = b
		b = temp
	return a
   
def egcd(a, b):
	if a == 0:
		return (b, 0, 1)
	else:
		g, y, x = egcd(b % a, a)
		return (g, x - (b // a) * y, y)

def modinv(a, m):
	g, x, y = egcd(a, m)
	if g != 1:
		raise Exception('modular inverse does not exist')
	else:
		return x % m
		
n = ****
p = ****
q = **** 
print((p-1)*(q-1))	
e = ****
#d = modinv(e, (p-1)*(q-1))
#print(d)

print(hex(pow(c, d, n))) 

Secret

在响应报文里的头部里有个 Secret

veryeasyRSA

同样使用 easy rsa 的那个脚本即可

段子

baidu 吧

USS

Ubiquitous System Security Lab

base64?

base32解码 http://tomeko.net/online_tools/base32.php?lang=en
然后 hex to ascii

猜你喜欢

转载自blog.csdn.net/one_of_a_kind/article/details/83757843