2019安洵杯雜項1和逆向1WP

大佬眾多,菜鳥只做出來2道題,有錯指出改正.
吹著貝斯掃二維碼

題目就可以知道這道題有base加密和二維碼要素,先下載文件查看

什么都看不出來但是能找到里面還有個壓縮包

嘗試打開發(fā)現(xiàn)需要密碼

看來和其他文件有關(guān),就先試試看文件16進(jìn)制有沒有什么隱藏信息,果然發(fā)現(xiàn)里面有jpeg可以知道這是一張圖片,多看幾個發(fā)現(xiàn)每個都是圖片

直接用格式工廠批量把文件轉(zhuǎn)換成jpg格式


然后就是拼圖了 應(yīng)該有簡便方法比如腳本之類的,可惜本人太菜只能靠手一點(diǎn)一點(diǎn)的拼圖,工具可以使用ps,畫圖,ppt都行

掃描二維碼獲得提示

base全家桶? 里面的85和13完全沒聽說過,通過百度知道了85確實存在這里是用的ASCII85的加密,但是怎么都找不到13,在朋友的提示下覺得可以試試rot13的加密方式,畢竟能想到和13有關(guān)的也就rot13了
接下來就是找密文了,既然圖片是通過看16進(jìn)制的方式找到的,那么也可以把flag壓縮包也放進(jìn)16進(jìn)制看看有沒有信息

在末尾如愿以償?shù)目匆娏艘淮黠@是密文的內(nèi)容,復(fù)制下來開始解密,想到既然是解密那么就應(yīng)該反過來才對:Base32:3A715D3E574E36326F733C5E625D213B2C62652E3D6E3B7640392F3137274038624148
Base16:?:q]>WN62os<^b]!;,be.=n;v@9/17'@8bAH
Rot13:?:d]>ja62bf<^o]!;,or.=a;i@9/17'@8onu
Base85:PCtvdWU4VFJnQUByYy4mK1lraTA=
Base64:<+oue8TRgA@rc.&+Yki0
Base85:ThisIsSecret!233
拿去解壓

獲得flag
Easy_Encryption

題目沒什么信息,下載附件

打開ida后先找到main函數(shù)

Shift+F12查看字符串,找個大概率在main函數(shù)中的雙擊

X 查看哪里調(diào)用的這個字符串

就到了main函數(shù),就可以分析內(nèi)容了,先不管前面的系統(tǒng)函數(shù),查看系統(tǒng)函數(shù)下面的第一條函數(shù):sub_4111F4看看執(zhí)行了什么

進(jìn)去之后不能f5,菜鳥表示很難直接分析匯編語言,就先轉(zhuǎn)到匯編頁面進(jìn)去先

然后再f5

復(fù)制f5出錯的地址

找到這個地址后,把這個地址的上一個地址去掉

然后再E重設(shè)置函數(shù)結(jié)尾就能F5了

粗略看一下,猜測這應(yīng)該是一個算法,想到后面main還會執(zhí)行命令就先不管這算法看看后面還執(zhí)行了些什么

有個if判定,還是進(jìn)去看判定條件

有個賦值再往里面走一步看看賦值了什么

能看出來這是個base64的加密,退出不看繼續(xù)看下一步

這一步是一個對比把str1拿來和后面的字符串進(jìn)行對比相等為0取反即為真,在后面mian函數(shù)就沒什么可以執(zhí)行了,由此可知應(yīng)該是要將這個if判定為真即可,往上找str1來自什么地方

來自于最開始的第一個算法

先分析算法:
加密算法本身不難,解密算法由于懶得想,知道flag長度15位,加密算法只涉及到字符位置和字符,所以可以爆字符對應(yīng)表,即可斷點(diǎn)flag
解密:
table = list('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/')
input = 'artqkoehqpkbihv'
for i in range(len(table)):
??? temp = ord(table[i]) - ord('a')
??? if temp < 0:
??????? temp *= -1
??? table[i] = temp
def allTable(io):
??? each = []
??? for i in range(15):
??????? a = []
??????? for i2 in range(ord('a'), ord('z') + 1):
??????????? if (i2 + io[i] - ord('a')) % 26 + ord('a') > ord('z'):
??????????????? stringb = chr((i2 + io[i] - ord('a')) % 26 + ord('G'))
??????????? else:
??????????????? stringb = chr((i2 + io[i] - ord('a')) % 26 + ord('a'))
??????????? a.append(stringb)
??????? each.append(a)
??? return each
table = allTable(table)
flag = ''
for i in range(len(input)):
??? flag += chr(table[i].index(input[i]) + ord('a'))
print flag
if __name__ == '__main__':
??? pass