Blog

9 Mar 2017

ການພັດທະນາຊອບແວ: Hook ແມ່ນຫຍັງ?

/
ຈັດພີມມາໂດຍ

ການພັດທະນາຊອບແວ: Hook ແມ່ນຫຍັງ?

ພວກເຮົາຄວນຮູ້ກ່ຽວກັບປະເພດຂອງ Hook ຈໍານວນຫນ້ອຍ.

Hook ແມ່ນຫຍັງ?ໃນການພັດທະນາຊອບແວ, Hooking ແມ່ນຄວາມຄິດທີ່ອະນຸຍາດໃຫ້ປ່ຽນແປງການປະພຶດຂອງໂຄງການ. ລະຫັດຄວາມເປັນໄປໄດ້ສະເຫນີໃຫ້ທ່ານປ່ຽນແປງການປະຕິບັດທໍາອິດຂອງສິ່ງໃດຫນຶ່ງໂດຍບໍ່ມີການປ່ຽນແປງລະຫັດຂອງທ່ານໃນລະດັບປຽບທຽບ. ນີ້ແມ່ນສໍາເລັດໂດຍການ overwriting ກົນລະຍຸດ hook.

ການນໍາໃຊ້ປະເພດນີ້ແມ່ນເປັນປະໂຫຍດທີ່ສຸດໃນການເພີ່ມປະຕິບັດຫນ້າໃຫມ່ໃນການນໍາໃຊ້, ໂດຍສະເພາະການສົ່ງເສີມການຕິດຕໍ່ລະຫວ່າງຂັ້ນຕອນແລະຂໍ້ຄວາມຂອງລະບົບ. Hooks ມີແນວໂນ້ມທີ່ຈະຫຼຸດຜ່ອນການປະຕິບັດລະບົບໂດຍການຂະຫຍາຍການໂຫຼດການກະກຽມທີ່ລະບົບຕ້ອງປະຕິບັດສໍາລັບແຕ່ລະຂໍ້ຄວາມ. ມັນຄວນຈະຖືກແນະນໍາເມື່ອມີຄວາມຈໍາເປັນແລະຖືກຍົກຍ້າຍໃນໂອກາດທີ່ສຸດ.

ການກະຕຸ້ນເຕືອນວ່າທ່ານກໍາລັງໃຊ້ລະບົບການຄຸ້ມຄອງລູກຄ້າ (CMS) ຈາກຜູ້ພາຍນອກແລະທ່ານອາດຈະຕ້ອງການຜູ້ບໍລິຫານລະດັບສູງທີ່ຈະໄດ້ຮັບການເຕືອນໂດຍອີເມລ໌ທຸກຄັ້ງທີ່ກະທູ້ອື່ນໄດ້ຖືກແຈກຢາຍແລະວ່າການປະພຶດນີ້ບໍ່ແມ່ນອຸປະກອນທີ່ຜິດພາດ. ຈະມີເສັ້ນທາງກ້າວຫນ້າຕໍ່ໄປ:

ການປ່ຽນແປງລະຫັດແຫຼ່ງ CMS ບໍ່ແມ່ນຄວາມຄິດທີ່ສະຫມາດ, ຫຼັງຈາກທັງຫມົດໃນການຟື້ນຟູຕໍ່ໄປນີ້ຂອງອຸປະກອນທ່ານຈະປະເຊີນຫນ້າກັບຄວາມຫຍຸ້ງຍາກໃນການສູນເສຍການປ່ຽນແປງຂອງທ່ານຫຼືບໍ່ມີຄວາມສາມາດໃນການສືບຕໍ່ທຸກສິ່ງທຸກຢ່າງ.

  • ເຮັດໃຫ້ CMS ຂອງທ່ານເອງເປັນຄວາມຄິດທີ່ຮ້າຍແຮງອີກ, ທຸກສິ່ງທີ່ພິຈາລະນາ, ທ່ານບໍ່ມີພະລັງງານພຽງພໍຫຼືມີຊັບສິນພຽງພໍທີ່ຈະເຮັດສິ່ງໃຫມ່ຫຼືເຖິງແມ່ນວ່າຈະເກັບສິ່ງທີ່ສ້າງ;
  • ຄົ້ນຫາຄວາມເປັນໄປໄດ້ຂອງການໃຊ້ hook, ເຊິ່ງແມ່ນ, ກວດສອບວ່າ CMS ເບິ່ງໃນໂມດູນພາຍນອກຫຼືໂມດູນສໍາລັບອົງປະກອບຂອງຊື່ສະເຫນີທີ່ຈະຖືກປະຕິບັດຢູ່ໃນນາທີທີ່ຢາກ, ສໍາລັບສະຖານະການນີ້, ການກະຈາຍຂໍ້ໃຫມ່.
  • ສ່ວນຫຼຸດລົງໄປສູ່ໂລກຂອງການໃຊ້ hooks fluctuates ໂດຍທົ່ວໄປຈາກອຸປະກອນກັບເຄື່ອງມື. ຫຼັກການພື້ນຖານທີ່ເຫມາະສົມຂອງ hooks ບໍ່ແມ່ນການປ່ຽນແປງລະຫັດທໍາອິດ. ໃນປື້ມຄູ່ມືການປະຕິບັດທີ່ຍິ່ງໃຫຍ່ທັງຫມົດຂອງອຸປະກອນແຫຼ່ງເປີດທັງຫມົດທີ່ມີການປັບປຸງແບບຄົງທີ່ mantra ທີ່ rehashes ຕົວມັນເອງບໍ່ໄດ້ປ່ຽນສູນ. ເຖິງແມ່ນວ່າການເຮັດໃຫ້ການຟື້ນຟູຄືນໃຫມ່, ບຸກຄົນໃດຫນຶ່ງທີ່ມາຕໍ່ມາຈະເຮັດແນວໃດຈະບໍ່ຄິດກ່ຽວກັບການປ່ຽນແປງ, ແລະຜູ້ທີ່ເວົ້າເຖິງມັນບໍ່ແມ່ນເຄື່ອງອຸປະກອນ.

ການຂະຫຍາຍຕົວແມ່ນຈຸດປະສົງທີ່ຕ້ອງການອີກຫນຶ່ງໃນການນໍາໃຊ້ຍຸດທະສາດສຽງທີ່ອະນຸຍາດໃຫ້ແອັບພລິເຄຊັນເພີ້ມການໂຕ້ຕອບຄົງທີ່ຂອງມັນ. ຍຸດທະສາດ Hook decouple ການໂຕ້ຕອບທີ່ຫມັ້ນຄົງແລະການດໍາເນີນການຂອງຊ່ອງຫຼາກຫຼາຍຊະນິດທີ່ສາມາດອອກມາຈາກ instantiation ຂອງຄໍາຮ້ອງສະຫມັກສໍາລັບການຕັ້ງຄ່າສະເພາະໃດຫນຶ່ງ.

Innovative Technology Solutions ສະຫນອງການຝຶກອົບຮົມການພັດທະນາຊອບແວໃນ Gurgaon, Delhi NCR ໃນປະເທດອິນເດຍ.

Hooks As Design Patterns

ມັນຫນ້າສົນໃຈທີ່ຈະສັງເກດວ່າການອອກແບບໂຄງການຈໍານວນຫລາຍ (ທັງຫມົດ) ເປັນຕົວຢ່າງສໍາລັບຕົວຢ່າງກ່ຽວກັບສຽງ. ພວກເຂົາເວົ້າເຖິງວິທີການປະຕິບັດລະບົບຍ່ອຍຂອງບັນຫາຕ່າງໆ. ບາງຄົນແມ່ນຂຶ້ນກັບກົດລະບຽບຂອງການພັດທະນາທີ່ແຕກຕ່າງກັນ: ສະຫຼຸບ, ໂຮງງານ, ຜູ້ກໍ່ສ້າງ, ຄໍາສັ່ງ, ນັກແປ, ນັກສັງເກດການ, Prototype, ລັດແລະກົນລະຍຸດ.

ອື່ນໆໃນຕົວຢ່າງທັງສອງຂອງການພັດທະນາ unification ແລະການແບ່ງປັນ: ແມ່ແບບແລະ Bridge.

Semantics ຖືກ communicated ໂດຍທົ່ວໄປໃນຊື່ເຕັກນິກການ hook (ຕົວຢ່າງ, ໃນຄໍາສັ່ງ, ຍຸດທະສາດທີ່ເອີ້ນວ່າ execute ()).

 

Virtual Hooking Table Method

ການພັດທະນາຊໍແວ - ເຕັກນິກ Hook-Point 1Virtual ແມ່ນຖືກນໍາມາໃຊ້ໃນເສັ້ນທາງທີ່ແຕກຕ່າງຈາກກົນລະຍຸດຄົງທີ່, ແຕ່ເນື່ອງຈາກເຕັກນິກ virtual ສາມາດປ່ຽນແປງ, compiler ບໍ່ຮູ້ທີ່ຢູ່ຂອງຄວາມສາມາດ virtual ເສພາະໃນເວລາທີ່ທ່ານໂທຫາມັນໃນລະຫັດຂອງທ່ານ. ດັ່ງນັ້ນ, compiler ດັ່ງນັ້ນ, ການປະກອບ Virtual Method Table (VMT), ເຊິ່ງເຮັດໃຫ້ວິທີການສອບຖາມທີ່ຢູ່ໃນສະຖານທີ່ທີ່ມີຄວາມສາມາດໃນການ runtime. ທຸກກົນລະຍຸດເສມືນແບບດຽວຈະຖືກເປີດໃຊ້ງານໃນໄລຍະເວລາຜ່ານ VMT. VMT ຂອງຄໍາຖາມປະກອບມີທັງຫມົດຍຸດທະສາດ virtual ສໍາລັບ precursors ຂອງຕົນ, ແລະນອກຈາກນັ້ນມັນ proclaims. ດັ່ງນັ້ນເທກນິກເສມືນໃຊ້ຄວາມຈໍາຫລາຍກວ່າກົນລະຍຸດຂອງອົງປະກອບ, ເຖິງວ່າຈະມີຄວາມຈິງທີ່ວ່າພວກເຂົາຈະເລັ່ງໄວ.

ນັບຕັ້ງແຕ່ VMT ເປັນຕາຕະລາງທີ່ມີຈຸດຊີ້ນໍາທີ່ມີທີ່ຢູ່ໃນຫນ່ວຍຄວາມຈໍາສໍາລັບຄວາມສາມາດໃນການໂຕ້ຕອບ, ສິ່ງທີ່ຄວນເຮັດແມ່ນການປ່ຽນທີ່ຢູ່ຫນ່ວຍຄວາມຈໍາຄັ້ງທໍາອິດດ້ວຍທີ່ຢູ່ຂອງການເຮັດວຽກທີ່ຖືກຕ້ອງຕາມກົດຫມາຍ. ຕາມເສັ້ນເຫຼົ່ານີ້, ເຕັກນິກທີ່ເອີ້ນວ່າຈະຖືກ overwrite, ແລະການປະຕິບັດຄວາມຕ້ອງການໃຫມ່ຂອງຄວາມສາມາດຈະຖືກປະຕິບັດ.

 

Hooking API

ການພັດທະນາຊໍແວ - ຂັ້ນຕອນ API Hook-Point 2The Hooking ແມ່ນຫຍັງແທ້ໆຊ່ວຍໃຫ້ທ່ານສາມາດປັບປຸງອົງປະກອບຂອງລະບົບການເຮັດວຽກໄດ້. ດ້ວຍຄວາມສາມາດໃນການຈັບເອົາຄ່າໃຊ້ຈ່າຍດັ່ງກ່າວ, ທ່ານສາມາດປ່ຽນພາລາມິເຕີຂອງພວກເຂົາໄດ້ໂດຍການປ່ຽນແປງກິດຈະກໍາທີ່ຈະປະຕິບັດໃນເບື້ອງຕົ້ນ.

ຕົວຢ່າງເຊັ່ນ, ການຍົກເລີກການບັນທຶກຂໍ້ມູນສະເພາະ, ຮັກສາແອັບພລິເຄຊັນຈາກການແລ່ນ, ແລະຕ້ອງການການຢືນຢັນຂອງລູກຄ້າທີ່ຈະເກັບຂີ້ເຫຍື້ອໃຫ້ກັບວົງ, ແລະອື່ນໆ.

ແທ້ຈິງແລ້ວ, ການຕັດສິນໃຈຕັດໃຫຍ່ທີ່ສຸດແມ່ນຢູ່ໃນຂົງເຂດການຮັກສາຄວາມປອດໄພ, ຕົວຢ່າງ, antivirus ແລະ antispyware. ເປັນສິ່ງທີ່ອາດຈະເປັນ, ມີສະຖານະການໃນການພັດທະນາປະກະຕິຂອງພວກເຮົາທີ່ Hooking API, ສາມາດເປັນທາງອອກຫລັກ.

ການໂຕ້ຕອບການຂຽນໂປລແກລມ Hooking, ໃນກໍລະນີພິເສດຂອງພວກເຮົາ, ຫມາຍເຖິງການໄດ້ຮັບ API ຈາກລະບົບປະຕິບັດການ, ຫຼືຈາກ DLL ໃດໆແລະປ່ຽນການປະຕິບັດແບບທົ່ວໄປຂອງມັນໄປບ່ອນອື່ນ, ທັງຫມົດທີ່ຖືກຕ້ອງ, ກັບຄວາມສາມາດອື່ນ. ມີສອງວິທີການພື້ນຖານ:

EAT ແລະ IAT: ທັງຫມົດ EXE / DLL ມີ API ນໍາເຂົ້າແລະຕາລາງການແລກປ່ຽນ. ຕາຕະລາງເຫຼົ່ານີ້ມີຈຸດຊີ້ນໍາທີ່ສະແດງຈຸດເຂົ້າ API. ໂດຍການປ່ຽນແປງຈຸດຊີ້ນໍາເຫຼົ່ານີ້, ເຮັດໃຫ້ພວກມັນຊີ້ບອກວ່າພວກເຮົາໂທຫາພວກເຮົາ, ພວກເຮົາມີສຽງ. ເປັນສິ່ງທີ່ອາດຈະ, ຖ້າ EXE / DLL ນີ້ບໍ່ນໍາເຂົ້າ API, ກົນລະຍຸດນີ້ຈະບໍ່ເຮັດວຽກ;

ການຂຽນຂໍ້ມູນແບບເລີ້ມຕົ້ນຢ່າງກົງໄປກົງມາ: ດັ່ງທີ່ໄດ້ກ່າວໄວ້ກ່ອນຫນ້ານີ້, ໃນກໍລະນີທີ່ມັນເປັນໄປໄດ້ທີ່ຈະເພີ່ມການໂທກັບການເອີ້ນຄືນຂອງພວກເຮົາຕໍ່ກັບການເລີ່ມຕົ້ນຂອງລະຫັດ API, ພວກເຮົາຈະ "hook it", ເຮັດໃຫ້ຄວາມສາມາດຂອງພວກເຮົາດໍາເນີນໄປໃນທຸກໆຈຸດທີ່ API ໄດ້ຖືກເອີ້ນ. ເປັນສິ່ງທີ່ເປັນໄປໄດ້, ມີບັນຫາ: ຖ້າຫາກວ່າລະຫັດຂອງເຮົາຖືກຈັດການ, ພວກເຮົາຈໍາເປັນຕ້ອງເອີ້ນ API ຄັ້ງທໍາອິດ, ພວກເຮົາຈະກັບຄືນມາໃນການເອີ້ນຄືນຂອງພວກເຮົາ, ແລະນ້ໍາຖ້ວມຈະຖືກສ້າງຂຶ້ນ. ການຈັດການຫນຶ່ງແມ່ນແກ້ໄຂ hook ທີ່ມີຄວາມສາມາດໃນການໂທຫາ API, ລອງໃຫມ່ເມື່ອມັນຖືກປະຕິບັດ. ເປັນສິ່ງທີ່ອາດຈະເປັນ, ຢູ່ທ່າມກາງພື້ນທີ່ນີ້, ການໂທ API ຈໍານວນຫນ້ອຍກໍ່ສາມາດເຮັດໄດ້ແລະຈະບໍ່ປະຕິບັດການເອີ້ນຄືນຂອງພວກເຮົາ;

Inline Hook ແມ່ນຈຸດທີ່ພວກເຮົາໄດ້ຮັບຄໍາແນະນໍາຫລັກຂອງຄວາມສາມາດ, ແລະພວກເຮົາຄ້າສໍາລັບ Jump, Push ຫຼືໂທຫາຄວາມສາມາດຂອງພວກເຮົາ.

ອ່ານກົດລະບຽບ: ລະບົບການເຮັດວຽກຂອງ Windows ນອກຈາກນັ້ນກໍ່ຍືນຍັນ API hooking. ພວກເຮົາຄວນຮູ້ວິທີການເຮັດວຽກຂອງ Windows API?

 

Occasion Hooking

ການພັດທະນາຊອບແວ - ເຕັກນິກການ hook Hook - Point 3As ແມ່ນຫຍັງຄືການໂຕ້ຕອບທີ່ຫມັ້ນຄົງແລະການດໍາເນີນການພື້ນທີ່ຫຼາກຫຼາຍຊະນິດທີ່ສາມາດເກີດຈາກການຍົກຕົວຢ່າງຂອງຄໍາຮ້ອງສະຫມັກສໍາລັບການຕັ້ງຄ່າສະເພາະໃດຫນຶ່ງເກີດຂື້ນໃນການຄວບຄຸມ. ຈຸດປະສົງ handlers ໂອກາດປັບປຸງການກະກຽມຂັ້ນຕອນ. ໃນຕອນທ້າຍຂອງມື້, ໃນເວລາທີ່ມີໂອກາດເກີດຂື້ນ, ຜູ້ຈັດການຕອບສະຫນອງຍຸດທະສາດການຈັບຄູ່ກັບຍຸດທະສາດທີ່ມີການລົງທະບຽນກ່ອນທີ່ຈະດໍາເນີນກິດຈະກໍາຕ່າງໆ. ກໍລະນີຂອງໂອກາດ: ຂໍ້ຄວາມປ່ອງຢ້ຽມ, ມັດໄວ້ທີ່ທ່າເຮືອຈາກການຕອບສະຫນອງພອດ.

 

ພາຍໃນ IAT Hooking

ການພັດທະນາຊໍແວ - ຂະບວນການ Hook-Point 4Each ໃນ Windows ມີຕາລາງທີ່ເອີ້ນວ່າຕາຕະລາງການນໍາເຂົ້າ (IAT) ທີ່ເກັບຮັກສາຂໍ້ມູນຊີ້ໄປຫາຄວາມສາມາດທີ່ສົ່ງອອກໂດຍ DLLs ຂອງແຕ່ລະຂັ້ນຕອນ. ຕາຕະລາງນີ້ແມ່ນມີປະຊາກອນທີ່ມີປະສິດທິພາບຢ່າງຕໍ່ເນື່ອງດ້ວຍທີ່ຢູ່ຂອງອົງປະກອບຂອງ DLLs ໃນເວລາທີ່ໃຊ້ງານ.

ການນໍາໃຊ້ຄວາມສາມາດໂດຍສະເພາະ, ພວກເຮົາສາມາດເຮັດໃຫ້ຕາຕະລາງ IAT ສາມາດຂຽນໄດ້, ເປັນ conceivable ທີ່ຈະປ່ຽນທີ່ຢູ່ຂອງຕົນໂດຍທີ່ຢູ່ຂອງຄວາມສາມາດຂອງລູກຄ້າ, ການສະຫຼຸບຕາຕະລາງເປັນພຽງແຕ່ຫຼັງຈາກການປ່ຽນແປງນີ້. ໃນເວລາທີ່ຂະບວນການພະຍາຍາມໂທຫາຄວາມອາດສາມາດ, ທີ່ຢູ່ຂອງມັນແມ່ນຢູ່ໃນຕາຕະລາງ IAT, ແລະຕົວຊີ້ນໍາຖືກສົ່ງຄືນ. ໃນຖານະທີ່ຕາຕະລາງ IAT ໄດ້ຖືກປ່ຽນແປງ, ຄວາມສາມາດຂອງລູກຄ້າໄດ້ຖືກສ້າງຕັ້ງຂຶ້ນຈາກຄວາມສາມາດທໍາອິດແລະລະຫັດທີ່ຖືກນໍາໃຊ້ເຂົ້າໃນຂັ້ນຕອນໄດ້ຮັບ.

 

Netfilter Hook

ການພັດທະນາຊໍແວ - Hook-Point 5Netfilter ເປັນລະບົບຍ່ອຍ Linux ຢ່າງເປັນປະໂຫຍດກວ່າ 2.4. ມັນແມ່ນຮັບຜິດຊອບຂອງມັດແຍກ, NAT, Firewall, ການໂອນ, ແລະອື່ນໆ. Netfilter ແມ່ນ extensible exceptionally, ແລະເອກະສານຂອງຕົນແມ່ນສໍາເລັດ. ມັນເຮັດໃຫ້ຄວາມເປັນໄປໄດ້ຂອງການນໍາໃຊ້ Hooks ໃນລະຫັດເຄີເນນ, ເຮັດໃຫ້ການນໍາໃຊ້ຂອງມັນມີຄວາມຍືດຫຍຸ່ນແລະໄດ້ຮັບໂດຍທົ່ວໄປໂດຍກຸ່ມ. ເຫຼົ່ານີ້ Hooks ອອກຈາກຜົນໄດ້ຮັບ conceivable ຈໍານວນຫນ້ອຍແລະສາມາດຕື່ມຂໍ້ມູນເປັນ triggers ສໍາລັບບາງຄັ້ງສະເພາະ.

 

ສະຫຼຸບ:

ການພັດທະນາຊອບແວ - ແມ່ນຫຍັງຄື Hook-conclusion ລະບົບການເຊື່ອມໂຍງແມ່ນມີປະສິດທິຜົນແລະເປີດກວ້າງຂອບເຂດຜົນໄດ້ຮັບສໍາລັບນັກວິສະວະກອນຊອບແວ, ແຕ່ມັນຄວນຈະຖືກນໍາໃຊ້ດ້ວຍຄວາມລະມັດລະວັງຍ້ອນວ່າພວກເຂົາມີຄວາມຊັບຊ້ອນຫຼາຍຂຶ້ນໃນລະບົບການປ່ຽນແປງ ດໍາເນີນການ OS, ຄໍາຮ້ອງສະຫມັກຫຼືພາກສ່ວນຊອບແວອື່ນໆ, ເຮັດໃຫ້ມັນຍາກທີ່ຈະເຂົ້າໃຈເຫດຜົນຂອງຊອບແວ. ນອກຈາກນັ້ນ, ຕາມຂໍ້ກໍານົດທີ່ໄດ້ກໍານົດໄວ້ໃນບົດຄວາມນີ້, ການນໍາໃຊ້ລະບົບເຫຼົ່ານີ້ໂດຍບໍ່ມີຮູບແບບອາດເຮັດໃຫ້ການປະຕິບັດຄໍາຮ້ອງສະຫມັກຫຼຸດລົງ.

ອອກຈາກ Reply ເປັນ

GTranslate Please upgrade your plan for SSL support!
GTranslate Your license is inactive or expired, please subscribe again!