jarvis OJ
阿新 • • 發佈:2018-11-07
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