|
|
Đọc help của OllyDbg để biết ý nghĩa từng tùy chọn.
|
|
|
TheShinichi wrote:
mfeng wrote:
Có hai xu hướng làm khóa cứng chính:
- Dạng khóa cứng table-lookup based truyền thống: Chương trình cần bảo vệ đọc một giá trị quan trọng (có ảnh hưởng tới hoạt động chương trình) từ dongle. Nếu giá trị trả về chính xác, chương trình sẽ chạy tiếp và không bị lỗi. Nếu sai hoặc không phát hiện ra dongle, chương trình sẽ thoát.
Vd: HASP4, HASP SRM, Rockey4, Sentinel...
Nhược điểm: Dạng table lookup này dễ bị làm emulators. Chỉ cần dump ra đầy đủ các giá trị, sau đó dùng một emulators để giả lập dongle này.
Ủa, chẳng lẽ đoạn code check thông tin trên dongle không thể bị bypass/patch sao ?
Nếu sử dụng SDK của các dongle hiệu quả, không chỉ đơn giản patch đoạn code check dongle là xong. Nếu giả sử đã patch dongle, thì giá trị quan trọng ở trên lấy ra từ đâu khi không có dongle? Cho nên nhược điểm chính của cơ chế trên là bị emulated.
|
|
|
Có hai xu hướng làm khóa cứng chính:
- Dạng khóa cứng table-lookup based truyền thống: Chương trình cần bảo vệ đọc một giá trị quan trọng (có ảnh hưởng tới hoạt động chương trình) từ dongle. Nếu giá trị trả về chính xác, chương trình sẽ chạy tiếp và không bị lỗi. Nếu sai hoặc không phát hiện ra dongle, chương trình sẽ thoát.
Vd: HASP4, HASP SRM, Rockey4, Sentinel...
Nhược điểm: Dạng table lookup này dễ bị làm emulators. Chỉ cần dump ra đầy đủ các giá trị, sau đó dùng một emulators để giả lập dongle này.
- Dạng mới smart-chip : dạng này bao gồm cả một hệ nhúng bên trong dongle, có CPU, RAM, flash... Một đoạn code quan trọng của chương trình cần bảo vệ được biên dịch và chuyển vào hệ nhúng này. Chương trình khi kích hoạt sẽ gọi dịch vụ của dongle, thực thi đoạn code nhúng như một phần của chương trình chính.
Vd: SenseLock, Rockkey6.
Hiện thời chưa rõ dạng smart-chip này đã bị crack hay chưa .
|
|
|
Để dùng được chức năng packet injection cho Intel ipw3945 a/b/g trên linux, bạn chuyển qua dùng driver ipwraw thay vì dùng iwl3945 hay ipw3945 xem sao. Đã thử nghiệm trên Ubuntu 8, BT3 đều thu được kết quả tốt .
Tham khảo thêm http://www.aircrack-ng.org/doku.php?id=ipw3945
|
|
|
phananhsang wrote:
Khổ lắm các bác ơi, nếu mà c# hay vb .net thì nói làm gì. Đằng này em đang muốn xây dựng một ứng dụng bằng c++ .net vì thằng này tiện lợi cho em giao tiếp usb nữa.
Trên .Net Framework, dùng ngôn ngữ nào trong số C#, VB.Net hay C++.Net (CLI/C++) đều tương tự như nhau, chỉ khác nhau về cú pháp.
phananhsang wrote:
Em nghe lời bác mode zorro kiếm mãi tài liệu lập trình network theo cái lớp System::Net::Sockets thế mà chẳng có sách nào chỉ dạy lập trình lập trình network trong c++ .net cả, ví dụ trên mạng cũng chẳng thấy gì, thật chán nản quá.
Chẵng lẽ công em học mấy tuần thằng c++ .net bỏ phí . Mà đang hứng với kiểu lập trình class của nó nữa chứ.
Đường link bác Z0rr0 đưa ra là tài liệu chính thức của Microsoft về cách sử dụng System.Net.Sockets, bao gồm cả ví dụ bằng các ngôn ngữ VB.Net, C#, VC++.Net, không hiểu bạn đã đọc chưa mà lại phán "chẳng thấy gì"?
Nếu thích dùng Socket API của Winsock hơn Socket của .Net Framework, bạn có thể viết trực tiếp bằng Native C++, xuất ra một thư viện DLLrồi từ chương trình viết trên .Net Framework gọi các API của DLL này. Tham khảo cách gọi native code API từ .Net: http://msdn.microsoft.com/en-us/library/aa288468.aspx. Tuy nhiên theo đánh giá cá nhân, việc này giống như "vẽ rắn thêm chân" tự làm khó mình. Với yêu cầu của bạn, dùng System.Net.Sockets sẽ đơn giản hơn so với dùng Winsock API.
|
|
|
MFC: Tham khảo về CFile và các class dẫn xuất của nó.
API: Đọc tài liệu về CreateFile, ReadFile, WriteFile.... trong MSDN.
|
|
|
Bạn cài đặt Masm32, xem file Windows.inc để biết các khai báo struct dùng trong WinAPI.
Với WIN32_FIND_DATA:
Code:
WIN32_FIND_DATA STRUCT
dwFileAttributes DWORD ?
ftCreationTime FILETIME <>
ftLastAccessTime FILETIME <>
ftLastWriteTime FILETIME <>
nFileSizeHigh DWORD ?
nFileSizeLow DWORD ?
dwReserved0 DWORD ?
dwReserved1 DWORD ?
cFileName BYTE MAX_PATH dup(?)
cAlternate BYTE 14 dup(?)
WIN32_FIND_DATA ENDS
|
|
|
Đề nghị đọc tài liệu về cấu trúc file PE.
|
|
|
@somnuc: Bạn phải sửa lại bài viết đầu tiên thành tiếng Việt có dấu. Và không được post cùng một nội dung vào nhiều mục thảo luận khác nhau.
|
|
|
CS & SS là thanh ghi chứa địa chỉ segment của mã lệnh (CS) và stack (SS). Khi thực thi một file exe, DOS sẽ tìm segment nào còn trống và gán địa chỉ segment này cho các thanh ghi, đồng thời nạp dữ liệu vào segment đó.
bboy0303 wrote:
Có cách nào để xác định 2 giá trị đầu vào để bắt đầu chương trình SS=52D2 và CS=52D0 ko ạ?
DOS làm điều này, bạn chỉ có thể xác định sau khi chương trình đã được nạp.
bboy0303 wrote:
Và cuối cùng là làm sao để đặt cs:ip vào 1 địa chỉ theo ý muốn ạ (ví dụ đổi cs:ip của hello.exe là 52D0:0000 thành 52D1:0002)?
Trong exe header có thành phần ghi giá trị khởi tạo CS:IP. Thay đổi giá trị này nếu muốn, nhưng chương trình có thể bị treo.
Muốn thay đổi IP khi thực thi, có thể dùng các cách sau
Code:
mov ax, địa chỉ IP mới
jmp ax
push địa chỉ IP mới
ret
|
|
|
satashi wrote:
Gặp ASProtect 2.x, em cần phải soạn Olly Script .Nhưng chả biết gì cả !!
Không biết hàm nào trong OllyScript di chuyển dword ptr ss:[esp] vào biến a ?
Thank
Bạn cần đọc tài liệu ngôn ngữ mà OllyScript hỗ trợ. Download file zip mã nguồn của Ollyscript http://www.openrce.org/downloads/download_file/182về và đọc file ORIGINAL_README.txt .
|
|
|
Bạn đọc kĩ tài liệu về bảng FAT http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx để giải đáp các thắc mắc trên.
|
|
|
Nếu không dùng Int 21h của DOS mà muốn duyệt nội nội dung cây thư mục thông qua các hàm đọc/ghi đĩa trực tiếp (cấp sector): Int 13h (AH=2), Int 25h, nguyên lý như sau:
Tùy thuộc loại phân vùng FAT hay NTFS mà cần đọc bảng File Allocation Table và hay MFT.
Với FAT:
- Đọc Boot Sectors để lấy địa chỉ thư mục gốc, lấy địa chỉ của FAT.
- Từ địa chỉ thư mục gốc, đọc Directory Table để lấy các directory entry, mỗi entry là tên một file hay folder, bên trong entry này có chứa địa chỉ trỏ tới dữ liệu (nếu là file), hay một Directory Entry khác (nếu là table).
- Đọc nội dung Directory Entry hay nội dung file, cần dùng bảng FAT để tra ra các cluster tiếp theo.
Với NTFS: đọc kĩ tài liệu về MFT.
|
|
|
Dựa theo bài quote của mrro (nguồn chính là từ một blog đăng lên ngày 21/7, nhưng ngay sau đó vài phút tác giả đã xóa đi) và tham khảo http://addxorrol.blogspot.com/2008/07/on-dans-request-for-no-speculation.html. Chỗ nào không chính xác nhờ mọi người chỉnh giúp
Có hai vấn đề cần thảo luận:
1. Sự không cẩn trọng trong thiết kế hoạt động DNS Server, dẫn tới bộ tạo ngẫu nhiên của một số trường trong DNS record không thực sự "ngẫu nhiên". Do đó xác suất xảy ra giả mạo gói tin DNS response có thể cao. Đây là vấn đề được cảnh báo từ trước, từ đó dẫn tới vấn đề thứ 2.
2. Attack vector để poisoning một DNS server như thế nào?
Vấn đề thứ nhất: lỗi thiết kế của DNS Server
Mỗi gói tin DNS request có chứa query id (QID) hay còn gọi là Transaction ID (TxID), được gửi tới DNS server thông qua một source-port (S-PORT). DNS Server trả lời bằng một gói tin DNS Response, chỉ được bên gửi chấp nhận khi:
- Có chứa cùng QID hay TxID
- Dest Port chính là S-PORT trong DNS Request.
Như vậy để giả mạo được DNS Response, Malory phải biết được 2 thông tin này, hoặc cách khác là gửi hàng loạt gói tin khi biết xác suất QID và S-PORT nằm trong khoảng nào. S-PORT theo lý thuyết là khá lớn (2^16 - 1024 port), tuy nhiên theo một số thông tin, S-PORT thường cố định trên một DNS server và thay đổi sau mỗi lần khởi động lại!!?
Vấn đề thứ 2: Attack vector để poisoning một DNS server
Kịch bản: Malory muốn "thuyết phục" Bob, một DNS Server (ns.bob.com), laf tên miền victim.com trỏ tới địa chỉ giả mạo là 6.6.6.6.
1. Malory gửi hàng loạt DNS request rác cho Bob (ns.bob.com): aaaa1.victim.com, aaa2.victim.com .... zzz9.victim.com
Điều này làm Bob không tìm thấy trong DNS cache của mình các tên miền trên. Bob phải hỏi DNS Server cấp cao hơn (Alice) về DNS server của các tên miền *.victim.com này.
2. Malory giả mạo các DNS Response từ Alice cho Bob, dùng cách thức đề cập ở vấn đề 1. DNS Response này chứa:
- *.victim.com trỏ tới 6.6.6.6
- Additional RRs có thông tin: victim.com trỏ tới 6.6.6.6
Cơ hội để Malory "thuyết phục" được Bob rằng victim.com trỏ tới 6.6.6.6 sẽ tăng lên khi số lượng gói tin giả mạo DNS Response lớn để thử các khả năng của QID và S-PORT (có thể xác định được trước S-PORT nếu giá trị này khá ổn định) theo kiểu tấn công birthday paradox attack.
Theo những gì quote của mrro phân tích ở trên, attack vector này có khả năng vô hiệu hóa các fix #1 (tăng cường tính ngẫu nhiên của QID) và #2 (bailiwick checking các trường RR). Cụ thể như thế nào mọi người hãy thảo luận.
|
|
|
Z0rr0 wrote:
Có thể trình độ chưa tới, tui chưa thể làm được với C++
Giải pháp (hơi ... thô) là đem mã nguồn nhúng vào resource, chương trình khi chạy sẽ lấy và in ra màn hình
|
|
|
KAV 7.0 diệt được virus này.
virus Heur.Trojan.Generic (modification)
|
|
|
Chương trình viết không bảo toàn Stack. Push mà không có Pop.
Fix:
Offset 0x09: inc cx (0x41) -> pop cx (0x59)
|
|
|
Search google với keywords: "multiple remote desktop" "Windows XP"
|
|
|
Tham khảo thêm phân tích kĩ thuật của Storm worm http://www.secureworks.com/research/threats/storm-worm/?threat=storm-worm
Nhìn chung, ngoài ý tưởng hình thành botnet thông qua giao thức eDonkey/Overnet, worm này có mang các đặc tính phổ biến như:
- Backdoor
- Exploit module: dùng mã khai thác lỗi chưa được vá nhằm tăng cường khả năng phát tán.
- Thu thập thông tin đáng giá của victims: email addresses, credit card, serials/CD-key...
- Mass mailing: spam hoặc phát tán worm
- Attacks tools
- Hệ thống tự bảo vệ chống AV, Antispyware: như anti-debug/reverse, obfuscated code, rootkit...
- Tự động update: tính năng này đã xuất hiện cách đây mấy năm.
Qua phân tích kỹ thuật, Storm Worm sử dụng mạng P2P hình thành một botnet chỉ nhằm cập nhật link download phiên bản worm mới từ một site nào đó. Các worm khác chỉ cập nhật theo mô hình single point, là một website có địa chỉ hard-coded từ trước. Nếu site này bị block, khả năng cập nhật sẽ bị chặn đứng.
Worm này chưa có chức năng điều khiển botnet thông qua P2P, mà chỉ cập nhật mục tiêu DDoS thông qua một file config có địa chỉ hard-coded trong mã lệnh worm. Đây là hạn chế, và có lẽ sẽ được nâng cấp trong phiên bản tới, hoặc một dạng worm mới.
Có lẽ các thế hệ worm sau này không chỉ dùng một mạng P2P mà có thể kết hợp nhiều mạng: Kad, edonkey/overnet, gnutella, bittorrent ... Hoặc có thể lợi dụng các mạng IM ?
|
|
|
|
|
|
|