《加密与解密》笔记
未读notes about chapter12DLL注入通过干预输入表处理过程加载目标DLL输入表相关
输入函数调用
PE文件内部有一组数据结构,对应于被输入的DLL,每一个这样的结构都给出了输入的DLL的名称并指向一组函数指针。这组函数指针为IAT(输入地址表),每一个被引入的API在IAT里都有保留的位置,API被Windows加载器在该位置写入输入函数的地址。
一旦模块被载入,IAT中将包含要调用的输入函数的地址。
默认情况下,输入API的调用采用下列这种低效的形式:
1234 Call 00401164 ............:00401164 Jmp dword ptr [00402010]
可以在编写程序时使用一个前缀”__declspec(dllimport)”来告诉编译器这个函数来自另外一个DLL,这样上述指令就会变成:
1Call dword ptr [00402010]
示例如下:
1__declpec(dllimport) void Foo(void);
输入表的结构
PE文件头的可选映像头中,数据目录表的第二个成员指向输入表。输入表以一个 ...
《加密与解密》笔记
未读notes about chapter 66.1 单项散列算法(hash)不可逆运算。
MD5原理
填充
填充消息使得其与448模512同余,即使本身已经满足长度也需要填充,填充方法:首先附加1个1,然后使用0填充。至少填充一位,至多填充512位(即本身已经满足的)。
添加长度
在上一步的结果后附加63位的消息长度,如果填充前消息长度大于2^64,则只使用其低64位。添加填充位和消息长度后,最终消息正好是512的倍数。
初始化变量
使用4个变量来计算消息摘要。
A=0x1234567
B=89abcdefh
C=0xhfedcba98
D=0x7654321
数据处理
输出
将ABCD的级联作为MD5的输出结果。
样例输入的name与”www.pediy.com”拼接后md5的值。
校验函数:
123.text:0040125C push eax ; lpString2.text:0040125D push ecx ; lpString1. ...
《加密与解密》笔记
未读notes from chapter 4x86-64函数调用约定VS编译出的64程序只有寄存器快速调用约定:前4个参数使用寄存器传递,超过的参数放在栈中,入栈顺序从右至左,由函数平衡堆栈。
参数1:RCX;
参数2:RDX;
参数3:R8;
参数4:R9;
任何大于8字节或者不是1字节、2字节、4字节、8字节的参数必须由引用来传递(地址传递)。所有浮点参数的传递都是使用XMM寄存器完成的,它们在XMM0、XMM1、XMM2和XMM3中传递。
参数1:XMM0;
参数2:XMM1;
参数3:XMM2;
参数4:XMM3;
如果参数既有浮点类型,又有整数类型,例如”void fun(float, int, float,int)”, 那么参数传递顺序为笫1个参数(XMM0)、笫2个参数(RDX)、 笫3个参数(XMM2)、笫4个参数(R9)。
如果参数是结构体且大于8字节,在传递参数时,会先把结构内容复制到栈空间中,再把结构体地址当成函数的参数来传递(引用传递)。
类的函数中,由于rcx寄存器保存了this指针,所以函数的参数调用从rdx开始使用。
虚函数相关判断一个函数为构造 ...
《加密与解密》笔记
未读note about chapter 11.1.2逆向工程定义:
软件使用限制的去除或者软件功能的添加。
软件源代码的再获得。
硬件的复制和模拟。
动态分析注意点:
对软件进行粗跟踪
对关键部分进行细跟踪
1.3.2 SysWOW64与System3264位系统如何兼容32位程序的:
System32存放64位映像文件,SysWOW63存放32位系统文件。
32位程序加载时,WOW64建立32位ntdll.dll所要求的启动环境,将CPU模式切换至32位,并开始执行32位加载器,就如同该进程运行在原生的32位系统上一样。
1.3.4 虚拟内存相关虚拟内存的过程:
一个程序启动,系统创建一个进程,并给该进程分配2GB虚拟地址;
虚拟内存管理器讲应用程序的指令映射到那个程序的虚拟地址中某个位置,并给当前需要的代码读入物理内存;
如果使用了DLL,DLL也会被映射到虚拟地址空间中,在需要的时候才会被读入物理内存;
其他项目的空间是从物理内存中分配的,并被映射到虚拟地址空间中;
应用程序通过使用其虚拟地址空间中的地址开始执行。然后,虚拟内存管理器把每次内存访问映射到物理空间;
n ...
efuzz论文阅读(能量调度部分)引子:王志等分析僵尸网络控制命令时,提出了BBL覆盖率的概念,用来描述一个BBL被执行路径覆盖的频繁程度。
BBL覆盖率————描述一个BBL被执行路径覆盖的频繁程度论文《基于覆盖率分析的僵尸网络控制命令发掘方法》部分内容阅读笔记。
基本块的覆盖率与覆盖次数
定义:基本块被执行轨迹的覆盖
如果在程序执行的过程中,某些基本块被执行,则称这些被执行的基本块被执行轨迹覆盖。
基本块被执行轨迹覆盖的信息内容
基本块被执行轨迹覆盖的信息包括两部分:覆盖率和覆盖次数。
覆盖率Pbb
Pbb描述的是一个基本块被执行轨迹覆盖的频繁程度,定义如下:
Pbb = Ncover/Nall
Nall是当前已捕获的执行轨迹总数,Ncover是覆盖该基本块的执行轨迹数量。
覆盖次数VBB
覆盖次数VBB描述的是基本块在不同执行轨迹中被执行的频繁程度,是一个向量:
VBB = (VT1</sub>,VT2</sub>,……,VTn</sub>)
VT1</sub>,VT2</sub>,……,VTn</ ...
Fuzzing random programs without execve()原作者:lcamtuf
原文:https://lcamtuf.blogspot.com/2014/10/fuzzing-binaries-without-execve.html
对数据分析库进行fuzz的最常用方法就是找到一个能运行可疑函数的简单的二进制文件,并且让其保持一遍又一遍的运行————当然,每次运行过程中输入的随机变量都略有不同。在这样一种设置下,对库中明显的内存污染漏洞的检测就会很简单,像在子进程中使用waitpid()并核实其是否因为SIGSEGV,SIGABRT或其它相似的信号量而消亡。
安全研究员喜欢上述方案的原因有两个。首先,它不需要对文档深入研究,了解底层库提供的API,就能够以一个更加直观的方式编写自定义的代码对解析器进行压力测试。其次,它使得fuzz流程变得可重复并且具有鲁棒性:程序运行在一个分离的进程中并以每个输入文件重新开始,因此不必担心库中的随机内存损坏错误会破坏模糊测试器本身的状态,或是对随后测试工具的运行产生奇怪的副作用。
不幸的是,上述方案也会产生一个问题:对特别对简 ...
yara引擎调研规则通用性问题使用CS4.0生成如下的payload,其中powershell脚本10个,pe后门12个,dll文件2个,共计24个样本:
且这些样本的md5值均不一样,也就是所采用原始的拉黑md5方法是不可行的:
使用开源的CS yara规则(GitHub - chronicle/GCTI)对其进行扫描,可以看到所有的样本均检出了,且有一个样本被重复检出两次(beacon_server64.exe),最终的检出率为:100%=24/24:
静态的文本类特征在这种非混淆对抗的情况下通用性还是很高的,且是可以摆脱拉黑md5这种策略的局限性的。
如何内嵌到相应的产品引擎中基于yara官方的文档,可以有两种内嵌的方法:
直接通过命令行调用编译好的yara引擎;
使用yara C api来调用yara相关的api来进行病毒扫描;
这两种方法在调用上是一样的,因为官方给的编译的yara引擎也是基于yara C api实现的:
这里使用的样本案例和yara样例:
test.txt内容:
1111
test.yar内容:
12345678rule test{ ...
Merleau-Ponty AND The Crisis In Marxism(Foreword)Few people in English-speaking countries notice Merleau-Ponty’s political philosophy, which is especially surprising as many works have been devoted to his phenomenology and his contributions to theories of perception and language.
The writer limited himself to the central problem that Merleau-Ponty tried to resolve, the realization of the potentially universal class, the proletariat. The writer will show that the problem origins from Hegel’s phil ...
导论——概述存在意义的问题存在问题的必要性、结构和优先地位突出地重提存在问题的必要性我们的时代对“形而上学”(ontologia:研究存在的学问)问题遗忘已久:当它作为实际探索的专门课题就无人问津了。
根据希腊人对存在的最初阐释,使得对存在意义的追问变得多余了(这里应该指的是亚里士多德对实体的解释),存在变成了“大家都懂,懂得都懂”的东西。
以存在的范畴的意义(亚里士多德的范畴是存在不可定义的源泉)的充分性和适当性来重新澄清这些对存在的成见,分为了三个方面:
“存在”是“最普遍的”概念
人通过存在者去把握“存在”,这是有问题的。存在是超乎一切族类上的普遍性,用属加种差来界定存在的意义就是不对的。存在是最清楚的概念,不是说不需要讨论其概念,而是因为存在的意义超越范畴定义,具有类比的统一性。存在概念是最晦暗的概念。
“存在”这个概念是不可定义的
既然思维中定义存在物的方式都是范畴,而存在不在范畴,那么存在当然不能由属加种差的方式去定义——这里的结论就是存在不是类似存在物的东西。
“存在”是自明的概念
一切语言的描述中都有“存在”(being:是),这种说法无需深究,懂得都懂。 ...
研读文献————一种基于PE文件的信息隐藏方法的研究与实现(信息隐藏相关)研究原因目前在信息隐藏方面研究最深入成果最丰富的是基于图像的信息隐藏技术而对文本图形动画视频等其他多媒体中的信息隐藏技术研究得还比较少。PE文件是当前最常见的文件之一,使用范围非常广泛因而研究基于Windows下PE文件的信息隐藏有很大的实际意义。
PE文件结构解析在一个操作系统中,可执行代码在装入内存前是以文件的方式存储在磁盘上,而在装入内存时需要被程序装载器识别才能正常执行因而需要可执行文件满足特定的格式。在Windows NT6.X系列操作系统中,纯32位操作系统使用PE格式(Portable Executable File Format)。
在Windows系统中EXE和DLL都是PE文件两者惟一的区别是用一个字段来标识。另外在64位的Windows中. PE文件中的数据字段只是简单的扩展到64位与32位系统相比没有新的结构。论文主要讨论32位PE可执行文件。
PE文件格式把可执行文件分成若干个数据节(section),不同的资源被存放在不同的节中。一个典型的PE 文件中包含的节如下:
.text 由 ...