首页
社区
课程
招聘
[原创]看雪ctf WannaLOL Write up
2017-6-1 18:26 2120

[原创]看雪ctf WannaLOL Write up

2017-6-1 18:26
2120

1、把程序丢到ida里面,查找string,看到

2、定位代码

3、将代码扔进od中调试
第一个断点打在0x004011F4
跟踪od,发现
对应ida中查看
是调用了strlen函数,cmp eax,4,eax存储返回值,因此要求输入必须是四位
4、
对比第1位,为0x31,即输入第一位必须是1
对比第2位,为0x35,即输入第二位必须是5
然后动态调试跟踪;
在内存里是输入是如下存储的,第一位到第四位,分别是a,b,c,d,在内存里面,
ebp-0x1C:a
ebp-0x1B:b
ebp-0x1A:c
ebp-0x19:d

sub eax,ecx

ecx为0x30,因此这句话的意思其实就是将输入的字符串数字转化为数字
fild是将结果存入浮点寄存器中

这个时候可以看到浮点寄存器中的值

即将a存入ST0,c存入ST1

fidiv即做除法,

即将ST0与地址中的数相除,并将结果存入ST0

这里可以看到是a/b

这里是c-a/b

(c-a/b)*d

再乘0x40711C地址的数

即(c-a/b)*d * 16

比较结果是否等于0x407118的数即384

所以(c-a/b)* d* 16 = 384
a=1,b=5,凑数得c=5,d=5
因此flag为1555



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回