pwn中str()与p64()

在做一道题是,当scanf的字符串是'%d'时,用str(0xfc1)会输入修改成功。

当scanf的字符串是'%s'时,用p64(0xfc1)会输入修改成功。

想了很久,才明白。

用pwn脚本时,用str()发送数据是模拟交互输入,比如str(0xfc1)会发送过去 4033 这个字符串,就相当于我们与程序交互时,输入了4033这个数字,所以可以用"%d"来读取,并用小端序存储

用p64()发送数据时,是发送的字节流,也就是比特流(二进制流)。本来是01这样表示的,但是ide为了方便观察, 就转换成了\xc1\x0f\x00\x00\x00\x00\x00\x00。发送时,也是按照字节来发,所以要用"%s"来读取

注:我一直想为什么是按照字符串来读取,并且\xc1\x0f是反的呢,我猜想的是因为字符串放入内存是\x0f先放入栈中,然后\xc1再放入,所以会这样。

 

 

 

 

我试了试用‘%s’读取4033,读入内存的是   0x0000000033333034。  用'%d'读取4033,读入内存的是0xfc1.

 

posted @ 2022-02-14 12:16  ATKevin  阅读(1875)  评论(0编辑  收藏  举报