南邮ctf训练平台逆向试题wp
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,第一题:hint已经给的很明白了: IDA 进去 ,对那堆数字按R 就好第二题:low_addr rsp0x10x4 相对地址0x180x1chigh_addr rbp00000000004
千家信息网最后更新 2026年11月01日南邮ctf训练平台逆向试题wp
第一题:
hint已经给的很明白了: IDA 进去 ,对那堆数字按R 就好
第二题:
low_addr rsp0x10x4 相对地址0x180x1chigh_addr rbp00000000004004e6: 4004e6: 55 push rbp 4004e7: 48 89 e5 mov rbp,rsp 4004ea: 48 89 7d e8 mov QWORD PTR [rbp-0x18],rdi 4个字=8个byte=64bit rdi存参数 rdi是64位寄存器 存第一个参数 4004ee: 89 75 e4 mov DWORD PTR [rbp-0x1c],esi esi是32位寄存器 存第二个参数 esi能存两个字 4004f1: c7 45 fc 01 00 00 00 mov DWORD PTR [rbp-0x4],0x1 向内存 [rbp-0x4] 写入1 4004f8: eb 28 jmp 400522 4004fa: 8b 45 fc mov eax,DWORD PTR [rbp-0x4] DWORD PTR [rbp-0x4]这个指针代表数值为1的地方。eax=1 4004fd: 48 63 d0 movsxd rdx,eax movsxd带符号扩展并传送 rdx=1 400500: 48 8b 45 e8 mov rax,QWORD PTR [rbp-0x18] rax=input首址 400504: 48 01 d0 add rax,rdx rax=input首址+1 input[1] 400507: 8b 55 fc mov edx,DWORD PTR [rbp-0x4] edx=1 40050a: 48 63 ca movsxd rcx,edx rcx=1 40050d: 48 8b 55 e8 mov rdx,QWORD PTR [rbp-0x18] rdx=input首址 400511: 48 01 ca add rdx,rcx rdx=input首址+1 input[1] 400514: 0f b6 0a movzx ecx,BYTE PTR [rdx] ecx= 0x67 400517: 8b 55 fc mov edx,DWORD PTR [rbp-0x4] edx=1 40051a: 31 ca xor edx,ecx edx=0x67 ^ 0x1 = 0x66 = 'f' 40051c: 88 10 mov BYTE PTR [rax],dl 40051e: 83 45 fc 01 add DWORD PTR [rbp-0x4],0x1 [rbp-0x4] 处的值 + 1 400522: 8b 45 fc mov eax,DWORD PTR [rbp-0x4] [rbp-0x4] 处的值读入eax 400525: 3b 45 e4 cmp eax,DWORD PTR [rbp-0x1c] eax和28相比 400528: 7e d0 jle 4004fa 小于28的话就跳到4004fa处 40052a: 90 nop 40052b: 5d pop rbp 40052c: c3 ret
int main(int argc, char const *argv[]){ char input[] = {0x0, 0x67, 0x6e, 0x62, 0x63, 0x7e, 0x74, 0x62, 0x69, 0x6d, 0x55, 0x6a, 0x7f, 0x60, 0x51, 0x66, 0x63, 0x4e, 0x66, 0x7b, 0x71, 0x4a, 0x74, 0x76, 0x6b, 0x70, 0x79, 0x66 , 0x1c}; func(input, 28); printf("%s\n",input+1); return 0;}1. mov ax,bx ; 是把BX寄存器"里"的值赋予AX,由于二者都是寄存器,长度已定(word型),所以没有必要加"WORD"
mov ax,word ptr [bx]; 是把内存地址等于"BX寄存器的值"的地方所存放的数据,赋予ax。由于只是给出一个内存地址,不知道希望赋予ax的,是byte还是word,所以可以用word明确指出;如果不用,既(mov ax, [bx]; )则在8086中是默认传递一个字,既两个字节给ax。
2.
r代表64位 e代表32位,一个char占用一个字节
3.
一个函数被调用,首先默认要完成以下动作:
将调用函数的栈帧栈底地址入栈,即将bp寄存器的值压入调用栈中
建立新的栈帧,将被调函数的栈帧栈底地址放入bp寄存器中
以下两条指令即完成上面动作:
push %rbp
mov %rsp, %rbp
ptr -- pointer (既指针)得缩写。
汇编里面 ptr 是规定 的 字 (既保留字),是用来临时指定类型的。
(可以理解为,ptr是临时的类型转换,相当于C语言中的强制类型转换)
PS:
第一次读汇编代码......感觉还挺有意思的,都是边查资料边看,,最坑的是最初认为函数参数里边,栈存的直接是字符串,,后来分析一半感觉不对劲....原来存的是字符串的地址 ...我擦...
最后附上python小程序:
a = [0x67,0x6e,0x62,0x63,0x7e,0x74, 0x62, 0x69, 0x6d, 0x55, 0x6a, 0x7f, 0x60, 0x51, 0x66, 0x63, 0x4e, 0x66, 0x7b,0x71, 0x4a, 0x74, 0x76, 0x6b, 0x70, 0x79, 0x66 , 0x1c]b = ""for x in range(1,29): b=b+chr(a[x-1] ^ x)print b
flag{read_asm_is_the_basic}
寄存器
地址
函数
参数
代表
内存
类型
两个
动作
地方
字符
字符串
字节
感觉
指针
对劲
必要
有意思
不用
代码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技名片
广东猪兼强互联网科技有限公司
互联网科技有限公司图片
科技互联网技术
北京互联网络科技有限公司
沃里互联网科技
互联网科技的未来发展
互联网科技视频素材
互联网科技公司介绍
互联网科技类展会
阿里巴巴算科技企业还是互联网
科技类公司包括互联网吗
互联网科技和法律行业
互联网金融科技名词解释
山东星卡互联网科技有限公司官网
银行科技岗属于互联网吗
广州燕处互联网科技有限公司
昆明中奇联合互联网科技
科技互联网行业投资研究
高科技和互联网的现代国家
天津市摩尔互联网科技
互联网扶贫科技
互联网科技与金融科技
互联网科技小贷
互联网科技股票
大白互联网科技
卓越科技互联网 招聘
山东吉时兔互联网科技有限公司
华夏恒生互联网科技013171
启辰互联网科技