南邮ctf 480小时精通C++
南郵ctf 480小時精通C++
菜雞第一次寫博客,望大佬多指教~~
首先拖進ida里查看,代碼很簡單,給出一堆字符串然后加密,輸出加密后的flag,當然。。。一道70PT的題目怎么會這么輕松就讓你做出來,很明顯一開始的字符串不是flag。。。
當然了,可以放到Linux里跑一下,會出來真正的加密flag。
然而并沒有什么X用,本來試圖用加密后的flag逆運算得flag,但因為菜雞不會c++很多東西看不懂。。。放棄了,但也有大佬(王師傅)寫了出來,后來才發現本題的考點并不在這,還有更簡單的方法。
下面講解一下菜雞的寫題思路啦~
首先看匯編發現被nop了一段,經王師傅指點才知道這好像是什么smc代碼自修改
也就是為什么按照反編譯后的flag是錯的了
接下去查看一下上面的加密函數,有倆參數rdi(a1)和rsi(a2)分別放的是flag和flag長度,而且我們可以看到加密的方法全是通過異或
這也就說明了,加密的那段函數,就是解密的那段函數,只需要吧加密后的數據放進那段函數里再跑一下,就能得到最初的flag。
那就開始調試吧~
下好斷點,f9走起,點進eax可以看到加密后的flag,按下a鍵出來字符串
記錄下加密flag在棧內的地址
接著吧rdi和rsi改成rax和36,rip改成加密函數開始的地址
再下個斷點,在加密(解密)函數結束那。
f9 跑一下,進入當初記錄的棧處,flag得。
下一篇預告
homuraVM
如有錯處,望大佬指出鴨~
總結
以上是生活随笔為你收集整理的南邮ctf 480小时精通C++的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第四章 Tsv文件的抽取
- 下一篇: 使用.Net Core+Vue打造企业通