banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Messages posted by: Tal  XML
Profile for Tal Messages posted by Tal [ number of posts not being displayed on this page: 0 ]
 
hì hì, tình trạng chung cho tất cả các vấn đề đó là máy không vào được mạng. Không vào được mạng thì mình nghĩ có nhiều khả năng, trong đó có thể là do lỗi của ISP nữa. Vì vậy chưa đủ căn cứ kết luận máy bị làm sao.

Riêng tớ dùng FF3, windowsXP, hibernate suốt có thấy máy sao đâu.
Tìm hiểu về virus chỉ thú vị khi biết phương pháp lây lan, mã hoá, polymorphism... Theo mình để tìm hiểu về virus đầu tiên phải biết về assembly. Link sau khá hay

http://win32assembly.online.fr/

Sau đó đọc các bài viết của nhóm 29a,...

http://vx.netlux.org
http://vx.netlux.org/29a

Ngoài ra tôi thấy trang codebreaker cũng hay, có nhiều bài viết cơ bản:

http://www.codebreakers-journal.com/

Hy vọng mấy trang này giúp được mọi người.

bienxanhlunglinh wrote:
Em chào Các Anh, Em bận quá, bận túi bụi, topic em viết mà em bận quá, thông cảm cho em 2 ngày nữa nhé.
Vài dòng rồi em phải đi đây. Em rất vui và cám ơn tất cả các Anh - sự nhiệt tình, chia sẻ cùng nhau.., nói chung thấy vui - ko biết nói gì nữa. Em phải đi tí nhé, mai rảnh em quay vào và hỏi thêm các anh nhưng chắc 1 điều là chuỗi nhập vào là tự nhiên (độ dài và kiểu), Key thì đã cố định và không thay đổi chứ ko thể Xor theo kiểu 1 ký tự hoặc cặp ký tự.

Tối em ngồi viết lại xem: [ Đem A xor Key có được B ], rồi [ đem A xor B để tìm Key ]
Em thích cái này, vì Key cố định trong source người dùng ko biết. Mỗi lần nhập A thì B sẽ thay đổi. sau này B sẽ là chuổi bí mật phải có trước khi muốn thực hiện tiếp chuỗi công việc. vì trước khi send file hay gọi Formload đăng nhập App thì Hệ thông sẽ thực hiện tạo chuỗi B, (B sẽ thay đổi mõi lần thực hiện) Sau đó Text_A sẽ invisiable "Readonly" tại người dùng như vậy phải yêu cầu Admin báo chuỗi B là gì để tiếp tục công việc.
Em đi đã nhé, nếu xong cái này thì nhờ tiếp các Anh cái vụ "băm..băm gì đó"

Em vẫn khoái Anh Tal giải thích. Anh tiếp cho em đi. chuỗi nhập vào không hạn chế độ dài và kiểu.
Em chào các Anh.
 


Còn giúp đỡ gì nữa? Cậu chọn lấy 1 thuật toán rồi bắt đầu code đi. Code chỗ nào mắc thắc mắc thì anh em mới biết mà giúp chứ. Tôi thấy ở đây mọi người đã giúp hết cỡ rồi smilie

jforum3000 wrote:

Đã là nguồn mở thì ai cũng có khả năng sử dụng, và soi xem nó có cái gì, lỗi nó nằm ở đâu. Do đó đổi tên hay không không phải vấn đề. Vấn đề ở đây là phương pháp phân quyền, phương pháp bảo vệ tài khoản của superuser, và phương pháp cấu hình webserver cụ thể thế nào để hạn chế attacker thay đổi nội dung file. Nếu attacker không có quyền xem, ghi file đó thì anh ta cũng đâu có làm được gì đâu. smilie  


Vì mình có đọc được 1 đoạn cảnh báo bảo mật này ở một diễn đàn support phpBB như sau, liệu những tình huống này có thể xảy ra không?

Bình thường một kẻ cố truy cập trực tiếp tập tin config.php của bạn sẽ cho ra một trang trắng trên trình duyệt. Nhưng nếu giả sử trình biên dịch PHP trên máy chủ của bạn gặp sự cố (hoặc khi nâng cấp server, dịch vụ hosting thường tắt hết các trình biên dịch PHP), các tập tin PHP không còn được biên dịch để trả kết quả về trình duyệt người xem nữa, nó sẽ xuất ra "hết thảy những gì mình có" lên trình duyệt. Khi đó kẻ truy cập đó có thể xem tất tần tật tập tin config.php của bạn bằng trình duyệt.

Dù không có chuyện gì xảy ra, một khi biết được tên tập tin config.php của bạn và vị trí của nó, kẻ tấn công bạn vẫn có thể sử dụng lệnh include() từ một nơi nào khác, "include" tập tin config.php trên máy chủ bạn rồi xuất ra các biến: $dbhost, $dbname, $dbuser và $dbpasswd trong tập tin kết quả của chúng. 


Mọi thứ đều có điều kiện của nó smilie. Ở đây là khi máy chủ web không được cấu hình đúng như nó cần phải cấu hình nữa. Theo mình nghĩ lỗi khả năng xảy ra lỗi này không cao smilie. Hơn nữa từ đoạn trích trên mình còn thấy là tác giả của nó có vẻ gì đó mờ ám, phóng đại sự việc lên rồi, không tin được smilie.

Tốt nhất là bám sát chủ đề của anh conmale kẻo bị cảnh cáo đấy . Mình thấy bạn hơi bó hẹp phạm vi thảo luận. smilie
Ý anh gamma95 là bạn viết con trojan + virus qua mặt được các AV thế nào? Bạn có thể viết trong mục lập trình hệ thống để mọi người con tham khảo.

rong_tuech wrote:

okgame_root wrote:

Ăn đòn là sao ? làm web ai chả từng bị ddos ? mà thế giới ngầm là site gì ấy nhỉ ??? Ý ông anh nói là thegioingam.biz á ?? Em ko quen ai bên đó đâu, trình gà đâu dám vỗ ngực xưng danh smilie, làm mod cho mấy site giải trí còn không được huống chi làm admin smilie)...... ừ thì em có làm admin 1 4rum trên http://localhost:80 đấy thì seo...........Chơi đẹp bằng cách gửi thư cho ISP ? ISP là bọn bán domain á ?? Hay bọn cung cấp dịch vụ mạng ??? mà domain em dùng toàn domain free không à smilie ......... Mà ông anh sang đây để học hỏi hay khoe mẽ "Từng ddos chết thằng okgame" thế ?

ỦA ???? Bị block rùi à smilie ......... cái tật ..... này thì ddos chết okgame smilie  

Vào site thegioingam.biz nghe : Bình Thường Thôi smilie thằng cha này tếu vãi smilie

Các anh cho em hỏi, botnet với ddos khác nhau thế nào ạh ^^ có phải botnet thì đã nắm toàn quyền control client trong mạn botnet, còn ddos thì nhắm mắt mà phang (không control máy client đựơc ?) 


DDos là một dạng tấn công vào tính sẵn sàng của hệ thống (băng thông, tài nguyên máy). Máy bị DDos là máy tính không có khả năng cung cấp dịch vụ cho người dùng dù nó còn tồn tại. Để có thể DDos được, attacker phải huy động được thật nhiều yêu cầu đến server làm nó quá tải (đường truyền hoặc tài nguyên máy) bằng nhiều cách khác nhau.

Botnet là máy tính đã bị attacker chiếm quyền điều khiển (attacker có thể ra lệnh cho máy này). Máy tính này sẽ được dùng làm máy tính gửi yêu cầu đến server.

Nói tóm lại: DDos là phương pháp, còn botnet là một trong các công cụ giúp attacker DDos.

jforum3000 wrote:
Cho mình hỏi là ở các phần mềm forum nguồn mở thường có 1 file config.php để lưu thông tin cấu hình, file này thường hay được khuyên là hãy đổi sang một tên khác để tránh bị hack local attack, nhưng liệu giải pháp này có thật sự an toàn ko? Vì còn có 1 file khác lưu thông tin của file config.php đã được đổi tên, thường là common.php, nếu hacker local attack vào file common.php này thì sao, họ sẽ biết được tên của file cofig.php đã được đổi, như vậy việc đổi tên này cũng công cốc? Giải pháp tốt nhất là đổi tất cả các file .php? Như vậy thì thật là mệt quá. 


Đã là nguồn mở thì ai cũng có khả năng sử dụng, và soi xem nó có cái gì, lỗi nó nằm ở đâu. Do đó đổi tên hay không không phải vấn đề. Vấn đề ở đây là phương pháp phân quyền, phương pháp bảo vệ tài khoản của superuser, và phương pháp cấu hình webserver cụ thể thế nào để hạn chế attacker thay đổi nội dung file. Nếu attacker không có quyền xem, ghi file đó thì anh ta cũng đâu có làm được gì đâu. smilie

conmale wrote:

Môi trường bị "hack" này thường là:

- Hệ điều hành: Linux
- Web service: Apache (1.3.x 2.x)
- PHP (4.x, 5.x)
- Ứng dụng: các forums PHP-based, các web applications viết bằng PHP.
- Shared hosting và dedicated servers.

Thứ nhất, local exploitation do đâu mà có? Chìa khóa quan trọng nhất đó là: việc thực thi hành động exploit nào đó xảy ra trên máy cục bộ (shared host hoặc dedicated server).

Thứ nhì, thế nào là "xảy ra trên máy cục bộ"?

a) Nếu kẻ tấn công có một cái unix shell (bash, csh...) như conmale@someserver$ và cái shell này có thể dùng để làm gì đó dung hại ngay trên server đang bị tấn công.

b) Nếu kẻ tấn công có một cái php, asp, python, perl... script nào đó (còn gọi là shell nhưng shell này khác shell trên ở chỗ nó hoàn toàn hoạt động trên giao thức http và có tầng php, asp, python, perl... đứng giữa thay vì bash shell, c shell tương tác trực tiếp với hệ điều hành). Con "shell" này phải được upload và thực thi ngay trên server bị tấn công.

 


Theo em nghĩ "xảy ra trên máy cục bộ" có nghĩa là attacker có thể trực tiếp ra lệnh và sử dụng tài nguyên của máy tính bị hack như là đang ngồi trên máy tính đó.
Do dó "local exploitation" xảy ra khi attacker có được công cụ ra lệnh trực tiếp cho hệ thống và lợi dụng công cụ đó để thay đổi phương thức làm việc của hệ thống. Công cụ này có thể là bash shell (trong trường hợp attacker có tài khoản), hoặc là shell script php, asp...

conmale wrote:

Thứ ba, giới hạn có thể tấn công của từng dạng shell ở trên thế nào?

1) Nếu kẻ tấn công có một cái unix shell (như a) ở trên) thì tùy vào hệ điều hành bị bug cỡ nào và tùy mức độ thiết kế và quản lý server như thế nào. Nếu shell này chỉ cung cấp và dừng lại ở chủ quyền của một người dùng bình thường thì độ "tàn phá" sẽ hạn chế. Nếu hệ điều hành có lỗi hoặc độ thiết kế server lỏng lẻo thì có thể bị escalate thành root thì coi như là "game over".

2) Nếu kẻ tấn công có một cái shell (như b) ở trên) thì tùy và tính bảo mật của apache và mức độ tinh xảo của con shell ấy.
 


shell trong trường hợp 1 rõ ràng là có ưu thế hơn ở trường hợp 2. Lý do là nó ra lệnh trực tiếp cho hệ điều hành, có đầy đủ chức năng hệ thống cung cấp, và chỉ bị giới hạn bởi quyền hạn. Nếu có shell này với quyền root thì tốt quá rồi, còn nếu không thì attacker có thể lợi dụng shell để "leo thang đặc quyền". Tóm lại có shell này là có 1 lợi thế lớn.

Con shell trong trường hợp 2 thì kém hơn vì nó bị bó buộc trong bản thân ngôn ngữ viết ra nó và cấu hình của webserver. Con shell này bị bó buộc và có thể coi là nó gián tiếp hơn trường hợp 1.

conmale wrote:

Thứ tư, thử phân tích xem:

I) Do đâu kẻ tấn công có một con shell như a)
II) Do đâu kẻ tấn công có một con shell như b)

Sau đó mới bàn tiếp, làm sao để không cho I) và II) xảy ra.

Mời các bạn thảo luận. 


Con shell 1 là do attacker bằng cách nào đó có được tài khoản (username + password) trên máy tính đó. Các cách có thể có: sniff đường truyền, lừa người dùng có bằng cách cài keylogger, lỗi phần mềm, social engineering...

Con shell 2 thì em không biết nhiều lắm.

Vấn đề em muốn hỏi:

1. Có bao nhiêu cách leo thang đặc quyền khi đã có con shell 1. Em mới biết 1 cách là tận dụng lỗi buffer overflow.
2. Con shell thứ 2 ta có thể có quyền hạn đối với máy tính bị hack đến đâu?
Ở đây ta đoán được key trong trường hợp thuật toán lấy chuỗi đơn giản (chuỗi con cách nhau liên tiếp, các chuỗi không nằm lên nhau). Trong trường hợp phức tạp hơn ta phải duyệt qua số chuỗi con là 2^n-1. Phức tạp hơn nữa là khi các chuỗi con sau khi xor được xếp thứ tự khác thứ tự ta lấy từ A.
Giả sử
- Input String là: A
- Output String là: B

Mã hóa dùng phép toán xor, ta có thể tính toán độ dài của chuỗi con nhập vào để xor với key. Ví dụ:
- Chọn từng ký tự một của A để mã hóa (độ dài chuỗi con là 1)
- Chọn hai ký tự một của A để mã hóa (độ dài chuỗi con là 2)
....

Trong trường hợp này, chuỗi con phải có độ dài bằng độ dài của key. Chuỗi cha nếu như có độ dài không chia hết cho độ dài key, ta phải thêm phần padding (để độ dài A là bội của key)

Ta nhận thấy là dù key thế nào thì chuỗi A và B phải có độ dài bằng nhau. Nhận xét nữa là thứ tự chuỗi con của A và B là giống nhau.

Vậy thì ta sẽ chọn các chuỗi con tương ứng của A, B để xor với nhau -> key.

(Chú ý nữa là nếu key đúng thì khi xor đến lần thứ 2, ta sẽ nhận được key giống key của lần xor thứ 1, còn nếu key sai -> chuỗi con ta chọn là sai. Loại bỏ vòng lặp)

Ví dụ:
A = 0000
B = 1111
(key=1)
chuỗi con =1 -> key = 1

A = 1101
B = 0111
(key=10)
chuỗi con = 1 -> key1 = 1, key2 = 0 -> chuỗi con độ dài 1 là sai. Tăng giá trị chuỗi con
chuỗi con = 2 -> key1 = 10, key2 = 10 -> Đúng. Vậy key = 10

Số lượng chuỗi con là n. Vì vậy ta hoàn toàn có thể đoán được key.

TQN wrote:
File object còn có 1 mớ thứ linh tinh nữa trước đoạn shell code của cậu.
Dùng 1 decompiler và 1 hex editor, extract từ file object của cậu ra chính xác đoạn code cần execute, lưu thành 1 .bin chẵng hạn rồi test lại. 


Nếu dịch bằng nasm mà không chỉ rõ file format bằng option -f thì mặc định là nó sẽ tạo ra file bin (opcode của các lệnh asm)

TQN wrote:
Để ý calling convention của function pointer shell_code_execute, trong trường hợp này là _cdecl phải không, debug xem stack có cân bằng không. 


Em không hiểu đoạn này lắm, anh có thể giải thích kỹ hoặc lấy ví dụ cụ thể được không?
The BITS directive specifies whether NASM should generate code designed to run on a processor operating in 16-bit mode, 32-bit mode or 64-bit mode. The syntax is BITS XX, where XX is 16, 32 or 64.

In most cases, you should not need to use BITS explicitly. The aout, coff, elf, macho, win32 and win64 object formats, which are designed for use in 32-bit or 64-bit operating systems, all cause NASM to select 32-bit or 64-bit mode, respectively, by default. The obj object format allows you to specify each segment you define as either USE16 or USE32, and NASM will set its operating mode accordingly, so the use of the BITS directive is once again unnecessary.

The most likely reason for using the BITS directive is to write 32-bit or 64-bit code in a flat binary file; this is because the bin output format defaults to 16-bit mode in anticipation of it being used most frequently to write DOS .COM programs, DOS .SYS device drivers and boot loader software.
 


Đúng rồi! Cái này là do mặc định của nasm sẽ dịch ra bytecode 16 bits, nếu mà không có chọn lựa gì thêm smilie

Đây là chương trình asm sau khi sửa lại:

Code:
USE32 ;directive này nói cho ta biết ta dịch ra mã 32 bits
jmp short string
code:
pop ecx
mov ebx, 1
mov edx, 14
mov eax, 4
int 80h
mov ebx, 0
mov eax, 1
int 80h
string:
call code
db "Hello, World!", 00h


Tal: bồ mà dùng gdb debug thêm chút nữa, chẳng hạn đặt breakpoint ngay trong cái đoạn shellcode của bồ, thì bồ sẽ thấy nguyên nhân tại sao liền àh :-p.
 


Đặt breakpoint trong shellcode kiểu gì vậy anh? Em không làm thế mà em đặt break point trước lệnh gọi shellcode và disassembly cái hàm đó ra. Kết quả mã asm nếu không có directive USE32

Code:
Breakpoint 1, main (argc=3, argv=0xbffff9f4) at bct.c:69
69 shell_code_execute = (void(*)(void))buffer;
(gdb) n
70 (*shell_code_execute)();
(gdb) disas shell_code_execute
Dump of assembler code for function buffer:
0x08049920 <buffer+0>: jmp 0x8049946 <buffer+38>
0x08049922 <buffer+2>: pop %cx
0x08049924 <buffer+4>: mov $0x1,%bx
0x08049928 <buffer+8>: add %al,(%eax)
0x0804992a <buffer+10>: mov $0xe,%dx
0x0804992e <buffer+14>: add %al,(%eax)
0x08049930 <buffer+16>: mov $0x4,%ax
0x08049934 <buffer+20>: add %al,(%eax)
0x08049936 <buffer+22>: int $0x80
0x08049938 <buffer+24>: mov $0x0,%bx
0x0804993c <buffer+28>: add %al,(%eax)
0x0804993e <buffer+30>: mov $0x1,%ax
0x08049942 <buffer+34>: add %al,(%eax)
0x08049944 <buffer+36>: int $0x80
0x08049946 <buffer+38>: call 0x6d4d9924
0x0804994b <buffer+43>: insb (%dx),%es:(%edi)
0x0804994c <buffer+44>: insb (%dx),%es:(%edi)
0x0804994d <buffer+45>: outsl %ds:(%esi),(%dx)
0x0804994e <buffer+46>: sub $0x20,%al
0x08049950 <buffer+48>: push %edi
0x08049951 <buffer+49>: outsl %ds:(%esi),(%dx)
0x08049952 <buffer+50>: jb 0x80499c0


Đặt lại như anh mrro nói là ok.

--m
Theo mình hiểu thì yêu cầu của chương trinh thế này:

Bạn có 1 key = "helloworld" cố định chẳng hạn
Bạn nhập vào chuỗi A
Output là chuỗi B

Vậy B = A ^ key

Về phía người dùng, người ta không hề biết giá trị của key. Tuy vậy do bản chất của phép toán XOR ta có thể biết key bằng cách lấy A^B (Với mọi A, B miễn là B là kết quả mã hoá của A). Do đó người dùng sẽ lấy được key nếu có A và B.

Vậy vấn đề ở đây là nếu ta sử dụng key như thế nào (nếu key là 1 chuỗi). Ví dụ:
- lấy từng ký tự của A và xor với lần lượt từng ký tự của key
- lấy 2 ký tự của A và xor với 2 ký tự của key
....

Vậy chắc bạn gặp khó khăn ở phần này hả?

Còn theo mình nghĩ miễn là B là kết quả của A thì A^B luôn ra key (tất nhiên là phải đúng thuật toán)
Em có đoạn mã với mục đích là: sau khi chạy sẽ cho ra byte code của 1 chương trình viết bằng assembly để có thể đưa vào C. Chương trình như sau:

Code:
#include <stdio.h>
#include <stdlib.h>
#define MAX_BUFFER 150
/*A function pointer for executing shellcode*/
void (*shell_code_execute)(void);
/*A buffer for input shellcode*/
char buffer[MAX_BUFFER];
int main(int argc, char **argv)
{
FILE *f;
unsigned int col,byte;
int *ret;
char *ptrbuff;
/*The number of argument must be 1 or 2*/
if(argc > 3 || argc ==1)
{
printf("Usage: bct filename [exec]\n");
return 1;
}
/*Open a file for reading*/
if((f=fopen(argv[1],"r"))==NULL)
{
printf("Error! File not found!\n");
return -1;
}
printf("----------\n");
printf("Printing your code\n");
printf("----------\n");
printf("buffer[]=\n");
col = 0;
/*Repeat reading each byte from opened file until reaching end of file
With each byte, print and put it in buffer*/
ptrbuff = (char*)&buffer; //pointer to buffer
while((byte=fgetc(f))!=EOF)
{
if(col==0) printf("\"");
printf("\\x%.2x",(unsigned char)byte);
*(ptrbuff++)=(unsigned char)byte;
col++;
if(col==10) //print a new line after printing 10 bytes
{
col=0;
printf("\"\n");
}
}
printf("\";\n");
fclose(f);
/*Execute the code has been read. We get address of buffer and call
the shellcode in buffer by using function pointer shell_code_execute*/
if(argc==3 && strcmp(argv[2],"exec")==0)
{
printf("------------\n");
printf("Executing your code!\n");
printf("------------\n");
shell_code_execute = (void(*)(void))buffer;
(*shell_code_execute)();
}
return 0;
}


Bây giờ em có 1 đoạn mã assembly như sau (đặt tên là hello.asm)

Code:
jmp short string
code:
pop ecx
mov ebx, 1
mov edx, 14
mov eax, 4
int 80h
mov ebx, 0
mov eax, 1
int 80h
string:
call code
db "Hello, World!", 00h


Đầu tiên em dịch đoạn mã assembly trên

Code:
nasm hello.asm -o hello


Khi chạy chương trình với 1 đối đầu vào là tên chương trình nó cho ra kết quả đúng như sau:

Code:
Tal@vxer:~/Documents/Research$ ./bct hello
----------
Printing your code
----------
buffer[]=
"\xeb\x24\x66\x59\x66\xbb\x01\x00\x00\x00"
"\x66\xba\x0e\x00\x00\x00\x66\xb8\x04\x00"
"\x00\x00\xcd\x80\x66\xbb\x00\x00\x00\x00"
"\x66\xb8\x01\x00\x00\x00\xcd\x80\xe8\xd9"
"\xff\x48\x65\x6c\x6c\x6f\x2c\x20\x57\x6f"
"\x72\x6c\x64\x21\x0a";


Nhưng nếu chạy với 2 đối số (thêm đối số exec) thì chương trình bị lỗi segmentation fault

Em đã dùng gdb để debug thì thấy byte code đã được chép vào buffer và địa chỉ của con trò hàm đúng = địa chỉ của buffer. Tuy vậy đoạn code trong buffer không được thực hiện

Máy của em chạy ubuntu 8.04, dịch = gcc 4.2.3 và lênh biên dịch là:

Code:
gcc -o bct bct.c
Mình nghĩ bạn nên bắt đầu từ việc đọc hiểu bộ giao thức TCP/IP. Sau đó hãy nghiên cứu firewall. Thực tế tớ thấy lúc tớ dựng firewall là lúc tớ phải đi kiếm quyển TCP/IP và đọc lại. Trong thư viện HVA có quyển TCP/IP Illustrated vol 1 được đó.

Sau khi cảm thấy hơi thông TCP/IP thì bắt đầu đọc lên DNS, HTTP,...

Ngoài ra bạn có thể đọc tham khảo các bài viết về Iptables của anh conmale trong diễn đàn này (gồm 2 case). Rồi sau đó đọc ký sự các vụ DDOS đến HVA, cũng rất thú vị.

Mình cũng chỉ biết đưa ý kiến đến đó thôi.
Mình nghĩ bạn nên bắt đầu từ việc đọc hiểu bộ giao thức TCP/IP. Sau đó hãy nghiên cứu firewall. Thực tế tớ thấy lúc tớ dựng firewall là lúc tớ phải đi kiếm quyển TCP/IP và đọc lại. Trong thư viện HVA có quyển TCP/IP Illustrated vol 1 được đó.

Sau khi cảm thấy hơi thông TCP/IP thì bắt đầu đọc lên DNS, HTTP,...

Ngoài ra bạn có thể đọc tham khảo các bài viết về Iptables của anh conmale trong diễn đàn này (gồm 2 case). Rồi sau đó đọc ký sự các vụ DDOS đến HVA, cũng rất thú vị.

Mình cũng chỉ biết đưa ý kiến đến đó thôi.

Z0rr0 wrote:
Có thể mình nghĩ việc tự xuất mã nguồn của chính mình trong C++ là quá xa vời, vì theo mình hiểu rằng tự in mã nguồn thì không nên biết mã nguồn mình có gì.
Chứ cái kiểu "print s='print...'" thì coi như mình biết mình làm gì rồi, cứ thế mà tùy biến sao cho ra những chuỗi giống như code mình mà thôi smilie 


Em nghĩ nếu chương trình tự in chính nó mà không có bất cứ thông tin gì về đối tượng cần in thì làm sao nó in được. Còn nếu nó có thể in mã nguồn mà không cần biết mã nguồn có gì (không có thông tin về đối tượng) thì nó phải đọc thông tin từ đâu đó chứ?

xnohat wrote:
Theo nghiên cứu của mình thì quá trình in ( đọc ) lại chính bản thân mã nguồn của một program giống như một phần tất yếu của quá trình sống sinh học, một thực thể sống sinh học cần tự tham chiếu lại mã ADN của chính nó ( mà ở một program máy tính thì là đọc lại chính mã nguồn của nó ) để phục vụ cho quá trình tự tái tạo và tạo đột biến ( tiến hóa ). Quá trình tự tái tạo mà ta hay nhìn với cái nhìn một cách máy móc là "copy", một program sinh ra một program khác y chang nó , vì chúng ta hay nhìn một program trên phương diện những dòng lệnh cấp cao ( mã thân thiện với con người ) có mối quan hệ chặt chẽ từ câu lệnh này với câu lệnh khác thay thì hiểu rằng nó là một tập các dòng lệnh mã máy ( binnary code ) mà mỗi dòng thể hiện một hành động xác định ( thiếu tính quan hệ vì mỗi dòng chỉ đơn giản là một "lệnh" mà máy phải làm giống như một ông chủ ra lệnh cho nô lệ ) .Vô hình chung ta cứ nghĩ việc tự "copy" là program tự tạo ra một một "file" tương tự, thay vì hiểu đó là một quá trình mà program tự đọc từng dòng code ( dạng binnary code ) của nó rồi ghi lại dưới dạng một "file".Tư tưởng của quá trình tự in ( đọc ) source của một program máy tính tương tự với tư tưởng duy trì nòi giống của thực thể sinh học.

Chút ý kiến, 


Nhưng nếu chỉ đọc binary code thì làm sao bạn có thể xuất được chương trình ra mã C (ngôn ngữ chương trình được viết)? Theo mình biết thì ta chỉ có thể decode binary code ra asm thôi chứ nhỉ smilie
Vậy cuối cùng có vấn đề gì cần hỏi về con trỏ trong C?
Em đề nghị là mở free seminar
Bạn thử tham khảo link dưới đây xem nhé.

http://www.ntop.org/overview.html
hm, tôi thì cho rằng bạn không nên ở nhà 1 năm vì sẽ rất phí thời gian. Nếu bạn có kỷ luật, có khả năng không "khoan nhượng" với chính mình thì không sao. Còn nếu không 1 năm ở nhà sẽ rất phí phạm.

Nếu không đến trường để không phải học các môn "Giết thời gian tự học CNTT", thì sau 1 năm bạn sẽ vẫn phải học các môn đó. Lúc đó thời gian học IT của bạn cũng sẽ vẫn bị giết như thế (trừ phi sau 1 năm bạn quyết định không học đại học nữa).

Ở đại học, người ta không cấm bạn tư duy độc lập, không cấm bạn tự quản lý thời gian, mà theo tôi thấy là ngược lại nó giúp bạn quản lý thời gian tốt hơn. Cụ thể 1 năm đó: bạn vừa phải sắp xếp thời gian để học các môn căn bản, vừa sắp xếp để có thời gian tự học IT, Tiếng Anh. Để phân bổ thời gian hợp lý là điều không dễ và chỉ có thể biết được khi bạn vào thực tế học tập. Còn 1 năm ở nhà không giúp bạn được cái đó.

Cuối cùng: ở đại học, cậu sẽ có bạn học cùng để trao đổi trực tiếp (theo tôi thấy cái này mới quan trọng), nâng cao khả năng tranh luận v.v, có thầy để hỏi và định hướng.

Còn tại liệu toán rời rạc: bạn tìm quyển Discrete math của Rosen (đã được dịch sang tiếng Việt) hoặc tham khảo cuốn Toán rời rạc của thầy Nguyễn Đức Nghĩa.

Vì thế, không nên ở nhà 1 năm làm gì cho phí phạm thời gian. Thực tế tôi thấy sau 2 năm học đại học, tôi mới có thể định hướng là tôi nên học tiếp cái gì sau đó. smilie
[Lạm bàn]

Theo tôi thấy thì tất cả các kiến thức chúng ta học trên lớp đại học (như bạn trangxinh đã liệt kê là hoàn toàn rất cơ bản, có ích rất nhiều cho bạn sau này nếu bạn phát triển rộng hơn. Tôi xin lạm bàn vài VD nhé:

1. Tiếng Anh: không có tiếng Anh thì không xong rồi.
2. Toán rời rạc, cấu trúc dữ liệu và giải thuật, LT đồ thị, LT xác suất: giúp bạn hình thành tư duy và giải quyết vấn đề (Các thuật toán định tuyến trên router dùng LT đồ thị, các bài toán giao thông dùng lý thuyết đồ thị). Các hệ thống chống spam mail hiện nay theo mình biết đều dùng kiến thức của xác suất thống kê.
3. Kiến trúc máy tính, hợp ngữ, lập trình C, lập trình nâng cao ...: không thể thiếu với người làm công nghệ thông tin. VD viết được virus phải hiểu hệ thống (lý thuyết OS, file system, API) biết ngôn ngữ người ta hay dùng viết virus (C, asm).
4. Lập trình mạng, mạng máy tính không thể thiếu nếu muốn đi theo lĩnh vực bảo mật.
5. Lý thuyết truyền tin: dùng trong các ứng dụng như TCP/IP (checksum), rồi cả bảo mật nữa. VD về ứng dụng LTTT trong bảo mật như: nếu bạn đang tiến hành rà quét một đối tượng và giả địa chỉ IP chẳng hạn, thì các địa chỉ IP giả phải có cùng xác suất -> lượng tin bằng nhau -> đối phương không biết IP nào là IP thực của bạn. Làm video online cần mã hóa nội dung để truyền đi nhanh nhất -> cần LTTT. Tất nhiên không cần phải nghĩ ra giao thức (khó) nhưng ít nhất là khi triển khai điều gì ta phải hiểu cách nó hoạt động trước.

Cuối cùng theo mình thấy, khi làm về bảo mật cho 1 công ty nào đó chẳng hạn, ông chủ sẽ không chú ý đến bạn đã chặn được bao nhiêu cuộc tấn công, mà sẽ chú trọng vào sản phẩm mới mà bạn ứng dụng cho hệ thống mạng mà bạn triển khai. Vì thế các lý thuyết về lập trình, ghép nối thiết bị, thiết kế quản trị CSDL, công nghệ phần mềm v.v càng quan trọng.

[Hết lạm bàn]


Mình nghĩ usb virus thì cũng là virus bình thường (USB vẫn chỉ là 1 phân vùng nhỏ trong hệ thống máy tính). Vì thế mà bạn có thể dùng trình diệt virus quét được mà. USB không cho mở là do nó cấm dịch vụ đó của hệ điều hành với nó. Nếu máy đã nhận USB thì có thể vào trình antivirus và chọn quét ổ USB và may mắn sẽ diệt được (Nếu antivirus được cập nhật).

Về antivirus miễn phí thì có antivir hoặc clamAV được đấy. Bạn thử xem nhé
www.free-av.com
www.clamav.net
Turbo C 3.0 là bộ công cụ bao gồm editor + compiler. Bộ dịch của nó là bộ dịch 16 bits. Windows là hệ điều hành 32 bits. Vì vậy mình nghĩ là không thể dùng Turbo C 3.0 để viết các chương trình chạy trên nền Windows.

Ngôn ngữ là ngôn ngữ. Do đó bạn có thể dùng C để viết các chương trình cho Windows, Linux... Cái khác nhau là trình biên dịch. Viết cho windows cần trình biên dịch 32 bits. Một số trình biên dịch 32 bits tôi biết: cl (cài visual c++), gcc.

Để lập trình trên windows bạn phải nắm được các API do Windows cung cấp. Có thể tham khảo thư viện MSDN (Các hàm API trên windows tại www://msdn.microsoft.com).

Muốn viết các chương trình P2P, hay các hiểu các đoạn code ở trên:
- Về p2p bạn phải hiểu giao thức nó sử dụng, thư viện hỗ trợ v.v
- Về đoạn code trên: bạn phải hiểu hệ thống windows (tiến trình) và các hàm API liên quan.

Cuối cùng: các đoạn code exploit thì tập trung vào ứng dụng cụ thể + nền tảng cụ thể. Cái này không có sách nào dạy cả. Để hiểu đoạn code dưới kia đầu tiên theo mình nghĩ bạn nên học cách lập trình C trên windows.

Câu trả lời dễ hiểu?
Theo mình nghĩ:

Mỗi lần bạn vào mạng, địa chỉ IP của bạn sẽ khác so với lần trước. Các site như ở trên chặn một số IP (trong đó có IP của bạn đang dùng vào buổi tối). Do vậy bạn không vào trực tiếp được. Bạn qua proxy, IP của bạn (đối với server) không trong danh sách IP bị chặn nên bạn vào được.

Cũng có thể do bên web server của họ có firewall chỉ chấp nhận số lượng giới hạn kết nối từ 1 IP. Đồng thời có thể có rất nhiều người khác đang dùng chung IP đó để vào các trang đó. Do vậy bạn cũng không vào được trực tiếp
Bài viết trong jforum không hiện được tiếng Việt. Em chưa hiểu nguyên nhân.
Vậy nhờ mod của box move hộ bài viết (nếu có thể) sang bên "thảo luận thâm nhập". Vậy cho em hỏi tiếp. Nếu trong mạng 2 máy cùng chạy SW (B, C), liệu có phải gói tin sẽ chạy từ máy A -> B, hoặc A -> C tùy thuộc vào arp địa chỉ MAC giả có trong ARP cache?.
Khi máy A cần chuyển dữ liệu đến default gateway, nó cần biết địa chỉ MAC của router. Ví dụ địa chỉ IP của router là: 172.28.88.1. Em chạy Switch Sniffer (SW) trên máy B.

Quá trình: máy A gửi broadcast một ARP request đến tất cả các máy trong mạng hỏi địa chỉ MAC của máy có IP 172.28.88.1. Do máy B chạy SW nên sẽ nhận nó có IP 172.28.88.1 và sẽ gửi địa chỉ MAC của máy nó cho A, và máy A sẽ tưởng nhầm đó địa chỉ MAC của router. Do đó tất cả các gói tin A -> router sẽ qua B. Tất nhiên router cũng sẽ trả lời A và sẽ cho A địa chỉ MAC của nó. Vậy reply nào (B -> A, router->A) đến trước sẽ chiếm kết nối từ A trước.

Câu hỏi của em là làm sao mà ARP reply của B (chạy SW) luôn đến trước vì đâu có gì bảo đảm là nó có thể gửi reply nhanh hơn router.
*.com là kiểu file cũ, được dùng từ thời đầu của HĐH DOS. Sau đó là kiểu file exe. Nếu bạn thích làm hợp ngữ trên "Dos": Tải Tasm và mua cuốn "cẩm nang lập trình" của Peter Norton tham khảo xem. Còn nếu bạn muốn viết Asm trên windows thì thử tham khảo tại http://win32assembly.online.fr xem.
 
Go to Page:  First Page Page 1 Page 3 Last Page

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|