VBA宏密码破解
VBA宏密码破解
在OLE文档中使用Alt+F11可以打开查看宏代码。而部分VBA宏使用了密码保护,如下图:
在不知道密码的情况下则无法查看到宏代码,此时使用文件查看工具(例如WinHex、010Editor等)打开该office文档,搜索文字CMG,找到CMG后就将其后面的”=“修改为”.”(注意:选择后直接替换,不要删除后再插入)。然后再分别搜索DPB与GC,同样把”=“修改为”.”。之后保存。
再次打开OLE文档(按确认跳过所有提示信息后)。按下Alt+F11打开查看宏。成功。
汇编中的jmp转移指令:jmp short、jmp near ptr、jmp far ptr
汇编中的jmp转移指令:jmp short、jmp near ptr、jmp far ptr
从8086CPU的定义上来讲,只要是可以修改IP(指令指针寄存器),或同时修改CS(代码段寄存器)和IP(指令指针寄存器)的指令统称为转移指令。也就是说,转移指令是用来控制CPU指向内存中某处代码的指令。那么通过转移区间的不同进行分类则有以下情况:段内转移:只修改IP的值。也就是说,CS的值不变化。段间转移:同时修改CS和IP的值。如果再将上述情况通过修改范围再进行细分,那么段内转移又可分为以下情况:短转移:IP的修改范围为-128字节~127字节(2的8次方,8位)近转移:IP的修改范围为-32768字节~32767字节(2的16次方,因为在8086中IP寄存器为16位)
jmp short 标号(转到标号处执行命令)这种格式的jmp指令实现的是上述的段内短转移,修改范围为-128~127;该条指令执行后,CS:IP指向标号处的指令。编写代码如下图:
可以看到在对汇编程序进行编译后,jmp short s转换成了jmp [标号所在位置IP的值],在这里为什么我们看到JMP 000 ...
二进制漏洞——栈溢出复现
二进制漏洞——栈溢出复现
栈布局如下:
可以看出,要构造栈溢出需要将函数内部成员长度突破EBP并覆盖到返回地址处即可得到执行。构造代码如下:
12345678910111213141516171819202122#include <stdio.h>#include <windows.h>__declspec(safebuffers) void OverFlow(char *);__declspec(dllexport) BOOL MyWinExec(char *,UINT);int main(int argc,char *argv[]){ char Buf[]="\x63\x61\x6C\x63\x00\x00\x00\x00\x90\x90\x90\x90" "\x5B\x10\x40\x00\x04\xFF\x12\x00\x05\x00\x00\x00"; char test[8]; OverFlow(Buf);}__declspec(safebuffers) void OverFlow(char *Buf){ ...
代码实现全局消息钩子SetWindowsHookExA监视按键记录
代码实现全局消息钩子SetWindowsHookExA监视按键记录
简单的使用Windows提供的Hook API SetWindowsHookExA,实现弹窗提示每次按下的按键步骤:
1.编写一个Dll调用SetWindowsHookExA,实现弹窗2.编写一个exe调用LoadLibrary加载生成的Dll
dll代码如下
12345678910111213141516171819202122232425262728293031323334#include<stdio.h>#include<windows.h>HHOOK shook;LRESULT WINAPI keyboard(int nCode,WPARAM wParam,LPARAM lParam);BOOL APIENTRY DllMain( HINSTANCE hModule,DWORD ul_reason_for_call,LPVOID lpReserved ){ switch(ul_reason_for_call) { case DLL_PROCESS_ ...
代码实现增加PE文件节区+修改IID结构(静态干预输入表),成功加载用户DLL
代码实现增加PE文件节区+修改IID结构(静态干预输入表),成功加载用户DLL
运行结果图,在一个hello world程序运行之前,代码实现让其加载我们的一个DLL文件。
修改前后文件导入表结构对比修改前后文件节区对比
修改PE文件干预输入表的代码如下:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144#include<stdio.h>#include<windows. ...
注册表常用项
注册表常用项
注册表被禁用Windows+R键 输入gpeidt.msc–>用户配置–>管理模板–>系统–>阻止访问注册表编辑工具–>右键编辑–>已启用<–>未配置(切换一次到未配置,保存)
禁用显示隐藏文件HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ Advanced\Folder\Hidden\SHOWALLCheckedValue (DWORD类型) 0 禁用 1启动
禁用任务管理器HKEY_CURRENT_USER\Software\Microsoft\ Windows\CurrentVersion\Policies\SystemDisableTaskMgr (DWORD类型) 1禁用 0或删除该值启动
禁用U盘HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTORstart (DWORD类型) 4禁用 3启动
禁用时间线(重启后生效)HKEY_LO ...
远线程注入代码实现dll注入到进程
远线程注入代码实现dll注入到进程
原理: OpenProcess获得进程句柄。 VirtualAllocEx申请内存。 WriteProcessMemory将dll写入。 CreateRemoteThread执行LoadLibrary加载dll
效果图:
进程监视器查看计算器进程中存在所注入的dll模块,并且dllmain弹窗功能实现。
注入代码:12345678910111213141516171819202122#include<stdio.h>#include<windows.h>#define NAME L"计算器"//被注入的进程标题#define PATH L"C:\\Users\\admin\\Desktop\\dll.dll"//要注入的dll绝对路径void main(){ DWORD pid; HWND hwnd = FindWindow(NULL,NAME);//通过窗口标题查找进程 if(!hwnd) return; GetWindowThreadProcessId(hwnd,&pid) ...
汇编语言中的标志位:CF、PF、AF、ZF、SF、TF、IF、DF、OF
汇编语言中的标志位:CF、PF、AF、ZF、SF、TF、IF、DF、OF
CF:进位标志位。在无符号运算时,记录了运算结果的最高有效位向更高位的进位值或从更高位借位,产生进位或借位时CF=1,否则CF=0;
PF:奇偶标志位。相关指令执行后结果所有bit中1的个数为偶数,那么PF=1,1的个数为奇数则PF=0;
AF:辅助进位标志位。运算过程中看最后四位,不论长度为多少。最后四位向前有进位或者借位,AF=1,否则AF=0;
ZF:零标志位。相关指令执行后结果为0那么ZF=1,结果不为0则ZF=0;
SF:符号标志位。相关指令执行后结果为负那么SF=1,结果非负数则SF=0;
TF:调试标志位。当TF=1时,处理器每次只执行一条指令,即单步执行;
IF:中断允许标志位。它用来控制8086是否允许接收外部中断请求。若IF=1,8086能响应外部中断,反之则屏蔽外部中断;
DF:方向标志位。在串处理指令中,每次操作后,如果DF=0,si、di递增,如果DF=1,si、di递减;注意此处DF的值是由程序员进行设定的 cld命令是将DF设置为0,std命令是将DF设置为1;
OF:溢出标志位。 ...
进程注入之创建傀儡进程
进程注入之创建傀儡进程
傀儡进程:创建一个进程,然后将其虚拟地址里的内容掏空,注入想要注入的进程,以达到掩人耳目的效果步骤:
1.以挂起的方式创建一个进程2.卸载该进程的内存映射,即掏空该进程虚拟内存空间中的内容3.获取该进程的CONTEXT上下文结构4.将要注入的程序读入到内存中5.在傀儡进程中申请足够的内存空间6.手动将要注入的程序写入傀儡进程中所申请的内存空间6.设置CONTEXT上下文的Eax为程序入口点,Ebx+8为程序基址7.恢复线程
效果图如下
代码如下:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697#include<windows.h>#include<stdio.h>char path[MAX_PATH]="c:\ ...
TEB,PEB,LDR结构
TEB,PEB,LDR结构
首先查看TEB结构
TEB结构中第一个成员为TIB结构,从偏移量可以看出从0x00到0x1C之间的内容均为TIB结构的成员,为了方便理解,我将TIB结构在TEB中展开来查看
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108ntdll!_TEB +0x000 NtTib : _NT_TIB //TIB结构 [+0x000] ExceptionList : 0x1df360 [Type: _EXCEPTION_REGISTRATION_RECORD *]//指向SEH链 [+0x004] StackBase : 0x1e0 ...