WannaCrypt için GottaFix var mı?


109

Uyarı

Bu meydan okumaya verilen cevaplar, WannaCrypt / WannaCry saldırılarını durdurmaya yardımcı olan yamanın belirli bir sürümü için yapılan testi test ediyor. İşletim sisteminize bağlı olarak, farklı bir ekiniz olabilir. Kendinizi korumanın en iyi yolu, ekleri ve web bağlantılarını açarken bilgisayarınızın tamamen güncel olduğundan ve dikkatli olmanızdır.


Giriş

Programcıların doğal olarak iyi insanlar olduğunu düşünmeyi seviyorum, bazıları iyi olmasa bile , MS17-010 yaması ile korunmalarına yardımcı olmanıza yardımcı olur .

Meydan okuma

Buradaki zorluk , MS17-010 yamasının mevcut işletim sistemine kurulup kurulmadığına bağlı olarak bir gerçeği ya da yanlış değeri veren tam bir program ya da işlev yazmaktır .

Giriş ve çıkış

Giriş: Giriş gerekli değil

Çıktı: Bir truthy veya falsey değeri (Her durum için hangisinin kullanıldığını belirtir). Bir hata / istisna falsey değeri olarak kabul edilebilir.

kurallar

  • Kodunuz, yamanın uygun olduğu en az bir Windows işletim sisteminde çalışmalı (ve doğru bir şekilde çıkmalı), ancak her işletim sisteminde çalışmamalıdır (Lütfen herhangi bir sınırlama belirtin).
  • Standart boşluklar uygulanır
  • Bu , bu yüzden en az sayıda bayt olan gönderim kazanıyor!

3
Hmm, bir soru .. Hakikat / falsey değerlerine gelince, falsey değer olarak bir hataya izin verilir ve gerçek bir geri dönüş olarak hakikat olur, yoksa buna izin verilmiyor mu?
Kevin Cruijssen

3
@KevinCruijssen Bir hatayı yanlış bir değer olarak kabul ettiğim için mutluyum. Düzeltme ekinin yüklenmediğinin açık bir göstergesi olduğunu düşünüyorum.
Notts90

12
Kullanıcılar bu düzeltme ekini kaçırdılar, ancak daha sonra bir tane kurduysa, bazı kullanıcılar için yanlış bir negatif sonuç verecek şekilde korunmaya devam ederler.
Ian Miller

2
@MichealJohnson, güvenlik açığından nasıl yararlanılacağını gösteren kod göndermeye insanları teşvik etmenin akıllıca olduğundan emin değil.
Notts90

7
Ana bilgisayar pc enfeksiyonu geçerli bir falsey değeri midir? Açıkçası noktaya değinecek
Nic Robertson

Yanıtlar:


158

PowerShell 2.0, 24 20 16 bayt

hotfix KB4012212

-4 byte @ çıkartarak aldıkça teşekkürler -id.
-4 bayt sayesinde @ DankoDurbić değiştirerek get-hotfixiçin hotfix.

KB4012212Windows 7 için düzeltme ekidir. Bu , düzeltme ekinin bağlantılı sayfasındaki herhangi bir KB koduyla değiştirilebilir .

Geri döner Kaynak , Açıklama , HotFixID , InstalledBy ve InstalledOn o truthy değer olarak yüklü olduğunda bilgi ve Falsey değeri olarak bulamadı eğer bir hata verecektir.

Burada hem bir hem de falsey çıktısının bir örneği (makineme KB4012212yüklenir, ancak KB4012215yüklenmez):

görüntü tanımını buraya girin


82
PPCG'de pratik amaçlar için gerçekten yararlı bir cevap mı? Etkilendim.
John Dvorak

1
Kimliğin Get-HotFix KB4012212de işe yarayacağını belirtmeniz gerekmez . (Yalnızca PSv4 ile test edilmiştir). Ancak Jan Dvorak ile aynı fikirdeyim, çıktının mücadeleyi onayladığını sanmıyorum.
her ne

6
Zaten bir sonraki ya da sonraki aylık toplamaya hazırsanız işe yaramaz, çünkü bunlar birbirlerinin yerine geçmiştir.
Sumyrda

6
@ Notts90 Evet, yorum, kodu deneyen ve yanlış bir negatif alan kişiler için bir ipucu olarak ifade edilir.
Sumyrda

10
Sadece hotfix KB4012212yeter. Powershell'de yazmanıza gerek yok get-.
Danko Durbić

43

Toplu İş / Windows CMD, 31 29 28 23 bayt

wmic qfe|find "4012212"

-1 bayt sayesinde @SteveFest değiştirerek findstr 4012212için find "4012212". @BassdropCumberwubwubwub tarafından
-5 bayt kaldırarak .list

Açıklama:

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

Takılıysa, ya da başka bir şey yoksa, bazı yama bilgilerini verir.
Aşağıdaki ekran görüntüsünde düzeltme eki 4012212yüklenir ve yüklenmez 4012215.

görüntü tanımını buraya girin


5
Bu, 40M güncellemelerinin yayıldığı günlerde sorun yaratacak
John Dvorak

1
findyerine kullanın findstr, 3 bayt kazandırır
stevefestl

2
Zaten bir sonraki ya da sonraki aylık toplamaya hazırsanız işe yaramaz, çünkü bunlar birbirlerinin yerine geçmiştir.
Sumyrda

2
@Sumyrda, bu özel yamayı kontrol etmek, yeni yamaları kontrol etmek zorunda değil.
Notts90

1
find "4012212"Ayrıca -1 bayt wmic qfe|find "4012212"için çalışıyor, çok çalışıyor gibi görünüyor ama belki orada bir şey eksik?
Bassdrop Cumberwubwubwub

20

Bash + Cygwin (Veya WSL), 21 bayt

Bu cevap çoğunlukla Kevin'in cevabından çalınır . Öyleyse, bunu hakettiğini düşünüyorsanız, o şekilde bir oy verin.

wmic qfe|grep 4012212

Cygwin, coreutils'e ek olarak Windows komutlarına da erişebilir. grepWindows yerine coreutils'i kullanabiliyoruz , bu findyüzden alıntı kullanmamıza gerek kalmadı. Bundan dolayı 2 bayt kaydedilir.


1
Oh evet, bu benimkinden daha kısa; Çalmak için iyi bir MS kullanıcısı seçmedim!
Aaron,

2
Birisi bunu doğru olduğunu tahmin ettiğim "Veya WSL" yi içerecek şekilde düzenledi, ancak önce yolu değiştirmeniz gerekecek.
Kaptan Adam

17

Powershell 5.1, 245 212 207 bayt

$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;

@KevinCruijssen, beyaz alanı ortadan kaldırarak ve 1 ile 0 arasında doğru ve yanlış olarak değiştirerek -33 bayt sayesinde.

@KevinCruijssen kısaltıcı değişken isimleri sayesinde -5 bayt

Açıkçası herhangi bir ödül kazanmak için gidiyor, ama bu powershell komut KB4013429 için Microsoft Update geçmişi günlük (listelenen yamalar birini kontrol edecek değil bağlantıya o yamalar herhangi biriyle değiştirilebilir). Ben yatacağımı düşündüm çünkü yama daha sonra yenisiyle değiştirildiyse, biraz daha güvenilir.


13
Merhaba, PPCG'ye hoş geldiniz! :) Bu soru kod-golf olarak etiketlendiğinden, fikir mücadeleyi olabildiğince az sayıda byte olarak tamamlamak. Ben cevap muhtemelen zaten kazanamaz biliyorum ve sen benden daha daha eksiksiz bir yöntem kullandım ama golf gereksiz boşlukları kaldırarak mevcut cevabı hala can ve kullanımı 1/ 0yerine ait true/ ' false. Buna benzer şekilde: $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 bayt )
Kevin Cruijssen

2
Oh, ve şimdi fark edebileceğim golf oynayabileceğiniz başka bir şey: Her zaman tek karakterli değişken / yöntem / sınıf adlarını kullanmak en iyisidir. Böylece, başka bir 5 bayt kaydetmek Hciçin Hile ve Seile T(veya dışında Hya Sda daha önce kullandığınız tek bir mektubu ) değiştirebilirsiniz. :)
Kevin Cruijssen

2
$H Depolamak yerine doğrudan geçemez misin ? Ayrıca %{ }ve ?{ }yerine ForEach-Objectve if. Sadece bir sonuç eşleşmesi gerektiğinden eko yerine boru hattına çıktı verebileceğinizden eminim ve bunun OP’ye dayanan bir gerçek olarak sayılacağını düşünüyorum
pinkfloydx33

16

C #, 178 143 141 134 bayt

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

Func<int, bool>Girişin kullanılmadığı bir yere derlenir .

@Ryan yardımı ile 35 bayt kurtarıldı @KevinCruijssen
sayesinde 2 bayt kaydedildi @ErikKarlsson ile
7 bayt kaydedildi

Biçimlendirilmiş versiyon:

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

değil if(h["HotFixID"]=="KB4012212")return 1>0;return 1<0;aynı return h["HotFixID"]=="KB4012212"?
Julian Wolf

@JulianWolf Hayır, çünkü ikincisi yalnızca geri gelen ilk öğeyi kontrol ederken, eski her yinelemeyi kontrol eder.
TheLethalCoder

1
ManagementObjectSearcher sorgusuna bir where yan tümcesi ekleyip countsonuna ekleyebilir .get()misiniz? Bunun gibi: _=>{if (new System.Management.ManagementObjectSearcher("SELECT HotFixID FROM Win32_QuickFixEngineering WHERE HotFixID = 'KB3150513'").Get().Count > 0)return 1>0;return 1<0;};. 4 bayttan tasarruf etmek için
Ryan,

5
+1 Bir kabuk komut dosyası dilinde olmamak için.
Hjulle

2
Erik Karlsson (Yorum yapmak yeterli temsilcisi yok) değiştirerek 7 bayt kaydetmek için bir düzenleme önerildiği SELECT HotFixIDile SELECT *.
Martin Ender

14

Cygwin, 31 bayt

Sadece asi oynamak için

grep KB4012212 "$WINDIR"/*e.log

yama uygulanmışsa, dönüş kodu 0, uygulanmamışsa 1 olur.

Cygwin 2.6.0 ile Windows 7 altında test edildi


Kaldırırsanız bu işe yarar mı KB?
TheLethalCoder

@ TheLethalCoder Emin değilim ve bulabileceğimi sanmıyorum. Cevabım Ryan’dan geliyor ve ikimiz de KB adından daha fazlasını içeren dev WindowsUpdate.log’daki metni arıyoruz, bu sayının başka bir bağlamda görünmeyeceğine bahse girerim
Aaron

Yeterince adil Ben senin ne yaptığını yeterince bilmiyordum bu yüzden bir öneri değil soruyu :)
TheLethalCoder 16:17

3
Bu, kaldırmanız durumunda , yol dışında hiçbir şeyin bulunma KBihtimalinin düşük olması nedeniyle çalışmalıdır 4012212. Ayrıca sadece K'yi kaldırırsanız 1 byte tasarruf edebilirsiniz, çünkü B4012212yolu olmadan rastgele bulamazsınız .
Sirenler

4
@Sirens Yalnızca sayıyı sınama konusunda emin değilim, 1) aktarılan bayt sayısı, 2) güncelleme, raporlama olayları ve iş UID'leri veya 3) onaltılık hata (ve diğerleri) kodlarını eşleştirmekten korkarım. Yalnızca Kilkini B...çıkarmak makul görünüyor, ancak geçerli bir onaltılık gösterimi haline geliyor, UID'ler ve onaltılık kodlarla çarpışmayı mümkün kılıyor
Aaron

12

PowerShell v4, 64 bayt

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

RegEx kullanarak tüm KB referanslarını kontrol eder (şimdi iki sorununuz var)


3
Siteye Hoşgeldiniz! Güzel ilk cevap!
programcı5000

7

Toplu İş / Komut İstemi, 27 25 bayt

systeminfo|find "4012212"

KB4012212 çıktısı bulunursa, aksi takdirde hiçbir şey çıkmaz.

2 byte'ı kaydettiği için @Kevin'e teşekkürler :)


1
Borunun etrafındaki boşlukları kaldırabileceğinizi düşünüyorum: systeminfo|find "4012212"-2 bayt.
Kevin Cruijssen

5

Powershell 2.0, 142 bayt

  • "False" için 0 döndürür, yamalı "true" için 0 eklenir, yamalı.

Aşağıda Mart ayındaki tüm KB'leri içerir, ancak önceki her birinin yerini aldığı gibi, Mayıs ayı KB'lerinin Nisan ayına göre genişlemesi gerekir.

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

Emin değilim, ama değiştirebilir düşünmek (Get-HotFix | whereiçin (HotFix|whereboşlukların kaldırıldığı ve ( Get-kaldırıldı.
Kevin Cruijssen

3

Powershell 5.1 134 Bayt

Mark Pippin ile aynı, ancak Get-Hotfix'i Düzeltme olarak değiştirdi ve nereye? 8 bayt kaydediliyor

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

Bayt sayımında Kevin'in cevabından daha düşük olamaz


1
Borunun etrafındaki boşlukları kaldırabilirsiniz: (HotFix|? HotFixID ...-2 bayt.
Kevin Cruijssen

2

DISM , 40 bayt

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

Açıklama:

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

Takılıysa paket kimliğini çıkarır veya başka bir şey çıkarmaz.
Aşağıdaki ekran görüntüsünde düzeltme eki 4012212yüklenir ve yüklenmez 4012215.

görüntü tanımını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.