永恒之藍(lán)的勒索病毒tasksche.exe樣本分析

內(nèi)容:
分析病毒結(jié)構(gòu)床三,寫出病毒如何利用漏洞進(jìn)行攻擊,詳細(xì)剖析勒索病毒的運(yùn)行過(guò)程月趟,使用了什么加密算法灯蝴,調(diào)用了什么系統(tǒng)API。
進(jìn)階:
中了該勒索病毒孝宗,怎么恢復(fù)數(shù)據(jù)
樣本分析
首先是看下病毒樣本的哈希值


圖片.png

查殼信息穷躁,win32程序無(wú)殼:


圖片.png

載入IDA后墓怀,先查看字符串蜈膨,看到有RSA和AES,猜測(cè)之后會(huì)使用這兩種加密方式:
圖片.png

用IDA的findcrypto插件饼暑,找到了AES算法的特征:
圖片.png

第一部分

之后開(kāi)始對(duì)病毒樣本進(jìn)行詳細(xì)分析婚被,首先是程序入口點(diǎn):

圖片.png

一開(kāi)始病毒獲取它的運(yùn)行絕對(duì)路徑狡忙,用OD動(dòng)態(tài)調(diào)試時(shí)可得:

圖片.png

在函數(shù) sub_401225中,會(huì)根據(jù)當(dāng)前的計(jì)算機(jī)名隨機(jī)生成一組字符串址芯,后面會(huì)用到

圖片.png

OD動(dòng)調(diào)結(jié)果:

圖片.png

如果參數(shù)有/i灾茁,就把病毒自身復(fù)制到之前隨機(jī)字符串的文件夾中窜觉,名稱為tasksche.exe,之后去運(yùn)行這個(gè)北专,但是我沒(méi)用命令行去運(yùn)行禀挫,所以直接就跳到下一步。之后將路徑切換到了當(dāng)前的文件夾下拓颓,在sub_4010FD里面會(huì)添加一條新的注冊(cè)表項(xiàng)

圖片.png
圖片.png

但是在OD調(diào)試的時(shí)候發(fā)現(xiàn)在注冊(cè)表中沒(méi)有這一項(xiàng)语婴,跟到函數(shù)里面,發(fā)現(xiàn)在執(zhí)行完RegSetValueExA退出了驶睦,懷疑是權(quán)限問(wèn)題導(dǎo)致注冊(cè)表沒(méi)能成功添加

圖片.png

分析下在sub_401DAB里面進(jìn)行的操作砰左,主要對(duì)資源文件進(jìn)行獲取和釋放到當(dāng)前文件夾,用到了FindResourceA啥繁,LoadResource等對(duì)資源操作的函數(shù)菜职,下圖的Type是XIA,可以通過(guò)Resource Hacker來(lái)找到程序釋放的資源

圖片.png

找到名字叫做XIA的資源段旗闽,里面一看是PK頭酬核,意識(shí)到是一個(gè)zip壓縮包,直接用foremost從程序中提取出zip壓縮包适室,密碼是壓到棧里的參數(shù)WNcry@2ol7

圖片.png

配合OD嫡意,執(zhí)行完釋放資源的函數(shù)后,文件夾中的內(nèi)容多了一堆捣辆,應(yīng)該都是之后病毒要使用的文件蔬螟,十六進(jìn)制編輯器打開(kāi)后發(fā)現(xiàn)有PE文件,壓縮包汽畴,被加密的文件等

圖片.png

之后執(zhí)行兩條命令

attrib +h .

icacls . /grant Everyone:F /T /C /Q

圖片.png

這兩條命令搜了一下用法旧巾,

attrib為批處理文件命令 具體解釋如下:- 清除屬性。 R 只讀文件屬性忍些。 A 存檔文件屬性鲁猩。 S 系統(tǒng)文件屬性。 H 隱藏文件屬性罢坝。

這個(gè)地方命令用錯(cuò)了廓握,對(duì)當(dāng)前文件下文件隱藏不需要加點(diǎn),直接attrib +h就可以嘁酿,這里意思是想把這些病毒使用的文件全部隱藏隙券,結(jié)果沒(méi)什么用

圖片.png

第二條指令:

icacls

Intergrity Control Access Control List: 完整性權(quán)限控制列表 Windows系統(tǒng)下控制文件及文件夾的訪問(wèn)權(quán)限的命令行指令,相當(dāng)于Linux中的chmod 原命令cacls已經(jīng)被廢棄闹司。

MS documentation: 1, F = Full Control

? 777

2, CI = Container Inherit - This flag indicates that subordinate containers will inherit this ACE.

? 子文件夾繼承父文件夾權(quán)限

3, OI = Object Inherit - This flag indicates that subordinate files will inherit the ACE.

? 子文件繼承父文件夾權(quán)限

4, /T = Apply recursively to existing files and sub-folders. (OI and CI only apply to new files and sub-folders).

? 遞歸傳遞權(quán)限

在函數(shù)sub_4014A6里娱仔,對(duì)之前解壓的t.cnry進(jìn)行解壓,并加載到內(nèi)存里开仰,在內(nèi)存可以看到PE結(jié)構(gòu)的文件拟枚,直接用PEload轉(zhuǎn)存出一份內(nèi)存文件薪铜,再用foremost提取出一個(gè)PE文件:

圖片.png

之后進(jìn)入函數(shù)sub_4021BD回去判斷是一個(gè)PE文件,在堆上申請(qǐng)了空間恩溅,并把這個(gè)PE文件加載到堆上

圖片.png

wcry.exe的后半部分的流程如下圖:

圖片.png

在提取出的dll文件中隔箍,打開(kāi)導(dǎo)出函數(shù)可以看到TaskStart,說(shuō)明在v8處執(zhí)行了這個(gè)函數(shù)

圖片.png

之后OD運(yùn)行到call eax脚乡,進(jìn)入了dll的函數(shù)蜒滩,整個(gè)病毒就開(kāi)始進(jìn)行加密了

圖片.png

可以發(fā)現(xiàn)wcry.exe其實(shí)并沒(méi)有進(jìn)行文件加密等病毒操作,大部分功能都是在釋放資源和分配空間奶稠,直到開(kāi)始運(yùn)行釋放出來(lái)的dll中的導(dǎo)出函數(shù)才會(huì)開(kāi)始加密俯艰,所以這里直接把這個(gè)調(diào)用TaskStart的call給nop掉就不會(huì)中毒,因?yàn)閣cry.exe的功能已經(jīng)分析完了锌订,測(cè)試了下想法竹握,修改完保存二進(jìn)制程序,此時(shí)程序就只是釋放所有資源文件辆飘,不會(huì)加密文件

圖片.png

這部分的API函數(shù)總結(jié):

1.GetModuleFileNameA

函數(shù)功能:獲取當(dāng)前運(yùn)行程序的絕對(duì)路徑

DWORD GetModuleFileNameA(

HMDULE hModule,     //所需路徑的模塊的句柄啦辐。如果該參數(shù)為NULL,函數(shù)會(huì)獲取當(dāng)前進(jìn)程的運(yùn)行文件(.exe文件)的全路徑蜈项。

LPSTR lpFilename,    //一個(gè)指向接收存儲(chǔ)模塊的全路徑的緩沖區(qū)的指針芹关。如果路徑的長(zhǎng)度小于nSize參數(shù)定義的長(zhǎng)度,返回路徑為一個(gè)結(jié)尾為空終止('\0')的字符串紧卒;如果路徑的長(zhǎng)度超過(guò)nSize參數(shù)所定義的長(zhǎng)度侥衬,字符串會(huì)截?cái)嗟絥Size個(gè)字符的長(zhǎng)度,并在最后及nSize-1的位置包含一個(gè)終止符('\0')跑芳。

DWORD nSize         //lpFilename緩沖區(qū)的長(zhǎng)度轴总。

); //如果函數(shù)運(yùn)行成功,返回值為字符串的長(zhǎng)度博个。如果字符串的長(zhǎng)度大于nSize字節(jié)肘习,返回值為nSize。如果函數(shù)運(yùn)行失敗坡倔,返回值為0。

2.GetComputerNameW

函數(shù)功能:獲取計(jì)算機(jī)名

BOOL GetComputerNameA(
  LPSTR   lpBuffer,     //指向接收計(jì)算機(jī)名稱或群集虛擬服務(wù)器名稱的緩沖區(qū)的指針脖含。緩沖區(qū)大小應(yīng)足夠大罪塔,以包含MAX_COMPUTERNAME_LENGTH + 1個(gè)字符。
  LPDWORD nSize    //在輸入時(shí)养葵,在TCHAR中指定緩沖區(qū)的大小征堪。在輸出時(shí),復(fù)制到目標(biāo)緩沖區(qū)的TCHAR數(shù)关拒,不包括終止空字符佃蚜。如果緩沖區(qū)太小庸娱,則函數(shù)失敗,GetLastError返回ERROR_BUFFER_OVERFLOW谐算。所述lpnSize參數(shù)指定緩沖器的所需要的大小熟尉,包括終止空字符。
);

3.MultiByteToWideChar

函數(shù)功能:該函數(shù)映射一個(gè)字符串到一個(gè)寬字符(unicode)的字符串洲脂。由該函數(shù)映射的字符串沒(méi)必要是多字節(jié)字符組斤儿。

函數(shù)原型: 

int MultiByteToWideChar(

  UINT CodePage,

  DWORD dwFlags,

  LPCSTR lpMultiByteStr,

  int cchMultiByte,

  LPWSTR lpWideCharStr,

  int cchWideChar

);

4.GetWindowsDirectory

函數(shù)功能:獲取Windows目錄的完整路徑名

UINT WINAPI GetWindowsDirectory(__out  LPTSTR lpBuffer, __in   UINT uSize); 
lpBuffer [out] 
一個(gè)緩沖區(qū),是一個(gè)接收路徑的指針恐锦。這條路徑并沒(méi)有結(jié)束往果,除非以反斜杠Windows目錄是根目錄。例如一铅,如果Windows目錄被命名為Windows的C驅(qū)動(dòng)器上的Windows目錄的路徑檢索這個(gè)函數(shù)是C:\窗口陕贮。如果系統(tǒng)在驅(qū)動(dòng)器C的根目錄,檢索安裝路徑是C:\潘飘。 

lpBuffer String肮之,指定一個(gè)字串緩沖區(qū),用于裝載Windows目錄名福也。除非是根目錄局骤,否則目錄中不會(huì)有一個(gè)中止用的“\”字符

uSize [in] 
至于由lpBuffer參數(shù)指定的緩沖區(qū)的最大尺寸,在TCHARs暴凑。此值應(yīng)設(shè)置為MAX_PATH峦甩。 
nSize Long,lpBuffer字串的最大長(zhǎng)度

5.GetFileAttributes

函數(shù)功能:為一個(gè)指定的文件或目錄返回文件系統(tǒng)的屬性现喳】粒可以使用GetFileAttributesEx 函數(shù)獲得更多的屬性信息。如果要實(shí)現(xiàn)交互式操作嗦篱,可以使用GetFileAttributesTransacted 函數(shù)冰单。

DWORD WINAPI GetFileAttributes(
  __in LPCTSTR lpFileName
  );
參數(shù)
  lpFileName [in]
  文件或目錄的名字,對(duì)于ANSI版本灸促,名字不能大于MAX_PATH诫欠。
返回值
  如果函數(shù)成功,返回值包含文件或目錄的屬性浴栽。如果函數(shù)失敗荒叼,返回值是INVALID_FILE_ATTRIBUTES。

SetFileAttributes

函數(shù)功能:設(shè)置文件屬性

SetFileAttributes(文件名典鸡, FILE_ATTRIBUTE_READONLY); // 設(shè)定為只讀
SetFileAttributes(文件名被廓, FILE_ATTRIBUTE_HIDDEN );//設(shè)定為隱藏
SetFileAttributes(文件名, FILE_ATTRIBUTE_SYSTEM);//設(shè)定為系統(tǒng)
SetFileAttributes(文件名萝玷, FILE_ATTRIBUTE_ARCHIVE);//設(shè)定為保存
SetFileAttributes(文件名嫁乘, FILE_ATTRIBUTE_NORMAL);//設(shè)定為一般 (取消前四種屬性)
設(shè)定二種以上的屬性:
設(shè)定為只讀 + 隱藏
SetFileAttributes(文件名昆婿, FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN); 
設(shè)定為只讀 + 隱藏 + 系統(tǒng) + 保存
SetFileAttributes(文件名, FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN _
| FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_ARCHIVE);
取消所有設(shè)定
SetFileAttributes(文件名蜓斧, FILE_ATTRIBUTE_NORMAL);

6.GetTempPathW

函數(shù)功能:獲取為臨時(shí)文件指定的路徑

DWORD WINAPI GetTempPath(
  __in   DWORD nBufferLength,
  __out  LPTSTR lpBuffer
);

nBufferLength:指lpbuffer所占的空間仓蛆,以TCHAR為單位。

(TCHAR:當(dāng)UNICODE模式下為wchar_t法精,非UNICODE模式下為char多律。)

lpBuffer:保存找的文件夾路徑,該文件路徑以‘\’結(jié)束搂蜓,例如“C:\temp\”狼荞。

其返回值為一個(gè)dword類型,當(dāng)函數(shù)執(zhí)行成功時(shí)返回文件夾路徑長(zhǎng)度,以TCHAR為單位帮碰,不包括結(jié)束字符在內(nèi)相味。如果返回的路徑長(zhǎng)度大于nbufferlength,那么按返回值保存路徑殉挽。

7.CreateDirectoryW

函數(shù)功能:CreateDirectory這個(gè)函數(shù)的作用是創(chuàng)建一個(gè)新的目錄丰涉。如果底層文件系統(tǒng)支持文件和目錄上的安全描述,該功能可將指定的安全描述到新的目錄斯碌。

函數(shù)原型:
BOOL CreateDirectory(
  LPCTSTR lpPathName,
  LPSECURITY_ATTRIBUTES lpSecurityAttributes
);

參數(shù):
    pPathName:長(zhǎng)指針一死,指向一個(gè)空結(jié)束的字符串,該字符串指定要?jiǎng)?chuàng)建的目錄的路徑傻唾。有一個(gè)默認(rèn)的字符串大小限制為MAX_PATH字符的路徑投慈。此限制是關(guān)系到這個(gè)函數(shù)是如何解析路徑。字符串的長(zhǎng)度不超過(guò)MAX_PATH冠骄。

lpSecurityAttributes:忽略伪煤,一般設(shè)置為NULL。

返回值:
    非零表示成功凛辣,零表示失敗抱既。若想獲得更多的錯(cuò)誤信息,調(diào)用GetLastError函數(shù)扁誓。
備注:
    這個(gè)函數(shù)不是遞歸的防泵。它可以在一個(gè)路徑中創(chuàng)建唯一的最終目錄。也就是說(shuō)蝗敢,如果父目錄或中間目錄不存在择克,該函數(shù)將失敗并顯示錯(cuò)誤消息ERROR_PATH_NOT_FOUND。

8.SetCurrentDirectory

函數(shù)功能:設(shè)置當(dāng)前路徑前普,然后就可以以相對(duì)路徑訪問(wèn)一些你程序相關(guān)的文件,不需要絕對(duì)路徑

 TCHAR chCurDir[MAX_PATH] = {0};
    GetCurrentDirectory(MAX_PATH, chCurDir);
    SetCurrentDirectory(_T("E:\\test\\"));
    m_hDLL = LoadLibrary(_T("MyTest.dll"));
    SetCurrntDirectory(chCurDir);

9.CopyFileA

函數(shù)功能:復(fù)制文件

BOOL CopyFile(

LPCTSTR lpExistingFileName, // pointer to name of an existing file
LPCTSTR lpNewFileName, // pointer to filename to copy to
BOOL bFailIfExists // flag for operation if file exists
);
其中各參數(shù)的意義:
LPCTSTR lpExistingFileName, // 你要拷貝的源文件名
LPCTSTR lpNewFileName, // 你要拷貝的目標(biāo)文件名
BOOL bFailIfExists // 如果目標(biāo)已經(jīng)存在壹堰,不拷貝(True)并返回False拭卿,覆蓋目標(biāo)(false)

如:
//拷貝文件c:\log.txt到d:\log.txt骡湖,如果D:\log.txt已經(jīng)存在,就覆蓋
CopyFile("c:\\log.txt","d:\\log.txt",false);  

10.GetFullPathName

函數(shù)功能:獲取指定文件的完整路徑名

DWORD WINAPI GetFullPathName(
  _In_   LPCTSTR lpFileName,
  _In_   DWORD nBufferLength,
  _Out_  LPTSTR lpBuffer,
  _Out_  LPTSTR *lpFilePart
);

參數(shù)說(shuō)明:
lpFileName [in]
文件名峻厚。該參數(shù)既可以是一個(gè)短文件名响蕴,也可以是一個(gè)長(zhǎng)文件名,還可以是共享名或卷名惠桃。

nBufferLength [in]
接收路徑的緩沖區(qū)的長(zhǎng)度浦夷。
lpBuffer [out]

這是一個(gè)輸出參數(shù),指向路徑緩沖區(qū)的指針辜王。

lpFilePart [out]
輸出參數(shù)劈狐,指向路徑緩沖區(qū)中文件名部分的指針。該參數(shù)可以是NULL呐馆。如果lpBuffer指向的緩沖區(qū)內(nèi)存放的是一個(gè)目錄而非文件肥缔,lpFilePart為0。

11.OpenSCManager

函數(shù)功能:函數(shù)建立了一個(gè)到服務(wù)控制管理器的連接汹来,并打開(kāi)指定的數(shù)據(jù)庫(kù)续膳。

SC_HANDLE WINAPI OpenSCManager(
_In_opt_ LPCTSTR lpMachineName,
_In_opt_ LPCTSTR lpDatabaseName,
_In_ DWORD dwDesiredAccess
);
參數(shù):
1. lpMachineName:目標(biāo)計(jì)算機(jī)名,NULL表示本地計(jì)算機(jī)
2. lpDatabaseName:服務(wù)管理程序系統(tǒng)組件數(shù)據(jù)庫(kù)收班,可以設(shè)為SERVICES_ACTIVE_DATABASE坟岔,如果為NULL,表示默認(rèn)打開(kāi)SERVICES_ACTIVE_DATABASE數(shù)據(jù)庫(kù)
3. dwDesiredAccess:對(duì)SCM的權(quán)限

12.OpenServiceA

函數(shù)功能:打開(kāi)一個(gè)已經(jīng)存在的服務(wù)

SC_HANDLE WINAPI OpenService(
_In_ SC_HANDLE hSCManager,
_In_ LPCTSTR lpServiceName,
_In_ DWORD dwDesiredAccess
);
參數(shù):
hSCManager:SCM數(shù)據(jù)庫(kù)句柄摔桦;OpenSCManager
lpServiceName:要打開(kāi)服務(wù)的名字社付,這和CreateService形參lpServiceName一樣,不是服務(wù)顯示名稱酣溃。
dwDesiredAccess:服務(wù)權(quán)限

13.StartService

函數(shù)功能:?jiǎn)?dòng)一個(gè)服務(wù)

BOOL StartServiceA(
  SC_HANDLE hService,
  DWORD     dwNumServiceArgs,
  LPCSTR    *lpServiceArgVectors
);
參數(shù)
hService
服務(wù)的句柄瘦穆。此句柄由OpenService或 CreateService函數(shù)返回 ,并且必須具有SERVICE_START訪問(wèn)權(quán)限赊豌。有關(guān)更多信息扛或,請(qǐng)參閱 服務(wù)安全性和訪問(wèn)權(quán)限。

dwNumServiceArgs
lpServiceArgVectors數(shù)組中的字符串?dāng)?shù)碘饼。如果lpServiceArgVectors為NULL熙兔,則此參數(shù)可以為零。

lpServiceArgVectors
以null結(jié)尾的字符串作為參數(shù)傳遞給服務(wù)的ServiceMain函數(shù)艾恼。如果沒(méi)有參數(shù)住涉,則此參數(shù)可以為NULL。

14.CloseServiceHandle

函數(shù)功能:關(guān)閉服務(wù)控件管理器或服務(wù)對(duì)象的句柄钠绍。

BOOL CloseServiceHandle(
  SC_HANDLE hSCObject
);

參數(shù)
hSCObject
服務(wù)控件管理器對(duì)象或要關(guān)閉的服務(wù)對(duì)象的句柄舆声。OpenSCManager函數(shù)返回服務(wù)控制管理器對(duì)象的 句柄,OpenService或 CreateService函數(shù)返回服務(wù)對(duì)象的句柄 。

15.RegCreateKey

函數(shù)功能:注冊(cè)表中創(chuàng)建一個(gè)新的項(xiàng)

(HKEY_LOCAL_MACHINE,"Software\\mykey",&key); 

RegCreateKeyEx  插入主鍵
RegSetValueEx  插入鍵值
RegCloseKey 關(guān)閉

16.RegQueryValueExA

函數(shù)功能:讀取字符串?dāng)?shù)據(jù)出來(lái)

WINADVAPI
LONG
APIENTRY
RegQueryValueExA (
    __in HKEY hKey,
    __in_opt LPCSTR lpValueName,
    __reserved LPDWORD lpReserved,
    __out_opt LPDWORD lpType,
    __out_bcount_opt(*lpcbData) LPBYTE lpData,
    __inout_opt LPDWORD lpcbData
    );
WINADVAPI
LONG
APIENTRY
RegQueryValueExW (
    __in HKEY hKey,
    __in_opt LPCWSTR lpValueName,
    __reserved LPDWORD lpReserved,
    __out_opt LPDWORD lpType,
    __out_bcount_opt(*lpcbData) LPBYTE lpData,
    __inout_opt LPDWORD lpcbData
    );
#ifdef UNICODE
#define RegQueryValueEx RegQueryValueExW
#else
#define RegQueryValueEx RegQueryValueExA
#endif // !UNICODE
hKey是主鍵
lpValueName是鍵值名稱
lpType是類型
lpData是讀出來(lái)數(shù)據(jù)保存地方
lpcbData是讀取數(shù)據(jù)多少

17.FindResourceA

函數(shù)功能:該函數(shù)確定指定模塊中指定類型和名稱的資源所在位置

函數(shù)原型:HRSRC FindResource(HMODULE hModule媳握,LPCTSTR lpName碱屁,LPCTSTR lpType)
參數(shù):
hModule:處理包含資源的可執(zhí)行文件的模塊。NULL值則指定模塊句柄指向操作系統(tǒng)通常情況下創(chuàng)建最近過(guò)程的相關(guān)位圖文件蛾找。

lpName:指定資源名稱娩脾。若想了解更多的信息,請(qǐng)參見(jiàn)注意部分打毛。

lpType:指定資源類型柿赊。若想了解更多的信息,請(qǐng)參見(jiàn)注意部分幻枉。作為標(biāo)準(zhǔn)資源類型碰声。這個(gè)參數(shù)的含義同EnumResLangProc/lpType。

返回值:如果函數(shù)運(yùn)行成功展辞,那么返回值為指向被指定資源信息塊的句柄奥邮。為了獲得這些資源,將這個(gè)句柄傳遞給LoadResource函數(shù)罗珍。如果函數(shù)運(yùn)行失敗洽腺,則返回值為NULL。
hMoule=FindResourceA( NULL, 2058, "XIA")

SizeofResource( NULL, hMoule )        //Returns the size, in bytes, of the specified resource.

handle=LoadResource( NULL, hMoule)    //Returns a handle to be used to obtain a pointer  to the first byte of the resource in memory.

LockResource( handle ) // 鎖定資源并得到資源在內(nèi)存中的第一個(gè)字節(jié)的指針

18.SetFilePointer

函數(shù)功能:在一個(gè)文件中設(shè)置新的讀取位置

DWORD SetFilePointer(
HANDLE hFile, // 文件句柄
LONG lDistanceToMove, // 偏移量(低位)
PLONG lpDistanceToMoveHigh, // 偏移量(高位)
DWORD dwMoveMethod // 基準(zhǔn)位置FILE_BEGIN:文件開(kāi)始位置 FILE_CURRENT:文件當(dāng)前位置 FILE_END:文件結(jié)束位置
說(shuō)明:移動(dòng)一個(gè)打開(kāi)文件的指針

19.CreateFile

函數(shù)功能:這個(gè)函數(shù)的功能是創(chuàng)建或者打開(kāi)一個(gè)文件或者I/O設(shè)備覆旱,通常使用的I/O形式有文件蘸朋、文件流、目錄扣唱、物理磁盤藕坯、卷、終端流等噪沙。如執(zhí)行成功炼彪,則返回文件句柄。 INVALID_HANDLE_VALUE 表示出錯(cuò)正歼,會(huì)設(shè)置 GetLastError 辐马。

HANDLE WINAPI CreateFile(
  _In_      LPCTSTR lpFileName,              
  _In_      DWORD dwDesiredAccess,
  _In_      DWORD dwShareMode,
  _In_opt_  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  _In_      DWORD dwCreationDisposition,
  _In_      DWORD dwFlagsAndAttributes,
  _In_opt_  HANDLE hTemplateFile
);

20.SetFileTime

函數(shù)功能:設(shè)置指定文件或目錄的創(chuàng)建,上次訪問(wèn)或上次修改的日期和時(shí)間局义。

BOOL SetFileTime(
HANDLE hFile,
const FILETIME *lpCreationTime,
const FILETIME *lpLastAccessTime,
const FILETIME *lpLastWriteTime
);

21.CreateProcess

函數(shù)功能:CreateProcess是Windows下用于創(chuàng)建進(jìn)程的API函數(shù),用來(lái)創(chuàng)建一個(gè)新的進(jìn)程和它的主線程喜爷,這個(gè)新進(jìn)程運(yùn)行指定的可執(zhí)行文件。

函數(shù)原型:

BOOL CreateProcess

(
    LPCTSTR lpApplicationName,        
    LPTSTR lpCommandLine,        
    LPSECURITY_ATTRIBUTES lpProcessAttributes萄唇。
    LPSECURITY_ATTRIBUTES lpThreadAttributes,        
    BOOL bInheritHandles,        
    DWORD dwCreationFlags,
    LPVOID lpEnvironment,        
    LPCTSTR lpCurrentDirectory,        
    LPSTARTUPINFO lpStartupInfo,        
    LPPROCESS_INFORMATION lpProcessInformation 
);

22.WaitForSingleObject

函數(shù)功能:等待一個(gè)內(nèi)核對(duì)象變?yōu)橐淹ㄖ獱顟B(tài)

DWORD WaitForSingleObject(
HANDLE hObject, //指明一個(gè)內(nèi)核對(duì)象的句柄
DWORD dwMilliseconds); //等待時(shí)間
該函數(shù)需要傳遞一個(gè)內(nèi)核對(duì)象句柄檩帐,該句柄標(biāo)識(shí)一個(gè)內(nèi)核對(duì)象,如果該內(nèi)核對(duì)象處于未通知狀態(tài)另萤,則該函數(shù)導(dǎo)致線程進(jìn)入阻塞狀態(tài)湃密;如果該內(nèi)核對(duì)象處于已通知狀態(tài),則該函數(shù)立即返回WAIT_OBJECT_0。第二個(gè)參數(shù)指明了需要等待的時(shí)間(毫秒)泛源,可以傳遞INFINITE指明要無(wú)限期等待下去揍障,如果第二個(gè)參數(shù)為0,那么函數(shù)就測(cè)試同步對(duì)象的狀態(tài)并立即返回俩由。如果等待超時(shí),該函數(shù)返回WAIT_TIMEOUT癌蚁。如果該函數(shù)失敗幻梯,返回WAIT_FAILED。

23.TerminateProcess

函數(shù)功能:終止|殺死其它進(jìn)程

 函數(shù)原型:

 BOOL TerminateProcess(HANDLE hProcess,UINT uExitCode)

 參數(shù)說(shuō)明:

 1努释、hProcess:要終止(殺死)進(jìn)程的句柄碘梢,需要有PROCESS_TERMINATE權(quán)限。

 2伐蒂、uExitCode:設(shè)置進(jìn)程的退出值煞躬。可通過(guò)GetExitCodeProcess函數(shù)得到一個(gè)進(jìn)程的退出值逸邦。

 返回值:

 如果失敗將返回FALSE(0)恩沛,而成功將返回一個(gè)非零值。

 注:不要用if(ret==TRUE)去檢測(cè)函數(shù)是否調(diào)用成功缕减,因?yàn)楹瘮?shù)調(diào)用成功會(huì)返回一個(gè)非零值雷客,但不一定是TRUE(1)

24.GetExitCodeProcess

函數(shù)功能:獲取指定進(jìn)程的退出碼

hProcess    Long,想獲取退出代碼的一個(gè)進(jìn)程的句柄 
lpExitCode  Long桥狡,用于裝載進(jìn)程退出代碼的一個(gè)長(zhǎng)整數(shù)變量搅裙。如進(jìn)程尚未中止,則設(shè)為常數(shù)STILL_ACTIVE 

25.CloseHandle

函數(shù)功能:函數(shù)用于關(guān)閉一個(gè)內(nèi)核對(duì)象

BOOL CloseHandle(HANDLE hObject);
參數(shù)
hObject :代表一個(gè)已打開(kāi)對(duì)象handle裹芝。
返回值
TRUE:執(zhí)行成功部逮;
FALSE:執(zhí)行失敗,可以調(diào)用GetLastError()獲知失敗原因嫂易。

26.GlobalAlloc

函數(shù)功能:調(diào)用GlobalAlloc函數(shù)分配一塊內(nèi)存兄朋,該函數(shù)會(huì)返回分配的內(nèi)存句柄。簡(jiǎn)稱全局堆分配

HGLOBAL GlobalAlloc(

UINT uFlags, // 分配屬性(方式)

DWORD dwBytes // 分配的字節(jié)數(shù)

);

27.GetModuleHandle

函數(shù)功能:功能是獲取一個(gè)應(yīng)用程序或動(dòng)態(tài)鏈接庫(kù)的模塊句柄炬搭。只有在當(dāng)前進(jìn)程的場(chǎng)景中蜈漓,這個(gè)句柄才會(huì)有效。

HMODULE WINAPI GetModuleHandle(

_In_opt_LPCTSTR lpModuleName

);

28.GetProcessHeap

函數(shù)功能:它返回調(diào)用進(jìn)程的默認(rèn)堆句柄宫盔。

參數(shù)
函數(shù)無(wú)參數(shù)

返回值
如果函數(shù)成功融虽,返回調(diào)用進(jìn)程的默認(rèn)內(nèi)存堆句柄。
如果函數(shù)失敗灼芭,返回 Null有额。若想,可以調(diào)用GetLastError獲得更多錯(cuò)誤信息。

之后是病毒的加密模塊t.wnry

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末巍佑,一起剝皮案震驚了整個(gè)濱河市茴迁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌萤衰,老刑警劉巖堕义,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異脆栋,居然都是意外死亡倦卖,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門椿争,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)怕膛,“玉大人,你說(shuō)我怎么就攤上這事秦踪『帜恚” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵椅邓,是天一觀的道長(zhǎng)柠逞。 經(jīng)常有香客問(wèn)我,道長(zhǎng)希坚,這世上最難降的妖魔是什么蚓聘? 我笑而不...
    開(kāi)封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任顿苇,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘级野。我一直安慰自己洲胖,他們只是感情好休傍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布搭儒。 她就那樣靜靜地躺著,像睡著了一般获洲。 火紅的嫁衣襯著肌膚如雪阱表。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天贡珊,我揣著相機(jī)與錄音最爬,去河邊找鬼。 笑死门岔,一個(gè)胖子當(dāng)著我的面吹牛爱致,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播寒随,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼糠悯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼帮坚!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起互艾,我...
    開(kāi)封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤试和,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后纫普,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體阅悍,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年昨稼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了溉箕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡悦昵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出晌畅,到底是詐尸還是另有隱情但指,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布抗楔,位于F島的核電站棋凳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏连躏。R本人自食惡果不足惜剩岳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望入热。 院中可真熱鬧拍棕,春花似錦、人聲如沸勺良。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)尚困。三九已至蠢箩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間事甜,已是汗流浹背谬泌。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留逻谦,地道東北人掌实。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像跨跨,于是被迫代替她去往敵國(guó)和親潮峦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子囱皿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說(shuō)明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí),會(huì)觸發(fā)此異常忱嘹。 O...
    我想起個(gè)好名字閱讀 5,319評(píng)論 0 9
  • 一嘱腥、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡(jiǎn)單分配策略的問(wèn)題地址空間不隔離內(nèi)存使用效率低程序運(yùn)行的地址不確定 關(guān)于...
    SeanCST閱讀 7,813評(píng)論 0 27
  • 總結(jié)了一些開(kāi)發(fā)中常用的函數(shù): usleep() //函數(shù)延遲代碼執(zhí)行若干微秒。 unpack() //函數(shù)從二進(jìn)制...
    ADL2022閱讀 454評(píng)論 0 3
  • 第二部分 接上面的分析拘悦,前面的wcry程序只是進(jìn)行鋪墊齿兔,主要為后面的加密做輔助,病毒進(jìn)入TaskStart后础米,才真...
    Ginkgo_Alkaid閱讀 3,087評(píng)論 0 2
  • PHP常用函數(shù)大全 usleep() 函數(shù)延遲代碼執(zhí)行若干微秒分苇。 unpack() 函數(shù)從二進(jìn)制字符串對(duì)數(shù)據(jù)進(jìn)行解...
    上街買菜丶迷倒老太閱讀 1,369評(píng)論 0 20