-
21-07-2009, 01:13 PM #1Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Nhờ giải thích giùm mình đoạn code này
Hi all,
Do mình là newbie trong VC nên ko hiểu được đoạn code trích từ bài viết được tham khảo ở http://www.opensc.ws/c-c/5944-hide-registry-hook-regenumvalue.html , đây là đoạn dùng để hook hide registry. Nhờ bạn nào có lòng tốt giải thích chi tiết từng dòng dưới đây cho mình với :
Mã nguồn PHP:void HookAPI(){ DWORD OldProtect, NewProtect = PAGE_EXECUTE_READWRITE; HMODULE hmod = GetModuleHandle("Advapi32.dll"); long pa = (long)GetProcAddress(hmod,"RegEnumValueW"); long pa2 = (long)RegEnumValue2; long dAddr = pa2 - pa - 5; unsigned char *p = (unsigned char *)pa; unsigned char *p2 = (unsigned char *)(&dAddr); VirtualProtect((void *)pa,5,NewProtect,&OldProtect); for (int i=0;i<5;i++) Store[i] = p[i]; p[0] = (unsigned char)0xE9; for (int i=0;i<4;i++) p[i + 1] = p2[i]; VirtualProtect((void *)pa,5,OldProtect,&NewProtect);}
Cám ơn rất nhiều
Thân,View more random threads:
- Cách dùng Visual Studio 2008
- Thay đổi màu chữ trong VC++ for Win 32?
- Nhập - xuất chuỗi theo mô hình 3 lớp
- Xin Hỏi Có Ai Biết Mã Ascii Của Các Ký Tự Tiếng Việt
- [Hỏi] Về Lỗi LNK 2005 và chỉ lệnh Linker /FORCE
- Lỗi không thoát được Visual C++ 6.0
- Thắc mắc về trị trả về của hàm
- Class trong lập trình Visual C++ nghĩa là gì?
- Vẽ Tracker bao quanh 1 hình chữ nhật như thế nào ?
- Không tạo được project win32 console program bằng Visual Studio 2008?
-
21-07-2009, 05:44 PM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Ai giúp mình với
-
22-07-2009, 10:02 AM #3Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Chức năng của hàn VirtualProtect bạn xem trên MSDN sẽ rõ ngay thôi.
Mã:void HookAPI(){ DWORD OldProtect, NewProtect = PAGE_EXECUTE_READWRITE; HMODULE hmod = GetModuleHandle("Advapi32.dll"); long pa = (long)GetProcAddress(hmod,"RegEnumValueW"); long pa2 = (long)RegEnumValue2; long dAddr = pa2 - pa - 5; // tính toán địa chỉ ref unsigned char *p = (unsigned char *)pa; unsigned char *p2 = (unsigned char *)(&dAddr); VirtualProtect((void *)pa,5,NewProtect,&OldProtect); // Chuyển vùng nhớ từ đọc-thực thi sang đọc-ghi-thực thi for (int i=0;i<5;i++) // copy 5 byte trong đoạn code cũ của hàm lưu vào Store Store[i] = p[i]; p[0] = (unsigned char)0xE9; // lệnh nhảy trong hợp ngữ (jmp) có mã máy là 0xe9 for (int i=0;i<4;i++) // copy địa chỉ ref của lệnh nhảy p[i + 1] = p2[i]; VirtualProtect((void *)pa,5,OldProtect,&NewProtect); // set thuộc tính về đọc-thực thi}
-
22-07-2009, 04:09 PM #4Banned
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Hi meoconlongvang, rất cám ơn bạn đã giúp đỡ, nhưng mình vẫn còn 1 số thắc mắc sau :
1/ Địa chỉ ref là địa chỉ gì vậy bạn ? Tại sao lại cần nó ?
2/ Tại sao địa chỉ ref = pa2 - pa - 5 ?
3/ Tại sao cần phải nhảy tới địa chỉ 0xE9 (trong câu lệnh p[0] = (unsigned char)0xE9[IMG]images/smilies/wink.png[/IMG]
1 lần nữa thanx bạn nhìu [IMG]images/smilies/biggrin.png[/IMG]
-
22-07-2009, 04:30 PM #5Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Đây là những kiến thức cơ bản của hợp ngữ, mình chỉ giải thích sơ sơ thôi, muốn hiểu rõ thì bạn phải học hợp ngữ mới được.
1,2> Lệnh nhảy (jmp) có cú pháp là "jmp refaddr", có độ dài 5 byte trong cpu 32 bit, dùng để nhảy từ vị trí đang xét đến một vị trí khác. Địa chỉ ref là một con số kiểu long. Nó là hiệu của vị trí cần nhảy đến và vị trí đang xét. Trừ thêm 5 byte độ dài của lệnh nhảy.
3> Lệnh nhảy đặt ở đầu hàm sẽ chuyển điều khiển tới vị trí khác mà ta mong muốn, hàm gốc sẽ không được chạy.
-
22-07-2009, 05:08 PM #6Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi meoconlongvang
Thanx bạn
-
22-07-2009, 05:26 PM #7Silver member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Đây là kiến thức rất cơ bản của hợp ngữ, bạn học hợp ngữ là sẽ rõ thôi. Bạn không có cơ bản thì biết giải thích thế nào đây. Lệnh nhảy sẽ cộng vị trí đang xét với địa chỉ ref.
target = base + <5 bytes jump code> + ref
ref = target - base - 5
-
22-07-2009, 07:23 PM #8Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Thanx bạn meoconlongvang nhiều, thực ra hùi hãy mình chỉ có ý xin bạn từ khóa để google thui (nếu bạn đọc kỹ bài trước của mình lai sẽ thấy [IMG]images/smilies/biggrin.png[/IMG]) chứ ko phải có ý định kêu bạn giải thích cho mình lun. Tuy nhiên bạn cũng đã rất nhiệt tình giải thích, mình rất biết ơn [IMG]images/smilies/smile.png[/IMG]
Thân
Pallet nhựa Long An đã trở thành một trong những lựa chọn phổ biến cho nhu cầu vận chuyển và lưu trữ hàng hóa trong nhiều ngành công nghiệp. Với đặc tính nhẹ nhàng, chắc chắn và dễ vận chuyển, các...
Thanh lý pallet nhựa Long An giá rẻ