写在前面
反正RealWorld也打麻了,刚好看到了NSS R17,就想着打一手,结果进去一看只剩一个多钟头,再加上忘记了RSA长啥样,于是乎当了一个钟头笨比来不及看题。
于是乎,这里算是一个后续补票(不定期更新)的题解记录档。
(那边干脆没有RE,这边的RE又上强度,我缺的这块RE上哪补啊)
Crypto
Level_1
RSA模板题,但是p和q分别等价于两个RSA式子的e。
from Crypto.Util.number import long_to_bytes
import gmpy2
n = 22517647586……
c1 = 143239309626……
c2 = 1329967939289……
p = e1 = 15586169039……
q = e2 = 14447198365282……
phin = (p - 1) * (q - 1)
d1 = gmpy2.invert(e1, phin)
d2 = gmpy2.invert(e2, phin)
print(long_to_bytes(pow(c1, d1, n)))
Level_2
还是RSA,但是叫你嗯猜e和p,p在文件里有给直接爆,e因为题目有提示所以很明了,65537一代,完事
from Crypto.Util.number import long_to_bytes
import gmpy2
c = 1744181471440……
q = 14572173647052……
e = 65537
f = open("ps.txt", 'r').readlines()
for p in f:
intp = int(p)
n = intp * q
phin = (intp - 1) * (q - 1)
d = gmpy2.invert(e, phin)
try:
print(long_to_bytes(pow(c, d, n)).decode())
except:
continue
Reverse
snake
虽然说一看就是非常粗糙的贪吃蛇,但是die一看,Go>=1.15,再一看IDAGolangHelper,没有对应的go标志,好吧,IDAGolangHelper莫得1.19支持,只能手搓了。
通过查找在界面上出现的字符一路跟到snake_pkg_app_Run
,看到了熟悉的wasd:
顺藤摸瓜找到main,又发现了可能是判定条件的东西:
loc_4A3301:
cmp rax, 0Ah
jl short loc_4A328D
jnz loc_4A338B
cmp cs:qword_569E78, 190h
jnz short loc_4A338B
也就是:
if ( i == 10 && qword_569E78 == 400 )
结合snake_pkg_app_Run
相关的操作,不难得出qword_569E78
就是得分,那么i就是步数了:
for ( i = 0LL; i < 10; i = v11 + 1 )
{
v11 = i;
snake_pkg_app_Run();
……
}
十步以内得到四百分,骗鬼哦,我们直接把步数判定扬了,然后再把分数判定改成0,patch完直接运行:
./snake.exe
success!
flag{da39a3ee5e6b4b0d3255bfef95601890afd80709}
完美(才不会告诉你因为过不了判定以为是反调试搓了一个钟头呢