ctfshow-pwn-前置基础(汇编5-12)

淡云晨光 / 2024-11-11 / 原文

pwn5

运行文件,所以我们直接下载文件在虚拟机里运行即可(命令./......)
image
原理:
用IDA打开elf,里面只有一个start函数,IDA反汇编的结果是将dword_80490E8指向的内容写入后退出,进入dword_80490E8查看写入的东西
image
对16进制"R"一下转化为字符,得到下面的字符串,因为是小端序,所以字符串的正确形式应该是"Welc",和下面的字符串连起来就是"Welcome_to_CTFshow_PWN"
image
其实对16进制"A"一下就能直接变成下面这样
image

pwn6

asm文件是汇编文件,可以直接用记事本查看内容,内容为汇编语言中的一些基础操作方法,出题人也是十分贴心,给出了所有注释。求立即寻址方式结束后eax寄存器的值,查看汇编,根据注释可以知道eax = 11 + 114504 - 1 = 114514
image

pwn7

求寄存器寻址方式结束后edx寄存器的值,根据注释可以知道edx的值就是ebx的值,即0x36d,0x是16进制的前缀
image

pwn8

求直接寻址方式结束后ecx寄存器的值,根据注释可以知道ecx的值为msg的地址,需要借助IDA查看
image
image
image

pwn9

求寄存器间接寻址方式结束后eax寄存器的值,根据注释可以知道,esi的值为msg的地址,即上一问的答案,eax的值为[esi],在汇编中表示esi指向的地址的值,即msg地址的值
image
在IDA中可以看到值为636C6557h,h表示16进制
image

pwn10

求寄存器相对寻址方式结束后eax寄存器的值
image

  1. 将msg的地址赋值给exc,即exc = 0x80490E8
  2. ecx加4,即ecx = 0x80490EC
  3. 将ecx(0x80490EC)中的值赋值给eax
    即ome_to_CTFshow_PWN
    image

pwn11

求基址变址寻址方式结束后的eax寄存器的值,eax的值为ecx+edx*2所指向的地址的值,即[msg+4],表示在msg地址的基础上偏移4个单位,和上一问结果相同,只是这里介绍了汇编中的基址变址
image

pwn12

求相对基址变址寻址方式结束后eax寄存器的值,通过简单的赋值和运算,可以得到eax = [msg + 8 + 1*2 -6] = [msg+4],和上一问相同
image