总结

1使用CreateRemoteThread()API

具体方法是让远程进程(也就是目标进程)运行LoadLibrary()API来加载我们的恶意DLL文件

如何达到这一目标?

有两个关键点,

一是系统核心DLL会被加载到固定位置,也就是说,我们在恶意程序中得到的LoadLibrary()地址,可以在目标程序中直接使用,而不需要在目标程序中得到LoadLibrary地址

二是线程函数原型和LoadLibrary的原型是相似的(都只需要一个参数,都是指针型),这就导致了,LoadLibrary可以作为线程函数,被CreateRemoteThread调用

所以只需要在调用CreateRemoteThread时候,将参数pThreadProc设为LoadLibrary地址把pRemoteBuf设置为要加载DLL地址字符串的地址即可


2使用注册表AppInit_DLLs,Winlogon Notify,SvcHost DLL,都可以是计算机加载我们的而已DLL文件

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows下的AppInit_DLLs和LoadAppInit_DLLs,这样DLL会注入到全部运行程序

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost(建服务组)

HKEY_LOCAL_MACHINE\SYSTEM\Setup\FirstBoot\Services(建服务)

服务方式运行DLL(虽然不是DLL注入,但也列出来)

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

挂钩winlogon事件来运行DLL,同样不是DLL注入但也列出来


3使用SetWindowsHookEx()API

方法是在DLL里面写一个键盘勾取函数,然后用SetWIndowsHookEx把这个函数添加到键盘钩链,这样在目标程序发生键盘事件时候,DLL就会被强行注入目标进程.


4windows异步过程调用(APC)

APC可以让线程在它正常执行之前,执行APC队列里面代码,所以可以通过QueueUserAPC()API插入队列参数为loadlibrary来注入dll


恶意代码分析通用规则

1不要陷入细节,应该在进入细节前有个概要性了解

2善用不同工具和方法

3能够快速应对恶意代码分析艺术的新变化


几个记不住的汇编指令

repe cmpsb,比较esi和edi缓冲区是否一致

rep stosb,用al初始化edi

rep movsb,esi复制到edi

repne scasb,在edi缓冲区内搜索al


三种函数调用约定

cdecl,参数从右到左压入栈,调用者清理栈

stdcall,参数压栈顺序一样,被调用者清理栈(windowAPI标准调用规则)

fastcall参数传给寄存器


反调试技术

TLS回调函数会在四种情况下被调用,进程加载和卸载,线程加载和卸载

SEH结构化异常处理也常用来检测调试

有效的反调试技术:

outputdebugstring

时钟检测 rdtsc(返回系统重启以来的时钟数到edx:eax)

GetTickCount(返回系统重启时间与当前时间相差毫秒数)(QueryperformanceCounter)

代码检验CRC和md5


反虚拟机技术

in 参数eax(VMXh) dx端口(VX),ecx操作数(0Ah),返回值ebx(VMware版本)

检查HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses注册表下是否存在vmware相关键

检查进程是否存在vmtool

GetAdaptorsInfo函数得到IP_ADAPTER_INFO结构的链表,确定mac地址是不是虚拟机相对应,比如00:0C:29开头


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值