Skip to content

ONHEXGROUP

اخبار دنیای امنیت سایبری

  • اخبار
    • آسیب پذیری امنیتی
    • آنالیز بدافزار
    • کنفرانس ،دوره ، وبینار ، لایو ، CTF
    • بازیگران تهدید
    • توسعه اکسپلویت
    • افشای اطلاعات
    • باگ بانتی
    • تیم آبی
    • تیم قرمز
    • امنیت وب
  • دوره های آموزشی
    • دوره رایگان مهندسی معکوس نرم افزار
    • دوره ی رایگان بررسی ساختار فایلهای PE (Portable Executable)
  • لیست های ویژه
    • موتورهای جستجو برای امنیت سایبری
    • کاتالوگ KEV آژانس CISA
    • آسیب پذیری های وردپرس
      • آسیب پذیری پلاگین ها
      • آسیب پذیری های هسته
      • آسیب پذیری تم ها
    • محصولات خارج از پشتیبانی مایکروسافت
      • محصولات مایکروسافتی که در سال 2022 پشتیبانی نمیشن
      • محصولات مایکروسافتی که در سال 2023 پشتیبانی نمیشن
      • لیست محصولات مایکروسافتی که در سال 2024 پشتیبانی نمیشن
      • لیست محصولات مایکروسافتی که در سال 2025 پشتیبانی نمیشن
    • معرفی فیلم ها و سریالهای مرتبط با هک و امنیت
  • آموزش های ویدیویی
  • انتشارات
    • مجله
    • مقالات
    • پادکست
  • پروژه ها
    • ماشین آسیب پذیر
      • وردپرس آسیب پذیر
  • حمایت مالی ( Donate)
  • تماس با ما
 
  • Home
  • اخبار
  • پیاده سازی تکنیک Etherhiding
  • آنالیز بدافزار
  • اخبار
  • بازیگران تهدید
  • مقالات

پیاده سازی تکنیک Etherhiding

On آبان 7, 1404آبان 7, 1404
seyyid
Share
زمان مطالعه: 9 دقیقه

گوگل اخیرا گزارش هایی در خصوص یک تکنیک جدید بنام Etherhiding منتشر کرده و در اون توضیح داده که چطوری بازیگران تهدید UNC5142 و UNC5342 با استفاده از Etherhiding، از قابلیتهای بلاکچین، برای توزیع بدافزار استفاده میکنن.

در این پست، برای آشنایی عملی با این تکنیک، میخواییم یک دمو ساده از Etherhiding، رو پیاده سازی کنیم. هدف از این پیاده سازی، کمک به محققین امنیتی برای درک نحوه ی کار این تکنیک و شناسایی ساده تر اون در شبکه ها هستش.

 

سلب مسئولیت: این آموزش منحصراً برای اهداف آموزشی، تحقیقات امنیت سایبری و افزایش آگاهی فنی تهیه شده و هرگونه سوء استفاده از این دانش، صرفاً بر عهده کاربر نهایی است.

 

نمای کلی:

برای پیاده سازی تکنیک Etherhiding، کاری که میخواییم انجام بدیم این هستش که یک قرارداد هوشمند توسعه میدیم که رشته ی “Onhexgroup: Hi from BlockChain” رو برای ما بر میگردونه. برای اینکه بتونیم این متن رو نمایش بدیم، یک صفحه ی HTML توسعه میدیم که کاربر با کلیک روی یک دکمه، متن مورد نظر رو از بلاکچین بگیره و در صفحه مشاهده کنه.

برای اینکه بتونیم این پروژه رو پیاده سازی کنیم، نیاز به چندین قدم داریم:

 

 

کدهای پروژه رو میتونید از گیتهاب دانلود کنید، همچنین یک ویدیو در یوتیوب قرار دادم که میتونید مراحل پیاده سازی رو اونجا هم مشاهده کنید.

 

 

قدم اول: نصب افزونه ی متامسک:

متامسک (MetaMask) یک کیف پول دیجیتال (Cryptocurrency Wallet) و در عین حال یک درگاه ارتباطی با بلاکچین اتریوم هستش. به زبان ساده، ابزاری هستش که به کاربر اجازه میده با برنامه‌ های غیرمتمرکز (DApps) روی بلاکچین اتریوم و شبکه‌ های سازگار با اون (مثل BSC، Polygon، Avalanche و …) تعامل داشته باشه.

برای اینکه بتونیم، قرار داد هوشمندمون رو در یک بلاکچین مستقر کنیم، نیاز به نصب متامسک داریم.

برای اینکه بتونیم متامسک رو داشته باشیم، از نسخه ی افزونه ی مرورگر اون استفاده میکنیم. با توجه به اینکه من از نسخه ی فایرفاکس استفاده میکنم، این افزونه رو روی فایرفاکس نصب میکنم.

 

پیاده سازی تکنیک Etherhiding

 

بعد از نصب متامسک، باید یک اکانت جدید ایجاد کنیم، اگر قبلا اکانتی داشتید، میتونید از اون هم استفاده کنید.

 

 

قدم دوم: اضافه کردن شبکه ی تست SEPOLIA به متامسک:

در بلاکچین هایی مثل اتریوم، هر تراکنش روی شبکه اصلی (Mainnet) هزینه داره، چون باید هزینه ی Gas با ارز واقعی (مثل ETH) پرداخت بشه. اما توسعه‌ دهندگان معمولا نمیخوان برای تست یا توسعه برنامه‌های غیرمتمرکز (DApp) از پول واقعی استفاده کنن. به همین دلیل، شبکه‌ های تستی یا Testnets ساخته شدن، محیطهایی مشابه شبکه اصلی، ولی بدون ارز واقعی. Sepolia یکی از شبکه‌ های رسمی تست اتریوم هستش که میتونیم ازش استفاده کنیم. برای این کار باید شبکه ی Sepolia رو به متامسک اضافه کنیم.

برای این منظور روی سه خط بالای متامسک کلیک میکنیم و Networks رو انتخاب کرده و گزینه ی Show test networks رو فعال میکنیم.

 

 

حالا متامسک ما میتونه با شبکه ی تست Sepolia تعامل داشته باشه.

 

قدم سوم: افزودن مقداری اتریوم رایگان به متامسک:

همونطور که بالا اشاره کردیم، هدف ما از استفاده از شبکه ی تستی Sepolia، عدم هزینه هستش. این عدم هزینه، یعنی اینکه ما هزینه میکنیم اما از جیب خودمون نه.

در بلاکچین، واژه‌ی Faucet به سرویسی گفته میشه که مقدار کمی رمزارز رایگان (معمولا در شبکه‌ی تست) به کاربران میده تا بتونن بدون پرداخت واقعی، تراکنشها یا قراردادهای هوشمند رو تست کنن. هدف اصلی اون، آموزش، تست و توسعه هستش. برای جلوگیری از سوء استفاده، اکثر Faucetها، فقط مقدار کمی کوین در فواصل زمانی مشخص (مثلا هر ۲۴ ساعت) میدن.

Ethereum Sepolia Faucet سرویس هایی هستن که به شما مقدار کمی اتریوم تستی در شبکه‌ی Sepolia میدن. با این اتریوم میتونیم: قرارداد هوشمند رو در شبکه‌ی تست مستقر کنیم، تراکنش بفرستید، گس (Gas) رو تست کنیم، و بدون هزینه واقعی، رفتار شبکه رو شبیه‌ سازی کنیم.

برای این منظور سرویسهای مختلفی وجود داره مانند QuickNode یا Alchemy، ولی این سرویسها محدودیتهایی دارن. مثلا باید اکانتتون 0.001 اتریوم داشته باشه (حدودا 500 هزار تومان) یا قبلا با والت متامسکتون تراکنشی انجام داده باشید. هدف از این محدودیتها جلوگیری از سوء استفاده باتها هستش.

با جستجویی که در اینترنت انجام دادم، به این سرویس رسیدم که خیلی راحت تونستم 0.05 اتریوم به والت متامسک انتقال بدم. برای اینکه بتونید از این سرویس استفاده کنید، نوع شبکه رو روی Ethereum Sepolia، و آدرس والت اتریوم رو از متامسک در فیلد مربوطه کپی کنید.

 

 

برای مشاهده ی مقدار دریافتی، در قسمت Activity، مقدار Ethereum mainnet رو به Sepolia تغییر بدید. برای این منظور روی Ethereum mainnet کلیک کنید، Custom رو انتخاب و در ادامه Sepolia رو فعال کنید.

 

 

خب تا اینجای کار ما هزینه ی استقرار قرارداد هوشمند رو تامین کردیم.

 

قدم چهارم: توسعه ی قرار داد هوشمند:

قرارداد هوشمند (Smart Contract) برنامه‌ای هستش که روی بلاکچین اجرا میشه و قوانین و شرایط یک قرارداد رو بصورت خودکار و بدون نیاز به واسطه (مثل بانک یا وکیل) اجرا میکنه. به زبان ساده‌تر: قرارداد هوشمند مثل یک “ربات خودکار” روی بلاک‌چین هستش که وقتی شرایط خاصی برآورده بشه، خودش عمل تعیین‌ شده رو انجام میده.

قرارداد هوشمندی که ما میخواییم توسعه بدیم، کارش این هستش که، وقتی فراخوانی میشه، رشته ی “Onhexgroup: Hi from BlockChain” رو برمیگردونه.

با توجه به اینکه قرارداد هوشمند یک برنامه هستش، بنابراین نیاز به یک زبان برنامه نویسی و یک محیط توسعه داریم. برای زبان برنامه نویسی از سالیدیتی (Solidity) و برای محیط توسعه از Remix استفاده میکنیم.

Remix محیطی مشابه VSCode داره:

 

 

برای اینکه بتونید قرار هوشمندمون رو توسعه بدیم، وارد فولدر contracts میشیم و همه ی فایلهای موجود در این فولدر رو پاک میکنیم و یک فایل جدید با نام ethhidedemo.sol ایجاد میکنیم.

 

 

حالا داخل این فایل، کدهای زیر رو قرار میدیم:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
 
contract EtherHiding {
    string private message;
    constructor() {
        message = "Onhexgroup: Hi from BlockChain";
    }
 
    function getMessaage() public view returns (string memory) {
        return message;
    }
}

 

در این کدها که به زبان سالیدیتی هستن، یک متغیر با نام message با مقدار Onhexgroup: Hi from BlockChain تعریف شده. در ادامه یک تابع با نام getMessaage تعریف کردیم که مقدار message رو برمیگردونه.

 

قدم پنجم: کامپایل کدهای قرارداد هوشمند:

برای اینکه این قرارداد هوشمند اجرا بشه، باید مثله زبانهایی مانند سی، کامپایل بشه. برای اینکه بتونیم، قرار داد هوشمند رو کامپایل کنیم، وارد گزینه ی چهارم از منوی کناری Remix میشیم.

 

 

بعد از اینکه وارد قسمت کامپایل شدیم (در شکل، شماره 1)، با استفاده از (2)، میتونیم نسخه ی کامپایلر رو مشخص کنیم، که همون نسخه ی پیش فرض رو انتخاب میکنیم. در نهایت با انتخاب Compile ethhidedeme.sol (در شکل، شماره 3)، میتونیم کدهامون رو کامپایل و به بایت کد (Bytecode) تبدیل کنیم. اگه تیک سبز، ظاهر شد، یعنی کامپایل با موفقیت انجام شده.

 

 

قدم ششم: کپی ABI قرارداد هوشمند:

وقتی یک قرارداد هوشمند رو با زبانهایی مثل Solidity مینویسیم و در شبکه مستقر میکنیم، کد اون به بایت‌کد تبدیل میشه، ولی این بایت‌کد برای انسان قابل‌ خواندن نیست. برای اینکه بشه بعدا از بیرون (مثلا با web3.js یا ethers.js یا متامسک) با اون قرارداد ارتباط برقرار کنیم، باید بدونیم: چه توابعی داره، چه ورودیها و خروجیهایی داره، چه نوع داده‌هایی میگیره. این اطلاعات در قالب (ABI) Application Binary Interface ذخیره میشه.

برای اینکه ABI قراردادمون رو بدست بیاریم، باید به انتهای بخش کامپایل مراجعه کنیم.

 

 

کدهای این قسمت رو که بصورت json هستن رو جایی کپی کنید، که بعدا ازش استفاده میکنیم.

 

قدم هفتم: استقرار قرارداد هوشمند:

بعد از اینکه قرارداد هوشمند رو توسعه و کامپایل کردیم، باید در یک بلاکچین قرار بدیم. همونطور که بالا اشاره شد، میخوایم از شبکه تستی Sepolia استفاده کنیم.

برای استقرار وارد بخش Deploy & run transactions یا گزینه ی پنجم از منوی کناری میشیم.

 

 

توضیحات مربوط به شکل:

  1. با کلیک روش، وارد بخش Deploy & run transactions میشیم.
  2. مشخص کننده محیط استقرار و تست قرارداد هوشمند.
  3. مشخص کننده اکانت ما
  4. مشخص کننده قرار داد هوشمند
  5. برای استقرار قرارداد هوشمند استفاده میشه.
  6. مشخص کننده آدرس قرارداد هوشمند

 

با توجه به اینکه ما میخواییم قراردادمون رو در شبکه تستی Sepolia مستقر کنیم و هزینه ی استقرار رو از طریق متامسک پرداخت کنیم، در قسمت Environment، گزینه ی Browser extension و بعدش Injected provider-Metamask رو انتخاب میکنیم.

 

 

بعد از انتخاب گزینه بالا، و اتصال متامسک به Remix، در قسمت اکانت آدرس والت متامسک ظاهر میشه.

 

 

در ادامه در قسمت Contract، قرارداد هوشمند مورد نظرمون رو انتخاب میکنیم و در نهایت روی Deploy کلیک میکنیم تا با کسر هزینه از اترهای تستی، قرارداد هوشمند ما رو در شبکه ی Sepolia مستقر کنه.

 

 

اگه همه چیز با موفقیت انجام بشه، آدرس قرارداد هوشمند رو میتونیم در قسمت Deployed Contracts مشاهده کنیم.

 

 

قدم هشتم: استفاده از Infura RPC:

تا اینجای کار ما قرارداد هوشمند رو توسعه و در بلاکچین قرار دادیم. برای اینکه بتونیم با این قرارداد هوشمند تعامل داشته باشیم، نیاز به یک واسط داریم. در حقیقت ما از طریق سایت به این واسط درخواست میزنیم و این واسط درخواست ما رو به بلاکچین منتقل میکنه. جواب رو میگیره و به سایت برمی گردونه. برای اینکار میخواییم از سرویس Infura RPC استفاده کنیم.

RPC مخفف Remote Procedure Call هستش و در بلاکچین به روشی گفته میشه که برنامه‌ها (مثل Remix یا Metamask) میتونن از راه دور با یک گره (Node) در شبکه‌ی بلاکچین ارتباط برقرار کنن. به بیان ساده، RPC یعنی درخواست از راه دور برای اجرای یک دستور روی بلاکچین. مثلا وقتی در Remix روی Deploy کلیک میکنیم، در واقع با استفاده از RPC یک درخواست ارسال میکنیم تا قرارداد روی بلاک‌چین مستقر بشه.

برای RPC میخواییم از سرویس INFURA استفاده کنیم. برای این منظور در سایت INFURA ثبت نام و پلن Free رو انتخاب میکنیم. در پلن Free یک API Key برای ما ساخته میشه که اگه روش کلیک کنیم و وارد بخش Active Endpoints بشیم قابل مشاهده هستش.

در این قسمت لینکهای مختلفی رو مشاهده میکنید، چیزی که ما دنبالش هستیم، Ethereum Sepolia هستش.

 

1
https://sepolia.infura.io/v3/[Your_API_KEY]

 

قدم نهم: توسعه بخش وب

خب تا اینجای کار ما بخشی از قطعات پازل رو داریم:

  • آدرس قرارداد هوشمند
  • آدرس نقطه پایانی Infura RPC
  • مقدار ABI

تنها بخشی که باقی مونده، توسعه یک صفحه وب برای تعامل با قرارداد هوشمند هستش. برای این منظور یک فایل index.html ایجاد میکنیم و کدهای زیر رو داخلش قرار میدیم:

 

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<!DOCTYPE html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Etherhiding Demo</title>
    <style>
        body { font-family: Tahoma, sans-serif; display: grid; place-items: center; min-height: 100vh; background-color: #f0f2f5; text-align: center; direction: rtl; }
        .container { background: #fff; padding: 2rem; border-radius: 8px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); }
        button { background-color: #28a745; color: white; border: none; padding: 10px 20px; font-size: 16px; border-radius: 5px; cursor: pointer; transition: background-color 0.3s; }
        button:hover { background-color: #218838; }
        #message { margin-top: 20px; font-size: 1.2rem; font-weight: bold; color: #333; min-height: 30px; }
    </style>
    <script src="https://cdn.jsdelivr.net/npm/ethers@5.7.2/dist/ethers.umd.min.js"></script>
</head>
<body>
 
    <div class="container">
        <h1>Etherhiding Demo</h1>
        <p>Click For read message from blockchain</p>
        
        <button id="readButton">Read Message</button>
        
        <p id="message"></p>
    </div>
 
    <script>
        const contractAddress = "Copy Your Deployed Contracts addresss";
        const infuraUrl = "Copy Your infura Url";
 
        const abi = [
"Copy your ABI"
];
 
        const readButton = document.getElementById("readButton");
        const messageArea = document.getElementById("message");
 
        async function readMessageFromBlockchain() {
            try {
                messageArea.innerText = "Connectiong to BlockChain ...";
                const provider = new ethers.providers.JsonRpcProvider(infuraUrl);
                const contract = new ethers.Contract(contractAddress, abi, provider);
 
                messageArea.innerText = "Reading Message ...";
                const data = await contract.getMessaage();
                messageArea.innerText = `Message: "${data}"`;
 
            } catch (error) {
                console.error(error);
                messageArea.innerText = "Error: " + (error.message || error);
            }
        }
 
        readButton.addEventListener("click", readMessageFromBlockchain);
    </script>
 
</body>
</html>

 

فقط آدرس قرارداد هوشمند، ABI و آدرس Infura RPC رو در کدها با مقادیر خودتون، تنظیم کنید.

 

قدم دهم: اجرا

در نهایت همه چیز فراهم هستش تا پروژه امون رو اجرا کنیم. برای اینکه موقع اجرا مشکلاتی مانند Content Security Policies (CSP) پیش نیاد، یک سرور پایتون اجرا میکنیم و از طریق اون صفحه وب رو بالا میاریم. البته اگه پایتون نداشتید، میتونید گزینه های دیگه مانند Live Server در VS Code یا Node.js HTTP Server و … هم استفاده کنید.

برای پایتون کافی دستور زیر رو بزنیم:

 

1
python -m http.server 8000

 

حالا میتونیم از طریق آدرس http://[::1]:8000، صفحه وب رو اجرا کنیم:

 

 

اگه روی Read Message کلیک کنیم:

 

 

 

 

اشتراک در شبکه های اجتماعی :

Facebook
Twitter
Pinterest
LinkedIn
In آنالیز بدافزار اخبار بازیگران تهدید مقالاتIn Cryptocurrency , EtherHiding , metamask , Smart contract , ارز دیجیتال , بلاکچین , قرارداد هومشند , متامسک

راهبری نوشته

افشای 80 میلیارد اعتبارنامه
مسابقه پلاگین نویسی 2025 IDA

دیدگاهتان را بنویسید لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دسته‌ها

  • Osint
  • آسیب پذیری امنیتی
  • آموزش های ویدیویی
  • آنالیز بدافزار
  • اخبار
  • افشای اطلاعات
  • امنیت وب
  • انتشارات
  • اینترنت اشیاء
  • بازیگران تهدید
  • باگ بانتی
  • پادکست
  • پروژه ها
  • توسعه اکسپلویت
  • تیم آبی
  • تیم قرمز
  • دوره های آموزشی
  • فازینگ
  • کنفرانس ،دوره ، وبینار ، لایو ، CTF
  • لیست های ویژه
  • ماشین آسیب پذیر
  • مجله
  • مصاحبه، داستان هکرها
  • مقالات
  • مهندسی معکوس نرم افزار
  • هوش مصنوعی

پست های مرتبط

  • اخبار
  • بازیگران تهدید
seyyid
On اسفند 10, 1401فروردین 28, 1402

فریمورک Exfiltrator-22 ابزاری برای توزیع باج افزار

  • آنالیز بدافزار
  • اخبار
  • بازیگران تهدید
seyyid
On اردیبهشت 23, 1402خرداد 27, 1402

نگاهی به باج افزارها : آوریل 2023

  • آسیب پذیری امنیتی
  • اخبار
seyyid
On دی 23, 1401فروردین 28, 1402

هشدار سیسکو در خصوص CVE-2023-20025 و CVE-2023-20026

  • آسیب پذیری امنیتی
  • اخبار
seyyid
On تیر 31, 1402تیر 31, 1402

بررسی هفتگی آسیب پذیری های منتشر شده در ZDI – (24 تا 30 تیر)

درباره ما

بعد از چندین سال فعالیت تو حوزه امنیت سایبری و تولید محتوا در شبکه های اجتماعی ، بالاخره تصمیم گرفتیم تا یه سایت راه اندازی کنیم و مطالب رو ساده تر ، در یک محیط منسجم و طبقه بندی شده به دست مخاطب برسونیم. امیدوارم که قدمی در راستای رشد امنیت سایبری کشورمون برداشته باشیم.

تگ ها

0day APT command injection Deserialization of Untrusted Data Directory Traversal FBI Fortinet Heap buffer overflow kali LockBit Memory Corruption nuclei out-of-bounds write Out of bounds read Patch Tuesday PWN2OWN Stack Buffer overflow type confusion use after free vulnerable wordpress XSS ZDI vulnerability آموزش اکسپلویت نویسی ارز دیجیتال اندروید اپل اکسپلویت باج افزار تلگرام زیرودی سیسکو فارنزیک فورتی نت فیشینگ لاک بیت لینوکس مایکروسافت هوش مصنوعی وردپرس وردپرس آسیب پذیر ویندوز پلاگین کالی کروم گوگل

شبکه های اجتماعی

    • اینستاگرم
    • تلگرام
    • توییتر
    • گیت‌هاب
    • یوتیوب
    • لینکداین
      کپی مطالب با ذکر منبع بلامانع است | 1401-1404