WottaCrypt के लिए GottaFix?


109

चेतावनी

पैच के एक विशिष्ट संस्करण के लिए इस चुनौती परीक्षण के उत्तर WannaCrypt / WannaCry हमलों को रोकने में मदद करते हैं। आपके ऑपरेटिंग सिस्टम के आधार पर, आपके पास एक अलग पैच हो सकता है। अपने आप को बचाने के लिए सबसे अच्छा तरीका यह सुनिश्चित करना है कि आपका पीसी पूरी तरह से अद्यतित है और संलग्नक और वेब लिंक खोलते समय सावधान रहें।


परिचय

मुझे लगता है कि प्रोग्रामर स्वाभाविक रूप से अच्छे लोग हैं, भले ही कुछ बहुत अच्छे नहीं हैं , इसलिए लोगों को यह सुनिश्चित करने में मदद करता है कि वे MS17-010 पैच के साथ सुरक्षित हैं ।

चुनौती

आपकी चुनौती एक पूर्ण प्रोग्राम या फ़ंक्शन लिखना है जो वर्तमान ऑपरेटिंग सिस्टम पर MS17-010 पैच स्थापित होने के आधार पर एक सत्य या गलत मूल्य देता है।

इनपुट और आउटपुट

इनपुट: कोई इनपुट आवश्यक नहीं

आउटपुट: एक सत्य या गलत मूल्य (संकेत जो प्रत्येक मामले के लिए उपयोग किया जाता है)। एक त्रुटि / अपवाद को एक गलत मूल्य माना जा सकता है।

नियम

  • आपका कोड कम से कम एक विंडोज़ ऑपरेटिंग सिस्टम पर चलना चाहिए (और आउटपुट सही ढंग से), जिसके लिए पैच उपलब्ध है, लेकिन हर ऑपरेटिंग सिस्टम (कृपया किसी भी सीमाएँ बताएं) पर नहीं चलना चाहिए।
  • मानक खामियां लागू होती हैं
  • यह , इसलिए कम से कम बाइट्स जीत के साथ जमा करना!

3
हम्म, एक सवाल .. सत्य / गलत मूल्यों के बारे में, क्या एक त्रुटि को गलत मूल्य के रूप में अनुमति दी गई है, और एक वास्तविक रिटर्न के रूप में सत्य है, या इसकी अनुमति नहीं है?
केविन क्रूज़सेन

3
@ केविनक्रूजसेन मैं एक त्रुटि पर एक मिथ्या मूल्य के रूप में विचार करके खुश हूं। मुझे लगता है कि यह एक स्पष्ट संकेतक है कि पैच स्थापित नहीं है।
नॉट्स90

12
यदि उपयोगकर्ता इस पैच को याद करते हैं, लेकिन बाद में एक स्थापित करते हैं, तो वे अभी भी सुरक्षित रहेंगे ताकि यह कुछ उपयोगकर्ताओं के लिए गलत नकारात्मक दे सके।
इयान मिलर

2
@MichealJohnson यह सुनिश्चित करने के लिए बुद्धिमान नहीं है कि लोगों को कोड का प्रदर्शन करने के लिए प्रोत्साहित करने के लिए प्रोत्साहित किया जाए कि भेद्यता का फायदा कैसे उठाया जाए।
Notts90

7
क्या मेजबान पीसी का संक्रमण एक वैध गलत मूल्य है? यह स्पष्ट रूप से इस बिंदु को प्राप्त करेगा
निक रॉबर्टसन

जवाबों:


158

PowerShell 2.0, 24 20 16 बाइट्स

hotfix KB4012212

-4 बाइट्स हटाने से @whatever के लिए धन्यवाद -id
-4 बाइट्स @ DankoDurbić को बदलने के get-hotfixलिए धन्यवाद hotfix

KB4012212विंडोज 7 के लिए पैच हैइसे पैच के लिंक किए गए पेज से किसी भी केबी-कोड से बदला जा सकता है ।

वापस आ जाएगी स्रोत , विवरण , HotFixID , InstalledBy और InstalledOn जानकारी जब यह truthy मूल्य के रूप में स्थापित किया गया है, और अगर यह falsey मूल्य के रूप में यह खोजने में असमर्थ है एक त्रुटि दे देंगे।

यहां एक सत्य और असत्य दोनों आउटपुट का उदाहरण है (इसलिए KB4012212मेरी मशीन पर स्थापित है, लेकिन KB4012215ऐसा नहीं है):

यहाँ छवि विवरण दर्ज करें


82
पीपीसीजी पर एक उत्तर जो वास्तव में व्यावहारिक उद्देश्यों के लिए उपयोगी है? मैं प्रसन्न हूँ।
जॉन ड्वोरक

1
आपको यह बताने की आवश्यकता नहीं है कि आईडी Get-HotFix KB4012212काम करेगी। (केवल PSv4 के साथ परीक्षण किया गया)। लेकिन मैं जन द्वारका से सहमत हूं, मुझे नहीं लगता कि आउटपुट चुनौती की पुष्टि करता है।
जो भी

6
काम नहीं करता है अगर आप पहले से ही अगले या बाद में मासिक रोल-अप पर हैं, क्योंकि वे एक-दूसरे को बदलते हैं।
सुमिरदा

6
@ Notts90 हाँ, टिप्पणी उन लोगों के लिए एक संकेत के रूप में है जो कोड की कोशिश करते हैं और एक झूठी नकारात्मक प्राप्त करते हैं।
सुमिरदा

10
बस hotfix KB4012212काफी है। Powershell में आपको लिखने की आवश्यकता नहीं है get-
डैंको डर्बिएक

43

बैच / विंडोज सीएमडी, 31 29 28 23 बाइट्स

wmic qfe|find "4012212"

-1 बाइट को @SteveFest में बदलने के findstr 4012212लिए धन्यवाद find "4012212"
-5 बाइट्स धन्यवाद @BassdropCumberwubwubwub को हटाकर list

स्पष्टीकरण:

wmic          Windows Management Instrumentation Command-line
qfe           Quick Fix Engineering
|find "..."   Looks for the string in the complete output

अगर यह स्थापित है, या कुछ भी नहीं तो कुछ पैच जानकारी आउटपुट।
नीचे स्क्रीनशॉट में, पैच 4012212स्थापित है, और 4012215नहीं है।

यहाँ छवि विवरण दर्ज करें


5
यह समस्याग्रस्त हो जाएगा एक बार 40M अपडेट रोल के आसपास
जॉन ड्वोरक

1
findइसके बजाय का उपयोग करें findstr, यह 3 बाइट्स बचाता है
स्टीववेस्टल

2
काम नहीं करता है अगर आप पहले से ही अगले या बाद में मासिक रोल-अप पर हैं, क्योंकि वे एक-दूसरे को बदलते हैं।
सुमिरदा

2
@Sumyrda चुनौती इस विशिष्ट पैच के लिए जाँच करने के लिए है, यह प्रतिस्थापन पैच के लिए जाँच करने के लिए नहीं है।
नॉट्स90

1
find "4012212"-1 बाइट के लिए भी काम करता है, wmic qfe|find "4012212"काम भी करने लगता है , लेकिन शायद मुझे कुछ याद आ रहा है?
बैसड्रॉप कंबरवुबवबूब

20

बैश + साइगविन (या डब्ल्यूएसएल), 21 बाइट्स

यह जवाब ज्यादातर केविन के जवाब से चुराया जाता है । तो इस तरह से एक अपवोट को फेंक दें, अगर आपको लगता है कि यह एक योग्य है।

wmic qfe|grep 4012212

Cygwin के पास कोर्यूटिल्स के अलावा विंडोज कमांड्स तक पहुंच है। हम grepविंडोज के बजाय कोर्यूटिल्स का उपयोग करने में सक्षम हैं, findइसलिए हमें उद्धरण का उपयोग करने की आवश्यकता नहीं है। इसके कारण 2 बाइट बच जाती हैं।


1
ओह, हाँ, यह मेरी तुलना में कम है; मैंने चोरी करने के लिए अच्छे एमएस उपयोगकर्ता को नहीं चुना!
हारून

2
किसी ने इसे "या WSL" शामिल करने के लिए संपादित किया, जो मुझे लगता है कि यह सच है लेकिन आपको पहले पथ को संशोधित करना होगा।
कप्तान मैन

17

पॉवर्सशेल 5.1, 245 212 207 बाइट्स

$S=New-Object -ComObject Microsoft.Update.Session;$T=$S.CreateUpdateSearcher();$H=$‌​T.GetTotalHistoryCo‌​unt();$p=0;$T.Query‌​History(0,$H)|ForEa‌​ch-Object -Process{if($_.Title -like"*KB4013429*"){$p=1;}};echo $p;

-33 बाइट्स के लिए धन्यवाद @ केविनक्रूजसेन ने सफेद स्थान को हटा दिया और 1 और 0 के साथ सही और गलत की जगह ले ली।

-5 बाइट्स धन्यवाद @KevinCruijssen चर नामों को छोटा करने के लिए

जाहिर है कि कोई पुरस्कार जीतने वाला नहीं है, लेकिन यह पावरस्क्रिप्‍ट स्क्रिप्ट KB4013429 ( लिंक पर सूचीबद्ध पैच में से एक) के लिए Microsoft अद्यतन इतिहास लॉग की जांच करेगी, इसे किसी भी पैच से बदला जा सकता है। सोचा कि मैं इसे पोस्ट कर दूं क्योंकि यह थोड़ा और विश्वसनीय है अगर पैच को बाद में बदल दिया गया है।


13
नमस्ते, PPCG में आपका स्वागत है! :) चूँकि यह प्रश्न कोड-गोल्फ टैग किया गया है, इस विचार को चुनौती को यथासंभव कुछ बाइट्स में पूरा करना है। मैं जानता हूँ कि यदि आपका जवाब शायद वैसे भी नहीं जीत जाएगा, और आप एक और अधिक पूरा विधि की तुलना में मैंने किया था का उपयोग किया है, लेकिन आप अभी भी गोल्फ अनावश्यक व्हाइटस्पेस निकाल कर अपने वर्तमान जवाब कर सकते हैं, और प्रयोग 1/ 0बजाय का true/ false। इस तरह: $S=New-Object -ComObject Microsoft.Update.Session;$Se=$S.CreateUpdateSearcher();$Hc=$Se.GetTotalHistoryCount();$p=0;$Se.QueryHistory(0,$Hc)|ForEach-Object -Process{if($_.Title -like"*KB4013429*"){$p=1;}};echo $p;( 212 बाइट्स )
केविन क्रूज़सेन

2
ओह, और एक और बात आप गोल्फ कर सकते हैं जिसे मैं केवल अब नोटिस करता हूं: यह हमेशा एकल-वर्ण चर / विधि / वर्ग नामों का उपयोग करना सबसे अच्छा है। तो आप बदल सकते हैं Hcकरने के लिए Hऔर Seकरने के लिए T(एक और एक पत्र या के अलावा Hया Sजो आप पहले से ही उपयोग किया है) और 5 बाइट्स को बचाने के लिए। :)
केविन क्रूज़सेन

2
क्या आप $H सीधे स्टोर करने के बजाय पास नहीं हो सकते ? इसके अलावा %{ }और ?{ }के बजाय ForEach-Objectऔर if। बहुत यकीन है कि आप केवल इको के बजाय पाइप लाइन को आउटपुट कर सकते हैं क्योंकि आपके पास केवल एक परिणाम मैच होना चाहिए और मुझे लगता है कि यह ओपी पर आधारित
सत्य के

16

सी #, 178 143 141 134 बाइट्स

_=>new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_QuickFixEngineering WHERE HotFixID='KB3150513'").Get().Count>0;

उस जगह पर संकलित करें Func<int, bool>जहां इनपुट अप्रयुक्त है।

@ बायरन की मदद से 35 बाइट्स बचाए
2 बाइट्स की बदौलत @KevinCruijssen ने
7 बाइट्स @ErikKarlsson की बदौलत बचाई

प्रारूपित संस्करण:

System.Func<int, bool> f = _ =>
    new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_QuickFixEngineering WHERE HotFixID = 'KB3150513'")
                         .Get().Count > 0;

के if(h["HotFixID"]=="KB4012212")return 1>0;return 1<0;रूप में ही नहीं है return h["HotFixID"]=="KB4012212"?
जूलियन वुल्फ

@ जूलियनवुल्फ नहीं क्योंकि बाद वाला केवल पहले आइटम की जांच करेगा जो वापस आता है जबकि प्रत्येक पुनरावृत्ति पर पूर्व चेक।
TheLethalCoder

1
क्या आप ManagementObjectSearcher क्वेरी में एक क्लॉज़ जोड़ सकते हैं और countके अंत में जोड़ सकते हैं .get()? इस तरह _=>{if (new System.Management.ManagementObjectSearcher("SELECT HotFixID FROM Win32_QuickFixEngineering WHERE HotFixID = 'KB3150513'").Get().Count > 0)return 1>0;return 1<0;};:। 4 बाइट्स बचाने के लिए
रयान

5
+1 शेल स्क्रिप्टिंग भाषा में नहीं होने के लिए।
हुजुल

2
एरिक कार्लसन (जो टिप्पणी करने के लिए पर्याप्त प्रतिनिधि नहीं है) एक संपादन में सुझाव की जगह 7 बाइट्स को बचाने के लिए SELECT HotFixIDके साथ SELECT *
मार्टिन एंडर

14

साइगविन, 31 बाइट्स

सिर्फ बागी का किरदार निभाने के लिए

grep KB4012212 "$WINDIR"/*e.log

यदि पैच लागू किया गया है, या 1 नहीं तो रिटर्न कोड 0 होगा।

Cygwin 2.6.0 के साथ विंडोज 7 के तहत परीक्षण किया गया


यदि आप निकाल देंगे तो क्या यह काम करेगा KB?
TheLethalCoder

@LethalCoder मुझे यकीन नहीं है, और मुझे नहीं लगता कि मुझे पता चल सकता है। मेरा उत्तर रियान से लिया गया है और हम दोनों विशाल विंडोज यूडेटडेट में खोज पाठ लिखते हैं। जिसमें केबी नाम की तुलना में बहुत अधिक है, मैं शर्त लगा सकता हूं कि संख्या किसी अन्य संदर्भ में प्रकट नहीं हो सकती
आरोन

मेला काफी मुझे पता नहीं था कि तुम्हारा क्या कर रहा है इसलिए सवाल एक सुझाव नहीं है :)
TheLethalCoder

3
यह काम करना चाहिए अगर आप KBइसे हटा दें क्योंकि यह संभावना नहीं है कि 4012212रास्ते के अलावा किसी भी चीज में होगा। यदि आप केवल K को हटाते हैं तो आप 1 बाइट भी बचा सकते हैं क्योंकि आप B4012212पथ के बिना बेतरतीब ढंग से नहीं मिलेंगे ।
सायरन

4
@ सायरन मैं केवल संख्या का परीक्षण करने के बारे में आश्वस्त नहीं हूं, मैं 1 से बाइट्स की संख्या से मेल खाने से डरता हूं, 2) अपडेट, रिपोर्ट घटनाओं और नौकरियों यूआईडी या 3) हेक्स त्रुटि (और अन्य) कोड। केवल Kपहले हटाना उचित लगता है, लेकिन फिर B...एक वैध हेक्स प्रतिनिधित्व बन जाता है, जिससे यूआईडी और हेक्स कोड के साथ टकराव संभव हो जाता है
हारून

12

PowerShell v4, 64 बाइट्स

HotFix|? HotFixID -m "401(221[2-7])|(2598)|(2606)|(3198)|(3429)"

एक RegEx (अब आपको दो समस्याएं हैं) का उपयोग करके सभी KB रेफरी के लिए चेक


3
साइट पर आपका स्वागत है! अच्छा पहला जवाब!
प्रोग्रामर

7

बैच / कमांड प्रॉम्प्ट, 27 25 बाइट्स

systeminfo|find "4012212"

यदि KB4012212 आउटपुट पाया गया है, अन्यथा कुछ भी आउटपुट नहीं है।

2 बाइट बचाने के लिए @ केविन को धन्यवाद :)


1
मुझे लगता है कि आप पाइप के चारों ओर रिक्त स्थान निकाल सकते हैं: systeminfo|find "4012212"-2 बाइट्स के लिए।
केविन क्रूज़सेन

5

पॉवर्सशेल 2.0, 142 बाइट्स

  • "झूठे" के लिए रिटर्न 0, "सच" के लिए "<0", पैच नहीं किया गया।

नीचे मार्च से सभी केबी शामिल हैं, लेकिन अप्रैल के साथ विस्तारित होने की आवश्यकता है, मई केबी के प्रत्येक पिछले सभी के रूप में।

(Get-HotFix | where HotFixID -match "4012598","4012216","4012213","4012217","4012214","4012215","4012212","4013429","4012606","4013198").Count

मुझे यकीन नहीं है, लेकिन मुझे लगता है कि आप (रिक्त स्थान हटाए गए और हटाए गए) (Get-HotFix | whereको बदल सकते हैं ।(HotFix|whereGet-
केविन क्रूज़सेन

3

पॉवर्सशेल 5.1 134 बाइट्स

मार्क पिपिन के समान है, लेकिन गेट-हॉटफ़िक्स को हॉटफ़िक्स में बदल दिया है और कहाँ तक? बचत 8 बाइट्स

(HotFix | ? HotFixID -match 
 "4012598","4012216","4012213","4012217","4012214","4012215","4012212","4013429","4012606","4013198").Count

मैं इसे केविन के जवाब से बाइट-काउंट में कम नहीं कर सकता


1
आप पाइप के चारों ओर रिक्त स्थान निकाल सकते हैं: (HotFix|? HotFixID ...-2 बाइट्स के लिए।
केविन क्रूज़सेन

2

DISM , 40 बाइट्स

dism/online /get-packages|find "4012212"

स्पष्टीकरण:

dism             Deployment Image Servicing and Management command-line
/online          Look at current running PC's Operating System
/get-packages    Display some basic information about all packages in the image
|find "..."      Looks for the string in the complete output

यदि यह स्थापित है, या कुछ भी नहीं तो पैकेज पहचान आउटपुट करता है।
नीचे स्क्रीनशॉट में, पैच 4012212स्थापित है, और 4012215नहीं है।

यहाँ छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.