1. Trang chủ
  2. » Công Nghệ Thông Tin

Sự tràn bộ nhớ đệm

58 395 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Sự Tràn Bộ Nhớ Đệm
Tác giả Phạm Nguyễn Thanh Hưng, Hà Xuân Hải
Người hướng dẫn Ths Lê Tự Thanh
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Tin Tức Bảo Mật Thông Tin
Thể loại Đồ Án Tốt Nghiệp
Năm xuất bản 2023
Thành phố Hồ Chí Minh
Định dạng
Số trang 58
Dung lượng 4,87 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Theo nghiên cứu của công ty bảo mật Vupen, “vấn đề này gây ra bởi một lỗi tràn bộ đệm trong bộ xử lý ‘win32k.sys’ khi lưu trữ các giá trị registry đã được xử lý với ‘reg_binary’, mà qua

Trang 1

SỰ TRÀN BỘ NHỚ ĐỆM

GVHD: Ths Lê Tự Thanh Nhóm 13:

Phạm Nguyễn Thanh Hưng

Hà Xuân Hải

Trang 2

TIN TỨC BẢO MẬT

THÔNG TIN TRONG TUẦN

Lỗi ngày trở về 0 vượt qua sự kiểm soát của Người sử dụng Windows

Sự tràn bộ nhớ đệm cục bộ là thủ thuật đánh lừa hệ điều hành của Microsoft để hệ thống cấp quyền sử dụng riêng cho kẻ tấn công

Nhiều phiên bản của hệ điều hành Microsoft dễ bị tổn thương nhưng không được tiết lộ, việc tràn bộ đệm ngày về 0 có nguy cơ bị tổn thương mà qua

đó cho phép một kẻ tấn công chiếm được quyền của hệ thống và kiểm soát

máy tính

Theo nghiên cứu của công ty bảo mật Vupen, “vấn đề này gây ra bởi một lỗi tràn bộ đệm trong bộ xử lý ‘win32k.sys’ khi lưu trữ các giá trị registry đã được xử lý với ‘reg_binary’, mà qua đó có thể cho phép người dùng không

có đặc quyền phá bỏ sự quản lý của hệ thống hoặc thực thi mã nhị phân với hạt nhân (hệ thống) đặc quyền, bằng cách thay đổi các giá trị registry liên

quan tới người dùng cuối được xác định bằng ký tự (EUDC) qua phông chữ

Theo tổ chức nghiên cứu an ninh Chester Wisniewski tại Sophos, một kẻ tấn công có thể sử dụng mã khóa liên quan tới EUDC “để mạo danh tài khoản

hệ thống, và có quyền truy cập gần như không giới hạn cho tất cả các thành

phần của hệ thống Windows”

Trang 3

Các bước kiểm tra việc tràn bộ nhớ đệm trên stack trong chương trình sửa lỗi OllyDbg

Công cụ phát hiện tràn bộ nhớ đệm Phòng chống tràn bộ nhớ đệm Công cụ đối phó với việc tràn bộ nhớ đệm

Bút kiểm tra tràn bộ nhớ đệm

CÁC CHỦ ĐỀ TRONG MODULE

Trang 4

Khái niệm tràn bộ nhớ đệm

Phương pháp luận tràn bộ nhớ đệm

Ví dụ tràn

bộ nhớ đệm

Công cụ bảo mật tràn bộ nhớ đệm

Phát hiện tràn bộ nhớ đệm

Biện pháp đối phó tràn bộ đệm

Bút kiểm tra tràn bộ nhớ đệm BIỂU ĐỒ MODULE

Trang 5

Lỗi tràn bộ đệm tổng quát xảy ra khi một bộ nhớ đệm đã được phân chia cho một không gian lưu trữ cụ thể có chứa nhiều dữ liệu được sao chép vào lớn hơn mức mà nó có thể xử lý

Khi chương trình được biên dịch và chạy, nó sẽ chỉ định một phần của bộ nhớ có độ dài 11 bytes để chứa chuỗi tấn công

Hàm Strcpy sẽ sao chép chuỗi “DDDDDDDDDDDDDD” vào chuỗi tấn công, lúc này bộ đệm sẽ vượt quá kích thước 11 bytes, dẫn tới tràn bộ đệm

Đây là loại dễ bị tổn thương trong hệ thống dựa trên UNIX và NT

Trang 6

Phương thức kiểm tra biên không được thực

hiện đầy đủ hoặc, trong nhiều trường hợp,

chúng bị bỏ qua hoàn toàn

Tại Sao Các Chương Trình Và Ứng

Dụng Dễ Bị Tổn Thương ?

Trang 7

Stack sử dụng cơ chế

Last-In-First-Out (vào sau ra trước) để

truyền hàm tham số và tham

chiếu với các biến cục bộ

Nó hoạt động như một bộ đệm,

giữ tất cả các thông tin mà hàm

cần

Được tạo ra vào thời điểm bắt

đầu của hàm và giải phóng lúc

kết thúc hàm

Phần dưới của bộ nhớ

BP tại các nơi bên trong khung stack

Phần trên của bộ nhớ

Các điểm SP ở đây

Hướng đi vào

Hướng tăng của stack

Tìm Hiểu Về Stack

Bộ Đệm2 (biến cục bộ 2)

Bộ Đệm1 (biến cục bộ 1) Điểm quay trở

về Chức năng gọi các đối số

Trang 8

Một Stack bình thường Stack khi bị kẻ tấn công gọi

một chức năng

Stack sau khi bị một chức năng phá hoại

Phần dưới của Stack Phần dưới của Stack Phần dưới của Stack

Dữ liệu trên đoạn

stack Dữ liệu trên đoạn stack Dữ liệu trên đoạn stack

Địa chỉ quay về Địa chỉ quay về mới

Các dữ liệu khác trên đoạn stack

Dữ liệu bị ghi đè trên đoạn stack

Phần cuối của Stack Phần cuối của Stack

Dữ liệu mới

Một số dữ liệu

có thể bị ghi đè

Trang 9

Heap là một khu vực của bộ nhớ được sử dụng bởi một ứng dụng và được

cấp phát động tại thời gian chạy của các hàm, chẳng hạn như malloc()

Các biến tĩnh được lưu trữ trên stack cùng với dữ liệu được giao, sử dụng

giao diện malloc

Heap lưu trữ tất cả các trường hoặc thuộc tính, hàm tạo và phương thức của một lớp hoặc một đối tượng

Tìm Hiểu Về Heap

Dung lượng Heap đơn giản

Dung lượng

bộ nhớ Trường điều

khiển

Trường điều khiển

Dung lượng

bộ nhớ

Dung lượng

bộ nhớ Trường điều

khiển

Trang 10

Nếu một ứng dụng sao chép dữ liệu mà không kiểm tra dù nó phù hợp với nơi được sao chép tới, thì kẻ tấn công có thể cung cấp một lượng lớn dữ liệu cho ứng dụng đó, thực hiện ghi đè lên thông tin quản lý của heap

Kẻ tấn công làm một bộ nhớ đệm bị tràn trên phần dưới của heap, ghi đè lên các biến động khác gây nên các biến đổi bất ngờ và không mong muốn

Lưu {: trong hầu hết các môi trường, điều này sẽ cho phép kẻ tấn công kiểm soát được việc thực thi của

chương trình

Trang 11

"Hủy bỏ" một mục trên cùng của ngăn xếp Pop quan trọng của Các hoạt động

ngăn xếp

Push

Đặt một mục lên trên đỉnh của ngăn xếp

Hoạt động của Push và Pop

Quay trở về nội dung được chỉ bởi con trỏ

và thay đổi con trỏ

Mở rộng con trỏ lệnh hiện hành (EIP)

EIP trỏ đến đoạn mã mà bạn đang thực hiện Khi bạn gọi một hàm, chúng sẽ được lưu trữ trên ngăn xếp để sử dụng sau

Mở rộng con trỏ Stack

(ESP) ESP trỏ đến vị trí hiện tại trên ngăn xếp và cho phép vài thứ được thêm vào và loại bỏ từ ngăn xếp bằng cách sử dụng hoạt động push và pop hoặc thao tác trực tiếp con trỏ ngăn xếp

Mở rộng con trỏ nền (EBP)

Các máy chủ EBP như một điểm tĩnh để tra cứu thông tin trên ngăn xếp giống như các biến và

dữ liệu trong một hàm sử dụng các hiệu số

Hoạt Động Của Stack

Trang 12

Shellcode là một mã nhỏ được sử dụng trong việc khai thác lỗ hổng của một phần mềm

Bộ đệm là mục tiêu ưu thích của các kẻ tấn công vì chúng rất dễ tràn nếu xảy ra điều kiện phù hợp

Shellcode gây tràn bộ đệm, viết bằng hợp ngữ, khai thác các lỗ hổng trong ngăn xếp và bộ nhớ quản lí heap

Trang 13

ADMutate (bởi K2) chấp nhận một lỗi tràn bộ đệm nhằm khai thác như là đầu vào và ngẫu nhiên tạo ra một phiên bản có chức năng tương đương (đa hình)

Trang 14

Phương pháp luận tràn bộ nhớ đệm

Khái niệm tràn bộ nhớ đệm

Phát hiện tràn bộ nhớ đệm

Ví dụ tràn

bộ nhớ đệm

Công cụ bảo mật tràn bộ nhớ đệm

Bút kiểm tra tràn bộ nhớ đệm

Biện pháp đối phó tràn

bộ đệm

Trang 15

Kiến Thức Cần Thiết Để Khai Thác Lỗi Tràn Bộ Đệm Trong

Chương Trình

Hiểu biết về hoạt động của bộ nhớ stack và heap

Hiểu biết về cách hệ thống gọi công việc

ở cấp độ mã máy

Quen với các công

cụ biên dịch và sửa lỗi như gdb

Kiến thức về lắp ráp

và ngôn ngữ máy

Kiến thức ngôn ngữ lập trình C và Perl

Trang 16

Các Bước Tràn Bộ Đệm

Bước 1

Tìm sự hiện diện và vị trí của lỗ hổng tràn bộ đệm

Bước 2

Ghi nhiều dữ liệu vào bộ đệm hơn mức mà nó có thể xử lý

Trang 17

Tấn Công Một Chương Trình Thực

Giả sử rằng một hàm chuỗi bị khai thác, kẻ tấn công

có thể gửi một chuỗi dài đầu vào

Con trỏ trả về của hàm tiến hành ghi đè, và kẻ tấn công thành công trong việc thay đổi luồng thực hiện lệnh

Nếu người sử dụng chèn vào mã đầu vào, anh

ta hoặc cô ta có thể biết chính xác địa chỉ và kích thước của ngăn xếp và làm con trỏ trở về hướng tới đoạn mã của mình để thực hiện chỉ thị

Trang 18

Fprintf ( stdout,

“%s”, user) ; }

Trang 19

Gây Tràn Bộ Đệm Bằng Cách Sử Dụng Chuỗi Định Dạng

Trong C, xét ví dụ của BoF sử dụng

Trang 20

Tràn bộ nhớ đệm cho phép chúng ta thay đổi địa chỉ trả về của một hàm

Đặt một số mã trong bộ đệm và thiết lập địa chỉ trở về

Trang 21

Một Khi Stack Bị Phá Vỡ

Được phép truy cập

Một khi quy trình dễ tổn thương bị chiếm, kẻ tấn công có các đặc

quyền tương tự như quy trình và có thể điều khiển truy cập bình

thường

Sau đó anh ta hoặc cô ta có thể khai thác một lỗi tràn bộ đệm cục bộ để đạt được quyền truy cập của siêu người dùng

Tạo một cửa sau

Giao diện UNIX cụ thể

Chụp lại một kết nối đầu cuối X

Trang 22

bút kiểm tra tràn bộ nhớ đệm

Khái niệm tràn

bộ nhớ đệm

Phương pháp luận tràn bộ nhớ đệm

Biện pháp đối phó tràn bộ đệm

Công cụ bảo mật tràn bộ nhớ đệm

Phát hiện tràn

bộ nhớ đệm

Ví dụ tràn bộ nhớ đệm

Bút kiểm tra tràn

bộ nhớ đệm

Trang 23

Lỗi Tràn Bộ Đệm Không Thể Kiểm Soát Đơn Giản

Ví dụ của việc tràn ngăn xếp không thể kiểm soát Ví dụ của việc tràn heap không thể kiểm soát

/*Đây là một chương trình cho thấy một lỗi tràn

không thể kiểm soát đơn giản trên ngăn xếp*/

/*sao chép 20 bytes của A và bộ đệm*/

Return 1; /*quay trở lại, điều này sẽ gây ra một truy

cập trái phép do việc các ngăn xếp tham nhũng*/

/*gọi các chức năng của chúng ta*/

/*rời khỏi các chức năng chính*/

/*in ra một tin nhắn ngắn, việc thực thi sẽ không thể

tiến hành được vì thời điểm này bộ đệm bị tràn*/

/*đơn giản nhất của việc tràn heap*/

Trang 24

Tràn Bộ Đệm Đơn Giản Trong C

Điều đầu tiên của bất kì chương trình nào là khai báo hai chuỗi biến và cấp phát bộ nhớ cho chúng

“Tên” biến sẽ lấy 10 byte của bộ nhớ (mà sẽ cho phép nó giữ một chuỗi 10 ký tự)

“Các lệnh nguy hiểm tới hệ thống” có biến dài 128 byte

Bạn phải hiểu rằng trong C, khối bộ nhớ cho các biến sẽ được đặt trực tiếp bên cạnh nhau trong không gian bộ nhớ ảo dành cho chương trình

Chương trình C dễ bị tổn thương overrun.C

Trang 25

Để biên dịch chương trình overrun.c, chạy

6 byte thêm là chi phí được sử dụng bởi hệ thống

“maHoc” để cho phép bộ nhớ trở lại để sử dụng

chung khi nó được giải phóng

Địa chỉ cho biến “lệnh hệ thống nguy hiểm” là 16

byte bắt đầu từ biến “tên”

Trang 26

Khai Thác Ngữ Nghĩa Của Các Giải Thích Trong C (Chú Thích)

Thêm “@” sau “/*”

Chú thích có thể được định nghĩa bởi các mệnh đề sử dụng LCLint

Thêm “@” sau “/*” (được xem là chú

thích trong C) được công nhận như cú

pháp các thực thể bởi công cụ LCLint

Như vậy, trong một tham số khai báo,

nó cho giá trị thông qua tham số này

có thể không trống

VD: /*@ this value need not be null@*/

Các giả định miêu tả về bộ đệm có thể được thông qua hàm

Các trạng thái của bộ đệm bị hạn chế khi các hàm giả định quay trở

về và bị hạn chế sử dụng trong các

ví dụ sau: minSet, maxSet, minRead và maxRead

Trang 27

Làm Thế Nào Để Khai Thác Lỗi Tràn Bộ Đệm

Đối với phần NOP Đối với “Các sự kiện

chính” Đối với “Con trỏ quay về” Ngẫu nhiên thay thế các

NOPs với các phân đoạn

chức năng tương đương

của mã (e.g.: x++; x-;

?NOP NOP)

Áp dụng XOR để kết hợp

mã với một khóa khó hiểu ngẫu nhiên cho IDS Các mã CPU cũng phải giải mã các mã không hiểu được trong thời gian chạy chương trình giải mã.Bởi thế, bộ giải mã trở thành đa hình và rất khó để phát hiện

Ngẫu nhiên chỉnh sửa LSB của con trỏ hướng tới khu vực của NOP

Trang 28

Khái niệm tràn

bộ nhớ đệm

phương pháp luận tràn bộ nhớ đệm

biện pháp đối phó tràn bộ đệm

công cụ bảo mật tràn bộ nhớ đệm

phát hiện tràn

bộ nhớ đệm

ví dụ tràn bộ nhớ đệm

bút kiểm tra tràn bộ nhớ đệm

Trang 29

Xác Định Tràn Bộ Nhớ Đệm

Bước 1 Bước 2 Bước 3

Bước 6 Bước 5 Bước 4

Chạy máy chủ web

trên máy cục bộ

Phát yêu cầu với mọi thẻ dài, thẻ kết thúc với “$$$$$”

Sử dụng IDA-Proto để

xây dựng lại nơi bị

khai thác

Sử dụng bộ phận phân tách và trình gỡ rối

Nếu máy chủ web bị treo, tìm kiếm nơi tập kết lõi của “$$$$$” để tìm kiếm vị trí tràn

Sử dụng các công cụ

tự động như codeBlocker, eEye Retina, …

Trang 30

Làm Thế Nào Để Phát Hiện Lỗi Tràn Bộ Đệm Trong Một Chương Trình ?

Biến cục bộ

Trong trường hợp này, kẻ tấn công

có thể làm cho các chuỗi khai báo trông giống như các biến cục bộ trong các hàm hoặc các phương thức, và xác nhận sự có mặt của các ranh giới kiểm tra

Nó là điều kiện cần thiết để kiểm tra việc sử dụng có phù hợp với các hàm tiêu chuẩn, đặc biệt là các việc liên quan tới chuỗi và đầu vào hoặc đầu ra

Các hàm tiêu chuẩn

Một cách khác là cung cấp các ứng dụng với số lượng lớn dữ liệu và kiểm tra các hành vi bất thường

Trang 31

BOU (Tiện Ích Tràn Bộ Đệm)

Các công cụ BOU có thể được sử dụng bởi một kẻ tấn công nhằm

kiểm tra các ứng dụng Web để tạo điều kiện cho lỗi tràn bộ đệm

Công cụ này cần hai

đầu vào

Các tập tin “yêu cầu”, dùng để kiểm tra Cách thức để nhiều mã cùng tấn công (quy định trong một tập tin gọi là “lệnh”)

Nó lấy một tập tin yêu cầu để kiểm tra và xuất ra tất cả các hoạt động

tới STDOUT dựa trên mức độ của quy định tính dài dòng

Ví dụ của tập tin ‘command’

Ví dụ của tập tin ‘request’

Trang 32

Kiểm Tra Điều Kiện Tràn Heap

Hai thanh ghi EAX và ECX,

có thể được đặt cùng với địa chỉ mà người sử dụng cung cấp

1 Cho phép ghi đè lên con

ví dụ UEF (bộ lọc ngoại lệ chưa xử lý)

2 Các địa chỉ khác có thể

là địa chỉ của mã người dùng cung cấp cần phải được thực hiện

Khi lệnh MOV hiển thị trong khung bên trái của ảnh chụp màn hình

được thực hiện, việc ghi đè được diễn ra Khi các hàm được gọi, mã

người dùng cung cấp được thực thi

Trang 33

Thử Nghiệm Điều Kiện Tràn Heap

Trang 34

Các Bước Thử Nghiệm Tràn Ngăn Xếp Trong OllyDbg Debugger

Trang 35

Thử Nghiệm Tràn Ngăn Xếp Trong OllyDbg Debugger.

Bước 1 Bước 2 Bước 3 Bước 4 Bước 5

Biểu diễn cách thức mà một kẻ tấn công có thể ghi đè lên con trỏ lệnh

Một dãy lớn các ký tự chẳng hạn như “A”, có thể được cung cấp trong trường tham số được hiển thị

Mở trình thực thi với các đối số được cung cấp

(AAAAAAAA

…) và tiếp tục thực hiện, kết quả được hiển thị trong fig

EIP bao gồm các giá trị

“41414141” tượng trưng cho hệ thập lục phân

“AAAA”

Trang 36

Thử Nghiệm Tràn Ngăn Xếp Trong OllyDbg Debugger

Trang 37

Thử Nghiệm Định Dạng Chuỗi Điều Kiện Sử Dụng IDA Pro

Lỗ hổng định dạng chuỗi Thao tác với các tham số

Ví dụ một yêu cầu chính đáng như

Trang 38

Thử Nghiệm Định Dạng Chuỗi Điều Kiện Sử Dụng IDA Pro

Kẻ tấn công xác định sự hiện diện của

• Địa chỉ của một loại định dạng xác định

được đẩy vào ngăn xếp hiển thị rõ trước khi

lệnh gọi tới printf được thực hiện

Trang 39

Công Cụ Phát Hiện Tràn Bộ Nhớ Đệm (BoF)

Trang 40

Khái niệm tràn

bộ nhớ đệm

Phương pháp luận tràn bộ nhớ đệm

Biện pháp đối phó tràn bộ đệm

Công cụ bảo mật tràn bộ nhớ đệm

Phát hiện tràn

bộ nhớ đệm

Ví dụ tràn bộ nhớ đệm

Bút kiểm tra tràn bộ nhớ đệm

Trang 41

Phòng Chống

Tràn Bộ Đệm

Hướng dẫn sử dụng kiểm soát

Trang 42

Ngăn Chặn Tấn Công BoF

Sử dụng các loại ngôn ngữ an toàn

(Java, ML)

Thực hiện kiểm tra thời gian thực

Đặt ngẫu nhiên vị trí của hàm trong libc

Địa chỉ rắc rối Đánh dấu ngăn xếp như là không

được thực hiện, đặt vị trí ngăn

xếp ngẫu nhiên

Phân tích mã nguồn tĩnh

Trang 43

Thiết kế chương trình với trọng

tâm bảo mật

Vô hiệu hóa việc thực thi ngăn xếp (có thể thực hiện trên Solaris)

Kiểm tra và sửa mã để tìm lỗi Ngăn chặn sử dụng các hàm

nguy hiểm: gets, strcpy, …

Trang 44

Lập Trình Các Biện Pháp Đối Phó

Hãy thay đổi bản thân ngôn ngữ C ở cấp độ ngôn ngữ để giảm nguy cơ tràn bộ đệm

Sử dụng phân tích mã nguồn tĩnh hoặc động ở cấp độ mã nguồn

để kiểm tra mã của các vấn đề tràn bộ đệm Thay đổi các trình biên dịch ở cấp độ biên dịch để giới hạn kiểm tra hoặc bảo vệ các địa chỉ từ thanh ghi đè

Thay đổi các quy tắc ở cấp độ hệ điều hành để các trang bộ nhớ được phép chứa các số liệu thực thi

Hãy sử dụng các thư viện an toàn

Hãy sử dụng các công cụ có thể phát hiện lỗ hổng tràn bộ đệm

Trang 45

Chống Thực Thi Dữ Liệu (DEP)

DEP là một tập hợp của các công nghệ phần

cứng và phần mềm theo dõi chương trình để

Khi một tiến trình xảy ra phần cứng thi hành

lệnh DEP phát hiện mã đang chạy từ các địa

điểm này và đặt ra một ngoại lệ

Để ngăn chặn các mã độc hại lợi dụng cơ chế xử

lý ngoại lệ trong Windows cần sự giúp đỡ bởi

phần mềm thi hành lệnh DEP

DEP giúp sức trong việc ngăn chặn các mã thực

thi từ các trang dữ liệu, chẳng hạn như các

trang heap mặc định, các trang bộ nhớ pool, và

các trang stack khác nhau, nơi mà mã không

thực hiện được từ heap và stack mặc định

Trang 46

Enhanced Mitigation Experience Toolkit (EMET)

Enhanced Mitigation Experience Toolkit (EMET) được thiết kế để tăng khó khăn cho kẻ tấn công trong việc khai thác các lỗ hổng của phần mềm và truy cập vào hệ thống

Nó hỗ trợ các kỹ thuật giảm thiểu nhằm ngăn ngừa các kỹ thuật tấn công phổ biến, chủ yếu liên quan đến tràn ngăn xếp và các kỹ thuật được sử dụng bởi malware để tương tác với hệ điều hành bằng phương pháp thỏa hiệp

Nó cải thiện khả năng phục hồi của Windows để khai thác lỗi tràn bộ đệm

Nó ngăn ngừa các kỹ thuật phổ biến sử dụng để khai thác lỗi tràn ngăn xếp trong Windows bằng việc thực hiện xác nhận chuỗi SHE

Nó đánh dấu các phần của một tiến trình bộ nhớ không được thực thi, gây khó khăn trong việc khai thác các lỗ hổng tham nhũng bộ nhớ

Điều mới trong EMET 2.0 là bắt buộc địa chỉ không gian bố trí ngẫu nhiên (ASLR), cũng như các module phi nhận thức ASLR trên tất cả các phiên bản Windows mới

Bộ xử lý cấu trúc ngoại lệ bảo vệ

việc ghi đè (SEHOP)

Phòng chống thực thi dữ liệu động (DDEP)

Địa chỉ không gian bố trí ngẫu nhiên (ASLR)

Ngày đăng: 24/05/2014, 00:51

HÌNH ẢNH LIÊN QUAN

Hình thức đúng  Int func (char *user)  { - Sự tràn bộ nhớ đệm
Hình th ức đúng Int func (char *user) { (Trang 18)

TỪ KHÓA LIÊN QUAN

w