-
-
[原创]看雪ctf WannaLOL Write up
-
发表于: 2017-6-1 18:26 2524
-
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
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
他的文章
看原图
赞赏
雪币:
留言: