夏洛魂

逆向分析

栈溢出原理与实践

栈结构

寄存器环境
局部变量
调用方栈
返回地址
参数

实验环境

编译器 VS2022
编译选项 1、属性->C/C++->常规->SDL检查(否 (/sdl-)).
2、属性->C/C++->代码生成->安全检查(禁用安全检查 (/GS-)).
3、属性->链接器->高级->随机基址(否 (/DYNAMICBASE:NO))
4、属性->链接器->高级->数据执行保护(DEP)(否 (/NXCOMPAT:NO))
build版本 x86 Release

实验例子

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <windows.H>
int main(int argc, char* argv[])
{
	char szBuf[8];
	FILE* fp = NULL;

	fp = fopen("pwd.txt", "r+");
	fscanf(fp, "%s", szBuf);

	if (strcmp(szBuf, "Hello") == 0)
	{
		printf("ok\r\n");
	}
	else
	{
		printf("error\r\n");
	}

	fclose(fp);
	return 0;
}

漏洞利用

上述代码中fscanf没有长度检查,所以会造成栈溢出,可以被我们利用.

Frida主动调用与RPC

Frida RPC开发姿势

Frida是一款基于Python和JavaScript的进程级Hook框架,其中JavaScript语言承担了Hook函数的主要工作,而Python语言则相当于一个提供给外界的绑定接口,使用者可以通过Python语言将JavaScript脚本注入进程中.官方也在下方仓库中提供了通过Python远程外部调用JavaScript中函数的方式.

X86逆向

除法

约定

  • 两个无符号相除,结果仍然是无符号.
  • 两个有符号相除,结果是有符号.
  • 有符号数和无符号数混除,结果是无符号的.

基本概念

在C语言和其他多数高级语言中,对整数除法规定为向零取整.

0%