Chương trình pe của bạn sử dụng như thế nào vậy?
sao mình thử mở một số dll trong thư mục windows system mà không thấy hàm nào vậy?
Thư mục Security chứa các chứng nhận phần mềm sẽ được Windows "coi ngó" trước khi chương trình được thực thi. Điều đặc biệt là Windows xem nó nhưng bộ nạp (Loader) sẽ không nạp nó lên bộ nhớ, có nghĩa rằng trong các Sections không có nó => nó không có RVA. Vì vậy mà trong IMAGE_DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_SECURITY] nếu trường VirtualAddress có nghĩa thì nó là Offset tập tin chứ không phải RVA.
Thư mục Security nếu có sẽ chứa 1 hoặc nhiều các kiểu chứng nhận khác nhau, mỗi kiểu chứng nhận bao gồm 1 cấu trúc WIN_CERTIFICATE + khối dữ liệu, kích thước khối dữ liệu được lưu trong WIN_CERTIFICATE.dwLength. Các kiểu chứng nhận được xắp xếp tuần tự và được canh chỉnh bằng 8 bytes (mỗi kiểu bắt đầu tại Offset chia hết cho 8).
Chúng ta có thể nhận con trỏ kiểu chứng nhận đầu tiên như :
Visual C++ Code:
LPWIN_CERTIFICATE Security_GetCertificate() { PIMAGE_DATA_DIRECTORY pDataDirectory = (PIMAGE_DATA_DIRECTORY)GetDataDirectory(IMAGE_DIRECTORY_ENTRY_SECURITY); DWORD dwOffset = pDataDirectory->VirtualAddress; DWORD dwSize = pDataDirectory->Size; if (dwAddress && dwSize) return (LPWIN_CERTIFICATE)(m_pFile + dwOffset); return NULL; }
và tuần tự các chứng nhận khác cho đến hết như :
Trong đó dwTotalSize chính là kích thước tổng mà được lấy từ trường Size trong thư mục Security. và dwCurSize là kích thước cộng dồn tới hết chứng nhận trước đó.Visual C++ Code:
LPWIN_CERTIFICATE Security_GetCertificate(LPWIN_CERTIFICATE pPrevCertificate, DWORD & dwCurSize, DWORD dwTotalSize) { dwCurSize += sizeof(WIN_CERTIFICATE) + pPrevCertificate->dwLength - 1; DWORD dw = dwCurSize % 8; if (dw) dw = 8 - dw; dwCurSize += dw; if (dwCurSize < dwTotalSize) return (LPWIN_CERTIFICATE)((PBYTE)(pPrevCertificate + 1) + pPrevCertificate->dwLength - 1); return NULL; }
Khối dữ liệu mà theo sau cấu trúc WIN_CERTIFICATE có bố cục hay nội dung là không có định dạng chung và rất tùy nghi nên tôi không đi sâu hơn. Trong pe4.exe cũng có theo bước 1 vài kiểu chứng nhận, bạn có thể xem qua.
Chương trình pe của bạn sử dụng như thế nào vậy?
sao mình thử mở một số dll trong thư mục windows system mà không thấy hàm nào vậy?
Lúc trước mình dùng pe1, không xem được
bây giờ dùng pe4 xem được rồi.
Đó là một lẽ, giờ này phần đông chạy theo những kỹ thuật mới, mà chưa tự hỏi kỹ thuật mới là phản bác hay thừa kế từ xa xưa. Đúng, bạn phải lo cho cuộc sống, cơm áo gạo tiền là nỗi lo trước mắt. Ai cũng vậy, ở đề tài này, khô khan và nản chí, tôi muốn viết tiếp, và không vụ lợi, có ai còn tiếp tục quan tâm ?.
Trên một HDH nó báo thiếu thư viện
Thay đổi trực tiếp dạng Hex thì khó dùng lắm.
Đúng đó bạn, đây chỉ là chương trình nghiên cứu thôi, tôi không có ý định lớn hơn. Chỉ dùng nó để thuận tiện làm cái khác cho chính mình và thử nghiệm.
Chính vì vậy nên có nhiều bài viết tôi đưa mã lên có nói rõ dùng cái gì xây dựng, HĐH, phiên bản v.v... Tập tin thực thi dùng đúng khi bạn có cái phù hợp với nó, quan trọng là mã nguồn viết sai đúng ntn để sửa chữa. Hướng thì có nhưng không thể làm ngay ( viết trình cài đặt, copy thư mục dll, tạo batch, kiểm tra hệ thống đích, ... hoặc viết trên TBD khác chỉ sử dụng những thư viện lõi ...)
Với riêng caí pe5.exe kèm theo, nó không chỉ có riêng MSVCP140.dll mà còn một số nữa như hình dưới, nếu HĐH nào của bạn không cài VS2015 thì tìm các dll đó trên mạng tải về thảy vào system32.
Cứ xem như Hoang là tác giả, tôi là người dùng cho dễ nói chuyện.
1 - Có nhiều công cụ cho phép can thiệp, sửa đổi exec (ứng dụng được biên dịch thành exe). Người dùng khai thác hay phát triển thêm là việc của họ
2 - Một số có cung cấp mã nguồn. Các thư viện đi kèm (import) không nhất thiết phải copy vào System32 (Windows), nó có thể nằm đâu đó trong đường dẫn (path) khi chạy
3 - Quan niệm write once run anywhere là không đúng.