二进制拆弹
答案:1 悬赏:10 手机版
解决时间 2021-04-19 16:42
- 提问者网友:沉默菋噵
- 2021-04-18 17:33
二进制拆弹
最佳答案
- 五星知识达人网友:山君与见山
- 2021-04-18 18:45
gdb会用吧,在0x8048c89这设个断点
看看寄存器ebx是什么内容我猜应该是输入长度为6的一个字符串而ebx存的是字符串首地址
接下来再看下面这5句:
前两句分别把ebx里的内容赋值给了eax(即eax指向你输入字符串的首地址),接着ebx加6(即ebx指向字符串的末尾)。mov $0x0,%ecx就不用多说了,接下来的最后两句就是把字符串的第一个字符0拓展为32位赋给edx再取edx的低四位(其实就相当于取你输入字符串第一个字符asicci码的低四位)
接下来重点来了:
可以看到这是一个循环,它分别取你输入字符串的低四位作为下标索引提取0x8049f80+4*i(i为你输入字符串各个字符低四位的十进制表示)中的内容,并累加到ecx中。所以我们要做的是在gdb中查看这个地址中的内容(用x/100x 0x8049f80)
最后看下面这部分代码
看第一句就知道刚刚累加的内容与0x3f(即63)比较相等的话就成功,所以我们要做的事就是输入特定的长度为6的字符串使得其中的字符低4位i作为下标索引全局数组(起始地址为0x8049f80)使得取出的6个数字相加和等于63即可。还不清楚的话可以追问!
看看寄存器ebx是什么内容我猜应该是输入长度为6的一个字符串而ebx存的是字符串首地址
接下来再看下面这5句:
前两句分别把ebx里的内容赋值给了eax(即eax指向你输入字符串的首地址),接着ebx加6(即ebx指向字符串的末尾)。mov $0x0,%ecx就不用多说了,接下来的最后两句就是把字符串的第一个字符0拓展为32位赋给edx再取edx的低四位(其实就相当于取你输入字符串第一个字符asicci码的低四位)
接下来重点来了:
可以看到这是一个循环,它分别取你输入字符串的低四位作为下标索引提取0x8049f80+4*i(i为你输入字符串各个字符低四位的十进制表示)中的内容,并累加到ecx中。所以我们要做的是在gdb中查看这个地址中的内容(用x/100x 0x8049f80)
最后看下面这部分代码
看第一句就知道刚刚累加的内容与0x3f(即63)比较相等的话就成功,所以我们要做的事就是输入特定的长度为6的字符串使得其中的字符低4位i作为下标索引全局数组(起始地址为0x8049f80)使得取出的6个数字相加和等于63即可。还不清楚的话可以追问!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯