日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【攻防世界015】notsequence

發布時間:2025/3/21 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【攻防世界015】notsequence 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關鍵詞:嵌套循環,楊輝三角。

這個題是32位ELF,先看主函數:

初始化了一個全局數組,我給它命名為 DwordArray ,因為根據后面對它的尋址可以知道這是一個4字節數組。然后循環 scanf 讀取整數,直到讀取到0為止。

接下來調用 Check1 ,參數是 DwordArray:

檢查 Check1 的返回值,等于 -1 就表示輸入錯誤,繼續看下面的代碼,發現必須返回 20 才行:

Check1 必須返回 20,后面還有一個 Check2 函數,但是說實話其實可以不用看了,把 Check1 分析明白了基本就能猜出密鑰。接下來分析 Check1。

Check1 長這樣,有嵌套循環,這種函數比較復雜,我做題的時候是一邊逆向一邊還原成C代碼的,還原后用F5檢查,如果基本一致就沒問題了,如果有不一致的,就要仔細檢查是代碼還原有錯還是F5的錯。

外層循環了 0x400 次。

這是內層循環,觀察 DwordArray 的尋址,有乘以4表示元素大小是4字節,下面給出我還原的代碼:

基本上大同小異,接下來要看看能從 Check1 獲取到什么信息。外層循環,每次循環對 result 加 1,最后返回時必須等于 20,我們寫腳本的時候,要看看 result 什么時候等于 20。i 和 j 的值我們寫腳本的時候是知道的,但是 DwordArray 的值不知道,所以只能假設。我們可以對照著還原的代碼,寫出這樣一個腳本:

def Check1():result = 0 # 返回時必須等于20i = 0while i <= 1024:var_10 = 0j = 0if result == 20:print("現在 result %d 等于 20,如果 DwordArray[%d] 等于0,就可以正確返回 20" % (result, i))returnelse:print("現在 result %d 不等于 20" % (result))while j <= result:# 注意 這一步還沒做print("var_10 += DwordArray[%d]" % (i + j))j += 1print("var_10 必須等于 ", 1 << result)result += 1i = (result + 1) * result / 2print("---------------------------------------")Check1()

我們從 Check1 能夠獲取的信息就是這些了,我們知道第0個元素是1,第一和第二個元素求和等于2,而它們不能是0,所以只能是兩個1,然后3到5這3個元素求和是4,這個組合就無法確定了,可能是 1 1 2,1 2 1,2 1 1 。如果是 1 2 1 的話,感覺就很像楊輝三角了,楊輝三角每行的求和就是2的行數次方,所以大膽猜測密鑰就是楊輝三角。下面只需要寫一個腳本打印楊輝三角前20行的值就行了。

# 打印20層楊輝三角 def yanghui():n = 20m = 20arr = [[0 for i in range(n)] for j in range(m)]for i in range(20):for j in range(20):if j == 0 or i == j:arr[i][j] = 1for i in range(20)[1:]:for j in range(20)[1:]:arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1]for i in range(20):for j in range(20):if arr[i][j] != 0:print(arr[i][j], end="")yanghui()

1111211331146411510105116152015611721353521711828567056288119368412612684369111045120210252210120451011115516533046246233016555111112662204957929247924952206612111378286715128717161716128771528678131114913641001200230033432300320021001364911411151054551365300350056435643550053003136545510515111612056018204368800811440128701144080084368182056012016111713668023806188123761944824310243101944812376618823806801361711181538163060856818564318244375848620437583182418564856830608161531811191719693876116282713250388755829237892378755825038827132116283876969171191

把這一長串拿去做md5,就能得到flag。提交發現是正確的,所以 Check2 就不用看了。


但實際做題的時候我一開始沒猜到是楊輝三角,我把 Check2 也還原了,也是嵌套循環:

說實話還原完 Check1 和 Check2 我還是一臉懵逼,我做這題完全是靠猜的。但是問題不大,主要鍛煉的還是逆向分析的能力嘛。。。

總結

以上是生活随笔為你收集整理的【攻防世界015】notsequence的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。