TL; កុង
វត្ថុបុរាណ Maven Central បានបោះពុម្ពផ្សាយជា io.github.davidtimur:c2-lab បានដឹកជញ្ជូនការចេញផ្សាយចំនួនប្រាំបួន ដែលក្នុងនោះមានប្រាំបីបានដំណើរការ payload ចូលប្រើពីចម្ងាយក្នុងអំឡុងពេលចងក្រងគម្រោង downstream ណាមួយដែលដាក់ jar នៅលើផ្លូវ annotation-processor របស់វា។ គ្មានកូដកម្មវិធីណាមួយត្រូវនាំចូលវាទេ។ គ្មានប្រភពណាមួយត្រូវយោងវាទេ។ មិនមានស្គ្រីបដំឡើងទេ គ្មានសមមូលក្រោយការដំឡើង និងគ្មានទំពក់វដ្តជីវិតណាមួយសម្រាប់ឧបករណ៍ដើម្បីត្រួតពិនិត្យនោះទេ។
វ៉ិចទ័រប្រតិបត្តិគឺជាឯកសារទំហំ ៤៦ បៃតែមួយនៅក្នុង jar៖ ការចុះឈ្មោះអ្នកផ្តល់សេវា Java ដែលដាក់ឈ្មោះថ្នាក់ដែលអនុវត្ត javax.annotation.processing.Processorកម្មវិធីចងក្រង Java រកឃើញការចុះឈ្មោះបែបនេះដោយស្វ័យប្រវត្តិ។ នៅពេលដែលរកឃើញហើយ javac បង្កើត និងដំណើរការថ្នាក់ជាផ្នែកធម្មតានៃការចងក្រង។ នោះមានន័យថា បរិស្ថានដំណើរការរបស់ payload គឺជាម៉ាស៊ីនសាងសង់ នៅពេលនេះ ម៉ាស៊ីនសាងសង់កំពុងធ្វើរឿងមួយដែលវាមានដើម្បីធ្វើ។
នៅទូទាំងការចេញផ្សាយទាំងប្រាំបួន ឆានែលបញ្ជា និងត្រួតពិនិត្យត្រូវបានសាងសង់ឡើងវិញចំនួនបីដង៖ URL ហៅត្រឡប់ដែលផ្គត់ផ្គង់ដោយប្រតិបត្តិករ បន្ទាប់មកសែលបញ្ច្រាសលើផ្លូវរូងក្រោមដី TCP ngrok បន្ទាប់មកឆានែលស្ទង់មតិ HTTP ដែលផ្លូវរបស់វាបានផ្លាស់ប្តូរពីរដងទៀត។ ការចេញផ្សាយចុងក្រោយបានដំឡើងកម្មវិធីគ្រប់គ្រងការជឿទុកចិត្ត TLS ដែលមិនចាំបាច់ដំណើរការជាលំនាំដើមរបស់ JVM។ ទទួលយកវិញ្ញាបនបត្រណាមួយសម្រាប់រយៈពេលនៃការចងក្រង.
វត្ថុបុរាណនេះមានពាក្យថា "C2 Lab Payload" នៅក្នុង POM របស់វា និងអាជ្ញាប័ណ្ណ MIT។ វាបានផ្សាយផ្ទាល់នៅលើ Maven Central សម្រាប់រយៈពេលទាំងមូលដែលយើងបានសង្កេតឃើញវា ហើយ... ត្រូវបានដកចេញចាប់តាំងពីពេលនោះមក រួមជាមួយនឹងទាំងមូលរបស់វា io.github.davidtimur ក្រុម។
កាយវិភាគសាស្ត្រ៖ កម្មវិធីចងក្រងជាម៉ាស៊ីនប្រតិបត្តិ
ក្របខ័ណ្ឌដំណើរការចំណារពន្យល់របស់ Java មានដូច្នេះបណ្ណាល័យអាចបង្កើតកូដនៅពេលចងក្រង - យន្តការនៅពីក្រោយ Lombok, Dagger និងបញ្ជីវែងនៃឧបករណ៍ ORM និងស៊េរី។ ឧបករណ៍ដំណើរការប្រកាសខ្លួនវាជាមួយឯកសារអត្ថបទធម្មតានៅខាងក្នុង jar៖
META-INF/services/javax.annotation.processing.Processor
ខ្លឹមសារនៃឯកសារនោះនៅក្នុងការចេញផ្សាយដែលរងផលប៉ះពាល់នីមួយៗ ទាំងពាក្យសំដី និងពេញលេញ៖
io.github.davidtimur.c2lab.C2 ដំណើរការ
ឯកសារនេះមានទំហំដូចគ្នាបេះបិទនៅទូទាំងការចេញផ្សាយ 1.0.1 ដល់ 1.0.8, md5 7d2a08a5c8869a47eea9fa62487dfbe4. ការចេញផ្សាយ 1.0.0 មិនមានវាទេ។
ពេលណា ចាវ៉ាក នៅពេលដំណើរការ វាស្កេនផ្លូវរបស់ឧបករណ៍ដំណើរការចំណារពន្យល់សម្រាប់ធាតុសេវាកម្មទាំងនេះ ហើយផ្ទុកអ្វីដែលវារកឃើញ។ គ្មានអ្វីនៅក្នុងគម្រោងដែលកំពុងត្រូវបានចងក្រងដែលត្រូវនិយាយអំពីឧបករណ៍ដំណើរការ ដាក់ចំណារពន្យល់អ្វីទាំងអស់ ឬកំណត់រចនាសម្ព័ន្ធអ្វីទាំងអស់នោះទេ។ វត្តមាននៅលើផ្លូវគឺគ្រប់គ្រាន់ហើយ។ នេះគឺជាលក្ខណសម្បត្តិដែលបំបែក JavacDoor ពីគំរូខ្សែសង្វាក់ផ្គត់ផ្គង់ដែលឧបករណ៍ភាគច្រើនត្រូវបានបង្កើតឡើង៖
| លំនាំ | គន្លឹះ | អាចមើលឃើញជា |
|---|---|---|
| ទំពក់ដំឡើង npm | npm install | scripts.postinstall នៅក្នុងបញ្ជីបញ្ជាក់ |
| បន្ទុកពេលនាំចូល Python | ការនាំចូលម៉ូឌុលដំបូង | សេចក្តីថ្លែងការណ៍កម្រិតម៉ូឌុលនៅក្នុងប្រភព |
| ទ្វារ Javac | javac លើគម្រោងណាមួយនៅខាងក្រោម | ឈ្មោះឯកសារចុះឈ្មោះសេវាកម្ម |
ទំពក់ដំឡើង (install hook) គឺជាសេចក្តីប្រកាសនៅក្នុង manifest ហើយ manifest គឺជារឿងដំបូងដែលនរណាម្នាក់អាន។ យ៉ាងហោចណាស់ payload ពេលវេលានាំចូល (import-time payload) ស្ថិតនៅក្នុងប្រភពដែលអាចអានបាន។ ការចុះឈ្មោះសេវាកម្មមិនមែនជាទាំងពីរទេ៖ វាជាឈ្មោះឯកសារបូកនឹងបន្ទាត់មួយ ដែលដាក់ឈ្មោះថ្នាក់ ហើយឥរិយាបថស្ថិតនៅក្នុង bytecode ដែលបានចងក្រង និងថតឯកសារមួយនៅឆ្ងាយ។
ថ្នាក់ payload ខ្លួនវាអនុវត្តការឈ្លបយកការណ៍របស់ម៉ាស៊ីនដោយការបាញ់ផ្លោងចេញ។ អាងស្តុកថេរនៃថ្នាក់ដែលបានចងក្រងមាន / bin / sh, តើខ្ញុំជាអ្នកណា, គ្មានឈ្មោះ -a, pwd នៅលើផ្លូវ Unix និង បញ្ជីភារកិច្ច នៅលើផ្លូវវីនដូ រួមជាមួយ បញ្ជូនបន្តកំហុសស្ទ្រីម ដើម្បីបញ្ចូលលទ្ធផលកំហុសរបស់ដំណើរការកូនទៅក្នុងស្ទ្រីមដែលចាប់យក។ គំរូ JSON ពីរយកលទ្ធផលចេញពីម៉ាស៊ីន — សញ្ញាសម្គាល់ការចុះឈ្មោះ៖
{"host":"%s","os":"%s","user":"%s","dir":"%s"}
មានប្រជាជនមកពី ឈ្មោះម៉ាស៊ីន ពាក្យបញ្ជានិង ឈ្មោះប្រព័ន្ធប្រតិបត្តិការ, ឈ្មោះអ្នកប្រើប្រាស់និង អ្នកប្រើប្រាស់.dir លក្ខណៈសម្បត្តិប្រព័ន្ធ និងការហៅត្រឡប់មកវិញជាលទ្ធផល៖
{"version":"%s","host":"%s","time":"%s","output":"%s"}
សញ្ញាសម្គាល់វឌ្ឍនភាពដែលបន្សល់ទុកនៅក្នុងទិន្នផលរបស់កម្មវិធីចងក្រងគឺមានលក្ខណៈច្បាស់លាស់មិនធម្មតា៖ [C2] ការប្រតិបត្តិពេលវេលាចងក្រងបានបញ្ចប់, [C2] ការហៅត្រឡប់ត្រូវបានផ្ញើ → HTTP , [C2] សែលភ្ជាប់ទៅ .
ការចេញផ្សាយចំនួនប្រាំបួន ជំនាន់ C2 ចំនួនបី
ការចេញផ្សាយទាំងនេះមិនមែនជាច្បាប់ចម្លងចំនួនប្រាំបួននៃ payload មួយនោះទេ។ ពួកវាជាកំណត់ហេតុនៃការធ្វើឡើងវិញ ហើយការអានពួកវាតាមលំដាប់លំដោយបង្ហាញពីឆានែលដែលកំពុងត្រូវបានសាងសង់ឡើងវិញ ខណៈពេលដែលវ៉ិចទ័រចែកចាយនៅតែថេរ។
| ការចេញផ្សាយ | ប្រតិបត្តិដោយស្វ័យប្រវត្តិនៅពេលចងក្រង | ឆានែល |
|---|---|---|
1.0.0 | ទេ (គ្មានឯកសារសេវាកម្ម) | URL ហៅត្រឡប់ដែលផ្តល់ដោយប្រតិបត្តិករតែប៉ុណ្ណោះ |
1.0.1 | បាទ/ចាស (បានណែនាំវ៉ិចទ័រ) | URL ហៅត្រឡប់ដែលផ្តល់ដោយប្រតិបត្តិករ |
1.0.2 | បាទ | បញ្ច្រាសសែល, ផ្លូវរូងក្រោមដី TCP ngrok |
1.0.3 | បាទ | ឆានែល HTTP, /ចុះឈ្មោះ /cmd /ចេញ |
1.0.4 | បាទ | ឆានែល HTTP, /ចុះឈ្មោះ /cmd /ចេញ |
1.0.5 | បាទ | ឆានែល HTTP, /ចុះឈ្មោះ /ស្ទង់មតិ /ចេញ |
1.0.6 | បាទ | ឆានែល HTTP, /ចុះឈ្មោះ /ស្ទង់មតិ /ចេញ |
1.0.7 | បាទ | ឆានែល HTTP, /ចុះឈ្មោះ /cmd |
1.0.8 | បាទ | បានបិទការផ្ទៀងផ្ទាត់ឆានែល HTTP + TLS |
ព័ត៌មានលម្អិតបីនៅក្នុងតារាងនោះគឺមានតម្លៃក្នុងការគូរចេញ ពីព្រោះព័ត៌មានលម្អិតនីមួយៗផ្លាស់ប្តូររបៀបដែលសំណុំវត្ថុបុរាណគួរត្រូវបានអាន។
វ៉ិចទ័រមកដល់ 1.0.1 មិនមែន 1.0.2 ទេ។ ការចេញផ្សាយ 1.0.0 មានតក្កវិជ្ជាឈ្លបយកការណ៍ និងការហៅត្រឡប់មកវិញដូចគ្នា ប៉ុន្តែមិនមានឯកសារសេវាកម្ម និងគ្មានការនាំចូលដំណើរការចំណារពន្យល់ទេ។ វាដំណើរការលុះត្រាតែមានអ្វីមួយហៅវា។ ចាប់ពី 1.0.1 ឯកសារសេវាកម្មមានវត្តមាន ហើយថ្នាក់ដែលបានចងក្រងត្រូវបាននាំចូល។ javax.annotation.processing.SupportedSourceVersionការវាយតម្លៃណាមួយដែលប្រៀបធៀបការចេញផ្សាយពីរដែលបានចេញលក់ — 1.0.0 និង 1.0.2 — សន្និដ្ឋានបានត្រឹមត្រូវថាមានអ្វីមួយបានផ្លាស់ប្តូរ ប៉ុន្តែកំណត់ខុសកន្លែង។
សែលបញ្ច្រាសមាននៅក្នុងការចេញផ្សាយតែមួយប៉ុណ្ណោះ។ ការចេញផ្សាយ 1.0.2 មាន 0.tcp.ngrok[.]io, ខ្សែកំណត់ហេតុ [C2] សែលត្រូវបានភ្ជាប់ទៅ 0.tcp.ngrok[.]io:19823, បដាអន្តរកម្ម c2-shellនិងឧបករណ៍បញ្ចប់ស៊ុម __END__ការចេញផ្សាយ 1.0.3 តទៅមិនមានអ្វីទាំងនោះទេ ហើយផ្ទុយទៅវិញវាទៅដល់ម៉ាស៊ីន HTTPS។ សំណើសុំដកចេញដែលដាក់ឈ្មោះតែការចេញផ្សាយដែលមានសំបុត្រនឹងបានលើកឡើងពីចំណុចបញ្ចប់ TCP ដែលងាប់ ខណៈពេលដែលចាកចេញពីឆានែល HTTP ផ្ទាល់ ដែលមានវត្តមាននៅក្នុងការចេញផ្សាយចំនួនប្រាំមួយនៅពេលក្រោយ ដែលមិនបានលើកឡើង។
ការចេញផ្សាយចុងក្រោយលុបការផ្ទៀងផ្ទាត់ការដឹកជញ្ជូន។ ការចេញផ្សាយ 1.0.8 បន្ថែមថ្នាក់មួយដែលកំពុងអនុវត្ត javax.net.ssl.X509 កម្មវិធីគ្រប់គ្រងទំនុកចិត្ត ដែលវិធីសាស្ត្រពិនិត្យវិញ្ញាបនបត្រមិនធ្វើអ្វីទាំងអស់ កម្មវិធីផ្ទៀងផ្ទាត់ឈ្មោះម៉ាស៊ីនដែលតែងតែពិតត្រូវបានចុះឈ្មោះតាមរយៈ កំណត់កម្មវិធីផ្ទៀងផ្ទាត់ឈ្មោះម៉ាស៊ីនលំនាំដើម, និងក ទុកចិត្តទាំងអស់ ទម្លាប់ដែលដំឡើងទាំងពីរជាលំនាំដើមរបស់ JVM។ ផលប៉ះពាល់គឺថា សម្រាប់ការចងក្រងដែលនៅសល់ JVM ទទួលយកវិញ្ញាបនបត្រណាមួយពីម៉ាស៊ីនណាមួយ — មិនត្រឹមតែសម្រាប់ចរាចរណ៍របស់ payload ប៉ុណ្ណោះទេ ប៉ុន្តែសម្រាប់អ្វីផ្សេងទៀតដែលការបង្កើតធ្វើលើ TLS បន្ទាប់មក។
ឆានែល HTTP នៅក្នុងការចេញផ្សាយទាំងប្រាំមួយដែលប្រើប្រាស់វា ត្រូវបាននាំមុខដោយម៉ាស៊ីនតែមួយ៖ tableful-fervor-crazed.ngrok-free[.]devសំណើនីមួយៗមានបឋមកថា ការព្រមានអំពីកម្មវិធីរុករក ngrok-skipដែលទប់ស្កាត់ទំព័រអន្តរកាលដែលផ្លូវរូងក្រោមដី ngrok ឥតគិតថ្លៃបម្រើដល់កម្មវិធីរុករកតាមអ៊ីនធឺណិត។ សំណុំផ្លូវផ្លាស់ប្តូរនៅទូទាំងការចេញផ្សាយ — /ចេញ បាត់នៅ 1.0.7 ហើយ /cmd ឆ្លាស់គ្នាជាមួយ / ការបោះឆ្នោត - ប៉ុន្តែម្ចាស់ផ្ទះមិនដែលផ្លាស់ប្តូរទេ។
ការបដិសេធខ្លួនឯងប្រាប់
POM នីមួយៗចាប់ពី 1.0.1 តទៅកំណត់អាគុយម៉ង់កម្មវិធីចងក្រងសម្រាប់ការបង្កើតរបស់ artifact ផ្ទាល់៖
-proc:គ្មាន
ទង់នោះបិទដំណើរការចំណារពន្យល់។ ឥទ្ធិពលរបស់វានៅទីនេះគឺមុនcisអ៊ី៖ នៅពេលដែលគម្រោងដែលមានឧបករណ៍ដំណើរការត្រូវបានចងក្រងដោយខ្លួនវាផ្ទាល់ ឧបករណ៍ដំណើរការនឹងមិនដំណើរការទេ។
ទង់នេះមានការប្រើប្រាស់ធម្មតាទាំងស្រុង។ គម្រោងដែលបញ្ជូនឧបករណ៍ដំណើរការចំណារពន្យល់ជារឿយៗត្រូវជៀសវាងការអនុវត្តឧបករណ៍ដំណើរការនោះទៅខ្លួនវាក្នុងអំឡុងពេល bootstrap ហើយឯកសារ build-tool ណែនាំយ៉ាងពិតប្រាកដអំពីរឿងនេះ។ បើយកវាតែម្នាក់ឯងវាមិនបង្ហាញអ្វីទេ។
ទោះជាយ៉ាងណាក៏ដោយ ប្រសិនបើយកវាមកពិចារណារួមគ្នាជាមួយនឹងអ្វីដែលឧបករណ៍ដំណើរការធ្វើ វាពិពណ៌នាអំពីភាពមិនស៊ីមេទ្រីជាក់លាក់មួយ៖ កូដដំណើរការលើម៉ាស៊ីនរបស់អ្នកគ្រប់គ្នាដែលចងក្រងប្រឆាំងនឹងវត្ថុបុរាណ មិនមែនលើម៉ាស៊ីនដែលបង្កើតវត្ថុបុរាណនោះទេ។ ទង់ជាតិលេចឡើងនៅក្នុងការចេញផ្សាយដូចគ្នាដែលណែនាំឯកសារសេវាកម្ម — 1.0.1 — និងនៅក្នុងការចេញផ្សាយនីមួយៗបន្ទាប់ពីវា។ ទំនាក់ទំនងរវាង "ការចេញផ្សាយដែលការប្រតិបត្តិពេលវេលាចងក្រងចាប់ផ្តើម" និង "ការចេញផ្សាយដែលការប្រតិបត្តិពេលវេលាចងក្រងត្រូវបានបិទនៅក្នុងមូលដ្ឋាន" គឺជាសញ្ញាវិភាគដែលមានប្រយោជន៍បំផុតនៅក្នុងសំណុំវត្ថុបុរាណ ហើយវាអាចមើលឃើញនៅក្នុង POM អត្ថបទធម្មតាដោយមិនចាំបាច់ឌិគ្រីបអ្វីទាំងអស់។
យើងកត់សម្គាល់ពីឥទ្ធិពល ហើយឈប់ត្រឹមនេះ។ គ្មានអ្វីនៅក្នុងវត្ថុបុរាណដែលបង្ហាញពីមូលហេតុដែលទង់ជាតិត្រូវបានដាក់នោះទេ។
ទិន្នន័យមេតាមួយទៀតសមនឹងទទួលបានការលើកឡើង ភាគច្រើនគឺការបោះចោលវា។ POM ដាក់ឈ្មោះគម្រោងនេះថា "C2 Lab Payload" ពិពណ៌នាវាថាជា "C2 lab payload artifact" និងផ្តល់អាជ្ញាប័ណ្ណដល់វា MIT។ ការដាក់ស្លាកដោយខ្លួនឯងនៃប្រភេទនេះជួនកាលត្រូវបានផ្តល់ជូនជាភស្តុតាងដែលថាកញ្ចប់មួយគឺជាលំហាត់ស្រាវជ្រាវ។cisជាជាងការគំរាមកំហែងផ្ទាល់ ហើយពេលខ្លះការអាននោះត្រឹមត្រូវ - សត្វកាណារីដែលបានប្រកាសដោយគ្មានហេដ្ឋារចនាសម្ព័ន្ធដែលអាចទៅដល់បានគឺជាវត្ថុខុសពីវត្ថុនេះ។ វាមិនអនុវត្តនៅទីនេះទេ។ ការផ្សាំមុខងារដែលបានបោះពុម្ពផ្សាយទៅកាន់ឃ្លាំងសាធារណៈ ដែលអាចទៅដល់បានដោយអ្នកប្រើប្រាស់ណាមួយ ជាមួយនឹងហេដ្ឋារចនាសម្ព័ន្ធចេញដែលត្រូវបានសាងសង់ឡើងវិញបីដងក្នុងការចេញផ្សាយចំនួនប្រាំបួន គឺជាសមត្ថភាពផ្ទាល់ដោយមិនគិតពីអ្វីដែលទិន្នន័យមេតារបស់វាហៅវានោះទេ។ ឈ្មោះនៅក្នុង POM មិនផ្លាស់ប្តូរអ្វីទាំងអស់អំពីអ្វីដែលកើតឡើងនៅលើម៉ាស៊ីនដែលចងក្រងប្រឆាំងនឹងវានោះទេ។
សូចនាករសម្រាប់ម៉ាស៊ីនសាងសង់
ប្រសិនបើម៉ាស៊ីនបង្កើតត្រូវបានចងក្រងប្រឆាំងនឹងវត្ថុបុរាណនេះ ភស្តុតាងស្ថិតនៅក្នុងកំណត់ហេតុបង្កើត និងទូរមាត្របណ្តាញជាជាងការផ្សាំជាប់លាប់នៅលើថាស — បន្ទុកដំណើរការនៅខាងក្នុងដំណើរការចងក្រង ហើយចាកចេញជាមួយវា។
នៅក្នុង jar ឬឃ្លាំងសម្ងាត់ឃ្លាំងសម្ងាត់ក្នុងស្រុក
META-INF/services/javax.annotation.processing.Processorឈ្មោះio.github.davidtimur.c2lab.C2Processor- ឯកសារសេវាកម្ម md5
7d2a08a5c8869a47eea9fa62487dfbe4 - ថ្នាក់ក្រោម
io/github/davidtimur/c2lab/:C2Processor,C2Task,Taskហើយនៅក្នុង 1.0.8 ថ្នាក់ខាងក្នុងTask$1
ទិន្នផលក្នុងការសាងសង់
[C2] compile-time execution complete[C2] callback sent → HTTP[C2] callback failed:[C2] shell connected to- បដាអន្តរកម្ម
c2-shell; ឧបករណ៍បញ្ចប់ស៊ុម__END__
ទូរមាត្រក្នុងដំណើរការ
javacជាឪពុកម្តាយរបស់/bin/sh -c(យូនីក) ឬអ្នកបកប្រែពាក្យបញ្ជាវីនដូ- ពាក្យបញ្ជាកូន
whoami,uname -a,pwd(យូនីក) ឬtasklist(វីនដូ) ត្រូវបានបង្កើតឡើងដោយជំហានចងក្រង
នៅក្នុងទូរមាត្របណ្តាញ
- TCP ចេញទៅកាន់
0.tcp.ngrok[.]io:19823(ចេញផ្សាយ 1.0.2) - HTTPS ទៅ
tableful-fervor-crazed.ngrok-free[.]dev, ផ្លូវ/register,/cmd,/poll,/out(ការចេញផ្សាយ 1.0.3 ដល់ 1.0.8) - ចំណងជើងសំណើ
ngrok-skip-browser-warning: true - ស្នើសុំការផ្គូផ្គងសាកសព
{"host":...,"os":...,"user":...,"dir":...}or{"version":...,"host":...,"time":...,"output":...}
នៅក្នុងការកំណត់រចនាសម្ព័ន្ធ
- អថេរបរិស្ថាន
CALLBACK,CALLBACK_URLលក្ខណៈសម្បត្តិប្រព័ន្ធ;callback.url
ទិន្នន័យមេតារបស់អ្នកបោះពុម្ពផ្សាយ
- ជាក្រុម
io.github.davidtimurអាសយដ្ឋានអ្នកបោះពុម្ពផ្សាយdavudboi999@gmail[.]com; កូនសោចុះហត្ថលេខាE520C345EF94423D
ការបង្កើតដែលដំណើរការការចេញផ្សាយ 1.0.8 តម្រូវឱ្យមានការត្រួតពិនិត្យបន្ថែមមួយ។ ដោយសារតែការចេញផ្សាយនោះដំឡើងកម្មវិធីគ្រប់គ្រងការជឿទុកចិត្តដែលអនុញ្ញាតជាលំនាំដើមទូទាំង JVM ការតភ្ជាប់ TLS ណាមួយដែលធ្វើឡើងនៅពេលក្រោយក្នុង JVM ដូចគ្នា — ដំណោះស្រាយការពឹងផ្អែក ការផ្ទុកឡើងវត្ថុបុរាណ ជំហានដាក់ពង្រាយ — បានដំណើរការដោយគ្មានការផ្ទៀងផ្ទាត់វិញ្ញាបនបត្រ។ ចរាចរណ៍ពីបង្អួចនោះមិនគួរត្រូវបានសន្មតថាបានផ្ទៀងផ្ទាត់នោះទេ។
ហេតុអ្វីបានជាវត្ថុបុរាណដែលបានចងក្រងត្រូវការការស្កេនផ្សេងៗគ្នា
JavacDoor គឺជាករណីសាកល្បងដ៏មានប្រយោជន៍មួយ ពីព្រោះវាយកឈ្នះលើការសន្មត់ទូទៅពីរក្នុងពេលតែមួយ ហើយការបរាជ័យទាំងពីរមិនជាក់លាក់ចំពោះឧបករណ៍របស់អ្នកលក់ណាមួយឡើយ។
ការសន្មត់ដំបូងគឺថា កូដគ្រោះថ្នាក់ប្រកាសខ្លួនវានៅក្នុង manifest មួយ។ ឧបករណ៍ខ្សែសង្វាក់ផ្គត់ផ្គង់ជាច្រើនត្រូវបានរៀបចំឡើងជុំវិញវដ្តជីវិត hooksពីព្រោះសម្រាប់ npm និង PyPI នោះជាកន្លែងដែលសកម្មភាពជាធម្មតាស្ថិតនៅ។ JavacDoor មិនមាន hook ទេ។ trigger របស់វាគឺជាឯកសារចុះឈ្មោះសេវាកម្មដែលឈ្មោះរបស់វាជាចំណុចប្រទាក់ Java និងខ្លឹមសាររបស់វាជាឈ្មោះថ្នាក់។ ដើម្បីចាប់យកវាដោយឋិតិវន្ត អ្នកត្រូវតែព្យាបាល META-INF/services/javax.annotation.processing.Processor ជាចំណុចចូលអនុវត្តដោយខ្លួនវាផ្ទាល់ ស្មើនឹង ក្រោយការដំឡើង ស្គ្រីប — ហើយបន្ទាប់មកធ្វើតាមថ្នាក់ដែលមានឈ្មោះទៅជា bytecode។ ប្រព័ន្ធអេកូឡូស៊ីមានយន្តការស្វែងរកដោយស្វ័យប្រវត្តិផ្ទាល់ខ្លួននៃរូបរាងនេះ ហើយប្រព័ន្ធអេកូឡូស៊ីនីមួយៗគឺជាចំណុចចូលមួយថាតើឧបករណ៍រាប់វាថាជាមួយឬអត់។
ការសន្មត់ទីពីរគឺថាខ្សែអក្សររស់នៅក្នុងឯកសារប្រភព។ សម្រាប់ jar មួយ ចំណុចបញ្ចប់ ពាក្យបញ្ជា shell គំរូ JSON និងសញ្ញាសម្គាល់កំណត់ហេតុទាំងអស់ស្ថិតនៅក្នុងអាងថេរនៃ ។ ថ្នាក់ ឯកសារ។ ឧបករណ៍ដែលអត្ថបទ greps រកមិនឃើញអ្វីទាំងអស់ — មិនមែនដោយសារតែខ្សែអក្សរត្រូវបានបិទបាំងនោះទេ ប៉ុន្តែដោយសារតែពួកវាស្ថិតនៅក្នុងធុងគោលពីរដែលមានរចនាសម្ព័ន្ធដែលការស្កេនអត្ថបទមិនវិភាគ។ សូចនាករបណ្តាញនីមួយៗនៅក្នុងការបង្ហោះនេះបានកើតចេញពីការវិភាគអាងថេរ។ មួយក្នុងចំណោមពួកគេគឺជាទម្រង់ពេញលេញ https:// URL ស្ថិតនៅក្នុងទិដ្ឋភាពធម្មតានៅខាងក្នុងឯកសារ class មួយ; ការស្កេនអត្ថបទនៃខ្លឹមសារដែលអាចអានបានរបស់ jar នៅតែមិនបង្ហាញវាទេ។ មិនមានការអ៊ិនកូដដែលត្រូវបរាជ័យនៅទីនេះទេ មានតែទម្រង់កុងតឺន័រដែលត្រូវអាន។
ចន្លោះប្រហោងទាំងពីរមានរាងដូចគ្នា៖ ទម្រង់ artifact ត្រូវបានចាត់ទុកជាថង់ឯកសារជាជាងរចនាសម្ព័ន្ធដែលមានអត្ថន័យដែលបានកំណត់។ ការកែតម្រូវគឺមិនគួរឱ្យចាប់អារម្មណ៍ទេ - វិភាគកុងតឺន័រ រាប់ចំណុចចូលស្វែងរកដោយស្វ័យប្រវត្តិរបស់ប្រព័ន្ធអេកូឡូស៊ី ហើយធ្វើតាមពួកវាទៅក្នុងកូដដែលបានចងក្រង។ សម្រាប់វ៉ិចទ័រពេលវេលាសាងសង់ជាពិសេស ការត្រួតពិនិត្យទីបីគឺថោក និងគួរឱ្យភ្ញាក់ផ្អើលក្នុងការធ្វើរោគវិនិច្ឆ័យ៖ ប្រៀបធៀបអ្វីដែល artifact ធ្វើចំពោះអ្នកប្រើប្រាស់ទល់នឹងអ្វីដែលវាលើកលែងខ្លួនវា។ artifact ដែលចុះឈ្មោះឧបករណ៍ដំណើរការពេលវេលាចងក្រង និងបិទដំណើរការពេលវេលាចងក្រងក្នុងពេលដំណាលគ្នាសម្រាប់ការសាងសង់ផ្ទាល់ខ្លួនរបស់វាបានប្រាប់អ្នកអ្វីមួយអំពីខ្លួនវានៅក្នុងបន្ទាត់ពីរនៃ POM អត្ថបទធម្មតា។
សម្រាប់ក្រុមដែលកំពុងប្រើប្រាស់វត្ថុបុរាណ Maven នាពេលបច្ចុប្បន្ននេះ វិធានការជាក់ស្តែងចំនួនបីដូចខាងក្រោម៖
- ចាត់ទុកផ្លូវឧបករណ៍ដំណើរការចំណារពន្យល់ជាព្រំដែនប្រតិបត្តិ។ ភាពអាស្រ័យដែលដាក់នៅទីនោះដំណើរការកូដនៅក្នុង build របស់អ្នក។ ក្នុងករណីដែល build មិនត្រូវការដំណើរការ annotation -proc:គ្មាន មានប្រយោជន៍ការពារដូចដែលជាក់ស្តែងនៅក្នុងស្រុកនៅទីនេះដែរ។ កន្លែងដែលវាធ្វើ សូមភ្ជាប់សំណុំឧបករណ៍ដំណើរការយ៉ាងច្បាស់លាស់ ជាជាងទទួលមរតកវាពី classpath ចងក្រង។
- ដំណើរការរងរបស់កម្មវិធីចងក្រងកំណត់ហេតុ។ ជំហានចងក្រងដែលបង្កើតជាសែលគឺមិនប្រក្រតីនៅក្នុងគម្រោងភាគច្រើន ហើយវាអាចត្រូវបានជូនដំណឹងតិចតួច។
- កុំចាត់ទុកទិន្នន័យមេតាជាសក្ខីកម្ម។ “មន្ទីរពិសោធន៍”, “ការធ្វើតេស្ត”, “បន្ទុកការងារ” និង “PoC” នៅក្នុងឈ្មោះកញ្ចប់ ឬការពណ៌នា មិនមែនជាដែនកំណត់វិសាលភាពទេ។ លទ្ធភាពទៅដល់ និងឥរិយាបថគឺជាដែនកំណត់។
វត្ថុបុរាណ និងក្រុមទាំងមូលរបស់វាត្រូវបានដកចេញពី Maven Central ធ្វើតាមរបាយការណ៍របស់យើង; ទាំងផ្លូវសិប្បនិម្មិត និងផ្លូវក្រុមឥឡូវនេះត្រឡប់ 404 ហើយសន្ទស្សន៍កណ្តាលរាយការណ៍ថាគ្មានកូអរដោនេដែលត្រូវគ្នាទេ។ នោះបិទវត្ថុបុរាណនេះ។ វាមិនបិទវ៉ិចទ័រទេ ដែលជាលក្ខណៈពិសេសដែលបានកត់ត្រាទុករបស់កម្មវិធីចងក្រង Java និងអាចរកបានសម្រាប់អ្នកដែលបោះពុម្ពផ្សាយ jar។
ឯកសារយោង
អត្ថបទនេះមិនបានដកស្រង់ប្រភពខាងក្រៅណាមួយឡើយ។ ការរកឃើញទាំងអស់គឺជាការវិភាគឋិតិវន្តដោយផ្ទាល់នៃពាងដែលបានបោះពុម្ពផ្សាយចំនួនប្រាំបួន ដែលទាញយកពី Maven Central មុនពេលដកចេញ។ គ្មានកូដពីវត្ថុបុរាណណាមួយត្រូវបានប្រតិបត្តិនៅចំណុចណាមួយឡើយ។







