text:
Vũ Đông Hà (Danlambao) - Cuộc xâm lược khởi đi vào năm 1990 và âm thầm tiến hành kể từ sau Mật nghị Thành Đô. Những căn cứ chiến lược đã được từng bước cài đặt, xây dựng trên toàn lãnh thổ Việt Nam. Những nòng súng đại bác được thế chỗ bởi những ống thải, những hầm chứa bùn; những mìn, bom, đạn được thay thế bởi những hóa chất độc hại. Nó là một cuộc xâm lược mà kết quả không là những chiến trường khói lửa, những làng mạc bị đốt phá, những xác người xình thối trên núi rừng Việt Bắc. Kết quả của cuộc chiến là một đất nước Việt Nam, từ núi rừng đến nông thôn, thành thị vẫn nguyên vẹn nhưng nguồn sống bị tiêu diệt. Một vùng biển chết. Những sông hồ chết. Một núi rừng cao nguyên chết. Một đồng bằng Cửu Long chết. Và hơn 90 triệu người Việt Nam bệnh hoạn, dật dờ.
Tháng 4 năm 2016 là một cuộc tập trận thử nghiệm. Chỉ trong vòng vài ngày, thông qua một nhà máy luyện thép chưa thật sự đi vào hoạt động, cuộc thử nghiệm đã tạo ra một khủng hoảng môi trường lớn nhất trong lịch sử của quốc gia nằm trong kế hoạch xâm lược của Bắc Kinh. Hàng triệu cá tôm bị tàn sát, biển Đông dọc theo xương sống miền Trung rơi vào tình trạng bị phá hủy ở mức độ nhiều năm không thể phục hồi. Trong đất liền, thông qua những hạ tầng cơ sở đã được âm thầm xây dựng, kết quả của cuộc tập trận là trải dài từ miền Trung xuống miền Nam lên miền Bắc - cá chết phơi bụng trắng hếu tràn ngập nhiều sông hồ.
Một cuộc thử nghiệm tàn sát khủng khiếp, lan rộng, có sức tàn phá im lặng, lâu dài, không cần một lời tuyên chiến. Và không cần một tiếng súng.
Tháng 4 năm 2016 cũng là cuộc thử nghiệm của Bắc Kinh để đánh giá phản ứng của một dân tộc đang nằm trong tiến trình xâm lược của họ. Đó là phản ứng của đảng lãnh đạo, chính phủ và của 90 triệu người dân Việt Nam. Họ đã tìm thấy câu trả lời:
- Người đứng đầu đảng lãnh đạo ngoan ngoãn thân chinh đến đại bản doanh, nơi mà những thủy lôi phenol, cyanide và nhiều hóa chất độc hại bí mật khác được bắn đi, để gián tiếp xác định quan hệ khắng khít giữa 2 bên. Sau đó ngoan ngoãn im lặng trước khủng hoảng của đất nước; ngoan ngoãn theo đúng bài bản của quan thầy - ra lệnh cho toàn đảng tập trung vào những "việc cần làm ngay": thanh trừng phe nhóm kẻ thù trong nội bộ đảng.
- Toàn bộ quốc hội, những người tự cho là đại diện cho hơn 90 triệu dân, hoàn toàn im lặng; toàn bộ các tướng lãnh quân đội án binh bất động; toàn bộ hệ thống an ninh, mật vụ, công an tập trung vào việc trấn áp bất kỳ người dân nào đứng lên đòi hỏi phải bảo vệ môi trường, yêu cầu làm sáng tỏ nguyên nhân, thủ phạm gây ra thảm trạng cá chết.
- Toàn bộ các quan chức đứng đầu các ban ngành liên quan tìm đủ mọi cách để đánh lừa dư luận, sẵn sàng tiếp tục để cho người dân tiếp tục xuống biển, tiêu thụ thức ăn có xác suất bị nhiễm độc bằng thông điệp xuyên qua lời nói lẫn hành động của họ: cá, biển vẫn an toàn.
- Đại đa số 90 triệu người dân vẫn tiếp tục quay cuồng với cuộc sống riêng tư và vô cảm. Hiện tượng cá chết chỉ đủ để nhiều người ngưng ăn hải sản vài tuần, tích trữ hàng chục chai nước mắm trong nhà và quan tâm lắm là một tiếng thở dài lặng lẽ. Chỉ có vài ngàn người đứng lên bảo vệ sự tồn vong của đất nước, vũ khí trong tay của họ là một bàn phím, một tấm bảng biểu ngữ A4, một hình cá chết trên mặt. Tất cả đều bị đảng và nhà cầm quyền CSVN xem là những kẻ kích động, phá hoại và thẳng tay đàn áp, bắt giam.
Tháng 4, năm 2016. Cuộc thử nghiệm của Bắc Kinh thành công mỹ mãn. Thành công không nằm ở hàng triệu con cá chết để bộ Tổng tham mưu đầu não cụng ly Mao Đài chúc mừng nhau. Thành quả lớn nhất của cuộc tập trận không tiếng súng là lời đáp cho câu hỏi: 90 triệu người dân Việt Nam có còn ý chí đứng lên bảo vệ giang sơn như cha ông của họ đã từng tranh đấu trong mấy ngàn năm để chống lại sự xâm lăng của Bắc Triều hay không?
Từ những cuộc bắt giết ngư dân, từ những lần tập trận thử nghiệm chiến tranh tâm lý mang tên Cáp Quang AGG, Bình Minh 02, HD-981... sang đến FHS, Bắc Kinh đã có câu trả lời dứt khoát: Những gì diễn ra từ tháng đầu tháng 4 năm 2016 đến nay với thái độ của đảng và nhà nước CSVN, với phản ứng của đa số 90 triệu người dân Việt Nam, cho thấy đất nước và dân tộc Việt đã có những chỉ dấu chín muồi để trở thành những kẻ nô lệ và những người mất nước.
*
Ngày 2 tháng 9 năm 2020. Hàng triệu triệu con cá phơi kín bờ biển Đông, trắng khắp sông hồ từ Nam ra Bắc. Bùn đỏ tràn khắp Bảo Lâm - Lâm Đồng. Mọi nguồn nước uống tại thủ đô và các thành phố lớn nhỏ đều nhiễm độc. Những tuyến đường sắt, cao tốc ngưng hoạt động vì những "sự cố" không thể giải thích. Nhiều công trình xây dựng, giao thông bị sụp đổ, rạn nứt bất ngờ. Trước đó, hàng trăm ngàn trẻ em sinh ra với nhiều biến thái và bị bệnh Down, cả năm trời các nhà thương lớn nhỏ đầy ắp bệnh nhân với những chứng bệnh ngặt nghèo bùng phát.
Ngày 2 tháng 9 năm 2020. Toàn bộ các nhà máy điện khắp nước ngưng hoạt động, cả một mảnh đất dài 1648 km rơi vào cơn khủng hoảng với bóng tối bao phủ khi đêm về. Toàn bộ các cây xăng phải đóng cửa vì nguồn cung cấp nhiên liệu từ bên kia biên giới đột ngột chấm dứt. Thực phẩm, đồ tiêu dùng trở nên khan hiếm trầm trọng, trong khi trước đó toàn bộ những vụ mùa từ Bắc ra Nam, mạ đã chết trước ngày lúa trổ bông. Dòng sông Đồng Nai thẩn thờ với mực nước thấp chưa từng thấy trong lịch sử và toàn bộ đồng bằng sông Cửu Long là một vùng đất khô cằn, nứt nẻ. Trong khi đó, đèn đuốc tại các công trình xây dựng có những bảng hiệu chữ Tàu thì sáng rực một góc trời.
Cuối năm 2020. Tổng bí thư đảng cộng sản tại Ba Đình nhân danh toàn thể nhân dân Việt Nam thành kính tri ân đảng cộng sản và nhân dân Trung Quốc đã nhiệt tình viện trợ cứu đói cấp thời; đã nhanh chóng gửi chuyên viên, công an và quân đội sang tận nơi để giúp ổn định tình hình, bảo vệ an ninh quốc gia đang có nguy cơ bị "các thế lựu thù địch" âm mưu đánh phá; phục hồi lại sinh hoạt tối thiểu hàng ngày cho người dân Việt Nam. Tại Hà Nội, một cuộc mít tinh vĩ đại được tổ chức với hàng trăm ngàn đoàn viên Thanh niên Cộng sản giương cao hình Hồ Chí Minh và Tổng bí thư đảng cộng sản Trung Quốc. Khẩu hiệu đời đời nhớ ơn đảng cộng sản và nhân dân Trung Quốc trộn lẫn với cờ đỏ 6 sao vàng đỏ rực một bầu trời.
Đầu năm 2021. Thành phố Hồ Chí Minh chính thức đổi tên thành quận Hồ Quang.
*
Tháng 7, 2016.
Những con cá chết đã tan biến, mục rữa vào hư không theo cái nắng của mùa hè nghiệt ngã. Đường phố Sài Gòn, Hà Nội vẫn rộn rã tiếng còi xe, những tiếng cười pha lẫn tiếng chửi thề. Giữa dòng đời vô cảm, vẫn còn đó những người cô đơn bó gối với với niềm đau quặn thắt trong lòng, nhức nhối con tim khi nhìn lên tờ lịch và nghĩ đến con số 2020 như một định mệnh bi thảm đang đón chờ. Và vẫn còn đó, ngồi yên những con người yêu nước này nhìn những con người yêu nước kia bằng một cặp mắt xa và lạ.
Đất nước tôi, đã biết bao nhiêu mồ hôi, nước mắt, xương máu đổ ra, bao nhiêu người hy sinh nằm xuống trên từng ngọn cỏ, từng gốc cây, từng đỉnh đồi... chiến đấu bảo vệ giang sơn. Không lẽ rồi đây tất cả đều sẽ trở thành vô nghĩa!?
Bạn tôi ơi! thôi đừng theo một lời kêu gọi nào của ai khác. Chỉ lắng nghe tiếng gọi của con tim mình.
27.07.2016

markdown:
**- Cuộc xâm lược khởi đi vào năm 1990 và âm thầm tiến hành kể từ sau Mật nghị Thành Đô. Những căn cứ chiến lược đã được từng bước cài đặt, xây dựng trên toàn lãnh thổ Việt Nam. Những nòng súng đại bác được thế chỗ bởi những ống thải, những hầm chứa bùn; những mìn, bom, đạn được thay thế bởi những hóa chất độc hại. Nó là một cuộc xâm lược mà kết quả không là những chiến trường khói lửa, những làng mạc bị đốt phá, những xác người xình thối trên núi rừng Việt Bắc. Kết quả của cuộc chiến là một đất nước Việt Nam, từ núi rừng đến nông thôn, thành thị vẫn nguyên vẹn nhưng nguồn sống bị tiêu diệt. Một vùng biển chết. Những sông hồ chết. Một núi rừng cao nguyên chết. Một đồng bằng Cửu Long chết. Và hơn 90 triệu người Việt Nam bệnh hoạn, dật dờ.** [Vũ Đông Hà (Danlambao)](http://danlambaovn.blogspot.com/)
Tháng 4 năm 2016 là một cuộc tập trận thử nghiệm. Chỉ trong vòng vài ngày, thông qua một nhà máy luyện thép chưa thật sự đi vào hoạt động, cuộc thử nghiệm đã tạo ra một khủng hoảng môi trường lớn nhất trong lịch sử của quốc gia nằm trong kế hoạch xâm lược của Bắc Kinh. Hàng triệu cá tôm bị tàn sát, biển Đông dọc theo xương sống miền Trung rơi vào tình trạng bị phá hủy ở mức độ nhiều năm không thể phục hồi. Trong đất liền, thông qua những hạ tầng cơ sở đã được âm thầm xây dựng, kết quả của cuộc tập trận là trải dài từ miền Trung xuống miền Nam lên miền Bắc - cá chết phơi bụng trắng hếu tràn ngập nhiều sông hồ.
Một cuộc thử nghiệm tàn sát khủng khiếp, lan rộng, có sức tàn phá im lặng, lâu dài, không cần một lời tuyên chiến. Và không cần một tiếng súng.
Tháng 4 năm 2016 cũng là cuộc thử nghiệm của Bắc Kinh để đánh giá phản ứng của một dân tộc đang nằm trong tiến trình xâm lược của họ. Đó là phản ứng của đảng lãnh đạo, chính phủ và của 90 triệu người dân Việt Nam. Họ đã tìm thấy câu trả lời:
- Người đứng đầu đảng lãnh đạo ngoan ngoãn thân chinh đến đại bản doanh, nơi mà những thủy lôi phenol, cyanide và nhiều hóa chất độc hại bí mật khác được bắn đi, để gián tiếp xác định quan hệ khắng khít giữa 2 bên. Sau đó ngoan ngoãn im lặng trước khủng hoảng của đất nước; ngoan ngoãn theo đúng bài bản của quan thầy - ra lệnh cho toàn đảng tập trung vào những "việc cần làm ngay": thanh trừng phe nhóm kẻ thù trong nội bộ đảng.
- Toàn bộ quốc hội, những người tự cho là đại diện cho hơn 90 triệu dân, hoàn toàn im lặng; toàn bộ các tướng lãnh quân đội án binh bất động; toàn bộ hệ thống an ninh, mật vụ, công an tập trung vào việc trấn áp bất kỳ người dân nào đứng lên đòi hỏi phải bảo vệ môi trường, yêu cầu làm sáng tỏ nguyên nhân, thủ phạm gây ra thảm trạng cá chết.
- Toàn bộ các quan chức đứng đầu các ban ngành liên quan tìm đủ mọi cách để đánh lừa dư luận, sẵn sàng tiếp tục để cho người dân tiếp tục xuống biển, tiêu thụ thức ăn có xác suất bị nhiễm độc bằng thông điệp xuyên qua lời nói lẫn hành động của họ: cá, biển vẫn an toàn.
- Đại đa số 90 triệu người dân vẫn tiếp tục quay cuồng với cuộc sống riêng tư và vô cảm. Hiện tượng cá chết chỉ đủ để nhiều người ngưng ăn hải sản vài tuần, tích trữ hàng chục chai nước mắm trong nhà và quan tâm lắm là một tiếng thở dài lặng lẽ. Chỉ có vài ngàn người đứng lên bảo vệ sự tồn vong của đất nước, vũ khí trong tay của họ là một bàn phím, một tấm bảng biểu ngữ A4, một hình cá chết trên mặt. Tất cả đều bị đảng và nhà cầm quyền CSVN xem là những kẻ kích động, phá hoại và thẳng tay đàn áp, bắt giam.
Tháng 4, năm 2016. Cuộc thử nghiệm của Bắc Kinh thành công mỹ mãn. Thành công không nằm ở hàng triệu con cá chết để bộ Tổng tham mưu đầu não cụng ly Mao Đài chúc mừng nhau. Thành quả lớn nhất của cuộc tập trận không tiếng súng là lời đáp cho câu hỏi:
**90 triệu người dân Việt Nam có còn ý chí đứng lên bảo vệ giang sơn như cha ông của họ đã từng tranh đấu trong mấy ngàn năm để chống lại sự xâm lăng của Bắc Triều hay không?**
Từ những cuộc bắt giết ngư dân, từ những lần tập trận thử nghiệm chiến tranh tâm lý mang tên Cáp Quang AGG, Bình Minh 02, HD-981... sang đến FHS, Bắc Kinh đã có câu trả lời dứt khoát:
*Những gì diễn ra từ tháng đầu tháng 4 năm 2016 đến nay với thái độ của đảng và nhà nước CSVN, với phản ứng của đa số 90 triệu người dân Việt Nam, cho thấy đất nước và dân tộc Việt đã có những chỉ dấu chín muồi để trở thành những kẻ nô lệ và những người mất nước.*
*
Ngày 2 tháng 9 năm 2020. Hàng triệu triệu con cá phơi kín bờ biển Đông, trắng khắp sông hồ từ Nam ra Bắc. Bùn đỏ tràn khắp Bảo Lâm - Lâm Đồng. Mọi nguồn nước uống tại thủ đô và các thành phố lớn nhỏ đều nhiễm độc. Những tuyến đường sắt, cao tốc ngưng hoạt động vì những "sự cố" không thể giải thích. Nhiều công trình xây dựng, giao thông bị sụp đổ, rạn nứt bất ngờ. Trước đó, hàng trăm ngàn trẻ em sinh ra với nhiều biến thái và bị bệnh Down, cả năm trời các nhà thương lớn nhỏ đầy ắp bệnh nhân với những chứng bệnh ngặt nghèo bùng phát.
Ngày 2 tháng 9 năm 2020. Toàn bộ các nhà máy điện khắp nước ngưng hoạt động, cả một mảnh đất dài 1648 km rơi vào cơn khủng hoảng với bóng tối bao phủ khi đêm về. Toàn bộ các cây xăng phải đóng cửa vì nguồn cung cấp nhiên liệu từ bên kia biên giới đột ngột chấm dứt. Thực phẩm, đồ tiêu dùng trở nên khan hiếm trầm trọng, trong khi trước đó toàn bộ những vụ mùa từ Bắc ra Nam, mạ đã chết trước ngày lúa trổ bông. Dòng sông Đồng Nai thẩn thờ với mực nước thấp chưa từng thấy trong lịch sử và toàn bộ đồng bằng sông Cửu Long là một vùng đất khô cằn, nứt nẻ. Trong khi đó, đèn đuốc tại các công trình xây dựng có những bảng hiệu chữ Tàu thì sáng rực một góc trời.
Cuối năm 2020. Tổng bí thư đảng cộng sản tại Ba Đình nhân danh toàn thể nhân dân Việt Nam thành kính tri ân đảng cộng sản và nhân dân Trung Quốc đã nhiệt tình viện trợ cứu đói cấp thời; đã nhanh chóng gửi chuyên viên, công an và quân đội sang tận nơi để giúp ổn định tình hình, bảo vệ an ninh quốc gia đang có nguy cơ bị "các thế lựu thù địch" âm mưu đánh phá; phục hồi lại sinh hoạt tối thiểu hàng ngày cho người dân Việt Nam. Tại Hà Nội, một cuộc mít tinh vĩ đại được tổ chức với hàng trăm ngàn đoàn viên Thanh niên Cộng sản giương cao hình Hồ Chí Minh và Tổng bí thư đảng cộng sản Trung Quốc. Khẩu hiệu đời đời nhớ ơn đảng cộng sản và nhân dân Trung Quốc trộn lẫn với cờ đỏ 6 sao vàng đỏ rực một bầu trời.
Đầu năm 2021. Thành phố Hồ Chí Minh chính thức đổi tên thành quận Hồ Quang.
*
Tháng 7, 2016.
Những con cá chết đã tan biến, mục rữa vào hư không theo cái nắng của mùa hè nghiệt ngã. Đường phố Sài Gòn, Hà Nội vẫn rộn rã tiếng còi xe, những tiếng cười pha lẫn tiếng chửi thề. Giữa dòng đời vô cảm, vẫn còn đó những người cô đơn bó gối với với niềm đau quặn thắt trong lòng, nhức nhối con tim khi nhìn lên tờ lịch và nghĩ đến con số 2020 như một định mệnh bi thảm đang đón chờ. Và vẫn còn đó, ngồi yên những con người yêu nước này nhìn những con người yêu nước kia bằng một cặp mắt xa và lạ.
Đất nước tôi, đã biết bao nhiêu mồ hôi, nước mắt, xương máu đổ ra, bao nhiêu người hy sinh nằm xuống trên từng ngọn cỏ, từng gốc cây, từng đỉnh đồi... chiến đấu bảo vệ giang sơn. Không lẽ rồi đây tất cả đều sẽ trở thành vô nghĩa!?
Bạn tôi ơi! thôi đừng theo một lời kêu gọi nào của ai khác. Chỉ lắng nghe tiếng gọi của con tim mình.
27.07.2016

Server: GSE


text:
Mã tuyển sinh: C57
Tên tiếng Anh: VINH LONG TEACHER TRAINING COLLEGE
Năm thành lập: 1976
Cơ quan chủ quản: UBND tỉnh Vĩnh Long
Địa chỉ: 75 Nguyễn Huệ, phường 2, TP Vĩnh Long
Website: cdspvinhlong.edu.vn
Tổng chỉ tiêu năm 2017: 230
THÔNG TIN TUYỂN SINH NĂM 2017 2.1. Đối tượng tuyển sinh: - Tính đến thời điểm xét tuyển đã tốt nghiệp Trung học phổ thông (theo hình thức giáo dục chính quy hoặc giáo dục thường xuyên)- Có đủ sức khỏe để học tập theo quy định hiện hành;2.2. Phạm vi tuyển sinh: Tuyển thí sinh có hộ khẩu thường trú tại tỉnh Vĩnh Long từ 03 năm trở lên.2.3. Phương thức tuyển sinh: Xét tuyển;Ghi chú: Xét tuyển kết quả thi THPT quốc gia năm 2017Ngành Giáo dục mầm non bắt buộc thi tuyển môn Năng khiếu (Đọc diễn cảm, Hát)
>> Khai giảng Luyện thi ĐH-THPT Quốc Gia 2017 bám sát cấu trúc Bộ GD&ĐT bởi các Thầy Cô uy tín, nổi tiếng đến từ các trung tâm Luyện thi ĐH hàng đầu, các Trường THPT Chuyên và Trường Đại học.
® Ghi rõ nguồn "Diemthi.Tuyensinh247.com" khi bạn phát hành lại thông tin trang web này.
Phí dịch vụ tin nhắn, SMS ... gửi tới số 8712 là: 15.000 VND.

markdown:
|
|
Mã tuyển sinh:
Tên tiếng Anh:
Năm thành lập:
Cơ quan chủ quản: UBND tỉnh Vĩnh Long
Địa chỉ: 75 Nguyễn Huệ, phường 2, TP Vĩnh Long
Website:
Tổng chỉ tiêu năm 2017: 230
>>
**Khai giảng** **Luyện thi ĐH-THPT Quốc Gia 2017 bám sát cấu trúc Bộ GD&ĐT** bởi các Thầy Cô uy tín, nổi tiếng đến từ các trung tâm Luyện thi ĐH hàng đầu, các Trường THPT Chuyên và Trường Đại học.
|
|![]()

WARC-Type: response

Content-Type: application/http; msgtype=response

WARC-Truncated: length

WARC-Identified-Payload-Type: application/xhtml+xml

Server: nginx

Content-Type: text/html; charset=UTF-8

Connection: close

Vary: Accept-Encoding

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Pragma: no-cache


text:
Theo tôi làm tới mức đọc được mã Asm cũng đủ - phần phân tích ngữ nghĩa, chuyển sang c là cực kỳ phức tạp.
Các CT đọc netFX hiện nay cũng chưa hoàn thiện chuyển msIL sang c# (dù họ là một tập đoàn lớn)
fms17
Hôm nay tôi mở đề tài này chia sẻ và cũng để tìm hiểu thêm với các bạn nào vẫn còn yêu thích lập trình WinAPI (nó đã xưa như trái đất).
Các định nghĩa và khái niệm về tập tin PE các bạn có thể xem ở bài viết của langman tại http://diendan.congdongcviet.com/thr...ile-format.cpp.
Trên nền kiến thức đó tôi tập trung vào thực hành là chính, vì vậy tôi chỉ diễn giải thêm khi thấy cần thiết. Tôi muốn leo dần tới chương trình Disassembler và xa hơn nữa là chương trình chuyển PE về các định dạng C thân thuộc với chúng ta hơn. Điều đó xa vời quá phải không các bạn, trước khi nghĩ tới cái lớn lao, ta phải làm cái nhỏ trước đã.
Bài tập đầu tiên : Viết chương trình xuất ra cấu trúc tổng quát của PE.
Giao diện màn hình thì tôi lựa chọn một TreeView để hiển thị khối comment trên, phần giá trị của từng mục TreeView sẽ hiển thị trên ListView.
- /* Cấu trúc phân cấp tổng quát của tập tin PE
- + <Tập tin>
- - IMAGE_DOS_HEADER
- - DosStub
- - RichBlock
- + IMAGE_NT_HEADERS
- - IMAGE_FILE_HEADER
- + IMAGE_OPTION_HEADER
- IMAGE_DATA_DIRECTORY[16]
- - IMAGE_SECTION_HEADER .text
- - IMAGE_SECTION_HEADER .rsrc
- - ............
-
- + SectionData .text
- ........
- + SectionData .rsrc
- ........
- + ................
- */
Trong bài viết của langman không thấy đề cập tới khối Rich. Đây là khối thông tin mà có giá trị với Windows hơn là với chính bản thân chương trình. Nó không phải là phần bắt buộc phải có (thường thì chỉ thấy nó xuất hiện khi xây dựng chương trình bằng các ngôn ngữ C\C++\C++.NET). Để xác định nó có mặt trong 1 PE không thì ta quét ngược từ Offset(IMAGE_NT_HEADERS - 8) về Offset(0x80) 1 lần 4 bytes để tìm ký hiệu là chuỗi byte[ 'R', 'i', 'c', 'h' ]. Nếu ta quét bằng 1 con trỏ PDWORD thì có thể so sánh giá trị trong con trỏ như if ( *pDword == 0x68636952 ) // Có ký hiệu Rich. Một vài tài liệu có mô tả cách lấy product id, minor build version và count là xor DWORD theo ngay sau ký hiệu Rich với khối rồi trích xuất tuần tự ra. Tôi chưa quan tâm tới khối này.
Chương trình pe1 bên dưới chưa xử lý các khối dữ liệu của các SectionData, cũng có lỗi với các PE quá lớn, thao tác vẽ màn hình còn rất tệ (nháy hình), bài tập đầu tiên tới đây thôi.
Yêu mã hơn yêu em !!!
Theo tôi làm tới mức đọc được mã Asm cũng đủ - phần phân tích ngữ nghĩa, chuyển sang c là cực kỳ phức tạp.
Các CT đọc netFX hiện nay cũng chưa hoàn thiện chuyển msIL sang c# (dù họ là một tập đoàn lớn)
fms17
@fms17 : Tôi rất ghi nhận lời bạn, nhưng tôi chưa hề nói là tôi sẽ hoàn thành cái mà bạn nói, tôi đang cần sự trợ giúp từ các anh em hiểu vấn đề mà. Thực tâm tôi hướng tới, và tôi rất hiểu những gì bạn nói. Kể cả nhánh .NET mà bạn rất thông thạo tôi vẫn sẽ phân tích thấu đáo theo những gì tôi biết, cái tôi cần là bạn (hay các bạn khác đi trước) chỉ ra những bất hợp lý khi tôi lập luận để giải quyết những khúc mắc. Tôi cũng không duy ý chí rằng mình sánh vai các ông lớn - tôi hiểu mình ở nơi đâu. Tôi mong rằng các bài tập kế tiếp, khi thấy bất cập, bạn nên lên tiếng để người viết biềt mình yếu chỗ nào, tôi không phải người muốn người khác vỗ tay tán thưởng. Ủng hộ những câu nói như : chỗ này không tối ưu, chỗ kia là sai lầm, có cách khác gọn gàng hơn... Được vậy tôi cũng rất vui. Mời các bạn tiếp tục.Nguyên bản được gửi bởi [COLOR="#0000FF"
Yêu mã hơn yêu em !!!
Lúc suy lúc thịnh, cuộc chiến sóng - hạt đủ dài, có nhiều công kích, phản bác ..
Tôi có tiếp xúc với nhiều CT, thấy những điều ngớ ngẩn trong các UD mà thiên hạ ca tụng. Cái quan trọng là nó làm được, đòi chi tất cả đều hoàn hảo.
Phọt mô xa 2017
Yêu mã hơn yêu em !!!
Để đọc được dữ liệu thô của các SectionData, chúng ta phải làm quen với cách phân bổ tập tin PE mà ta truy xuất.
Khi chúng ta có một thẻ tập tin PE bằng các hàm như HANDLE hFile = CreateFile, OpenFile, và nhận được kích thước là dwSize, ta có thể nhận một con trỏ để đọc tập tin
Cả con trỏ pFile hoặc con trỏ pMap đều trỏ tới vùng nhớ bắt đầu, ta gộp chung cho dễ diễn giải
- // PBYTE pFile = new BYTE[dwSize];
- // BOOL bSuccess = ReadFile(hFile, pFile, dwSize, ...);
- // hay
- // HANDLE hMapFile = CreateFileMapping(hFile,...); // hoặc
- // HANDLE hMapFile = OpenFileMapping(...);
- // PBYTE pMap = (PBYTE)MapViewOfFile(hMapFile,...);
Nếu tất cả trơn chu, ta có một con trỏ pBase trỏ tới vùng bộ nhớ mà PE được nạp lên, khi đó ta có thể nhận được giá trị các trường (giả sử đã kiểm tra là PE)
- PBYTE pBase;
- #ifdef USE_MAPPING
- pBase = pMap;
- #else
- pBase = pFile;
- #endif
Khi chúng ta muốn đọc các khối dữ liệu thô nằm trong các Section, ta phải biết được địa chỉ bắt đầu vùng nhớ của SectionData, sự việc bắt đầu phức tạp.
- PIMAGE_NT_HEADERS pNtHeaders = (PIMAGE_NT_HEADERS)(pBase + ((PIMAGE_DOS_HEADER)pBase)->e_lfanew); // Con trỏ NtHeaders
- PIMAGE_FILE_HEADER pFileHeader = (PIMAGE_FILE_HEADER)((PBYTE)pNtHeaders + sizeof(DWORD)); // Con trỏ FileHeader
- PIMAGE_OPTIONAL_HEADER pOptionalHeader = (PIMAGE_OPTIONAL_HEADER)((PBYTE)pFileHeader + sizeof(IMAGE_FILE_HEADER));
- WORD uNumberOfSections = pFileHeader->NumberOfSections;
- DWORD dwImageBase = pOptionalHeader->ImageBase;
- DWORD dwFileAlignment = pOptionalHeader->FileAlignment;
- DWORD dwSectionAlignment = pOptionalHeader->SectionAlignment;
- // Mã nhận con trỏ tới SectionHeader đầu tiên có dạng
- DWORD dwNtHeadersOffset = (PBYTE)pNtHeaders - pBase; // Offset của NtHeaders so với đầu vùng nhớ PE được nạp lên
- DWORD dwFirstSectionHeaderOffset = dwNtHeadersOffset + sizeof(DWORD) + sizeof(IMAGE_FILE_HEADER) + pFileHeader->SizeOfOptionalHeader;
- PIMAGE_SECTION_HEADER pFirstSectionHeader = (PIMAGE_SECTION_HEADER)(pBase + dwFirstSectionHeaderOffset); // Hoặc lệnh dưới
- //PIMAGE_SECTION_HEADER pFirstSectionHeader = (PIMAGE_SECTION_HEADER)((PBYTE)pOptionalHeader + pFileHeader->SizeOfOptionalHeader);
- // Có được con trỏ SectionHeader đầu tiên, các con trỏ SectionHeader bất kỳ nếu có được truy xuất dễ dàng
- WORD n = 0; // Ví dụ với chỉ mục 0
- PIMAGE_SECTION_HEADER pSectionHeaderN = &pFirstSectionHeader[n]; // Hoặc
- //PIMAGE_SECTION_HEADER pSectionHeader = pFirstSectionHeader + n;
- // Lấy giá trị các trường trong SectionHeader
- DWORD dwVirtualAddressN = pSectionHeaderN->VirtualAddress;
- DWORD dwSizeOfRawDataN = pSectionHeaderN->SizeOfRawData;
- DWORD dwPointerToRawDataN = pSectionHeaderN->PointerToRawData;
Tại sao lại có khác biệt đó ?
- // Nơi đây chưa bàn tới trường IMAGE_OPTIONAL_HEADER.ImageBase
- PBYTE pSectionDataN; // Con trỏ dùng để đọc dữ liệu Section N
- #ifdef USE_MAPPING
- pSectionDataN = pBase + dwVirtualAddressN;
- #else
- pSectionDataN = pBase + dwPointerToRawDataN;
- #endif
Khi chúng ta nạp PE lên để lấy con trỏ pFile, PE chỉ là một khối dữ liệu tương tự như tập tin đĩa. Đọc byte nào thì byte đó có một Offset tương đối tính từ đầu tập tin.
"tôi muốn lấy byte thứ 5AB6h thì tôi chỉ việc truy xuất pFile[0x5AB6]", vậy nhận một byte đầu tiên của SectionData thì ta truy xuất
pFile[<Offset byte đầu tiên của SectionData>] => ta phải tìm Offset của byte đầu tiên ấy. May mắn thay SectionHeader đã lưu trữ Offset này trong PointerToRawData.
Khi chúng ta tạo bản đồ để nhận con trỏ pMap, thì hàm tạo bản đồ sẽ tính toán vùng nhớ mà sẽ nạp dữ liệu Section từ tập tin lên,
Nó sẽ lấy số liệu trong trường VirtualAddress và xem đó là Offset tới đầu vùng nhớ bản đồ.
Như vậy ta có pMap[VirtualAddress] là giá trị byte đầu tiên của SectionData trong vùng nhớ đã Mapping.
Để rõ hơn cách sắp xếp SectionData giữa đọc tập tin và tạo bản đồ, bạn xem thêm hình bên dưới, nơi đây các trường FileAlignment và SectionAlignment lên tiếng.
Ở đây tôi giả sử trường hợp ta đọc tập tin vào bộ nhớ được Windows cấp phát tại 100000h và trường hợp ta tạo bản đồ và nhận con trỏ pMap tại 400000h,pA, pB, pC, pD là con trỏ tới SectionData. Bạn chú ý vào kích thước giả định của các SectionData A,B,C,D và giá trị các con trỏ tương ứng.
Sau khi nắm một số ý trên, bạn có suy nghĩ gì thảo luận cho:
. Có trường hợp nào mà FileAlignment > SectionAlignment không. Nếu có thì ảnh hưởng các trường khác trên các cấu trúc khác ra sao.
. Theo bạn thì giá trị thấp nhất cho 2 trường trên có thể đạt được là bao nhiêu. Bạn có thể giải thích không (khó đấy).
Phần sau : Đi sâu vào thư mục xuất.
Yêu mã hơn yêu em !!!
Như vậy là ta đã có con trỏ và kích thước của SectionData bất kỳ, dùng con trỏ này ta có thể lấy toàn bộ dữ liệu trong nó. Nhưng nó chỉ là dữ liệu "thô",những bytes đọc được chưa nói lên bất kỳ công dụng nào. Dữ liệu bên trong các SectionData có thể là mã, là tài nguyên, v.v... Hôm nay ta sẽ xem thử thứ đầu tiên mà nó có thể chứa trong SectionData - Đó là thư mục xuất.
Quay trở lại với phân cấp PE, bên trong IMAGE_OPTIONAL_HEADER có một mảng IMAGE_DATA_DIRECTORY[16], mỗi cấu trúc có 2 trường VirtualAddress và Size. VirtualAddress là RVA của đối tượng nào đó và Size là kích thước của đối tượng. Windows đã định chuẩn cho 15 kiểu đối tượng mà nó lấp đầy 15 chỉ mục đầu tiên trong mảng IMAGE_DATA_DIRECTORY, chỉ mục cuối cùng (index 15) tới hiện thời còn trống và được lấp đầy bằng 0. Các chỉ mục đã được "hằng hóa" trong các tập tin
#include tương tự như bên dưới.
#define IMAGE_DIRECTORY_ENTRY_EXPORT 0 // Thư mục xuất - phân tích trong ngày nay
#define IMAGE_DIRECTORY_ENTRY_IMPORT 1 // Thư mục nhập
#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2 // Thư mục tài nguyên
#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3 // Bảng ngoại lệ
#define IMAGE_DIRECTORY_ENTRY_SECURITY 4 // Bảo mật
#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5 // Bảng dùng để định vị lại
#define IMAGE_DIRECTORY_ENTRY_DEBUG 6 // Thư mục Debug
#define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 7 // Architecture
#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 // GlobalPtr
#define IMAGE_DIRECTORY_ENTRY_TLS 9 // Dùng cho lưu giữ cục bộ các luồng việc
#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10 //
#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11
#define IMAGE_DIRECTORY_ENTRY_IAT 12 // Bảng IAT (cực kỳ quan trọng nếu bạn muốn thọc gậy)
#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13
#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14 // Thường dùng bởi .NET
Trước khi vào mục chính ta thử xem RVA là gì, và RVA trong Loader khi Windows nạp khởi chạy chương trình, ta quy đổi nó ra Offset tập tin như thế nào.
RVA là Offset của một byte bộ nhớ bất kỳ so với pBase là điểm bắt đầu mà bộ nạp (Loader) nạp lên vùng nhớ.
Khi Loader nạp chương trình, tất cả cấu trúc PE được nạp lên từ Offset 0 cho tới cuối SectionHeader cuối cùng đều được giữ nguyên khoảng cách như nó ở trong
tập tin, do vậy lúc này : File Offset = RVA.
Do cách thức canh chỉnh biên đoạn của các trường FileAlignment và SectionAlignment là khác nhau, do vậy một RVA từ một SectionData nào đó có thể không có một
Offset tập tin tương ứng.
Nếu muốn nhận Offset tập tin từ một RVA ta có thể làm như sau ( ví dụ có một RVA là dwRVA), giả sử ta lấy tên hàm là OffsetFromRVA(DWORD dwRVA)
+ Duyệt từng SectionHeader để lấy con trỏ pSectionHeaderN
+ DWORD dwAddress = pSectionHeaderN->VirtualAddress;
+ DWORD dwSizeData = pSectionHeaderN->SizeOfRawData;
+ DWORD dwPointerToRawData = pSectionHeaderN->PointerToRawData;
+ if (dwRVA >= dwAddress && dwRVA < (dwAddress + dwSizeData))
+ {
return (dwRVA + dwPointerToRawData - dwVirtualAddress);
+ }
+ Nếu đã duyệt qua hết các SectionHeader mà biểu thức điều kiện không thỏa lần nào thì có nghĩa RVA này không có Offset tập tin tương ứng
Giờ vào mục chính ta xét tới IMAGE_DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_EXPORT].
Thông thường thì các tập tin dạng dll (trường IMAGE_FILE_HEADER.Characteristics có cờ IMAGE_FILE_DLL được bật) mới có thư mục xuất nhưng lâu lâu cũng thấy các chương trình dạng exe cũng có.
Trường VirtualAddress (nếu khác 0) là RVA tới một cấu trúc IMAGE_EXPORT_DIRECTORY có các trường sau:
. Characteristics (4 bytes, không sử dụng thiết lập 0)
. TimeDateStamp (4 bytes, thời gian)
. MajorVersion (2 bytes, Major Version)
. MinorVersion (2 bytes, Minor Version)
. Name (4 bytes, RVA của chuỗi kết thúc NULL chứa tên của pe)
. Base (4 bytes, Thứ thự bắt đầu của những hàm được xuất)
. NumberOfFunctions (4 bytes, Số phần tử trong mảng AddressOfFunctions)
. NumberOfNames (4 bytes, Số phần tử trong mảng AddressOfNames)
. AddressOfFunctions (4 bytes, RVA trỏ tới một mảng những địa chỉ hàm)
. AddressOfNames (4 bytes, RVA trỏ tới một mảng các chuỗi tên hàm)
. AddressOfNameOrdinals ( 4 byte, RVA trỏ tới một mảng WORDs là các tên thứ tự của hàm)
Từ những thông tin trên ta có thể nhận những con trỏ tới các mảng chứa địa chỉ hàm, mảng chứa con trỏ tên hàm và mảng số thứ tự.
Ở đây ta cần chú ý hai mảng AddressOfNames và AddressOfNameOrdinals là có số phần tử như nhau = NumberOfNames và nó có sự tương ứng giữa các chỉ mục, nghĩa là AddressOfNames[0] và AddressOfNameOrdinals[0] là cùng nắm giữ thông tin về 1 hàm còn AddressOfNames[2] và AddressOfNameOrdinals[4] là nắm giữ thông tin về 2 hàm khác nhau
Từ 1 chỉ mục index trong AddressOfNames và AddressOfNameOrdinals, ta nhận một tên hàm như sau:
DWORD dwOffset = OffsetFromRVA(pAddressOfNames[index]); // Hàm OffsetFromRVA là ví dụ ở trên
PCHAR pszName = (PCHAR)(pBase + dwOffset);
Nhận tên thứ tự như sau:
WORD uNameOrdinal = pAddressOfNameOrdinals[index];
Cuối cùng nhận địa chỉ hàm như sau:
DWORD dwFunctionRVA = pAddressOfFunctions[uNameOrdinal];
Nhưng sự việc chưa hết rắc rối, một PE có thể có (NumberOfFunctions != NumberOfNames), đây là trường hợp có các hàm chỉ được xuất bởi thứ tự toàn cục. Nghĩa là trong các mảng AddressOfNames và AddressOfNameOrdinals không chứa các dẫn hướng đưa tới hàm này. Và như vậy khi ta duyệt mảng AddressOfFunctions ta sẽ gặp một số hàm có địa chỉ RVA nhưng không tên tuổi không thứ tự chi cả, nhưng một hàm xuất thì phải có thứ tự xuất mà các chương trình khác biết chứ.
Một thư viện sẽ có nhiều thứ để xuất chứ không chỉ có riêng các hàm, tất cả các thành phần xuất đó được lên danh sách, riêng các hàm sẽ nằm ở một vùng liên tiếp mà thứ tự bắt đầu được xác định bởi trường Base. Chúng ta tìm được uNameOrdinal ở trên thì nó chỉ là chỉ mục trong mảng các địa chỉ hàm mà thôi, muốn nhận thứ tự của hàm trên toàn bộ các thứ tự xuất thì ta phải cộng thêm Base vào.
Ví dụ : uNameOrdinal = 3; dwBase = 50; thì DWORD dwOrdinal = 53; // Thứ tự toàn cục là 53, bên ngoài sẽ thấy được hàm này qua dwOrdinal
Như vậy các hàm chỉ được xuất bởi thứ tự toàn cục, thì dwOrdinal = dwBase + chỉ mục trong mảng pAddressOfFunctions.
Phần tiếp theo : Tìm hiểu về thư mục nhập
Yêu mã hơn yêu em !!!
Các liên kết tới các hàm nhập ngoại được bắt đầu từ 4 thư mục dữ liệu :
1. IMAGE_DATA_DIRECTOTY[IMAGE_DIRECTORY_ENTRY_IMPORT]
2. IMAGE_DATA_DIRECTOTY[IMAGE_DIRECTORY_ENTRY_IAT]
3. IMAGE_DATA_DIRECTOTY[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT]
4. IMAGE_DATA_DIRECTOTY[IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT]
Hôm nay ta sẽ xem qua các liên kết ở 2 trong 4 mục ở trên.
Đây là hình ảnh tượng trưng cho các liên kết đó
Từ IMAGE_DIRECTORY_ENTRY_IMPORT ta sẽ nhận được một con trỏ tới 1 mảng các cấu trúc IMAGE_IMPORT_DESCRIPTOR, mảng này được kết thúc bằng 1 phần tử có tất cả các trường mang giá trị 0. Ta xem qua các trường của IMAGE_IMPORT_DESCRIPTOR.
. Characteristics/OriginalFirstThunk : 4 Bytes - RVA tới một mảng các DWORD (x86) hay các ULONGLONG (x64). Mảng này được đặt tên là INT (Import Names Table), mỗi phần tử trong mảng thì hoặc là chỉ dẫn về thứ tự nhập (Ordinal) của hàm trong Dll nhập hoặc là RVA tới 1 cấu trúc IMAGE_IMPORT_BY_NAME.
. TimeDateStamp : 4 Bytes
. ForwarderChain : 4 Bytes - Thông tin chưa hoàn chỉnh về tham chiếu lồng nhau, nói thêm sau.
. Name : 4 Bytes - RVA to một chuỗi Asciiz là tên của thư viện có hàm nhập vào.
. FirstThunk : 4 Bytes - RVA tới 1 mảng các IMAGE_THUNK_DATA32 (x86) hay các IMAGE_THUNK_DATA64 (x64). Mảng này được đặt tên là IAT (Import Address Table), mỗi phần tử trong mảng có thể là chỉ dẫn về thứ tự nhập (Ordinal) hoặc RVA tới IMAGE_IMPORT_BYTE_NAME hoặc địa chỉ bộ nhớ hoặc là chỉ mục của hàm đầu tiên trong bảng hàm nhập mà được dẫn xuất từ 1 Dll khác nữa.
Mã để nhận con trỏ tới từng cấu trúc IMAGE_IMPORT_DESCRIPTOR có thể như sau:
- // Giả sử tập tin đã được kiểm tra là PE và pFile != NULL
- // là con trỏ bộ nhớ mà tập tin được đọc vào từ hàm ReadFile()
- void HandleAllImportDescriptor(PBYTE pFile)
- {
- PIMAGE_NT_HEADERS pNtHeaders = (PIMAGE_NT_HEADERS)(pFile + ((PIMAGE_DOS_HEADER)pFile)->e_lfanew);
- BOOL is64 = (pNtHeaders->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC) ? TRUE : FALSE;
- PIMAGE_DATA_DIRECTORY pDataDirectory;
- if(is64)
- pDataDirectory = (PIMAGE_DATA_DIRECTORY)&((PIMAGE_NT_HEADERS64)pNtHeaders)->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT];
- else
- pDataDirectory = (PIMAGE_DATA_DIRECTORY)&((PIMAGE_NT_HEADERS32)pNtHeaders)->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT];
-
- DWORD dwRVA = pDataDirectory->VirtualAddress;
- if (!dwRVA)
- return; // Không xét tiếp
- PIMAGE_IMPORT_DESCRIPTOR pImport = (PIMAGE_IMPORT_DESCRIPTOR)(pFile + OffsetFromRVA(dwRVA));
- while (pImport->Name)
- {
- // Làm gì đó với con trỏ cấu trúc này, ví dụ : Gọi HandleINT() hay HandleIAT() ở dưới
- pImport++;
- }
- }
Mã để nhận từng phần tử trong bảng INT có thể như sau:
- void HandleINT(PBYTE pFile, BOOL is64, PIMAGE_IMPORT_DESCRIPTOR pImport)
- {
- DWORD dwRVA = pImport->OriginalFirstThunk;
- if (!dwRVA)
- return;
- if (is64)
- {
- PULONGLONG pUlonglong = (PULONGLONG)(pFile + OffsetFromRVA(dwRVA)); // Ulonglong đầu tiên
- while (*pUlonglong)
- {
- // Làm gì đó với con trỏ 64 này
- pUlonglong++;
- }
- }
- else
- {
- PDWORD pDword = (PDWORD)(pFile + OffsetFromRVA(dwRVA)); // Dword đầu tiên
- while (*pDword)
- {
- // Làm gì đó với con trỏ 32 này
- pDword++;
- }
- }
- }
Tương tự, mã để nhận từng phần tử trong bảng IAT có thể :
- void HandleIAT(PBYTE pFile, BOOL is64, PIMAGE_IMPORT_DESCRIPTOR pImport)
- {
- DWORD dwRVA = pImport->FirstThunk;
- if (!dwRVA)
- return;
- if (is64)
- {
- PIMAGE_THUNK_DATA64 pThunk64 = (PIMAGE_THUNK_DATA64)(pFile + OffsetFromRVA(dwRVA)); // Dword đầu tiên
- while (pThunk64->u1.AddressOfData)
- {
- // Làm gì đó với con trỏ 64 này
- pThunk64++;
- }
- }
- else
- {
- PIMAGE_THUNK_DATA32 pThunk32 = (PIMAGE_THUNK_DATA32)(pFile + OffsetFromRVA(dwRVA)); // Dword đầu tiên
- while (pThunk32->u1.AddressOfData)
- {
- // Làm gì đó với con trỏ 32 này
- pThunk32++;
- }
- }
- }
Chú ý :
_ Bảng INT hay IAT của mỗi thư viện có hàm được nhập sẽ được kết thúc bởi 1 phần tử mà được lấp đầy bằng 0.
_ Thứ tự xuất hiện của các IMAGE_IMPORT_DESCRIPTOR và các khối trong các bảng INT và IAT là không liên quan nhau. Nghĩa là IMAGE_IMPORT_DESCRIPTOR xuất hiện trước có thể trỏ tới khối INT hay IAT sau hoặc ngược lại - Do sở thích và tính toán của TBD.
Rắc rối nhất là sự liên kết giữa bảng INT và bảng IAT tới bảng IMAGE_IMPORT_BY_NAME (gọi là bảng Hint/Name) mà chúng ta sẽ xem tới.
Theo sơ đồ bên trên thì mỗi phần tử của bảng INT hay bảng IAT là 1 RVA tới 1 phần tử trong bảng Hint/Name nhưng thực tế không phải vậy.
Quay trở lại với trường IMAGE_FILE_HEADER.Characteristics, nếu cờ IMAGE_FILE_DLL là được bật chúng ta có PE theo định dạng Dll, ngược lại là định dạng exe.
Đuôi gợi nhớ exe : (*.exe), (*.scr), ...
Đuôi gợi nhớ dll : (*.dll), (*.ocx), (*.cpl), (*.ax), ...
Trong định dạng exe :
_ Các phần tử trong bảng INT-IAT hoặc là chỉ dẫn về 1 Ordinal toàn cục hoặc là RVA tới một IMAGE_IMPORT_BY_NAME (1 phần tử của bảng Hint/Name). Để biết chính xác nó là gì thì ta xem bit có trọng số lớn nhất có được bật hay không (hay chúng ta dùng toán tử & giữa giá trị với IMAGE_ORDINAL_FLAG). Nếu bit này = 1, số bít còn lại là giá trị Ordinal cho hàm nhập. Nếu bit này = 0, giá trị của phần tử này chính là RVA tới một phần tử của bảng Hint/Name.
Trong định dạng dll:
- // if (bit có trọng số lớn nhất == 1)
- // {
- // Nó dẫn ra giá trị Ordinal toàn cục;
- // }
- // else
- // {
- // Xem nó như một RVA;
- // if (chuyển đổi ra Offset tập tin thành công)
- // {
- // Nó chính là RVA tới 1 phần tử trong bảng Hint / Name;
- // }
- // else
- // {
- // if (Giá trị của nó lớn hơn kích thước IMAGE_OPTIONAL_HEADER.SizeOfImage)
- // Nó là địa chỉ bộ nhớ;
- // else
- // Giá trị của nó là Index chuỗi Forward.Không tìm thấy tài liệu nào chỉ dẫn thêm.
- // }
- // }
Chúng ta xem cấu trúc Hint/Name (IMAGE_IMPORT_BY_NAMEs)
. Hint : 2 Bytes -> Ordinal của hàm
. Name[1] : Byte đầu tiên của chuỗi tên hàm.
Chú ý : Độ dài của Name là tùy thuộc vào tên hàm nên bảng Hint/Name chúng ta không thể xem là một mảng các IMAGE_IMPORT_BY_NAME được. Trong tập tin nó được canh chỉnh theo WORD (kể cả byte NULL kết chuỗi) và nối tiếp nhau
Ví dụ (Hex): 23 00 'R' 'e' 'a' 'd' 'F' 'i' 'l' 'e' 00 00 09 00 'G' 'e' 't' 'D' 'C' 00
IMAGE_IMPORT_BY_NAME đầu tiên có Hint = 0x0023 có tên hàm là ReadFile. Vì chuỗi có 8 ký tự + NULL = 9 nên phải được chèn thêm 1 byte NULL cho đủ canh chỉnh 2 Byte
IMAGE_IMPORT_BY_NAME thứ hai có Hint = 0x0009 có tên hàm là GetDC. Vì chuỗi có 5 ký tự + NULL = 6 đã đủ canh chỉnh nên không chèn gì cả.
Phần thứ 2 của hôm nay là dẫn hướng từ thư mục IMAGE_DATA_DIECTORY[IMAGE_DIRECTORY_ENTRY_IAT]
Chỉ mục này chỉ là dẫn hướng tới bảng IAT tổng của tất cả các bảng IAT con mà được dẫn xuất từ các IMAGE_IMPORT_DESCRIPTOR.
Do nó rất quan trọng khi Windows nạp nó lên và thực thi trên vùng nhớ nên nó được dành riêng 1 điểm nhập.
Để duyệt nó ta không thể cứ chạy con trỏ PIMAGE_THUNK_DATA cho đến khi giá trị trong con trỏ = 0 được, nguyên do là các bảng IAT con đã có các đánh dấu cuối bảng riêng của nó bằng phần tử lấp đẩy 0 như đã biết ở trên. Ở đây chúng ta có thể lấy số phần tử trong bảng IAT tổng bằng cách :
if (is64)
cElement = pDataDirectory->Size / sizeof(IMAGE_THUNK_DATA64);
else
cElement = pDataDirectory->Size / sizeof(IMAGE_THUNK_DATA32);
pe4.exe từ bên dưới mô tả kỹ hơn về các thư mục trong ngày hôm nay.
Yêu mã hơn yêu em !!!
Mặc dù Windows có cung cấp một số API để làm việc với tài nguyên như : FindResource, LoadResource, UpdateResource,... nhưng vẫn hữu hạn, để biết chính xác vị trí của các tài nguyên trong tập tin cho mục đích riêng, chúng ta phải đi theo cấu trúc của PE.
Thư mục tài nguyên được bắt đầu từ IMAGE_DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_RESOURCE].
Nếu trường Address và Size lớn hơn 0, nó là RVA tới một cấu trúc IMAGE_RESOURCE_DIRECTORY đầu tiên (RootResource), chúng ta có thể nhận con trỏ tới cấu trúc này
PIMAGE_RESOURCE_DIRECTORY pRootResource = pFile + OffsetFromRVA(DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].Address);
và các trường tổng quát cấu trúc này :
. DWORD Characteristics - Luôn luôn là 0
. DWORD TimeDateStamp
. WORD MajorVersion
. WORD MinorVersion
. WORD NumberOfNamedEntries - Số phần tử có tên của mảng IMAGE_RESOURCE_DIRECTORY_ENTRY[] theo ngay sau cấu trúc này (RootEntry).
. WORD NumberOfIdEntries - Số phần tử sử dụng ID của mảng IMAGE_RESOURCE_DIRECTORY_ENTRY[] theo ngay sau cấu trúc này.
Như vậy tổng số phần tử của mảng IMAGE_RESOURCE_DIRECTORY_ENTRY[] theo ngay sau là :
WORD cElements = pRootResource->NumberOfNamedEntries + pRootResource->NumberOfIdEntries;
Cấu trúc tổng quát của 1 IMAGE_RESOURCE_DIRECTORY_ENTRY gồm :
. DWORD Name - Là ID của tài nguyên hoặc là Offset tới cấu trúc IMAGE_RESOURCE_DIR_STRING_U chứa kích thước chuỗi và chính chuỗi tên theo Unicode
. DWORD OffsetToData - Offset tới IMAGE_RESOURCE_DIRECTORY hoặc IMAGE_RESOURCE_DATA_ENTRY.
Nếu cấu trúc này đang là RootEntry thì OffsetToData là Offset tới IMAGE_RESOURCE_DIRECTORY cấp 2 (StyleResource)
và theo ngay sau từng IMAGE_RESOURCE_DIRECTORY cấp 2 cũng là những IMAGE_RESOURCE_DIRECTORY_ENTRY cấp 2 (StyleEntry)
Trường OffsetToData của mỗi IMAGE_RESOURCE_DIRECTORY_ENTRY cấp 2 sẽ là Offset tới IMAGE_RESOURCE_DIRECTORY cấp 3 (LastResource)
và theo sau từng IMAGE_RESOURCE_DIRECTORY cấp 3 cũng là những IMAGE_RESOURCE_DIRECTORY_ENTRY cấp 3 (LastEntry)
Ở phân cấp cuối cùng, trường OffsetToData của mỗi IMAGE_RESOURCE_DIRECTORY_ENTRY cấp 3 sẽ là Offset tới IMAGE_RESOURCE_DATA_ENTRY,
IMAGE_RESOURCE_DATA_ENTRY này chứa các thông tin :
. DWORD OffsetToData - RVA of Data - Dữ liệu thực sự của tài nguyên
. DWORD Size - Size of Data
. DWORD CodePage
. DWORD Reserved
Ghi nhớ :
_ Các Offset bàn tới ở trên là Offset tính từ RootResource.
_ Trong trường Name : Nếu bít có trọng số lớn nhất là 1, các bits còn lại là Offset tới IMAGE_RESOURCE_DIR_STRING_U, ngược lại nó là ID số.
_ Trong trường OffsetToData : Nếu bit cao được thiết lập, nó là Offset tới IMAGE_RESOURCE_DIRECTORY cấp dưới, ngược lại các bits còn lại chỉ tới IMAGE_RESOURCE_DATA_ENTRY
Mã tổng quát để duyệt hết thư mục tài nguyên có thể :
- // pFile : Con trỏ bộ nhớ mà PE được đọc lên bằng ReadFile
- // pResourceDataDirectory : Con trỏ tới IMAGE_DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_RESOURCE]
- // OffsetFromRVA : Hàm được đề cập trong các ngày trước
- void ViewResource(PBYTE pFile, PIMAGE_DATA_DIRECTORY pResourceDataDirectory)
- {
- DWORD dwRootOffset = OffsetFromRVA(pResourceDataDirectory->VirtualAddress);
- // Thư mục gốc
- PIMAGE_RESOURCE_DIRECTORY pRootResource = (PIMAGE_RESOURCE_DIRECTORY)(pFile + dwRootOffset);
- WORD cRootEntries = pRootResource->NumberOfNamedEntries + pRootResource->NumberOfIdEntries;
- // Điểm nhập gốc
- PIMAGE_RESOURCE_DIRECTORY_ENTRY pRootEntry = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(pRootResource + 1);
-
- for (WORD wRoot = 0; wRoot < cRootEntries; wRoot++, pRootEntry++)
- {
- // Thư mục kiểu : Icon, bitmap, cursor, ...,
- PIMAGE_RESOURCE_DIRECTORY pStyleResource = (PIMAGE_RESOURCE_DIRECTORY)((PBYTE)pRootResource + (pRootEntry->OffsetToData & 0x7FFFFFFF));
- WORD cStyleEntries = pStyleResource->NumberOfNamedEntries + pStyleResource->NumberOfIdEntries;
- // Điểm nhập kiểu
- PIMAGE_RESOURCE_DIRECTORY_ENTRY pStyleEntry = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(pStyleResource + 1);
-
- for (WORD wStyle = 0; wStyle < cStyleEntries; wStyle++, pStyleEntry++)
- {
- // Thư mục cuối
- PIMAGE_RESOURCE_DIRECTORY pLastResource = (PIMAGE_RESOURCE_DIRECTORY)((PBYTE)pRootResource + (pStyleEntry->OffsetToData & 0x7FFFFFFF));
- // Điểm nhập cuối
- PIMAGE_RESOURCE_DIRECTORY_ENTRY pLastEntry = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(pLastResource + 1);
- // Điểm nhập dữ liệu
- PIMAGE_RESOURCE_DATA_ENTRY pDataEntry = (PIMAGE_RESOURCE_DATA_ENTRY)((PBYTE)pRootResource + (pLastEntry->OffsetToData & 0x7FFFFFFF));
- // Dữ liệu dòng của tài nguyên
- PBYTE pRawData = pFile + OffsetFromRVA(pDataEntry->OffsetToData);
- }
- }
- }
Mã cụ thể hơn đã có trong pe4.exe của ngày trước.
Phần sau : Làm việc với Base Relocation
Yêu mã hơn yêu em !!!

markdown:
Theo tôi làm tới mức đọc được mã Asm cũng đủ - phần phân tích ngữ nghĩa, chuyển sang c là cực kỳ phức tạp.
Các CT đọc netFX hiện nay cũng chưa hoàn thiện chuyển msIL sang c# (dù họ là một tập đoàn lớn)
fms17
Hôm nay tôi mở đề tài này chia sẻ và cũng để tìm hiểu thêm với các bạn nào vẫn còn yêu thích lập trình WinAPI (nó đã xưa như trái đất).
Các định nghĩa và khái niệm về tập tin PE các bạn có thể xem ở bài viết của langman tại
[http://diendan.congdongcviet.com/thr...ile-format.cpp].
Trên nền kiến thức đó tôi tập trung vào thực hành là chính, vì vậy tôi chỉ diễn giải thêm khi thấy cần thiết. Tôi muốn leo dần tới chương trình Disassembler và xa hơn nữa là chương trình chuyển PE về các định dạng C thân thuộc với chúng ta hơn. Điều đó xa vời quá phải không các bạn, trước khi nghĩ tới cái lớn lao, ta phải làm cái nhỏ trước đã.
Bài tập đầu tiên :
Viết chương trình xuất ra cấu trúc tổng quát của PE.
Giao diện màn hình thì tôi lựa chọn một TreeView để hiển thị khối comment trên, phần giá trị của từng mục TreeView sẽ hiển thị trên ListView.
- /* Cấu trúc phân cấp tổng quát của tập tin PE
- + <Tập tin>
- - IMAGE_DOS_HEADER
- - DosStub
- - RichBlock
- + IMAGE_NT_HEADERS
- - IMAGE_FILE_HEADER
- + IMAGE_OPTION_HEADER
- IMAGE_DATA_DIRECTORY[16]
- - IMAGE_SECTION_HEADER .text
- - IMAGE_SECTION_HEADER .rsrc
- - ............
-
- + SectionData .text
- ........
- + SectionData .rsrc
- ........
- + ................
- */
Trong bài viết của langman không thấy đề cập tới khối Rich. Đây là khối thông tin mà có giá trị với Windows hơn là với chính bản thân chương trình. Nó không phải là phần bắt buộc phải có (thường thì chỉ thấy nó xuất hiện khi xây dựng chương trình bằng các ngôn ngữ C\C++\C++.NET). Để xác định nó có mặt trong 1 PE không thì ta quét ngược từ Offset(IMAGE_NT_HEADERS - 8) về Offset(0x80) 1 lần 4 bytes để tìm ký hiệu là chuỗi byte[ 'R', 'i', 'c', 'h' ]. Nếu ta quét bằng 1 con trỏ PDWORD thì có thể so sánh giá trị trong con trỏ như
if ( *pDword == 0x68636952 ) // Có ký hiệu Rich. Một vài tài liệu có mô tả cách lấy product id, minor build versionvà countlà xor DWORD theo ngay sau ký hiệu Rich với khối rồi trích xuất tuần tự ra. Tôi chưa quan tâm tới khối này.
Chương trình pe1 bên dưới chưa xử lý các khối dữ liệu của các SectionData, cũng có lỗi với các PE quá lớn, thao tác vẽ màn hình còn rất tệ (nháy hình), bài tập đầu tiên tới đây thôi.
Yêu mã hơn yêu em !!!
Theo tôi làm tới mức đọc được mã Asm cũng đủ - phần phân tích ngữ nghĩa, chuyển sang c là cực kỳ phức tạp.
Các CT đọc netFX hiện nay cũng chưa hoàn thiện chuyển msIL sang c# (dù họ là một tập đoàn lớn)
fms17
@fms17 : Tôi rất ghi nhận lời bạn, nhưng tôi chưa hề nói là tôi sẽ hoàn thành cái mà bạn nói, tôi đang cần sự trợ giúp từ các anh em hiểu vấn đề mà. Thực tâm tôi hướng tới, và tôi rất hiểu những gì bạn nói. Kể cả nhánh .NET mà bạn rất thông thạo tôi vẫn sẽ phân tích thấu đáo theo những gì tôi biết, cái tôi cần là bạn (hay các bạn khác đi trước) chỉ ra những bất hợp lý khi tôi lập luận để giải quyết những khúc mắc. Tôi cũng không duy ý chí rằng mình sánh vai các ông lớn - tôi hiểu mình ở nơi đâu. Tôi mong rằng các bài tập kế tiếp, khi thấy bất cập, bạn nên lên tiếng để người viết biềt mình yếu chỗ nào, tôi không phải người muốn người khác vỗ tay tán thưởng. Ủng hộ những câu nói như : chỗ này không tối ưu, chỗ kia là sai lầm, có cách khác gọn gàng hơn... Được vậy tôi cũng rất vui. Mời các bạn tiếp tục.
Nguyên bản được gửi bởi
[COLOR="#0000FF"
Yêu mã hơn yêu em !!!
Lúc suy lúc thịnh, cuộc chiến
sóng - hạtđủ dài, có nhiều công kích, phản bác ..
Tôi có tiếp xúc với nhiều CT, thấy những điều ngớ ngẩn trong các UD mà thiên hạ ca tụng. Cái quan trọng là nó làm được, đòi chi tất cả đều hoàn hảo.
Phọt mô xa 2017
Yêu mã hơn yêu em !!!
Để đọc được dữ liệu thô của các SectionData, chúng ta phải làm quen với cách phân bổ tập tin PE mà ta truy xuất.
Khi chúng ta có một thẻ tập tin PE bằng các hàm như HANDLE hFile = CreateFile, OpenFile, và nhận được kích thước là dwSize, ta có thể nhận một con trỏ để đọc tập tin
Cả con trỏ pFile hoặc con trỏ pMap đều trỏ tới vùng nhớ bắt đầu, ta gộp chung cho dễ diễn giải
- // PBYTE pFile = new BYTE[dwSize];
- // BOOL bSuccess = ReadFile(hFile, pFile, dwSize, ...);
- // hay
- // HANDLE hMapFile = CreateFileMapping(hFile,...); // hoặc
- // HANDLE hMapFile = OpenFileMapping(...);
- // PBYTE pMap = (PBYTE)MapViewOfFile(hMapFile,...);
Nếu tất cả trơn chu, ta có một con trỏ pBase trỏ tới vùng bộ nhớ mà PE được nạp lên, khi đó ta có thể nhận được giá trị các trường (giả sử đã kiểm tra là PE)
- PBYTE pBase;
- #ifdef USE_MAPPING
- pBase = pMap;
- #else
- pBase = pFile;
- #endif
Khi chúng ta muốn đọc các khối dữ liệu thô nằm trong các Section, ta phải biết được địa chỉ bắt đầu vùng nhớ của SectionData, sự việc bắt đầu phức tạp.
- PIMAGE_NT_HEADERS pNtHeaders = (PIMAGE_NT_HEADERS)(pBase + ((PIMAGE_DOS_HEADER)pBase)->e_lfanew); // Con trỏ NtHeaders
- PIMAGE_FILE_HEADER pFileHeader = (PIMAGE_FILE_HEADER)((PBYTE)pNtHeaders + sizeof(DWORD)); // Con trỏ FileHeader
- PIMAGE_OPTIONAL_HEADER pOptionalHeader = (PIMAGE_OPTIONAL_HEADER)((PBYTE)pFileHeader + sizeof(IMAGE_FILE_HEADER));
- WORD uNumberOfSections = pFileHeader->NumberOfSections;
- DWORD dwImageBase = pOptionalHeader->ImageBase;
- DWORD dwFileAlignment = pOptionalHeader->FileAlignment;
- DWORD dwSectionAlignment = pOptionalHeader->SectionAlignment;
- // Mã nhận con trỏ tới SectionHeader đầu tiên có dạng
- DWORD dwNtHeadersOffset = (PBYTE)pNtHeaders - pBase; // Offset của NtHeaders so với đầu vùng nhớ PE được nạp lên
- DWORD dwFirstSectionHeaderOffset = dwNtHeadersOffset + sizeof(DWORD) + sizeof(IMAGE_FILE_HEADER) + pFileHeader->SizeOfOptionalHeader;
- PIMAGE_SECTION_HEADER pFirstSectionHeader = (PIMAGE_SECTION_HEADER)(pBase + dwFirstSectionHeaderOffset); // Hoặc lệnh dưới
- //PIMAGE_SECTION_HEADER pFirstSectionHeader = (PIMAGE_SECTION_HEADER)((PBYTE)pOptionalHeader + pFileHeader->SizeOfOptionalHeader);
- // Có được con trỏ SectionHeader đầu tiên, các con trỏ SectionHeader bất kỳ nếu có được truy xuất dễ dàng
- WORD n = 0; // Ví dụ với chỉ mục 0
- PIMAGE_SECTION_HEADER pSectionHeaderN = &pFirstSectionHeader[n]; // Hoặc
- //PIMAGE_SECTION_HEADER pSectionHeader = pFirstSectionHeader + n;
- // Lấy giá trị các trường trong SectionHeader
- DWORD dwVirtualAddressN = pSectionHeaderN->VirtualAddress;
- DWORD dwSizeOfRawDataN = pSectionHeaderN->SizeOfRawData;
- DWORD dwPointerToRawDataN = pSectionHeaderN->PointerToRawData;
Tại sao lại có khác biệt đó ?
- // Nơi đây chưa bàn tới trường IMAGE_OPTIONAL_HEADER.ImageBase
- PBYTE pSectionDataN; // Con trỏ dùng để đọc dữ liệu Section N
- #ifdef USE_MAPPING
- pSectionDataN = pBase + dwVirtualAddressN;
- #else
- pSectionDataN = pBase + dwPointerToRawDataN;
- #endif
Khi chúng ta nạp PE lên để lấy con trỏ pFile, PE chỉ là một khối dữ liệu tương tự như tập tin đĩa. Đọc byte nào thì byte đó có một Offset tương đối tính từ đầu tập tin.
"tôi muốn lấy byte thứ 5AB6h thì tôi chỉ việc truy xuất pFile[0x5AB6]", vậy nhận một byte đầu tiên của SectionData thì ta truy xuất
pFile[<Offset byte đầu tiên của SectionData>] => ta phải tìm Offset của byte đầu tiên ấy. May mắn thay SectionHeader đã lưu trữ Offset này trong PointerToRawData.
Khi chúng ta tạo bản đồ để nhận con trỏ pMap, thì hàm tạo bản đồ sẽ tính toán vùng nhớ mà sẽ nạp dữ liệu Section từ tập tin lên,
Nó sẽ lấy số liệu trong trường VirtualAddress và xem đó là Offset tới đầu vùng nhớ bản đồ.
Như vậy ta có pMap[VirtualAddress] là giá trị byte đầu tiên của SectionData trong vùng nhớ đã Mapping.
Để rõ hơn cách sắp xếp SectionData giữa đọc tập tin và tạo bản đồ, bạn xem thêm hình bên dưới, nơi đây các trường FileAlignment và SectionAlignment lên tiếng.
Ở đây tôi giả sử trường hợp ta đọc tập tin vào bộ nhớ được Windows cấp phát tại 100000h và trường hợp ta tạo bản đồ và nhận con trỏ pMap tại 400000h,pA, pB, pC, pD là con trỏ tới SectionData. Bạn chú ý vào kích thước giả định của các SectionData A,B,C,D và giá trị các con trỏ tương ứng.
Sau khi nắm một số ý trên, bạn có suy nghĩ gì thảo luận cho:
. Có trường hợp nào mà FileAlignment > SectionAlignment không. Nếu có thì ảnh hưởng các trường khác trên các cấu trúc khác ra sao.
. Theo bạn thì giá trị thấp nhất cho 2 trường trên có thể đạt được là bao nhiêu. Bạn có thể giải thích không (khó đấy).
Phần sau : Đi sâu vào thư mục xuất.
Yêu mã hơn yêu em !!!
Như vậy là ta đã có con trỏ và kích thước của SectionData bất kỳ, dùng con trỏ này ta có thể lấy toàn bộ dữ liệu trong nó. Nhưng nó chỉ là dữ liệu "thô",những bytes đọc được chưa nói lên bất kỳ công dụng nào. Dữ liệu bên trong các SectionData có thể là mã, là tài nguyên, v.v... Hôm nay ta sẽ xem thử thứ đầu tiên mà nó có thể chứa trong SectionData - Đó là thư mục xuất.
Quay trở lại với phân cấp PE, bên trong IMAGE_OPTIONAL_HEADER có một mảng IMAGE_DATA_DIRECTORY[16], mỗi cấu trúc có 2 trường VirtualAddress và Size. VirtualAddress là RVA của đối tượng nào đó và Size là kích thước của đối tượng. Windows đã định chuẩn cho 15 kiểu đối tượng mà nó lấp đầy 15 chỉ mục đầu tiên trong mảng IMAGE_DATA_DIRECTORY, chỉ mục cuối cùng (index 15) tới hiện thời còn trống và được lấp đầy bằng 0. Các chỉ mục đã được "hằng hóa" trong các tập tin
#include tương tự như bên dưới.
#define IMAGE_DIRECTORY_ENTRY_EXPORT 0 // Thư mục xuất - phân tích trong ngày nay
#define IMAGE_DIRECTORY_ENTRY_IMPORT 1 // Thư mục nhập
#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2 // Thư mục tài nguyên
#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3 // Bảng ngoại lệ
#define IMAGE_DIRECTORY_ENTRY_SECURITY 4 // Bảo mật
#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5 // Bảng dùng để định vị lại
#define IMAGE_DIRECTORY_ENTRY_DEBUG 6 // Thư mục Debug
#define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 7 // Architecture
#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 // GlobalPtr
#define IMAGE_DIRECTORY_ENTRY_TLS 9 // Dùng cho lưu giữ cục bộ các luồng việc
#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10 //
#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11
#define IMAGE_DIRECTORY_ENTRY_IAT 12 // Bảng IAT (cực kỳ quan trọng nếu bạn muốn thọc gậy)
#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13
#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14 // Thường dùng bởi .NET
Trước khi vào mục chính ta thử xem RVA là gì, và RVA trong Loader khi Windows nạp khởi chạy chương trình, ta quy đổi nó ra Offset tập tin như thế nào.
RVA là Offset của một byte bộ nhớ bất kỳ so với pBase là điểm bắt đầu mà bộ nạp (Loader) nạp lên vùng nhớ.
Khi Loader nạp chương trình, tất cả cấu trúc PE được nạp lên từ Offset 0 cho tới cuối SectionHeader cuối cùng đều được giữ nguyên khoảng cách như nó ở trong
tập tin, do vậy lúc này : File Offset = RVA.
Do cách thức canh chỉnh biên đoạn của các trường FileAlignment và SectionAlignment là khác nhau, do vậy một RVA từ một SectionData nào đó có thể không có một
Offset tập tin tương ứng.
Nếu muốn nhận Offset tập tin từ một RVA ta có thể làm như sau ( ví dụ có một RVA là dwRVA), giả sử ta lấy tên hàm là OffsetFromRVA(DWORD dwRVA)
+ Duyệt từng SectionHeader để lấy con trỏ pSectionHeaderN
+ DWORD dwAddress = pSectionHeaderN->VirtualAddress;
+ DWORD dwSizeData = pSectionHeaderN->SizeOfRawData;
+ DWORD dwPointerToRawData = pSectionHeaderN->PointerToRawData;
+ if (dwRVA >= dwAddress && dwRVA < (dwAddress + dwSizeData))
+ {
return (dwRVA + dwPointerToRawData - dwVirtualAddress);
+ }
+ Nếu đã duyệt qua hết các SectionHeader mà biểu thức điều kiện không thỏa lần nào thì có nghĩa RVA này không có Offset tập tin tương ứng
Giờ vào mục chính ta xét tới IMAGE_DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_EXPORT].
Thông thường thì các tập tin dạng dll (trường IMAGE_FILE_HEADER.Characteristics có cờ IMAGE_FILE_DLL được bật) mới có thư mục xuất nhưng lâu lâu cũng thấy các chương trình dạng exe cũng có.
Trường VirtualAddress (nếu khác 0) là RVA tới một cấu trúc IMAGE_EXPORT_DIRECTORY có các trường sau:
. Characteristics (4 bytes, không sử dụng thiết lập 0)
. TimeDateStamp (4 bytes, thời gian)
. MajorVersion (2 bytes, Major Version)
. MinorVersion (2 bytes, Minor Version)
. Name (4 bytes, RVA của chuỗi kết thúc NULL chứa tên của pe)
. Base (4 bytes, Thứ thự bắt đầu của những hàm được xuất)
. NumberOfFunctions (4 bytes, Số phần tử trong mảng AddressOfFunctions)
. NumberOfNames (4 bytes, Số phần tử trong mảng AddressOfNames)
. AddressOfFunctions (4 bytes, RVA trỏ tới một mảng những địa chỉ hàm)
. AddressOfNames (4 bytes, RVA trỏ tới một mảng các chuỗi tên hàm)
. AddressOfNameOrdinals ( 4 byte, RVA trỏ tới một mảng WORDs là các tên thứ tự của hàm)
Từ những thông tin trên ta có thể nhận những con trỏ tới các mảng chứa địa chỉ hàm, mảng chứa con trỏ tên hàm và mảng số thứ tự.
Ở đây ta cần chú ý hai mảng AddressOfNames và AddressOfNameOrdinals là có số phần tử như nhau = NumberOfNames và nó có sự tương ứng giữa các chỉ mục, nghĩa là AddressOfNames[0] và AddressOfNameOrdinals[0] là cùng nắm giữ thông tin về 1 hàm còn AddressOfNames[2] và AddressOfNameOrdinals[4] là nắm giữ thông tin về 2 hàm khác nhau
Từ 1 chỉ mục index trong AddressOfNames và AddressOfNameOrdinals, ta nhận một tên hàm như sau:
DWORD dwOffset = OffsetFromRVA(pAddressOfNames[index]); // Hàm OffsetFromRVA là ví dụ ở trên
PCHAR pszName = (PCHAR)(pBase + dwOffset);
Nhận tên thứ tự như sau:
WORD uNameOrdinal = pAddressOfNameOrdinals[index];
Cuối cùng nhận địa chỉ hàm như sau:
DWORD dwFunctionRVA = pAddressOfFunctions[uNameOrdinal];
Nhưng sự việc chưa hết rắc rối, một PE có thể có (NumberOfFunctions != NumberOfNames), đây là trường hợp có các hàm chỉ được xuất bởi thứ tự toàn cục. Nghĩa là trong các mảng AddressOfNames và AddressOfNameOrdinals không chứa các dẫn hướng đưa tới hàm này. Và như vậy khi ta duyệt mảng AddressOfFunctions ta sẽ gặp một số hàm có địa chỉ RVA nhưng không tên tuổi không thứ tự chi cả, nhưng một hàm xuất thì phải có thứ tự xuất mà các chương trình khác biết chứ.
Một thư viện sẽ có nhiều thứ để xuất chứ không chỉ có riêng các hàm, tất cả các thành phần xuất đó được lên danh sách, riêng các hàm sẽ nằm ở một vùng liên tiếp mà thứ tự bắt đầu được xác định bởi trường Base. Chúng ta tìm được uNameOrdinal ở trên thì nó chỉ là chỉ mục trong mảng các địa chỉ hàm mà thôi, muốn nhận thứ tự của hàm trên toàn bộ các thứ tự xuất thì ta phải cộng thêm Base vào.
Ví dụ : uNameOrdinal = 3; dwBase = 50; thì DWORD dwOrdinal = 53; // Thứ tự toàn cục là 53, bên ngoài sẽ thấy được hàm này qua dwOrdinal
Như vậy các hàm chỉ được xuất bởi thứ tự toàn cục, thì dwOrdinal = dwBase + chỉ mục trong mảng pAddressOfFunctions.
Phần tiếp theo : Tìm hiểu về thư mục nhập
Yêu mã hơn yêu em !!!
Các liên kết tới các hàm nhập ngoại được bắt đầu từ 4 thư mục dữ liệu :
1. IMAGE_DATA_DIRECTOTY[IMAGE_DIRECTORY_ENTRY_IMPORT]
2. IMAGE_DATA_DIRECTOTY[IMAGE_DIRECTORY_ENTRY_IAT]
3. IMAGE_DATA_DIRECTOTY[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT]
4. IMAGE_DATA_DIRECTOTY[IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT]
Hôm nay ta sẽ xem qua các liên kết ở 2 trong 4 mục ở trên.
Đây là hình ảnh tượng trưng cho các liên kết đó
Từ IMAGE_DIRECTORY_ENTRY_IMPORT ta sẽ nhận được một con trỏ tới 1 mảng các cấu trúc IMAGE_IMPORT_DESCRIPTOR, mảng này được kết thúc bằng 1 phần tử có tất cả các trường mang giá trị 0. Ta xem qua các trường của IMAGE_IMPORT_DESCRIPTOR.
.
Characteristics/OriginalFirstThunk: 4 Bytes - RVA tới một mảng các DWORD (x86) hay các ULONGLONG (x64). Mảng này được đặt tên là INT (Import Names Table), mỗi phần tử trong mảng thì hoặc là chỉ dẫn về thứ tự nhập (Ordinal) của hàm trong Dll nhập hoặc là RVA tới 1 cấu trúc IMAGE_IMPORT_BY_NAME.
.
TimeDateStamp: 4 Bytes
.
ForwarderChain: 4 Bytes - Thông tin chưa hoàn chỉnh về tham chiếu lồng nhau, nói thêm sau.
.
Name: 4 Bytes - RVA to một chuỗi Asciiz là tên của thư viện có hàm nhập vào.
.
FirstThunk: 4 Bytes - RVA tới 1 mảng các IMAGE_THUNK_DATA32 (x86) hay các IMAGE_THUNK_DATA64 (x64). Mảng này được đặt tên là IAT (Import Address Table), mỗi phần tử trong mảng có thể là chỉ dẫn về thứ tự nhập (Ordinal) hoặc RVA tới IMAGE_IMPORT_BYTE_NAME hoặc địa chỉ bộ nhớ hoặc là chỉ mục của hàm đầu tiên trong bảng hàm nhập mà được dẫn xuất từ 1 Dll khác nữa.
Mã để nhận con trỏ tới từng cấu trúc IMAGE_IMPORT_DESCRIPTOR có thể như sau:
- // Giả sử tập tin đã được kiểm tra là PE và pFile != NULL
- // là con trỏ bộ nhớ mà tập tin được đọc vào từ hàm ReadFile()
- void HandleAllImportDescriptor(PBYTE pFile)
- {
- PIMAGE_NT_HEADERS pNtHeaders = (PIMAGE_NT_HEADERS)(pFile + ((PIMAGE_DOS_HEADER)pFile)->e_lfanew);
- BOOL is64 = (pNtHeaders->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC) ? TRUE : FALSE;
- PIMAGE_DATA_DIRECTORY pDataDirectory;
- if(is64)
- pDataDirectory = (PIMAGE_DATA_DIRECTORY)&((PIMAGE_NT_HEADERS64)pNtHeaders)->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT];
- else
- pDataDirectory = (PIMAGE_DATA_DIRECTORY)&((PIMAGE_NT_HEADERS32)pNtHeaders)->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT];
-
- DWORD dwRVA = pDataDirectory->VirtualAddress;
- if (!dwRVA)
- return; // Không xét tiếp
- PIMAGE_IMPORT_DESCRIPTOR pImport = (PIMAGE_IMPORT_DESCRIPTOR)(pFile + OffsetFromRVA(dwRVA));
- while (pImport->Name)
- {
- // Làm gì đó với con trỏ cấu trúc này, ví dụ : Gọi HandleINT() hay HandleIAT() ở dưới
- pImport++;
- }
- }
Mã để nhận từng phần tử trong bảng INT có thể như sau:
- void HandleINT(PBYTE pFile, BOOL is64, PIMAGE_IMPORT_DESCRIPTOR pImport)
- {
- DWORD dwRVA = pImport->OriginalFirstThunk;
- if (!dwRVA)
- return;
- if (is64)
- {
- PULONGLONG pUlonglong = (PULONGLONG)(pFile + OffsetFromRVA(dwRVA)); // Ulonglong đầu tiên
- while (*pUlonglong)
- {
- // Làm gì đó với con trỏ 64 này
- pUlonglong++;
- }
- }
- else
- {
- PDWORD pDword = (PDWORD)(pFile + OffsetFromRVA(dwRVA)); // Dword đầu tiên
- while (*pDword)
- {
- // Làm gì đó với con trỏ 32 này
- pDword++;
- }
- }
- }
Tương tự, mã để nhận từng phần tử trong bảng IAT có thể :
- void HandleIAT(PBYTE pFile, BOOL is64, PIMAGE_IMPORT_DESCRIPTOR pImport)
- {
- DWORD dwRVA = pImport->FirstThunk;
- if (!dwRVA)
- return;
- if (is64)
- {
- PIMAGE_THUNK_DATA64 pThunk64 = (PIMAGE_THUNK_DATA64)(pFile + OffsetFromRVA(dwRVA)); // Dword đầu tiên
- while (pThunk64->u1.AddressOfData)
- {
- // Làm gì đó với con trỏ 64 này
- pThunk64++;
- }
- }
- else
- {
- PIMAGE_THUNK_DATA32 pThunk32 = (PIMAGE_THUNK_DATA32)(pFile + OffsetFromRVA(dwRVA)); // Dword đầu tiên
- while (pThunk32->u1.AddressOfData)
- {
- // Làm gì đó với con trỏ 32 này
- pThunk32++;
- }
- }
- }
Chú ý :
_ Bảng INT hay IAT của mỗi thư viện có hàm được nhập sẽ được kết thúc bởi 1 phần tử mà được lấp đầy bằng 0.
_ Thứ tự xuất hiện của các IMAGE_IMPORT_DESCRIPTOR và các khối trong các bảng INT và IAT là không liên quan nhau. Nghĩa là IMAGE_IMPORT_DESCRIPTOR xuất hiện trước có thể trỏ tới khối INT hay IAT sau hoặc ngược lại - Do sở thích và tính toán của TBD.
Rắc rối nhất là sự liên kết giữa bảng INT và bảng IAT tới bảng IMAGE_IMPORT_BY_NAME (gọi là bảng Hint/Name) mà chúng ta sẽ xem tới.
Theo sơ đồ bên trên thì mỗi phần tử của bảng INT hay bảng IAT là 1 RVA tới 1 phần tử trong bảng Hint/Name nhưng thực tế không phải vậy.
Quay trở lại với trường IMAGE_FILE_HEADER.Characteristics, nếu cờ IMAGE_FILE_DLL là được bật chúng ta có PE theo định dạng Dll, ngược lại là định dạng exe.
Đuôi gợi nhớ exe : (*.exe), (*.scr), ...
Đuôi gợi nhớ dll : (*.dll), (*.ocx), (*.cpl), (*.ax), ...
Trong định dạng exe :
_ Các phần tử trong bảng INT-IAT hoặc là chỉ dẫn về 1 Ordinal toàn cục hoặc là RVA tới một IMAGE_IMPORT_BY_NAME (1 phần tử của bảng Hint/Name). Để biết chính xác nó là gì thì ta xem bit có trọng số lớn nhất có được bật hay không (hay chúng ta dùng toán tử & giữa giá trị với IMAGE_ORDINAL_FLAG). Nếu bit này = 1, số bít còn lại là giá trị Ordinal cho hàm nhập. Nếu bit này = 0, giá trị của phần tử này chính là RVA tới một phần tử của bảng Hint/Name.
Trong định dạng dll:
- // if (bit có trọng số lớn nhất == 1)
- // {
- // Nó dẫn ra giá trị Ordinal toàn cục;
- // }
- // else
- // {
- // Xem nó như một RVA;
- // if (chuyển đổi ra Offset tập tin thành công)
- // {
- // Nó chính là RVA tới 1 phần tử trong bảng Hint / Name;
- // }
- // else
- // {
- // if (Giá trị của nó lớn hơn kích thước IMAGE_OPTIONAL_HEADER.SizeOfImage)
- // Nó là địa chỉ bộ nhớ;
- // else
- // Giá trị của nó là Index chuỗi Forward.Không tìm thấy tài liệu nào chỉ dẫn thêm.
- // }
- // }
Chúng ta xem cấu trúc Hint/Name (IMAGE_IMPORT_BY_NAMEs)
. Hint : 2 Bytes -> Ordinal của hàm
. Name[1] : Byte đầu tiên của chuỗi tên hàm.
Chú ý : Độ dài của Name là tùy thuộc vào tên hàm nên bảng Hint/Name chúng ta không thể xem là một mảng các IMAGE_IMPORT_BY_NAME được. Trong tập tin nó được canh chỉnh theo WORD (kể cả byte NULL kết chuỗi) và nối tiếp nhau
Ví dụ (Hex): 23 00 'R' 'e' 'a' 'd' 'F' 'i' 'l' 'e' 00 00 09 00 'G' 'e' 't' 'D' 'C' 00
IMAGE_IMPORT_BY_NAME đầu tiên có Hint = 0x0023 có tên hàm là ReadFile. Vì chuỗi có 8 ký tự + NULL = 9 nên phải được chèn thêm 1 byte NULL cho đủ canh chỉnh 2 Byte
IMAGE_IMPORT_BY_NAME thứ hai có Hint = 0x0009 có tên hàm là GetDC. Vì chuỗi có 5 ký tự + NULL = 6 đã đủ canh chỉnh nên không chèn gì cả.
Phần thứ 2 của hôm nay là dẫn hướng từ thư mục IMAGE_DATA_DIECTORY[IMAGE_DIRECTORY_ENTRY_IAT]
Chỉ mục này chỉ là dẫn hướng tới bảng IAT tổng của tất cả các bảng IAT con mà được dẫn xuất từ các IMAGE_IMPORT_DESCRIPTOR.
Do nó rất quan trọng khi Windows nạp nó lên và thực thi trên vùng nhớ nên nó được dành riêng 1 điểm nhập.
Để duyệt nó ta không thể cứ chạy con trỏ PIMAGE_THUNK_DATA cho đến khi giá trị trong con trỏ = 0 được, nguyên do là các bảng IAT con đã có các đánh dấu cuối bảng riêng của nó bằng phần tử lấp đẩy 0 như đã biết ở trên. Ở đây chúng ta có thể lấy số phần tử trong bảng IAT tổng bằng cách :
if (is64)
cElement = pDataDirectory->Size / sizeof(IMAGE_THUNK_DATA64);
else
cElement = pDataDirectory->Size / sizeof(IMAGE_THUNK_DATA32);
pe4.exe từ bên dưới mô tả kỹ hơn về các thư mục trong ngày hôm nay.
Yêu mã hơn yêu em !!!
Mặc dù Windows có cung cấp một số API để làm việc với tài nguyên như : FindResource, LoadResource, UpdateResource,... nhưng vẫn hữu hạn, để biết chính xác vị trí của các tài nguyên trong tập tin cho mục đích riêng, chúng ta phải đi theo cấu trúc của PE.
Thư mục tài nguyên được bắt đầu từ IMAGE_DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_RESOURCE].
Nếu trường Address và Size lớn hơn 0, nó là RVA tới một cấu trúc IMAGE_RESOURCE_DIRECTORY đầu tiên (RootResource), chúng ta có thể nhận con trỏ tới cấu trúc này
PIMAGE_RESOURCE_DIRECTORY pRootResource = pFile + OffsetFromRVA(DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].Address);
và các trường tổng quát cấu trúc này :
. DWORD Characteristics - Luôn luôn là 0
. DWORD TimeDateStamp
. WORD MajorVersion
. WORD MinorVersion
. WORD NumberOfNamedEntries - Số phần tử có tên của mảng IMAGE_RESOURCE_DIRECTORY_ENTRY[] theo ngay sau cấu trúc này (RootEntry).
. WORD NumberOfIdEntries - Số phần tử sử dụng ID của mảng IMAGE_RESOURCE_DIRECTORY_ENTRY[] theo ngay sau cấu trúc này.
Như vậy tổng số phần tử của mảng IMAGE_RESOURCE_DIRECTORY_ENTRY[] theo ngay sau là :
WORD cElements = pRootResource->NumberOfNamedEntries + pRootResource->NumberOfIdEntries;
Cấu trúc tổng quát của 1 IMAGE_RESOURCE_DIRECTORY_ENTRY gồm :
. DWORD Name - Là ID của tài nguyên hoặc là Offset tới cấu trúc IMAGE_RESOURCE_DIR_STRING_U chứa kích thước chuỗi và chính chuỗi tên theo Unicode
. DWORD OffsetToData - Offset tới IMAGE_RESOURCE_DIRECTORY hoặc IMAGE_RESOURCE_DATA_ENTRY.
Nếu cấu trúc này đang là RootEntry thì OffsetToData là Offset tới IMAGE_RESOURCE_DIRECTORY cấp 2 (StyleResource)
và theo ngay sau từng IMAGE_RESOURCE_DIRECTORY cấp 2 cũng là những IMAGE_RESOURCE_DIRECTORY_ENTRY cấp 2 (StyleEntry)
Trường OffsetToData của mỗi IMAGE_RESOURCE_DIRECTORY_ENTRY cấp 2 sẽ là Offset tới IMAGE_RESOURCE_DIRECTORY cấp 3 (LastResource)
và theo sau từng IMAGE_RESOURCE_DIRECTORY cấp 3 cũng là những IMAGE_RESOURCE_DIRECTORY_ENTRY cấp 3 (LastEntry)
Ở phân cấp cuối cùng, trường OffsetToData của mỗi IMAGE_RESOURCE_DIRECTORY_ENTRY cấp 3 sẽ là Offset tới IMAGE_RESOURCE_DATA_ENTRY,
IMAGE_RESOURCE_DATA_ENTRY này chứa các thông tin :
. DWORD OffsetToData - RVA of Data - Dữ liệu thực sự của tài nguyên
. DWORD Size - Size of Data
. DWORD CodePage
. DWORD Reserved
Ghi nhớ :
_ Các Offset bàn tới ở trên là Offset tính từ RootResource.
_ Trong trường Name : Nếu bít có trọng số lớn nhất là 1, các bits còn lại là Offset tới IMAGE_RESOURCE_DIR_STRING_U, ngược lại nó là ID số.
_ Trong trường OffsetToData : Nếu bit cao được thiết lập, nó là Offset tới IMAGE_RESOURCE_DIRECTORY cấp dưới, ngược lại các bits còn lại chỉ tới IMAGE_RESOURCE_DATA_ENTRY
Mã tổng quát để duyệt hết thư mục tài nguyên có thể :
- // pFile : Con trỏ bộ nhớ mà PE được đọc lên bằng ReadFile
- // pResourceDataDirectory : Con trỏ tới IMAGE_DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_RESOURCE]
- // OffsetFromRVA : Hàm được đề cập trong các ngày trước
- void ViewResource(PBYTE pFile, PIMAGE_DATA_DIRECTORY pResourceDataDirectory)
- {
- DWORD dwRootOffset = OffsetFromRVA(pResourceDataDirectory->VirtualAddress);
- // Thư mục gốc
- PIMAGE_RESOURCE_DIRECTORY pRootResource = (PIMAGE_RESOURCE_DIRECTORY)(pFile + dwRootOffset);
- WORD cRootEntries = pRootResource->NumberOfNamedEntries + pRootResource->NumberOfIdEntries;
- // Điểm nhập gốc
- PIMAGE_RESOURCE_DIRECTORY_ENTRY pRootEntry = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(pRootResource + 1);
-
- for (WORD wRoot = 0; wRoot < cRootEntries; wRoot++, pRootEntry++)
- {
- // Thư mục kiểu : Icon, bitmap, cursor, ...,
- PIMAGE_RESOURCE_DIRECTORY pStyleResource = (PIMAGE_RESOURCE_DIRECTORY)((PBYTE)pRootResource + (pRootEntry->OffsetToData & 0x7FFFFFFF));
- WORD cStyleEntries = pStyleResource->NumberOfNamedEntries + pStyleResource->NumberOfIdEntries;
- // Điểm nhập kiểu
- PIMAGE_RESOURCE_DIRECTORY_ENTRY pStyleEntry = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(pStyleResource + 1);
-
- for (WORD wStyle = 0; wStyle < cStyleEntries; wStyle++, pStyleEntry++)
- {
- // Thư mục cuối
- PIMAGE_RESOURCE_DIRECTORY pLastResource = (PIMAGE_RESOURCE_DIRECTORY)((PBYTE)pRootResource + (pStyleEntry->OffsetToData & 0x7FFFFFFF));
- // Điểm nhập cuối
- PIMAGE_RESOURCE_DIRECTORY_ENTRY pLastEntry = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(pLastResource + 1);
- // Điểm nhập dữ liệu
- PIMAGE_RESOURCE_DATA_ENTRY pDataEntry = (PIMAGE_RESOURCE_DATA_ENTRY)((PBYTE)pRootResource + (pLastEntry->OffsetToData & 0x7FFFFFFF));
- // Dữ liệu dòng của tài nguyên
- PBYTE pRawData = pFile + OffsetFromRVA(pDataEntry->OffsetToData);
- }
- }
- }
Mã cụ thể hơn đã có trong pe4.exe của ngày trước.
Phần sau : Làm việc với Base Relocation
Yêu mã hơn yêu em !!!

Server: Apache

Pragma: private

Cache-Control: private

Vary: Host,Accept-Encoding

Set-Cookie: bb_lastactivity=0; expires=Sat, 23-Jun-2018 15:40:48 GMT; path=/

Content-Type: text/html; charset=utf-8


text: hi các bạn, Hiện tại, phòng khám Spa của mình cần tuyển dụng một số nhân viên chăm sóc da. Có kinh nghiệm hoặc không có cũng được. Thời gian làm việc thì có thể chọn ca 1 từ 8-19h hoặc ca 2 từ 9-20h. Mức lương thì từ 3.5 -4.5 triệu VND (tùy kinh nghiệm, chưa tính tiền Tip của khách). Chi tiết hơn có thể trao đổi trong buổi phỏng vấn. Các bạn nào quan tâm hoặc có bạn bè, anh chị cần tìm việc cho vị trí tương tự thì vui lòng liên hệ : Mrs Ngọc, 0908445102, email : minhngoc718@yahoo.com nhé. Để có thông tin về phòng khám, mời tham khảo Website : FB skincare Minh Ngọc Trần Email : minhngoc@fbskincare.com Phone : 0908 445 102

markdown:
![](http://seotoolsaz.com/ads/banner-seotoolsaz.gif)
![](http://seotoolsaz.com/ads/banner-seotoolsaz.gif)
# Cần Tuyển Nhân Viên Chăm Sóc Da Gấp
Thảo luận trong '
[Tuyển Dụng](forums/tuyen-dung/)' bắt đầu bởi [Lê Hiếu](members/le-hieu.199/), [27 Tháng tư 2013](threads/can-tuyen-nhan-vien-cham-soc-da-gap.10593/).
[iwin](http://taiiwin.vn)mới nhất - [cach tri mun dau den](http://chamsocda24h.net/cach-tri-mun/cach-tri-mun-dau-den)- [cach tri mun trung ca](http://chamsocda24h.net/cach-tri-mun/cach-tri-mun-trung-ca)- [thẩm mỹ viện](http://chamsocda24h.net/bi-quyet-lam-dep/tham-my-vien)- [danh bạ thẩm mỹ viện](http://chamsocda24h.net/bi-quyet-lam-dep/danh-ba-tham-my-vien)- [triệt lông vĩnh viễn](http://chamsocda24h.net/cham-soc-co-the/triet-long-vinh-vien)- [cach tri mun boc](http://chamsocda24h.net/cach-tri-mun/cach-tri-mun-boc)- [giam can hieu qua](http://chamsocda24h.net/giam-can-hieu-qua-2)- [cham soc da mat](http://chamsocda24h.net)- [tap chi cong nghe](http://tapchicongnghe.org/)- hướng dẫn nấu các [mon ngon moi ngay](http://amthucquan.net/mon-ngon-moi-ngay)Việt Nam - - [tai iwin](http://taiiwinmoi.net)- [tai game ban ca](http://gamebanca.org)- [game avatar](http://thegioigame24h.net/game-avatar/)- [game iwin](http://thegioigame24h.net/game-iwin/)- khóa [hoc photoshop](http://www.cncaptech.edu.vn/pages/courses/career-courses/photoshop.php)- [phòng khám đa khoa](http://mayo.com.vn)chất lượng cao TPHCM - Công ty [thi công nội thất chuyên nghiệp](http://www.ttdecor.net)nhất hiện nay

WARC-Identified-Payload-Type: text/html

Server: Nginx

X-Content-Type-Options: nosniff

X-Frame-Options: SAMEORIGIN

X-XSS-Protection: 1; mode=block

Cache-control: private, max-age=0

X-Powered-By: VPSSIM


text: Tàn nhang và nám da đang là một trong những lo lắng đối với nhan sắc của chị em phụ nữ. Câu hỏi làm thế nào để có cách trị tàn nhang và nám da hiệu quả luôn là mối bận tâm, lo lắng của bạn hàng ngày? - Combo 03 lọ tinh dầu thiên nhiên nguyên chất (hoa hồng + Trà xanh + Oải hương): một sản phẩm thần kì giúp điều trị nám và tàn nhanh một cách hiệu quả Bộ sản phẩm thần kì cho trị nám và tàn nhangOải hươngTrà xanhHoa hồng Nám da ở phụ nữ bao gồm cả nguyên nhân bên trong và nguyên nhân bên ngoài. Nguyên nhân bên trong: Nếu bỏ qua yếu tố di truyền, chủng tộc, nám và tàn nhang xuất hiện nhiều nhất vào gia đoạn mãn kinh, khi đó có sự mất cân bằng về hóc môn tuyến yên, thượng thận và buồng trứng, dẫn đến việc luôn luôn kích thích sản sinh da hắc tố melanin. Phụ nữ sau khi sinh nở cũng xuất hiện nám rất nhiều nhưng sau đó dần dần giảm xuống. Trạng thái căng thẳng thần kinh, thiếu vitamin C, E và uống ít nước cũng làm tăng vết nám.. Nguyên nhân bên ngoài do bị ánh nắng chiệu dọi làm xuất hiện gốc tự do gây nám, tiếp xúc với hóa chất nhóm NO3- cũng gây nám. Melanin nằm ở vị trí tiếp giáp thượng bì và trung bì Ở góc độ chữa nám từ bên ngoài cần chú ý 3 vấn đề làm sạch, giữ ẩm và chống nắng. Tàn nhang nằm từ mặt ngoài đến sát lớp trung bì Tinh dầu có đặc điểm là một tập hợp rất nhiều các chất khác nhau, có khả năng ngấm qua lớp thượng bì phù hợp với việc làm sạch các mụn mẩm và vết nám. Vì Melanin là một keo polymer nên việc hòa tan melanin diễn ra từ từ hơn so với việc làm sạch các mụn mẩn theo tuyến lỗ chân lông. Tàn nhang nằm từ mặt ngoài đến sát lớp trung bì nên dễ bị hòa tan hơn so với nám. Các nhóm chức tạo cầu nối hydro giữ và cân bằng độ ẩm trên da. Trong cấu trúc hóa học của tinh dầu có nhiều vòng thơm và các nối đôi không no tiếp nhận ánh sang tử ngoại bảo vệ da trước ánh nắng mặt trời. Tinh dầu ngấm qua lớp biểu bì, kích thích và làm trẻ hóa da giúp da tươi sáng và mềm mịn. Combo Oải hương + hoa hồng + trà xanh được sử dụng vào việc trị nám, tàn nhang với cách dùng như sau: Pha 10 giọt hoa hồng + 10 giọt trà xanh với 500ml nước lọc RO. Buổi sáng sau khi rửa mặt bằng nước ấm, dùng bông tẩy trang, thấm nước hỗn hợp tinh dầu trên lau toàn bộ mặt, lau kỹ hơn ở những vùng có nám. Buổi tối nhỏ khoảng 3-4 giọt oải hương nguyên chất vào lòng bàn tay và chấm vào các vị trị bị nám, dùng ngón tay trỏ và ngón giữa day khoảng 5 - 10 phút sau đó rửa mặt lại bằng nước ấm. Bạn sẽ thấy vế nám mờ và hết vết nám, da trắng mịn sau 7-10 ngày sử dụng. Với bộ ba sản phẩm trị nám và tàn nhang này, bạn sẽ luôn tự tin với một làn da sáng mịn.Ngoài ra bạn cũng có thể thư giãn bằng cách chấm nhẹ loại tinh dầu bạn yêu thích vào sau gáy để có giấc ngủ ngon hoặc ngâm chân nước ấm với vài giọt tinh dầu hoa hồng hoặc oải hương. Cách massage trị nám, tàn nhang hiệu quả

markdown:
![](http://seotoolsaz.com/ads/banner-seotoolsaz.gif)
![](http://seotoolsaz.com/ads/banner-seotoolsaz.gif)
# Tinh dầu trị nám, tàn nhang Lam Hà
Thảo luận trong '
[Nước Hoa - Mỹ Phẩm](forums/nuoc-hoa-my-pham/)' bắt đầu bởi [lecanhlam](members/lecanhlam.2655/), [24 Tháng tư 2013](threads/tinh-dau-tri-nam-tan-nhang-lam-ha.10147/).
[iwin](http://taiiwin.vn)mới nhất - [cach tri mun dau den](http://chamsocda24h.net/cach-tri-mun/cach-tri-mun-dau-den)- [cach tri mun trung ca](http://chamsocda24h.net/cach-tri-mun/cach-tri-mun-trung-ca)- [thẩm mỹ viện](http://chamsocda24h.net/bi-quyet-lam-dep/tham-my-vien)- [danh bạ thẩm mỹ viện](http://chamsocda24h.net/bi-quyet-lam-dep/danh-ba-tham-my-vien)- [triệt lông vĩnh viễn](http://chamsocda24h.net/cham-soc-co-the/triet-long-vinh-vien)- [cach tri mun boc](http://chamsocda24h.net/cach-tri-mun/cach-tri-mun-boc)- [giam can hieu qua](http://chamsocda24h.net/giam-can-hieu-qua-2)- [cham soc da mat](http://chamsocda24h.net)- [tap chi cong nghe](http://tapchicongnghe.org/)- hướng dẫn nấu các [mon ngon moi ngay](http://amthucquan.net/mon-ngon-moi-ngay)Việt Nam - - [tai iwin](http://taiiwinmoi.net)- [tai game ban ca](http://gamebanca.org)- [game avatar](http://thegioigame24h.net/game-avatar/)- [game iwin](http://thegioigame24h.net/game-iwin/)- khóa [hoc photoshop](http://www.cncaptech.edu.vn/pages/courses/career-courses/photoshop.php)- [phòng khám đa khoa](http://mayo.com.vn)chất lượng cao TPHCM - Công ty [thi công nội thất chuyên nghiệp](http://www.ttdecor.net)nhất hiện nay


text: Firmware cho đầu thu SD, HD free như s68, s18,... - Page 11Tất cả vì sự phát triển của Truyền Hình Vệ Tinh Đăng nhập để chia sẻ nhé bạn ^-^ Diễn đàn Truyền Hình Vệ Tinh - Nơi trao đổi, thảo luận các vấn đề về truyền hình kỹ thuật sốTop postersthanhmeo57 quang_tu sang bangtrinh07 trungduc91 Đôrêmi canvtv uc dai luong lnb01 nghiệp dư Bài gửiNgười gửiThời gian Khuyến Mại DTH đến hết ngày 25/7/2017 datphuongnam Yesterday at 11:36 am ĐẦU THU K+ SAMSUNG HD CŨ quoclap223 Yesterday at 12:51 am Tìm đối tác phân phối đầu thu DVB-T2 toàn quốc Truyền hình Sông Thu 2017-06-21, 3:36 pm Giúp địa chỉ mua phụ kiên kết nối THC và DVBT 2 Truyền hình Sông Thu 2017-06-21, 3:23 pm Khuyến Mại Đầu Thu mobiTV DTT giá sốc Truyền hình Sông Thu 2017-06-21, 3:14 pm Có nên lắp cáp SCTV +internet trọn gói 200k không? macanhhao 2017-06-19, 7:35 pm Tuyển Nhân Viên lắp đặt đầu thu DTT mobiTV macanhhao 2017-06-19, 7:29 pm Tài Liệu Truyền Hình Số Mặt Đất bapxaobo47 2017-06-15, 6:05 am Hỏi về bộ trộn tín hiệu,ai biết giúp mình với Hothuly 2017-06-13, 8:00 am [Giới thiệu] Ứng dụng android xem p2p TV free traibiendao 2017-06-08, 4:04 pm Robot “tự tử” vì chán làm việc nhà danganhnga 2017-06-07, 3:08 pm Khắc phục máy tính vào mạng rất chậm danganhnga 2017-06-07, 3:00 pm giao lưu kết bạn bqphuoc 2017-06-01, 1:31 pm Chào các bác! PTP_93 2017-05-27, 12:10 am PAl SONY KV_HA212M05, CẦN GIÚP TDHien59 2017-05-24, 7:31 pm :: Công Nghệ DVB :: Tài Liệu Kỹ ThuậtShare | Firmware cho đầu thu SD, HD free như s68, s18,... Chuyển đến trang : 1, 2, 3 ... 9, 10, 11Tác giảThông điệplnb01ModeratorsTên Thật : TrườngTổng số bài gửi : 1084Ngày gia nhập : 09/06/2010Tuổi : 29Đang sống tại : Đắk LắkLàm việc tại : ParasideGiới tính : Tiêu đề: Firmware cho đầu thu SD, HD free như s68, s18,... 2011-09-26, 4:48 pm First topic message reminder :bác nào có các Firmware cho đầu thu SD, HD free như s68, s18,... để nâng cấp qua rs232 hoặc usb chia sẻ cho em và anh em với!we_are_one đã viết:Đây là 2 FW của mấy loại đầu "Free to air" bác nào cần thì down về test nhé:FW for HD: [You must be registered and logged in to see this link.]FW for SD: [You must be registered and logged in to see this link.]dtduylong đã viết:hoangkha2012 đã viết:em có dầu microcom kts-hd02 bị lổi fw anh em nò tren diển đàn có thì cho em xin với xin chân thành cảm ơn- Phải loại này không bạn???- Hộp: - Mặt trước:- Mainboard:- Phải thì lấy về dùng, nói trước là fw này chính tay tôi sửa lại từ fw lỗi và đã chạy ok 100% nhé! Nạp vào vì một lý do nào đó không chạy thì đừng đổ lỗi FW của tôi nhé, Cảm ơn!!!>>> MICROCOM KTS HD 02Chữ ký của lnb01ku: 75, 76.5, 78.5, 88, 91, 95, 113, 131.8, 132.C: nhiều vô kể,...Không biết tới bao giờ mình mới được như anh Lý Đức nhỉ... Tác giảThông điệpdaihoan1977Thành viên chính thứcTổng số bài gửi : 35Ngày gia nhập : 10/10/2012Tiêu đề: ae giúp đỡ đầu thu hd02 tầu 2013-11-04, 8:50 am ae ai có fw chảo hd02-jpk-s2-v1.5-chíp M3106-trung tần 6211-kênh av2012 ai có cho tôi xin với.................. thangkh2002Thành viên mớiTổng số bài gửi : 3Ngày gia nhập : 21/02/2014Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2014-02-21, 12:25 pm mình đang dùng đầu thu ngoài ghi VINAT-02HD nhưng xem kênh HD không được, còn khi có bóng đá là kênh bị cắt hết rồi thì xem bình thường, hiện nay mất hết mấy kênh của HTV trước kia vẫn xem được, giờ chỉ còn lại HTV7,9 mà thôi . Ai biết chỉ giúp với ! Thanks trước anh em nhé ! cuongdaiphucThành viên ĐồngTổng số bài gửi : 993Ngày gia nhập : 22/01/2013Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2014-02-21, 1:11 pm thangkh2002 đã viết:mình đang dùng đầu thu ngoài ghi VINAT-02HD nhưng xem kênh HD không được, còn khi có bóng đá là kênh bị cắt hết rồi thì xem bình thường, hiện nay mất hết mấy kênh của HTV trước kia vẫn xem được, giờ chỉ còn lại HTV7,9 mà thôi . Ai biết chỉ giúp với ! Thanks trước anh em nhé !- Đầu thu của bạn ViNat-02HD là đầu là đầu miễn phí (đầu free) giá <700K không có cổng HDMI (chỉ có cổng AV) là không xem được kênh HD đâu bạn.- Bóng đá đỉnh cao là sự kiện có bản quyền truyền hình, muốn xem phải trả tiền. Đầu free không đóng phí thuê bao nên bị "Mã hóa $" không xem được là điều hiển nhiên.- Nhóm kênh HTV1,2,3,4, HTVC đã chuyển sang phát có phí $ lâu rồi, đầu free không xem được đâu. thangkh2002Thành viên mớiTên Thật : Ngô Quốc ThắngTổng số bài gửi : 3Ngày gia nhập : 21/02/2014Tuổi : 37Đang sống tại : Đắk LắkLàm việc tại : ĐĂK LĂKGiới tính : Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2014-02-22, 3:46 pm cuongdaiphuc đã viết:thangkh2002 đã viết:mình đang dùng đầu thu ngoài ghi VINAT-02HD nhưng xem kênh HD không được, còn khi có bóng đá là kênh bị cắt hết rồi thì xem bình thường, hiện nay mất hết mấy kênh của HTV trước kia vẫn xem được, giờ chỉ còn lại HTV7,9 mà thôi . Ai biết chỉ giúp với ! Thanks trước anh em nhé !- Đầu thu của bạn ViNat-02HD là đầu là đầu miễn phí (đầu free) giá <700K không có cổng HDMI (chỉ có cổng AV) là không xem được kênh HD đâu bạn.- Bóng đá đỉnh cao là sự kiện có bản quyền truyền hình, muốn xem phải trả tiền. Đầu free không đóng phí thuê bao nên bị "Mã hóa $" không xem được là điều hiển nhiên.- Nhóm kênh HTV1,2,3,4, HTVC đã chuyển sang phát có phí $ lâu rồi, đầu free không xem được đâu.mình vẫn biết nhưng xem bóng đá trên VTV2,3,6 vẫn bị cắt mới bực chứ không lẽ phải dùng đầu lậu 28 kênh mà xem ah phuc0822Thành viên nhiệt tìnhTên Thật : Nguyễn Minh PhúcTổng số bài gửi : 221Ngày gia nhập : 06/02/2014Tuổi : 19Đang sống tại : Thái BìnhLàm việc tại : Đông HưngGiới tính : Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2014-02-22, 11:30 pm mình còn phải xem bằng analog VTV2,3,6 nè. Bác nào,có firmware JPARK HD S20 share cho e với... GIANGHUEThành viên nhiệt tìnhTên Thật : võ truờng giangTổng số bài gửi : 193Ngày gia nhập : 30/11/2010Tuổi : 40Làm việc tại : cà mauGiới tính : Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2014-03-15, 10:37 am anh em ở đây ai có fw đầu thu vệ tinh HUMAX HD 02 chạy IC 3106H mã boad JPK-DVB-S2-VER1.6 cho mình xin mình cám ơn nhiều!!!(fw chạy máy nạp rom hoặc chạy USB cũng được) dtduylongModeratorsTên Thật : Phan Duy LongTổng số bài gửi : 664Ngày gia nhập : 10/05/2012Tuổi : 43Đang sống tại : Bà Rịa - Vũng TàuLàm việc tại : Châu Đức, Bà Rịa - Vũng TàuGiới tính : Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2014-03-15, 3:55 pm GIANGHUE đã viết:anh em ở đây ai có fw đầu thu vệ tinh HUMAX HD 02 chạy IC 3106H mã boad JPK-DVB-S2-VER1.6 cho mình xin mình cám ơn nhiều!!!(fw chạy máy nạp rom hoặc chạy USB cũng được)Vào đây lấy đi bác! JPARK HD68 JPK-DVB-S2-VER1.6_M3106H_25L16_TT AVL8211LA_AV2012_DUYLONG-ZIN-OK.binHoặc: [You must be registered and logged in to see this link.]Chạy bằng máy nạp thì đuôi .bin còn chạy bằng USB thì lấy file đuôi .bin đổi thành .absChữ ký của dtduylongYahoo: [You must be registered and logged in to see this link.]Gmail: dtduylong@gmail.comSkype: dtduylongNội quy diễn đànMột số FW đầu thu vệ tinh Free GIANGHUEThành viên nhiệt tìnhTên Thật : võ truờng giangTổng số bài gửi : 193Ngày gia nhập : 30/11/2010Tuổi : 40Làm việc tại : cà mauGiới tính : Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2014-03-15, 6:08 pm Cám ơn bạn dtduylong rất nhiều fw của bạn cho chạy rất tốt 1 lần nữa xin cám ơn bạn và xin chúc gia đình được dồi dào sức khõe !!!! thai thanhThành viên nhiệt tìnhTên Thật : nguyen thai thanhTổng số bài gửi : 215Ngày gia nhập : 16/10/2013Tuổi : 26Đang sống tại : Tây NinhLàm việc tại : tai nhàGiới tính : Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2014-03-17, 8:10 am các bác có file pantesat hd03 . GX3113B_PANTE_V3.0_2011-09-06 cho em xin . cảm ơn các bác coofhairThành viên mớiTên Thật : coofhairTổng số bài gửi : 5Ngày gia nhập : 23/06/2011Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2014-04-23, 8:22 am thai thanh đã viết:các bác có file pantesat hd03 . GX3113B_PANTE_V3.0_2011-09-06 cho em xin . cảm ơn các bác Tớ cũng đang cần cái này mà kiếm k ra GIANGHUEThành viên nhiệt tìnhTên Thật : võ truờng giangTổng số bài gửi : 193Ngày gia nhập : 30/11/2010Tuổi : 40Làm việc tại : cà mauGiới tính : Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2014-04-23, 12:39 pm coofhair đã viết:thai thanh đã viết:các bác có file pantesat hd03 . GX3113B_PANTE_V3.0_2011-09-06 cho em xin . cảm ơn các bác Tớ cũng đang cần cái này mà kiếm k raMình có FW nầy nhưng không biết cách úp vào đây bạn nào cần thì buz cho mình YH:truonggiangsdb.Mail:truonggiangsdb@yahoo.com.vn mình sẵn sàng giúp. vanhung5162Thành viên mớiTên Thật : trần văn hùngTổng số bài gửi : 6Ngày gia nhập : 19/03/2012Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2014-05-04, 8:53 pm bác cho tớ hỏi, hiện tại tớ đang dùng đầu thu free của trung quốc VTC HD 02 tớ đang xem được 45 kênh việt nam toàn kênh SD còn kênh HD đầu này thu được nhưng không có xem được, còn lại khóa mã vì có $ chữ này trước các kênh, bác cho tớ hỏi nếu tớ nạp lại FW cho đầu tàu này thì có ảnh hưởng gì không. tớ xin cám ơn bác nhiềuđt: 0974264517 tớ tên hùng thanhmeo57Thành viên viết bài nhiều nhấtTên Thật : Nguyễn văn ThànhTổng số bài gửi : 2523Ngày gia nhập : 02/10/2011Tuổi : 41Đang sống tại : Hồ Chí MinhLàm việc tại : TPHCMGiới tính : Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2014-05-04, 11:10 pm vanhung5162 đã viết:bác cho tớ hỏi, hiện tại tớ đang dùng đầu thu free của trung quốc VTC HD 02 tớ đang xem được 45 kênh việt nam toàn kênh SD còn kênh HD đầu này thu được nhưng không có xem được, còn lại khóa mã vì có $ chữ này trước các kênh, bác cho tớ hỏi nếu tớ nạp lại FW cho đầu tàu này thì có ảnh hưởng gì không. tớ xin cám ơn bác nhiềuđt: 0974264517 tớ tên hùngNạp fw cũng không ích gì. Bạn nên xóa hết kênh đi,sau đó dò lại chế độ autoscan. Hiện giờ là hơn 70 kênh của VN chưa tính kênh thái. hoang thienThành viên nhiệt tìnhTên Thật : lê Hoàng ThiệnTổng số bài gửi : 264Ngày gia nhập : 22/03/2014Tuổi : 37Đang sống tại : Đồng ThápLàm việc tại : Tam NôngGiới tính : Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2014-05-09, 2:34 pm cho minh phan mem fw lai dum tiemthucThành viên mớiTên Thật : Trần Lê Tú LinhTổng số bài gửi : 1Ngày gia nhập : 20/11/2013Tuổi : 23Đang sống tại : Cần ThơLàm việc tại : Cần ThơGiới tính : Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2014-07-16, 7:48 pm em lần đầu tiên vào diễn đàn, mong các tiền bối giúp đỡ cho em: cách nâng cấp đầu thu vsat s2 hd02 chi tiết được không ạ! Fi FaThành viên chính thứcTên Thật : Fi FaTổng số bài gửi : 25Ngày gia nhập : 16/10/2011Giới tính : Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2014-09-24, 10:33 am Chào các bác.Có bác nào có bản FW S18 chạy ổn định, cho tôi xin với. tôi có cái đầu S18 cứ updade FW là nó tự động nhảy kênh, không biết nó lỗi gì nữa.cảm ơn các bác. lnb01ModeratorsTên Thật : TrườngTổng số bài gửi : 1084Ngày gia nhập : 09/06/2010Tuổi : 29Đang sống tại : Đắk LắkLàm việc tại : ParasideGiới tính : Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2014-09-25, 11:39 pm Fi Fa đã viết:Chào các bác.Có bác nào có bản FW S18 chạy ổn định, cho tôi xin với. tôi có cái đầu S18 cứ updade FW là nó tự động nhảy kênh, không biết nó lỗi gì nữa.cảm ơn các bác.S18 bác vẫn còn giữ đến bây giờ được thì đâù thu của bác khá đặc biệt, vì em lắp đặt cho hơn 20 khách hàng cách đây hơn 4 năm đều bị hư hết rồi, cái thay mainboard mà vẫn hư, cái phần mềm tậm tịt quá đổi luôn cho khách cái vsat mới.PS: bác thử fw HD ở đầu topic của bác we_are_one xem.Chữ ký của lnb01ku: 75, 76.5, 78.5, 88, 91, 95, 113, 131.8, 132.C: nhiều vô kể,...Không biết tới bao giờ mình mới được như anh Lý Đức nhỉ... thanhmeo57Thành viên viết bài nhiều nhấtTên Thật : Nguyễn văn ThànhTổng số bài gửi : 2523Ngày gia nhập : 02/10/2011Tuổi : 41Đang sống tại : Hồ Chí MinhLàm việc tại : TPHCMGiới tính : Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2014-09-26, 6:41 am Fi Fa đã viết:Chào các bác.Có bác nào có bản FW S18 chạy ổn định, cho tôi xin với. tôi có cái đầu S18 cứ updade FW là nó tự động nhảy kênh, không biết nó lỗi gì nữa.cảm ơn các bác. Bạn hãy bằng lòng với những gì đang có,loại này kg có phần mềm đâu, nếu có chỉ là phần mềm thì chỉ là ảo => không up được đâu. hoangviet56Thành viên mớiTên Thật : nguyenhoangvietTổng số bài gửi : 8Ngày gia nhập : 26/10/2011Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2014-09-26, 9:50 am bác qua bên codientu.org mình gửi cho hoangviet56Thành viên mớiTên Thật : nguyenhoangvietTổng số bài gửi : 8Ngày gia nhập : 26/10/2011Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2014-09-26, 10:00 am bác vào đây lấy nhé:http://codientu.org/threads/noi-trao-doi-kinh-nghiem-dau-thu-kts-chao-ve-tinh-vinasat.6861/page-56 Fi FaThành viên chính thứcTên Thật : Fi FaTổng số bài gửi : 25Ngày gia nhập : 16/10/2011Giới tính : Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2014-10-24, 10:09 am lnb01 đã viết:Fi Fa đã viết:Chào các bác.Có bác nào có bản FW S18 chạy ổn định, cho tôi xin với. tôi có cái đầu S18 cứ updade FW là nó tự động nhảy kênh, không biết nó lỗi gì nữa.cảm ơn các bác.S18 bác vẫn còn giữ đến bây giờ được thì đâù thu của bác khá đặc biệt, vì em lắp đặt cho hơn 20 khách hàng cách đây hơn 4 năm đều bị hư hết rồi, cái thay mainboard mà vẫn hư, cái phần mềm tậm tịt quá đổi luôn cho khách cái vsat mới.PS: bác thử fw HD ở đầu topic của bác we_are_one xem.Cảm ơn các bác đã quan tâm. Nhưng các bác có nhầm không vậy, đầu của tôi là Superbox S18, tôi mua của chú Cường ở HN, đây là topic mà chú ấy rêu rao sản phẩm của chú ấy.[You must be registered and logged in to see this link.]Tôi nghĩ, con này chỉ ra được khoảng hơn 2 năm là nhiều, nhưng nhà sản xuất đã khai tử nó rồi. Tôi dược biết bản FW cuối cùng của nó là ngày 20/12/13, bác nào có bản này cho tôi xin với.Cảm ơn các bác. thanhniencongsan1983Thành viên mớiTên Thật : Nguyen Van HuyTổng số bài gửi : 1Ngày gia nhập : 02/02/2015Tuổi : 23Đang sống tại : Thái BìnhLàm việc tại : đại học công nghiệp hà nộiGiới tính : Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2015-02-02, 9:54 pm bác nào có fimware của đầu Jpark hd s20 cho e xin với ạ... chứ bây giờ bị khóa hết vtv roi cuongdaiphucThành viên ĐồngTên Thật : Đại Phúc CườngTổng số bài gửi : 993Ngày gia nhập : 22/01/2013Tuổi : 36Đang sống tại : Hồ Chí MinhLàm việc tại : Quận 12, TP.HCMGiới tính : Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2015-02-03, 1:18 pm thanhniencongsan1983 đã viết:[size=32]bác nào có fimware của đầu Jpark hd s20 cho e xin với ạ... chứ bây giờ bị khóa hết vtv roi[/size]FW đang dùng ổn định thì dùng đi, đầu free up FW mới làm gì, nếu chip không phù hợp FW mới đó mà up vào là bị lỗi đó. VTV3 & VTV6 bị K+ khóa $ lâu rồi, không liên quan đến FW đâu. hieulv0516Thành viên mớiTên Thật : le hieuTổng số bài gửi : 1Ngày gia nhập : 20/11/2015Tuổi : 22Đang sống tại : An GiangLàm việc tại : agGiới tính : Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2015-11-20, 9:47 am bac nao co firmware con Vsat HD2. giup minh cai. cam on khanh8909Thành viên mớiTên Thật : nam hauTổng số bài gửi : 1Ngày gia nhập : 16/02/2016Tuổi : 27Đang sống tại : Cao BằngLàm việc tại : cao bangGiới tính : Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2016-02-16, 2:56 pm bác nào có fimware đầu thu pantesat HD-02 cho e với chieunam001Thành viên chính thứcTên Thật : Nguyen Chieu NamTổng số bài gửi : 15Ngày gia nhập : 16/04/2013Tuổi : 21Đang sống tại : Tiền GiangLàm việc tại : Tien GiangGiới tính : Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2016-05-20, 1:49 pm bác nao có firmware của vinasat này cho em xin với. MrHoiThành viên chính thứcTổng số bài gửi : 19Ngày gia nhập : 19/10/2010Tiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... 2016-05-27, 6:54 pm Mình có đâu vtc hd012Có thông số như sauMã boWFCA DVB AV2018 VER1. 0EMSTM12L2561616A - 6TAZA1P3331 1319ALAAM 3106HAC828111AB35AVALINKAVL6211LA0001E muốn up fw cho nó. Bác nào có cho xin Sponsored contentTiêu đề: Re: Firmware cho đầu thu SD, HD free như s68, s18,... Firmware cho đầu thu SD, HD free như s68, s18,... Trang 11 trong tổng số 11 trangChuyển đến trang : 1, 2, 3 ... 9, 10, 11 Similar topics Similar topics» Firmware cho đầu thu SD, HD free như s68, s18,...» Help đầu micsat HD chạy nhầm firmware» Nhờ giúp đỡ về cài lại Firmware cho đầu Openbox» Hướng dẫn cập nhật Firmware mới cho đầu thu DVB-T2» Phần mềm chỉnh sửa firmware của OpenBox S9, S10Permissions in this forum:Bạn không có quyền trả lời bài viết :: Công Nghệ DVB :: Tài Liệu Kỹ Thuật :: Công Nghệ DVB :: Tài Liệu Kỹ ThuậtQuảng Cáo Top posting users this monthmacanhhao datphuongnam Truyền hình Sông Thu bqphuoc danganhnga cuongdaiphuc thanhmeo57 Hothuly thanhqt quoclap223 TextLinkTruyền hình vinasat Vệ tinh Kỹ Thuật Số Truyền hình cáp HTV K+ VTC AVG VTV anten vinasat iptv nss6 openbox hd02 biss thaicom 5 vsat Kênh Đầu thu DVB-T2 Android TV Box HP-Q9 DVB T2/T2-0715 STB NGUYEN AN Truyền Hình Nhật Bản Ngọc Phú IPTV JapanClick Like to Share Free forum | © phpBB | Free forum support | Liên hệ | Report an abuse | Sosblogs.com

markdown:
Tất cả vì sự phát triển của Truyền Hình Vệ Tinh ![]()
Đăng nhập để chia sẻ nhé bạn ^-^
Diễn đàn Truyền Hình Vệ Tinh - Nơi trao đổi, thảo luận các vấn đề về truyền hình kỹ thuật số
![]()
Đôrêmi
canvtv
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Bài gửi Người gửi Thời gian
![]()
![]()
![]()
| |![]()
![]()
![]()
quoclap223 ![]()
| |![]()
![]()
![]()
![]()
| |![]()
![]()
![]()
![]()
| |![]()
![]()
![]()
![]()
| |![]()
![]()
![]()
![]()
| |![]()
![]()
![]()
![]()
| |![]()
![]()
![]()
![]()
| |![]()
![]()
![]()
![]()
| |![]()
![]()
![]()
![]()
| |![]()
![]()
![]()
![]()
| |![]()
![]()
![]()
![]()
| |![]()
![]()
![]()
![]()
| |![]()
![]()
![]()
![]()
| |![]()
![]()
![]()
![]()
| |![]()
![]()
![]()
![]()
![]()
First topic message reminder :
bác nào có các Firmware cho đầu thu SD, HD free như s68, s18,... để nâng cấp qua rs232 hoặc usb chia sẻ cho em và anh em với!
![]()
|Tác giả||Thông điệp|
daihoan1977
Thành viên chính thức
![]()
Tổng số bài gửi : 35
Ngày gia nhập : 10/10/2012
![]()
![]()
![]()
![]()
mình đang dùng đầu thu ngoài ghi VINAT-02HD nhưng xem kênh HD không được, còn khi có bóng đá là kênh bị cắt hết rồi thì xem bình thường, hiện nay mất hết mấy kênh của HTV trước kia vẫn xem được, giờ chỉ còn lại HTV7,9 mà thôi . Ai biết chỉ giúp với !
Thanks trước anh em nhé !
![]()
![]()
- Bóng đá đỉnh cao là sự kiện có bản quyền truyền hình, muốn xem phải trả tiền. Đầu free không đóng phí thuê bao nên bị "Mã hóa $" không xem được là điều hiển nhiên.
- Nhóm kênh HTV1,2,3,4, HTVC đã chuyển sang phát có phí $ lâu rồi, đầu free không xem được đâu.
![]()
![]()
mình vẫn biết nhưng xem bóng đá trên VTV2,3,6 vẫn bị cắt mới bực chứ không lẽ phải dùng đầu lậu 28 kênh mà xem ah
![]()
![]()
mình còn phải xem bằng analog VTV2,3,6 nè. Bác nào,có firmware JPARK HD S20 share cho e với...
| |![]()
![]()
![]()
anh em ở đây ai có fw đầu thu vệ tinh HUMAX HD 02 chạy IC 3106H mã boad JPK-DVB-S2-VER1.6 cho mình xin mình cám ơn nhiều!!!(fw chạy máy nạp rom hoặc chạy USB cũng được)
![]()
![]()
JPARK HD68 JPK-DVB-S2-VER1.6_M3106H_25L16_TT AVL8211LA_AV2012_DUYLONG-ZIN-OK.bin
Hoặc: [You must be
Chạy bằng máy nạp thì đuôi .bin còn chạy bằng USB thì lấy file đuôi .bin đổi thành .abs
| |![]()
![]()
![]()
Cám ơn bạn dtduylong rất nhiều fw của bạn cho chạy rất tốt 1 lần nữa xin cám ơn bạn và xin chúc gia đình được dồi dào sức khõe !!!!
![]()
![]()
các bác có file pantesat hd03 . GX3113B_PANTE_V3.0_2011-09-06 cho em xin . cảm ơn các bác
![]()
![]()
![]()
![]()
buz cho mình YH:truonggiangsdb.Mail:truonggiangsdb@yahoo.com.vn mình sẵn sàng giúp.
![]()
![]()
bác cho tớ hỏi, hiện tại tớ đang dùng đầu thu free của trung quốc VTC HD 02 tớ đang xem được 45 kênh việt nam toàn kênh SD còn kênh HD đầu này thu được nhưng không có xem được, còn lại khóa mã vì có $ chữ này trước các kênh, bác cho tớ hỏi nếu tớ nạp lại FW cho đầu tàu này thì có ảnh hưởng gì không. tớ xin cám ơn bác nhiều
đt: 0974264517 tớ tên hùng
![]()
![]()
![]()
![]()
cho minh phan mem fw lai dum
![]()
![]()
em lần đầu tiên vào diễn đàn, mong các tiền bối giúp đỡ cho em: cách nâng cấp đầu thu vsat s2 hd02 chi tiết được không ạ!
![]()
![]()
Chào các bác.
Có bác nào có bản FW S18 chạy ổn định, cho tôi xin với. tôi có cái đầu S18 cứ updade FW là nó tự động nhảy kênh, không biết nó lỗi gì nữa.
cảm ơn các bác.
![]()
![]()
PS: bác thử fw HD ở đầu topic của bác we_are_one xem.
![]()
![]()
![]()
![]()
bác qua bên codientu.org mình gửi cho
![]()
![]()
bác vào đây lấy nhé:http://codientu.org/threads/noi-trao-doi-kinh-nghiem-dau-thu-kts-chao-ve-tinh-vinasat.6861/page-56
![]()
![]()
Nhưng các bác có nhầm không vậy, đầu của tôi là Superbox S18, tôi mua của chú Cường ở HN, đây là topic mà chú ấy rêu rao sản phẩm của chú ấy.
[You must be
Tôi nghĩ, con này chỉ ra được khoảng hơn 2 năm là nhiều, nhưng nhà sản xuất đã khai tử nó rồi. Tôi dược biết bản FW cuối cùng của nó là ngày 20/12/13, bác nào có bản này cho tôi xin với.
Cảm ơn các bác.
![]()
![]()
bác nào có fimware của đầu Jpark hd s20 cho e xin với ạ... chứ bây giờ bị khóa hết vtv roi
![]()
![]()
![]()
![]()
bac nao co firmware con Vsat HD2. giup minh cai. cam on
![]()
![]()
bác nào có fimware đầu thu pantesat HD-02 cho e với
![]()
![]()
bác nao có firmware của vinasat này cho em xin với.
![]()
![]()
![]()
Mình có đâu vtc hd012
Có thông số như sau
Mã bo
WFCA DVB AV2018 VER1. 0
EMST
M12L2561616A - 6T
AZA1P3331 1319
ALAA
M 3106H
AC828111AB35
AVALINK
AVL6211LA
0001
E muốn up fw cho nó. Bác nào có cho xin
![]()
![]()
## Firmware cho đầu thu SD, HD free như s68, s18,...
![]()
|» |
»
»
»
»
|Quảng Cáo|
![]()
![]()
![]()
![]()
![]()
![]()
![]()
|Top posting users this month|
quoclap223
|TextLink|
|Click Like to Share|

P3P: CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"

Cache-Control: no-cache

Vary: User-Agent