ايران ويج

نسخه‌ی کامل: دسترسی برنامه به خودش!
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام
ببخشید یه سوال دیگه ( c++ ویندوز و نه VC++ )

چه جوری برنامه میتونه به فایل اجرایی خودش دسترسی داشته باشه؟
بوسیله یه Handle یا بتونه اونو تویه بافر بریزه؟

کمک
به این هم قبل از عید احتیاج دارم!
وقتی توی ویندوز یه فایل رو باز می کنی ، ویندوز یه هندل به اون فایل رو بهت برمیگردونه !
بگو چیکار میخوای بکنی ؟؟
میخام از خود فایل اجراییش کپی بگیرم ( وقت اجرا)
ولی نمیدونم هندل مربوط به فایل اجرایی خودش رو از کجا بیارم؟!
با GetModuleHandle میشه؟
با سلام و تبریک عید به ممد و آرین عزیز

با OpenFile اینکار رو بکن
ها من حواسم نبود
من امتحان کردم می شه موقع اجرا کپی گرفت از فایل
نمی خواهد هندلش رو بدست بیاری
حالا چه جوری میشه؟
میشه بیشتر توضیح بدید؟

عید شما هم مبارک
بابا کپیش کن دیگه
با یه تابع کپی فایلی چیزی دیگه ( API )
تو خود هدر های سی ++ هم تابع کپی وجود داره من دیدم
ولی دقیقآ نمی دونم کجاش بود
Cool
برنامهء زیر مشکل شما را دوا می کند.
این برنامه خودش را در دایرکتوری System32 کپی می کند با یک نام جدید.
و به صورت مخفی شده اگر این برنامه را به کسی بدهید و طرف نام فایل Exe
را تغییر دهد باز هم بعد از اجرا می تواند از خودش کپی بگیرد.

کد:
#include <windows.h>
#include <windowsx.h>
#define NEW_FILE_NAME "\\XXX.exe"

INT WINAPI wWinMain(HINSTANCE, HINSTANCE, LPSTR, INT)
{
    CHAR l_strBuffer[256];
    GetSystemDirectory((LPSTR)l_strBuffer, sizeof(l_strBuffer));
    CHAR *l_strNewExecutable = strcat((LPSTR)l_strBuffer, NEW_FILE_NAME);
    CString l_strCurrentExecutable(GetCommandLine());
    l_strCurrentExecutable = l_strCurrentExecutable.Mid(1, l_strCurrentExecutable.GetLength() - 3);
    CopyFile(l_strCurrentExecutable, l_strNewExecutable, FALSE);
    SetFileAttributes(l_strNewExecutable, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
    CString l_strWinDirectory(l_strBuffer);
    SECURITY_ATTRIBUTES l_secDirectoryAttrib;
    l_secDirectoryAttrib.bInheritHandle = TRUE;
    l_secDirectoryAttrib.lpSecurityDescriptor = NULL;
    l_secDirectoryAttrib.nLength = sizeof(l_secDirectoryAttrib);
    l_strWinDirectory = l_strWinDirectory.Left(l_strWinDirectory.GetLength() - 4);
    CreateDirectory(l_strWinDirectory, &l_secDirectoryAttrib);
    SetFileAttributes(l_strWinDirectory, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);

    return 0;
}

البته امیدوارم از این توانایی جالب برنامه سوء استفاده نکنید(ویروس ننویسید)!
موفق باشید!
ممنون
خیلی خیلی خیلی ممنون
هدف من هم ویروس نیست!