WP-南邮CTF逆向第六题 WxyVM2
生活随笔
收集整理的這篇文章主要介紹了
WP-南邮CTF逆向第六题 WxyVM2
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
WP-南郵CTF逆向第六題 WxyVM2
這個地方有個紅色的部分 ,意思是塊內容太大,無法顯示, 這里我們先不用管,過會查看偽代碼之后就知道什么意思了,,,
小編已經給整理出了解決方法:
修改配置文件IDA 7.0\cfg\hexrays.cfg
找到
MAX_FUNCSIZE = 64 // Functions over 64K are not decompiled
修改為
MAX_FUNCSIZE = 1024 // Functions over 64K are not decompiled
4. 等加載出偽代碼之后,觀察偽代碼,發現用戶在694100這個地址處輸入數據,如果輸入的字符不是25個的話,v4 = 0,由此推測flag是25個字符組成
5. 接下來是一長串代碼,我們先不管他,因為既然這個代碼這么長,說明它是有規律的,或者說絕大部分是沒有用的
6. 直接來到main函數的末尾部分
觀察末尾,694100是用戶輸入的地方,而694060存放的是程序本來的數據,,
由此推測,上面那一長串代碼很可能是對用戶輸入的數據進行修改或者對694060處的數據進行修改,然后觀察長串代碼,發現很大部分并沒有對694060處的數據和用戶輸入的數據進行修改,而有僅有一小部分對用戶輸入的數據進行修改,即對604100-604118范圍內的數據進行修改。
7 . 因為程序最后是對694100-694118和694060-6940C3(因為694060存放是DWORD類型的),所以只要不是對這個范圍的數據進行修改的代碼都是沒有用的。
8 . 我們觀察一下中間那一串超長的代碼,我們的目的是將有用的代碼和沒用的代碼區分開,觀察其匯編語言(因為這個時候看偽代碼是看不出什么東西了)
觀察其匯編代碼,發現只要是對694100-694118處的東西進行修改的代碼都是以movezx開頭的,并且大部分是三個指令一起的,個別的是2個指令一起,如上圖的第一個黑框中的代碼,
movzx eax, cs:byte_694114
mov cs:byte_694114, al
仔細觀察這2條指令的話,其實也是沒有用的,但是為了便于篩選有用的匯編指令,我們按將其默認為有用(因為它也是movezx開頭的),然后最后的時候我們再將其刪掉即可
9 . 我們開始寫腳本進行篩選
FindCode和GetDisasm這兩個函數可以說是這個題解題的關鍵中的關鍵,這些IDC腳本在《IDA pro權威指南》中有詳解,大家可以參考一下
打印指令后都是這樣的
10 我們將這些指令復制到Notepad++中,方便我們將這些改寫為IDC腳本
利用Notepad++的替換功能,我們將sub改為add,add改為sub等等 利用replace進行了一系列操作
最終得到了腳本
11 .因為這個是對694100處的數據進行逆向的,所以我們先寫一個IDC腳本將694060處的對應的數據復制到694100處
12.最后我們運行我們剛才改好的腳本進行最終的逆向
得到最終的flag
總結
以上是生活随笔為你收集整理的WP-南邮CTF逆向第六题 WxyVM2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android开源绘画板(普通绘画模式和
- 下一篇: C#-数组截取的方法