2020網鼎杯 白虎組reverse:hero


主函數,當bossexist的值不為0時,while循環dround()函數,循環結束輸出flag

 

 

 outflag()函數的flag值由6段數據拼湊而成

 

 

 while循環的dround()函數有三個選擇,1隨機獲取coin硬幣,2打龍,3商店由硬幣兌換攻擊值

 

 

1.隨機獲取硬幣函數:真的很隨機,而且一次只有一兩個

 

 

 2.打龍函數:攻擊值(eff)大於1000000打死第一條龍,大於3000000打死第二條龍,大於5000000打死第三條龍,並且出flag。每打死一條龍都會自動解密一段flag

 

 

 

 

 

 3.商店函數:if判斷coin硬幣數量夠不夠,如果夠就2個硬幣充1點攻擊值

 

 

 這道題獲取flag和我們的輸入沒有關系,flag的解密很復雜是des,通過解密去算flag不科學,按照思路玩游戲要玩五百萬次。

其實這道題很簡單,elf文件遠程連接kali動態調試在if充值判斷那里把flag寄存器的SF位置0就可以想充多少充多少了

在if判斷這里按tab鍵切換到匯編界面

 給js跳轉F2下一個斷點

將ida文件夾dbgsrv目錄下的linux_serverx64文件拷貝到kali,chmod 755 linux_serverx64給文件權限,然后./linux_serverx64運行程序,會自動監聽23946端口

在ida打開debug調試,選擇Linux調試

打開程序的調試設置

設置如下,寫入kali的ip地址,和登錄密碼,ok開啟調試

 

 程序運行到js跳轉那里把SF位置0,就可以成功充入任意攻擊值了

 

 

 因為bossexist的值非0,所以while循環會繼續,這時候選擇2進入打龍函數打三次龍自動出flag

另外,kali連接ida,先ping一下Windows主機看ping得通不,如果ping不同改網絡設置,ping通了ida依然連不上kali,則kali關閉防火前,需要下載ufw工具關閉firewalld


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM