v7演算法礦機
『壹』 招新——第一次嘗試破解tea演算法
物拿正 開始接觸逆向分析時,入門級別的一道題目,是一個師兄寫的考核題《sotired》,嘗試著破解了下,以下是具體的過程。
1、雙擊發現打不開,應該是linux系統下的文件(事實證明確實如此,我在虛擬機那裡驗證了一下,隨便輸入字元串,得到的答案是sorry~,給人crakeme的感覺,哈哈)
2、使用反匯編工具ida64位,將文件拖進去,找到main函數,使用F5大法,得到下面的界面:
看到sorry~和wow!congratulation!的字元串,可以推斷出有字元串的對比,看到if語句,沒錯就是它了,看來temp[k]裡面有我們想要的東西(用於匹配比較的正確密文)點進去,得到
這里利用一個小插件lazyida,哈哈哈(我比較懶),得到密文,
在這里需要聲明下,因為最後讀出來的那個0x00111885B有誤(lazyida的原因),其實是0x32111885B才對,所以是 0x572CB9C1, 0x73A6EB63, 0x069E6A55, 0x818E33D9, 0x7ED0A862, 0x3211885B,這些16進制的數就是密文啦!有了密文,我們要破解它,就需要找密鑰啦,回去看函數
想像下,用戶輸入一組字元串,for循環了3次,atoui函數猜測應該是某種轉換函數,點進去
果然是移位加密轉換,結果是int 型,所以v11[6]的字元數據全部被轉換了數字,繼續往下
又有3次循環,看到encipher函數應該是加密函數來的,然後傳遞了兩個參數,一個是轉化後的v11,另一個v7,這里就可以懷疑了,v7應該是密鑰,而且用了引用,難道是地址嗎?很奇怪,點進去v7,得到
這里又要懷疑了,前面4個都是?一個數字有4個數據,感覺很像數組的樣子,於是嘗試一波
轉換為數組,然後F5大法刷新下!得到
看來我們的推斷是正敏薯確的,v7是一個數組,裡面的數據應該是密鑰了!到此,我們成功地拿到了密文和密鑰了,接下來就是解密罩悔了,解密前需要知道是怎麼加密的,回到剛剛的encipher函數,進去
看到這里有人可能要很激動了,這個演算法不就是tea演算法嗎?!(沒錯,雖然我一開始也不知道,於是我去谷歌了一波!)
tea演算法就是把密文結合密鑰進行移位再異或的運算,總共進行32輪。解密則是反過來求解,不過需要先算出delta的值,即9e3779b9*32後得到13c6ef3720,明顯溢出了(手賤算了下,溢出。tea演算法把溢出的忽略了,emmmm,我也不太懂其中的原因,能用先用著,哈哈哈),於是乎,可以寫腳本了,打開c++,寫入腳本
我們的密文和密鑰修改好後,因為有密文有6個16進制的數,所以解密3次,得到結果
好啦,這就是我們的flag了,但是看不懂是吧,沒關系,去轉換下,谷歌走起!
大家記得把空格消除,然後把它和在一起轉化,好啦,虛擬機linux操作系統打開,文件打開,輸入flag,得到的就是WOw!congratulation!
以上便是我花了一個下午整理出來的一個逆向題目,希望對大家有幫助,也希望能多多交流哦,嘻嘻~
『貳』 求出最短路徑,要過程,用Dijkstra演算法。。。
從v1開始遍歷
v2 = 2;
v3 = 5;
v2較小所以跳到v2
v3 = 4;
v4 = 6;
v5 = 8;
v3較小所以跳到v3
v4 = 5;
v6 = 7;
v4較小所以跳到v4
v6 = 6;
v7 = 9;
v6較小所以跳到v6
v7 = 8;
所以最後結果v1 -> v7最短路徑為v1->v2->v3->v4->v6->v7,最短路徑長度為8