2020网鼎杯白虎组re 恶龙 wp
本帖最后由 hackcat 于 2020-5-18 15:30 编辑此次参加网鼎杯白虎组,虽然被虐的很惨,但仍然收获颇多,对于恶龙一题,作为逆向入门题目,还是非常不错的,记录一下。
题目链接: https://pan.baidu.com/s/1Qsgyu1dUzJTymm5yTKQ9SQ 提取码: 1djs
首先在linux子系统中使用file hero 命令查看文件信息
hero: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID=5d43a21f3afe482b78a41a29648a070d01c0c2d9, not stripped
确定是一个64位的执行程序。那么先使用ida简单分析下。
通过执行程序和分析逆向伪代码,基本上确定程序是一个小游戏,给出三个选项。1是打小怪赚取金币,2是打boss,3是去商店使用金币兑换战斗力。
从打BOSS的逻辑看出来,有3个BOSS,每一个的战斗力分别有1000000,3000000,5000000 ,题目提示不能patch,也就是不能修改怪的战斗力值,估计跟最后的flag有关。那么只能通过修改elf来完成。
MD
切换到汇编,分别在0x4015f9、0x40165c、0x4016bc处下断点。程序运行到那里修改eax的值即可。
祭出gdb
gdb hero
b *0x4015f9
b *0x40165c
b *0x4016bc
按r执行程序。
选择2
断点生效后,输入
set $eax=0xf4244<br>c
为什么是0xf4244?反正比0xf4240要大就可以了。
第一头恶龙被打败了,那么继续打第二头。
第二头打败了,提示解密另一部分flag,打第三头
flag出来啦! 980691659 发表于 2020-6-8 11:36
确实是溢出了,我如果输入小数程序就会死循环,应该是他程序写的不严谨
unsigned int 的上限是不是2^32-1 4 294 967 296 理论上是不是超过这个数字就会变成负数?可是实测不行啊。
hackcat 发表于 2020-6-8 12:43
unsigned int 的上限是不是2^32-1 4 294 967 296 理论上是不是超过这个数字就会变成负数?可是实测不行啊 ...
参考一下 https://blog.csdn.net/lwgkzl/article/details/78678211 学习了,感谢楼主 可以,学习了
感谢分享! 膜拜大神,学习一下 学习了学习了
学习了,感谢楼主 学习了 感谢楼主
大神呀!学习共勉 本帖最后由 980691659 于 2020-6-6 14:28 编辑
进商店后直接输入9999999999999999就行了
页:
[1]
2