1. 程式人生 > >jarvis OJ

jarvis OJ

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:;<=>[email protected]
[\]^_`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