កំណត់ហេតុផ្សេងៗ

9 មីនា 2017

ការអភិវឌ្ឍផ្នែកទន់: ហុកជាអ្វី?

ការអភិវឌ្ឍផ្នែកទន់: ហុកជាអ្វី?

យើងគួរដឹងអំពីចំនួនតិចតួចនៃ Hook ។

តើ Hook ជាអ្វី?នៅក្នុងការអភិវឌ្ឍន៍កម្មវិធី Hooking គឺជាគំនិតមួយដែលអនុញ្ញាតឱ្យមានការផ្លាស់ប្តូរការប្រព្រឹត្តិរបស់កម្មវិធី។ កូដដែលអាចធ្វើបានផ្តល់ឱ្យអ្នកផ្លាស់ប្តូរការប្រព្រឹត្ដលើកដំបូងនៃអ្វីមួយដោយគ្មានការផ្លាស់ប្តូរកូដរបស់អ្នកថ្នាក់ប្រៀបធៀប។ នេះត្រូវបានបញ្ចប់ដោយការសរសេរជាន់លើយុទ្ធសាស្ត្រទំពក់។

ប្រភេទនៃការប្រើប្រាស់នេះគឺមានអត្ថប្រយោជន៍ខ្លាំងណាស់នៅលើគណនីនៃការបន្ថែមមុខងារថ្មីទៅកម្មវិធីដែលបន្ថែមការលើកទឹកចិត្តការឆ្លើយឆ្លងរវាងនីតិវិធីជំនួសនិងសារនៃប្រព័ន្ធ។ Hook មាននិន្នាការកាត់បន្ថយការប្រតិបត្តិប្រព័ន្ធដោយពង្រីកការផ្ទុកដែលប្រព័ន្ធត្រូវការដើម្បីអនុវត្តសម្រាប់សារនីមួយៗ។ វាគួរតែត្រូវបានណែនាំនៅពេលដែលត្រូវបានទាមទារនិងជម្លៀសនៅឱកាសដំបូងបំផុត។

ចូរគិតថាអ្នកកំពុងប្រើប្រព័ន្ធគ្រប់គ្រងអតិថិជន (CMS) ពីអ្នកខាងក្រៅម្នាក់ហើយអ្នកប្រហែលជាចង់អោយនាយកប្រតិបត្តិជាន់ខ្ពស់ទទួលបានការប្រុងប្រយ័ត្នតាមរយៈអ៊ីម៉េលរាល់ពេលប្រកាសមួយផ្សេងទៀតត្រូវបានចែកចាយហើយថាការប្រតិបត្តិនេះមិនមែនជាឧបករណ៍លំនាំដើមទេ។ វានឹងមានប្តីប្រពន្ធមួយឆ្ពោះទៅមុខ:

ការផ្លាស់ប្តូរកូដប្រភព CMS មិនមែនជាគំនិតដ៏ឆ្លាតវៃនោះទេបន្ទាប់ពីអ្នកទាំងអស់គ្នានៅក្នុងឧបករណ៍ថ្មីខាងក្រោមនេះអ្នកនឹងប្រឈមមុខនឹងការលំបាកក្នុងការបាត់បង់ការផ្លាស់ប្តូររបស់អ្នកឬមិនមានលទ្ធភាពបន្តអ្វីគ្រប់យ៉ាងដែលបានធ្វើឱ្យស្រស់ឡើងវិញ។

  • ធ្វើឱ្យ CMS របស់អ្នកផ្ទាល់គឺជាគំនិតដ៏គួរឱ្យភ័យខ្លាចមួយផ្សេងទៀតអ្វីគ្រប់យ៉ាងដែលបានចាត់ទុកអ្នកមិនមានថាមពលគ្រប់គ្រាន់ឬទ្រព្យសម្បត្តិគ្រប់គ្រាន់ដើម្បីធ្វើឱ្យអ្វីថ្មីឬសូម្បីតែរក្សាអ្វីដែលត្រូវប្រឌិត;
  • ស្វែងយល់ពីលទ្ធភាពប្រើប្រាស់ទំពក់ដែលត្រូវពិនិត្យប្រសិនបើ CMS មើលទៅខាងក្រៅម៉ូឌុលឬម៉ូឌុលសម្រាប់ធាតុនៃឈ្មោះដែលបានផ្តល់ឱ្យដែលត្រូវបានប្រតិបត្តិនៅនាទីដែលប្រាថ្នាសម្រាប់ស្ថានភាពនេះការបែងចែកប្រកាសថ្មី។
  • ផ្នែកមួយនៃការប្រើ hooks ប្រែប្រួលជាទូទៅពីឧបករណ៍មួយទៅឧបករណ៍។ គោលការណ៍អំណោយផលនៃទំពក់គឺមិនត្រូវផ្លាស់ប្តូរលេខកូដដំបូងទេ។ នៅក្នុងសៀវភៅដៃការអនុវត្តដ៏អស្ចារ្យទាំងអស់នៃឧបករណ៍ប្រភពកូដបើកចំហទាំងអស់ដែលបានធ្វើឱ្យទាន់សម័យជានិច្ចអំពីព្រះពុទ្ធដែល rehashes ដោយខ្លួនវាមិនផ្លាស់ប្តូរមជ្ឈមណ្ឌល។ ទោះបីជាការបង្កើតឡើងវិញមិនអាចស្រមៃបានក៏ដោយក៏បុគ្គលណាម្នាក់ដែលមកធ្វើការថែរក្សានឹងមិនគិតអំពីការផ្លាស់ប្តូរនោះទេហើយអ្នកដែលខ្វះការពិភាក្សាវាគឺជាអ្នកមិនមែនជាឧបករណ៍នោះទេ។

ភាពអាចពង្រីកបានគឺជាទស្សនៈមួយទៀតដែលអ្នកចូលចិត្តប្រើប្រាស់វិធីសាស្រ្ត hook ដែលអនុញ្ញាតឱ្យកម្មវិធីបន្ថែមចំណុចប្រទាក់ដែលមានស្ថិរភាពរបស់វា។ យុទ្ធសាស្រ្ត Hook decouple ចំណុចប្រទាក់ដែលមានស្ថេរភាពនិងការប្រព្រឹត្តនៃចន្លោះប្រហោងដែលអាចផុសចេញពីការបន្ទាន់សម័យនៃកម្មវិធីសម្រាប់ការកំណត់ជាក់លាក់មួយ។

ដំណោះស្រាយបចេ្ចកវិទ្យាថ្មីៗ ផ្តល់ជូននូវវគ្គបណ្តុះបណ្តាលផ្នែកអភិវឌ្ឍន៍កម្មវិធីនៅហ្គ្រូហ្គោននិង Delhi NCR នៅក្នុងប្រទេសឥណ្ឌា។

Hooks ជាទំរង់រចនា

វាគួរឱ្យចាប់អារម្មណ៍ក្នុងការកត់សម្គាល់ថាការរចនាតាមគំរូជាច្រើន (ឧទាហរណ៏ទាំងអស់) គឺជាឧទាហរណ៍ន័យធៀបសម្រាប់ទំពក់។ ពួកគេនិយាយអំពីរបៀបអនុវត្ដប្រព័ន្ធរងនៃតំបន់ដែលមានបញ្ហា។ អ្នកខ្លះពឹងផ្អែកទៅលើក្បួនខ្នាតនៃការអភិវឌ្ឈន៍របស់ក្រុម: សង្ខេបរោងចក្រអ្នកបង្កើតអ្នកបញ្ជាការបកប្រែអ្នកសង្កេតការណ៍គំរូដើមរដ្ឋនិងយុទ្ធសាស្ត្រ។

អ្នកផ្សេងទៀតនៅក្នុងឧទាហរណ៍ទាំងពីរនៃការបង្រួបបង្រួមនិងការអភិវឌ្ឍភាគថាស: វិធីគំរូនិងស្ពាន។

សម្មតិកម្មត្រូវបានទាក់ទងជាទូទៅក្នុងឈ្មោះបច្ចេកទេសទំពក់ (ឧទាហរណ៍នៅក្នុងពាក្យបញ្ជាយុទ្ធសាស្ត្រត្រូវបានគេហៅថាប្រតិបត្តិ ()) ។

តារាងវិធីសាស្រ្តនិម្មិត Hooking

ការអភិវឌ្ឍន៍ផ្នែកសូហ្វវែ - បច្ចេកទេស Hook - Point 1Virtual គឺត្រូវបាននាំមកក្នុងផ្លូវដែលមិនអាចផ្លាស់ប្តូរបានពីយុទ្ធសាស្រ្តឋិតិវន្តប៉ុន្តែដោយសារបច្ចេកទេសនិម្មិតអាចត្រូវបានផ្លាស់ប្តូរអ្នកចងក្រងមិនស្គាល់អាសយដ្ឋាននៃសមត្ថភាពនិម្មិតជាក់លាក់នៅពេលអ្នកហៅវានៅក្នុងកូដរបស់អ្នក។ កម្មវិធីចងក្រងនេះនឹងដំឡើង Virtual Method Table (VMT) ដែលផ្តល់នូវវិធីដើម្បីសួរទៅកាន់អាសយដ្ឋានសមត្ថភាពក្នុងពេលរត់។ គ្រប់យុទ្ធសាស្រ្តនិម្មិតតែមួយត្រូវបានធ្វើឱ្យសកម្មនៅពេលរត់តាមរយៈ VMT ។ VMT នៃសំណួរមួយមានទាំងអស់យុទ្ធសាស្រ្តនិម្មិតសម្រាប់បុព្វហេតុរបស់ខ្លួននិងលើសពីនេះទៀតដែលវាបានប្រកាស។ ដូច្នេះបច្ចេកទេសនិម្មិតប្រើប្រាស់ការចងចាំច្រើនជាងយុទ្ធសាស្រ្តធាតុផ្សំទោះបីជាការពិតដែលថាពួកគេដំណើរការលឿន។

ចាប់តាំងពី VMT ជាតារាងមួយដែលមានសញ្ញាដែលមានអាសយដ្ឋានសតិសម្រាប់សមត្ថភាពចំណុចប្រទាក់តើអ្វីដែលគួរធ្វើគឺត្រូវជំនួសអាសយដ្ឋានអនុស្សាវរីយ៍ទីមួយដោយមានអាសយដ្ឋាននៃការងារដែលមានលក្ខណៈស្របច្បាប់។ នៅតាមបន្ទាត់ទាំងនេះបច្ចេកទេសដែលគេហៅថានឹងត្រូវបានសរសេរជាន់លើហើយការប្រព្រឹត្តិល្មមនឹងត្រូវបានអនុវត្ត។

Hooking API

ការអភិវឌ្ឍន៍ផ្នែកទន់ - បែបបទ Hook - Point 2The Hooking API ពិតជាអនុញ្ញាតឱ្យអ្នកធ្វើការកែច្នៃធាតុផ្សំនៃប្រព័ន្ធការងារ។ ជាមួយនឹងសមត្ថភាពក្នុងការចាប់យកការចោទប្រកាន់បែបនេះអ្នកអាចផ្លាស់ប្តូរប៉ារ៉ាម៉ែត្ររបស់ពួកគេដោយការផ្លាស់ប្តូរសកម្មភាពដែលនឹងត្រូវបានអនុវត្តដំបូង។

ជាឧទាហរណ៍វាអាចលុបចោលនូវការកត់ត្រាជាក់លាក់មួយទុកកម្មវិធីមិនដំណើរការហើយទាមទារការអះអាងពីអតិថិជនដើម្បីទុកប័ណ្ណសារទៅរង្វង់។ ល។

ជាការពិតការសម្រេចចិត្តកាត់បន្ថយធំជាងគេបំផុតគឺនៅក្នុងតំបន់សុវត្ថិភាពដូចជាកម្មវិធីកំចាត់មេរោគនិងប្រឆាំងមេរោគ។ ដូចដែលវាអាចមានមានកាលៈទេសៈនៅក្នុងការអភិវឌ្ឍន៍ធម្មតារបស់យើងដែល API Hooking អាចជាផ្លូវសំខាន់។

ចំណុចប្រទាក់កម្មវិធី Hooking នៅក្នុងកាលៈទេសៈជាក់លាក់របស់យើងមានន័យថាការទទួលបាន API ពីប្រព័ន្ធប្រតិបត្តិការឬពី DLL ណាមួយហើយផ្លាស់ប្តូរការប្រតិបត្តិធម្មតារបស់វាទៅកន្លែងផ្សេងទៀតទាំងអស់កាន់តែច្បាស់ទៅនឹងសមត្ថភាពផ្សេងទៀត។ មានវិធីពីរយ៉ាងមូលដ្ឋានគឺ:

EAT និង IAT: EXE / DLL ទាំងអស់មាន API សម្រាប់នាំចូលនិងតារាងតម្លៃ។ តារាងទាំងនេះមានចំណុចភ្ជាប់ដែលបង្ហាញពីចំណុចចូល API ។ ដោយការផ្លាស់ប្តូរចំនុចទាំងនេះ, ធ្វើឱ្យវាបង្ហាញការហៅរបស់យើង, យើងមាន hook មួយ។ ត្រូវបានថាដូចជាវាអាច, ប្រសិនបើ EXE / DLL នេះមិននាំចូលរបស់ API, យុទ្ធសាស្រ្តនេះនឹងមិនដំណើរការ;

ការសរសេរកូដដោយត្រង់ត្រង់ថា: ដូចដែលបានកត់សម្គាល់ជាមុនក្នុងករណីដែលវាមានសារប្រយោជន៍ក្នុងការបន្ថែមការហៅទៅការហៅរបស់យើងឆ្ពោះទៅរកការចាប់ផ្តើមនៃកូដ API យើងអាច "hook it" ធ្វើឱ្យសមត្ថភាពរបស់យើងដំណើរការគ្រប់ពេលដែល API ត្រូវបានគេហៅ។ វាជាបញ្ហាដែលអាចកើតមានឡើងប្រសិនបើមានកូដរបស់យើងត្រូវបានដោះស្រាយយើងត្រូវហៅ API ដំបូងយើងនឹងត្រលប់មកវិញនៅលើការហៅត្រលប់មកវិញហើយនឹងបង្កើតទឹកជំនន់។ ការរៀបចំមួយត្រូវបានជួសជុល hook ដើម្បីមានសមត្ថភាពក្នុងការហៅ API បន្ទាប់មកព្យាយាមវាឡើងវិញនៅពេលវាត្រូវបានប្រតិបត្តិ។ ត្រូវបានថាវាប្រហែលជានៅចំកណ្តាលកណ្តាលនេះការហៅ API មួយចំនួនអាចត្រូវបានធ្វើឡើងហើយនឹងមិនប្រតិបត្តិ callback របស់យើង;

Inline Hook គឺជាចំណុចដែលយើងទទួលបានគោលការណ៍ណែនាំដ៏សំខាន់នៃសមត្ថភាពហើយយើងធ្វើពាណិជ្ជកម្មសម្រាប់លោតរុញឬហៅសម្រាប់សមត្ថភាពរបស់យើង។

អានការបង្គាប់បញ្ជា: ប្រព័ន្ធដំណើរការវីនដូបន្ថែមពីលើ API hooking ។ យើងគួរដឹងពីតួនាទីរបស់ Windows APIs?

ឱកាសហាប់

ការអភិវឌ្ឍន៍ផ្នែកសូហ្វវែរ - បច្ចេកវិជ្ជា Hook - Point 3As អាចកាត់បន្ថយចំណុចប្រទាក់ដែលមានស្ថេរភាពនិងការរៀបចំចន្លោះប្រហោងដែលអាចកើតចេញពីកម្មវិធីភ្លាមៗសម្រាប់ការកំណត់ជាក់លាក់មួយកើតមានឡើងជាការផ្លាស់ប្តូរការគ្រប់គ្រង។ វត្ថុដោះស្រាយដៃវត្ថុកែប្រែកែសម្រួលជំហាន។ នៅចុងបញ្ចប់នៅពេលមានឱកាសកើតមានឡើងអ្នកដោះស្រាយបញ្ហាទាក់ទងនឹងយុទ្ធសាស្រ្តនៃការហៈនៅលើវត្ថុដែលបានចុះឈ្មោះមុនពេលដែលបានរៀបចំព្រឹត្តិការណ៍ពិសេស។ ករណីឧទាហរណ៏: សារបង្អួច, បាច់ចុះចតពីច្រកឆ្លើយឆ្លង។

នៅខាងក្នុង IAT Hooking

ការអភិវឌ្ឍន៍ផ្នែកទន់ - ដំណើរការ Hook - Point 4Each នៅក្នុងវីនដូមានតារាងមួយដែលហៅថាតារាងនាំចូល (IAT) ដែលផ្ទុកហាងចង្អុលទៅសមត្ថភាពដែលបានផ្ញើចេញដោយ DLLs នៃបែបបទនីមួយៗ។ តារាងនេះត្រូវបានប្រជាជនរីកចម្រើនជាបន្តបន្ទាប់ជាមួយអាសយដ្ឋាននៃធាតុរបស់ DLLs នៅពេលដំណើរការ។

ដោយប្រើសមត្ថភាពពិសេសយើងអាចធ្វើតារាង IAT អាចសរសេរបានដោយអាចផ្លាស់ប្តូរអាស័យដ្ឋានរបស់វាដោយអាសយដ្ឋានសមត្ថភាពផ្ទាល់ខ្លួនដែលជាការប្តូរជាតារាងម្តងទៀតបន្ទាប់ពីការផ្លាស់ប្តូរនេះ។ នៅចំណុចនៅពេលដែលនីតិវិធីព្យាយាមហៅសមត្ថភាពអាសយដ្ឋានរបស់វាត្រូវបានដាក់នៅក្នុងតារាង IAT ហើយចង្អុលត្រូវបានត្រឡប់។ នៅពេលតារាង IAT ត្រូវបានផ្លាស់ប្តូរសមត្ថភាពផ្ទាល់ខ្លួនត្រូវបានបង្កើតឡើងនៃសមត្ថភាពទី 1 ហើយកូដដែលត្រូវបានបញ្ចូលទៅក្នុងនីតិវិធីត្រូវបានទទួល។

Netfilter Hook

ការអភិវឌ្ឍន៍ផ្នែកទន់ - Hook - Point 5Netfilter គឺជាប្រព័ន្ធរងរបស់លីនុចដែលគួរអោយកត់សំគាល់ជាង 2.4 ។ វាទទួលខុសត្រូវលើការបែងចែកកញ្ចប់ NAT, ជញ្ជាំងភ្លើង, ការបញ្ជូនបន្តក្នុងចំនោមផ្សេងៗ។ Netfilter គឺអាចពង្រីកបាននិងឯកសាររបស់វាត្រូវបានបញ្ចប់។ វាទុកលទ្ធភាពប្រើប្រាស់ Hooks នៅក្នុងកូដខឺណែលធ្វើឱ្យការប្រើប្រាស់របស់វាមានភាពបត់បែនខ្លាំងហើយជាទូទៅត្រូវបានទទួលដោយក្រុម។ ហុកទាំងនេះទុកនូវលទ្ធផលដែលអាចសម្រេចបានពីរបីនិងអាចបំពេញជាកេះសម្រាប់ឱកាសជាក់លាក់។

សេចក្តីសន្និដ្ឋាន:

នីតិវិធីសរសេរកម្មវិធីភ្ជាប់មានប្រសិទ្ធិភាពនិងបើកចំហវិសាលភាពនៃលទ្ធផលដែលអាចសម្រេចបានសម្រាប់វិស្វករផ្នែកទន់ទោះយ៉ាងណាវាគួរតែត្រូវបានប្រើប្រាស់ដោយប្រុងប្រយ័ត្នចាប់តាំងពីពួកគេបានរួមបញ្ចូលភាពស្មុគស្មាញកាន់តែលេចធ្លោនៅក្នុងស្ទ្រីមនៃនីតិវិធីនិងការផ្លាស់ប្តូរដំបូង ការប្រព្រឹត្តរបស់ប្រព័ន្ធប្រតិបត្តិការកម្មវិធីឬផ្នែកទន់ផ្សេងទៀតដែលធ្វើឱ្យពិបាកក្នុងការយល់អំពីហេតុផលនៃកម្មវិធី។ ក្រៅពីនេះដូចដែលបានបញ្ជាក់មុននៅក្នុងអត្ថបទនេះការប្រើប្រាស់ប្រព័ន្ធទាំងនេះដោយគ្មានគំរូអាចកាត់បន្ថយការប្រតិបត្តិនៃកម្មវិធី។

GTranslate Your license is inactive or expired, please subscribe again!