2020——网鼎杯 (青龙组)jocker
文章目錄
- 聲明
- 棧指針修改
- wrong
- omg
- smc自修改
- 動調
- 進入encrtpt(把數據段編程代碼來解析)
- idc腳本
- 未導入之前
- 導入之后
聲明
這個題,分析了一下,兩個知識,一個是棧指針修改,還有一個smc自修改(自修改的話,兩種破法,一個是idc腳本,一個是動調)
棧指針修改
進入程序直接地址0x401838的sp指針(堆棧不平衡)報錯,點擊options—>general—>勾選stack pointer,然后找到地址0x401838,截圖看看
call函數調用前后 棧頂指針sp位置不一樣,可能嗎???????那棧怎么平衡????詳情請看https://blog.csdn.net/dj0379/article/details/8699219?utm_source=app&app_version=4.5.5
二話不說,改。鼠標點到call那里,然后按鍵盤Alt + K
緊接著把這個sp改成0
接著,下面還有一個這樣報錯,照改即可
改完之后就能F5嘍。
wrong
omg
導出 內存數組快捷鍵shift + E
這個wrong函數和omg求得一個假的flag,浪費表情flag{fak3_alw35_sp_me!!}
smc自修改
這里有個很長的for循環,一看就是smc,以至于我靜態情況下進了encrypt
直接F5沒法搞,被上面的棧頂指針搞興奮了。。。。眼瞎直接不看,又來修改棧指針。。。。還把
這兩條指令給patch了。。我還特地去查了一下enter指令后加數據是什么玩意。。。。算了,都是眼瞎的悲劇。。。
動調
進入encrtpt(把數據段編程代碼來解析)
.text:0040152C jmp short near ptr dword_401534+43h跳轉的地址是一個數據段,我們不方便觀察,編譯器也不方便解析,但是并不影響程序執行哦。。。我們需要觀察的話,需要把這堆數據段搞成代碼(按下c鍵即可)來解析,然后變成這樣
接下來按下p鍵,也就是把它當成一個函數來解析即可。
上面只有19位,剩下的五位在finally函數里面,
最后一個是58,因為flag最后一個都是},跟}需要異或71,再將之前的四個值都和71異或。腦洞有點強
idc腳本
#include<idc.idc> static main(){ auto start=0x401500l; auto i =0; for(;i<187;i++){auto a=Byte(start+i);PatchByte(i+start,a^0x41); } }保存成后綴名為.idc的文件,緊接著
然后導入所寫腳本文件,
未導入之前
導入之后
只需要按一下p鍵就得了。。。F5后即可
總結
以上是生活随笔為你收集整理的2020——网鼎杯 (青龙组)jocker的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020——网鼎杯 (青龙组)sign
- 下一篇: 常用的IDC函数