免杀技术之白加黑的攻击防御

news2024/12/23 19:52:53

一、介绍

1. 什么是白加黑

通俗的讲白加黑中的白就是指被杀软列入到可信任列表中的文件。比如说微软自带的系统文件或者一些有有效证书签名的文件,什么是微软文件,或者什么是有效签名文件在后面我们会提到他的辨别方法。黑就是指我们自己的文件,没有有效证书签名,也不是微软文件。通常这种文件会被杀软加入到可疑名单中。

2. 白加黑的作用是什么

在很多的杀软中会对白文件的操作进行放行,如果我们将黑程序和白程序在一个进程中是否就可以绕过一些杀软的检测。

二、如何挖掘利用白文件

1. 思考->解决

问:如果我们想要将我们的黑程序载入到白文件中有什么办法?

答:通常情况下我们可以利用注入去将一个程序执行到另外的程序中。

问:在程序执行的开始,如何加载一个DLL。

答:程序加载的时候会优先加载当前文件夹下的文件下的DLL,当然这些DLL要存在于可执行程序的导入表中。

2. 挖掘白文件

首先我们先去找几个有签名的文件或者微软的可执行文件。

下图就是签名的鉴别方式。必须是正常数字签名才行。

图片

图片

这里有一些我们常用的软件也可以利用,我们尽量去看看目录里面体积小的文件,这样方便我们在攻击的时候投入。

图片

这里我们在steam中找到一个uninstall.exe的exe,用ProcessMonitor可以监控到他执行的时候加载了一个“C:\Windows\System32\wow64log.dll” ,那么我们是否可以写一个这个dll放到和他在相同的目录下让他加载我们的wow64log.dll不去加载System32下的wow64log.dll呢?

那么我们去尝试下

3. 如何构造wow64log.dll

首先我们要知道一个exe加载这个dll后他调用了哪些函数,我们要去伪造这些函数,不然他肯定是加载不起来的。有很多方式可以查看比如说LordPe,或者说VS带有的dumpbin。这里我们用dumpbin来看下白程序的导入表,看看wow64log.dll用到了哪些函数。

C:\Users\Administrator\Desktop\1>dumpbin /imports uninstall.exe
Microsoft (R) COFF/PE Dumper Version 14.36.32535.0
Copyright (C) Microsoft Corporation. All rights reserved.


Dump of file uninstall.exe

File Type: EXECUTABLE IMAGE

  Section contains the following imports:

    KERNEL32.dll
                408070 Import Address Table
                408614 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                  30B SetCurrentDirectoryW
                  161 GetFileAttributesW
                  16A GetFullPathNameW
                  356 Sleep
                  1DF GetTickCount
                   56 CreateFileW
                  163 GetFileSize
                  271 MoveFileW
                  31A SetFileAttributesW
                  17E GetModuleFileNameW
                   46 CopyFileW
                   B9 ExitProcess
                  314 SetEnvironmentVariableW
                  1F4 GetWindowsDirectoryW
                  1D6 GetTempPathW
                  111 GetCommandLineW
                  1E8 GetVersion
                  315 SetErrorMode
                  390 WaitForSingleObject
                  142 GetCurrentProcess
                   39 CompareFileTime
                  20A GlobalUnlock
                  203 GlobalLock
                   6F CreateThread
                  171 GetLastError
                   4E CreateDirectoryW
                   69 CreateProcessW
                  2C5 RemoveDirectoryW
                  3C3 lstrcmpiA
                  1D4 GetTempFileNameW
                  3A4 WriteFile
                  3C6 lstrcpyA
                  3C7 lstrcpyW
                  270 MoveFileExW
                  3BE lstrcatW
                  1C2 GetSystemDirectoryW
                  1A0 GetProcAddress
                  17F GetModuleHandleA
                  1FF GlobalFree
                  1F8 GlobalAlloc
                  1B6 GetShortPathNameW
                  2DC SearchPathW
                  3C4 lstrcmpiW
                  31F SetFileTime
                   34 CloseHandle
                   BD ExpandEnvironmentStringsW
                  3C1 lstrcmpW
                  150 GetDiskFreeSpaceW
                  3CD lstrlenW
                  3CA lstrcpynW
                  15A GetExitCodeProcess
                   D5 FindFirstFileW
                   DD FindNextFileW
                   84 DeleteFileW
                  31B SetFilePointer
                  2B5 ReadFile
                   CE FindClose
                  274 MulDiv
                  275 MultiByteToWideChar
                  3CC lstrlenA
                  394 WideCharToMultiByte
                  19D GetPrivateProfileStringW
                  3AA WritePrivateProfileStringW
                   F8 FreeLibrary
                  254 LoadLibraryExW
                  182 GetModuleHandleW

    USER32.dll
                408198 Import Address Table
                40873C Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                  15C GetSystemMenu
                  248 SetClassLongW
                  1AE IsWindowEnabled
                   C2 EnableMenuItem
                  283 SetWindowPos
                  15A GetSysColor
                  16F GetWindowLongW
                  24D SetCursor
                  1BD LoadCursorW
                   38 CheckDlgButton
                  13C GetMessagePos
                  1B9 LoadBitmapW
                   1C CallWindowProcW
                  1B1 IsWindowVisible
                   42 CloseClipboard
                  24A SetClipboardData
                   C1 EmptyClipboard
                  1F6 OpenClipboard
                  2D8 wsprintfW
                  231 ScreenToClient
                  174 GetWindowRect
                  15D GetSystemMetrics
                  254 SetDlgItemTextW
                  114 GetDlgItemTextW
                  1E3 MessageBoxIndirectW
                   2F CharPrevW
                   2A CharNextA
                  2D7 wsprintfA
                   A2 DispatchMessageW
                  201 PeekMessageW
                  10C GetDC
                  22A ReleaseDC
                   C4 EnableWindow
                  193 InvalidateRect
                  240 SendMessageW
                   8F DefWindowProcW
                    D BeginPaint
                   FF GetClientRect
                   E2 FillRect
                   C6 EndDialog
                  219 RegisterClassW
                  29A SystemParametersInfoW
                   61 CreateWindowExW
                   F9 GetClassInfoW
                   9F DialogBoxParamW
                   2C CharNextW
                   E1 ExitWindowsEx
                   99 DestroyWindow
                  1C1 LoadImageW
                  27A SetTimer
                  287 SetWindowTextW
                  204 PostQuitMessage
                  292 ShowWindow
                  111 GetDlgItem
                  1AD IsWindow
                  281 SetWindowLongW
                   E5 FindWindowExW
                  2A4 TrackPopupMenu
                    9 AppendMenuW
                   5E CreatePopupMenu
                   BF DrawTextW
                   C8 EndPaint
                   56 CreateDialogParamW
                  23F SendMessageTimeoutW
                  257 SetForegroundWindow

    GDI32.dll
                40804C Import Address Table
                4085F0 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                  20E SelectObject
                  216 SetBkMode
                   3D CreateFontIndirectW
                  23C SetTextColor
                   8F DeleteObject
                  16B GetDeviceCaps
                   29 CreateBrushIndirect
                  215 SetBkColor

    SHELL32.dll
                40817C Import Address Table
                408720 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                   C3 SHGetSpecialFolderLocation
                   BD SHGetPathFromIDListW
                   7A SHBrowseForFolderW
                   AD SHGetFileInfoW
                  10B ShellExecuteW
                   9B SHFileOperationW

    ADVAPI32.dll
                408000 Import Address Table
                4085A4 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                  1D7 RegDeleteKeyW
                  22F SetFileSecurityW
                  1AC OpenProcessToken
                  150 LookupPrivilegeValueW
                   1C AdjustTokenPrivileges
                  1ED RegOpenKeyExW
                  1E2 RegEnumValueW
                  1D9 RegDeleteValueW
                  1CB RegCloseKey
                  1D2 RegCreateKeyExW
                  205 RegSetValueExW
                  1F8 RegQueryValueExW
                  1E0 RegEnumKeyW

    COMCTL32.dll
                408038 Import Address Table
                4085DC Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                   34 ImageList_AddMasked
                      Ordinal 17
                   38 ImageList_Destroy
                   37 ImageList_Create

    ole32.dll
                4082A0 Import Address Table
                408844 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                  105 OleUninitialize
                   EE OleInitialize
                   65 CoTaskMemFree
                   10 CoCreateInstance

  Summary

       21000 .data
       36000 .ndata
        2000 .rdata
       13000 .rsrc
        7000 .text

C:\Users\Administrator\Desktop\1>

可以发现这里面并没有wow64log.dll这个导入dll,那么他有可能是动态加载的,也有可能是默认加载的。这样我们就不需要考虑这个dll的导出函数了,直接伪造一个dll即可。

首先我们要知道这个可执行程序32位还是64位,我们可以用DIE或者x64dbg去查看。

图片

这里看得出来是PE32,那么我们要构造的dll也就是32位的dll。

图片

我们在进程附加的时候去弹出一个信息框

图片

这里我们选择和程序对应的架构。X86编译出来就是PE32。

图片

编译好之后我们和可执行文件放到同目录下去执行文件即可。

图片

很遗憾我们并没有去加载成功我们的dll,此时就说明此文件不是我们可以利用的程序,我们需要去更换程序。我们需要继续去以上步骤去重新找白程序文件。

图片

这里我们找到一个企业微信里面的exe我们再去尝试一下。

图片

可以看出我们先加载了dbghelp.dll我们将我们之前的文件名字改成这个名字看看是否可以运行。

图片

此时看到这个图,不要认为我们又要换白程序了,报错是成功的一大步,到这里就说明我们已经成功百分之90了,这里的问题是我们dll虽然有了但是程序加载我们的dll后调用的函数我们并没有提供,好的我们用dumpbin来看下。

C:\Users\Administrator\Desktop\1>dumpbin /imports minidump.exe
Microsoft (R) COFF/PE Dumper Version 14.36.32535.0
Copyright (C) Microsoft Corporation. All rights reserved.


Dump of file minidump.exe

File Type: EXECUTABLE IMAGE

  Section contains the following imports:

    dbghelp.dll
                403108 Import Address Table
                403A6C Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                   1D MiniDumpWriteDump

这里可以看到我们的dll需要一个MiniDumpWriteDump这个函数,我们在代码中添加一下。

图片

我们编译再去执行下。

图片

这里我们就可以弹出我们的信息框了。

三、如何检测是否为白加黑程序

1. 杀软检测

图片

杀软很容易检测的这些简单的白加黑文件,因为我们找的黑dll是系统自带的文件,杀软只需对比Hash就可过了出是不可信文件,一般情况下也不会有程序去伪造系统的dll文件。(这里也好解决我们只需要找一些加载不是系统文件的白程序即可。)

2. 手动检测

手动检测的方式也很简单,我们只需要多注意这种exe只带有一个dll的文件,因为如果是木马的话他一般不会有很多文件,我们可以dll右键属性看看是否有签名,如果没有就很可疑,如果有的话看看签名是否有效,这里也可以用代码去代替这个过程。

图片

以上两种都可以怀疑此程序是可疑程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1620695.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【办公类-26-01】20240422 UIBOT网络教研(自动登录并退出多个账号,半自动半人工)

作品展示: 背景需求: 每学期有多次网络教研 因为我有历任搭档的进修编号和登录密码, 所以每次学习时,我会把历任搭档的任务也批量完成。 但是每次登录都要从EXCEL里复制一位老师的“进修编号”“密码”,还要点击多次…

53.基于微信小程序与SpringBoot的戏曲文化系统设计与实现(项目 + 论文)

项目介绍 本站采用SpringBoot Vue框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得基于SpringBoot Vue技术的戏曲文化系统设计与实现管理工作系统化、规范化。 技术选型 后端:…

最快2周录用!多领域EI,征稿范围广!各指标优秀!

计算机工程类EI(最快2周录用) 【期刊简介】最新EI期刊目录内源刊 【检索情况】EI&Scopus双检 【版面情况】仅10篇版面 【年发文量】60篇左右 【国人占比】约13% 【收录年份】2009年被EI数据库收录 【审稿周期】预计1个月左右录用 【征稿领域…

aqs 条件队列和同步队列、独占模式和共享模式

同步/条件队列 先上代码 import java.util.LinkedList; import java.util.Queue; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock;public class ProducerConsumerExample {private static final int CAPACITY 5;private fi…

二维码存储图片如何实现?相册二维码的制作技巧

如何将照片生成二维码后存储展示?现在很多人会将图片生成二维码以后,用于分享或者储存的用途,减少个人内存的占用量,而且分享照片也会更加的方便,只需要扫描二维码就可以让其他人查看图片。 想要制作图片二维码的步骤…

【C++题解】1033. 判断奇偶数

问题:1033. 判断奇偶数 类型:分支 题目描述: 输入一个整数,判断是否为偶数。是输出 y e s ,否则输出n o。 输入: 输入只有一行,包括 1 个整数(该整数在 1∼10000 的范围内&#…

【算法刷题 | 贪心算法02】4.24(摆动序列)

文章目录 3.摆动序列3.1题目3.2解法:贪心3.2.1贪心思路3.2.2代码实现 3.摆动序列 3.1题目 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。 第一个差(如果存在的话)可能是正数或负数。仅有一个元素…

python爬虫 - 爬取html中的script数据(zum.com新闻信息 )

文章目录 1. 分析页面内容数据格式2. 使用re.findall方法,编写爬虫代码3. 使用re.search 方法,编写爬虫代码 1. 分析页面内容数据格式 (1)打开 https://zum.com/ (2)按F12(或 在网页上右键 --…

书生·浦语大模型第二期实战营第四节-XTuner 微调 LLM:1.8B、多模态、Agent 作业-XTuner 微调个人小助手认知

视频教程:XTuner 微调 LLM:1.8B、多模态、Agent 文字教程:XTuner 微调 LLM:1.8B、多模态、Agent 作业来源:https://github.com/InternLM/Tutorial/blob/camp2/xtuner/homework.md XTuner 微调个人小助手认知 1. 环境安装 2.准备工作 2.1…

(done) 什么是 SVD 奇异值分解?什么是 TruncatedSVD 截断奇异值分解?

来源:https://www.bilibili.com/video/BV16A411T7zX/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 奇异值分解其实就是如下图,把矩阵 M 分解成一个正交方阵 U,乘以一个不规则奇异值矩阵 sigma…

校企联合,共谋发展 | 欢迎陕西科技大学一行来访Aigtek安泰电子交流洽谈!

为进一步深化校企合作共建,促进优秀人才引进。4月12日,陕西科技大学电智学院的院长马院长、副院长任院长、电子信息工程专业副主任张攀峰老师、郭拓老师,到访西安安泰电子科技有限公司,就开展校企合作展开了学习交流,安…

【认真白嫖】注册免费域名

一、eu.org官网 https://nic.eu.org/,始于1996年,对个人和组织是免费注册,页面还真有96年的风格,点进去注册就行。 二、注册 使用随机生成一个虚拟英国或者美国地址的网站,会提高通过的概率。 https://www.haoweic…

打造基于时间-技能-动能的人效飞轮,助推新质生产力发展

△ 章新波,盖雅工场董事长兼CEO 本文内容来自于2024年4月19日,章新波在第四届狮山人力资源论坛《以人为本,赋能发展:打造基于时间-技能-动能三要素的人效飞轮》的主题演讲。 1. 技术变革的影响:替代效应与补偿效应并存…

IPv6是什么

IPv6服务器是基于IPv6协议进行网络通信的服务器。IPv6,即“互联网协议第6版”,是互联网工程任务组(IETF)设计的用于替代IPv4的下一代IP协议,其地址数量号称可以为全世界的每一粒沙子编址。IPv6的主要功能和应用场景包括…

高效的数据采集如何促进企业发展?

大数据开启了一个大规模生产、分享和应用数据的时代,它给技术和商业带来了巨大的变化。麦肯锡研究表明,在医疗、零售和制造业领域,大数据每年可以提高劳动生产率0.5-1个百分点。大数据在核心领域的渗透速度有目共睹,然而调查显示&…

UTC和北京时间

influxdb 的时间为UTC和北京时间相差8小时,需要经常转化,所以有下面的2个常用时间 public static void main(String[] args) {//北京时间当天0点ZonedDateTime dateTime ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));ZonedDateTime beijin…

【ARMv9 DSU-120 系列 4.1 -- Utility bus 详细介绍 2】

文章目录 ARM DSU-120DSU-120 Utiity BusCluster and core PPUPPU寄存器的访问性PPU寄存器的作用系统组件基地址ARM DSU-120 DSU-120 Utiity Bus 在ARMv9架构中,DSU-120(Dynamic Shared Unit 120)是一个关键组件,用于管理核心和系统组件之间的通信与协作。某些系统组件寄存…

C语言-联合体基本概念

联合体的外在形式跟结构体非常类似,但它们有一个本质的区别:结构体中的各个成员是各自独立的,而联合体中的各个成员却共用同一块内存,因此联合体也称为共用体。 联合体内部成员的这种特殊的“堆叠”效果,使得联合体有如…

说说你对归并排序的理解?如何实现?应用场景?

一、是什么 归并排序(Merge Sort)是建立归并操作上的一种有效,稳定的排序算法,该算法是采用分治法的一个非常典型的应用 将已有序的子序列合并,得到完全有序的序列,即先使每个子序列有序,再使…

C++项目在Linux下编译动态库

一、说明 最近在Windows下开发了一个C线程池项目,准备移植到Linux下,并且编译成动态库进行使用。现将具体过程在此记录。 二、准备 1、项目文件 我的项目文件如下,其中除main.cpp是测试文件之外,其他都是线程池项目相关的 将C…