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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

REVERSE-PRACTICE-BUUCTF-9

發布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 REVERSE-PRACTICE-BUUCTF-9 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

REVERSE-PRACTICE-BUUCTF-9

    • [ACTF新生賽2020]usualCrypt
    • [MRCTF2020]Transform
    • [V&N2020 公開賽]CSRe
    • [WUSTCTF2020]level1

[ACTF新生賽2020]usualCrypt

exe程序,運行后提示輸入flag,無殼,ida分析
main函數邏輯清晰,獲取輸入,sub_401080函數對輸入進行變表base64變換,結果存儲到v5,然后check,驗證輸入

sub_401080函數是很明顯的base64,在函數開始部分,sub_401000函數對表進行了變換,在函數結束返回部分,sub_401030函數對變表后的base64字符串進行了英文字母的大小寫轉換

sub_401000函數,將byte_40E0AA[6]到byte_40E0AA[14]和base64_table[6]到base64_table[14]兩段交換

sub_401030函數,對變表后的base64字符串英文字母的大小寫轉換,其他字符不變

寫腳本即可得到flag

#coding:utf-8 #base="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" 原表 base=[0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A,0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54,0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64,0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E,0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,0x79, 0x7A, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,0x38, 0x39, 0x2B, 0x2F] #原表的ascii碼表示,方便進行原表變換 #對原表進行變換 for i in range(6,15):base[i],base[10+i]=base[10+i],base[i] #base_changed是變表,需要轉成字符串的形式 base_changed=''.join(chr(i) for i in base) print("Current Base:\n%s " %base_changed) #打印base_changed變表 def base64_decode(inputs): #inputs是base64字符串# 將字符串轉化為2進制bin_str = []for i in inputs:if i != '=':x = str(bin(base_changed.index(i))).replace('0b', '')bin_str.append('{:0>6}'.format(x))# 輸出的字符串outputs = ""nums = inputs.count('=')while bin_str:temp_list = bin_str[:4]temp_str = "".join(temp_list)# 補足8位字節if (len(temp_str) % 8 != 0):temp_str = temp_str[0:-1 * nums * 2]# 將四個6字節的二進制轉換為三個字符for i in range(0, int(len(temp_str) / 8)):outputs += chr(int(temp_str[i * 8:(i + 1) * 8], 2))bin_str = bin_str[4:]print("Decoded String:\n%s " % outputs) #enc是經變表base64以及大小寫轉換后的字符串 enc="zMXHz3TIgnxLxJhFAdtZn2fFk3lYCrtPC2l9" #c將enc大小寫轉換回去 再解變表base64 c="" for i in enc:if i.isupper():c+=i.lower()elif i.islower():c+=i.upper()else:c+=i base64_decode(c)

運行結果

[MRCTF2020]Transform

exe程序,運行后提示輸入code,輸入錯誤打印Wrong,無殼,ida分析
main函數邏輯清晰,獲取輸入,檢驗輸入的長度,對輸入的內容變換位置后存儲到byte_414040,byte_414040再異或一下,最后check

寫腳本即可得到flag

[V&N2020 公開賽]CSRe

exe程序,運行出錯

查殼,發現是.NET,而且加了de4dot殼

脫殼后用dnSpy打開,找到主邏輯函數
method_0函數是將兩個傳入的參數順序異或的結果返回
smethod_0函數是對傳入的參數進行sha1散列的結果返回
main函數,先獲取輸入的str,頭部加個“3”,尾部加個“9”,拼接后的字符串進行sha1散列,與已知的值比較,驗證輸入的str是否正確
再獲取輸入的text,頭部加“re”,拼接后的字符串進行sha1散列,散列的結果與已知的值進行異或,結果為全0,說明兩個傳入的參數完全相同,驗證輸入的text是否正確
flag即為flag{str+text}

using System; using System.Security.Cryptography; using System.Text;// Token: 0x02000006 RID: 6 internal sealed class Class3 {// Token: 0x0600000D RID: 13 RVA: 0x000022C8 File Offset: 0x000004C8public string method_0(string string_0, string string_1){string text = string.Empty;char[] array = string_0.ToCharArray();char[] array2 = string_1.ToCharArray();int num = (array.Length < array2.Length) ? array.Length : array2.Length;for (int i = 0; i < num; i++){text += (int)(array[i] ^ array2[i]);}return text;}// Token: 0x0600000E RID: 14 RVA: 0x0000231C File Offset: 0x0000051Cpublic static string smethod_0(string string_0){byte[] bytes = Encoding.UTF8.GetBytes(string_0);byte[] array = SHA1.Create().ComputeHash(bytes);StringBuilder stringBuilder = new StringBuilder();foreach (byte b in array){stringBuilder.Append(b.ToString("X2"));}return stringBuilder.ToString();}// Token: 0x0600000F RID: 15 RVA: 0x00002374 File Offset: 0x00000574private static void Main(string[] args){if (!Class1.smethod_1()){return;}bool flag = true;Class3 @class = new Class3();string str = Console.ReadLine();if (Class3.smethod_0("3" + str + "9") != "B498BFA2498E21325D1178417BEA459EB2CD28F8"){flag = false;}string text = Console.ReadLine();string string_ = Class3.smethod_0("re" + text);string text2 = @class.method_0(string_, "63143B6F8007B98C53CA2149822777B3566F9241");for (int i = 0; i < text2.Length; i++){if (text2[i] != '0'){flag = false;}}if (flag){Console.WriteLine("flag{" + str + text + "}");}} }

用在線網站解第一段sha1,可知str為“1415”

用在線網站解第二段sha1,可知text為“turn”

[WUSTCTF2020]level1

elf文件,無殼,ida分析
main函數邏輯清晰,從文件讀取flag,下標從1開始,下標為奇數,flag的內容移位,下標為偶數,flag的內容乘以下標

寫腳本即可得到flag

總結

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

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