记录一点自己的疑难点,越学真的是越发感觉自己的菜。
杂记1
例如
1 |
|
此处的ptr1[0+0x10]是对下标索引的操作(就是指针)。[]里移动0x01在64位里就是8字节光标的移动
杂记2
静态编译中hook的找法
杂记3
mprotect(add,len,prot)rdi = add ; rsi = len ;rdx = prot;
prot=7 是可读可写可执行
scanf
在linux 16版本中,scanf输入的数据过大超过linux栈空间的最大值(8m),就会自动调用堆块来储存数据。
在64位系统下,small bin <0x400
在32位系统下,small bin <0x200
所以你输入0x400字节数据,就会触发malloc_consolidate,使得fasted bin里的堆块合并到unsorted bin里面。
直接利用ROPgadget在libc里找gadget偏移
在获取到了libc基址后,就可以直接利用ROPgadget在libc里寻找偏移了。
指令如下:
先创建一个libc.gadget文件,储存libc里的gadget
1 | ROPgadget --binary libc-2.23.so>libc.gadget |
再利用grpe寻找需要的gadget
1 | grep "pop rdi ; ret" libc.gadget |
当然!你也可以用另一种方法。
知道libc_base后,要获取pop rdi;ret这种,直接
1 | pop_rdx_ret = libc + lib.search(asm("pop rdx\nret")).next() |