BypassGS(安全检查)
概述绕过思路通过分析异常梳理函数的函数原型,发现可以通过以下方法获取执行权限 1) 分析异常处理函数原型的四个参数,具体如下:
123456EXCEPTION_DISPOSITION __cdecl _except_handler ( struct _EXCEPTION_RECORD * _ExceptionRecord, void * EstablisherFrame, // 这里指向自己覆盖的异常连prve成员的起始地址 struct _CONTEXT * _ContextRecord, void * _DispatcherContext);
2) 可以考虑通过构建一个ret,返回至_EstablisherFrame所指向的地址执行; 3) 通过pop#pop在栈中将“_except_handler返回地址”与“_ExceptionRecord”弹出,是的ret能够将_EstablisherFrame当作返回地址使用; 4) ...
BypassDEP(数据执行保护)
概述DEP原理DEP - 数据执行保护的缩写,Data Execution Prevention。
DEP 的主要作用是阻止数据页(如默认的堆页、各种堆栈页以及内存池页)执行代码。微软从Windows XP SP2开始提供这种技术支持,根据实现的机制不同可分为:软件DEP(Software DEP)和硬件DEP(Hardware-enforced DEP)。
绕过DEP原理所以以下绕过DEP的原理就是让栈空间的shellcode能够执行
目标程序1234567891011121314151617181920212223242526272829303132333435#include <Windows.h>#include <stdio.h>#define PASSWORD "15PB"int VerifyPassword(char* pszPassword, int nSize){ char szBuffer[20] = { 0 }; memcpy(szBuffer, pszPassword, ...
病毒分析————熊猫烧香
概述“熊猫烧香”,是一款拥有自动传播、自动感染硬盘能力和强大的破坏能力的病毒,它不但能感染系统中exe,com,pif,src,html,asp等文件,它还能终止大量的反病毒软件进程并且会删除扩展名为gho的文件(该类文件是一系统备份工具“GHOST”的备份文件,删除后会使用户的系统备份文件丢失。被感染的用户系统中所有.exe可执行文件全部被改成熊猫举着三根香的模样。
运行被感染的程序
提取样本使用PCHunter32查看进程
右键-定位到进程文件
123456文件: C:\Windows\System32\drivers\spo0lsv.exe大小: 30001 bytes修改时间: 2018年7月14日, 8:40:21MD5: 512301C535C88255C9A252FDF70B7A03SHA1: CA3A1070CFF311C0BA40AB60A8FE3266CFEFE870CRC32: E334747C
把定位的病毒样本提取出来
病毒样本提取(spo0lsv.exe)出来后,放到虚拟机中做进一步分析
手工查杀结束进程(回到PCHunter32界面 ...
Windows脱壳————基础
知识点回顾1、PE文件的Magic code(魔数、幻数)是什么?
MZ头、PE头
2、PE文件中文件头的信息有哪些?
运行平台、时间戳、PE文件属性、区段数量、扩展头的大小
3、PE文件中扩展头的信息有哪些?
EP的RVA、ImageBase(400000)、代码段起始地址、数据段起始地址 数据目录表、数据目录表项数量、文件对齐、内存对齐、映像总大小
4、 PE文件中区段信息有哪些?
区段名称、虚拟地址、虚拟大小、文件偏移、文件大小、区段属性(C0000020、60000020)
5、PE文件中数据目录表有哪些表?
导出表、导入表、异常表、tls表、资源表、IAT、重定位表
6、一个进程,三环下有哪些数据结构?
进程环境块(PEB)、线程环境块(TEB)、tls结构
7、导入表结构体字段有几个,分别是什么?
5个字段
第一个是OrginalFirstThunk,里面是rva,指向的INT,
第二个是时间戳,
第三个是转发机 制用到的ForWarderChain,
第四个是n ...
逆向开发————基础
基础概论起源逆向工程的概念早在计算机或者说现代技术发现之前就已经存在了,这个概念可以追溯
到工业革命时期,它首先应用于工业设计。
1980年始欧美国家许多学校及工业界开始注意逆向工程这块领域。1990年初期包括台
湾在内,各国学术界团队大量投入逆向工程的研究并发表成果。
1990年,在 IEEE Software杂志上发表了一篇有关逆向工程和设计恢复概念分类学的文章。其后,研究逆向技术、软件可视化、程序理解、数据逆向工程、软件分析以及相关工
具和方法的研究人员越来越多。
现在它已经成为安全专题会议的重要主题。
定义逆向工程是“通过分析目标系统以识别系统的组件以及这些组件之间的相互关系并创建该系统另一种形式的表示或更高级的抽象的过程”(EEE1990)
通俗点说,逆向工程是了解软件“所作所为”的一套最重要的技术和工具。它需要将技能以及对软件开发和计算机的全面理解结合起来。与其他值得做的事情一样,强烈的好奇心和学习的愿望是唯一真正需要的前提条件。
目的1.数据与逻辑逆向分析已有程序,力图与源代码相比,在更高抽象层次上建立程序的表示过程一即通过逆向工程恢复程序的原设计,它是软件设计的逆过程。 ...
反调试&反反调试
概览反调试属于高级逆向技术范畴,并且涉及面异常广泛,几乎任何技术在经过精心构造后都可以变成反调试技术
反调试的核心思想就是阻拦逆向工作者分析自己的代码,如果不能从技术上彻底阻拦住分析者,也会想办法在精神层面击垮分析者
因此对于初学者,最有效的办法是使用其不了解的技术做反调试,进而拦住他。开发这种反调试的技巧的核心思想就是找调试状态与正常状态的不同点,并加以利用
而对于逆向分析的老手,则只能消耗其意志,增加其逆向分析的复杂性入手,开发这种反调试技巧的核心思想就是找到完成一件事的多种方法,然后随机堆叠使用,进而增加分析成本
静态反调试特点:一般在调试开始时阻拦调试者,调试者只需找到原因后可一次性突破
PEB
BeginDebug:调试标记位
Ldr:内存状态
Heap(Flags,Force Flags):堆状态
NtGlobalFlag:内核全局标记
TEB
StaticUnicodeString:静态缓冲区
使用原始API
NtQueryInformationProcess()
ProcessDebugPort(0x07):获取调试端口
ProcessDebugObjectHa ...
调试与异常
Windows异常处理概述异常机制,就是为了让计算机能够更好的处理程序行期间产生的错误,从编程的角度来看,能够将错误的处理与程序的逻辑分隔开。使得我们可以集中精力开发关键功能,而把
程序可能出现的异常统一管理。
windows提供了异常处理的机制,使得你有机会挽救自己即将崩溃的程序,大体上来说
它提供了以下处理异常的机制:
SEH-结构化异常处理
VEH-向量化异常处理
VCH-向量化异常处理
异常&中断中断:外部硬件产生的,改变CPU执行流程的机制
异常:CPU内部产生的,改变CPU执行流程的机制
都是通过IDT统一管理
异常分类错误:可以修复,EIP指向当前错误指令的位置
陷阱:可以修复,EIP指向错误指令下一条指令的位置
终止:不可修复
结构化异常处理SEH Structed Exception Handler(结构化异常处理)称SEH,是微软提供的一种处理异常
的机制。
在VC++中,通过提供四个微软关键字使得程序员能够良好的使用这一机制,分别是: try, finally, except, _leave接下来,我们简要的介绍一下它的用法。
try与 finally首 ...
逆向开发————010Editor注册机
注:此文章仅供学习使用,造成的一切后果与作者无关!!!
样本概况
程序信息它是需要注册的一个状态
一般这种情况都会有两种思路
1, 暴力破解(脚本小子)
2, 序列号解密(需要屏蔽网络验证)
分析环境系统:Win 7 32为专业版
使用工具:IDA,OD,(PE/010Editor),VS2019
分析过程暴力破解提取关键字符串一般在没有序列号的情况下随机输入是这样的
这个时候复制它的报错信息
12345678---------------------------010 Editor---------------------------Invalid name or password. Please enter your name and password exactly as given when you purchased 010 Editor (make sure no quotes are included).---------------------------&OK ---------------------------
使用OD打开 ...
Python————基础
数值类型
类型
关键字
数据
整型
int
整数,无限
浮点型
float
小数
复数
complex
复数由实数部分和虚数部分构成
关键字
算术
引入
异常
控制
操作与状态
返回退出
定义
and
import
except
while
del
return
lambda
or
as
try
if
assert
yield
class
in
from
finally
else
True
continue
global
is
raise
elif
False
pass
def
not
with
for
None
break
nonlacal
基础操作与使用输入12345678910# 通过 input 可以直接完成一个交互式的输入value = input('请输入一个整数: ')# 输入的任何数据最终都会是一个字符串print(value, type(value))# 通过强制类型转换或 eval 函数可以转换类型value = int(input('请输入第二个数: '))print( ...
安全卫士————笔记
基础功能TAB控件的封装与使用123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566//封装的Tab控件函数void CMyTabDlg::InitTab(int nCount, ...){ va_list vl; va_start(vl, nCount); for (int i = 0; i < nCount; i++) { //1 获取这一个选项,需要的数据 wchar_t* szTabItemName = va_arg(vl, wchar_t*); CDialogEx* pDlg = va_arg(vl, CDialogEx*); DWORD dwId = va_arg(vl, DWORD); //2 创建选项,创建子窗口 InsertItem(i, szTabItemName); pDlg->Create(dwId, this); //3 ...