dword

编程实现感染PE文件加载DLL

不打扰是莪最后的温柔 提交于 2019-12-07 01:00:46
PE文件是Windows系统可执行文件采用的普遍格式,像我们平时接触的EXE、DLL、OCX,甚至SYS文件都是属于PE文件的范畴。很多Win32病毒都是基于感染PE文件来进行传播的。今天我们就来尝试一下通过感染PE文件使其加载指定的DLL。       PE文件功能   众所周知,在Windows程序中需要调用各种各样的系统API,这些API被微软封装在不同的DLL文件中,这些DLL会在进程启动时(或者需要时)加载进进程的地址空间。我们调用一个API都是基于如下的汇编代码: 00411A3E mov esi,esp 00411A40 push 100h 00411A45 lea eax,[strDllDir] 00411A4B push eax 00411A4C call dword ptr [__imp__GetWindowsDirectoryA @8 (42B180h)] 这些汇编代码是针对如下代码的反汇编结果: char strDllDir[256]; GetWindowsDirectory(strDllDir,256);      可见,调用一个系统API是在参数压栈后调用call命令执行系统调用GetWindowsDirectory()的。上文说过,系统调用是通过DLL引入进程的,但是不同进程引入的DLL地址并不相同,程序是如何知道这个Call应该调用什么地址呢

AVI格式分析

北战南征 提交于 2019-12-07 01:00:18
AVI文件采用的是RIFF文件结构方式,RIFF(Resource Interchange File Format,资源互换文件格式)是微软公司定义的一种用于管理windows环境中多媒体数据的文件格式,波形音频wave,MIDI和数字视频AVI 都采用这种格式存储。构造RIFF文件的基本单元叫做数据块(Chunk),每个数据块包含3个部分,   1、4字节的数据块标记(或者叫做数据块的ID)   2、数据块的大小   3、数据   整个RIFF文件可以看成一个数据块,其数据块ID为RIFF,称为RIFF块。一个RIFF文件中只允许存在一个RIFF块。 RIFF块中包含一系列的子块,其中有一种字块的ID为"LIST",称为LIST,LIST块中可以再包含一系列的子块,但除了LIST块外的其他所有 的子块都不能再包含子块。   RIFF和LIST块分别比普通的数据块多一个被称为形式类型(Form Type)和列表类型(List Type)的数据域,其组成如下:   1、4字节的数据块标记(Chunk ID)   2、数据块的大小   3、4字节的形式类型或者列表类型   4、数据   下面我们看看AVI文件的结构。AVI文件是目前使用的最复杂的RIFF文件,它能同时存储同步表现的音频视频数据。AVI的RIFF块的形式类型是AVI,它包含3个子块,如下所述:   1、信息块,一个ID为

Windows API一日一练(59)CreateFileMapping和MapViewOfFile函数

≡放荡痞女 提交于 2019-12-06 17:38:01
在开发软件过程里,也经常碰到进程间共享数据的需求。比如 A 进程创建计算数据, B 进程进行显示数据的图形。这样的开发方式可以把一个大程序分开成独立的小程序,提高软件的成功率,也可以更加适合团队一起开发,加快软件的开发速度。下面就来使用文件映射的方式进行共享数据。先要使用函数 CreateFileMapping 来创建一个想共享的文件数据句柄,然后使用 MapViewOfFile 来获取共享的内存地址,然后使用 OpenFileMapping 函数在另一个进程里打开共享文件的名称,这样就可以实现不同的进程共享数据。 函数 CreateFileMapping 、 MapViewOfFile 声明如下: WINBASEAPI __out HANDLE WINAPI CreateFileMappingA( __in HANDLE hFile, __in_opt LPSECURITY_ATTRIBUTES lpFileMappingAttributes, __in DWORD flProtect, __in DWORD dwMaximumSizeHigh, __in DWORD dwMaximumSizeLow, __in_opt LPCSTR lpName ); WINBASEAPI __out HANDLE WINAPI CreateFileMappingW( __in HANDLE

Uroburos Rootkit样本简单分析

家住魔仙堡 提交于 2019-12-06 16:50:34
1.首先拿到样本,载入ida发现有一个类似于压缩壳解码的函数,跳过后dump出pe,修复对齐和section header。 2.该样本会检查是否运行在wow64环境,检测名为Ultra3的服务和一系列事件来确保是第一次启动。 3.随后该样本会内存加载资源段的一个pe文件尝试利用CVE-2009-1123执行特权代码 4.如果该漏洞利用成功将直接内存加载驱动文件,然后退出该样本。否则将会尝试利用CVE-2010-0232进行权限提升,该样本通过尝试改写注册表currentversion字段来判断是否权限提升成功。如果提权失败则返回错误代码退出样本。如果该样本运行在vista以上版本并且是64位系统,则会尝试通过virtualbox的驱动漏洞关闭dse。然后打开加载驱动权限,手动填写注册表的服务,通过ZwLoadDriver加载驱动。 5.该驱动会解密自身的代码,然后重新改写pe的入口,我们可以在解码完后用windbg dump出来然后修复。 5.修复完后该样本就是安全客那篇文章最后dump出来的样本( https://www.anquanke.com/post/id/189549) 6.该样本在驱动入口首先创建了一个全局的结构体储存一些信息,随后创建之前在应用层检测的全局事件。 struct { int unknown; //0xffffffff int* DriverStart;

windows 枚举所有进程 WtsApi32 windows终端服务

放肆的年华 提交于 2019-12-06 15:23:10
1 #include <WtsApi32.h> 2 #pragma comment(lib, "WtsApi32.lib") 3 void fun17(int argc, char *argv[]){ 4 ////计算机名 5 //TCHAR szServerName[32] = TEXT("DESKTOP-45J0D6P"); 6 ////把这台计算机当服务打开 7 //HANDLE hWtsServer = WTSOpenServer(szServerName); 8 //if (hWtsServer == INVALID_HANDLE_VALUE) { 9 // printf("WTSOpenServer 失败\n"); 10 // return; 11 //} 12 //终端服务进程信息 13 PWTS_PROCESS_INFO pProcessInfo; 14 //进程个数 15 DWORD dwCount; 16 //if (!WTSEnumerateProcesses(hWtsServer, 0, 1, &pProcessInfo, &dwCount)) { 17 if (!WTSEnumerateProcesses(WTS_CURRENT_SERVER_HANDLE, 0, 1, &pProcessInfo, &dwCount)) { 18 printf(

01.Windows2008R2系统禁启SMBv1服务命令

六月ゝ 毕业季﹏ 提交于 2019-12-06 13:52:39
微软漏洞安全问题: 检测:默认配置 = 已启用(未创建注册表项),所以不会返回 SMB1 值。 Get-Item HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters | ForEach-Object {Get-ItemProperty $_.pspath} 禁用: Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 0 –Force 启用: Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 1 –Force 来源: https://www.cnblogs.com/LuckyHaTech/p/11987562.html

链表

不羁的心 提交于 2019-12-06 11:40:49
1.关于链表 链表的特点: 1】数据分散存储 2】查询性能没有Vector好 3】新增与删除的性能好于Vector 链表的种类: 单链表 ->由多个节点组成,每一个节点中保存数据和下一个节点的指针; 循环链表 ->最后一个节点中的指针指向头结点; 双向链表 ->每个节点多维护一个指针,两个指针分别指向前一个节点和后一个节点,可以从正反两个方向来查找元素; 2.实现单链表 头文件: #ifndef LINKEDLIST_H #define LINKEDLIST_H #define INDEX_IS_ERROR -2 // 错误的索引号 #define BUFFER_IS_EMPTY -3 // 缓冲区已空 #include "stdio.h" #include "windows.h" #include "stdlib.h" template <class T_ELE> class LinkedList { public: LinkedList(); ~LinkedList(); public: BOOL IsEmpty(); //判断链表是否为空 空返回1 非空返回0 void Clear(); //清空链表 DWORD GetElement(IN DWORD dwIndex,OUT T_ELE& Element); //根据索引获取元素 DWORD GetElementIndex

解密 char转换为json

浪子不回头ぞ 提交于 2019-12-06 09:53:31
1 typedef struct CRYPT_BLOCK { 2   DWORD dwSize; // Data的 3   DWORD dwKey; // 密钥 循环使用DWORD的每个字节来进行加密 详情见XorEncrypt 4   char chData[1]; // 加密后的数据 5 } CRYPT_BLOCK, *PCRYPT_BLOCK; 6 7 typedef boost::shared_ptr<Json::Value> JsonSharedPtr; 一个数异或另一个数两次后,该数保持不变。 即: c = a^b; c = c^b; c == a; 这一规律就是使用异或运算对数据及文件进行加密处理的基本原理。 1 bool XorEncrypt(const char* pKey, DWORD dwCbKey, const char* pIn, DWORD dwCbSize, char* pOut) 2 { 3   if (pIn == NULL || pOut == NULL || pKey == NULL) { 4     return false; 5   } 6 7   for (DWORD i = 0; i < dwCbSize; ++i) { 8     pOut[i] = pIn[i] ^ pKey[i % dwCbKey]; 9   } 10 11  

操作系统 - Windows操作系统 - WindowsXP - 安装|命令|使用 - 汇总

时光毁灭记忆、已成空白 提交于 2019-12-05 23:48:50
端口 开放445端口对外访问系统层面:regedit -》 搜索HKEY_LOCAL_MACHINE -》 依次打开System——CurrentControlSet——Services —》 选择NetBT——Parameters -》 如你的电脑已关闭445端口可以看到SMBDeviceEnabled这个项,那么其类型为REG_DWORD -》 右键点击项目修改,修改数值为1(如没有这个项目,那么在Parameters目录下添加一个DWORD键值名称:SMBDeviceEnabled,类型:REG_DWORD,数值:1)-》重新启动计算机验证: 防火墙层面:控制面板 -》 Windows安全中心 - 关闭防火墙(或配置端口出入栈规则) 来源: https://www.cnblogs.com/AtesetEnginner/p/11951134.html

程序员需要了解的硬核知识之汇编语言(一)

会有一股神秘感。 提交于 2019-12-05 19:27:07
之前的系列文章从 CPU 和内存方面简单介绍了一下汇编语言,但是还没有系统的了解一下汇编语言,汇编语言作为第二代计算机语言,会用一些容易理解和记忆的字母,单词来代替一个特定的指令,作为高级编程语言的基础,有必要系统的了解一下汇编语言,那么本篇文章希望大家跟我一起来了解一下汇编语言。 汇编语言和本地代码 我们在之前的文章中探讨过,计算机 CPU 只能运行本地代码(机器语言)程序,用 C 语言等高级语言编写的代码,需要经过编译器编译后,转换为本地代码才能够被 CPU 解释执行。 但是本地代码的可读性非常差,所以需要使用一种能够直接读懂的语言来替换本地代码,那就是在各本地代码中,附带上表示其功能的英文缩写,比如在加法运算的本地代码加上 add(addition) 的缩写、在比较运算符的本地代码中加上 cmp(compare) 的缩写等,这些通过缩写来表示具体本地代码指令的标志称为 助记符 ,使用助记符的语言称为 汇编语言 。这样,通过阅读汇编语言,也能够了解本地代码的含义了。 不过,即使是使用汇编语言编写的源代码,最终也必须要转换为本地代码才能够运行,负责做这项工作的程序称为 编译器 ,转换的这个过程称为 汇编 。在将源代码转换为本地代码这个功能方面,汇编器和编译器是同样的。 用汇编语言编写的源代码和本地代码是一一对应的。因而,本地代码也可以反过来转换成汇编语言编写的代码