|
|
Bạn kiếm phần mềm Jungo WinDriver tại http://www.jungo.com/windriver_usb_pci_driver_development_software.html Phần mềm này sẽ tạo sẵn các Driver giao tiếp mức thấp và API mức cao, bạn chỉ việc phát triển ứng dụng qua các hàm API mà nó cung cấp.
|
|
|
Chương trình đó trước tiên lấy tham số đặc trương duy nhất của hệ thống như HDD serial, CPUID, NIC ID sau đó xáo trộn mã hoá chuỗi này thành một số SERIAL cho chương trình sử dụng. Số SERIAL này là duy nhất trên 1 máy nên khi ta đã có SERIAL của máy đang sử dụng thì cũng không thể dùng số này để cài trên máy khác.
void __getCPUID(DWORD* result,DWORD param)
{
/************************************************/
// GET CPUID command OPCODE = 0xA20F //
//----------------------------------------------//
// EAX = 0 --> Get Vendor = {EBX-EDX-ECX} //
// EAX = 1 --> Get EBX,EDX = {Cache,ALU,CPU} //
// EAX = 2 --> Get Cache Info //
// EAX = 3 --> Serial no = {EAX,EBX,ECX,EDX} //
// EAX = 80000000H ->80000004H {adv func CPU} //
/************************************************/
#ifndef _DEBUG
DWORD buffer[4];
__asm
{
MOV EAX, param
CPUID // 27 bytes = 1B
MOV dword ptr [buffer+ 0], EAX
MOV dword ptr [buffer+ 4], EBX
MOV dword ptr [buffer+ 8], ECX
MOV dword ptr [buffer+12], EDX
}
memcpy(result,buffer,sizeof(DWORD)*4);
#endif
}
BOOL __getHDDSerial(LPDWORD pSerial)
{
DWORD dwRes = 0;
TCHAR buffer[MAX_PATH] = {0};
return GetVolumeInformation(_T("C:\\"),buffer,sizeof(buffer),pSerial,&dwRes,&dwRes,buffer,sizeof(buffer));
}
|
|
|
Đúng vậy, nói đến gcc thì tôi nghĩ ngay là lập trình trên môi trường *nix , không ngờ có người dùng gcc để lập trình cho ứng dụng chạy trên môi trường windows. Đúng là bá đạo thật.
|
|
|
Trước kia có 1 thread của anh Eyesdog bàn luận rất sôi nổi về việc inject một process vào 1 system process như explorer.exe Có ai còn lưu các bài viết trong topic đó không nhỉ?
|
|
|
Tôi vẫn dùng getch() ở cuối chương trình hoặc ở đoạn bất kỳ khi cần thiết. Đó là cái cơ bản và dễ tiếp cận nhất cho 1 người mới học C. Còn thày bạn dùng notepad để soạn thảo rồi dùng gcc để dịch thì nghe có vẻ amateur hơn. Tôi thì lại dùng Visual Studio 6.0 để soạn thảo rồi gcc. Nghe nói LTV ..... dùng vi hay mc để soạn thảo sau đó mới gõ gcc ...
|
|
|
nghelamvuon wrote:
Em xin hoi that cac anh co anh nao biet sau ve VXL moi khong nhu tap lenh va so do chang han?khoi phai tra loi em biet la chang anh nao biet ca.Noi that voi cac anh neu ca doi chi di theo vet chan nguoi ta da nhuc roi lai con di theo vet cu rich nua chu.Luc em vao day tuong trong ma giao chuyen nay thong het(nghia hacker cua JAL noi) vay ma chang ai hay.
tuong khong co thi tim cho thay hoa ra tat ca cung chi la MS va Intel cho cai gi thi biet cai day .Ca HVA chot lai toan nguoi 20 tuoi mau nong thi nhieu ma song nhu ong cu 50 chi cam phan thoi
Em muốn hỏi về VXL mới!! Vậy em muốn hỏi về dòng nào? x86, 8051,PIC,AVR,ARM ... Em muốn hỏi về tập lệnh, cách lập trình, sơ đồ ghép nối ... Cứ post lên đây anh sẽ có trách nhiệm trả lời cho em.
Nên biết khiêm tốn trong khi post bài một chút nhé em
|
|
|
Ở đây http://www.adp-gmbh.ch/win/misc/sockets.html
em search hộ anh caothuvolam thôi
|
|
|
Dùng hàm API SendMessage() hoặc PostMessage() khi đã biết tham số handle của một cửa sổ Windows muốn gửi sự kiện đó đến. Xem chi tiết hàm và cách sử dụng trong MSDN. Tôi đang không cài MSDN nên không thể đưa mã ví dụ cho bạn được. Chịu khó nhé, sẽ tiến bộ nhanh hơn.
|
|
|
Do phpmyadmin sử dụng mã CHARSET=ISO-xxxx, tìm và đổi thành CHARSET=UTF-8. Từ mySQL 5.0 không nên dùng Collation=utf8_xxx_xx mà dùng Collation=latin1_swedish_ci. Đây là chút kinh nghiệm của tôi.
|
|
|
Trong Task Manager nếu bạn dùng chức năng End Process thì bạn chỉ kết thúc được một số Process của các chương trình bình thường. Đối với các Process được bảo vệ như tiến trình của OS hay các trình diệt virus thì bạn không thể kết thúc dễ dàng như thế. Điều này cũng tương tự khi ta dùng hàm API TerminateProcess().
Nguyên lý: Một process có thể Kill một Process khác được bảo vệ nếu như process này có đặc quyền DEBUG các process khác, sau đó process này có thể dùng hàm API TerminateProcess(hProcess,0)!
Đoạn mã sau dùng để gán quyền DEBUG cho một process:
Code:
void GetDebugPriv( void )
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;
if ( ! OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
return;
if ( !LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) )
{
CloseHandle( hToken );
return;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL );
CloseHandle( hToken );
}
|
|
|
Đoạn code sau đây sử dụng các tính năng sercurity object trên
Win2K/XP. Một process cần được bảo vệ sẽ được tạo ra với quyền
truy cập được hạn chế bằng cách đặt thuộc tính SECURITY_ATTRIBUTES
trong khi gọi hàn CreateProcess để tạo process được bảo vệ!
<Tham khảo trong MSDN Platform SDK: Access Control 8) >
Code:
// SecurityObj.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <aclapi.h>
BOOL CreateProtectedProcess(
LPCTSTR lpApplicationName, // name of executable module
LPTSTR lpCommandLine, // command line string
DWORD dwCreationFlags // creation flags
);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
CreateProtectedProcess("c:\winnt\system32\calc.exe", NULL, 0 );
return 0;
}
BOOL CreateProtectedProcess(
LPCTSTR lpApplicationName, // name of executable module
LPTSTR lpCommandLine, // command line string
DWORD dwCreationFlags // creation flags
)
{
DWORD dwRes;
PSID pEveryoneSID = NULL, pAdminSID = NULL;
PACL pACL = NULL;
PSECURITY_DESCRIPTOR pSD = NULL;
EXPLICIT_ACCESS ea[2];
SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY;
SID_IDENTIFIER_AUTHORITY SIDAuthNT = SECURITY_NT_AUTHORITY;
SECURITY_ATTRIBUTES sa;
// Create a well-known SID for the Everyone group.
if(! AllocateAndInitializeSid( &SIDAuthWorld, 1,
SECURITY_WORLD_RID,
0, 0, 0, 0, 0, 0, 0,
&pEveryoneSID) )
{
return FALSE;
}
// Initialize an EXPLICIT_ACCESS structure for an ACE.
// The ACE will allow Everyone read access to the object.
ZeroMemory(&ea, 2 * sizeof(EXPLICIT_ACCESS));
ea[0].grfAccessPermissions = GENERIC_READ;
ea[0].grfAccessMode = DENY_ACCESS;
ea[0].grfInheritance= NO_INHERITANCE;
ea[0].Trustee.TrusteeForm = TRUSTEE_IS_SID;
ea[0].Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP;
ea[0].Trustee.ptstrName = (LPTSTR) pEveryoneSID;
// Create a SID for the BUILTIN\Administrators group.
if(! AllocateAndInitializeSid( &SIDAuthNT, 2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0,
&pAdminSID) )
{
goto Cleanup;
}
// Initialize an EXPLICIT_ACCESS structure for an ACE.
// The ACE will allow the Administrators group full access to the key.
ea[1].grfAccessPermissions = GENERIC_READ;
ea[1].grfAccessMode = DENY_ACCESS;
ea[1].grfInheritance= NO_INHERITANCE;
ea[1].Trustee.TrusteeForm = TRUSTEE_IS_SID;
ea[1].Trustee.TrusteeType = TRUSTEE_IS_GROUP;
ea[1].Trustee.ptstrName = (LPTSTR) pAdminSID;
// Create a new ACL that contains the new ACEs.
dwRes = SetEntriesInAcl(2, ea, NULL, &pACL);
if (ERROR_SUCCESS != dwRes)
{
goto Cleanup;
}
// Initialize a security descriptor.
pSD = (PSECURITY_DESCRIPTOR) LocalAlloc(LPTR,
SECURITY_DESCRIPTOR_MIN_LENGTH);
if (pSD == NULL)
{
goto Cleanup;
}
if (!InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION))
{
goto Cleanup;
}
// Add the ACL to the security descriptor.
if (!SetSecurityDescriptorDacl(pSD, TRUE, // fDaclPresent flag
pACL, FALSE)) // not a default DACL
{
goto Cleanup;
}
// Initialize a security attributes structure.
sa.nLength = sizeof (SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = pSD;
sa.bInheritHandle = FALSE;
// Use the security attributes to set the security descriptor
// when you create a key.
PROCESS_INFORMATION pi;
STARTUPINFO si;
memset(&pi,0,sizeof(pi));
memset(&si,0,sizeof(si));
si.cb = sizeof(si);
si.wShowWindow = SW_SHOW;
CreateProcess(lpApplicationName,lpCommandLine, &sa, &sa,dwCreationFlags,0,0,0,&si,&pi);
// clean up data
Cleanup:
if (pEveryoneSID) FreeSid(pEveryoneSID);
if (pAdminSID) FreeSid(pAdminSID);
if (pACL) LocalFree(pACL);
if (pSD) LocalFree(pSD);
return TRUE;
}
|
|
|
Tác giả : Spinx
Bạn có muốn trở thành VXer? Mục đích bài này tôi muốn giới thiệu cho newbie về cách viết VR. Yêu cầu trước hết là biết lập trình ASM. Đoạn ấy tôi không hướng dẫn được các bác tự mua sách học lấy. Tôi không đưa dạng từng lệnh một đâu. Làm như vậy mất hết tính sáng tạo của mọi người đi. Chúng ta sẽ bắt đầu từ các định nghĩa cơ bản. Xin lỗi chua thêm 1 câu: suy nghĩ kỹ khi thực hành, tôi không chịu trách nhiệm về những gì các bác làm
BÀI 1:
VR là gì?
E hèm... cũng khó đấy vì trong thực tế VR HẾT SỨC ĐA DẠNG. Tuy nhiên ta có thể định nghiã nôm na VR là một đoạn code có khả năng tự sao chép, nhân bản (không đúng với trojan lắm nhỉ ). VR có thể nằm trong các tệp khả thi (executable files) như COM hoặc EXE, boot sector, MBR...
Chọn ngôn ngữ lập trình
Thông thường VR được xây dựng bằng Assembler nhưng không nhất thiết như vậy. VR trên thực tế có thể xây dựng bằng Pascal, C, VB... thậm chí có VR còn được viết bằng tệp BAT. Tuy vậy tôi khuyên nên chọn ASM với các lý do sau:
Kích thước nhỏ: ngôn ngữ ASM sẽ cho ta khả năng lập trình với kích thước nhỏ nhất có thể. Đây là một đặc tính quan trong của VR. Bằng ASM ta sẽ bớt đi rất nhiều code không cần thiết và trùng lặp do các trình biên dịch ngôn ngữ bậc cao sinh ra. Trong quá trình tối ưu mã code ta có thể tối ưu đến từng byte mã lệnh. Lựa chọn các lệnh có cùng kết quả với kích thước nhỏ nhất....
Khả năng kiểm soát: Ta có thể kiểm soát từng lệnh, move code từ vị trí này sang vị trí khác, vừa chạy vừa patch code ( patch on-the-fly ). Mã hoá code từng phần ....
Tính linh hoạt: đây là ưu điểm mạnh nhất của ASM khi lập trình. Là một ngôn ngữ phi cấu trúc, khả năng sáng tạo trên ASM là không bị giới hạn.
Cuối cùng nhiều khi VR không hoàn toàn là một chương trình (boot VR chẳng hạn) nên chẳng có lý do gì để chọn một ngôn ngữ bâc cao cả trừ phi bạn quá lười.
Một Vxer cần có gì
Như vậy, hãy trang bị cho mình chút kiến thức về ASM rồi ta bắt tay với vài công cụ tối thiểu sau:
Chương trình dịch ASM. Bạn có thể chọn TASM, MASM hoặc một chương trình dịch bất kỳ tuỳ thích. Nói chung với tasm 3.1 là đủ với một dos VR
Chương trình link. Có thể là Tlink hoặc link.exe
Một tool debuger. Có nhiều lắm, debug, symdeb... (dos) softice, win32dasm... (win)
Một chương trình soạn text (quickedit, notepad, utraedit....)
Kiếm vài mẫu VR cơ bản, đừng bắt đầu từ VR phức tạp quá nếu không bạn sẽ mệt mỏi vì debug thuật toán mã hoá và vượt qua một đống mã anti-debug. Kiếm vài con cô cổ như LittleGirl, onehalf...
Tool dump bộ nhớ. Nếu không có thì sài tạm chức năng của debuger vậy
Bảng tra cứu ngắt trong vài quyển lập trình hệ thống hoặc dùng tech-help
Chương trình diệt VR (các AV xịn chứ không phải BKAV đâu) để kiểm tra xem VR của bạn đã thực sự tàng hình trước các kiểm tra heuristic chưa
Email của tôi nếu cần giúp đỡ
Còn gì không nhỉ? Thôi tạm thế đã
Có một điều Vxer nên ghi nhớ KHÔNG MÁY MÓC. Bạn đã biết làm VR nhưng đừng máy móc theo dập khuôn. Sáng tạo càng kỳ quặc VR của bạn càng nguy hiểm. Đảo code đi thoải mái miễn đạt kết quả. Nghĩ ra càng nhiều tips & trịck càng tốt. Tôi hy vọng sẽ lần lượt giới thiệu đủ các VR file trên dos, boot VR, VR file trên win, VR file trên Linux, trojan và cuối cùng là VR trên nhiều hệ điều hành DOS-WIN-UNIX.
Ta bắt đầu với một VR file đơn giản. Một VR file thường làm gì:
1. Mở file cần lây nhiễm
2. Kiểm tra xem đã từng nhiễm chưa
3. Nếu rồi thì bỏ qua
4. Lưu ngày giờ của file
5. Lưu đoạn code đầu chương trình (COM) hoặc header (EXE)
6. Nhét lệnh nhảy tới VR của ta đè lên code đã lưu (COM) hoặc sửa header (EXE) để VR có thể bắt đầu trước chương trình gốc
7. Nối thêm VR của ta vào file
8. Cập nhật ngày tháng cũ
OK, ta đã có một VR đơn giản. Tôi sẽ phân tích từng mục ở các phần sau.
Thực ra có một loại VR tồi tệ nhất là overwriting VR. VR này thường ghi đè lên tệp gốc dẫn đến què quặt dữ liệu. Bạn định tranh luận với tôi là còn có rất nhiều hình thức lây lan khác ư? Tôi biết nhưng đây chỉ là bài cho newbie đừng quên điều đó.
Tiếp tục nhá, các thao tác khác một VR có thể làm là gì:
Thường trú: Nhiều người nghĩ rằng VR là phải thường trú nhưng không hẳn vậy. Chính vì thế tôi không liệt thao tác này vào trong nhóm các thao tác thường làm.
Lây nhiễm: Một VR có thể lây nhiễm nhiều cách (ở trên là lây nhiễm tệp khả thi) qua files, email... hoặc boot sector (đĩa mềm), macro... Nạn nhân sẽ chạy file lây nhiễm mà không biết. Alê hấp, VR nắm quyền điều khiển
Nắm quyền điều khiển: Một khi VR đã chạy ta có thể làm mọi điều ta muốn. Phát huy trí tưởng tượng thoải mái. Bạn có thể lấy mọi thông tin của nạn nhân (trojan hay làm) từ pwd email đến thư tình... thậm chí mở một backdoor để điều khiển máy tính từ xa.
Phá hoại: Một khi đã nắm quyền điều khiển, bạn có thể phá hoại những gì bạn thích phá. Theo nhận xét của tôi, phá hoại là hình thức chỉ các beginner mới thích làm. Nó hơi thất đức, và tất nhiên có VR hoàn toàn không phá hoại
Một vài kỹ thuật nâng cao tôi sẽ phân tích thêm trong bài viết là:
ARMOURING: chống debug và disassembler. Đây là một trong các kỹ thuật tự bảo vệ cho VR (xem thêm bài kỹ thuật lập trình VR). Tôi sẽ cung cấp chi tiết cho các bạn một số cách bẫy ngắt lạ (int 1, int 0, int 6...), đánh lừa stack, đặt điểm dừng (break points), fetch code on-the-fly
STEALTH: có một số thuật toán rất hay ( FCB, Handles, SFT, tự tháo gỡ...). Các kỹ thuật này nhằm làm nạn nhân thấy tệp tin có vẻ như chưa bị nhiễm. Nó có thể trả về kích thước chuẩn khi nạn nhân rờ đến hoặc thậm chí tự tháo gỡ VR ra khỏi tệp khi nạn nhân mở file. Tôi sẽ trình bày kỹ về FCBStealth, SFTStealth, Handle stealth. Tự tháo gỡ thì chắc các bạn sẽ tự làm được
ENCRYPTION: tôi sẽ trình bày vài cách mã hoá đơn giản và thông dụng. VR thường mã hoá code của nó và chỉ giải mã ra khi chạy.
POLYMORPHISM: Đa hình là kỹ thuật tự thay đổi code mã hoá nhằm tạo ra càng nhiều phiên bản càng tốt. Tự thay đổi liên tục là một chức năng sinh tồn.
ANTI-HEURISTIC: Thuật toán chống tìm kiếm hueristic (xem thêm Kỹ thuật lập trình VR)
TUNNELING: kỹ thuật bẫy ngắt
ANTI-TUNNELING: Cách giữ ngắt cho riêng mình, tránh AV hoặc VR khác
ANTI-BAIT: Điều cần tránh khi lây nhiễm (xem thêm kỹ thuật lập trình VR)
OPTIMIZATION: Một số kinh nghiệm tối ưu code
Mỏi tay quá rồi, hẹn các bác bài sau nhé.... to be continue!
(spinx)
|
|
|
|
|
|
|