1.not-a-virus:Adware.Win32.Agent.c
not-a-virus 标明不是恶意程序,Adware标明是广告
注:主要有两种,一种是恶意程序,一种不是恶意程序,骚扰程序
注:两种情况
2.c语言转换成汇编怎么写:
c:
func(a,b,c);
汇编:
push c
push b
push a
call func
3.dll动态劫持,白加黑
DLL劫持,即动态链接库DLL文件通常加载顺序为:1、可执行程序加载的目录,2、系统目录(即 %windir%\system32 ),3、16位系统目录(即 %windir%\system),4、Windows目录(即 %windir%),5、运行某文件的所在目录,6、PATH环境变量中列出的目录,所谓劫持就是利用此原理,分别于执行程序所在目录或运行文件所在目录加入自己伪装的同名DLL,导致系统或应用软件运行时加载病毒或木马,前者如早期的lpk.dll,后者如通过劫持或替换看图或播放软件,在打开图片或视频文件时由应用软件加载病毒DLL。
防止劫持的方法是通过在注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs下手动增加要调用的DLL首要查找目录,加入RE_SZ类型的"ntdll"="ntdll.dll"项,则系统载入"ntdll"时会直接从系统目录加载。由于win7在此注册表键下有较齐全的设置,相比xp而言更安全,更不用说win8,在微软的严格防堵下,安全性更高,所以除了升级杀毒软件,使用更高版本的操作系统也是很好的方法之一。
但显然目前还不能完全避免此“漏洞”(其实算不上漏洞,只能说是规则),特别是应用软件们的,通过DLL劫持来绕过安全软件主动防御的保护被称为“白加黑”,因为加载的主程序是正常的软件,主动防御可能会放过它,允许它启动,而恶意DLL则通过该软件的漏洞或替换正常的同名文件(对应用软件的文件保护似乎并不象对系统文件保护那样严密,而且并不是一直运行状态,被替换还是比较容易的), 甚至有的还会冒用合法软件的数字签字等方式,由正常程序加载,从而躲开安全软件的拦截。
木马还是会有木马的特性,如要下载其它木马或病毒、要连接外网的服务器进行远控以及在本机释放其它文件和加载自己的启动项等等,但如果仅仅主动防御可能还是会放过,毕竟是正常软件触发的,而如果所有的动作都提示,如HIPS,又可能造成普通用户烦不胜烦,就算编写规则策略也有点难度(可能误报率高,人工辨认量大)。所以此种情况下,首先应用软件要尽是使用新版本(操作系统也是),堵住漏洞,其次杀毒软件要及时更新,这时候特征码杀毒技术还是有用武之地的,如果能第一时间收集到新病毒木马或其变种的特征的话,也就是说,需要多种技术并用才能提高防范成功率。
有关DLL劫持,参考http://baike.baidu.com/view/3515992.htm
来源于http://www.stormcn.cn/post/1441.html
4.病毒分析
参考:https://blog.csdn.net/guanshanyue96/article/details/89005016 - 网络安全学习第3篇 - 使用快速分析技巧,分析样本包中的样本(使用软件total command)
5.汇编转换c
push x2
push x1
push x4
push x9
call func
func(x9,x1,x4,x9)
6.网络安全法规 - 宪法(没有规定网络安全法)
7.制定的详细安全法规 : 网络安全XX
8.请简述看这个文件开头,看它是否是一个程序,看它是否恶意程序,请写出判断语句
出现MZ PE不一定能判断它的黑白,所有的PE程序开头都会出现MZ PE,所以不能判断它的黑白
9.powershell - 启动cmd命令
(,hidden,//隐藏方式
,DownLoadFile(...exe) //下载程序
,".改名", //改名
)
10.jnz、jz,jmp等跳转
(1)什么时候跳转
(2)跳转哪边
(3)如果跳转衡成立,怎么修改 :jz(字符串比较做减法,一致是0)比较结果是0,跳转成功(地址为跳转的指定的地址),jnz n - not 和jz相反
jmp无条件跳转
注:
jz是零标志位置位(1--即为0)时跳转。
jnz与上面相反,是当零标志位置0(0--即不为0)时跳转。
通常是比较两个值是否相等或两个值相减时是否为0,若相等或相减为0转移,则用jz;否则用jnz转移。
大概说
call 返回值保存到eax
cmp 比较
注:https://www.cnblogs.com/qq78292959/archive/2012/07/20/2600865.html - EAX、ECX、EDX、EBX寄存器的作用
一般寄存器:AX、BX、CX、DX
AX:累积暂存器,BX:基底暂存器,CX:计数暂存器,DX:资料暂存器
索引暂存器:SI、DI
SI:来源索引暂存器,DI:目的索引暂存器
堆叠、基底暂存器:SP、BP
SP:堆叠指标暂存器,BP:基底指标暂存器
EAX、ECX、EDX、EBX:為ax,bx,cx,dx的延伸,各為32位元
ESI、EDI、ESP、EBP:為si,di,sp,bp的延伸,32位元
eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 汇编语言中CPU上的通用寄存器的名称,是32位的寄存器。如果用C语言来解释,可以把这些寄存器当作变量看待。
比方说:add eax,-2 ; //可以认为是给变量eax加上-2这样的一个值。
这些32位寄存器有多种用途,但每一个都有“专长”,有各自的特别之处。
EAX 是"累加器"(accumulator), 它是很多加法乘法指令的缺省寄存器。
EBX 是"基地址"(base)寄存器, 在内存寻址时存放基地址。
ECX 是计数器(counter), 是重复(REP)前缀指令和LOOP指令的内定计数器。
EDX 则总是被用来放整数除法产生的余数。
11.lstrcmpW - 比较字符串
https://blog.csdn.net/guanshanyue96/article/details/89001669 - 网络安全学习第1篇 - 简单使用ida工具和破解分析
上面这篇链接把这些函数都说的挺清楚了
12.看程序,提出xss攻击两种方法,再相应提出两种防御方法(可以不写代码,说就是了)
非存储型、dom型(有调用document)
(1)攻:大小写 - 防:正则表达式(这个可以防御缩小一些范围)
(2)攻:XX - 防:可以用正则表达式,只要出现script
补:判断是存储还是是非存储(反射)
注:
https://www.zhihu.com/question/21289758 - 存储型XSS与反射型XSS有什么区别?
存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie等。如:人人网又一大波蠕虫,位置在首页+登录就中招+通杀网页和人人桌面
反射型XSS,非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
如下面这个点击弹出自己的在该网站的cookie:
http://search.bbs.tom.com/bbs.jsp?q=%22%2F%3E%3Cscript%3Ealert%28document.cookie%29%3C/script%3E%20&cmd=1&sort=3&ty=1
放射型编写实例:
https://blog.csdn.net/guanshanyue96/article/details/90215428 - 网络安全学习第8篇 - xss攻击(java实现反射型xss攻击,发送链接诱骗点击,编写服务端获取客户端的cookie信息)
13.论述题:
(1)请对哪一章感内容,为什么,你对这个方向有什么看法,请对这个方向的前景进行简述
(2)领域选一个内容
A、B卷
14、传统查杀方式有几种、提取特征要注意什么、高级查杀有哪几种?比传统查杀有什么区别
传统查杀:
(1)哈希值
(2)指定偏移提取16进制代码,作为特征的字符
提取特征注意:
(1)只有正确程序不出现,恶意程序出现
3.高级查杀有哪些:
启发、主动防御、人工智能防御
优势:以最少的代价(特征)干掉更多的样本(恶意程序)。
4.高级查杀与传杀的异同
同:
(1)要提取特征
(2)取16进制
异:
(1)hash一对一
(2)病毒修改偏移绕过。高级查杀不急于偏移,传统一般需要偏移 :如大量注释
15.缓冲区溢出
缓冲区填CCCC , CCC表示什么,烫表示什么?CC由烫翻译过来,CC是int 3,是一个断点为什么要用CC,分配内存空间可能有其他数据(以前程序),如果我们编写程序把这些数据当代码执行(调到这些地方),这些程序未知,转换到指令执行可能有不可预知的后果,所以我们系统自动使用CC填充缓冲区,设置断点,当遇到这些数据会停下来,保证安全。
16.请结合试验15论述一些游戏辅助,如:shooting游戏,分析原理,怎样修改游戏内存,制作流程安全厂商防御方法
(1)使用工具(XX)找到内存修改地址
(2)使用内存修改函数writeMemoryX修改数据。
如:将敌方子弹删除,打不到自己
将自己子弹加长,容易打敌人
防御:不定期修改内存地址、加壳、资源加密(避免安全人员找到) - 从内存地址+资源两方面说
注:
参考:https://blog.csdn.net/guanshanyue96/article/details/93727965 - 网络安全学习第15篇 - 游戏内存修改
获得窗口句柄->获得该窗口的进程(在内存中)->打开进程->修改内存
FindWindow(NULL, L"shooting")->GetSafeHwnd();
函数功能:该函数获得一个顶层窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数不查找子窗口。在查找时不区分大小写。
GetWindowThreadProcessId(hWnd, &Pid);
函数功能:GetWindowThreadProcessId是一种计算机函数,功能是找出某个窗口的创建者(线程或进程),返回创建者的标志符,函数原型是DWORD GetWindowThreadProcessId。
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, Pid);
函数功能:OpenProcess 函数用来打开一个已存在的进程对象,并返回进程的句柄。
result = WriteProcessMemory(hProcess, (LPVOID)Address, &Score, 4, 0);
函数功能:WriteProcessMemory是计算机语言中的一种函数。此函数能写入某一进程的内存区域(直接写入会出Access Violation错误),故需此函数入口区必须可以访问,否则操作将失败。
想要拓展的话:
https://blog.csdn.net/guanshanyue96/article/details/94440559 - 网络安全学习第16篇 - CE游戏动态内存修改器
17.网络分析题
wireshark:
找到一个数据包,说明延迟出现在哪里,并说明理由。
注:高延迟
延迟出现在哪个地方,分析
如:客户端发送get请求(客户端,服务端、链路)
首先延迟出现在客户端自身,具体来说就是客户端发送get请求,,主要看,,(正常)这一段,可以看是没问题,再看,,,(分析)有问题,所以说:
步骤:
(1)说明是什么错误
(2)排除正确
(3)找出错误
(4)总结
注:服务器回复很快的,但是之间出现延迟,可能是链路出现问题。(查看ppt,网络延迟有详细解释)
补充:
1. 使用 xor 加密,解密使用xor
解密是把前16个字节再xor(按位异或)1
如原来的值为:11011101
加密:
11011101
^00000001
__________
11011100
解密:
11011100
^ 00000001
-----------------
11011101
---------------------
参考:https://blog.csdn.net/guanshanyue96/article/details/88999723 - 网络安全学习第4篇-使用特征码和MD5对勒索病毒进行专杀,并对加密文件进行解密
2. 汇编知识
(1).rsrc - 包含了模块的资源信息。它起始于一个资源目录结构,这个结构就像其它大多数结构一样,但是它的数据被更进一步地组织在了一棵资源树之中。以下的IMAGE_RESOURCE_DIRECTORY结构形成了这棵树的根和各个结点。
(2).text - 代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
(3).idata - 数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。
.text, .data , .bss, .constdata, stack, heap; RO, RW, ZI
2008年06月06日 星期五 15:52
.text段是代码段。它用来放程序代码(code)。它通常是只读的(程序代码,编译好了就确定了,不可能改来改去的嘛)。
.data段是数据段。它用来存放初始化了的(initailized)全局变量(global)和初始化了的静态变量(static)。它是可读可写的。
.bss段是全局变量数据段。它用来存放未初始化的(uninitailized)全局变量(global)和未初始化的静态变量(static)。它也是可读可写的。bss是英文Block Started by Symbol的缩写。之所以把bss跟data分开来,是因为系统会为这些bss段的变量的初值清零。
.constdata段是常量数据段。它用来存放常量(const)。它也是只读的。
源程序中使用malloc分配的内存就是bss这一块,它的大小不是根据data的大小确定的,主要是由程序中同时分配内存最大值所确定的,不过如果超出了范围,也就是分配失败,可以等空间释放之后再分配。
以上这些段,用户可以非常灵活的定义其首地址和大小。但对大部分用户来说,程序代码区在ROM或FLASH中,可读写区域在SRAM或DRAM中。考虑一下自己程序规模,函数调用规模,内存使用大小,然后,参照一个连接定位文件,稍加修改就可以了
栈(stack)就是通常我们所说的堆栈。它用来保存函数的局部变量和参数。其操作方式类似于数据结构中的栈,是一种“后进先出”(Last In First Out,LIFO)的数据结构。这意味着最后放到栈上的数据,将会是第一个从栈上移走的数据,对于哪些暂时存储的信息,和不需要长时间保存的信息来说,LIFO这种数据结构非常理想。在调用函数或过程后,系统通常会清除栈上保存的局部变量、函数调用信息及其它信息。栈的顶部通常在可读写的RAM区的最后,其地址空间通常“向下减少”,即当栈上保存的数据越多,栈的地址就越小。
堆(heap)就是通常我们说的动态内存分配。它用来管理动态内存的。其操作方式跟数据结构中的堆,是不同的。
在ARM的集成开发环境中,
1、只读的代码段称为Code段,即上述的.text段。
2、只读的常量数据段,被称作RO Data段,即上述的.constdata段。
以上两个段统称为RO段(Read Only),放在ROM或FLASH等非易失性器件中。
3、可读可写的初始化了的全局变量和静态变量段,被称作RW Data段(ReadWrite),即上述的.bss段。
4、可读可写的未初始化的全局变量和静态变量段,被称作ZI Data段(Zero Init),即上述的.data段。因为这个段里的变量要被初始化为零,所以叫ZI段。
以上两个段统称为RW段,而在运行时,它必须重新装载到可读可写的RAM中。
参考:https://www.xuebuyuan.com/3235605.html
2. 第15个作业findwindow 写内存函数 write(内存读写) 参考:网络安全学习第15篇 - 游戏内存修改
3. 哪些法规没有信息安全:宪法。
专门的法律: 信息网络安全
4.不是逆向工具 cmd mspaint ida ce ollydbg
不是逆向的工具:cmd - dos工具 ,mspaint - 画图工具,ce - 内存修改数据
考试内容:
简答题 4道,每道5分 - 共20分
选择题 5道,每道2分 - 共10分
论述题 3道,每道10分 - 共30分
网络分析题,每道10分 - 共10分
...具体不清楚(大概就是这样)
易错点:
1.Trojan - 木马
virus - 病毒
要说木马还是病毒,不能说恶意程序。要详细分析
2. 四段命名法
最后一段要说明白a是第几个(第一个),只考a-z
第三段如:win32 windows 32位的系统。
3.判断恶意程序不能说可能,要肯定
4.大题:
论述题,说网络安全方向
不能写网络安全方向,人工智能方向
5.CC要说明缓冲去不填CC会怎么样,如果不填CC,可能使用缓冲区以前程序留下的代码,会产生不可预知的后果。填CC就是被执行,也只会执行断点,产生中断的作用。
6.
要详细学习复习网络安全的知识的话:请查看我的博客网络安全学习1-16篇~~~