RCTF rev 复盘 Posted on 2021-10-10 LoongArch1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556ld.d t0,sp,0 ld.d t1,sp,8 ld.d t2,sp,16 ld.d t3,sp,24ld.d t4,sp,32ld.d t5,sp,40ld.d t6,sp,48ld.d t7,sp,56xor t0,t0,t4xor t1,t1,t5xor t2,t2,t6xor t3,t3,t7bitrev.d t4,t0bitrev.d t5,t1bitrev.d t6,t2bitrev.d t7,t3bytepick.d t0,t6,t5,3bytepick.d t1,t4,t7,3bytepick.d t2,t5,t4,3bytepick.d t3,t7,t6,3bitrev.8b t4,t0bitrev.8b t5,t1bitrev.8b t6,t2bitrev.8b t7,t3ld.d t0,sp,64 ld.d t1,sp,72ld.d t2,sp,80 ld.d t3,sp,88xor t0,t0,t4xor t1,t1,t5xor t2,t2,t6xor t3,t3,t7addi.d a0,zero,1addi.d a1,sp,32li.d a2,64li.d a7,64syscall 0li.d t4,64clo.d t5,t0bne t5,t4,failclo.d t5,t1bne t5,t4,failclo.d t5,t2bne t5,t4,failclo.d t5,t3bne t5,t4,failb success 在比赛的时候因为py脚本写的不对,没有处理好bitrev_d和bitrev_8b导致浪费时间。基本功还是要练扎实= =。 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152def qword2bit(a): re = [] for i in range(64): re.append(a%2) a >>= 1 return re[::-1]def bit2qword(a): re = "" for i in a: re += str(i) return int(re,2)def bitrev_8b(a): re = [] for i in range(0,64,8): re += a[i:i+8][::-1] return redef bytepick_d(a,b,n): return b[8*(n):64]+a[0:8*(n)]def bitrev_d(a): return a[::-1]xor1 = [0x8205f3d105b3059d,0xa89aceb3093349f3,0xd53db5adbcabb984,0x39cea0bfd9d2c2d4]xor2 = [0xc513455508290500,0x6d621abb30b918,0xbc555b9f4c6f86a1,0x50d78ad181a626d]a = [i^0xffffffffffffffff for i in xor2]b = [qword2bit(i) for i in a]c = [bitrev_8b(i) for i in b]d = [bytepick_d(c[2],c[1],5), bytepick_d(c[0],c[2],5), bytepick_d(c[3],c[0],5), bytepick_d(c[1],c[3],5)]e = [bitrev_d(i) for i in d]f = [bit2qword(i) for i in e]g = [f[i]^xor1[i] for i in range(4)]for i in g: for j in range(8): print(chr(i&0xff),end='') i >>= 8print() Referencehttps://blog.rois.io/en/2021/rctf-2021-official-writeup/