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

猜你喜欢

转载自www.cnblogs.com/blackicelisa/p/12905978.html