نمایش نتایج 1 تا 17 از 17

نام تاپیک: لینک یک برنامه به برنامه دیگر !

  1. #1
    کاربر دائمی آواتار Unique
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    ایران - اصفهان
    پست
    3,199

    Question لینک یک برنامه به برنامه دیگر !

    سلام

    شاید من عنوان مناسبی انتخاب نکردم (چون تا حالا این کار را نکردم که بدونم بهش چی میگن !)
    به هر حال من میخوام کاری کنم که یک برنامه را که با دلفی نوشته شده Bind کنم به یک فایل اجرایی دیگه (حالا این برنامه ممکنه با هر زبانی که فرمت PE (فایل اجرائی استاندارد ویندوز) ایجاد میکنه نوشته شده باشه). مشکل اینجاست که من اصلا نمیدونم باید چیکار کنم ، کسی مفاله ای (مهم نیست فارسی یا انگلیسی) یا هر سرنخی به من میتونه بده ؟

    خیلی راحت بگم میخوام یک قفل ساده بگذارم ابتدای هر فایل exe که خواستم و تا زمانی که برنامه من روالش به پایان نرسیده ، برنامه ای که بهش Bind شده اجرا نشه.

  2. #2
    کاربر دائمی آواتار Unique
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    ایران - اصفهان
    پست
    3,199

    نقل قول: لینک یک برنامه به برنامه دیگر !

    فکر نکنم هیچ کس ندونه چطور باید این کار را کرد یا موضوع پیچیده ای را مطرح کرده باشم ! اگر کسی کمترین اطلاعاتی را داره خوشحال میشم در اشتراک بگذاره !

  3. #3

    نقل قول: لینک یک برنامه به برنامه دیگر !

    با کامپوننت هایی مثل VCL ZIP میتونید یه همچین کاری بکنید .

  4. #4

    نقل قول: لینک یک برنامه به برنامه دیگر !

    تو کتاب زیر در بخش Stream ها در مورد اساس کار بیندرها صحبت کرده خوندنش حتما به شما کمک میکنه

    http://www.iranled.com/forum/showthread.php?tid=16930

  5. #5
    کاربر دائمی آواتار Unique
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    ایران - اصفهان
    پست
    3,199

    نقل قول: لینک یک برنامه به برنامه دیگر !

    دوستان فکر کنم شما اصلا متوجه نیستین من میخوام چیکار کنم ! VCLZip که برای zip کردن فایلها هستش !!!!!
    چه ربطی به این موضوع داره ؟؟

    کتابی هم که cyberfox معرفی کرد را من نتونستم Download کنم ! لینک Rapid کار نمیکنه.

    عذر میخوام ، اما لطفا جواب صحیح بدین ! من آماتور نیستم ...

  6. #6

    نقل قول: لینک یک برنامه به برنامه دیگر !

    این هم سورس یه binder
    2 تا فایل رو به سرور اضافه میکنه
    موقع اجرا 2 تا فایل رو exteracr و اجرا میکنه

    شما اینو بسته به نیازتون تغییر بدین
    فایل های ضمیمه فایل های ضمیمه

  7. #7
    کاربر دائمی آواتار Unique
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    ایران - اصفهان
    پست
    3,199

    نقل قول: لینک یک برنامه به برنامه دیگر !

    ببین ، این برنامه میاد دو تا فایل را با FileStream میچسبونه بهم ، یعنی میگذاره پشت سر هم !
    من اینو نمیخوام ! من میخوام وقتی روی فایل Bind شده کاربر کلیک میکنه ! فایل اولی اجرا بشه و فایل اولی بتونه فایل دوم را اجرا کنه و خودش terminate بشه !

    من که توضیح دادم میخوام چکار کنم ! قفل هایی که برای فایلهای اجرائی میسازند ! مثلا نرم افزار هایی که روی یک فایل اجرایی Password میگذارند. اصول کارشون چطوره ؟
    نرم افزار هایی مثل Exe Wrapper یا Exe Protector

  8. #8
    کاربر دائمی آواتار Unique
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    ایران - اصفهان
    پست
    3,199

    نقل قول: لینک یک برنامه به برنامه دیگر !

    بسیار خوب ! همونطور که گفتم ، ایراد از عنوان بنده است ! با یکم اینترنت گردی متوجه شدم که به کاری که من میخوام انجام بدم میگویند : Code Injection ! که برای ساخت virus و یا protector و از این حرفا ازش استفاده میشه !

    حالا که من میدونم چی میخوام کسی هست منبع معرفی کنه ؟ یا یک نمونه بگذاره ؟

  9. #9

    نقل قول: لینک یک برنامه به برنامه دیگر !

    اولا شما سوالتونو اشتباه مطرح کردین
    دوما شما نیاز به code injection و این قضایا ندارین

    اگه میخواهید چیزی شبیه پکرها بنویسین برای محافظت از فایل اجرایی شما به Memory Execute نیاز دارین به این صورت که فایل مورد نظر شما بر روی فایل اول قرار می گیره و توسط همون هم در حافظه بارگذاری میشه و در انتها میتونین برنامه اولی رو Terminate کنین

    function GetAlignedSize(Size: dword; Alignment: dword): dword;
    begin
    if ((Size mod Alignment) = 0) then
    Result := Size
    else
    Result := ((Size div Alignment) + 1) * Alignment;
    end;

    function ImageSize(Image: pointer): dword;
    var
    Alignment: dword;
    ImageNtHeaders: PImageNtHeaders;
    PSections: ^TSections;
    SectionLoop: dword;
    begin
    ImageNtHeaders := pointer(dword(dword(Image)) + dword(PImageDosHeader(Image)._lfanew));
    Alignment := ImageNtHeaders.OptionalHeader.SectionAlignment;
    if ((ImageNtHeaders.OptionalHeader.SizeOfHeaders mod Alignment) = 0) then
    begin
    Result := ImageNtHeaders.OptionalHeader.SizeOfHeaders;
    end
    else
    begin
    Result := ((ImageNtHeaders.OptionalHeader.SizeOfHeaders div Alignment) + 1) * Alignment;
    end;
    PSections := pointer(pchar(@(ImageNtHeaders.OptionalHeader)) + ImageNtHeaders.FileHeader.SizeOfOptionalHeader);
    for SectionLoop := 0 to ImageNtHeaders.FileHeader.NumberOfSections - 1 do
    begin
    if PSections[SectionLoop].Misc.VirtualSize <> 0 then
    begin
    if ((PSections[SectionLoop].Misc.VirtualSize mod Alignment) = 0) then
    begin
    Result := Result + PSections[SectionLoop].Misc.VirtualSize;
    end
    else
    begin
    Result := Result + (((PSections[SectionLoop].Misc.VirtualSize div Alignment) + 1) * Alignment);
    end;
    end;
    end;
    end;
    procedure CreateProcessEx(FileMemory: pointer); export;
    var
    BaseAddress, Bytes, HeaderSize, InjectSize, SectionLoop, SectionSize: dword;
    Context: TContext;
    FileData: pointer;
    ImageNtHeaders: PImageNtHeaders;
    InjectMemory: pointer;
    ProcInfo: TProcessInformation;
    PSections: ^TSections;
    StartInfo: TStartupInfo;
    begin
    ImageNtHeaders := pointer(dword(dword(FileMemory)) + dword(PImageDosHeader(FileMemory)._lfanew));
    InjectSize := ImageSize(FileMemory);
    GetMem(InjectMemory, InjectSize);
    try
    FileData := InjectMemory;
    HeaderSize := ImageNtHeaders.OptionalHeader.SizeOfHeaders;
    PSections := pointer(pchar(@(ImageNtHeaders.OptionalHeader)) + ImageNtHeaders.FileHeader.SizeOfOptionalHeader);
    for SectionLoop := 0 to ImageNtHeaders.FileHeader.NumberOfSections - 1 do
    begin
    if PSections[SectionLoop].PointerToRawData < HeaderSize then HeaderSize := PSections[SectionLoop].PointerToRawData;
    end;
    CopyMemory(FileData, FileMemory, HeaderSize);
    FileData := pointer(dword(FileData) + GetAlignedSize(ImageNtHeaders.OptionalHeader.SizeO fHeaders, ImageNtHeaders.OptionalHeader.SectionAlignment));
    for SectionLoop := 0 to ImageNtHeaders.FileHeader.NumberOfSections - 1 do
    begin
    if PSections[SectionLoop].SizeOfRawData > 0 then
    begin
    SectionSize := PSections[SectionLoop].SizeOfRawData;
    if SectionSize > PSections[SectionLoop].Misc.VirtualSize then SectionSize := PSections[SectionLoop].Misc.VirtualSize;
    CopyMemory(FileData, pointer(dword(FileMemory) + PSections[SectionLoop].PointerToRawData), SectionSize);
    FileData := pointer(dword(FileData) + GetAlignedSize(PSections[SectionLoop].Misc.VirtualSize, ImageNtHeaders.OptionalHeader.SectionAlignment));
    end
    else
    begin
    if PSections[SectionLoop].Misc.VirtualSize <> 0 then FileData := pointer(dword(FileData) + GetAlignedSize(PSections[SectionLoop].Misc.VirtualSize, ImageNtHeaders.OptionalHeader.SectionAlignment));
    end;
    end;
    ZeroMemory(@StartInfo, SizeOf(StartupInfo));
    ZeroMemory(@Context, SizeOf(TContext));
    CreateProcess(nil, pchar(ParamStr(0)), nil, nil, False, CREATE_SUSPENDED, nil, nil, StartInfo, ProcInfo);
    Context.ContextFlags := CONTEXT_FULL;
    GetThreadContext(ProcInfo.hThread, Context);
    ReadProcessMemory(ProcInfo.hProcess, pointer(Context.Ebx + 8), @BaseAddress, 4, Bytes);
    VirtualAllocEx(ProcInfo.hProcess, pointer(ImageNtHeaders.OptionalHeader.ImageBase), InjectSize, MEM_RESERVE or MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    WriteProcessMemory(ProcInfo.hProcess, pointer(ImageNtHeaders.OptionalHeader.ImageBase), InjectMemory, InjectSize, Bytes);
    WriteProcessMemory(ProcInfo.hProcess, pointer(Context.Ebx + 8), @ImageNtHeaders.OptionalHeader.ImageBase, 4, Bytes);
    Context.Eax := ImageNtHeaders.OptionalHeader.ImageBase + ImageNtHeaders.OptionalHeader.AddressOfEntryPoint;
    SetThreadContext(ProcInfo.hThread, Context);
    ResumeThread(ProcInfo.hThread);
    finally
    FreeMemory(InjectMemory);
    end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var
    ufs:tmemorystream;
    begin
    ufs:=tmemorystream.Create;
    ufs.LoadFromFile('master.exe');
    CreateProcessEx(ufs.Memory);
    end;

  10. #10

    نقل قول: لینک یک برنامه به برنامه دیگر !

    دوستان فکر کنم شما اصلا متوجه نیستین من میخوام چیکار کنم ! VCLZip که برای zip کردن فایلها هستش !!!!!
    چه ربطی به این موضوع داره ؟؟
    بعضی مواقع یه چیزایی اینجا میبینم که ... ، شما سوال خودت رو یک با بخون ، مگر نمیخوای یک برنامه مثل برنامه هایی که روی exe قفل میزارن بنویسی ؟ تا به حال با قسمت Archive نرم افزار WinRar کار نکردی ؟!

    ربطش به همونه !

    عذر میخوام ، اما لطفا جواب صحیح بدین ! من آماتور نیستم ...
    !!!

    بسیار خوب ! همونطور که گفتم ، ایراد از عنوان بنده است ! با یکم اینترنت گردی متوجه شدم که به کاری که من میخوام انجام بدم میگویند : Code Injection ! که برای ساخت virus و یا protector و از این حرفا ازش استفاده میشه !

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

    شما با VCLZIP یک برنامه Zerver میسازید ، حالا با یک برنامه دیگه فایل های مورد نظر به همراه رمز رو به برنامه سرور پاس میدید ، برنامه سرور فایل ها رو در خودش Embedded میکنه ، از این پس با اجرای برنامه سرور و وارد کردن رمز فایل Extract میشه !

    لطفا وقتی از چیزی اطلاع ندارید دیگران رو زیر سوال نبرید !

  11. #11
    کاربر دائمی آواتار Unique
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    ایران - اصفهان
    پست
    3,199

    نقل قول: لینک یک برنامه به برنامه دیگر !

    بعضی مواقع یه چیزایی اینجا میبینم که ... ، شما سوال خودت رو یک با بخون ، مگر نمیخوای یک برنامه مثل برنامه هایی که روی exe  قفل میزارن بنویسی ؟ تا به حال با قسمت Archive نرم افزار WinRar کار نکردی ؟!


    دوست عزیز من ، چرا ناراحت میشین !!!
    البته شما اصلا متوجه نشدین من چی میگیم ! من کجا حرف از Archive کردن یا Extract کردن زدم ؟
    من کی گفتم میخوام روی فایل اجرائی رمز بگذارم ، گفتم یک قفل اما نگفتم چطور عمل کنه !!! ؟
    خب اگه این بود که نیاز به برنامه نویسی نبود و با Winrar یک Archive میساختم و Pass میگذاشتم روش !!!
    بعدشم هر کسی فایل را Extract میکرد میداد دست یکی دیگه و اونوقت اون قفل فقط یکبار به درد میخورد !

    من توی سوالم گفتم ممکنه عنوان مناسب نباشه و شما هم اومدی سراغ بحث archive کردن ! که اصلا منظور من این نیست !

    تزریق کد چه ربطی به سوال شما داره !هر جور فکر میکنم نمیشه هیچ رابطه ای براش تعیین کرد !


    عزیز من زیاد فکر نکن ! توی همین Forum یک جستجو بکن ببین هر جا صحبت از پروتکتور و قفل نرم افزاری هست (شتاب ، Hot Lockو ...) از تزریق کد هم حرف هست !

    لطفا وقتی از چیزی اطلاع ندارید دیگران رو زیر سوال نبرید ! 

    از چی اطلاع ندارم ؟! اگه میدونستم دقیقا چطور این کار انجام میشه که اینجا مطرح نمی کردم یکی بیاد بگه برو Archive کن بعد Extract کن !! اینو که ما توی Novel و Dos انجام میدادیم! اصلا اطلاعات کد نویسی نمیخواد ! یا اصلا Installer میساختم یا از Exe Wrapper استفاده میکردم !!!

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

    اگه راه حل جالبتری داره ارائه بده ...

  12. #12
    کاربر دائمی آواتار Unique
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    ایران - اصفهان
    پست
    3,199

    نقل قول: لینک یک برنامه به برنامه دیگر !

    cayberfox ، حالا شد یه چیزی ، من تست میکنم و خبرشو میدم ! توی حالتی که شما گفتیم فایل host من باید روی دیسک یا resource های فایل protector باشه تا بریزیمش توی memory streamو هر وقت خواستیم اجراش کنیم ! این خوبه ، اما :

    تنها تفاوتی که بحث شما با مطالبی که من خوندم توی این دو روز اینه که معمولا همه جا یک Section به فایل هدف که میخوایم روش قفل بگذاریم اضافه میکنند و به عنوان Entry Point قرارش میدهند ! حالا شما مثالی میتونی بزنی که یک فایل به نام protector.exe را بگذاریم توی Entry Point Section فایل host.exe و زمانی که protector اجرا شده با کلیک روی فرم protector بتونیم jump کنیم روی host.exe تا اجرا بشه و protector را Terminate کنیم !

  13. #13

    نقل قول: لینک یک برنامه به برنامه دیگر !

    نقل قول نوشته شده توسط Unique مشاهده تاپیک
    cayberfox ، حالا شد یه چیزی ، من تست میکنم و خبرشو میدم ! توی حالتی که شما گفتیم فایل host من باید روی دیسک یا resource های فایل protector باشه تا بریزیمش توی memory streamو هر وقت خواستیم اجراش کنیم ! این خوبه ، اما :

    تنها تفاوتی که بحث شما با مطالبی که من خوندم توی این دو روز اینه که معمولا همه جا یک Section به فایل هدف که میخوایم روش قفل بگذاریم اضافه میکنند و به عنوان Entry Point قرارش میدهند ! حالا شما مثالی میتونی بزنی که یک فایل به نام protector.exe را بگذاریم توی Entry Point Section فایل host.exe و زمانی که protector اجرا شده با کلیک روی فرم protector بتونیم jump کنیم روی host.exe تا اجرا بشه و protector را Terminate کنیم !
    کدی که قرار دادم رو xp کامل کار میکنه

    ببین این تکنیک memory execute در Execrypto ها مورد استفاده قرار میگیره شما برای نگهداری فایل اصلی میتونین 2 کار انجام بدین
    1.راحت مثل binder ها کل فایل رو به ته فایل server اضافه کنین و در زمان اجرا اونو به صورت stream خوانده و تو حافظه اجرا کنیم

    2.قسمت دیکودر رو به صورت 1 سکشن روی فایل اصلی قرار میدم و خاصیت سکشن رو اجرایی میکنیم اطلاعات این سکشن جدید رو به header اضافه میکنیم سایزشو fix میکنیم وimagebase و Entrypoint رو به imagebase وEntrypoint دیکودر منتقل میکنیم بعد سکشن کد فایل اصلی رو کد میکنیم و میزاریم سر جاشimagebase و entrypoint اونو هم جایی یاداشت میکنیم که بعد از دیکود بشه اجرا کرد وقتی برنامه اجرا میشه اول دیکودر تو حافظه بارگزاری میشه و سکشن کد اصلی رو میخونه و دیکود میکنه و با استفاده از imagebase و Entrypoint فایل اصلی اونو تو حافظه بارگزاری میکنه

    انتخاب روش با خودته

  14. #14
    کاربر دائمی آواتار Unique
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    ایران - اصفهان
    پست
    3,199

    نقل قول: لینک یک برنامه به برنامه دیگر !

    cayberfox ، من کد شما را خیلی تست کردم ! به یک سری مشکل بر خورد ! مثلا نمیشه یکسری فایلها را باهاش باز کرد ! نمونه قابل امتحانش ، فایل های Setup هستند.

    بعضی برنامه ها هم که باز می شوند Theme اونها شبیه 98 میشه ! مثلا برنامه calc.exe خود ویندوز را چک کنید.

    من یک برنامه تستی از کد شما Attach میکنم !. امیدوارم بشه واسه این مشکلات راه حل پیدا کرد. سعی کن فاییل های setup مانند winamp , quicktime یا هر چیز دیگه را باهاش اجرا کنی.
    فایل های ضمیمه فایل های ضمیمه

  15. #15

    نقل قول: لینک یک برنامه به برنامه دیگر !

    مشکل لود ریسورسها رو میتونی با استفاده از توابع api حل کنی یک نمونه مثال تو سایت Delphibasics.uk هست
    در مورد ستاپها هم مشکل از اونجاست که
    مرد مومن تو فایل ستاپ رو از تو stream لود میکنی اونوقت اون برنامه ستاپ که خودش از Stream داره لود میشه فایلهای ستاپ خودش رو از کجا باز کنه؟(اون هم فایلها رو درون خودش داره که باید از ادری فیزیکی بخونه)

  16. #16
    کاربر دائمی آواتار Unique
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    ایران - اصفهان
    پست
    3,199

    نقل قول: لینک یک برنامه به برنامه دیگر !

    خوب پس اینطور که معلومه این روش زیاد به درد کار من نمیخوره چون محدودیت داره ! و من نمیتونم تضمینی داشته باشم که فایل هدف من به هر حال از توی حافظه درست و بی اشکال Load میشه !
    پس راهی نمیمونه جز اینکه بریم سراغ تزریق کد و ایجاد یک section جدید توی فایل exe هدف. من در این مورد هم خیلی گشتم و اکثر کدها به زبان C هستش و کار منو کند میکنه ، کسی نمونه کد یا مقاله ای که با دلفی توضیح داده باشه داره ؟

  17. #17

    نقل قول: لینک یک برنامه به برنامه دیگر !

    شخصی بنام ErazerZ یونیتی بنام untPeFile نوشته که میتونین از اون استفاده کنین
    (تو گوگل سرچ کنین پیدا میشه)

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •