Peringatan
Jawaban untuk tes tantangan ini untuk versi tambalan tertentu yang membantu menghentikan serangan WannaCrypt / WannaCry. Tergantung pada sistem operasi Anda, Anda mungkin memiliki tambalan yang berbeda. Cara terbaik untuk melindungi diri sendiri adalah memastikan PC Anda sepenuhnya mutakhir dan berhati-hati saat membuka lampiran dan tautan web.
pengantar
Saya suka berpikir programmer pada dasarnya adalah orang-orang yang baik, bahkan jika beberapa tidak begitu baik , jadi mari kita bantu orang memastikan mereka dilindungi dengan patch MS17-010 .
Tantangan
Tantangan Anda adalah menulis program atau fungsi lengkap yang mengembalikan nilai kebenaran atau kesalahan tergantung pada apakah patch MS17-010 diinstal pada sistem operasi saat ini.
Masukan dan keluaran
Input: Tidak perlu input
Output: Nilai truthy atau falsey (Tunjukkan yang digunakan untuk setiap kasus). Kesalahan / pengecualian dapat dianggap sebagai nilai falsey.
Aturan
- Kode Anda harus berjalan (dan menampilkan dengan benar) pada setidaknya satu sistem operasi windows yang tambalannya tersedia, tetapi tidak harus berjalan di setiap sistem operasi (sebutkan batasannya).
- Celah standar berlaku
- Ini adalah kode-golf , jadi pengiriman dengan jumlah byte paling sedikit menang!
Jawaban:
PowerShell 2.0,
242016 byte-4 byte terima kasih kepada @ apa pun dengan menghapus
-id
.-4 byte terima kasih kepada @ DankoDurbić dengan mengubah
get-hotfix
kehotfix
.KB4012212
adalah patch untuk Windows 7. Ini dapat diganti dengan kode KB apa pun dari halaman tertaut patch .Akan mengembalikan informasi Sumber , Deskripsi , HotFixID , InstalledBy , dan InstalledOn ketika diinstal sebagai nilai yang benar, dan akan memberikan kesalahan jika tidak dapat menemukannya sebagai nilai falsey.
Berikut ini adalah contoh dari output yang benar dan salah (jadi
KB4012212
diinstal pada mesin saya, tetapiKB4012215
tidak):sumber
Get-HotFix KB4012212
akan berfungsi juga. (Diuji hanya dengan PSv4). Tapi saya setuju dengan Jan Dvorak, saya tidak berpikir hasilnya sesuai dengan tantangan.hotfix KB4012212
sudah. Di Powershell Anda tidak perlu menulisget-
.Batch / Windows CMD,
31292823 byte-1 byte terima kasih kepada @SteveFest dengan mengubah
findstr 4012212
kefind "4012212"
.-5 byte terima kasih kepada @BassdropCumberwubwubwub dengan menghapus
list
.Penjelasan:
Keluarkan beberapa info tambalan jika diinstal, atau tidak sama sekali.
Pada tangkapan layar di bawah ini, tambalan
4012212
diinstal, dan4012215
tidak.sumber
find
alih-alihfindstr
, menghemat 3 bytefind "4012212"
juga bekerja untuk -1 byte,wmic qfe|find "4012212"
tampaknya berfungsi juga, tetapi mungkin saya kehilangan sesuatu di sana?Bash + Cygwin (Atau WSL), 21 byte
Jawaban ini sebagian besar dicuri dari jawaban Kevin . Jadi, lemparkan upvote dengan cara itu juga jika Anda pikir ini pantas dilakukan.
Cygwin memiliki akses ke perintah Windows selain coreutils. Kami dapat menggunakan coreutils
grep
alih - alih Windowsfind
sehingga kami tidak perlu menggunakan tanda kutip. 2 byte disimpan karena ini.sumber
Powershell 5.1,
245212207 byte-33 byte berkat @KevinCruijssen menghapus spasi putih dan mengganti benar dan salah dengan 1 dan 0.
-5 byte berkat @KevinCruijssen memperpendek nama variabel
Jelas tidak akan memenangkan hadiah apa pun, tetapi skrip powershell ini akan memeriksa log riwayat Pembaruan Microsoft untuk KB4013429 (salah satu tambalan yang tercantum pada tautan ) dapat diganti dengan tambalan mana pun. Saya pikir saya akan mempostingnya karena sedikit lebih dapat diandalkan jika tambalan telah diganti dengan yang lebih baru.
sumber
1
/0
bukannyatrue
/false
. Seperti ini:$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 byte )Hc
toH
danSe
toT
(atau huruf tunggal selainH
atauS
yang sudah Anda gunakan) untuk menyimpan 5 byte lainnya. :)$H
langsung daripada menyimpannya? Juga%{ }
dan?{ }
bukannyaForEach-Object
danif
. Cukup yakin Anda hanya bisa menampilkan ke saluran daripada gema karena Anda hanya harus memiliki satu hasil pertandingan dan saya pikir itu akan dihitung sebagai kebenaran berdasarkan OPC #,
178143141134 byteMengkompilasi ke
Func<int, bool>
tempat input tidak digunakan.Disimpan 35 byte dengan bantuan @Ryan
Disimpan 2 byte berkat @KevinCruijssen
Disimpan 7 byte berkat @ErikKarlsson
Versi yang diformat:
sumber
if(h["HotFixID"]=="KB4012212")return 1>0;return 1<0;
sama denganreturn h["HotFixID"]=="KB4012212"
?count
akhir.get()
? Seperti ini:_=>{if (new System.Management.ManagementObjectSearcher("SELECT HotFixID FROM Win32_QuickFixEngineering WHERE HotFixID = 'KB3150513'").Get().Count > 0)return 1>0;return 1<0;};
. Untuk menghemat 4 byteSELECT HotFixID
denganSELECT *
.Cygwin, 31 byte
Hanya untuk memainkan pemberontak
kode pengembalian akan menjadi 0 jika tambalan telah diterapkan, atau 1 jika belum.
Diuji di bawah Windows 7 dengan Cygwin 2.6.0
sumber
KB
?KB
karena agak tidak mungkin4012212
ada di sana selain jalur. Anda juga dapat menyimpan 1 byte jika Anda menghapus hanya K karena Anda tidak akan menemukanB4012212
secara acak tanpa path.K
pertama tampaknya masuk akal, tetapi kemudianB...
menjadi representasi hex yang valid, membuat tabrakan dengan UID dan kode hex menjadi mungkinPowerShell v4, 64 byte
Memeriksa semua referensi KB menggunakan RegEx (sekarang Anda memiliki dua masalah)
sumber
Batch / Command Prompt,
2725 byteJika KB4012212 ditemukan keluaran itu, jika tidak maka tidak ada yang dihasilkan.
Terima kasih kepada @Kevin karena telah menghemat 2 byte :)
sumber
systeminfo|find "4012212"
untuk -2 byte.Powershell 2.0, 142 byte
Di bawah ini berisi semua KB sejak Maret, tetapi kebutuhan diperluas dengan April, Mei KB karena masing-masing menggantikan semua sebelumnya.
sumber
(Get-HotFix | where
ke(HotFix|where
(spasi dihapus, danGet-
dihapus.Powershell 5.1 134 Bytes
Sama seperti Mark Pippin tetapi mengubah Get-Hotfix ke Hotfix dan ke mana? menghemat 8 byte
Saya tidak bisa mendapatkannya lebih rendah dalam hitungan byte daripada jawaban Kevin
sumber
(HotFix|? HotFixID ...
untuk -2 byte.DISM , 40 byte
Penjelasan:
Output identitas paket jika itu diinstal, atau tidak ada yang lain.
Pada tangkapan layar di bawah ini, tambalan
4012212
diinstal, dan4012215
tidak.sumber