Ostrzeżenie
Odpowiedzi na ten test wyzwania dla konkretnej wersji łatki, która pomaga powstrzymać ataki WannaCrypt / WannaCry. W zależności od systemu operacyjnego możesz mieć inną łatkę. Najlepszym sposobem ochrony jest upewnienie się, że komputer jest w pełni aktualny i ostrożność podczas otwierania załączników i łączy internetowych.
Wprowadzenie
Lubię myśleć, że programiści są z natury dobrymi ludźmi, nawet jeśli niektórzy nie są tacy mili , więc pomóżmy ludziom upewnić się, że są chronieni łatką MS17-010 .
Wyzwanie
Wyzwanie polega na napisaniu pełnego programu lub funkcji, która zwraca wartość true lub falsey w zależności od tego, czy łata MS17-010 jest zainstalowana w bieżącym systemie operacyjnym.
Wejście i wyjście
Wejście: wejście nie jest wymagane
Dane wyjściowe: wartość zgodna z prawdą lub falsey (wskazać, która jest używana dla każdego przypadku). Błąd / wyjątek można uznać za wartość falsey.
Zasady
- Twój kod powinien działać (i wyświetlać poprawnie) w co najmniej jednym systemie operacyjnym Windows, dla którego łatka jest dostępna, ale nie musi działać w każdym systemie operacyjnym (Podaj wszelkie ograniczenia).
- Obowiązują standardowe luki
- To jest golf golfowy , więc wygrywanie z najmniejszą ilością bajtów wygrywa!
Odpowiedzi:
PowerShell 2.0,
242016 bajtów-4 bajty dzięki @whthing przez usunięcie
-id
.-4 bajty dzięki @ DankoDurbić , zmieniając
get-hotfix
nahotfix
.KB4012212
jest poprawką dla systemu Windows 7. Można ją zastąpić dowolnym kodem KB z połączonej strony poprawki .Zwróci informacje o źródle , opisie , HotFixID , InstalledBy i InstalledOn, gdy zostanie zainstalowane jako prawdziwa wartość, i wyświetli błąd, jeśli nie będzie w stanie znaleźć go jako wartości falsey.
Oto przykład zarówno prawdziwej, jak i wyjściowej falsey (więc
KB4012212
jest zainstalowany na moim komputerze, aleKB4012215
nie jest):źródło
Get-HotFix KB4012212
będzie działał. (Testowane tylko z PSv4). Ale zgadzam się z Janem Dvorakiem, nie sądzę, by wyniki potwierdziły wyzwanie.hotfix KB4012212
. W Powershell nie musisz pisaćget-
.Batch / Windows CMD,
31292823 bajtów-1 bajt dzięki @SteveFest po zmianie
findstr 4012212
nafind "4012212"
.-5 bajtów dzięki @BassdropCumberwubwubwub przez usunięcie
list
.Wyjaśnienie:
Wysyła informacje o łatce, jeśli jest ona zainstalowana lub nic innego.
Na zrzucie ekranu poniżej łata
4012212
jest zainstalowana i4012215
nie jest.źródło
find
zamiastfindstr
, to oszczędza 3 bajtyfind "4012212"
działa również na bajt -1,wmic qfe|find "4012212"
wydaje się też działać, ale może coś tam brakuje?Bash + Cygwin (lub WSL), 21 bajtów
Ta odpowiedź jest w większości skradziona z odpowiedzi Kevina . Więc wyrzuć głos w ten sposób, także jeśli uważasz, że na to zasługuje.
Cygwin ma dostęp do poleceń systemu Windows oprócz coreutils. Jesteśmy w stanie używać Coreutils
grep
zamiast Windows,find
więc nie musimy używać cudzysłowów. Z tego powodu zapisano 2 bajty.źródło
PowerShell 5.1,
245212207 bajtów-33 bajtów dzięki @KevinCruijssen usuwającemu spację i zastępując wartość true i false wartością 1 i 0.
-5 bajtów dzięki skróceniu nazw zmiennych @KevinCruijssen
Oczywiście nie wygra żadnych nagród, ale ten skrypt programu PowerShell sprawdzi dziennik historii usługi Microsoft Update pod kątem KB4013429 (jedna z łat wymienionych w łączu ), którą można zastąpić dowolną łatą . Pomyślałem, że opublikuję go, ponieważ jest on trochę bardziej niezawodny, jeśli łatka została zastąpiona nowszą.
źródło
1
/0
zamiasttrue
/false
. W ten sposób:$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 bajtów )Hc
, abyH
iSe
doT
(lub innego oprócz jednej literyH
lubS
które zostały już wykorzystane), aby zapisać kolejne 5 bajtów. :)$H
bezpośrednio zamiast przechowywać? Również%{ }
i?{ }
zamiastForEach-Object
iif
. Jestem całkiem pewien, że możesz po prostu wysyłać dane wyjściowe do potoku zamiast do echa, ponieważ powinieneś mieć tylko jedno dopasowanie wyniku i myślę, że byłoby to zgodne z prawdą na podstawie OPC #,
178143141134 bajtówKompiluje do miejsca, w
Func<int, bool>
którym dane wejściowe nie są używane.Zapisano 35 bajtów przy pomocy @Ryan
Zapisano 2 bajty dzięki @KevinCruijssen
Zapisano 7 bajtów dzięki @ErikKarlsson
Wersja sformatowana:
źródło
if(h["HotFixID"]=="KB4012212")return 1>0;return 1<0;
to samo coreturn h["HotFixID"]=="KB4012212"
?count
na końcu.get()
? Tak:_=>{if (new System.Management.ManagementObjectSearcher("SELECT HotFixID FROM Win32_QuickFixEngineering WHERE HotFixID = 'KB3150513'").Get().Count > 0)return 1>0;return 1<0;};
. Aby zaoszczędzić 4 bajtySELECT HotFixID
jeSELECT *
.Cygwin, 31 bajtów
Żeby zagrać w buntownika
kod powrotu będzie wynosił 0, jeśli łatka została zastosowana, lub 1, jeśli nie została zastosowana.
Testowane pod Windows 7 z Cygwin 2.6.0
źródło
KB
?KB
ponieważ jest raczej mało prawdopodobne, że4012212
będzie tam cokolwiek oprócz ścieżki. Możesz również zapisać 1 bajt, jeśli usuniesz tylko K, ponieważ nie znajdzieszB4012212
losowo bez ścieżki.K
pierwszego wydaje się rozsądne, aleB...
staje się prawidłową reprezentacją szesnastkową, umożliwiając kolizję z UID i kodami szesnastkowymiPowerShell v4, 64 bajty
Sprawdza wszystkie referencje KB za pomocą RegEx (teraz masz dwa problemy)
źródło
Wiersz polecenia / polecenia,
2725 bajtówJeśli zostanie znalezione KB4012212, wypisuje to, w przeciwnym razie nic nie jest wypisywane.
Dzięki @Kevin za zapisanie 2 bajtów :)
źródło
systeminfo|find "4012212"
dla -2 bajtów.Powershell 2.0, 142 bajty
Poniżej zawiera wszystkie KB od marca, ale wymaga rozszerzenia w kwietniu, maj KB, ponieważ każdy z nich zastępuje wszystkie poprzednie.
źródło
(Get-HotFix | where
na(HotFix|where
(spacje usunięte iGet-
usunięte.PowerShell 5.1 134 bajtów
To samo co Mark Pippin, ale zmienił Get-Hotfix na Hotfix i gdzie? oszczędność 8 bajtów
Nie mogę obniżyć liczby bajtów niż odpowiedź Kevina
źródło
(HotFix|? HotFixID ...
dla -2 bajtów.DISM , 40 bajtów
Wyjaśnienie:
Zwraca tożsamość pakietu, jeśli jest zainstalowany lub nic innego.
Na zrzucie ekranu poniżej łata
4012212
jest zainstalowana i4012215
nie jest.źródło