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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

SimpleRev

發布時間:2024/3/13 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SimpleRev 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SimpleRev

拖入 ida 64,程序并不復雜,直接 F5 反編譯就看到主要的流程

發現主要的處理是在 Decry() 函數中,直接點進去,如下圖(圖1)

為了便于理解,轉換了一部分之后如下圖(圖2),接下來進行分析

可以看到主要操作如下:
(1)將字符串 key3 和變量 v9 進行 join() 操作,賦值給變量 text,其中 key3 的值為 kills,點進去 join() 函數發現實質也是 strcpy() 加上 strcat() 的使用
(2)將 key1 的值復制給 key,再使用 strcat() 將變量 src 的值和 key 進行連接,其中 key1 的值為 ADSFK

strcat() 函數原型:
char *strcat( char * destination, const char * source );
作用:
把 strSource 所指向的字符串追加到 strDestination 所指向的字符串的結尾。strDestination 末尾的 \0會被覆蓋,strSource 末尾的 \0會一起被復制過去,最終的字符串只有一個 \0。

阿斯克碼表

(3)for 循環,對 key 進行處理,將 key 中的大寫字母都轉換成小寫字母
(4)while 循環,對輸入的字符進行處理,具體是將字符依次讀到變量 v1 中,然后判斷是否是大寫字符或者小寫字符,但是處理操作都一樣,都是 str2[v2] = (v1 - 39 - key[v3 % v5] + 97) % 26 + 97;,一系列操作之后依次賦值給變量 str2
(5)最后將變量 text 和 str2 進行對比,一致的話輸出 Congratulation!

注意:在圖二中看到的變量 src 和變量 v9,分別是 SLCDN和 wodah,但是其實有一定的坑。
個人理解是,在圖一中,可以看到變量 src 和變量 v9,都是 int64 數據類型。我們用 ida 時候,ida 給我們顯示的是大端序,但其實 int64 數據類型存儲時候是按照小端序的,因此進行字符串拼接操作也需要按照小端序進行。
因此變量 src 和變量 v9,實質上分別是 NDCLS和 hadow,拼接得到的變量 key 為 ADSFKNDCLS,變量 text 為 killshadow

因為涉及到 %26 的運算,為了方便我們直接進行爆破,遍歷字母 a - z,經過加密后的值與 text 對比,最終求得原來的輸入的值

key = 'ADSFKNDCLS' text = 'killshadow' key_new = '' for i in range(0, len(key)): # 將 key 轉換成小寫key_new += chr(ord(key[i]) + 32) flag = '' for i in range(10):for j in range(65, 123):if j > 90 and j < 97:continueelse: # 遍歷 A-Z 和 a-zif chr((j - 39 - ord(key_new[i]) + 97) % 26 + 97) == text[i]:flag += chr(j)break print(flag)

理論上這個腳本最后的 break 是不需要的,因為 flag 有 10 位,其中原來的程序對于每一位的操作,都是不區分大小寫的,就是說每一位都有大寫和小寫兩種答案,即總共有 2^10 個答案。這里使用 break 之后,每個位置就是全都是大寫的

總結

以上是生活随笔為你收集整理的SimpleRev的全部內容,希望文章能夠幫你解決所遇到的問題。

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