大杂烩:
1、C语言里面的编译开关和优化会对代码有影响有时会发现C语言代码和实际汇编不一样。是因为VC6编译出来的比较原味,高版本优化后会做预运算。 VC中Debug 和 Release 编译方式的本质区别: Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。 2、循环的实现依赖于各种跳转,分长跳和短跳。长跳依赖于地址和寄存器,短跳依赖于偏移。 3、社工情报收集与分析基础的实战技能: (1)进入QQ群,拍照群文件,弄清楚每个群文件的上传时间和上传人;并且一般在虚拟机下载:防止其中有后门,还可以做一个虚拟机镜像,以便破坏源文件后可以恢复 (2)查看群文件(图片、文档、视频):使用提取文件属性的工具 文档:有电脑作者和版本信息等 图片:位置信息、时间信息等(kali里面有一个照片取证工具) 视频:位置信息、拍摄者信息、设备信息等 最后建档把这些记录下来。 注意要点:什么人在什么时间做了什么事 (3)根据时间线看完文件后,再看群里的聊天记录 Shellcode执行免杀四种常见关键技术: 多态、变形、再解释执行、刷白名单 1)多态:shellcode多态指不同的代码段执行相同的功能(可以规避行为特征序列的查杀),病毒多态是指功能多态。 Shellcode被动态查杀的原因是调用了固定的API序列,那么对抗查杀就是要破坏API序列的顺序关系。 行为的体现在于调用函数的组合。 2)变形:利用各种编码进行混淆。通常容易被动态查杀,却可以过静态查杀。 3)再解释执行:代表技术有虚拟机技术执行、中间语言字节码执行 虚拟机技术执行:什么意思,打个比方,自己定义一个房间,然后定义一种语言;在这个房间内程序用自己的语言进行交流。 中间语言字节码执行:比如用python,go,java,ruby,lua,vbs,c#加载字节码执行;这个时候相当于用一种中间IL语言语法器去执行我们的shellcode,从而绕过各种静态和动态分析;仔细研究会发现,加载过程大同小异,先开辟空间,加载相关系统函数,然后把shellcode执行;这种用脚本语言和中间语言包裹的方式就是再解释执行,执行器实际上是各种语言的虚拟机而已。 中间IL语言语法器是什么? 比如c#实际上编译后并非是机器码形式的本地化代码,而是翻译成中间语言:IL,由c#解释器负责解释这个编译后的伪代码。 不管什么语言,一定会有一种加载字节码的方法,那么进一步,不管什么软件,只要他可以加载字节码执行,一定可以利用。 任何时候你在.NET中编译你的代码,不管你使用什么语言。它都会被转换成一种中间语言IL(Intermediate Language ) 注意:请注意IL和IL汇编语言是两个不同的概念,当我们说到IL时,是指.NET编译器产生的二进制代码,而IL汇编语言不是二进制格式的。 4)刷白名单: 白名单执行方式就是dll劫持,这里又分三种: 第一种劫持法,比如一个exe调用了a.dll这个动态链接库,那么如果我们有a.dll的源代码,我们把shellcode加进去到某一个加载项里面。 第二种劫持法,如果我们没有a.dll的源代码,我们把自己的shellcode编译在b.dll,然后用loadpe之类的工具编辑a.dll注入对b.dll的调用。第三种劫持法,很暴力,直接用我们的a.dll覆盖原来的a.dll,这种方法只适用于a.dll是功能次要的函数比如update功能。 第二种方法比较普遍,利用这个,我们可以劫持正常程序而不需要自己开进程,杀毒对正常程序没用。
|