جاواڪ ڊور، ميون مالويئر جيڪو ڪمپائل وقت تي هلندو آهي

جاواڪ ڊور: هڪ ماون آرٽيفيڪٽ جيڪو انسٽاليشن دوران نه پر ڪمپائليشن دوران هليو ويو

TL، ڊاڪٽر

هڪ ميون سينٽرل آرٽيفيڪٽ شايع ٿيل آهي جيئن io.github.davidtimur:c2-lab نو رليز موڪليا ويا، جن مان اٺ ڪنهن به ڊائون اسٽريم پروجيڪٽ جي ڪمپليشن دوران ريموٽ رسائي پيل لوڊ کي عمل ۾ آندو جيڪو جار کي ان جي اينوٽيشن-پروسيسر رستي تي رکيو. ڪنهن به ايپليڪيشن ڪوڊ کي ان کي درآمد ڪرڻ جي ضرورت نه هئي. ڪنهن به لائن آف سورس کي ان جو حوالو ڏيڻ جي ضرورت نه هئي. ڪا به انسٽال اسڪرپٽ نه هئي، ڪا به پوسٽ انسٽال برابر نه هئي، ۽ نه ئي ڪنهن به قسم جو لائف سائيڪل ٿلهو هو جنهن سان ٽولنگ جو معائنو ڪري سگهجي.

ايگزيڪيوشن ویکٹر جار اندر هڪ واحد 46-بائيٽ فائل آهي: هڪ جاوا سروس فراهم ڪندڙ رجسٽريشن جيڪا هڪ لاڳو ڪندڙ ڪلاس جو نالو ڏئي ٿي javax.annotation.processing.Processor. جاوا ڪمپائلر اهڙين رجسٽريشنن کي پاڻمرادو ڳولي ٿو. هڪ ڀيرو ملي ويو، javac ڪلاس کي ڪمپائلنگ جي هڪ عام حصي جي طور تي انسٽنٽيٽ ڪري ٿو ۽ هلائي ٿو. ان جو مطلب آهي ته پيل لوڊ جو رن ٽائم ماحول بلڊ مشين آهي، هن وقت بلڊ مشين اهو ئي ڪم ڪري رهي آهي جيڪو ان لاءِ موجود آهي.

نون رليز ۾ ڪمانڊ اينڊ ڪنٽرول چينل ٽي ڀيرا ٻيهر تعمير ڪيو ويو: هڪ آپريٽر پاران فراهم ڪيل ڪال بيڪ URL، پوءِ هڪ اينگروڪ ٽي سي پي سرنگ تي هڪ ريورس شيل، پوءِ هڪ HTTP پولنگ چينل جنهن جا رستا ٻه ڀيرا وڌيڪ منتقل ٿيا. آخري رليز هڪ نو-آپ ٽي ايل ايس ٽرسٽ مئنيجر کي JVM ڊفالٽ طور نصب ڪيو، مرتب جي مدت لاءِ ڪنهن به سرٽيفڪيٽ کي قبول ڪرڻ.

هن نموني پنهنجي POM ۽ MIT لائسنس ۾ "C2 Lab Payload" لفظ رکيا هئا. اهو سڄي عرصي تائين Maven Central تي لائيو هو جڏهن اسان ان کي ڏٺو ۽ تڏهن کان هٽايو ويو آهي، ان جي پوري سان گڏ io.github.davidtimur گروپ.

اناتومي: عملدرآمد انجن جي طور تي ڪمپائلر

جاوا جو اينوٽيشن پروسيسنگ فريم ورڪ موجود آهي تنهنڪري لائبريريون ڪمپائل وقت تي ڪوڊ پيدا ڪري سگهن ٿيون - لومبوڪ، ڊيگر، ۽ ORM ۽ سيريلائيزيشن ٽولز جي هڪ ڊگهي فهرست جي پويان ميڪانيزم. هڪ پروسيسر پاڻ کي جار اندر هڪ سادي ٽيڪسٽ فائل سان اعلان ڪري ٿو:

ميٽا-INF/services/javax.annotation.processing.Processor

هر متاثر ٿيل رليز ۾ ان فائل جو مواد، لفظ بہ لفظ ۽ مڪمل:

io.github.davidtimur.c2lab.C2Processor

فائل رليز 1.0.1 کان 1.0.8، md5 ۾ بائيٽ جي برابر آهي. 7d2a08a5c8869a47eea9fa62487dfbe4. رليز 1.0.0 ۾ اهو شامل ناهي.

جڏهن جاواڪ هلندو آهي، اهو انهن سروس داخلائن لاءِ اينوٽيشن-پروسيسر رستي کي اسڪين ڪري ٿو ۽ جيڪو ڳولي ٿو اهو لوڊ ڪري ٿو. مرتب ڪيل منصوبي ۾ ڪنهن به شيءِ کي پروسيسر جو ذڪر ڪرڻ، ڪنهن به شيءِ کي اينوٽيٽ ڪرڻ، يا ڪنهن به شيءِ کي ترتيب ڏيڻ جي ضرورت ناهي. رستي تي موجودگي ڪافي آهي. هي اها ملڪيت آهي جيڪا جاوا ڊور کي سپلائي چين نمونن کان الڳ ڪري ٿي جيڪي گهڻا ٽولنگ چوڌاري ٺهيل آهن:

طرزٽرگرنظر اچي ٿو جيئن
npm انسٽال ٿلهوnpm installscripts.postinstall پڌرنامي ۾
پٿون درآمد وقت پيل لوڊماڊيول جي پهرين درآمدماخذ ۾ ماڊيول-سطح جو بيان
جاواڪ ڊورjavac ڪنهن به ڊائون اسٽريم منصوبي تيهڪ سروس-رجسٽريشن فائل جو نالو

هڪ انسٽال ٿلهو هڪ مينيفيسٽ ۾ هڪ اعلان آهي، ۽ هڪ مينيفيسٽ پهرين شيءِ آهي جيڪا ڪو به پڙهي ٿو. هڪ امپورٽ-ٽائم پيل لوڊ گهٽ ۾ گهٽ پڙهڻ لائق ذريعو ۾ ويٺي آهي. هڪ سروس رجسٽريشن ٻنهي مان ڪا به ناهي: اهو هڪ فائل جو نالو ۽ هڪ لائن آهي جيڪو هڪ ڪلاس جو نالو ڏئي ٿو، ۽ رويي هڪ ڊائريڪٽري کان پري مرتب ٿيل بائيٽ ڪوڊ ۾ رهي ٿو.

پيل لوڊ ڪلاس پاڻ شيلنگ آئوٽ ذريعي هوسٽ ريڪنيسنس انجام ڏئي ٿو. مرتب ڪيل ڪلاسن جي مسلسل پول ۾ شامل آهن /بن/ش, مان ڪير آهيان, يونيمي -ا, پڪو يونڪس رستي تي ۽ ڪم جي فهرست ونڊوز جي رستي تي، گڏجي ريڊائريڪٽ ايرر اسٽريم چائلڊ پروسيس جي ايرر آئوٽ پُٽ کي ڪيپچر ٿيل اسٽريم ۾ ضم ڪرڻ لاءِ. ٻه JSON ٽيمپليٽ نتيجا هوسٽ کان ٻاهر کڻي ويندا آهن - هڪ رجسٽريشن بيڪن:

{"host":"%s","os":"%s","user":"%s","dir":"%s"}

کان آباد ٿيل ميزبان نام حڪم ۽ او ايس نالو, استعمال ڪندڙ جو نالو، ۽ استعمال ڪندڙ.ڊائريڪٽر سسٽم پراپرٽيز، ۽ نتيجو ڪال بيڪ:

{"version":"%s","host":"%s","time":"%s","output":"%s"}

ڪمپائلر جي پنهنجي آئوٽ پُٽ ۾ ڇڏيل ترقي جا نشان غير معمولي طور تي صاف آهن: [C2] ڪمپائل-وقت عملدرآمد مڪمل ٿيو, [C2] ڪال بيڪ موڪليو ويو → HTTP , [C2] شيل سان ڳنڍيل آهي .

نو رليز، ٽي C2 نسلون

رليز هڪ پيل لوڊ جون نو ڪاپيون نه آهن. اهي هڪ آئٽريشن لاگ آهن، ۽ انهن کي ترتيب سان پڙهڻ سان ظاهر ٿئي ٿو ته چينل ٻيهر تعمير ڪيو پيو وڃي جڏهن ته ڊليوري ویکٹر صحيح رهيو.

ڇڏڻڪمپائل تي خودڪار طريقي سان عمل ڪري ٿوچئنل
1.0.0نه (ڪابه سروس فائل ناهي)صرف آپريٽر پاران فراهم ڪيل ڪال بيڪ URL
1.0.1ها (ویکٹر متعارف ڪرايو ويو)آپريٽر پاران فراهم ڪيل ڪال بيڪ URL
1.0.2هاريورس شيل، اينگروڪ ٽي سي پي سرنگ
1.0.3هاHTTP چينل، / رجسٽر / سي ايم ڊي / آئوٽ
1.0.4هاHTTP چينل، / رجسٽر / سي ايم ڊي / آئوٽ
1.0.5هاHTTP چينل، / رجسٽر / پول / آئوٽ
1.0.6هاHTTP چينل، / رجسٽر / پول / آئوٽ
1.0.7هاHTTP چينل، / رجسٽر / سي ايم ڊي
1.0.8هاHTTP چينل + TLS جي تصديق بند ڪئي وئي

انهيءَ جدول ۾ ٽي تفصيل ڪڍڻ جي لائق آهن، ڇاڪاڻ ته هر هڪ تبديل ڪري ٿو ته نموني جي سيٽ کي ڪيئن پڙهڻ گهرجي.

ویکٹر 1.0.2 تي نه پر 1.0.1 تي پهچي ٿو. رليز 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 سان ڳنڍيل آهي.، هڪ انٽرايڪٽو بينر سي 2-شيل، ۽ هڪ فريم ٽرمينيٽر __END__. رليز 1.0.3 کان پوءِ انهن مان ڪو به شامل نه آهي ۽ ان جي بدران هڪ HTTPS هوسٽ تائين پهچندو آهي. هڪ هٽائڻ جي درخواست صرف ٽڪيٽ ٿيل رليز جو نالو ڏيڻ سان هڪ مئل TCP اينڊ پوائنٽ جو حوالو ڏنو ويندو جڏهن ته لائيو HTTP چينل، جيڪو ڇهن بعد جي رليز ۾ موجود آهي، بغير ذڪر جي ڇڏي ويندو.

آخري رليز ٽرانسپورٽ جي تصديق کي هٽائي ٿي. رليز 1.0.8 هڪ ڪلاس لاڳو ڪرڻ شامل ڪري ٿو javax.net.ssl.X509ٽرسٽ مئنيجر جنهن جي سرٽيفڪيٽ چيڪ ڪرڻ جا طريقا ڪجهه به نه ڪندا آهن، هڪ هميشه سچو هوسٽ نالي جي تصديق ڪندڙ جيڪو رجسٽرڊ ٿيو آهي ڊفالٽ هوسٽ نالي جي تصديق ڪندڙ مقرر ڪريو۽ هڪ سڀ تي ڀروسو ڪريو روٽين جيڪو ٻنهي کي JVM جي ڊفالٽ طور انسٽال ڪري ٿو. اثر اهو آهي ته ان ڪمپائل جي باقي حصي لاءِ، JVM ڪنهن به هوسٽ کان ڪنهن به سرٽيفڪيٽ کي قبول ڪري ٿو - نه رڳو پيل لوڊ جي پنهنجي ٽرئفڪ لاءِ، پر ڪنهن به ٻئي شيءِ لاءِ جيڪو بلڊ بعد ۾ TLS تي ڪري ٿو.

HTTP چينل، سڀني ڇهن رليز ۾ جيڪي ان کي استعمال ڪن ٿا، هڪ واحد هوسٽ جي اڳيان آهي: ٽيبل فل-فيورور-ڪريزڊ.نگروڪ-فري[.]ديو. هر درخواست ۾ هيڊر هوندو آهي اينگروڪ-اسڪپ-برائوزر-وارننگ، جيڪو انٽرسٽيشل پيج کي دٻائي ٿو جيڪو مفت اينگروڪ سرنگون برائوزرن کي پيش ڪن ٿيون. رليز ۾ رستو شفٽ سيٽ - / ٻاهر 1.0.7 تي غائب ٿي ويندو آهي، ۽ /سي ايم ڊي سان متبادل / پول - پر ميزبان ڪڏهن به تبديل نه ٿيندو آهي.

پاڻ کي ڇڏڻ جو طريقو ٻڌائي ٿو

1.0.1 کان پوءِ هر POM آرٽيڪل جي پنهنجي تعمير لاءِ هڪ ڪمپائلر دليل مقرر ڪري ٿو:

-پروڪ: ڪو به نه

اهو جهنڊو تشريح جي پروسيسنگ کي غير فعال ڪري ٿو. هتي ان جو اثر اڳ ۾ آهيcise: جڏهن پروسيسر تي مشتمل پروجيڪٽ پاڻ مرتب ڪيو ويندو آهي، پروسيسر نه هلندو آهي.

هن پرچم جا مڪمل طور تي عام استعمال آهن. هڪ منصوبو جيڪو هڪ تشريح پروسيسر موڪلي ٿو، ان کي اڪثر بوٽ اسٽريپ دوران ان پروسيسر کي پاڻ تي لاڳو ڪرڻ کان پاسو ڪرڻ جي ضرورت آهي، ۽ بلڊ ٽول دستاويز بلڪل انهي جي سفارش ڪن ٿا. اڪيلو ورتو وڃي ته اهو ڪجهه به ثابت نٿو ڪري.

پروسيسر جيڪو ڪري ٿو ان سان گڏ، جيتوڻيڪ، اهو هڪ مخصوص عدم توازن بيان ڪري ٿو: ڪوڊ هر ڪنهن جي مشينن تي عمل ڪري ٿو جيڪو آرٽيڪل جي خلاف ڪمپائل ڪري ٿو، ۽ نه ان مشين تي جيڪو آرٽيڪل ٺاهي ٿو. پرچم ساڳئي رليز ۾ ظاهر ٿئي ٿو جيڪو سروس فائل متعارف ڪرائي ٿو - 1.0.1 - ۽ ان کان پوءِ هر رليز ۾. "رليز جتي ڪمپائل-ٽائم ايگزيڪيوشن شروع ٿئي ٿو" ۽ "رليز جتي ڪمپائل-ٽائم ايگزيڪيوشن مقامي طور تي بند ڪيو ويندو آهي" جي وچ ۾ لاڳاپو آرٽيفيڪٽ سيٽ ۾ واحد سڀ کان وڌيڪ مفيد تجزياتي سگنل آهي، ۽ اهو هڪ سادي ٽيڪسٽ POM ۾ ڪنهن به شيءِ کي ڊيڪمپائل ڪرڻ کان سواءِ نظر اچي ٿو.

اسان اثر کي نوٽ ڪريون ٿا ۽ اتي ئي رڪجي وڃون ٿا. آثارن ۾ ڪجهه به اهو نٿو چوي ته جهنڊو ڇو لڳايو ويو هو.

ميٽا ڊيٽا جو هڪ ٻيو ٽڪرو ذڪر جي لائق آهي، گهڻو ڪري ان کي ختم ڪرڻ لاءِ. POM منصوبي کي "C2 ليب پيل لوڊ" جو نالو ڏئي ٿو، ان کي "C2 ليب پيل لوڊ آرٽيفيڪٽ" جي طور تي بيان ڪري ٿو، ۽ ان کي MIT جو لائسنس ڏئي ٿو. هن قسم جي خود ليبلنگ ڪڏهن ڪڏهن ثبوت طور پيش ڪئي ويندي آهي ته هڪ پيڪيج هڪ تحقيقي مشق آهي.cisاي هڪ زنده خطري جي بدران، ۽ ڪڏهن ڪڏهن اهو پڙهڻ صحيح هوندو آهي - هڪ اعلان ڪيل ڪينري جنهن تائين رسائي لائق انفراسٽرڪچر نه هجي، هن کان مختلف اعتراض آهي. اهو هتي لاڳو نٿو ٿئي. هڪ فنڪشنل امپلانٽ جيڪو ڪنهن به صارف طرفان رسائي لائق آهي، ٻاهرين انفراسٽرڪچر سان جيڪو نو رليز ۾ ٽي ڀيرا ٻيهر تعمير ڪيو ويو هو، هڪ زنده صلاحيت آهي قطع نظر ان جي ميٽا ڊيٽا ان کي ڇا سڏيندو آهي. POM ۾ نالو ان بابت ڪجهه به تبديل نٿو ڪري ته هڪ مشين تي ڇا ٿئي ٿو جيڪا ان جي خلاف مرتب ٿئي ٿي.

تعميراتي مشينن لاءِ اشارا

جيڪڏهن ڪو بلڊ هوسٽ هن آرٽيفيڪٽ جي خلاف مرتب ڪيو وڃي ٿو، ته ثبوت ڊسڪ تي هڪ مستقل امپلانٽ جي بدران بلڊ لاگز ۽ نيٽ ورڪ ٽيليميٽري ۾ ويهندا آهن - پيل لوڊ ڪمپائلر جي عمل اندر هلندو آهي ۽ ان سان گڏ نڪرندو آهي.

جار يا مقامي ريپوزٽري ڪيش ۾

  • 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-وائڊ ڊفالٽ طور انسٽال ڪري ٿو، ساڳئي JVM ۾ بعد ۾ ٺهيل ڪو به TLS ڪنيڪشن - انحصار ريزوليوشن، آرٽيفيڪٽ اپ لوڊ، هڪ ڊيپلائيمينٽ قدم - سرٽيفڪيٽ جي تصديق کان سواءِ اڳتي وڌيو. ان ونڊو مان ٽرئفڪ کي تصديق ٿيل نه سمجهيو وڃي.

مرتب ڪيل نمونن کي مختلف اسڪيننگ جي ضرورت ڇو آهي

JavacDoor هڪ مفيد ٽيسٽ ڪيس آهي ڇاڪاڻ ته اهو هڪ ئي وقت ٻن عام مفروضن کي شڪست ڏئي ٿو، ۽ نه ئي ناڪامي ڪنهن هڪ وينڊر جي ٽولنگ لاءِ مخصوص آهي.

پهريون مفروضو اهو آهي ته خطرناڪ ڪوڊ پاڻ کي هڪ پڌرنامي ۾ ظاهر ڪري ٿو. سپلائي چين ٽولنگ جو هڪ وڏو حصو زندگي جي چڪر جي چوڌاري منظم ڪيو ويو آهي. hooks، ڇاڪاڻ ته npm ۽ PyPI لاءِ اهو آهي جتي عمل عام طور تي هوندو آهي. JavacDoor وٽ ڪو به ٿلهو ناهي. ان جو ٽرگر هڪ سروس-رجسٽريشن فائل آهي جنهن جو نالو جاوا انٽرفيس آهي ۽ جنهن جو مواد هڪ ڪلاس جو نالو آهي. ان کي جامد طور تي پڪڙڻ لاءِ توهان کي علاج ڪرڻو پوندو ميٽا-INF/services/javax.annotation.processing.Processor هڪ عملدرآمد جي داخلا جي نقطي جي طور تي، پنهنجي حق ۾، هڪ جي برابر پوسٽ انسٽال اسڪرپٽ — ۽ پوءِ نالي واري ڪلاس کي بائيٽ ڪوڊ ۾ فالو ڪريو. ايڪو سسٽم وٽ هن شڪل جا پنهنجا خودڪار دريافت ڪرڻ جا طريقا آهن، ۽ هر هڪ داخلا نقطو آهي، ڇا ٽولنگ ان کي هڪ طور شمار ڪري ٿو يا نه.

ٻيو مفروضو اهو آهي ته اسٽرنگ سورس فائلن ۾ رهن ٿا. هڪ جار لاءِ، اينڊ پوائنٽس، شيل ڪمانڊ، JSON ٽيمپليٽس، ۽ لاگ مارڪر سڀ مسلسل پول ۾ آهن. ڪلاس فائلون. ٽولنگ جيڪا گريپس ٽيڪسٽ کي ڪجهه به نه ڳوليندي آهي - ان ڪري نه ته اسٽرنگ مبهم آهن، پر ان ڪري جو اهي هڪ منظم بائنري ڪنٽينر ۾ آهن جنهن کي ٽيڪسٽ اسڪين پارس نٿو ڪري. هن پوسٽ ۾ هر نيٽ ورڪ انڊيڪيٽر ڪانسٽنٽ پول پارسنگ مان نڪتو آهي. انهن مان هڪ مڪمل طور تي ٺهيل آهي https:// ڪلاس فائل اندر سادي نظر ۾ URL؛ جار جي پڙهڻ واري مواد جو ٽيڪسٽ اسڪين اڃا تائين ان کي ظاهر نه ڪندو. هتي شڪست ڏيڻ لاءِ ڪا به انڪوڊنگ ناهي، صرف پڙهڻ لاءِ هڪ ڪنٽينر فارميٽ آهي.

ٻنهي خالن جي شڪل ساڳي آهي: هڪ آرٽيفيڪٽ فارميٽ کي فائلن جي ٿيلهي جي طور تي سمجهيو ويندو هو بجاءِ بيان ڪيل سيمينٽڪس سان هڪ ڍانچي جي طور تي. اصلاحي غير شاندار آهي - ڪنٽينر کي پارس ڪريو، ايڪو سسٽم جي پنهنجي آٽو-ڊڪووري انٽري پوائنٽس کي ڳڻيو، ۽ انهن کي مرتب ڪيل ڪوڊ ۾ فالو ڪريو. خاص طور تي بلڊ ٽائيم ویکٹرز لاءِ، ٽيون چيڪ سستو ۽ حيرت انگيز طور تي تشخيصي آهي: مقابلو ڪريو ته هڪ آرٽيفيڪٽ صارفين سان ڇا ڪري ٿو ان جي مقابلي ۾ جيڪو اهو پاڻ کي مستثنيٰ ڪري ٿو. هڪ آرٽيفيڪٽ جيڪو هڪ ڪمپائل-ٽائم پروسيسر کي رجسٽر ڪري ٿو ۽ ساڳئي وقت پنهنجي بلڊ لاءِ ڪمپائل-ٽائم پروسيسنگ کي غير فعال ڪري ٿو، توهان کي سادي متن POM جي ٻن لائينن ۾ پاڻ بابت ڪجهه ٻڌايو آهي.

اڄ ميون جي نمونن کي استعمال ڪندڙ ٽيمن لاءِ، ٽي عملي قدم هيٺ ڏجن ٿا:

  • تشريح-پروسيسر رستي کي عملدرآمد جي حد طور سمجهيو. اتي ايندڙ انحصار توهان جي بلڊ ۾ ڪوڊ هلائيندا آهن. جتي بلڊ کي تشريح جي پروسيسنگ جي ضرورت ناهي، -پروڪ: ڪو به نه دفاعي طور تي ايترو ئي ڪارآمد آهي جيترو اهو ظاهري طور تي هتي مقامي طور تي هو؛ جتي اهو ڪندو آهي، پروسيسر سيٽ کي واضح طور تي پن ڪريو بجاءِ ان کي ڪمپائل ڪلاس پاٿ مان ورثي ۾ ڏيڻ جي.
  • لاگ ڪمپائلر ذيلي عمل. هڪ ڪمپائل قدم جيڪو شيل پيدا ڪري ٿو اهو گھڻن منصوبن ۾ غير معمولي آهي ۽ معمولي طور تي خبردار ڪندڙ آهي.
  • ميٽا ڊيٽا کي شاهدي طور نه سمجهيو. پيڪيج جي نالي يا وضاحت ۾ "ليب"، "ٽيسٽ"، "پي لوڊ"، ۽ "PoC" دائري جي حدون نه آهن. پهچ ۽ رويي آهن.

نموني ۽ ان جي پوري گروپ کي هٽايو ويو ماٿي سينٽرل اسان جي رپورٽ جي پٺيان؛ ٻئي آرٽيفيڪٽ رستو ۽ گروپ رستو هاڻي 404 واپس ڪن ٿا، ۽ سينٽرل انڊيڪس ڪو به ملندڙ ڪوآرڊينيٽس رپورٽ نٿو ڪري. اهو هن آرٽيفيڪٽ کي بند ڪري ٿو. اهو ویکٹر کي بند نٿو ڪري، جيڪو جاوا ڪمپائلر جي هڪ دستاويزي خاصيت آهي ۽ هر ڪنهن لاءِ دستياب آهي جيڪو جار شايع ڪري ٿو.

حوالا

هن پوسٽ ۾ ڪنهن به ٻاهرين ذريعن جو حوالو نه ڏنو ويو آهي. سڀئي دريافتون نو شايع ٿيل جارن جو پهريون هٿ جامد تجزيو آهن، جيڪي هٽائڻ کان اڳ ميون سينٽرل مان حاصل ڪيا ويا هئا. ڪنهن به نقطي تي نمونن مان ڪو به ڪوڊ عمل ۾ نه آندو ويو.

اسڪا-ٽولز-سافٽ ويئر-ڪمپوزيشن-تجزيو-ٽولز
پنهنجي سافٽ ويئر خطرن کي ترجيح ڏيو، درست ڪريو، ۽ محفوظ ڪريو
پنهنجو مفت اڪائونٽ حاصل ڪريو.
ڪنهن به ڪريڊٽ ڪارڊ جي ضرورت نه آهي.

پنهنجي سافٽ ويئر ڊولپمينٽ ۽ پهچائڻ کي محفوظ بڻايو

زائيگيني پراڊڪٽ سوٽ سان