[SWPU2019] Android3
阿新 • • 發佈:2022-04-04
先反編譯出java程式碼檢視,發現沒有坑,直接呼叫了庫檔案裡的check
把so檔案直接丟到ida中查詢check函式,看到
這是說明flag是11位,剛好發現11個ascii碼
60,108,51,79,129,56,44,94,84,69,64
這裡也有 11個值,拿下來
6,2,5,0,7,3,10,9,1,4,8
往下發現一個判斷,令v1=x,v3*v5=y
,則有(x^2-y^2)/(x+y)
即x-y
就是對應的data
後面想了半天都不知道如何繼續了,因為有個pow不知道如何解
後來再去翻so檔案,發現有的so檔案大小並不一樣,我這個開的是 10kb的,還有個18kb的。。。
把18kb的so檔案放入ida,就明瞭了
看了別人的wp說是取i和i在之前列表裡的下標,但是也搞不懂為什麼是這樣。。問了學re的大佬,也是一知半解。。。
那按照下標的話,就能得到程式碼:
a = [60,108,51,79,129,56,44,94,84,69,64] index = [6,2,5,0,7,3,10,9,1,4,8] res = [] for i in range(len(a)): y1 = pow(-1,(index.index(i)+i)%2) res.append(chr(a[i]+y1*(index.index(i)+i))) for v in index: print(res[v],end="")
得到結果2019SWPUctf