From 9b309996d9518471a67518aa307e74ea8eb05a3d Mon Sep 17 00:00:00 2001 From: the1812 Date: Tue, 5 Nov 2019 11:16:02 +0800 Subject: [PATCH 1/4] Add source code --- Block-List.en.md => Block-List.en-US.md | 0 README.en-US.md | 2 +- README.md | 2 +- src/MalwarePatch.sln | 22 + src/MalwarePatch/Ace.dll | Bin 0 -> 257024 bytes src/MalwarePatch/App.config | 6 + src/MalwarePatch/App.xaml | 41 ++ src/MalwarePatch/App.xaml.cs | 60 +++ .../AppIcons/01-disallow-small.ico | Bin 0 -> 107898 bytes src/MalwarePatch/AppIcons/02-allow-small.ico | Bin 0 -> 107323 bytes src/MalwarePatch/AppJumpList.cs | 37 ++ .../Assets/Icons.UserCertificates.xaml | 71 +++ src/MalwarePatch/Assets/Icons.xaml | 148 ++++++ src/MalwarePatch/Assets/certificate-map.json | 169 ++++++ src/MalwarePatch/Assets/display-names.json | 61 +++ .../Assets/malware-remote-info.json | 233 +++++++++ src/MalwarePatch/Certificates/2345 2019.6.cer | Bin 0 -> 1358 bytes .../Certificates/2345 256.2019.6.cer | Bin 0 -> 1373 bytes src/MalwarePatch/Certificates/2345 256.cer | Bin 0 -> 1301 bytes .../Certificates/2345 browser 256.cer | Bin 0 -> 1253 bytes .../Certificates/2345 browser.cer | Bin 0 -> 1355 bytes src/MalwarePatch/Certificates/2345.cer | Bin 0 -> 1355 bytes src/MalwarePatch/Certificates/360 256.cer | Bin 0 -> 1322 bytes .../Certificates/360 browser 2018.11.cer | Bin 0 -> 1342 bytes .../Certificates/360 browser 256.2018.11.cer | Bin 0 -> 1288 bytes src/MalwarePatch/Certificates/360 sd.cer | Bin 0 -> 1467 bytes src/MalwarePatch/Certificates/360.cer | Bin 0 -> 1376 bytes .../Certificates/6789 256.2019.4.cer | Bin 0 -> 1315 bytes src/MalwarePatch/Certificates/6789 256.cer | Bin 0 -> 1337 bytes src/MalwarePatch/Certificates/6789.cer | Bin 0 -> 1337 bytes .../Certificates/7654 note 2019.10.cer | Bin 0 -> 1324 bytes .../Certificates/7654 note 256.2019.10.cer | Bin 0 -> 1270 bytes .../Certificates/7654 note 256.cer | Bin 0 -> 1270 bytes src/MalwarePatch/Certificates/7654 note.cer | Bin 0 -> 1324 bytes src/MalwarePatch/Certificates/@Target.txt | 34 ++ .../Certificates/aliwangwang 2018.8.cer | Bin 0 -> 1360 bytes .../Certificates/aliwangwang 256.2018.8.cer | Bin 0 -> 1306 bytes .../baidu browser 256.2018.7.8.cer | Bin 0 -> 1336 bytes .../Certificates/baidu browser.2018.7.8.cer | Bin 0 -> 1316 bytes .../Certificates/baidu browser.cer | Bin 0 -> 1351 bytes .../Certificates/baidu download.cer | Bin 0 -> 1336 bytes .../Certificates/baidu netdisk 256.cer | Bin 0 -> 1336 bytes .../Certificates/baidu netdisk.cer | Bin 0 -> 1316 bytes src/MalwarePatch/Certificates/baidu.cer | Bin 0 -> 1253 bytes src/MalwarePatch/Certificates/baidusp.cer | Bin 0 -> 1351 bytes src/MalwarePatch/Certificates/baofeng 256.cer | Bin 0 -> 1238 bytes src/MalwarePatch/Certificates/baofeng.cer | Bin 0 -> 1237 bytes .../Certificates/donfang toutiao 256.cer | Bin 0 -> 1291 bytes .../Certificates/donfang toutiao.cer | Bin 0 -> 1345 bytes .../Certificates/driveTheLife 2019.6.cer | Bin 0 -> 1314 bytes .../Certificates/driveTheLife 256.2019.6.cer | Bin 0 -> 1314 bytes .../Certificates/driveTheLife 256.cer | Bin 0 -> 1314 bytes .../Certificates/driveTheLife.cer | Bin 0 -> 1368 bytes src/MalwarePatch/Certificates/funshion.cer | Bin 0 -> 1341 bytes .../grid verse (format factory) 2018.12.cer | Bin 0 -> 1304 bytes .../grid verse (format factory) 256.cer | Bin 0 -> 1326 bytes .../grid verse (format factory).cer | Bin 0 -> 1271 bytes .../Certificates/kingsoft 2019.6.cer | Bin 0 -> 1357 bytes .../Certificates/kingsoft 256.2019.6.cer | Bin 0 -> 1301 bytes .../Certificates/kingsoft 256.cer | Bin 0 -> 1301 bytes .../Certificates/kingsoft browser 256.cer | Bin 0 -> 1306 bytes .../Certificates/kingsoft browser.cer | Bin 0 -> 1361 bytes .../Certificates/kingsoft wps 256.cer | Bin 0 -> 1309 bytes .../Certificates/kingsoft wps.cer | Bin 0 -> 1363 bytes src/MalwarePatch/Certificates/kingsoft ws.cer | Bin 0 -> 1306 bytes src/MalwarePatch/Certificates/kingsoft.cer | Bin 0 -> 1355 bytes src/MalwarePatch/Certificates/kuaizip 256.cer | Bin 0 -> 1291 bytes src/MalwarePatch/Certificates/kuaizip.cer | Bin 0 -> 1345 bytes src/MalwarePatch/Certificates/kugou.cer | Bin 0 -> 1311 bytes src/MalwarePatch/Certificates/kuwo.cer | Bin 0 -> 1301 bytes src/MalwarePatch/Certificates/leshi 256.cer | Bin 0 -> 1327 bytes src/MalwarePatch/Certificates/leshi.cer | Bin 0 -> 1327 bytes src/MalwarePatch/Certificates/netease 256.cer | Bin 0 -> 1302 bytes .../Certificates/netease youdao.cer | Bin 0 -> 1340 bytes src/MalwarePatch/Certificates/netease.cer | Bin 0 -> 1302 bytes src/MalwarePatch/Certificates/pplive 256.cer | Bin 0 -> 1263 bytes src/MalwarePatch/Certificates/pplive.cer | Bin 0 -> 1317 bytes src/MalwarePatch/Certificates/pptv 2019.1.cer | Bin 0 -> 1310 bytes .../Certificates/pptv 256.2019.1.cer | Bin 0 -> 1274 bytes src/MalwarePatch/Certificates/pptv 256.cer | Bin 0 -> 1283 bytes src/MalwarePatch/Certificates/pptv.cer | Bin 0 -> 1337 bytes src/MalwarePatch/Certificates/qiyi 256.cer | Bin 0 -> 1339 bytes src/MalwarePatch/Certificates/qiyi.cer | Bin 0 -> 1393 bytes .../Certificates/rising 2018.9.cer | Bin 0 -> 1355 bytes .../Certificates/rising 2019.8.cer | Bin 0 -> 1365 bytes .../Certificates/rising 256.2018.9.cer | Bin 0 -> 1301 bytes .../Certificates/rising 256.2019.8.cer | Bin 0 -> 1380 bytes src/MalwarePatch/Certificates/rising 256.cer | Bin 0 -> 1321 bytes src/MalwarePatch/Certificates/rising.cer | Bin 0 -> 1377 bytes .../Certificates/riyue (at) 256.cer | Bin 0 -> 1329 bytes src/MalwarePatch/Certificates/riyue (at).cer | Bin 0 -> 1611 bytes .../Certificates/ruanmei 256.2019.1.cer | Bin 0 -> 1302 bytes src/MalwarePatch/Certificates/ruanmei 256.cer | Bin 0 -> 1307 bytes src/MalwarePatch/Certificates/ruanmei.cer | Bin 0 -> 1356 bytes .../Certificates/sogou 2019.10.cer | Bin 0 -> 1389 bytes .../Certificates/sogou 2019.8.cer | Bin 0 -> 1306 bytes .../Certificates/sogou 256.2019.10.cer | Bin 0 -> 1297 bytes .../Certificates/sogou 256.2019.8.cer | Bin 0 -> 1297 bytes src/MalwarePatch/Certificates/sogou 256.cer | Bin 0 -> 1242 bytes src/MalwarePatch/Certificates/sogou.cer | Bin 0 -> 1384 bytes .../Certificates/sohu 2018.12.cer | Bin 0 -> 1308 bytes src/MalwarePatch/Certificates/sohu.cer | Bin 0 -> 1376 bytes src/MalwarePatch/Certificates/taobao 256.cer | Bin 0 -> 1282 bytes src/MalwarePatch/Certificates/taobao.cer | Bin 0 -> 1336 bytes .../Certificates/tencent 2018.11.cer | Bin 0 -> 1375 bytes .../Certificates/tencent 256.2018.11.cer | Bin 0 -> 1321 bytes src/MalwarePatch/Certificates/tencent 256.cer | Bin 0 -> 1321 bytes src/MalwarePatch/Certificates/tencent.cer | Bin 0 -> 1375 bytes .../Certificates/thunder 2018.9.cer | Bin 0 -> 1468 bytes .../Certificates/thunder 256.2018.9.cer | Bin 0 -> 1468 bytes src/MalwarePatch/Certificates/thunder 256.cer | Bin 0 -> 1320 bytes .../Certificates/thunder accel 256.cer | Bin 0 -> 1643 bytes .../Certificates/thunder accel.cer | Bin 0 -> 1643 bytes .../thunder game 256.2018.7.8.cer | Bin 0 -> 1593 bytes .../Certificates/thunder game 256.cer | Bin 0 -> 1593 bytes .../Certificates/thunder game.2018.7.8.cer | Bin 0 -> 1593 bytes .../Certificates/thunder game.cer | Bin 0 -> 1593 bytes .../Certificates/thunder player 2018.12.cer | Bin 0 -> 1593 bytes .../thunder player 256.2018.12.cer | Bin 0 -> 1593 bytes .../Certificates/thunder player 256.cer | Bin 0 -> 1593 bytes .../Certificates/thunder player.cer | Bin 0 -> 1593 bytes src/MalwarePatch/Certificates/thunder.cer | Bin 0 -> 1369 bytes .../Certificates/xingcheng (at) 256.cer | Bin 0 -> 1309 bytes .../Certificates/xingcheng (at).cer | Bin 0 -> 1363 bytes .../Certificates/youku 2018.8.cer | Bin 0 -> 1360 bytes .../Certificates/youku 256.2018.8.cer | Bin 0 -> 1306 bytes src/MalwarePatch/Certificates/youku 256.cer | Bin 0 -> 1304 bytes src/MalwarePatch/Certificates/youku.cer | Bin 0 -> 1358 bytes src/MalwarePatch/Certificates/yy 2018.12.cer | Bin 0 -> 1234 bytes .../Certificates/yy 256.2018.12.cer | Bin 0 -> 1234 bytes src/MalwarePatch/Certificates/yy 256.cer | Bin 0 -> 1234 bytes src/MalwarePatch/Certificates/yy browser.cer | Bin 0 -> 1383 bytes src/MalwarePatch/Certificates/yy.cer | Bin 0 -> 1293 bytes src/MalwarePatch/CliTools/MalwareChecker.cs | 276 ++++++++++ src/MalwarePatch/CliTools/SilentUpdater.cs | 122 +++++ .../CliTools/UserCertificateCli.cs | 56 ++ .../Commands/BatchCheckCommand.cs | 35 ++ src/MalwarePatch/Commands/DirectCommand.cs | 19 + .../Commands/SaveChangesCommand.cs | 50 ++ .../Commands/UserCertificateCommand.cs | 48 ++ src/MalwarePatch/Languages/MainLanguage.cs | 98 ++++ src/MalwarePatch/Languages/UpdateLanguage.cs | 91 ++++ .../Languages/UserCertificateLanguage.cs | 60 +++ src/MalwarePatch/MalwarePatch.csproj | 338 ++++++++++++ src/MalwarePatch/MalwarePatch.ico | Bin 0 -> 1394798 bytes .../Models/BuiltInCertificates.cs | 81 +++ src/MalwarePatch/Models/CertificateAdapter.cs | 49 ++ src/MalwarePatch/Models/Certificates.cs | 18 + .../Models/UIElementToImageConverter.cs | 41 ++ src/MalwarePatch/Models/Updater.cs | 186 +++++++ src/MalwarePatch/Models/UserCertificate.cs | 91 ++++ src/MalwarePatch/Models/VersionChecker.cs | 39 ++ src/MalwarePatch/Properties/AssemblyInfo.cs | 55 ++ .../Properties/Resources.Designer.cs | 63 +++ src/MalwarePatch/Properties/Resources.resx | 117 +++++ .../Properties/Settings.Designer.cs | 26 + src/MalwarePatch/Properties/Settings.cs | 28 + src/MalwarePatch/Properties/Settings.settings | 7 + src/MalwarePatch/Properties/app.manifest | 69 +++ .../Styles/CertificateSwitch.xaml | 334 ++++++++++++ src/MalwarePatch/Styles/FlatTextBox.xaml | 390 ++++++++++++++ src/MalwarePatch/Styles/LightButton.xaml | 164 ++++++ src/MalwarePatch/Styles/LightScrollBar.xaml | 490 ++++++++++++++++++ .../Styles/LightScrollViewer.xaml | 33 ++ src/MalwarePatch/Styles/ToolButton.xaml | 374 +++++++++++++ src/MalwarePatch/UpdateID.txt | 6 + src/MalwarePatch/Windows/CheckWindow.xaml | 78 +++ src/MalwarePatch/Windows/CheckWindow.xaml.cs | 41 ++ src/MalwarePatch/Windows/DialogWindow.xaml | 85 +++ src/MalwarePatch/Windows/DialogWindow.xaml.cs | 43 ++ .../Windows/Main/MainViewModel.Commands.cs | 58 +++ .../Windows/Main/MainViewModel.cs | 120 +++++ src/MalwarePatch/Windows/Main/MainWindow.xaml | 379 ++++++++++++++ .../Windows/Main/MainWindow.xaml.cs | 35 ++ .../Update/UpdateViewModel.Commands.cs | 116 +++++ .../Windows/Update/UpdateViewModel.cs | 174 +++++++ .../Windows/Update/UpdateWindow.xaml | 271 ++++++++++ .../Windows/Update/UpdateWindow.xaml.cs | 66 +++ 178 files changed, 6204 insertions(+), 2 deletions(-) rename Block-List.en.md => Block-List.en-US.md (100%) create mode 100644 src/MalwarePatch.sln create mode 100644 src/MalwarePatch/Ace.dll create mode 100644 src/MalwarePatch/App.config create mode 100644 src/MalwarePatch/App.xaml create mode 100644 src/MalwarePatch/App.xaml.cs create mode 100644 src/MalwarePatch/AppIcons/01-disallow-small.ico create mode 100644 src/MalwarePatch/AppIcons/02-allow-small.ico create mode 100644 src/MalwarePatch/AppJumpList.cs create mode 100644 src/MalwarePatch/Assets/Icons.UserCertificates.xaml create mode 100644 src/MalwarePatch/Assets/Icons.xaml create mode 100644 src/MalwarePatch/Assets/certificate-map.json create mode 100644 src/MalwarePatch/Assets/display-names.json create mode 100644 src/MalwarePatch/Assets/malware-remote-info.json create mode 100644 src/MalwarePatch/Certificates/2345 2019.6.cer create mode 100644 src/MalwarePatch/Certificates/2345 256.2019.6.cer create mode 100644 src/MalwarePatch/Certificates/2345 256.cer create mode 100644 src/MalwarePatch/Certificates/2345 browser 256.cer create mode 100644 src/MalwarePatch/Certificates/2345 browser.cer create mode 100644 src/MalwarePatch/Certificates/2345.cer create mode 100644 src/MalwarePatch/Certificates/360 256.cer create mode 100644 src/MalwarePatch/Certificates/360 browser 2018.11.cer create mode 100644 src/MalwarePatch/Certificates/360 browser 256.2018.11.cer create mode 100644 src/MalwarePatch/Certificates/360 sd.cer create mode 100644 src/MalwarePatch/Certificates/360.cer create mode 100644 src/MalwarePatch/Certificates/6789 256.2019.4.cer create mode 100644 src/MalwarePatch/Certificates/6789 256.cer create mode 100644 src/MalwarePatch/Certificates/6789.cer create mode 100644 src/MalwarePatch/Certificates/7654 note 2019.10.cer create mode 100644 src/MalwarePatch/Certificates/7654 note 256.2019.10.cer create mode 100644 src/MalwarePatch/Certificates/7654 note 256.cer create mode 100644 src/MalwarePatch/Certificates/7654 note.cer create mode 100644 src/MalwarePatch/Certificates/@Target.txt create mode 100644 src/MalwarePatch/Certificates/aliwangwang 2018.8.cer create mode 100644 src/MalwarePatch/Certificates/aliwangwang 256.2018.8.cer create mode 100644 src/MalwarePatch/Certificates/baidu browser 256.2018.7.8.cer create mode 100644 src/MalwarePatch/Certificates/baidu browser.2018.7.8.cer create mode 100644 src/MalwarePatch/Certificates/baidu browser.cer create mode 100644 src/MalwarePatch/Certificates/baidu download.cer create mode 100644 src/MalwarePatch/Certificates/baidu netdisk 256.cer create mode 100644 src/MalwarePatch/Certificates/baidu netdisk.cer create mode 100644 src/MalwarePatch/Certificates/baidu.cer create mode 100644 src/MalwarePatch/Certificates/baidusp.cer create mode 100644 src/MalwarePatch/Certificates/baofeng 256.cer create mode 100644 src/MalwarePatch/Certificates/baofeng.cer create mode 100644 src/MalwarePatch/Certificates/donfang toutiao 256.cer create mode 100644 src/MalwarePatch/Certificates/donfang toutiao.cer create mode 100644 src/MalwarePatch/Certificates/driveTheLife 2019.6.cer create mode 100644 src/MalwarePatch/Certificates/driveTheLife 256.2019.6.cer create mode 100644 src/MalwarePatch/Certificates/driveTheLife 256.cer create mode 100644 src/MalwarePatch/Certificates/driveTheLife.cer create mode 100644 src/MalwarePatch/Certificates/funshion.cer create mode 100644 src/MalwarePatch/Certificates/grid verse (format factory) 2018.12.cer create mode 100644 src/MalwarePatch/Certificates/grid verse (format factory) 256.cer create mode 100644 src/MalwarePatch/Certificates/grid verse (format factory).cer create mode 100644 src/MalwarePatch/Certificates/kingsoft 2019.6.cer create mode 100644 src/MalwarePatch/Certificates/kingsoft 256.2019.6.cer create mode 100644 src/MalwarePatch/Certificates/kingsoft 256.cer create mode 100644 src/MalwarePatch/Certificates/kingsoft browser 256.cer create mode 100644 src/MalwarePatch/Certificates/kingsoft browser.cer create mode 100644 src/MalwarePatch/Certificates/kingsoft wps 256.cer create mode 100644 src/MalwarePatch/Certificates/kingsoft wps.cer create mode 100644 src/MalwarePatch/Certificates/kingsoft ws.cer create mode 100644 src/MalwarePatch/Certificates/kingsoft.cer create mode 100644 src/MalwarePatch/Certificates/kuaizip 256.cer create mode 100644 src/MalwarePatch/Certificates/kuaizip.cer create mode 100644 src/MalwarePatch/Certificates/kugou.cer create mode 100644 src/MalwarePatch/Certificates/kuwo.cer create mode 100644 src/MalwarePatch/Certificates/leshi 256.cer create mode 100644 src/MalwarePatch/Certificates/leshi.cer create mode 100644 src/MalwarePatch/Certificates/netease 256.cer create mode 100644 src/MalwarePatch/Certificates/netease youdao.cer create mode 100644 src/MalwarePatch/Certificates/netease.cer create mode 100644 src/MalwarePatch/Certificates/pplive 256.cer create mode 100644 src/MalwarePatch/Certificates/pplive.cer create mode 100644 src/MalwarePatch/Certificates/pptv 2019.1.cer create mode 100644 src/MalwarePatch/Certificates/pptv 256.2019.1.cer create mode 100644 src/MalwarePatch/Certificates/pptv 256.cer create mode 100644 src/MalwarePatch/Certificates/pptv.cer create mode 100644 src/MalwarePatch/Certificates/qiyi 256.cer create mode 100644 src/MalwarePatch/Certificates/qiyi.cer create mode 100644 src/MalwarePatch/Certificates/rising 2018.9.cer create mode 100644 src/MalwarePatch/Certificates/rising 2019.8.cer create mode 100644 src/MalwarePatch/Certificates/rising 256.2018.9.cer create mode 100644 src/MalwarePatch/Certificates/rising 256.2019.8.cer create mode 100644 src/MalwarePatch/Certificates/rising 256.cer create mode 100644 src/MalwarePatch/Certificates/rising.cer create mode 100644 src/MalwarePatch/Certificates/riyue (at) 256.cer create mode 100644 src/MalwarePatch/Certificates/riyue (at).cer create mode 100644 src/MalwarePatch/Certificates/ruanmei 256.2019.1.cer create mode 100644 src/MalwarePatch/Certificates/ruanmei 256.cer create mode 100644 src/MalwarePatch/Certificates/ruanmei.cer create mode 100644 src/MalwarePatch/Certificates/sogou 2019.10.cer create mode 100644 src/MalwarePatch/Certificates/sogou 2019.8.cer create mode 100644 src/MalwarePatch/Certificates/sogou 256.2019.10.cer create mode 100644 src/MalwarePatch/Certificates/sogou 256.2019.8.cer create mode 100644 src/MalwarePatch/Certificates/sogou 256.cer create mode 100644 src/MalwarePatch/Certificates/sogou.cer create mode 100644 src/MalwarePatch/Certificates/sohu 2018.12.cer create mode 100644 src/MalwarePatch/Certificates/sohu.cer create mode 100644 src/MalwarePatch/Certificates/taobao 256.cer create mode 100644 src/MalwarePatch/Certificates/taobao.cer create mode 100644 src/MalwarePatch/Certificates/tencent 2018.11.cer create mode 100644 src/MalwarePatch/Certificates/tencent 256.2018.11.cer create mode 100644 src/MalwarePatch/Certificates/tencent 256.cer create mode 100644 src/MalwarePatch/Certificates/tencent.cer create mode 100644 src/MalwarePatch/Certificates/thunder 2018.9.cer create mode 100644 src/MalwarePatch/Certificates/thunder 256.2018.9.cer create mode 100644 src/MalwarePatch/Certificates/thunder 256.cer create mode 100644 src/MalwarePatch/Certificates/thunder accel 256.cer create mode 100644 src/MalwarePatch/Certificates/thunder accel.cer create mode 100644 src/MalwarePatch/Certificates/thunder game 256.2018.7.8.cer create mode 100644 src/MalwarePatch/Certificates/thunder game 256.cer create mode 100644 src/MalwarePatch/Certificates/thunder game.2018.7.8.cer create mode 100644 src/MalwarePatch/Certificates/thunder game.cer create mode 100644 src/MalwarePatch/Certificates/thunder player 2018.12.cer create mode 100644 src/MalwarePatch/Certificates/thunder player 256.2018.12.cer create mode 100644 src/MalwarePatch/Certificates/thunder player 256.cer create mode 100644 src/MalwarePatch/Certificates/thunder player.cer create mode 100644 src/MalwarePatch/Certificates/thunder.cer create mode 100644 src/MalwarePatch/Certificates/xingcheng (at) 256.cer create mode 100644 src/MalwarePatch/Certificates/xingcheng (at).cer create mode 100644 src/MalwarePatch/Certificates/youku 2018.8.cer create mode 100644 src/MalwarePatch/Certificates/youku 256.2018.8.cer create mode 100644 src/MalwarePatch/Certificates/youku 256.cer create mode 100644 src/MalwarePatch/Certificates/youku.cer create mode 100644 src/MalwarePatch/Certificates/yy 2018.12.cer create mode 100644 src/MalwarePatch/Certificates/yy 256.2018.12.cer create mode 100644 src/MalwarePatch/Certificates/yy 256.cer create mode 100644 src/MalwarePatch/Certificates/yy browser.cer create mode 100644 src/MalwarePatch/Certificates/yy.cer create mode 100644 src/MalwarePatch/CliTools/MalwareChecker.cs create mode 100644 src/MalwarePatch/CliTools/SilentUpdater.cs create mode 100644 src/MalwarePatch/CliTools/UserCertificateCli.cs create mode 100644 src/MalwarePatch/Commands/BatchCheckCommand.cs create mode 100644 src/MalwarePatch/Commands/DirectCommand.cs create mode 100644 src/MalwarePatch/Commands/SaveChangesCommand.cs create mode 100644 src/MalwarePatch/Commands/UserCertificateCommand.cs create mode 100644 src/MalwarePatch/Languages/MainLanguage.cs create mode 100644 src/MalwarePatch/Languages/UpdateLanguage.cs create mode 100644 src/MalwarePatch/Languages/UserCertificateLanguage.cs create mode 100644 src/MalwarePatch/MalwarePatch.csproj create mode 100644 src/MalwarePatch/MalwarePatch.ico create mode 100644 src/MalwarePatch/Models/BuiltInCertificates.cs create mode 100644 src/MalwarePatch/Models/CertificateAdapter.cs create mode 100644 src/MalwarePatch/Models/Certificates.cs create mode 100644 src/MalwarePatch/Models/UIElementToImageConverter.cs create mode 100644 src/MalwarePatch/Models/Updater.cs create mode 100644 src/MalwarePatch/Models/UserCertificate.cs create mode 100644 src/MalwarePatch/Models/VersionChecker.cs create mode 100644 src/MalwarePatch/Properties/AssemblyInfo.cs create mode 100644 src/MalwarePatch/Properties/Resources.Designer.cs create mode 100644 src/MalwarePatch/Properties/Resources.resx create mode 100644 src/MalwarePatch/Properties/Settings.Designer.cs create mode 100644 src/MalwarePatch/Properties/Settings.cs create mode 100644 src/MalwarePatch/Properties/Settings.settings create mode 100644 src/MalwarePatch/Properties/app.manifest create mode 100644 src/MalwarePatch/Styles/CertificateSwitch.xaml create mode 100644 src/MalwarePatch/Styles/FlatTextBox.xaml create mode 100644 src/MalwarePatch/Styles/LightButton.xaml create mode 100644 src/MalwarePatch/Styles/LightScrollBar.xaml create mode 100644 src/MalwarePatch/Styles/LightScrollViewer.xaml create mode 100644 src/MalwarePatch/Styles/ToolButton.xaml create mode 100644 src/MalwarePatch/UpdateID.txt create mode 100644 src/MalwarePatch/Windows/CheckWindow.xaml create mode 100644 src/MalwarePatch/Windows/CheckWindow.xaml.cs create mode 100644 src/MalwarePatch/Windows/DialogWindow.xaml create mode 100644 src/MalwarePatch/Windows/DialogWindow.xaml.cs create mode 100644 src/MalwarePatch/Windows/Main/MainViewModel.Commands.cs create mode 100644 src/MalwarePatch/Windows/Main/MainViewModel.cs create mode 100644 src/MalwarePatch/Windows/Main/MainWindow.xaml create mode 100644 src/MalwarePatch/Windows/Main/MainWindow.xaml.cs create mode 100644 src/MalwarePatch/Windows/Update/UpdateViewModel.Commands.cs create mode 100644 src/MalwarePatch/Windows/Update/UpdateViewModel.cs create mode 100644 src/MalwarePatch/Windows/Update/UpdateWindow.xaml create mode 100644 src/MalwarePatch/Windows/Update/UpdateWindow.xaml.cs diff --git a/Block-List.en.md b/Block-List.en-US.md similarity index 100% rename from Block-List.en.md rename to Block-List.en-US.md diff --git a/README.en-US.md b/README.en-US.md index 6ad8ee1..ee5d161 100644 --- a/README.en-US.md +++ b/README.en-US.md @@ -32,7 +32,7 @@ Currently this app only store new version file as `__mwp.exe` in the same direct - 简体中文 ## Block Lists -- [English](Block-List.en.md) +- [English](Block-List.en-US.md) - [简体中文](Block-List.zh-CN.md) ## Example diff --git a/README.md b/README.md index 0f640d9..015a04a 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ ## 屏蔽列表 - [简体中文](Block-List.zh-CN.md) -- [English](Block-List.en.md) +- [English](Block-List.en-US.md) ## 例子 ### 屏蔽前 diff --git a/src/MalwarePatch.sln b/src/MalwarePatch.sln new file mode 100644 index 0000000..0c99abe --- /dev/null +++ b/src/MalwarePatch.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26430.16 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MalwarePatch", "MalwarePatch\MalwarePatch.csproj", "{769D2F79-D71B-4F5F-A61F-B1EF3A4C7414}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {769D2F79-D71B-4F5F-A61F-B1EF3A4C7414}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {769D2F79-D71B-4F5F-A61F-B1EF3A4C7414}.Debug|Any CPU.Build.0 = Debug|Any CPU + {769D2F79-D71B-4F5F-A61F-B1EF3A4C7414}.Release|Any CPU.ActiveCfg = Release|Any CPU + {769D2F79-D71B-4F5F-A61F-B1EF3A4C7414}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/src/MalwarePatch/Ace.dll b/src/MalwarePatch/Ace.dll new file mode 100644 index 0000000000000000000000000000000000000000..929bde439eb2ac370c4b0635529098bbc430e97b GIT binary patch literal 257024 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 q*B~o3iO=&QUv?Hd&f@d^;y+Cd(7W3EbqnFhv7N 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%0AwzsI)bfzOy3fOJ@JGdQ!U{xdU{%=k0So2mn_Or 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 literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/App.config b/src/MalwarePatch/App.config new file mode 100644 index 0000000..ecdcf8a --- /dev/null +++ b/src/MalwarePatch/App.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/MalwarePatch/App.xaml b/src/MalwarePatch/App.xaml new file mode 100644 index 0000000..c0918c5 --- /dev/null +++ b/src/MalwarePatch/App.xaml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/MalwarePatch/App.xaml.cs b/src/MalwarePatch/App.xaml.cs new file mode 100644 index 0000000..0635216 --- /dev/null +++ b/src/MalwarePatch/App.xaml.cs @@ -0,0 +1,60 @@ +using MalwarePatch.CliTools; +using MalwarePatch.Languages; +using MalwarePatch.Models; +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Threading; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Shell; + +namespace MalwarePatch +{ + public partial class App : Application + { + protected override void OnStartup(StartupEventArgs e) + { + AppDomain.CurrentDomain.AssemblyResolve += assemblyResolveHandler; + //StartupUri = new Uri("MainWindow.xaml", UriKind.RelativeOrAbsolute); + base.OnStartup(e); + // CultureInfo.CurrentUICulture = new CultureInfo("en-US"); + AppJumpList.CreateJumpList(); +#if DEBUG + File.AppendAllText($"args.txt", string.Join(" ", e.Args)); +#endif + if (SilentUpdater.TryParse(e.Args) || + UserCertificateCli.TryParse(e.Args) || + MalwareChecker.TryParse(e.Args)) + { + Shutdown(); + } + else + { + Updater.InstallUpdateAndRun(this, e.Args); + } + } + static Assembly assemblyResolveHandler(object s, ResolveEventArgs e) + { + var dllName = new AssemblyName(e.Name).Name + ".dll"; + var assembly = Assembly.GetExecutingAssembly(); + var resourceName = assembly.GetManifestResourceNames().FirstOrDefault(name => name.EndsWith(dllName)); + if (resourceName == null) + { + return null; + } + using (var stream = assembly.GetManifestResourceStream(resourceName)) + { + var assemblyData = new byte[stream.Length]; + stream.Read(assemblyData, 0, assemblyData.Length); + return Assembly.Load(assemblyData); + } + } + } +} diff --git a/src/MalwarePatch/AppIcons/01-disallow-small.ico b/src/MalwarePatch/AppIcons/01-disallow-small.ico new file mode 100644 index 0000000000000000000000000000000000000000..a402d9ba2947ff065d5399e9bcdcf091f9bfac0a GIT binary patch literal 107898 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 literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/AppJumpList.cs b/src/MalwarePatch/AppJumpList.cs new file mode 100644 index 0000000..a924f76 --- /dev/null +++ b/src/MalwarePatch/AppJumpList.cs @@ -0,0 +1,37 @@ +using MalwarePatch.Languages; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Shell; + +namespace MalwarePatch +{ + static class AppJumpList + { + public static void CreateJumpList() + { + var jumpList = new JumpList(); + var language = new MainLanguage(); + jumpList.JumpItems.Add(new JumpTask + { + Title = language[MainLanguage.Keys.DisallowProgram], + Arguments = "--disallow", + Description = language[MainLanguage.Keys.DisallowProgramDescription], + IconResourceIndex = 1, + }); + jumpList.JumpItems.Add(new JumpTask + { + Title = language[MainLanguage.Keys.AllowProgram], + Arguments = "--allow", + Description = language[MainLanguage.Keys.AllowProgramDescription], + IconResourceIndex = 2, + }); + jumpList.ShowFrequentCategory = false; + jumpList.ShowRecentCategory = false; + JumpList.SetJumpList(Application.Current, jumpList); + } + } +} diff --git a/src/MalwarePatch/Assets/Icons.UserCertificates.xaml b/src/MalwarePatch/Assets/Icons.UserCertificates.xaml new file mode 100644 index 0000000..2bd0e51 --- /dev/null +++ b/src/MalwarePatch/Assets/Icons.UserCertificates.xaml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/MalwarePatch/Assets/Icons.xaml b/src/MalwarePatch/Assets/Icons.xaml new file mode 100644 index 0000000..4b81a1f --- /dev/null +++ b/src/MalwarePatch/Assets/Icons.xaml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/MalwarePatch/Assets/certificate-map.json b/src/MalwarePatch/Assets/certificate-map.json new file mode 100644 index 0000000..585e3b5 --- /dev/null +++ b/src/MalwarePatch/Assets/certificate-map.json @@ -0,0 +1,169 @@ +{ + "360": [ + "360.cer", + "360 256.cer", + "360 sd.cer", + "360 browser 2018.11.cer", + "360 browser 256.2018.11.cer" + ], + "2345": [ + "2345.cer", + "2345 256.cer", + "2345 browser.cer", + "2345 browser 256.cer", + "2345 2019.6.cer", + "2345 256.2019.6.cer" + ], + "6789": [ + "6789.cer", + "6789 256.cer", + "6789 256.2019.4.cer" + ], + "Baidu": [ + "baidu.cer", + "baidusp.cer", + "baidu browser.cer", + "baidu download.cer", + "baidu browser.2018.7.8.cer", + "baidu browser 256.2018.7.8.cer", + "baidu netdisk.cer", + "baidu netdisk 256.cer" + ], + "Baofeng": [ + "baofeng.cer", + "baofeng 256.cer" + ], + "DongfangToutiao": [ + "donfang toutiao.cer", + "donfang toutiao 256.cer" + ], + "DriverLife": [ + "driveTheLife.cer", + "driveTheLife 256.cer", + "driveTheLife 2019.6.cer", + "driveTheLife 256.2019.6.cer" + ], + "Funshion": [ + "funshion.cer" + ], + "FormatFactory": [ + "grid verse (format factory).cer", + "grid verse (format factory) 256.cer", + "grid verse (format factory) 2018.12.cer" + ], + "HeiNote": [ + "7654 note.cer", + "7654 note 256.cer", + "7654 note 2019.10.cer", + "7654 note 256.2019.10.cer" + ], + "KuaiZip": [ + "kuaizip.cer", + "kuaizip 256.cer" + ], + "Kingsoft": [ + "kingsoft.cer", + "kingsoft 256.cer", + "kingsoft ws.cer", + "kingsoft browser.cer", + "kingsoft browser 256.cer", + "kingsoft wps.cer", + "kingsoft wps 256.cer", + "kingsoft 2019.6.cer", + "kingsoft 256.2019.6.cer" + ], + "Kugou": [ + "kugou.cer" + ], + "Kuwo": [ + "kuwo.cer" + ], + "LeTV": [ + "leshi.cer", + "leshi 256.cer" + ], + "PPTV": [ + "pptv.cer", + "pptv 256.cer", + "pptv 2019.1.cer", + "pptv 256.2019.1.cer", + "pplive.cer", + "pplive 256.cer" + ], + "iQIYI": [ + "qiyi.cer", + "qiyi 256.cer" + ], + "Rising": [ + "rising.cer", + "rising 256.cer", + "rising 2018.9.cer", + "rising 256.2018.9.cer", + "rising 2019.8.cer", + "rising 256.2019.8.cer" + ], + "Riyue": [ + "riyue (at).cer", + "riyue (at) 256.cer", + "xingcheng (at).cer", + "xingcheng (at) 256.cer" + ], + "Ruanmei": [ + "ruanmei.cer", + "ruanmei 256.cer", + "ruanmei 256.2019.1.cer" + ], + "Sogou": [ + "sogou.cer", + "sogou 256.cer", + "sogou 2019.8.cer", + "sogou 256.2019.8.cer", + "sogou 2019.10.cer", + "sogou 256.2019.10.cer" + ], + "Sohu": [ + "sohu.cer", + "sohu 2018.12.cer" + ], + "Taobao": [ + "taobao.cer", + "taobao 256.cer", + "aliwangwang 2018.8.cer", + "aliwangwang 256.2018.8.cer" + ], + "Tencent": [ + "tencent.cer", + "tencent 256.cer", + "tencent 2018.11.cer", + "tencent 256.2018.11.cer" + ], + "Thunder": [ + "thunder.cer", + "thunder 256.cer", + "thunder 2018.9.cer", + "thunder 256.2018.9.cer", + "thunder player.cer", + "thunder player 256.cer", + "thunder game.cer", + "thunder game 256.cer", + "thunder game.2018.7.8.cer", + "thunder game 256.2018.7.8.cer", + "thunder accel.cer", + "thunder accel 256.cer", + "thunder player 2018.12.cer", + "thunder player 256.2018.12.cer" + ], + "Youku": [ + "youku.cer", + "youku 256.cer", + "youku 2018.8.cer", + "youku 256.2018.8.cer" + ], + "YY": [ + "yy.cer", + "yy 256.cer", + "yy browser.cer", + "yy 2018.12.cer", + "yy 256.2018.12.cer" + ] +} diff --git a/src/MalwarePatch/Assets/display-names.json b/src/MalwarePatch/Assets/display-names.json new file mode 100644 index 0000000..92f4df9 --- /dev/null +++ b/src/MalwarePatch/Assets/display-names.json @@ -0,0 +1,61 @@ +{ + "en-US": { + "360": "360", + "2345": "2345", + "6789": "6789", + "Baidu": "Baidu", + "Baofeng": "Baofeng Video", + "DongfangToutiao": "Toutiao Video", + "DriverLife": "Driver Life", + "Funshion": "Funshion", + "FormatFactory": "Format Factory", + "HeiNote": "Hei Note", + "KuaiZip": "Kuai Zip", + "Kingsoft": "Kingsoft", + "Kugou": "Kugou", + "Kuwo": "Kuwo", + "LeTV": "LeTV", + "PPTV": "PPTV", + "iQIYI": "iQIYI", + "Rising": "Rising", + "Riyue": "Adware", + "Ruanmei": "Ruanmei", + "Sogou": "Sogou", + "Sohu": "Sohu", + "Taobao": "Taobao/UC", + "Tencent": "Tencent", + "Thunder": "Thunder", + "Youku": "Youku", + "YY": "YY" + }, + "zh-CN": { + "360": "360", + "2345": "2345", + "6789": "6789", + "Baidu": "百度", + "Baofeng": "暴风影音", + "DongfangToutiao": "头条视频", + "DriverLife": "驱动人生", + "Funshion": "风行", + "FormatFactory": "格式工厂", + "HackedFlash": "病毒版Flash", + "HeiNote": "小黑记事本", + "KuaiZip": "快压", + "Kingsoft": "金山", + "Kugou": "酷狗", + "Kuwo": "酷我", + "LeTV": "乐视", + "PPTV": "PPTV", + "iQIYI": "爱奇艺", + "Rising": "瑞星", + "Riyue": "广告下载器", + "Ruanmei": "软媒", + "Sogou": "搜狗", + "Sohu": "搜狐", + "Taobao": "淘宝/UC", + "Tencent": "腾讯", + "Thunder": "迅雷", + "Youku": "优酷", + "YY": "YY" + } +} diff --git a/src/MalwarePatch/Assets/malware-remote-info.json b/src/MalwarePatch/Assets/malware-remote-info.json new file mode 100644 index 0000000..ec54b5f --- /dev/null +++ b/src/MalwarePatch/Assets/malware-remote-info.json @@ -0,0 +1,233 @@ +{ + "360": { + "fixed": [ + "https://dl.360safe.com/inst.exe", + "https://dl.360safe.com/se/360se_setup.exe", + "https://dl.360safe.com/inst_safe_se.exe", + "https://dl.360safe.com/360safe_cq.exe", + "http://down.360safe.com/bizhi/360wallpaper_baidu.exe", + "http://cdn-file-ssl-bizhi.ludashi.com/pc/appstore/huanliang/360wallpaper_360se.exe", + "http://down.360safe.com/bizhi/360wallpaper_bird.exe" + ], + "match": [ + { + "url": "http://sd.360.cn/", + "regex": "href=\"(http://down.360safe.com/360sd/.*?.exe)", + "group": 1 + } + ] + }, + "2345": { + "fixed": [], + "match": [ + { + "url": "http://ie.2345.com/chrome/freecall/", + "regex": "'href'\\s*:\\s*'(.*?[^beta]\\.exe)',", + "group": 1 + }, + { + "url": "http://safe.2345.cc/", + "regex": "downl[ao][ao]dUrl\" href=\"(.*?)\"", + "group": 1 + } + ] + }, + "Baidu": { + "fixed": [], + "match": [] + }, + "Baofeng": { + "fixed": [], + "match": [ + { + "url": "http://home.baofeng.com/", + "regex": "立即下载", + "group": 2 + } + ] + }, + "DongfangToutiao": { + "fixed": [ + "http://kan.eastday.com/download/" + ], + "match": [] + }, + "DriverLife": { + "fixed": [], + "match": [ + { + "url": "http://www.160.com/", + "regex": "href=\"(http://file1.updrv.com/soft/dtl8.*?.exe)", + "group": 1 + } + ] + }, + "FormatFactory": { + "fixed": [ + "http://down.pcgeshi.com/FormatFactory_setup.exe" + ], + "match": [] + }, + "HeiNote": { + "fixed": [], + "match": [ + { + "url": "http://heinote.7654.com/", + "regex": "href=\"(http://d\\.heinote\\.com/downloads/.*?)\"", + "group": 1 + } + ] + }, + "KuaiZip": { + "fixed": [], + "match": [ + { + "url": "http://www.kuaizip.com/", + "regex": "href=\"(http://dl\\.kkdownload\\.com/.*.exe)", + "group": 1 + } + ] + }, + "Kingsoft": { + "fixed": [], + "match": [ + { + "url": "http://www.ijinshan.com/", + "regex": "top_down_btn.*href=\"(.*?)\"", + "group": 1 + }, + { + "url": "https://www.liebao.cn/", + "regex": "class=\"btn10192\".*href=\"(.*?)\"", + "group": 1 + }, + { + "url": "http://www.wps.cn/", + "regex": "class=\"btn btn-lg\"\\s*href=\"(.*?)\"\\s*onclick.*?WPS Office 2019 PC", + "group": 1 + } + ] + }, + "Kugou": { + "fixed": [ + "http://download.kugou.com/download/kugou_pc" + ], + "match": [] + }, + "Kuwo": { + "fixed": [ + "http://down.kuwo.cn/mbox/kwmusic_web_4.exe" + ], + "match": [] + }, + "PPTV": { + "fixed": [ + "http://app.aplus.pptv.com/minisite/download/" + ], + "match": [] + }, + "iQIYI": { + "fixed": [ + "http://dl.static.iqiyi.com/hz/IQIYIsetup_app.exe" + ], + "match": [] + }, + "Rising": { + "fixed": [], + "match": [ + { + "url": "http://www.rising.com.cn/service/javascript/RsDownProVer.js", + "regex": "var RsPcV17Url=\"(.*)\"", + "group": 1 + } + ] + }, + "Ruanmei": { + "fixed": [], + "match": [ + { + "url": "http://mofang.ruanmei.com/", + "regex": "class=\"down\".*href=\"(.*?)\".*class=\"down_btn\"", + "group": 1 + } + ] + }, + "Sogou": { + "fixed": [], + "match": [ + { + "url": "https://pinyin.sogou.com/", + "regex": "banner0_link2.*href=\"(.*?)\"", + "group": 1 + }, + { + "url": "https://ie.sogou.com/", + "regex": "nav=\"download\".*href=\"(.*?)\"", + "group": 1 + } + ] + }, + "Sohu": { + "fixed": [], + "match": [ + { + "url": "https://tv.sohu.com/app/?x=4", + "regex": "href=\"(.*?)\".*btn-dwn", + "group": 1 + } + ] + }, + "Taobao": { + "fixed": [ + "https://alimarket.taobao.com/markets/qnww/aliww-download?wh_from=win" + ], + "match": [] + }, + "Tencent": { + "fixed": [], + "match": [ + { + "url": "http://im.qq.com/pcqq/", + "regex": "href=\"(.*?)\".*class=\"download\"", + "group": 1 + }, + { + "url": "https://office.qq.com/download.html", + "regex": "href=\"(.*?)\".*tim.downloads.windows", + "group": 1 + }, + { + "url": "https://guanjia.qq.com/", + "regex": "href=\"(.*?)\".*banner_download", + "group": 1 + } + ] + }, + "Thunder": { + "fixed": [ + "http://down.sandai.net/XLNetAcc/XLNetAccSetup.exe" + ], + "match": [ + { + "url": "http://dl.xunlei.com", + "regex": "href=\"(http://down.sandai.net/thunderx/.*?.exe)", + "group": 1 + }, + { + "url": "http://dl.xunlei.com", + "regex": "href=\"(http://xmp.down.sandai.net/.*?.exe)", + "group": 1 + } + ] + }, + "YY": { + "fixed": [], + "match": [ + { + "url": "http://www.yy.com/web/pcyy_download/", + "regex": "window\\.location\\.href=\"(.*?)\"", + "group": 1 + } + ] + } +} diff --git a/src/MalwarePatch/Certificates/2345 2019.6.cer b/src/MalwarePatch/Certificates/2345 2019.6.cer new file mode 100644 index 0000000000000000000000000000000000000000..258f5bec45942e80c792f6bdcca6aa5adb77e591 GIT binary patch literal 1358 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 Tz<2L^z8lXuH%r#puy8p5g9p@P literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/2345.cer b/src/MalwarePatch/Certificates/2345.cer new file mode 100644 index 0000000000000000000000000000000000000000..9acc9a35d2ac8687d6793fb8fa5162f0c5a6c162 GIT binary patch literal 1355 zcmXqLVs$rYV$ol~%*4pVBv8t3kZv&LbI-~Tb!<;de&09XW#iOp^Jx3d%gD&e%3#pA z#gN;8lZ`o)g-w_#G}utwKorE`66Om_Ey@heOwZF%@XSlrGn6-w1xauVi@_umLW)X@ zOBDQ4OUm<$vJI^bEFlVvLQ;!zixu+I6iSOz6%tDnGD=DcimmkZ%gf94%7CU815MRS z&d=2^Do9k&NY*qoFw`^90cmCyR)w4HoRe5wtYEC*oS%}a0CGrXUb=#jfuVtdv!j8W zIIp3(fw_T+0T@I9xt0cIMn*=)rk19bQ3j1Gki6yWXDDdE4>F&Fha)&6F)uwMF%u@l zjwEDcU;t9Z#iI#RrC?-iVyfVqpOl%Cst}TzoROEGlb>D*bd;Wsf=@|`9?TkU9wyHa zL#P4FBp6`O#HfTEDU7TP%uS5^3_x)%rY1&4hIgAzzS_F(>x~vwQE36aZJ}owWInL| zUB4{$1xw5CoYj}JHeT7Z>hYFCJTWYjCkc7~*zieqSIh#@DKWP8RokBG8eC^tRvsGs z)9e@9F4uqMFMpNHkI)az3*E4)BF}i=$D0q^hI=w z84DYrugcrMEUOLVtd9L}*wuJ?k;Cc5-WFGbx_Xm; zIW#xFc9`vu!6Mc&sd$CliDtExpDgBXSzNg*=fsK0+-q6Sy#0~B-QT*%=(VQ0qrjTP z{=GX7HLHqBYIEIgh?ui+qmnJlMBZ(gY-^WBWcs|m5cOU~@#<72W=00a#Z8Q{zz~T9 zCskQt7A6A*13q9}$?`KY{%2ufW@2wJ&<644SyT*^3=|f~Es$xG0wp|Px+_l8E3V8< zP6DSnASbyf#~=};Sb-(VAi^MwjV-;AhmnQRz{fzDjYFFam@(Ly7{$b4={5yPdvZas zfht@PlYt};R%O7HZ6FM?LY0NbfD5Lcnb{y5#%5$>@iy=@kcaUN7~6zV-J1e(uYnp| z0TUh%l>iL_+NR7RVIbBZa(?E@SJi4?yifM^U;n_W_Wtpu<#WN=SC)@Oj78+Q!j0#D zrq1rs1SNvgb^CLFgfo0Y|aZS@z?$rg{) z8mgU?*=oEpQ+3vEyDGTwZAf|1pM$Gf-SteDv(G$sYEF9oI@?@%|D3B^8_x<%7LjpU zs8^l7y5V_N)tU1WUj9@5-?ZTSbFRUz%*^=so|R9fHhI_|S*%n4@WGtdcVG9&c65JM z@Bh5?0lVzJ0IgeFL$a5*?63YTQ76^p_9%1zedP-8N&i(=9nmu`zB`5AaoWEw)yfkY oTkF1?h9qq0=$XI9=Ws}rFz*&Ng{<0r3#+xF>OUrL)%NfQ0Grm(djJ3c literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/360 256.cer b/src/MalwarePatch/Certificates/360 256.cer new file mode 100644 index 0000000000000000000000000000000000000000..2aeaa8a68f2294f8bf5a6120ed902bb5cc7927a5 GIT binary patch literal 1322 zcmXqLVpTI}V&PlB%*4pVB%o|DG4V;1V)rG#yw+I{1%nNE**LY@JlekVGBR?rG8ohw zavN~6F^96S2{VNT8_F6;gE(BmBEglpiFqZd$qLT-MFsgqi6xo&d4}=^vLI=0VKKOL zNKt8ViGp8hNqK%zwxNN69!LSRusU3Ub53G$v4XKeu!p0OsTt6?lvIV_%=Em>ymSR; zM*}%=UPDtuBO?m~Fo*(jEe(u~ER2jzEln+>3>tSKxzO3qP{4o>WCMpVyHjdr7SIrw z2s=W=)W8_*3lW{b%#8ee1!FSF?k7B=B6|g z6|UQSbAS8(K3Q|##UiiD=%a)n{}qN;K1oS`d?gN6F*@l#GXC)3VTzKy-Na8tA?b^x zjZ_ayT(ex{x|E~uQ;H?e$K9%r3c@a)j$U5$<#U_Mx#?veoimobYGggf8#;T(woR8x zAD=p&%f!gMxQQ_d7#?xpR46OV!eqbzj$v7TM#ldvEX+*o4F=l4Xpxm?Q87?5P*@8PH6LBZ2RHL$S%%o z;A5c7#-Yu|$jZvj#3&{XGNTx1ND7h}$pys*s&GY229i8jl@%2v8VG~zQDxyV;DV`V zW;O_iu^AazybU}JG59OtTLDP-#4U zeQoo5J?%56wztU@rGYc1EFX&)i%8Q3^?IMXs{*St>Mpha{1-^Hse1dWgGd}{Bm(%$Kj_-6U6TW(+0 z&XbPZDQRlq_$^p?w&$gyrd#qcpXc53EUvctdft#c;+SR8Oj^Tf+VlpiWk6Glfu`yu z=jZAd6(lNXBx@QP80s15fHX4;tHMop&PgmTRxnm@&QD2I068QxFI~aNz|cU!+0j5w zoY&C8z|zRV01TqUd5sJVfRaYWrk19bQ3j23k-X*XXDDF62Qr_7hutYPGYe=EOoSaF zqGg}~Qp3fg2vwsHn3++k5R#glk(Zy7pI!-cik^;wPf3cNp^$+9*t0yG&lgO2+CTAS z^9n<#er6){8#FO0AjbqFD+6;ABQFC`oP()}k&$81tlmSM1>g6}MpeJ|uuMWOp@0!%#3R`RwTw}>B!~N8uH)6SDdTdyo6Z`5r z(=v=rPG+&}d2{ZO8`IYfOMlO8+I4J;w#wp?RC`H3!RH;7r*1r)tg(|dckhBJj8oz# zxn}L)mj0R-{WxXbKY@VU1)H_mxt3VA*nBmTUHI_Yw^@c-+f6uqymysOw+Wf{ubs6#B?E7%)v!5#oh$u} zH-^WoquEY!bA#t>uQ>Zo&x3q9>%OQZI!KGHIP5#)*NexW`9Hp`W@2Ps+{73Q439`~ z>Xa2`VKQIK_W=80!x%Zgh3b^TY4i8BMYN}kAX59hc+89FR(K)iiyLLY6_C}=QfP$+Gg?f>j~ntg3th)3^H0pXM@KP{-`YgB8biZ_Jx3wlA~8weZ%7DLC3 literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/360 browser 256.2018.11.cer b/src/MalwarePatch/Certificates/360 browser 256.2018.11.cer new file mode 100644 index 0000000000000000000000000000000000000000..377c09448aba171bb8e609d74a8ecff94b19495a GIT binary patch literal 1288 zcmXqLVr4OCVt%uLnTe5!Ng!I$>PTi)>bLDpwevhCrQ9*#W#iOp^Jx3d%gD&h%3x4$ z$Zf#M#vIDRCd?EXY$$6W4dQSKiv(BZCgzo-CM!7S7Zv0eC6;97=NZZy$bzJ~g~i~~ zAw{LdB?^A2CFS`=*@gxNdLRYN!s>7Z&N+$2#R|p>!5)rAre;9nQc@LyGt=`j^U@WZ z9S!8fc?~TLER8G-z#vMT*T}%Y$iUFZ*woV0GRmNFE|LqK{R{;R_&_#r@UT0jW@Z5m zfr+pqM6?Vvz`o#7gsM>p%*-fN2uV%O$ji^kPp<^JLQhA*rzAzsP{=?4>?Iz~=L@Dh z?VtFvd4(ZVKQj^f4VoAgki(Rbm4Ug5k(U7|&cW2g$jGp0R_`Isg75ofqbxVvn$`SR z)jvP&&x|z|YA!C}n;r@+I6T`;^=Wj-R|ns)cTMVVg)O!TuCZj6;eP7S8?jt6JvOY) ziGB5*X&J^QC$m`gygB#Cjp^%#rN8Gk?K-waTV-)cs=cJ2;PZ~kQ#T$?*4W9KyLZ79 z#wqcWT(fp?OMlIaew;GzpFlwFg3a3OTuUrlY`z-FE_`_H+blz^?IxT)-n&Yt+k{Me z*mw2E7qegY1-Vz>Q7F<_y(7d)H}mYS^5= z&Xs<~8^dGP(QGHVxxsU`SDbyP=Rv-lbzjsH9i+up9QK{@>&4^G{2$*|GchtRZeolD zhDRhgp~(ufFc~m_BT<&0k?}tZ3o{dYgMl_M5@h9BR1B016c)%WkZF_3C@Cqh($_C8 z(<`pbO-|BF&d&vLl8bT-5#o z7pj|Wj{0lTBW9+$bak9Taru9vouVEh_E#pgaf^sE-K#jXQ*`gC6LT%6oLJ!W;E)%G zuWw)3{CpApM_%fCat~SQ-ju3go+Hmv=X!g^{#~Lx?mYjPSD5(}rd2$fZ?`1u>V@dM z-!{5uG<_mBZ)x1uzxU?yCEMpT@2_XS^0$$N*~g?g^y-?_n}OxkBFmP#oGLQ^YCnJ9 zyS0A>XXq{oz4G?Y>DN;OdggvI+pMf<_cy4e^Mn2_f6F@py2lP!WrS;fEq_&Zb!kicc4LOACSU5iRD{;0@_%papL1~?^ZzLw&m0|h%=o_N?bqXeGw*c%1pr~hyNUn+ literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/360 sd.cer b/src/MalwarePatch/Certificates/360 sd.cer new file mode 100644 index 0000000000000000000000000000000000000000..d7aed1e8f9ba36cdbf4470b713a8ee71ba5eb95d GIT binary patch literal 1467 zcmXqLV%=`g#4>*YGZP~dlR)6!*gn@CT1)~T>z^D|HpwvHW#iOp^Jx3d%gD&e%3#pA z#gN;8lZ`o)g-w_#G}utwKorE`66Om_Ey@heOwZF%@XSlrGn6-w1xauVi@_umLW)X@ zOBDQ4OUm<$vJI^bEFlVvLQ;!zixu+I6iSOz6%tDnGD=DcimmkZ%gf94%7CU815MRS z&d=2^Do9k&NY*qoFw`^90cmCyR)w4HoRe5wtYEC*oS%}a0CGrXUb=#jfuVtdv!j8W zIIp3xfw7^X0T@I9xn@AFfswJPrKx3f~SiD%<;MkzM08I`NcqE5N3rX=47TMmSpDVDU=x*N*aiR^@|9Eq$X$R zDY>frx?vI=n&+(dN>Q;tt^_G`hqgX!ey==&4*;UVO1YXFy$*_7w_k$ekYLDgr7PM>^>C0E- z;Z1B+ZI@0{mdd(T`D~Ry!1*I8S1NvRUVfT3)#qj?x7|C3Ua#*TeZ(JxNnQEBI{4yk z9l4v$LTj7kIBJ)_6ENMqV%aVsC4p>*P3tGC$p)QCaH~vJ`2RzxS&&IO_O5@A&5H{T zVF#Xx|GE35_-rL3!!p~qnYo89Dw-=lZ?}s%cIwI>|1%MxEUWixwYc}hto*EaW`@F= zJZXWCVQLZQaz7W!vmCo%cKTw=Q?>TZ`WdJ8@nz3l;8DHt;h8P!ci1;v;Cw5{#LURR zxVVY28WLUtxbF&TV$#6TEiiYg0_0T)aQGqXV>5%uGa4u8-uK)FK0UkUNxFBn-qFM9$A#`Kns&i}%UC{_7uD)!sk8w0y3C zAR8ydk4`{G0mG0*z(9szy!+3u<>O}L;s#y zvxtkm!ZjHm)yo9e+s$z3^Nhb5`-o`|%lA7j>&(<5o^Abkcly@N%{$$dcfB;<@q1qB z?n#DKt$W@{cAn%hY!bUwm^9zeeO*c^({nj9Ua{@x3)m(VHL1mIV030kWu1EQ%o+B# z8aMB&B!te8d1KPL$FO+a&+VB)%T8}9%U^0{Cx2k2tXt*nNe>_HxYP1*q3_dRm8(kW z{PV)yMK(>Hw|vFiEn$!E?KQa^y)T8?Vv6FLvcx!_hf`*98wDEuN>ZP1_#%Hhi3jqLNMh=6 literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/360.cer b/src/MalwarePatch/Certificates/360.cer new file mode 100644 index 0000000000000000000000000000000000000000..6014bc281f1a69370fbaf2528227b1c248694e08 GIT binary patch literal 1376 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 literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/6789.cer b/src/MalwarePatch/Certificates/6789.cer new file mode 100644 index 0000000000000000000000000000000000000000..b9cbf119aa922559f94851cd6709a868bdf2da5a GIT binary patch literal 1337 zcmXqLVl_2rVv$|I%*4pVB;c>9{v$)-NZtm{_S!`UpDZ`vW#iOp^Jx3d%gD&h%3$DS z$Zf#M#vIDRCd}mQXDDSL0pf7+2!`heXQt;VI6Er%Waeg;q^20k8_0s>n0drta``E# z3LsUPdFeof26E!Oh870K1{Q{f#s)?vQ9!OG64#*dII3lq2IdgU3|=nod%9uPlU);E zY~B8BTKm(UX;1bnc)DuR`#l{`d!|3xwdVbv&S!HvU(THHv~|tX{vC!w1_B_h>^z(h z`KLRYU}7A|Vo)oXc}TYc6cn(a;$#%#PN~dsFf+HX)Jx7YXkt`C4oF5;2IeM4eg>d8 z7gG}>Bg3j)*UjHO-*Tfsa}Lv-$qSbS8~?sF2}yXRr|q@1*h0j=iWK7cG_c!x+_y-Z?)CMZ=3UaNyd@j z+9RuXbAO9v)VMOq-~Srh)5aP-)u#Qw7D~CRTXKF{B(Z$yz3&gJ#8juwUa<9+{aTY! z!GPMQmrYLD`UlTx?w=>Hpx|@oxleyO-@9%on!PaX^wMkYQtuZ`eX)G@o~7F(&IZJv zoMk>qc)kYvQ@+V(64tXnGFZUgea7JD17pcmYR}~bJ};LJ)UtW?XA$Fr=-J)M4Oi_f z4*prMd~c?oW3D7$Ywo(0Cv=&Z85tNCH!)5JhR9?C9$-|-3NtePXJIm6Ft7pf3hE{oCnthr49eL!wAmP0 zS=kvGS+Wf>4fJ4q1I9Kb6oVjo@{@}TbfLy2=jQ@b98|vn6WrpW)B>Q@CHX~_xGYXB zGLQ#3TbV_|K&(Ne`J(5XP>o3Qm30oyZ_X}q3t_cc1kN0?d@N!tA~OolAANF6@N(bx zEq{$mUjJt=)XO#C1L@}n1p*5*6MKU}G>EUj5@HZ!z`@3r-pIqq!U#-L+*&OejBVe_ znOGTFfR5!saQRpa)D2W&&Szp2lLUFU7!+{j94hV)gRu$w}n0jVrHZEYmu`o87 z+cJVIf+cNGDF95oj0~Hfee;=<%P*HX^VOa@9=2c)aXjR zAYUK5`&n+^>T^stroWUEH2%+%B>N~`zoYMw5&xPmCbrohKc~;W!MCMkZoBl~BKIf9 z|MhjAv-F!0-Ogx}?UWEzzLa57bZ1D-+tj;O7yM@Y@3Z=}no}XW(zWKMzwW1}e-_DQ z8A&+K@4M7gef8$$38z)3>we*W?fgY+RqDj^*|Rn0F^S0-g@*G4)qPv{=uq{=i<7Ix zZ<(}9?R*hxV{mDG-{JPw{xy=xRy=io|NFW=w)~j(rqw=3fJw6wP$c$B*A_?fs%Ld#vl0D9O2RsaA1 literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/7654 note 2019.10.cer b/src/MalwarePatch/Certificates/7654 note 2019.10.cer new file mode 100644 index 0000000000000000000000000000000000000000..1b306bc2dc65dc27845574a48520dd846600e3a7 GIT binary patch literal 1324 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 literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/7654 note 256.cer b/src/MalwarePatch/Certificates/7654 note 256.cer new file mode 100644 index 0000000000000000000000000000000000000000..8c18aa483ec451980354aedb0c36deb0fb9690fb GIT binary patch literal 1270 zcmXqLV)_C*_cCF*o2uvgAHX3q(K}mVUgg<+{C<+)MN$c{Gx*VqQsKS{5(T>16hzXx3Cyo zI;5zyxJ1D(wWK`1DBIA$Ko6vVSy&yez&R(exLCnhA=tyw$kYsITuQ1!aAta5W?s62 zv!j8WIIp3(p^=fL0T@I9xt0coMixfKrk19bQ3j3ONG^2tGZZx72id^R!x5a3n3tZB zm}#hMpbd63kIIuBUC*{|f4Xt%^V##C@16L3_nha;CqCmNUsF zx|ptLG%Oai-yvVOB1mS*r&mWrHHA7|4*s39k%6H$EAMgEmxIk$&c|r?_q)9EIQ)if zX6^6qKYvyK{t{f-D(x}(&W2=FK9Lvy@~SsXonx`xX;SLaV^0cCd}$DxwtgB%JoAEr zvZKMA=}e_-d&*skE%pAdNR;B*JvSmZv;ET3Gdk&8x7pQJw(1MaKXB9O^g@l*(M-q(x27J-)v8 zaND7a_0c(7U%uY;bGxdrk6|XKc)REJBNNLbPHbOwZO6|YKC4;Ue2+3QGB0joj0J{A zBsf{g3bQa7Fc|Ow<42aCk?}tZ3o{dY131297+G1_nHa^yLE4Lf z`csg!Cl?eOsKOO78A$SARaR7xXdn!-LY0NbfD5Lcnb{y5#%5$>@iy=@kcaUN7~6zV z-J1e(uYnp|0TUh%l>iL_+NR7RVIbBZGR->pL#6Tb^|j6K^|a5N+TJEtlm^aZvV1IJ zEFzBje3=cxT~Ch1M43ytS?piA@WprJ1PIK+zy!$1AmhpU-PTkHYn>)qE`b4(akh#nNZ z&bILh-|X0jwX5Df?!EAd`%hJ&(yyzQCp5CFxjWDAHNUy?y6Bxl!Urxk+%S@I;(vLm vIC*M`UdzPpFw@QVnHv|)bUpEL25aG_`TJ}FVg*xrE`>3<&wR3Ux=}a)0T|UX literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/7654 note.cer b/src/MalwarePatch/Certificates/7654 note.cer new file mode 100644 index 0000000000000000000000000000000000000000..b06b6451faf98e92868c5b2d580f42545c4e1fde GIT binary patch literal 1324 zcmXqLV%0EcVi8!t%*4pVBw)|_K+U{*Z+LrQ^BjeOzPkpzY@Awc9&O)w85vnw84Mb? z7;+nMvN4CUun9AT1{;bSh=Mp=!hB(=MVY~w>3KQ|o_Wc7hVlloAPH_^F_?rxNKt8V ziGp8hNqK%zwxP9wB}9QyNNQ1Tu|j^DLTPcTLSl(RMoCFQv6a4ld3m{B8PL>Xps9Mv z`MLT<1&In8$(n`+hI$4%AkECes&Lbta}tY-6^s>}^HWk4Kn}^wOII*5Ff>qbb~KO^ z=QT7pG%~U<0D~wX*V4ey$lS=-)Y8;4%Am0u$y?5ThJptCAoJOIID#`0^U^aCGYxeO zv_V2#JStCibUoX;{prT3&u7nnzIWpD-E*EVpZKh+;n|$dmoq0kZC&%Ue+SGsZXPDj z5SU(O;`ACcF)AR3J0mLta}y&k15liUsfm%1;eyixn+?h;J08Z`E@*diTh1h#=wiB} z(Xd$5eusSBiXfRKpI#ji)fDPH%?_TlNL2S_xSqW!)=Ey z)<@@TeffIV&+V$hK8Bf`;_aT>k4!9&II(@zwH-fq_^f7W^F7MM$h^3TF%}pek>Io_ zE6l=Vz+k`!j2~HkM#ldvEX+*o4dD2am1j{gP%=Qseepio*MI#3tJ?d=mzK{3=TBKa7BLnPM}5A`2H~zJ z$6}()CEP6buUz=zJ8}X9W_(}*WMr_ItJA%`LSx30O2uUlE`3aV!IWNm+L$-YY0D2+ zjpeuJY+A-1yC$U|ys>wl+^@+$pLAxNw3xozc<*+lSa;h3`Cdu(?G8fBT+uc<*H(%(FxMg8|yzlxXpWaYjE_u?!3DW;!H~EdF#%r0RTP!-|qkb literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/@Target.txt b/src/MalwarePatch/Certificates/@Target.txt new file mode 100644 index 0000000..286d506 --- /dev/null +++ b/src/MalwarePatch/Certificates/@Target.txt @@ -0,0 +1,34 @@ +360... +2345explorer/pcsafe +6789zip +aliwangwang +BaiduSd/BaiduAn/browser/netdisk +Baofeng +leTV +Donfang Video +driveTheLife +FormatFactory +Funshion +HeiNote +iQiYi +KuaiZip +Kingsoft Antivirus/Browser +Kugou +Kuwo +NetEase +PCMaster +PPTV +QQ/QQPCMgr/TIM +RisingSD +SogouPinyin/Explorer +SohuVA +Thunder player/game +YoukuClient +YouDao +YY + +Updated 08/13/2018 + +// Manual +Youku +Riyue diff --git a/src/MalwarePatch/Certificates/aliwangwang 2018.8.cer b/src/MalwarePatch/Certificates/aliwangwang 2018.8.cer new file mode 100644 index 0000000000000000000000000000000000000000..ed82e2717da9c82ab74e0af3fca7616cde12b289 GIT binary patch literal 1360 zcmXqLV)Zd-Vli33%*4pVB%t>FW=ynt&uz7chB%J0(*Fj$Y@Awc9&O)w85vnw84Mb? z7;+nMvN4CUun9AT1{;bSh=Mp=!hB(=MVY~w>3KQ|o_Wc7hVlloAPH_^F_?rxNKt8V ziGp8hNqK%zwxP9wB}9QyNNQ1Tu|j^DLTPcTLSl(RMoCFQv6a4ld3m{B8PL>Xps9Mv z`MLT<1&In8$(n`+hI$4%AkECes&Lbta}tY-6^s>}^HWk4Kn}^wOII*5Ff>qbb~KO^ z=QXr2Ff+0+0D~wX*V4ek$lS=-)Y8;4%Aj#AlDC}w3BOVV+b7Nlnhk%g@PAuLQbFPsgVu zMbD7OfD7z#9_AnyXP6nxB$;8*#HfTEGmNYZ%uS5^3_x)%rY1&4hU@0%8~&Kj5?Yql z-~Gel?*Sf*|03IqNk~Lchr;`bak4)0z^W#N)AECZf{&v|k&)Y&EY7Q7pYY z`^=-Or`=sey`AQy2CEp z3*5byt%`qshAyZ6+95vH&oH+OUO}%ww?sm0;bO&9qzid{dn^Iq=VQ3 z)raSVeI<|Hsp#MRKIDT!eq!saUEjX$ZjLBl#IC)i@$r^3jt~BOEY*6ht0C8Qay}C? zBLm~&CdOD`h(vBTu{RiKgZT0+Dh5gh3Jc^G$h1j; zQXeq!6{qPHSLP-sffF8(lU$TzkO)$&z!GH;VGzc~mfpz2$iisgW1!5&q0I)&9qdeu zV&bsGn}Vc0xuDoU6|RWMK#~WmGGOvH5C&PH$^uFwP(zuS4Z>k;Mn)EI15X2a7~g=g zO&Ha^DIoV6sKFI5;qg!j&>)~~$}AEFVhtkaXRdrzt@g$HWMBXF53FkMA75HN7o3M> z`B=nQMDl)5+qp}xd4AxJsPJu7<=jV)dzd39L15tkOoEIILH8C3E=*BoXJ_x0c&zDt zt>32O6K~~LMeFjq?Hc<#A9Jnq7dPg0T+z9rbdT1qiJ#LG<~?6_^?&@|X_r1R%yV7z z{=wI^wew68bDO=E)NIrXJk{;o*UBM!z}(o|@Zr2a?bBznvv;_56pQkfZ7<|L@vvd- za`iKwIycYVV4ExQS#X#0z7rFiE;KK?$m^?i`efa~q!*{Y^0ygHvh3P-e5La3UDG!P z_iSf7+59%}NJ(|r&v~Kk3XtcyQ`?o~~Wk-st_#Ib2 z{C&Q|)8wwV9XF$4PW%#%uvU44iK}?Zm-OYnjJo;V<8b?gHTe~+sn58aj^zOWF2K`> literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/aliwangwang 256.2018.8.cer b/src/MalwarePatch/Certificates/aliwangwang 256.2018.8.cer new file mode 100644 index 0000000000000000000000000000000000000000..6fcb9216d3d7b4c10063a511885f27692bf59508 GIT binary patch literal 1306 zcmXqLVihxJV*a;)nTe5!Ng!sWVXt6(&7zppbG{yTbG+hS=o#`DaDlzY!yM$|3^Rk7Br^<}7?qI2n30u%xrvdV0VvMJ)WpchaNYcT!yofm zLd(+nyMI{xJ-}me{9OHoL>7ftVOa-@E7c06?54kPocHbx!;ZL$B`STh&rSQN7r!BXT9c0=r{R9AIau>T2tbacs$n2L{xg8_G{ypt>$$h zilvulpLulkw7aXQx6_=|U=@R!wPt1WPKl)5*IXU2Zqa%9XAa+L1-G+VYlVMa{9p5I zz`ieKfxFkTRq@Zy(B;%$8>M%C)Y4e%@O5`*tNGbKHhT1@xgzOrCQH*HRQTZ z&Szp~WMEv}#25<B6 z$l`6_X&?{d8!)yBqq;W*FaBo-|K0g zIkmk_t|$$h5oP&U#8^b~eox!EORsr;;E$;AZB^ymM~{1$BPT&%HU}m_Muy2kepeM! zIyY+V=XWcq5poh@{%aug&|1%?cJd^>f^E0C!!B;{I20qp$#gWKu*LX_sb_4!9`wS2s~xOUl! z#~f82kGJP;4rV%i+T(-+pQr!#``M8aTtRd0$0!SJsx4_VGL5a9(eh#4`H+uZ>z7p) H2J8X=I8L{= literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/baidu browser 256.2018.7.8.cer b/src/MalwarePatch/Certificates/baidu browser 256.2018.7.8.cer new file mode 100644 index 0000000000000000000000000000000000000000..0b95df939c4ee67ab0ca09bb6897975ce37af7ab GIT binary patch literal 1336 zcmXqLVl^>nVv$+E%*4pV#G@@0yLNp}_}p0*g+C2=**LY@JlekVGBR?rG8jY|avN~6 zF^96S2{Spl8cG_7gE(Bm0`58aNr^eZndx~7d1boAiG~ISdLSugVRa-a=lqmZkebZA zbOmQe1zm+;4@VG+hS7(#V33zMVUpovilIrtb^8JL?G`5A!XTue=j zj0~IhZC1KcYBpcBWlI0c1r{+s^febw+$%U=mv42Mg=lf)$DQ14zk^o)VP13cwIQ2l z2g|DFcZ;)xO~*<%?A^IL$xOXH?rH;wVan>@Qvp^!mwiUA^W)xFT7j)pxm1; z?UmNj3&|1bxyNtrlslQEPs73`|;jzbBN16dds z7%>_dm>3wr%w%E|Qv;b<40K+3c{#d~MX3e(#hE4fMV0yn9BgdqjXXdzz?n)`n1#uJ z!N4A5g*=Oefti8H0;2^6ZF*1_CKu(P8;0&apzm@Fgh2+VvhWyi!JNd*Y#<8~(8JR}9we>IB4HrbAi{6;e9e@JCA!m?iksKY(et#I zTor-n<>HFzE-CY)fE38{8TJ}6&^yXC29K-f4 z7mU*bB($ek-EGl7m)CoSfAj77A1r2T|2>OV(b@5D+n0ZnZ!_%Hm5Y?$!R)dz>uG#% za$mDoslE9Ptw%R&|JE-^pTF^LK_@3~nZ22Q#w?FZLdsiQtU6hK#3$_jQ!>43+1~hj a@rl14bkEt7BmcD5Zo>61`G&Cj zUBTH=L07@u*g#I4*U-Yi#L&pV$jHFZGD@7+$iTqJz}&#d*v!~C%Aj#AlAX?eh5`nB zAcHxC*_~1|vw$YSMA#7`HU?G@cNs&~C^#i%rj#o9rIsY;=PCpzXQt*Qrz#}or6`1? zCTHa3=j5kXDmdrs>G+hS7(#V33zMVUpovilIn)?g8JL?G`5A!XTue=jj122aB}3OM zif`*`724!7K~y3vb;ImJj+}@8n;Bl{yZ*bg<>p@VH%x6E*Ova-@1%UBtv{^woJJsj*ZkNJe%`tI~w zSu+$jd8U*%>^bvyO8M&zkN5fMb9{XNjH7U}%&!?QPN?PDY5L!MeEj~Bx@?o|d;IQm zT)#&!rMv!(WxufR@?$Ua>HE{q^S3au{|nQK?-2^Vqf&D1>zei1TTP=Dorr9$IPrLs zXI9ivCT2zk#>GvHGl3y86&#nc{EUqMSy-5v*c%KQyVy9i*??({osp5H&Y;G?1;#gE zYO}~FDJihh*Dp>@E-gycO9!X9VqkjG1IDU;a$<67QHg$faWXKKfke}d^OK7U^pcB8 z3{2prFt%wxO#w+7p&Np%+aL^>h-4L5{0)2!9N9R5&SGI)V8m!-U}9hdGmnW;ObujS zG0<7%<>lzc6{QyB7iX5_7gg#TaImqZH}U|@0OufCVHPF>1_L{g74j_R2Brqa3k(h5J8#(y`Gd(c*GBR}e z{FdNvSggSuGUvYa{@rhKjHj+xa38(MWXI%10NP49f3v5LRy%q*|Il~VKOd^S<9j$rM7F(bn9vcHny zhn1bdm5ll(_aCdQT|M1&)~1S(3m>LA6-oOGoR{5h7rcf`Vat@K4SNd|Rw;XU9n9Ex zrSX;4mFu!0b0uBfc@he_XZ-5S`{q?}edBqZ^-V?_LQfpGtl4s(n{5;C*28Zcnx35d N!;m<2*3vk!0{{`$(QyC( literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/baidu browser.cer b/src/MalwarePatch/Certificates/baidu browser.cer new file mode 100644 index 0000000000000000000000000000000000000000..4b768cceb709590a5fff8c23dae89d87e225afa7 GIT binary patch literal 1351 zcmXqLVs$oXV$oi}%*4pVBp`q3GM^g%q0aN`1q1taF6SHYvTC(HTAEr$88n_ma-p-Ip@0D&$OaA`cBjltOHNe?Nlnhk%g@PAuLQbEPe;M0 zB*jp{Ko0Cf9&rWNy!6bx)YKx7e%FfR)SMiUE<>o{%%mG`(8Q>O9R7@~49rc8{0u;G zE~X|%Mux3%!dnZq{u%1Ds^17_Gj;ddu)Rg@*xQwoi^7-f0(CfcKJ%(6W{o5wP@1+SHJsa zGM0WXX*wIFx*qk?p7xm3H=k+Mu#U-&czDG4YoB770jwQ2K1#cG( zV?NKU|KdfEe%+#{+#J1snV1cd|?99vtX&^xbmUx3$gJ?GHgfr+wzs_BOeqGy`pr0(lk{10@561#$~y+N3}>0xc{qL$VRbNiNDU2!~n9 z$jIVt;0ZJx>LUZjHepnKDIk{`sKFI5;W4a+N+;+pLcal zs63EU8E}p@e7Biv#evT%{86D^|5N@vYMcBrJ!8ST9ox@~)tlt~j(FXEc1G2DxAI-L z#V&cjHLmwPqOvy8%5LFKvr~&g{5J*Hiu7cijQ_b~xe1$$!r@d_*SgxHyAMBPsGpNN z;pB>#+n!QVir3WgoEP2*&+3$VnO`aY`izxIL-Dl!g}a@*&X_KpJ2%+v^2eOL`}{wM kIOp9KdGC5GL^r&%jO*AJ)}xM#q9?95n>POu@0#>j0C}y>eEnVv$+E%*4pV#3RVy%(vn#-vNzPS-TB***LY@JlekVGBR?rG8jY|avN~6 zF^96S2{Spl8cG_7gE(Bm0`58aNr^eZndx~7d1boAiG~ISdLSugVRa-a=lqmZkebZA zbOmQe1zm+;4@V}M!o zzz4E{LzvwuH8TrnBus=IA!1`-1#zG;RE>gDVrELIf?sM$a(=EtaB^m9UUI5JVqS_u zNNRFMUVct~dZmJMzMhUxNs1v^Yv%d7#twpK)&s8J+>zk^qHn<+j5_*7r(LH|?)RZ1dg|rM~Lu!d%-!=~rg6+?~#Jbou?T z_-8hsPp;v=8{WkGv*-N0vTEO&9WB2v{404^&k-u@-aWxY!cExe>h%p;3x7z}?Cp5B z$9Zln6Eh%tc-2o%OinE-(N8Z<1|~R=XmLiOQMz${ za&duPa#4wa1>7XYHXW!*AW0*1gV0Sd2m>Z3Sp^n<178D2Hcp@eSr``>F&Y_|7#P9K zWMULk1DRP2bY6LRIl7TWsRjAPnI-u}mHGx8Y;5U`JU}zRnMzieg~@=yz#e3UJc|V| zBbY2OT42zo2X$d`Q4YFc=G59@LN4!Gi73l?lh+2=CyP5Jnbb{g&?P7U_k&( z$&3uS9Xs}WDQ*utEYj~)@@Gm)r}YO*8H0}A|5+tFYOd6XYp*ryQ(oJ0_u{fAGa?&1 z3$+$5{#`k@tKu5#-@7$GU4!czW^erd!L{0#ZGqH;AJtbCCZz65411R#6N6xB{Kc;VZnoIPE7VRI=5pR%f;Tw3qK$K9{;xH)?81q z-*t3Nf7Hl~B zBvt!W9Lvd*q9-|XH*QnBa%zQ2E6?T}{>=xz)vf)+dj5)haNUNz%fCmbg;al^zuVaV Ssk?={`<7P^eDCed?*#zeI@p>3 literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/baidu netdisk 256.cer b/src/MalwarePatch/Certificates/baidu netdisk 256.cer new file mode 100644 index 0000000000000000000000000000000000000000..688ebfe1a2b5e2809e04340847086f6291c37f20 GIT binary patch literal 1336 zcmXqLVl^>nVv$+E%*4pV#3RVy%(vn#-vNzPS-TB***LY@JlekVGBR?rG8jY|avN~6 zF^96S2{Spl8cG_7gE(Bm0`58aNr^eZndx~7d1boAiG~ISdLSugVRa-a=lqmZkebZA zbOmQe1zm+;4@V}M!o zzz4E{LzvwuH8TrnBus=IA!1`-1#zG;RE>gDVrELIf?sM$a(=EtaB^m9UUI5JVqS_u zNNRFMUVct~dZmJMzMhUxNs1v^Yv%d7#twpK)&s8J+>zk^qHn<+j5_*7r(LH|?)RZ1dg|rM~Lu!d%-!=~rg6+?~#Jbou?T z_-8hsPp;v=8{WkGv*-N0vTEO&9WB2v{404^&k-u@-aWxY!cExe>h%p;3x7z}?Cp5B z$9Zln6Eh%tc-2o%OinE-(N8Z<1|~R=XmLiOQMz${ za&duPa#4wa1>7XYHXW!*AW0*1gV0Sd2m>Z3Sp^n<178D2Hcp@eSr``>F&Y_|7#P9K zWMULk1DRP2bY6LRIl7TWsRjAPnI-u}mHGx8Y;5U`JU}zRnMzieg~@=yz#e3UJc|V| zBbY2OT42zo2X$d`Q4YFc=G59@LN4!Gi73l?lh+2=CyP5Jnbb{g&?P7U_k&( z$&3uS9Xs}WDQ*utEYj~)@@Gm)r}YO*8H0}A|5+tFYOd6XYp*ryQ(oJ0_u{fAGa?&1 z3$+$5{#`k@tKu5#-@7$GU4!czW^erd!L{0#ZGqH;AJtbCCZz65411R#6N6xB{Kc;VZnoIPE7VRI=5pR%f;Tw3qK$K9{;xH)?81q z-*t3Nf7Hl~B zBvt!W9Lvd*q9-|XH*QnBa%zQ2E6?T}{>=xz)vf)+dj5)haNUNz%fCmbg;al^zuVaV Ssk?={`<7P^eDCed?*#zeI@p>3 literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/baidu netdisk.cer b/src/MalwarePatch/Certificates/baidu netdisk.cer new file mode 100644 index 0000000000000000000000000000000000000000..6896fbfd6dd9744a4a5d014af4a4e51cb69cb17f GIT binary patch literal 1316 zcmXqLVpT9`V&Pc8%*4pV#8bumu5jVpO7He{k1iYVvTAG;lM-`+Gt=`F^2&6J6Ajf3R6$bA!g5Gb&iN^+AT^nJ z=?cz{3c3pJ#s+fYyoMGACWgiahDJt4rcvU&Mg|5(2IdAv#%9LGQ3j1`k?eH#GZZl3 z0~yRA% z%Y?noU#6PRH2b(>;xqncrw7&-LpDwNKP6Op-b}^q>-4U+R{h*DS5VAo*X)CLk1Xa6 z;yJ)IX@<1i&cM@8!*q6k{%!l*{OTb`V}Yiqm2Qkx$4sy1hDh1Z44yhw(*03q@g3#* zlP}^#XL;sc6+F@-FqwCM;GMSFjE^37FI)T8W{XMnl4A+a+i!3CB4ifopFd&Nky~3F zd!5=C+B`RV%-L>U-4ycAJ~iQU5}QuybMCFL8a{QVtp1;E{(G;jxbQqLiUk%4h>6XQ%^h)e~?r7S-q<9`+wW+wIqgT^j44sAAIT4QHqWT`W#F>rzL z4Vc<2GD=Dctn~GZQ7pvQ6yghBdMS$GV%U@l^2Hjo7g^0A1qh%98>Ka2Ce#ty~r z2Ff{iUIjPzNS!i}2T3clNEnDUh-|+6>}p|Ht!2dKic8u%zAu#j>pdGe`2sUNF!?ev zaNPR0zF3PsHeAj-SW>5y`g$&B=ElwqepO$t{bO47`p4!8i+0?bY5viGU8~4`=c?(O<~_~1 zc*AXy&Fg*7eP(Dcp7Z(mp_Ga9w;sH6`uD!uds)uANbwl>ojViwUHR^tA`V88jD0d| zY930S65n7_zjgxW{M~y(HC`-ss*#&m^F;53bHDJCs7kN=Z!Fun7Z+b+_~P*FdE4)x Rv!Sh3`?PM}d37UYDgYd0-ISMHDQ00gBq`_o zlvI$K%)E33XGaBH1$QF@IdNV?Qv)MIBLf3dOH<1zAlDp;Yfz44rL&)*paDO~Tn=H5 z;Ecq)^o+zzm=HUXkb;36#9`u2iJ2*-3L4HCnR$tt3eNd@Ito4|DSC!b70kl8R2Vcd zDj|EHk(GhDiIJZHD9**y#K_37K;+z;PyV|Y3nX68d+(O{e?cFkdrZlqRT`|)3r^@n z%;;d{{ChMg`o)R7GMVhiBxC-v{W(+9&AgY1GSwfL=z7xbyhEA6hO?8!eLfX@d0Qm= zM50p^~U?tFQgqbW6_NB`0KoXj)cX^ zPZIC9g)H8Xcs_YS?6 zQw8G{kM9YqrGNf@^27PFlGu^XHIFLxo2=-tdd$Sk$iTR`iLo0PBJBoz!0?vkXJq`( z!otkN-eBMZ;w!MY8aNv`vTOKJ=3FbM=c-3-XIIOY(~<^}%UQR+xp!fWbf*WUwj=j{z6V9A;(%JCL9} zi@AZRf$;*v1^R8eAcKMCCKu(Po10#&pI)2{Oos?V1_X=vQ!yV7&yTA z225=xP_v3tlS_+I(Tz(^OinE-K{v9*zyxjrW19xlg#6^<0wZ(-kR4+n3-Smbix`VY zR++`S8d+c2-Bn5@bAl(HihkpD%s?I_t;`}}Al4wlk#}R;oUZ+E?XDj#i9ORGzd}Et z3OT_7^D8jHGBWT#ey~#hph!qii~rkou}lB`6`MOVF#FJl%MW??{JFqsQa2^emi0xw z8&^7$$nzouXf+QdP_9_y~!^a z+LkXk&393b{np&VHHX4<8N%{DW!s(mzNwj4YFGPTUG?y-&7M0h%l$mDEP8LjfyHaK zJ>$3#qSCIOuD;7?mhFa^|3~8Gc%l^=gDZ8fFg-V#^PBbfp>3;J_i<*4-Fwh6^_Tnw zqn~Z>wtG5F%?kC@+8Co{VN;kkQ}oe-lV4re*=i`Ac)vApefpo8%j-2RN60>v6uiA! Z{K)dY;J<%QY`c)wDRTYqal_y3lL00-xvu~K literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/baidusp.cer b/src/MalwarePatch/Certificates/baidusp.cer new file mode 100644 index 0000000000000000000000000000000000000000..4b768cceb709590a5fff8c23dae89d87e225afa7 GIT binary patch literal 1351 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 V_P6P~JIjUN2t0SYa`UuG3;?PE#Tozr literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/donfang toutiao 256.cer b/src/MalwarePatch/Certificates/donfang toutiao 256.cer new file mode 100644 index 0000000000000000000000000000000000000000..26fbc25231452dddb23073a6915be959855dc199 GIT binary patch literal 1291 zcmXqLVr4gIVt&7XnTe5!Nx)xpKX2))v7Z&N+$2#R|p>!5)rAre;9nQc@LyGt=`j^U@WZ z9S!8fc@51C4GfJ9z#t09wKOy|G%_+awKTPiGH6_Y9KjihdFdI6 znJ^)CBq2Qm9k4%mRAH(V{EISE^GXtP6v9)Jk`s$d!1m|sDfpD6=)tVu=3(*-F@$Pn zCQ`FO6QcrhurjhTFgG#sG62Onn3@t}&H9wuUgE{JexO#m3>Qk#HCVia#o_F(vr`=tNdQ0|M+wn!L4-jV8(VrK4-_FzMuck9ehSr`uGmZ1q z-4KPfL4_F??dP6x)>qXrmMrV5+$|+$`+P66Xywgy1)lkj!;GX?vu(A0Wi9WQ!YI|8 z)R4JuUGVyO$u(P}(=5D{)1}SdO!B#O?c#)2uiAa)J3YN1I-$<4AyIA0DgK*wds3u* z|Gn%uu~xb{xGntUg2epv2a$c#zq2mi{wGpi;qesftc?>wy)`Fac1*nKbN7_n8=hx9 mS4<^1pBsoP=zox&^Q~I`C+DLW?~JQ9mv<~U_n7UR&|?6+*tn|z literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/donfang toutiao.cer b/src/MalwarePatch/Certificates/donfang toutiao.cer new file mode 100644 index 0000000000000000000000000000000000000000..3f990455ff1627210387265b4a2dfaccf7cede02 GIT binary patch literal 1345 zcmXqLVzo7BVo_bd%*4pVBw)Z=o2SOhCH{Y{^sR5{ufG`ZvTc;+SR8Oj^Tf+VlpiWk6Glfu`yu z=jZAd6(lNXBx@QP80s15fHX4;tHMop&PgmTRxnm@&QD2I068QxFI~aNz|cU!+0j5w zoY&ACsL$8{45ENsOG86LBO_x|OH<1zgT@6&-g5Rc6g1!mna|F{5uA~jm!6TB3A2)m zM-?Wd;9r!PnpcvTqY$2&l$=;x0I0sV`BO}AJ7l(z8#mfar9om|e)OKXQh}Fsiaao3&b}ms9UHVM< z!Y*02$O|{I68xWI3|9 zI`7F1iT5gvzpGPw4{g?D?#XTO$vsxzb;rto%Gve>p^USeINh2a?HBg@Zr-?~$k?d2 zZZn(im!{^Y({?aN9S~QKuU~y?^~9u))8F%Mp76B0D^YLBK8t%#V^g0U@ts^^{g#zA zC!>1CGtnl!&zj#2pKd$QtgX{o7o@uXUR-Cr->fuy?aWPrnam%%jXaffbl5H z&&c?ng@u`ky}>{m#FuALF;Fs4SRl7RrcDZz+<>XAI8Cp(GB-I1oYH`t^hO>=7DfXf17$W2Z8l(bU}s_!6NjbN6eR7*1;qxca79c8k~~Gj{C|ymSR; zM*}%=UPDU*Ln9LdFo+W8H8L1^H=3(*-ftkZhx;X|-j0(u1&B)5Y+{DPs02Jq7YGPz$ z*w$9ovw3T2OKPX?ljWtdiz6cP-(9$JUn)d|J?BOJ+xrV#4L&+Muq7{^Ga<*eNxjdz zO>W_N{!KRxOFFyQ?_HAU_StxgljGG9`R&`f-1i=wv?9l`J$G_y4~N9{Uyk!Q(o!eY zFaLP{koKH~Mh{9iE=+m<^w9>6zj29Y4@hm9d~unx)5RI7O*IXbmgfR~>zz#$o^*9@ z>e;Cm>~uX|Z(8D;ppx`t?y;@cbvfVNy7ng1LX2B~g9_uiDC_oZ{l}UO*K~7x&FyOA zQaTZ_{H^l%>v7?rnRQdHUQl z{->){+tzRXeDXXKBlF@W##mr@M1qr`tS}3c0fPY_Fy3VO85#exurM>RHyCJx`0^|& z21*7B3*;8av`J-@loVL$>lc^l6<6jaC+Q{U=YlxNML7nEAjJwSQ3eqPVQg&ajXaDj zj0Qdi%4{6kY>cd|>`aVe;vntCK>aC5+LH^44OHQZm<%L&uqrDmNHh=zS)t0pW55Md z&&+HP4r4PivUnSK8py-=28?aOsP0Vxxz|7qu7C-Thf0730c}%ekuVTz5SeBj{Grl# z`uf`D_j=lAPHk_KD@p@rNLfA>F&2^SNA9|Ry7>Q$w~l{;^6pue&hc)KKu&<&zT zj11XvioAgZ0;?|W6uc0+N5W|G-N%I!JDz%Tg)IK8<7q}|^u6v`xvbe47-;dQh!fKywytUxS^4M989{2wRm zAKQF{rT5s34Drl^<-+n+D|fkHG{0japBO9`sHx33(br3+r{mTsv-zu!hp(1@KaVqU z{&fB=1vT6(=aLFJAIl{ipTCjC^3}<>45kd$cQ>?nQdU+i+oCVkf3nm!?by!d$B~D7 Qn-(l%2)r#(?2x(_0EH&WSO5S3 literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/driveTheLife 256.2019.6.cer b/src/MalwarePatch/Certificates/driveTheLife 256.2019.6.cer new file mode 100644 index 0000000000000000000000000000000000000000..01343ea9a817e3224804db17ce766cf02cb585e8 GIT binary patch literal 1314 zcmXqLVwE#!Vqsgr%*4pVBoKdb#irc0_M6)3_grL}%sUNu**LY@JlekVGBR?rG8ohw zavN~6F^96S2{VNT8_F6;gE(BmBEglpiFqZd$qLT-MFsgqi6xo&d4}=^vLI=0VKKOL zNKt8ViGp8hNqK%zwxNN69!LSRusU3Ub53G$v4XKeu!p0OsTt6?lvIV_%=Em>ymSR; zM*}%=UPDU*Ln9LdFo+W8H8L1^H=3(*-ftkZhx;X|-j0(u1&B)5Y+{DPs02Jq7YGPz$ z*w$9ovw3T2OKPX?ljWtdiz6cP-(9$JUn)d|J?BOJ+xrV#4L&+Muq7{^Ga<*eNxjdz zO>W_N{!KRxOFFyQ?_HAU_StxgljGG9`R&`f-1i=wv?9l`J$G_y4~N9{Uyk!Q(o!eY zFaLP{koKH~Mh{9iE=+m<^w9>6zj29Y4@hm9d~unx)5RI7O*IXbmgfR~>zz#$o^*9@ z>e;Cm>~uX|Z(8D;ppx`t?y;@cbvfVNy7ng1LX2B~g9_uiDC_oZ{l}UO*K~7x&FyOA zQaTZ_{H^l%>v7?rnRQdHUQl z{->){+tzRXeDXXKBlF@W##mr@M1qr`tS}3c0fPY_Fy3VO85#exurM>RHyCJx`0^|& z21*7B3*;8av`J-@loVL$>lc^l6<6jaC+Q{U=YlxNML7nEAjJwSQ3eqPVQg&ajXaDj zj0Qdi%4{6kY>cd|>`aVe;vntCK>aC5+LH^44OHQZm<%L&uqrDmNHh=zS)t0pW55Md z&&+HP4r4PivUnSK8py-=28?aOsP0Vxxz|7qu7C-Thf0730c}%ekuVTz5SeBj{Grl# z`uf`D_j=lAPHk_KD@p@rNLfA>F&2^SNA9|Ry7>Q$w~l{;^6pue&hc)KKu&<&zT zj11XvioAgZ0;?|W6uc0+N5W|G-N%I!JDz%Tg)IK8<7q}|^u6v`xvbe47-;dQh!fKywytUxS^4M989{2wRm zAKQF{rT5s34Drl^<-+n+D|fkHG{0japBO9`sHx33(br3+r{mTsv-zu!hp(1@KaVqU z{&fB=1vT6(=aLFJAIl{ipTCjC^3}<>45kd$cQ>?nQdU+i+oCVkf3nm!?by!d$B~D7 Qn-(l%2)r#(?2x(_0EH&WSO5S3 literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/driveTheLife 256.cer b/src/MalwarePatch/Certificates/driveTheLife 256.cer new file mode 100644 index 0000000000000000000000000000000000000000..0c7181d6cc37c42ee2c2a69c8d95e89122f23f5d GIT binary patch literal 1314 zcmXqLVwE#!Vqsgr%*4pVBq093A=a^4f1b?^tGM_(pN$N7**LY@JlekVGBR?rG8ohw zavN~6F^96S2{VNT8_F6;gE(BmBEglpiFqZd$qLT-MFsgqi6xo&d4}=^vLI=0VKKOL zNKt8ViGp8hNqK%zwxNN69!LSRusU3Ub53G$v4XKeu!p0OsTt6?lvIV_%=Em>ymSR; zM*}%=UPB85LnBKAFo*(jEe(u~%#4gpEln+>3>vp1xzO3qP{=?4WCI5er+aB)Ub;(u zUb>;60Y6BLorfbhBQ>uIh=FF9gM_$v3}8YEE=8GTsUaDuKACAi7v!gvlqVLYDukpa zXXNGQE;+TF)AR3HX|zoa}y&k15liUsfm%1VOv{S z&*rVAEvcQlPnMU;E{=%Ee|O=^eW?%;_M8{>Z|^T~HTdZ4z?Qst&V(G>CiOn=Ho1l8 z`8VA(Ea~iGzjsNZ+h^k~PL5Ycu+MNK2hmzx?C* zL)vo|8a*i8xG?4Y(?=UP{>CMqJs`DZ^2KG&P8VmSHq|s#TAmB|t#>w2c+%Cqsb{BN zu+#N;y=jSWf=bepxyQC%*X4Y7>)M-43o&l}4JwT5qO9Au^&e|CT+_|%HMgscOX))wB7$_Mi zERb6u(WXFgt4)uH}WvDFdFz6 zD6?^BvoW%=vNJJ?iG#Ek1NEmMX-_UFHc*8tVlt5A!K$pNAkjb=WQ8gVj{z4B6$l`6_X&?{d8!)yBqq;W*FaBo z-|K0gIkmk_t|$$hA!Yek#8^bOAGz!P>Ei!0-a7sX%DZP>I>);`0yzN!vpX;WGBWVa z-))dv*mN}Mc<1@MOeVR%ms>wEd%R2Jjd5Pv^^H4QguTqP-!)49XYAkavOnr$@)pPE zVh8RnT$Ym|`>SlB-~LH9E~b*kY`<=XTKTTz5>wmT93@--clC?>)aK(^CmiCF5?NnM z-JdV7;Hf&bYa*LMeR%-?U)lUMF3*IvOSyTa^JgpGih00!NN?ZykW%rFZ=TOi`S#@K z6K;p3FzW@fTp!{dY?w8Nn_F`66W)ePCZ}}%dI@rAP0v<3c;vRsS>YSM>|RRt*d2wP$7Dg#WbP My4TPB?8VQM0pV!NU;qFB literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/driveTheLife.cer b/src/MalwarePatch/Certificates/driveTheLife.cer new file mode 100644 index 0000000000000000000000000000000000000000..b05e3b96a818521fb5c305ba16686248e47bdfd3 GIT binary patch literal 1368 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 CRlR5c literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/kingsoft 2019.6.cer b/src/MalwarePatch/Certificates/kingsoft 2019.6.cer new file mode 100644 index 0000000000000000000000000000000000000000..e33a1f35f9f99db33b19e531dfc05c7920396f11 GIT binary patch literal 1357 zcmXqLV)Zm=VliC6%*4pVB)}deJ!4Js;*Up^*I!F{S6OPn%f_kI=F#?@mywZ`mBAq2 zklTQhjX9KsO_(V(*ih6!7{uWc=5fhP&vZ^LDpByvOE#1=5C;i!3k#H&m+PefrILYC zddc~@hI$4%ASq^HRk#kv;^NYx)D#6z7X|11lvIV_%=Em>ymSR;M_oe$IdNV?O9LY# zLjy2~66ZBC0CG(Yfs}zkltJS(Bo{gR844Kify`$YW_L=>%mNx?Xl!5zaibPgM8O*< zT%4a)q7a;#Tw0V_QmFvql_wUZ0v({I<5Q9XGm~4G$uk6I0<$m)CKxm^Dj)|QBP#=Q z6C*DJP@IFQiII_E#*e#Ke}8^s{Px9%vc3$l`@7zyZPgQJJh+5+_uTYA;qBXQWj*yO z|En(jwQgb4!x>s7%jTb1@1yGfaj{O>6Z_4NJbW(c&DHMDUt_4WZT{TKrAsqroOW5b zzW0~SM~?NU3c31)Ex{LZcb$R_9k?8jIe9d z^vm5*ap4=D&Wqt+d!eQxHOH#Knu(ElaTDWCV0dgbkOxMPtTKy)fmnk`b;dc(RR_fP zc~(7qYJY9{ch`PXBLi8G0zMWo7Lh-GTaD(P|5o*b<%v#Ouba)}jveaYD3|4DWc<&< z!py|p08W&$sw_MPTx=ZLY`}!e&dh9(3o=8VCCwnkz+i#i0-ZLkjFOT9D}DXsq8wwC zM5><%Ns+qA#k%Q+dO&$h9VUcy_<*caU~x5YHZW)7Olb39Z2OzT%xIuxpaF9f6Qh_6 z$PL9nN1$gEedmB+0}eK}^hO>=7Dj`{CYUBhMwT*z5(5<&-+-}A0_u_c3PIodo~XV1ky%g!>}Y$@YO zyten^LbVTK8{3&)iAB19^|@g2zGnZfhitC7PPQe*j@pydIz=k4C|)`%7*nzL_1C^X z3pp1vw7>J-FBu-JaP;$m=~{c#%fdMFEH_QuEYQW#nJRqV?RU|XN8#gUaWdiT=WM&6X)z8%_yG|H{c!`kYyIaEQM)y>=Cz(yqzPf&9>YBo@p4>5OEI0DXXNQ_EjuClUl$HK& P)2D^i_RqftyPO69XM^4# literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/kingsoft 256.2019.6.cer b/src/MalwarePatch/Certificates/kingsoft 256.2019.6.cer new file mode 100644 index 0000000000000000000000000000000000000000..a9a1123b9f157cc7b3906db2d1b14ba0915c78d4 GIT binary patch literal 1301 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 E0M%N(^b literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/kingsoft browser.cer b/src/MalwarePatch/Certificates/kingsoft browser.cer new file mode 100644 index 0000000000000000000000000000000000000000..6def2b965f0f992ccc3e88f353aee641f20cf401 GIT binary patch literal 1361 zcmXqLV)Zp>VliF7%*4pVB#>9)cP`uVjbNmEXoyMS)j$JYHcqWJkGAi;jEtkY;9KRk-QSIf=!^3dRb~`6;OiActh;r7IX27#b)zI~vG| z^BS5O8W|ZGfI$?HYi?jdoo>-I$bd{ctPf3a)j{z6h*CNdR z0l|h)BbZ4s!k~#!2{~36Ss9p{82K51;#^EkjEoF#s$YAoiEcPH?X%abud5|ezHNPQ z`2^pS+fQ5jUvF7dKF4l)Utr({jW*NEf^tVZcALyt`t$kgzbUsrHv2EX`ZMgC0h^=x zk*(=3-*WLV2d>D~<^35W^nUMbi|q7WHYak!mbBdusomG}>Tuo*gMTM4=igfD^2u;< z*pC3GV_sT&6U9Wf{fRmD$<6irvD-==uNV6G|M<2#vwnfc%E(LG?0pxWo$9ybMDCM? z)7N`ER&Q;tKfSB${$cNc3$1Id+F#dMPinH-H&s*J=*hD=?_N~=*=4uptj=8HwpUpN zsqA%bEgR-CsXVHm5r=86YDCDy#C5jI%t?QoGfwf?P%%|TrzW=00a#Z8P! zzz~T8r&U>D7A6A*aFojOGcx{XVPR%sZ!pjX#)Paqi;97gfx-g01u|_?pp*wpc*SXY z#g)0qN#H~Wp;Ht;b}X5-Li17;6)CPp!F zSn5qdG9$U5*gzGoh{-^b2dgq*`Zf>-*`vw=N+(c5nVAj3VQfZ57Hak4_KMxgJWduCn4gS*_ku^AnPlCCYw7JfciFm0va zlZC5}I`7?3e2Mp&i|R{*&ZnmS?4zLEA5^5UKAu&Lp|V?}+4St*>)z&wu@C wS~4f0^4V(lGgS^8+YAo9dG7jMx;;Iu>(}b5Rqbp~0(h2MSX^Jt*=w;A0I)ISdH?_b literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/kingsoft wps 256.cer b/src/MalwarePatch/Certificates/kingsoft wps 256.cer new file mode 100644 index 0000000000000000000000000000000000000000..35a66de8fb098253b800a05b89dadb430ce14b1b GIT binary patch literal 1309 zcmXqLVwE&#Vqsjs%*4pVB;fL3>%N(MZp)_G-(1LhW%n8bUN%mxHjlRNyo`+8tPBSA zhTI06Y|No7Y{E>T!G^L1(jX3(ut;!aZem_ZYO;cJeo;YwQDRAEex9Mcfh~Eu#z?HzB#u+0RhOKmcR|2M?!vX<}Y_ zN`79tAwSSpKrwb6wy2EKjKoYspb;PeE*?#YfPy#Bw&MJ>5(WRXw9I6n1Ay%E#G+K7 zbM$l+d`eRE48;sYKzg`&c!OLNTv7`Xi%N1+^GaZ5F_U1HK@+0_azHb(GB7tW@-hI$ zIhdLl85w3B*%9{ryg;MIdGkZPAD;#E)Z9_w%xv(O%<`%7*?mm~Ev@aZ6=G`mZ#+J| zTXVYnE0YvgMyiN0x zN4{^~mmF)XbNi>BMNEe+pSG&)?$1I3o_km9>g#-cT*pz>XKLTlZ+WhF#sAozF`VRi z_|Bqk-Je@0vsYeY_#1O4or#foaT8-KFgzl`sZUmzg~@=yfDae}viyvU|5;d=nb;c) zv_X7%78L^}1BC^03uM})GD=Dctn~GZ%k+vXbCZ+wlJj#xoaCY$gG7*G1(qm-2!k*- zw)93GMixc`9|L7J4sA9@R#tWZS#9Q?K7vgx5*Wyf%Bp)ABz}^$Zoy`U$*CKdai3eQ_Q;Cx9E*f!bju; z2+Zlg1jxuB9`WJY_fJo|m)i1{*OhviGq+mtX*B#OW=YH1eL1{fRn7fV4%%0yu`O(0 zsDG|g+r#z5&+IEYo(f-&x%e&nVkf!&c;?GUWzl2BJ~gFWhhG1`nUVA3cdl)X`?^}o zD>0#WijQ=MHSSdMon^iB*0zV!9yXuV{kLN|TY^_^?43IEn^FF&4@a`R^t;Jged64! zjZQsYtIi)i74f@GYwk1sO_}>%_a7}S*(BW4Td1KtX~Am$M&Ax2MTy`GwSn$|VZx6l zHJ!8QTx7oYz|XJw?Ek(`N!wO?`}Tw0wJT@keVVam!G$WLpZ+D6e==01eXDQdVx74t W`2E!2-nD&sVXw1Q*1z;&Y61Xr9MA{= literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/kingsoft wps.cer b/src/MalwarePatch/Certificates/kingsoft wps.cer new file mode 100644 index 0000000000000000000000000000000000000000..4f9b3deed38d5f8fa9f78611e2392150e10708fc GIT binary patch literal 1363 zcmXqLV)Zv@VliL9%*4pVB#_YNlDvD5o?rSE^};8oZ!R_9W#iOp^Jx3d%gD&e%3#pA z#gN;8lZ`o)g-w_#G}utwKorE`66Om_Ey@heOwZF%@XSlrGn6-w1xauVi@_umLW)X@ zOBDQ4OUm<$vJI^bEFlVvLQ;!zixu+I6iSOz6%tDnGD=DcimmkZ%gf94%7CU815MRS z&d=2^Do9k&NY*qoFw`^90cmCyR)w4HoRe5wtYEC*oS%}a0CGrXUb=#jfuVtdv!j8W zIIp3(fr*i!0T@Jy^BNf#7y$*0O)X6=qYN51A$iN$&rrxf0AxM~52t%+VqSVmeqOpE zKQJtSV(dI@Q5mHfiJ68#BR~RNJem*z1#h60#rbI^3jS$nnaMy`0NLeFFr= zl%(hxiW!K2^lq!uI=mE@-8mB7qmCc!L&CPoG1=wW1KU~XdMWdMqEFf}nU zGR!)%BkcQmfkut<=7)MeJ`3onxue3F+2ApmqAF6V@b2C9lW#TcyRBq>_?_aFSi=i}idk0mp8t&^ zjFX=IpCnhvc0nVo@3hGSQ|`5Ax1T&=6D1xk5sDr>Ap{`uCITlFm-FSQssP2or!O?v{w04C>%6$jXHYpM}ObcWT{@&^K;{meBZn; zIo4R`_D?;Fm=0S$ZB^UdpM?ZG_paF0*ZKOmj-#s2)V`(P@?7tV|FJz|ILY(yokiWc zKetY1ue`?aH|9<{6C?BDCdOD`ctnDetgJ8#lL3PPA20%B`577iv#>BTu{RiKgZT0+ zDh5gh3Jc^G$h1j;5+E@B6{qPHSLP-sfzuw4lU$TzkO)$&z!GH;VGzc~mfpz2$iisg zW1!5&q0I)&AnZ(xV&bs$n}Vc0xuDoU6|RWMK#~WmGGGcf5C&PH%EDv71yj$=Y!D7( zGcvMx8+aPX!}tb_ZNjMTO#!*rKn<>d36FyjZ>R#JoVJR(bvt4G*_9Z*b0BE3@X4{6~qRC#UZP)COLB z#3VAWC7NMpz|qKv`Zr%KSNAO|cVAK<=yhYl=Lz=Zwa9&puP4s*+ig_vV9O z^D(_(o4tScd5P2=6Jovbo$ruS_=b%$<=2S+t@5(TeR?s$MyqD8!zaFWJ_WuxJJ^p! zd24-f+SgKNusqMq)gi$Bp82f)lfi2_D@1s=9@(#aXouqQTZUDV-~P2ENL>CA?#JO? K_VN5gzo`I_&)Gu& literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/kingsoft ws.cer b/src/MalwarePatch/Certificates/kingsoft ws.cer new file mode 100644 index 0000000000000000000000000000000000000000..ebe7e0089fc4623d3b9474a622cf976ccc50f340 GIT binary patch literal 1306 zcmXqLVihxJV*a;)nTe5!iQl1^ah18@aq*w3E9ZKg+GN1X#;Mij(e|B}k&&B~!Jyud z+klgeIh2J>m?<>aP}V>i#NiSa39igd%qvMvR&dTQD#$NNEXmBzGn6-w1xa%Yi@~Ks zib{)16#P<4%JYk|4Gj$RKnj?J)!_=9a}tY-6^s>vJsgcp&49+Gq$&hwrsrkmr7Ji) z8pw(B8k!jx8d?~DK@^Z{ZeV0+X=H3_X=)i|(6|!Gh0cD40tS2_8#sj7ol-NsfQGCdCMYCPpRX@MUCWU~XdMX8?+GF*PwVG8~vYb+UTLfrN{W@B0IjH*M6E zYjrsF%RPIGp(*E`c(=+k^V?RPsOINdCLugEmtmP%`ocGhU+PX~dbD_oSz7$T%$j$i zXUld@JpA~9U;oNavzPGOZPz^zC3yQav&io&kGME|cqaA7W^7oxq~n!`k(y=dgYO-S zpSm3mn-cK*y2<3dCCSSf-{1J+9{;i9yWywlg@?}vSuCDgz@gdk_lQCKWcB--J-ewrEg{Epu$Zpo`|YeQ~%t=}4xm70^u#LURRxVVWi z2^b=A;AAH&%)(^A0FF{wen!UsEG*1S>mRb z&crAt4l<({Xh;f@8Oa632C8sHOa_uXSd|qOBpL{V>``R_r4y*3%*+PiFg7D2i?@NN zfjo?Fz}O~?>gW`ZqYc#H3YhTtssv~d&^Bcj2?MbPk!jY!A1aNfudi)>ucv+H)b=*H zqBL+$l;vX)V-aEBe?&lG3e`yVLzG3Kzv_1u{=6(XfsO|w@N zy`Fm_{L-mo*B(5`S^e)d!$Fz8KZ?tfC+8kJUi!waVdo-Fzn|zo9-QOIy0uVB-y~O*;xL^7>u?aAC=Q{AntUHyCB zOy~)ol{)DsW7o!9;T=xzdB3bW+f}>mTAZ=qKJn-cl8nc_PEHVVJUHd$zC8&W4WJHeCpNNKQ E0M%N(^b literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/kingsoft.cer b/src/MalwarePatch/Certificates/kingsoft.cer new file mode 100644 index 0000000000000000000000000000000000000000..11264db8d069707032b92210c8b0aa3878dc3c70 GIT binary patch literal 1355 zcmXqLVs$rYV$ol~%*4pVB;b=<9k;0SP>EBD$+Kw3s$B-WY@Awc9&O)w85vnw84Mb? z7;+nMvN4CUun9AT1{;bSh=Mp=!hB(=MVY~w>3KQ|o_Wc7hVlloAPH_^F_?rxNKt8V ziGp8hNqK%zwxP9wB}9QyNNQ1Tu|j^DLTPcTLSl(RMoCFQv6a4ld3m{B8PL>Xps9Mv z`MLT<1&In8$(n`+hI$4%AkECes&Lbta}tY-6^s>}^HWk4Kn}^wOII*5Ff>qbb~KO^ z=QT7pFalyQhyrpg4U7#fjf_n#O)aAg8do5B%h}IRz<>{AJ_irGQ)*@w&?J}$J3_?R zz!0Q{i$@EpM!_4XusA=hL?JjexwI&=q*4LID^Dy+1-eR4$EPF(W(zkDlV^w_)C6Wy zOfYC-R6>pvMpg#qCPsb+pg0#(6C)$TG3I<(tNQx;dhDt~_wHTG$Yi^4z1Oe!#mp(+ z;!|h&bbnZ|P`*7>YeN4!RYz9s%rbUQrjz-nBqc*Ks%~qn6Z90Ap%lZtNMp<6L{s;( z6AWtPOv?{7*eg_fu{hNVbhy3j;XBA>%=F^mp3uHyZ|WZZp2lOu7b&|}?sRF0bEk_uCbnEZQiG0(`p2&38Fn#@gmnGYS>-{{J#myFbdRL}~ zL0IVc>{pZJC4=U(X7xT<<{vuof8LzKmm)UrjjgF1tv#1y-87M4}TOiXW1xk3pbXT0FS6rE!oCHpDKu&T| zjzJwn!L4-jV8(VrK4kJ0744v>1xe1|;;X-> z{dl`O(06GxauNiV3&14E$PlHZFIQ6@CegQ2ROV5Cb+k{}_Cwus7UdQ>Xw6B#`Mqz0 z#aW~2C#R`92qbYG|66hNle~wP!=m*;ZK?|k4lPx8UGTVwxkYQu^w0M-FP_Ora@RFD z(slO5zmq-7S(6S|w_RP`Hebg$%ixRgoO4`qKhCdKytTGs)shgw(zWj9PG6LIKL^W+ zcQ0SPR!ry3J>5rK>*qda?e0D{?aGA3Z6`17W8+wGL-C1krGiIF%c>%VXp`CVSGN96 zI^5Twzgg6v{p|JXlP}K}?0k2>tND06&x=KgVi)=I>_JT`>~%#oy3W31{`a4AYNn<~m@&%f_kI=F#?@mywa1mBFCi zklTQhjX9KsO_(V(*ihC$8pPoe774D*P0TAvO;&KuFDl3{N-W9D&oh)akOfI|3yZ;} zLyAg^OBDQ4OUm<$vJDLk^gs%jh1KB-oO2S3ixrF&f;}9KOwEACrKBnZXQt<6=A|n* zI~vG|^BS5PSQr=?fI$?HYY8;Q(8$=-($q4_pm83O3!VK8`GGzF+Q7lX_GCxbv#r}< z0_<=BT?1{fA9z$CDxU7#|77Qc=X)nU-#zE~@`=y78lKJRd^vN%)7CXl`**xEa!AEZQZ04H2 zm+RaoAI}$bS6scm^%1LFBFt; z#g)0qNqWioxgbt*QI0_(NV5V0B8zU<#I}@XrI7oXj zP=5-N_T++M168;pCId+xtjdZC5)FhwR;aS@7;wSVGcy~6!`O_BEZzp52J$ez0b`pm zs(VvF?ln+@D`3Lop%S1$K--jABn-qFM5b8>f2cH`zP`5ky`J`&Q`_6*iqgP2PnM5G zj78+dGE?TQ63ZsOv-<02A=up#T5? literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/kuaizip.cer b/src/MalwarePatch/Certificates/kuaizip.cer new file mode 100644 index 0000000000000000000000000000000000000000..daee517fc4edc4c9cf429941118be92aa179fdb5 GIT binary patch literal 1345 zcmXqLVzo7BVo_bd%*4pVB*5N((Sz&Kq@v&Q;fa3fOne5sY@Awc9&O)w85vnw84Mb? z7;+nMvN4CUun9AT1{;bSh=Mp=!hB(=MVY~w>3KQ|o_Wc7hVlloAPH_^F_?rxNKt8V ziGp8hNqK%zwxP9wB}9QyNNQ1Tu|j^DLTPcTLSl(RMoCFQv6a4ld3m{B8PL>Xps9Mv z`MLT<1&In8$(n`+hI$4%AkECes&Lbta}tY-6^s>}^HWk4Kn}^wOII*5Ff>qbb~KO^ z=QT7purM$&0D~wX*V53yz|hFp)Y8;4%Aj!`lDC}w4Ecfn2Aa>o!}erH*R!qLVFK)M z0bK)akP0py6^M$bJNG}?IpO)dA@w&v#y3`b2?wnoba@D&C~uJF#X&-Y+#x7 zhEV;?#OXI^VpKwo3Px52<|amd2B0_>QxhX2!$h8kJ0)M%J)3d%s#*V{5}Eo>C7UZQ zMoiFe=Mde zzU?XhrWHjwu^UQHZa>23xLo5}Ns7(lk9N{W`ZiRh)NKrUv?RddVvXK$had*w)2k2N zcolv~eVIPLPuK4CkDsb#nm6w`r|vvqBD>0&s>B;yR&!6Dl?jxOW@2V!U|ih97z+%M zNN@s`6=q>FU@+hV#*!>QBjbM-7G@^)25_v&%Co2#C>ba$kXsZprdM2< zo16qrX+TbLQI0_(NV5V0B8!$VtGck&Z!%}MslJ?|+ zVgpsUA|?Y#9<0iM>DfRSWQ8gVj{z4B6$l`6_X&?{d8!)yBqq;W*%abiRqg%bOUvhiGp#Hiix`WDy>y1H z;@Xzkzqk3cNUXfvmo-8BDsmD8mIlBi2uykV3c06#uvvVzS>v%x^m~tIPJ1^0(E71r z)kT#*Qy#6`d}H>)h+o_NPT`oP;ta7kB3b z#NFATx9LQc_3@nBUH!KbCdag!Z{B4-`8tD+)S(P6-94?37uftWj!oPZAH8QOpPu1i zL8k0=4?~`Rzs$To_`SEHr?sF;ar)v5hmCf&cl@~P#L~EY`Q&HJd4}S`>T^S0)_lLv zR@wAx;nDoPrH22E6Vtw!d-!?F-Z%f|X^iXP8 oc(L>A$?G(Fey%b2msAj8StWgKd&~Yvql6+;z3xf6o9@;F04{~??f?J) literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/kugou.cer b/src/MalwarePatch/Certificates/kugou.cer new file mode 100644 index 0000000000000000000000000000000000000000..b9175f606d528cdcb435fd4d146cb3f43b27c7e2 GIT binary patch literal 1311 zcmXqLVwE;%Vqspu%*4pVB%u6ap4KYkjku*#}R&|FD*i`TcswV&1=#J{`{78jz{QdA?sTC7AVC0sq5|0&m0r8cVGc==9Tg z_DNuw>YK6?Gu`HTJe_b*c7pXK$+@pn7FaD1fA>3b=_*rJQ4OX!H8MPtu32+VSg9*A z|6=`w|Lg7b%}ZXe9F!8WXHB`X{b=i4=L!6dzgWLp%nbW|{^7aY52j8`+rR(ZTDSW< z_iy(zYkEI)n|baP`{uMUfp^=jiFK(7cU1mrZCXC%kDqMANkhi}vt@UF_1+lrcli&= zdm&$=78ced`$%f;U!LaNVYTGWo?sT0pk2#?)rD1bFG>D=;LMs-qW0!8`>Epvv3G9W zWnyMzU|ih97z+%MNO1a-6=q>FU@+hV#+fWXBjbM-7G@^)1_NynU!Fz9K*>O1f!qR_ zHmQt~k^(Dz{o*pc;>z6QB)#PPTo5O@D90cXq*#F^${@lZjEyb5k%y6m(ZI(*nT?ELVU`FVn@#hW~%PZ4{=cV_L|6+E}*_5nW~X1!43OZ)2=90@+Gr_AB< zdcgt9oZUf@m&50It#>r>J0bBdOXcgTYX!z3mchlxEX^GEUN)-OAt}N>H^%szp^wtk zYhE&!4fpMPGP_TQyIQBm^@5y%jOQZ3$Z7YtHhz3PYhj6Utn%L?uazwuH|~G-cfwZ{ zU;B^TN6*=uY!>|amsc!Z<ZAHEh*10$~H7G&;u!87FLHVaL!3AE>}Vh-&TD99Xk=(+00vRwyha8FMusLv#-^60mQe}M!ozz4E{gNNNIH8Trn z2uy?>A);xZ4)z6)f|IMKm#3e*f_G@Rze0$svxlF*kH34Qg0sJ#j!%e-o}r?FJlID( z5-zF5*(Lb}3IRp=DW%CJ3ND#tnZ+PaLrr5QY??t6qXKdOGqN%;H!<=u0L3|&niv@w zZY3BPt=|{9lEjcF@Vx zi7Cvj%Xn2xE^P79pS*2OU)b$w+pA2Le9YkeyJyDXxf?{oJ(B-uEcW{TWWuEOYKP`X z<_*oeCw*_w{4&eQ$~@kv%zS!d(8Jfaa?_ z*gTPIX1~hI@VLLV`AwzIr(XEDEv{XGC-KB21y7!O*77{Bdw%}w<~C3KKc!zYSj}Fk za-JGP)~u#yZ-vc&UFmCHu*&|*`upoj1Cot-H!8CImtFWO>+q8u;Z5eBBR;iWb^hL6 z5b{j&zzT+EC!5|gF)}Z1VvGfbMqq+F&RkmU{zLBkZ2$bvO<-G$AAl_ zo|)Mo9L8p3Wbroe1g0aXg$9gm!l>>|0lC*e4X%I*kB3UY2~t*>MZ!R=L1dbB@P|s{ z>FaBo-|K0gIkmk_t|$$h2W9zK#8^bKU#@-h^Fs{Fn$vuZimD}l1@>(}hMWL_IUJY( z85!c#(qeRtgsuhY-b)nZa5-gjZuXrYLDwuwgJPM#9)55*DZhD}NaIT(PW0)s+kPOq{U{0GkNNs{jB1 literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/leshi 256.cer b/src/MalwarePatch/Certificates/leshi 256.cer new file mode 100644 index 0000000000000000000000000000000000000000..0415393ee4f294dee2ce861dcec60e7358c2a91d GIT binary patch literal 1327 zcmXqLV%0WiVi8`z%*4pVB*3RVg})&+KvX#Q#OsNrduJQ)vTIda`f@gUztTdvkB&6U4zOEW#_@e=qUDp_>aWEV5v7Y?cC zT?@}HdZQ5V-ahqG{CS7iZmnI~Q|9x?cb7T!ssIK+y zPD%C6F}jp3bg3jYrg4+p(>sn{?Ab>bPTyq37G<~K4r|C+n_0{y-+wX%a@IEL-M+h( zzj~5oHcLs?yo^P*&Fn7)v=<-han}e+-4v!!_W$2LPX1MQf6Oh^y2!sroFh1D%ApVP zoV(`yW@2V!U|ih97z+%MNN{?T6=q>FU;xLpEI%XTe-;*ICiVscZD730%Co2#C>ba$ zkXsua0e z>uH}kwY^QQC=HxDW%*ddSVa8)lzup;5!2sTy6D)1+})?Fs>|0PCqZD|2PQ#AhKaWx zUgW)0>UmvVgK5Ll*FidZyN@ObPP1Hd%y`S1Z_7Mb9GRm^UG*2wT+|({R9Lxm)sLIs z*}~0bc3!JclYQ0obmjC%3a#h;5*x~L7L@57`r-dj=>Eim@`tnky(v5}>GLus+xA_B zM;^6Y5qR}->)%K62ZNTobbepx(6XWX)WSE$d@Da0&#C=+)3;Xlg|4e+vF4u6S0Cr3 z-)5G0Vp17_#ZyFB-f>M!kW^m|26C@wZ-OntEHS-(R+%q zaq6xW`P0v^3wxY;^Ev(EUP}w5yUE!dfBL87o-gX)usyo>HHXXAWKB8oGOxZ}ZUGDm MF4d=6516e40Mn|%ApigX literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/leshi.cer b/src/MalwarePatch/Certificates/leshi.cer new file mode 100644 index 0000000000000000000000000000000000000000..0415393ee4f294dee2ce861dcec60e7358c2a91d GIT binary patch literal 1327 zcmXqLV%0WiVi8`z%*4pVB*3RVg})&+KvX#Q#OsNrduJQ)vTIda`f@gUztTdvkB&6U4zOEW#_@e=qUDp_>aWEV5v7Y?cC zT?@}HdZQ5V-ahqG{CS7iZmnI~Q|9x?cb7T!ssIK+y zPD%C6F}jp3bg3jYrg4+p(>sn{?Ab>bPTyq37G<~K4r|C+n_0{y-+wX%a@IEL-M+h( zzj~5oHcLs?yo^P*&Fn7)v=<-han}e+-4v!!_W$2LPX1MQf6Oh^y2!sroFh1D%ApVP zoV(`yW@2V!U|ih97z+%MNN{?T6=q>FU;xLpEI%XTe-;*ICiVscZD730%Co2#C>ba$ zkXsua0e z>uH}kwY^QQC=HxDW%*ddSVa8)lzup;5!2sTy6D)1+})?Fs>|0PCqZD|2PQ#AhKaWx zUgW)0>UmvVgK5Ll*FidZyN@ObPP1Hd%y`S1Z_7Mb9GRm^UG*2wT+|({R9Lxm)sLIs z*}~0bc3!JclYQ0obmjC%3a#h;5*x~L7L@57`r-dj=>Eim@`tnky(v5}>GLus+xA_B zM;^6Y5qR}->)%K62ZNTobbepx(6XWX)WSE$d@Da0&#C=+)3;Xlg|4e+vF4u6S0Cr3 z-)5G0Vp17_#ZyFB-f>M!kW^m|26C@wZ-OntEHS-(R+%q zaq6xW`P0v^3wxY;^Ev(EUP}w5yUE!dfBL87o-gX)usyo>HHXXAWKB8oGOxZ}ZUGDm MF4d=6516e40Mn|%ApigX literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/netease 256.cer b/src/MalwarePatch/Certificates/netease 256.cer new file mode 100644 index 0000000000000000000000000000000000000000..34bb876c23ed786ec17c65c64ca558eea70273c7 GIT binary patch literal 1302 zcmXqLVihuIV*a&&nTe5!NxZAHEh*10$~H7G&;u!87FLHVaL!3AE>}Vh-&TD99U}R)&00vP&t|gFbW@Kz?X=)i|(6|!Gh0cD4f(HB`8#shHG7|IBt1|LS zVM6S}990>qS(!j#Lu~_1us=kUfG%@QEKb$%fU4GnxfSRVJq4eV6g@*J0|~INLSUQjg9pRs4~c(7cYZtg&-~Sx(b=$6%`d^vwJ4B@nUR5UaT8-KFhnB3 z$xc?7g~@=yfDah{viyvU|5;d=nb;c)v_X7%78L^}1BC^03uM})GD=Dctn~GZ%k+vX zbCZ+wlJj#xoaCY$gG7*G1(qm-2!k*-w)93GMixc`9|L7J4sA9@R#tWZS#9Q?K7vgx5*Wyfis~jABz}^ z2ut+;fR}+jpLFz3WNzyD%9cA{?+|hl1ZHty5@ck^e*ZzsE;~o&VSmVKi8J$m@>=|0 zkDVm8|KXAex4937xp#Rs<;EVY?0u-qcW8#xiJyJ(YFncYI{&MazQH0A^r|HMV!_^d z(p^@ZYg~VcmQlQ>x0P{+ zuHMz137;95?^~5AN8DS_ueu}KUsvXSh~=RZDYx4Xt;?6n-QHSvUpk-7#s4|y+uy(X zH3b$`aj&p-PRu^*y*#Bgbwz@zq+jW!p5R?l-_2XS=1G`I?wNdFEU&3w^?TTv#TJXE uO^$GCQM>p`X#LZ#8#7zBPycZFu0&?vhugP=65n5l_;a!M!L^Sseggo~I?1R2 literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/netease youdao.cer b/src/MalwarePatch/Certificates/netease youdao.cer new file mode 100644 index 0000000000000000000000000000000000000000..542a81c210a1168cb2d6708d0ec539487760cc26 GIT binary patch literal 1340 zcmXqLVzn@6Vo_MY%*4pVB*0rQ!vEKR@$#uKS@RJYQ#JrN!WCiE^qJsRQ#FEVXJVSW{S&%fhuozrA zq^PvGM8Pk$q&&YU+t9#352S!uSRJmwIVZ8WSix8!*u&At)C_1`N~%I|W_n&`Ub=#_ zqk)__uc4WNnW3=(7(@ZN76z6^21drFmZp|b294*DT|^O4`!n4%L9*N`7@sFr(T^(2$m_bpvlm+7Rh_1+bHkW=!=BCFTm z&WiEo{B*o(z%}*njHQ*Yvt{S*3*nQPH|yryd$F#8N}F!jw9T-767pU`J+r#rmwlK}%b;$`_68UM4eFf*|?7-$1y zNLHRj#X!kGVS(HNnKr46l9B=|ef{Dxz2eH;Y14h!eMMiMiy@aPXl=v-+-}A7}dQgAom)m!4)v!@lXlSAfRo^ED{D{4IaaJjIkzX|5TeNKQY3jVS z$x_xRmrKcBIwbyowD>EN=e>_-=K38kyTxcOt&ybqtZhkwWT&h839b7fZFj0`%?>YC zV>+R(a=5*_rEZm-)W>=jmJbZAHEh*10$~H7G&;u!87FLHVaL!3AE>}Vh-&TD99U}R)&00vP&t|gFbW@Kz?X=)i|(6|!Gh0cD4f(HB`8#shHG7|IBt1|LS zVM6S}990>qS(!j#Lu~_1us=kUfG%@QEKb$%fU4GnxfSRVJq4eV6g@*J0|~INLSUQjg9pRs4~c(7cYZtg&-~Sx(b=$6%`d^vwJ4B@nUR5UaT8-KFhnB3 z$xc?7g~@=yfDah{viyvU|5;d=nb;c)v_X7%78L^}1BC^03uM})GD=Dctn~GZ%k+vX zbCZ+wlJj#xoaCY$gG7*G1(qm-2!k*-w)93GMixc`9|L7J4sA9@R#tWZS#9Q?K7vgx5*Wyfis~jABz}^ z2ut+;fR}+jpLFz3WNzyD%9cA{?+|hl1ZHty5@ck^e*ZzsE;~o&VSmVKi8J$m@>=|0 zkDVm8|KXAex4937xp#Rs<;EVY?0u-qcW8#xiJyJ(YFncYI{&MazQH0A^r|HMV!_^d z(p^@ZYg~VcmQlQ>x0P{+ zuHMz137;95?^~5AN8DS_ueu}KUsvXSh~=RZDYx4Xt;?6n-QHSvUpk-7#s4|y+uy(X zH3b$`aj&p-PRu^*y*#Bgbwz@zq+jW!p5R?l-_2XS=1G`I?wNdFEU&3w^?TTv#TJXE uO^$GCQM>p`X#LZ#8#7zBPycZFu0&?vhugP=65n5l_;a!M!L^Sseggo~I?1R2 literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/pplive 256.cer b/src/MalwarePatch/Certificates/pplive 256.cer new file mode 100644 index 0000000000000000000000000000000000000000..efa58c7cacec7ccacc3574752c98c55f1f6993e5 GIT binary patch literal 1263 zcmXqLVtH-Q#C&-HGZP~dlYpe}k|#kfZr_hRzMRKjtZl`kzu;Tf$vM6P6@h}^549$IDK!-^MGGfx=*+Mn%b~jqW^`d%6Xp` zQ-hy8jrw}0Z}-gWPv39Uk=`oy_US6mytpU40@nF@Hdfva$1eU^dDicTWRj59()9-Y ztoPM&SZAg#{mM6QP0B)B<2j-JV%H^KfA08xa?6B|aq2t&)Su!~+nY1zfZY5g2ZL*L zOOx-bxR&lYfpKvYV=OR4BEjiNR+xp!fWd$d7|^o( zjEw(TSeTjE8w|8Te0dfX10@561#$~y+N3f{N(!v>^^42&iYs%Ilk}4Fb3vTsq8x)n zkYWXvD1!)tFgCXIMjl2MMgt!MWi}3NHbz!fb|ywKagg?6p#Bsj?a2kj2C8sHOa_uX zSd|qOBpL{VtWag)G2nu!XJ$4Chp`zMS-cHA4dh{b1I9LCRQINU+-sl)SHOhFLnT0i zfVL^KNEnDUh)lB%{!nQ=eSK~7dp+$lr?$7r6{Uf5mnkI&My>gKG(_5(vQ4eu zZ(q&h7ksM{ISB&uE-(o)GI(rn3ZKqWyU*@$Qs*w&9l2Mp{oH=(@W5c1f%6vgNMz<1$vZSN`uN16IZ<~E`PF52muVm*Qn`2hx7bo+|)Hc;hy@>p? zm$y~q^(wP}`Wlm}=g)k@lEd!ZX=7IhNl2pnX%CT literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/pplive.cer b/src/MalwarePatch/Certificates/pplive.cer new file mode 100644 index 0000000000000000000000000000000000000000..ad0178ad21c40eb419ff2ed9179d229407134eb4 GIT binary patch literal 1317 zcmXqLVpTL~V&PoC%*4pVB#`{DTyn!CF`vt?{{C`#5xvlWmyJ`a&7D}zDf z7DH|WPB!LH7B*p~&|pJx15pr%OPDV#wJ0+ZAHEh*10$~Lq%u!JZu3P~->Emp`+Qz$J?RY)vR$S5f(D7MnqFE20GD+8KZ3^Y|Q zIX_pws31{6BU#hXz);UX2c(%~kmdFcv928IR-&W;9h z;=G1th9DjoL;<;$28Ko^M#iR=rj}6#jZH}2a`rP6G~frB&%whHoROH9o{^Xd6Jkda zk~WY8sp8@h3JCDYEK3F2T~v@?lvt9PpJym+APDv!4_A4{< z|M}I?jnNqg-wBz^*nWDxRey{6D&xTPiuq+x%Vviw*?+f~%w_tN<;yNvc^UPl=rZ3A zETYc8Q$%l`K2<3=tMBOY8Irzp7dpIQd{?Mt>f~^v)L!vc;1&CQ8?`rAUf9GQxNnp9 zH;cJ9D`&r(K4)=#(>Iyb*Yo!vK7V#=rkx4M& zSjbIgznKAt<}UQgKC$D2*IwPm6W${EEB2jl-?yHLnUR5UaT8-KFhnB3iBMLUg~@=y zfDahZviyvU|5;d=nb;c)v_X7%78L^}1BC^03uM})KuHRiqKeb>iYs%IlfbD7$Vo2B zF-Qa{R$z%Th%g9aV@q%3VPs)6@G($kKz=X#`B|w9K zwkfkn7>G59oS(V!Rkhj|?~{G~*FUhTy?=aZ`CM?ul;vX)V-eZ)C^OibccRjSQ>U2E ztXuddyu5V>auNjQcwiD_WVj#1YNS+rCg9EKCcPtlKHEKXIaZvxzMNG^>i@>vtiPqJ&?;ja#z?sK`P`|8WHTc0c|__b1s zo!g^m%SYC;=4x`izgZ&B-$-N$ElFg|kvZvj)c;h#!nOBGPQI*P;JK>y6uJ7OD-|*$b&PVHI;{GwSt^NO?UpHayyn`B( zoNH!@cZY4_d0P_LvAh1rij+h1TCSZpcGnbO`lopDOj_Q=_m-Sr-v^4gCb}9YPGf$c fFtzUF&YRQ4T)8|iN}sRvd(YIW{XI}`n!F$Y*Nw!n literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/pptv 2019.1.cer b/src/MalwarePatch/Certificates/pptv 2019.1.cer new file mode 100644 index 0000000000000000000000000000000000000000..bede6406e35c275a50b683a0bdc9cfa15d4aefc5 GIT binary patch literal 1310 zcmXqLVwEyzVqsdq%*4pVB*0k8GvmGKgD2iMkMGSr-+91*myJ`a&7D}zDf z7DH|WPB!LH7B*p~&|pJx15pr%OPDV#wJ0+ZAHEh*10$~Lq%u!JZu3P~->Emp`+Qz$J?RY)vR$S5f(D7MnqFE20GD+8KZ3^Y|Q zIX_pws31{6BU#hXz);UX2c(%~kmdFcv928IR-&W;9h z;=G0yhK5F#24D~+&TC{~U}$7&WNd0_Y8hovgXAk`KSO??w}Hm9^RPYH(e-TWc0*kQ zZIA#Lj|xQKMdPfeU9+F;S@3k#q-R|X&*rRuHmCFD%n46h*F5dt0aMOQoN|LEMkVBM zW@KexZerwT0E%-lH8CB{9kRDChw{KI{-mCEW|V%Djff0!69E>duE zOAI~`&U)fNKNY0KLKj<>h1=$gCJM`xqox$O_tZ?p0DPSKA( z`(%zCBio^yt4_7ai3y5mY&4v(dg8%<`w#4kIo}Yi`sGuK7T?boAv4r=_|$gzyyxXU z`BadHW&4KkNKM;1Q(uJ#T4t&u+jnQ)_?!APH|K!n<&)*}rd??-7A6A*13qA+ z$nrBX{%2ufW@2vuN0O{Oi;97gfx-g01u|_?ptJ-`O2uh<#g)0qN#JAzPpzv86ZiFtRWj_!ua&acHvv(>gm7qnJ1>DW)K4PcA4nP=zaEGLYoKstlM| z4TM2fsIu@FaKY3wGaH1%*o=%U-Uglq@-V&uW1BFlds9H}HBf^qV8Y{}5}-jq+mu-( z48$5l&d*%=s#@)f_sPEg>mOLv-ao#yd@eXg%JQ*@v54?}o4x$n)yJQn+4$VGZ5NZA z@O_dYauNh)bzl-?WZ2v+eR|=ZNAK3HPngK1vVWpZ=655V?L4!}>`b+p^dy>oAIbUa zIB9Eo%?9DWI?AWn53kA>-DP^-Nzw zndI|YCQpy_JhJPuq)X`K6Fjead^wgX3BO%deuI%wXiw|pEhodSD`{{2yjVh4OyAA1 zcm`%DLtrcE@KfsI=M|q`f@e=Go=7-l2zT bmOM+++i9e6?{?LD&&mter499SRVDcWU8dmk literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/pptv 256.2019.1.cer b/src/MalwarePatch/Certificates/pptv 256.2019.1.cer new file mode 100644 index 0000000000000000000000000000000000000000..be20f603bec4fe38eab45f375d769c343b86edd2 GIT binary patch literal 1274 zcmXqLV)Eb27iW#iOp^Jx3d%gD&h%3x4$ z$Zf#M#vIDRCd?EXY$$6W4dQSKiv(BZCgzo-CM!7S7Zv0eC6;97=NZZy$bzJ~g~i~~ zAw{LdB?^A2CFS`=*@gxNdLRYN!s>7Z&N+$2#R|p>!5)rAre;9nQc@LyGt=`j^U@WZ z9S!8fc?~TL4UNnUz#vMT*T}%Y(8$!t*woV0GRmN_7s-Xreun%&9{_FO;9+~RqwCq$ z?Jxm$xPY#KHrNk5Di9Sf8fQK2n*C(Yf~Tt{J?m*68o}q4}X)?R|}a^l`a^q^w8kCce#c7 zwV4x|qt1y=;nw=|rtsj?)rnlJOIX&O-z)mxw0e$Q-s~TROw5c7jEkEXV}T(O2~JwF z!YoV%3Kz=X#`B|w9Kwkfkn7>G59OtTLDP-#4UeQoo5J?%56wztU@rGYb=EFX&)i%9w_ zo|Dt3IbYP+aj$LZh5fHIgtqu2CqZB~1|~s9hRJIuux?$p=RicZIhHP+8^)`7>|wHzFx$q2`~u0Y@C=_jRq}2pe)61; z{>|XYFXK?uB-Qis|IOUedf(&~`T zb=ez!1y2s@o*({vy_LhU*&ALx)BSqoV8^~Cifp+Xg;&_!-#d+A%7^vpZp(@egyy{O z{(OJKmOBq#h+4>|ZoOm^S+^zl(~RFNT5CBMyt(JTbM?EsOqZtkxg_pWWKw!rx?t_K szlK*M!V~o}-*=kcJF@zt^}lQbJ-;`xQXK*bdy{@87X*j8uIKIt0GsFHCjbBd literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/pptv 256.cer b/src/MalwarePatch/Certificates/pptv 256.cer new file mode 100644 index 0000000000000000000000000000000000000000..2fe4a551af4f529d69c1b6a67b00e857beda969c GIT binary patch literal 1283 zcmXqLV)<{-#Qb~#GZP~dlR&}aeD=i=iyvDli2T_x@7rVpUN%mxHjlRNyo`+8tPBSA zhTI06Y|No7Y{E>T!G^L1(jX3(ut;!aZem_ZYO;cJeo;YwQDRAEex9Mcfh;)eFN5ug{8@%ih0kOe(yNHMrV=2+vpAR`?6#j^($+HJTy#W4>Je9QZ0FS zWXFgt4)uH}WvDFdFz6D6?^BvoW%= zvNJJ?iG#Ek1NEmMX-_UFHc*8tVlt5A!K$pNAkjb=WQ8gVj{z4B6$l`6_ zX&?{d8!)yBqq;W*f2cH`zP`5ky`J`&Q`_6* ziqgP2PL_{Fj78-2(JQ&NU9%LpO;*$va_34p?)A|@PJ+Pv3`~NI3<=9mg)&O*k^Ne< z$Nc`9`E%~x)#1Owko{=Gr7aJp-!1?7qHME7#g6FIUtG$QzdWl6t!uo#Ip-4 zPI|4LwwlTB(Q!eZ3%z=Q3{qz`pX{;C;mW@G``Ml!NlB}!U%x)IguPg?@J-KMHu;W< zUZ)G+F9|Qdo#k_DuX+A_=e*fJZ49S!Pdc#kZ~ugX1|82+cRVI+bYG#)8#0A|?!sRY zZx2Vhoi;RSWG~Uqm@F6DBlEc6f_As^ch|p5WyC8(y5+Y|_2SRhoqvGk;=LsHrv?-3 zmTNn%m(I(0b^K(1xSwR?bN7WZ4_8?ih0jD}zDf z7DH|WPB!LH7B*p~&|pJx15pr%OPDV#wJ0+ZAHEh*10$~Lq%u!JZu3P~->Emp`+Qz$J?RY)vR$S5f(D7MnqFE20GD+8KZ3^Y|Q zIX_pws31{6BU#hXz);UX2c(%~kmdFcv928IR-&W;9h z;=G3DhDJu_24D~c^I%e*@{dV8A&*BAnb0d!bO))QiSJiPu?(M~Or|TbjdnBz4U~5{* z`^n7>FEPKUIX@FO ztO>sKXQ{_*#|xe+EOD0%R=kU{zt!aNM(2C*OyAv$UT{9wZ1{fj(8qtQ8I?C4R_=~l z@abWNn9s6ufdeinQ6fAGPfCX0INkI9*S@#2TJ>_x{?0dh7r4j!ihIEk)y_t3VWXFgt4)uH}WvDFdFz6D6?^BvjMXKI}@Xr zI4qT>AZbr7C^k@qD`GN`%abiRqg%bOUvhiGpj5g zix`VYTPI7~#be^9OjN76r>_corfa3nft&<^r2sGqGBQ*}TzwER@w#PSLh(hO?tk_Y zwgt_q$6Fq6bCO$ROA4a#GnW8G6^43p#@93!$?tV^MNzC9(yxZj?+=~6} zb9}5;d34;_{PtMV?TxOzOQ#p#f6%qwursmRswL)hwwv8j5> zx7zO%$t`gYu=cXNxcBo*{SDQ>_!@6k`EA?cKZUD9zhH~V)F%sC*3>1ht_g_tkz{jx w^50U?fAZ65j~Y*go!e^5w(6rpm}A3-rVv-w7LR<}=DU%5PcUWro!`*|0GN^S2mk;8 literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/qiyi 256.cer b/src/MalwarePatch/Certificates/qiyi 256.cer new file mode 100644 index 0000000000000000000000000000000000000000..50d2c95b360b68e8fb251bae2e1c6c00f45cbda5 GIT binary patch literal 1339 zcmXqLVl_8tVv%3K%*4pVB*0m&vsG%5h@ZY)*OTCe+NlP-Y@Awc9&O)w85y}*84T(T zxeYkkm_u3EgqcEv4P_0aK^!h&k>JYQ#JrN!WCiE^qJsRQ#FEVXJVSW{S&%fhuozrA zq^PvGM8Pk$q&&YU+t9#352S!uSRJmwIVZ8WSix8!*u&At)C_1`N~%I|W_n&`Ub=#_ zqk)__uc5htp^=FJ7(|Kl8W|WE0R@arEln+>3>q&WxzO3qP{4o>WCI5eyOXP@m#3dQ zOoSaFVrgIw_63gtREM<~x`8U#hdgpfvH?N{BnZihh=qXKd?FtRc*H!<=u z0L3|&niv@w&R$u&eqmVALEowx)5i~*PfjbmF*|&k02iO)x!(n=kG$J+X4cVy5(c}R zq?@51m)_AYo1J=7Qtj4ti1y*_dev9HDR*$ zTlp#Cq(%D=+FeVOhI&v%bL%5Jyb>Ljte=>Cc99UE;YvUaknE?3f4 zZ1VW$b$8CpS*l0Bt3JMvp)gVIMf9J=PvXo)zB6{dwp)5?oBy*=zH5^2ST{WF*t@>K zN#*r|IriTkO!B!f*}tYk+VC_7?>4tv^9vsAH2SS|s&^r`o_ovVj!@Q(C3hBWWqtN# zv3QH{sykZ6M`cfBHzu69`NwZ36C?BDCdOD`ctnEJrmQdvlK}%b-evh28UM4eFf*|? z7-$0{N>-jl#X!kGVS(HNnKr46l9B=|ef{Dxz2eH;|T)j`I3bb_adbpErID4Z8dKal-obU%V{x%_5gS$=J_%EaEkDozT-)hyP7C zh||>k7v!E-dpqgxiLz7b-z6P4Z?us-`PU{~e##E%-<7w$10Nhc#a3)B>eQ7dt+*ps aX?8&sSHZ_89D-qwRUBs4Kl;pPC?9^73-MGN7r&KvVUS z^K}Vh- z&TD9HU}$7w00vRwyha8FKuIHGQ%h6JD1*ieNZxYxGZZl31DVgk!|vqj>E-F?4ijNV zh*%n!gVb>G7(mr11bRk#Dmc6Pg@gu0Dg--wy81c0s)e{Zd-(bL_`63cIQ#4A_=LFV z8LAtog8j}Tha?*i6yggs#}H}Tu>wd)s#6&>`gsxf{1p!wvq!W*;0rwMTJDW3aXu=>cmJ!fVeEhu5I%SpN! z`f=$U{j%AqHzfr>zp9G}=HGYb@=oq^We4NEw0#=C_s>W>^~Tye&~ooXj#(2XYrmD> z(sedTVA=uIm%OeD8m9a!9Nd@b&hUKq=%eg*>#a@_%Zu)x$lkHhb|PyhtLkzkZN(;! ze_nUz%$%iq^tC zFrsATSyT*^3=|f~Es$xG0wqsi>MTyvE3V8*d1H0R=Lxv=>OxMkmt)QkrN=W^Z+J6 zMh26UE0U{eI$*p`rS(3+-h@mgW`vXAlG*W z8?MY-ST+BpXll#eX&+lQ-8lMq^WIFiWxKd$dKhpxX9J@&tZH<~`bnTV8*! z{hqh-MW>kH%ij*)4D>Qs4)cb(2wi=@c}{b_`pIgq$X)04mn1DTnV0-yq3d$xSjEkg zOg*3MJ~k_HCCnF=T9g@_nVzSk;F*`KXDDwV3zFa#7K2GBgcOw) zmnit9mXzlgWgA)>SV9ySg`^hc7AxeZDU=qcDkPRDWR#Q?6kF-*mzS68l>tpH2AZmu zoS&;-RFJ5kk*sNGV5n!H1JcYatO_^XIVZ8WSixAqIX@*;0pyU(ymSR4149D^XGa4$ zab80U0}EpV2#5l5EkRr(V^d30%P51!RY=})_A?YP-~*Y@&cp7MnwbSO$>M>j0(un!pO?N+{DPs02Jq7YGPz$*pwTYsrasCi4N~!#m7f#=Dyr;sYm5|Z`G`i zvg`AC*!zr@9lx5iT|ME}`AzyF${(`dero;`w@Jva`tFQb(d<7B78d;zk;z@6cFE#K zWz)6^w@OxBkyz!)QW$*L>Ij2pfa%ucl?$Tv-n`GhqxRQij`9uv?pV2*Zg%m9_KE)L ziuiOYBvAQis)Uo{`5&$vg@yM5+UGvFq#$)Yp>ST?h9}cI^>rc)Cs!G)N^_lZN<@ZB zYToWGyg&W?Z|6NW+py$e?p5DCcW3d3a8@MU3jV5aDC@Vcrp>g^Jg!GPr|EKbz4nt} zc6Xh#SxI@f>xgQu(UldGqx;1xqGI=EY5nvB2<%1SeHlVHPF> z25^kZ@-s62XJKJxVs9|e2F9nXJd28fl7Yekxdk$9QlNwfOn1d;dc~Ew$w}Ze2jnCd z zy{%8(@*`)xYj`emd0o}n?d<30ZkZ*p_{5W}#s{pKRzK#joJpG}CCA@w{WP+=#+;%4 z`}%-S2f6caF-$0*x4Qb{nSIy4ExEE$`1VsrkHgJ3+s!U!^87rh8IfmQYkXpFqT?I) z`4bM--@U$$W$(3s_yu;XkFHm34lCrlucwe5VmLMFREys1iyz*4{`>r)?zX`4eFlq! z&Pi-q`>tx*{*-*r<0OwWL@DX0$xdoRr%sr@M;DF8Gt_)S~&10U!$46951J literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/rising 2019.8.cer b/src/MalwarePatch/Certificates/rising 2019.8.cer new file mode 100644 index 0000000000000000000000000000000000000000..79cd4978fa6a398d7656ff4c7f37eb660b9fdb6c GIT binary patch literal 1365 zcmXqLVhuECVzFGn%*4pVB)}Uwz1(YRyv6EO^DKW$e5*0wW#iOp^Jx3d%gD&e%3zRh z$Zf#M#vIDRCd?EXY$$3V4B~JJ^SETDXF8`Al_+@TB^yc_h=YW=g$2sX%k@%#QprFm zz2y8{Lp=i>kQB49DqM$SadBx;YKnrVi-L20N~%I|W_n&`Ub=#_qpqQWoH(zcrGYsR zgF%!yuaS{~xsj2f5r`jU&^QOlMb3VP{6H52&1dIfd)hPo$*whqwg%P^Cz?2=W@drR z4azJAQGTf<<@rU~3c;z#rA3(~l?oxL$r*Y1Ir-_8KzHcrDEO45=)trz3zMbYpovil zIS3h98JL?G`5A!XTue=jj0^{5pd_$(*VNC;4|teYE2g|xv;4FsUTUwpmt>gL)jtO}ta>*~?pw^x zUoo-y-w5zVV-@rE6>XM9IvunUsQJ=g`%a7JyJ|$|OFQI<1`PX7*=@~Ch zAN{Z;SWJc0J$O^Cdi#pCH-mW+<&t_g=a;V!W@2V!U|ih9xDyy6TMguaF(s?aB4Hrb zAX1%iPIJ`(@qM0E51-m!TmId(-_*!J7NmfWMT|wniv8e&gIjkQNictMTWBm(F6Z20 zV!#KI=4WL5&%(mY#NGf-oU*DcJO*5B9NKKa1kBFNY>*35B+rs&kYZr4KyQIgn^s0i zNr9EVesWQcF-l_9PlTjQ-Q;53bVEI$Jf;p4LOOgv)+w;K8aNx6vvDT0c`&y9&0%IV z&@#|~If{u zNPcp00gAH>eBi2>+8kisO$24iVibk?uuKWflb$Z190|>kp!^67gc1WDke7r(!OUd9 zfSkO6B?K^eGcq(?30(d__O!IZxzit%j7@Jn%$$0bQ*9D^;)%U1Ggj=_V4T(Xm2Z0I z>`ZPOhRu#v?fO>QBAzba8oSwe>iH`^ab_`y@-69pwXBdeG|Eg&jQL`V{kFj_ZAQcVgeyaH(abvT^I{=4VOULZ5`45oc+Y29P-Foc=o`Kr10efG5`LAtZEUNd^$5A8D&dZ6~F zyFdB%C$n>UYZ|X9ZV`CrGfB?(2HT!@1qUxHH!b?3rk%#-n>-~fRjV#tPIRejJym$aSo;?Mn;BBxsjQQ?^>4V@E%rte57XX%MF)$RKE9C z&H5<2KA(rZ&uH24t4Z6{6K3OCIK4_1$xK7Jmq5MbfR{uL_5@E@#(k zKM7`c*EyS&ly|$ncwH7$~!GXtOc0va&NViiv}?7X$UDAZbr7 zC^k@qD`GN`{}> zHMjyMJRT|m8U(aWnMJ}ttU+X&b?}Eubo8RkcpEnoCjt3Sj1RF{I6Dp zezk52))PFZFYcL_UeV{j6FC6_b2u;oGBU`@*_~K&<#oW$U)jqu1yY^d7X7PkiJi5c z`SOO^ol9P6yyD>u=P0mNzhb@QHmg>P4a1Fl(K$2uQV-nPDcgCs#W%-nC;MxwjhqUS zrV@!Q0vS>5*t})jN8;t{RJUB^ko~%9?Tcm>4e*9U! ogG>9Qj7eWWSS|Z%zWGbHRA>Jd+J0#ZU$If)yN72#9em3G0Fd6f=Kufz literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/rising 256.2019.8.cer b/src/MalwarePatch/Certificates/rising 256.2019.8.cer new file mode 100644 index 0000000000000000000000000000000000000000..46f09fc5a54c9428dc05074b69d5b56c09922dd6 GIT binary patch literal 1380 zcmXqLVofk;V)0nO%*4pVB*3c2xN7cEw(0vxPkIm+43kRRx1pcU*qY)^ZpKiRd$(AK~j;z|>z z)XXf9sX>{=Aj&Vbq&&YUTOl|#xwI&=q*5UyH8~?MKPNxE66gv&9R;6~6g`-BW?{0l z8#FO0A%`L(D+6;ABR>OBoQtW6k&)q`jC@_K#bxQ4DH{(lyxY~$yKBX=*FHi*oa?I` zVk_qedo)h-=)Z8OW(nW5s_GTK4k=%cEN>UtxnN4U(*4jE-E(UrT1$VbE;9L&H>GIm zclQnNUtc``t>@|q$Fm&G3zP&F@0$8~`2i2}YQ>cIYL=hY#7pf}_mT{=y87qfhE?xo z$$g92`71`YbMXqh=KKdYbT?1k|8%F>w~70Lxi=iniU{_WW0GfB!CACgFm&PbeHW*H zuBZz*P|5k>Q*2Vi6@}xymv+@v_Z!$ITV0Z|YjzFTD(aKBY5CFm%cn%`^Ci?THvd}8 zEIs4J>7yUE1dFM#x(9EnRc~Lh_GU0oqFhq%=KS*Y!A#7I42+AL7>@!&B@J)j~?Z6-u%^8s0`z~XA)Y+%mD znb79J*!DMvnbAPYKm+DHCPpzCkZX#8&Oy&T`pyBt1{`c`>5V*$EQ|(?Eig@tj4Txf zWdzvAotnla!)c2r`%e7$!DjlJ1>p`W`5re1xX!Eo;#_Dv zOE|7MVw;KDO6hkNvQH263Ga$!exYbDsMz>ZHzD#B7Z&N+$2#R|p>!5)rAre;9nQc@LyGt=`j^U@WZ z9S!8fc@0esjf{a>K_CjqwJ@+WFgG$bwKTPiGHBe1`tkfSwKTz zBJ2neCj$qtFGMV%Y7~Mpi$V5z=B4Eq<%0d95R#glk(Zy7pI(XVMFpSC+{}{H6ho*P z%oLbm(8Q>K9Nvtq49rc8ybM5b4yGnXMuv6%vtC@>!CQJ$vCXX4V3O2K&KqSiD=)l` zITOIdz?Uddn&v7Hgmo94tYOU>W6ZuQ=Z;z`@}^#guSQtj!wu+QwML7e`N8&{Uz zifr$?AuhEqVAIuqCqyiM-f~?e?B)Jq%BmNaSt~e~u9n&Nf5!&nm(%urnLcNI$x@r; zr4PaZgP@d za(*s|lU$TzkOoq$z!Gl|YY@%GozUjN*!IJfkzJhGz{fzDjYFG_k(HI5iBU`(WJWR2 zkQ5{{k_(CrRN;!43?zB5Dk~~TG!O>aqsqc#zy(v!%xn-2V>2?ccpG>c$iw&sjBUcG zj!pqN+CUAifC-PUN`M9dZBu5EFc51HnPwgQq0)Hz`r79AdfI1BZEuq+N(1LhSw0pq z77>TyvxX4?jeCQ-&l=w`nZjkV`s^>{R0z!Vz*NY{Fy*rA-3ujBiMK=lEPk)<8q!sJ z%QfTM1J_XHb4-haZ6z|g|LJfENPRTgU1?^%H#o0>HS?^>ewT-G*Me{ zbV+o%`tndlhfScZCIv^;qApUq#mMpUvV@ z56`$8zvft#1T?G@+wfas{-%px1>4$L7w;*o%`Hw>kac_eTk%-2p5~^`yBEV3Z)V%P znZNLO@zVSwxkV~+%%?B>h`DraZ_KGrBBz%8vW#7HTXR>>I>T_~jWMozq7J?}iMK_6 u&x$gw>6B;*o#V{-v{gW&>pSZt(=9S}-|CjTzdrM4?&s~FrIx4!p8^29rqU(= literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/rising.cer b/src/MalwarePatch/Certificates/rising.cer new file mode 100644 index 0000000000000000000000000000000000000000..18f2ec46ac11e3bd7d0c2ca588baaa0018b35dd7 GIT binary patch literal 1377 zcmXqLVvRLuVsTx-%*4pVBw(afacU#OmTfl|oJl*F-Jom0%f_kI=F#?@mywZ`mBFBK ziy^lGCmVAp3!5-gXt1HUfhdT>CCnF=T9g@_nVzSk;F*`KXDDwV3zFa#7K2GBgcOw) zmnit9mXzlgWgA)>SV9ySg`^hc7AxeZDU=qcDkPRDWR#Q?6kF-*mzS68l>tpH2AZmu zoS&;-RFJ5kk*sNGV5n!H1JcYatO_^XIVZ8WSixAqIX@*;0pyU(ymSR4149D^XGa4$ zab81H12Y3l12BjJaxH)yb0cF@OH<1zgT|dm-g5Rc6focena?52?v$FD1vCjJ!j2Ge zGH?K?;S#Zgs!<36Iu&TCXI@%O97~L>49rc8{0u;GE~X|%MuxdnCuSzgPF?@X`;pGikPQa|PL;@o z9SYIquH2Wbz~kezb!Kp2ZK!d}#qVuOw|+!VEc>%$j~}1EXGGF*^Tvn0(_6mCozi}^ zIA2P?hHrCi<8&(MSuTu(Q=8zEoalE$B_`b~X`NI5SuBT129&D@%yY?d} z;+0-2bNB>?48eCkxzgrqCq7##C=tzedftKw>aBL$clU+teD6O;O;JELb^Y<3Z5MQ} zKg^n@;@r?}6?nPduyU^A?j1F4iusO4o2A}ycZrIAi%*epFxQQ_d7$R}t zv@0vj!eqbzj$&DUM#ldvEX+*o4F=l4=#-UbQ87?5P*@jO^mf20jMLY#iEb!0f`##3&{XOU)@r zW+WFB8>qq+F&RkmU{wZ8?*_skdsJC?47gzGnVAj3VQfZ57H`7z;Ky8L3VRlVD;JoSG&3ppJEOABB+WMl}mPi8vbFuTw!RaZso>bXpf>k`V= zFP?aKXUqKAoZ?w$r#$&!{m;+rMj2;rH9vgk^-OqzRW-xO?$>MelD{S_im-T;yteu0 zjBhz@^QxBVIjKE(+HYt7Vb+bDW?&R4T~zM1xDt~1H#OVM!1?k{?v^hrY|hzS{APaH zVejR&F8q(m-|Sc2tQyjHapUS|SM3@Wb~spTuU%fdadVjUf4dugvKq(c$}szRdOUSw z?)Gu7HhG!#Rp#fy`P@^dl$9=zsVMcUaY+3X_3Is^X_4_@E$b)hL+wB literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/riyue (at) 256.cer b/src/MalwarePatch/Certificates/riyue (at) 256.cer new file mode 100644 index 0000000000000000000000000000000000000000..f74801ae8c7bc143833f447358806bd56af7fea5 GIT binary patch literal 1329 zcmXqLV%0ThVi8@y%*4pVB%tz%U3K|&vm>@gNF3`ED~Iqo0wOUnylcQUsRA^lvt9PpJymnC%u82r zb~KO^=QT7pFflYS0D~wX*8;>fGB&j|wTv=oJci^#XFo#$13r)q96an!shL?oLtrB8 z2oWa(2e2=AEQ2yDOH&m>^7GOwK=yg&rR5jpg8iZplA4^6m!FfLUa6n~HA)lcIz1f) zpOO?kn5Eo2Or9ZzPy?AMFwmfhQ2{yd8Ce;an;3Z+fZ`lXO^l2T7bA}HD8$$2uy>O|2W~hJWggCEU z=i8fySFZTCUT=~|z0@qfCr@4Fv}+%Ki_;J=u=)_*5bbe*TezI*)@FxY()YsnQooAG z#Xfj0_2v0n@f;WNImdeZ8f!w9&EHtcRlRJDIiuLL^LJdr`3_xs@j-RbJk@UJJ%;Zu zyYIaCOsMhy2hB5=Zaef|)qA_d-sXv&mt*LuTdK?a?|9$3U={7Q!Q7!?XT;-m_awb9 zbSNk=JJfJC8J~B*Ip>1grR1!ty#J;w=ez&jihG@Uynd=&#C7ju?{_LCzS(vEOT}R( zM&`v$jIqG*hy#g)0qNqWioxgbt*QI0_(NU;J-ltF|+7#mx9BM&1Bqk)fsG8>0B8zU<# zI}@XrI7oXjP=5-N_T++M168;pCId+xtjdZC5)FhwR;aS@7;wSVGcy~6!`O_BEZzp5 z2J$ez0b`pms(VvF?ln+@D`3Lop%S1$K--jABn-qFM5b8>f2cH`zP`5ky`J`&Q`_6* ziqgROQ3j&;eI7ge#Zz8RK?oB)BjAD93c8FUIx>lyx;HEH{z zF3Awd@Q43e+im?f%q{3tRlB4f_jq4~%+gI~zy4*PQEGfPFmbV_(!EV*s`p4tODjIh zdEu`v-)7q;*^_IcizI&AWNV*TDsjn5`wPp~W362;FI(!A{Z*aYyCddxarwT99#aL@ zHm7_3^f|BLw*Of1Bgg79jGG<*%+u|?*Tu$pI%`vL&$Qn6^Cv(0^KENVhgg`?4XgGX z1WcFR~ZT2xqPK5v|-2{z6<}&%Qg3 z)hi-eKh$m9&y%0AHdS`Q^gHg7rw^@`nm6a`DTCv$Q=8Z5yO*weaZq_rLG*gY^Jgco F0sw{Z)t~?X literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/riyue (at).cer b/src/MalwarePatch/Certificates/riyue (at).cer new file mode 100644 index 0000000000000000000000000000000000000000..c51fc90bc082622944428f3193b58d3ed65e04e8 GIT binary patch literal 1611 zcmbtUeNdAH7~lJ`jgR5L(Gqm>O3py`@w_-;APNjI5?C@(5>%Mm%Xn$q3u6-`44fWj z$&sI2X~KbLXPT0tqUp(Lq9k@|bb5!VnV}w~9^onG-FjadO7>@eKF{y>e1Cvj@D8~7 z>Lv_DP&6>4Hz)L-A$Qk@7rrUDJLi%H0tCL(Ytw3<1|Wz(p9h(wKllo;MYuqMrs&B~ zn7|2slAs)BA#Je}Dak|zZKIu(nG6Sl!!SvR7fW4Cq%dZR;E1%{!g68qn*n4D3DG3P zLNvtYvSJ(={Za%s(oRYsNZ=nOKybtzn}8zNNZ<(|9jin|LLEgHvtG&95abmigNa;1 zVo~q{2ffnhq=@$%7Nec6G&*U_|M?UU=jU0OM> zQRq7DDDR zaC6|yovClovw!aJ9gJ?=``C~u^4zbkf7lYx(Z8a5{dIE7_N^7a*9}MW>hfHt?q^#b z`}FSXKeKV0;DAs{gnyEhujORg7W?4{32DZEQzcM>a|(Mi38m?fVChADGm3v}#3FiRaodgmLg&IC~5=!QGkr zFZ=g?FB#s!2ntaUIa(EpNM+vi%FD~gwxEQu(xz4Fv762QMRv0hUfwvDD8Hp3;jn4I z`kC_Xg!(0&IkE>GpUlaZp5E733>)Q=r3&K5Cr7HXv1j?Z`efeOH4%fkaiz}-EZvNhfua@SP%>1Q?E?m2d6sCPqaB0sd5$lN_?erjNpC$O>y{~{v! zbM3hchi0r!96IA5NgrsDh-PvX>D&sRJ^2NJI~pZgn&L=4LS literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/ruanmei 256.2019.1.cer b/src/MalwarePatch/Certificates/ruanmei 256.2019.1.cer new file mode 100644 index 0000000000000000000000000000000000000000..480eb64b2b043e2f739b09debbc3e2b518ede581 GIT binary patch literal 1302 zcmXqLVihuIV*a&&nTe5!Nx;Hl{@tUwKdbLPRrz#1?Tw)UFB_*;n@8JsUPeZ4RtAH5 zLv903Hs(+kHesgFU_)60X%L4?SR}YIH!-gyHCe$qzo;O;D6u3nKhIF!Ko%s;Ei49? z4k;=vE>ZAHEh*10$~H7G&;u!87FLHVaL!3AE>}Vh-&TD9HU;%_+5GBrQWB@eA%*fc(($q4_pm8;l3!VK81r7K?HgNE81ZO1XrR3+O z8wwckfrQw3*aLxvrX=PYniv>?M7Vggp&|-FrHOgDshKc`DukpaXXNGQ z+nCOL^Sa=<t^%rh^yb( zc^@_$obohhSJj*eO4<)!t?50=c_46VM$tNnUsJh%-~E5u_|a|Ac=pU~>~SG~Pcktw zFK%Lt1%^i?IN8YxvoIMjfa6b=pONuD3kx$7dxL>CF!p5SSyT*^3=|f~Es$xG$|xx* zu+rBrF4HTn%uPM?IJDUqSy|bc z7{$av+KYkuQ;@VL7Ze+)!WA(YNb+D+R#cE^APllXm4(NE3#Oi#*&rOoW@KdXHt;l% zhw%*<+k{cwn*wsLff`%^6CMwh01X1#rpzK?Al4u<%{ur)rSbIjwaxGKw9lN{-X>R+ z2F`@Cd@N!tB47UoKbVjvw%((&a<_C*_cCF*o2uvgAHX3q(K}mVUgg<+{C<+)MN$c{Gx*VqQsKS{5(T>16hzXx3Cyo zI;5zyxJ1D(wWK`1DBIA$Ko6vVSy&yez&R(exLCnhA=tyw$kYsITuQ1!aAta5W?s62 zv!j8WIIp3ZfuVt^0T@I9x#k8IM#e_Qrk19bQ3j2xkzDBPXDDdE53+$nm?JnNF)t-Q zFWpeUfDa_ZF3cVXG&ChK-_XRs2qeNKq74;M2r5m?%T3LMIaDDeH8~?MKPNxE66hj5 z9iNgEJ(xY*B21nkFe8{rGQyyVQ2{xG8Ce;an;3Z+fZ`lXO^l2Tk6#^sK6Cc(=LfPs zTzl01ZB}|~jA%+?!K~7~QJa)*#l+9e=@C?O>5%Q&>hol^U~}HlWmyJI#vL1;vn`sw z^Z1U;6}`!poBq2wcbDX7Z`{yQ{UYV|v-#?ss!``ep9ue3{Utx(|I%wgu4yOgScF&e zY)RbK6d)J)F8!~%rgiE1j&Cwi{KrdWum3W-IK@S%=$ojlQW%44#P;@>m>(7027AwW zA5&&&-Ji6q;)&@|5sm}toOgGL3A~cH9`#{`l%kdZ>pIuI)y{93HuzY~JhJJIa@B?% zJ|7Mo;dnah!z1Ho{*qfRA6{bm>-!qJ35gpU3mM~g+Vg%Dnt8rss#VI`BfEC}o)yZ( z$h^3TF$owRao}VpE6l=VzyOXvS$;;w|12!bOzaH?+Q8V8m1j{gP%=}$}va-DOO;KH;6TeX5&t1^I&ZI;mXJ^&TQagpv=ah z&Bn;e%Fe_nCJr*A7-&cek{QVb#RjTyMN9^gJXn<#6(kx6gX~dd;W6NXsb^+32#2v5 z8CkpyJPqVwd;`WdVN^$_fE;b023Np@$5$mlgMhXvvq%_-HHb{J4*pPSJbis_^Lst* zGpDw<$rYu6bD}ICix`VYz&!1L1{bzhYE|4SVSD__=3LvMImoFHn9qT!kdcA?&cB3p ziwX}fP1R#9eYPX4 zZ5G?+^#PXz7sab)mugy^E|yqqaa}KGzkAaG{SWioPilnAzSEo>dNX!wSI51Tulycm z@#}xCwe3Chc5B?fvVS2>y9LX;+$ZF&|9slauhe=Ix8TwDYg!+KPO_amrQ*=hX}2Dw J_iQy@1OODi&a40c literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/ruanmei.cer b/src/MalwarePatch/Certificates/ruanmei.cer new file mode 100644 index 0000000000000000000000000000000000000000..1cf3b0cc75eb3eece66228d4633a9310f6ce4b51 GIT binary patch literal 1356 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 GI~4%TMa=pD literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/sogou 256.2019.8.cer b/src/MalwarePatch/Certificates/sogou 256.2019.8.cer new file mode 100644 index 0000000000000000000000000000000000000000..132dc539d81a7787f7d4143f21a1a8447340d5a6 GIT binary patch literal 1297 zcmXqLV&yexV*a{-nTe5!NuZ>XEi6PX{>43)nWx&`e>F1TW#iOp^Jx3d%gD&h%3x4$ z$Zf#M#vIDRCd?EXY$$6W4dQSKiv(BZCgzo-CM!7S7Zv0eC6;97=NZZy$bzJ~g~i~~ zAw{LdB?^A2CFS`=*@gxNdLRYN!s>7Z&N+$2#R|p>!5)rAre;9nQc@LyGt=`j^U@WZ z9S!8fc?~TM%#2J8z#vMT*T@LSH8C`tkfSwKS! z%?(V!ZsyU0iYNra2xjcHLvzDY_9mYw~>36 z^U+^UIr{*-+kSsbabtV#Q`cn~Tf?*`Yu=VJoS{{iTD>gk znlp#@gewo~-|k6Jd$(c9pN+b@bI#_eUdTCNqksDA>=Z-k^c(rL_dcaZgP@da(*s|lU$TzkO)$&z!GH;VGzc~mfpz2$iisgW1!5&q0Pp~ z%F52fC?*clUJTTqf}}mUpx8hau87G%k_W4@qJl&NVUQK7EIbBWF!jvL2H`L^BO{Bq zfv15yjBmi$CXDLd6p(uj)Zhx3@OY>MXb{jgWflnou?CT8*1;btji;}#ZGNw(edg5m zHo2lSaQ>6!V-aH!c`L{A{8?++-dEf^HTkW+`i13M3)9)A zGf#4E`gg7ONa0$eyXzMeuF5Ri;q-i~qv;RUt9k)H|834Vu$r-F`4^6s1Mfe6(A@lJ zZcW27HH$Fi5?0Ya%bynNztr4(JWu#(hUe&%Ur~+V8V>W_f5t9q)^d6#Ud2RhM=%xN_1nyR!1-x1s}*kA051 GI~4%TMa=pD literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/sogou 256.cer b/src/MalwarePatch/Certificates/sogou 256.cer new file mode 100644 index 0000000000000000000000000000000000000000..12f672a41094e7a2624bb257d349ccad3c29e227 GIT binary patch literal 1242 zcmXqLV!39}#Jq0-GZP~dlR)ipCieIF3`ED~Iqo0wOUnylcQUsRA^lvt9PpJymnC%u82r zb~KO^=QT7nurxM+fG8l>!obqV!pPXv($q4_AREbn&VGgh27Dk3IE2}qQZuuFX23+) z5h6kc0$@*wa0ch6=a=dw=jXyyaf`6Kq!wqF zI0sV`BO}ArQxcBXeD81^eJg8}F{xA|XI$S0i3owidwO`*g~N#@Nwmf|F>D-N7%Yu4nl{VP7rD4!+S zbJyj}>{k)f|7b+>0iqIAd$HK!?E$0gte~n#!$xNfhR_LgLSfk6N6|Y04YdC-X zde5RsmaRb}*JHckOQ#D5nHZTDH!&sw!y^uyYGj33m<$-eQ6kIF$oQXyg_()H!9W`r z{Ic>aDh5gh3Jc^G$h1jil#~=$>FXDl=@nPzCMSWS1jI=$$}va-DOO;KH;6TeX5&t1 z^I&ZI;mXJ^&TQagpv=ah&Bn;e%Fe_nCJr*A7-&cek{QVb#RjTyMN9^gJXn<#6(kx6 zgX~dd;W6NXsb^+32#2v58CkpyJPqVwd;`WdVN^$_fE;b023Np@$5$mlgMhXvvq%_- zHHb{J4*pPSJbis_^Lst*GpDw<$rYu6GmkI zVaTZvm`#DHkdeXBJS9g-R4Cw8mD@@;4=IB-1A(-RTJy6#7Zm=kN9 z&FxLjyCyS5x;ivFFMkt!Gwh(Mm=2G+y4IA?-z_mub}KHOazUGKjsCaRjW=d#{w&G) zrG8tVv!}pu+MjSIo1?r;wh6*p*x#NC?wTcZqKwPda`EK*Dg3KiP47KWa0o3>uzdF0 zq{nvOZQ=Gtp}ZOMzsZOGbR9##iG&x literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/sogou.cer b/src/MalwarePatch/Certificates/sogou.cer new file mode 100644 index 0000000000000000000000000000000000000000..9560b0f11caff7a5074c4fa3020fdfca970cc74f GIT binary patch literal 1384 zcmXqLVofnJrQH;+?;(MTL9+~a**LY@JlekVGBUEVG8i;& zG2}MjWMd9xVH0Kw4K@@v5Cw6#g!#f!i!y^V)AMu`JoA$E4CM`EK@!};VlWAXkfPG! z5(U51lJfkbY(r}UONauakkq2wVuk!Ph0@|wg~SqtjFOUqVk>?9^73-MGN7r&KvVUS z^K}Vh- z&TD9HU}<1(00vP&uBCyck-3qvsimo9ltJThByTzU844Kifz0RNVRuT+%mSJO6JbY) zm>Zaa)Nt|WLDeV(=cnhFDukpaXXNGQUX6W?m}L`7W7dK=0<~0UZlAoS9U^4VoAgkmHPzm4Ug5k(U7| z&cW2g$jET}4(FG3b4oSV&p)*Pt&q&VD{os&k1|gXx%M#6xFYeKtjCKd71JF5J*;2H zVSf3s^7E4?{>pi6(4QIc`rgdL`;2?GT-7L6NKm*v<(nG2i2AIgMcCphh@DHQ#DNtcb=+rPI!;>+o!GP z8t$ZA;J4beU!}5U-IMC?i(V!~YcF{*CC+>0BeR?&<& zGXM4@S>~n-Y+Et;oK$c2;ksFKc%9#|+zXtnSQi?0C zFotC1SyT*wk+nc>flQkeC{+RzWpSEbab<3D5;#EuImtyi28kfW3M^3u5e8vwZ0U_W zj4X@>J_gEc9NKKaT*J=9C?*a|)G0{XlM9LsRN;!43?zB5Dg!2a17VOAsw_MPTrl;_ z%m(2wHX|d8w}GdDJdAI^*d~nX-V~5~4btz{ps(sB}|X2 zo?BW^Jfi;P+tCf2Qy;v($oA!}>cv)UB>* zk(FmrF#tx@0=We;ZBiK}B?VUc`o(2>#g)0qNqWioxgbt*QI0_(NU;J-ltF|+7#mx9 zBM&1Bqk)fsG8>0B8zU<#I}@XrI7oXjP=5-N_T++M168;pCId+xtjdZC5)FhwR;aS@ z7;wSVGcy~6!`O_BEZzp52J$ez0b`pms(VvF?ln+@D`3Lop%S1$K--jABn-qFM5b8> zf2cH`zP`5ky`J`&Q`_6*iqgPYQI?NIj74OJaG1^oFPm0Q(Z-yon#~t$i`KtHPJqCS z4orZI45f459(sQ7_;Nlj-<|2-ZW}y$w^O~(U90f?yZj>i&L+j1liS{eWp!G!yve;5 zT9Q!x=KrSE=VpG&j(fxz^x>mks^I)4sqBc}$n}W}`b63dpU8A|zIJ(*IwS8)rbTCf z=4W?PvxqaVet2cAY}6NyynjCY(32zIbAE~VG$sD#pPg}Z8+&_5HS64nx4XVG81SBA zTpW?l`J44q-5h(-&Dx*$JlXYZeZ@=Z$*Uc|PCGL{GG254w*LVPkMHhpUN&#e7M{Ng zjCH-D7Om+2-yt_wAz7?b$$jl*yZ>KX?NhoL4VbUqx@>PIboX}eGWDC~m06-jSq#sv UOkVJ)Ue9F0nFo*W$llWg0Jts38~^|S literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/sohu.cer b/src/MalwarePatch/Certificates/sohu.cer new file mode 100644 index 0000000000000000000000000000000000000000..0015e1c6d339a3b8701e3990dd7d752078c8e637 GIT binary patch literal 1376 zcmXqLVvR9qVsTl(%*4pVBvAX{;T`VF3`ED~Iqo0wOUnylcQUsRA^lvt9PpJymnC%u82r zb~KO^=QT7jG%^Ni1%W6a*Br<-Fful^G_{N}XgrMMLT5ii0Ruje4IIMkA)bzYUY>9f zc7%wjfic(@B06sV5elAuZvH{Ojv=1@ehMM3&K`dLKK|~J3K~%TnhHLizMdhjE`~}5 z3Si%fNCp(;r<5j_D1@XYXXNGQOB zoQtW6k&)r-tJsBVCC?oXo~w&kcJ+wphtsytS~mzfHLhR5_pfK7tIE;ocKYA7rl+JX z-JiN;PhT2a-_DxVZ$J3vs;KN!k34j^Fm#!jhGj#>>Zd0{{5HLK-jZsOZ|QFz{htu!y49bNspD7n(eTM>o5OGYvu8-E zWVMsd&Pm;}*HQeGjOwJPyXr&JJ$Ig3WuH#W8Sz#6?0|szp%knca{%2ufW@2wJ z&<4hktUQZ~0Wh)_$Ssg*lgcP5DX`MlFD}z7uFOqN(o4?I1#yy#atzWyiWOMm4Pp(V z*|-zhJQ&-4xH7VfGaL9AD6?^BvoW%=vNJJ?iG$221{#urWJYp9v4JXF5tD%=4_0MG z1&Id2AbV6Y14h!eMMiMiy@aPXl=v-+-}A7}e1!AV(Xh!4)v!@l^@XAfRo^ zED{D{4IY@ zEeH~NY#_+S2?+`(pv!=v$|7JO#>NE<3>L;Fb0$V<77hb8V3GueIdYN(78bxH%gErH z$u7}-UxexMc9XoyX?1$nH#P0sC%xbGOSh!WZF#*D@(W&{HJ!(48}!9_RSQe7>i^Z% z2Q~yV1zl}AoU$~gujKWU;^GZ_oh?@Lavmn7vP~_H{JyqBOsDomZOG+Mdk=3o)w0Rh zV&liR!Cj6#)hl0K&$+$Ue5urWE-lZF!@Jgc?G)kMom=zayWtZai}i`&>sNmG8LA`w zyncTD(V&p`Ne?!+MRBd)d*~2<>CGQA7kY*8TZSjBnw{?zKKoohd+>kn1Sj$NLd;vQ zc5g4Ap#5R#OC821XS!W?uM(8H@n>-pX|5H_5S9imJmyJ`a&7F3`ED~Iqo0wOUnylcQUsRA^lvt9PpJymnC%u82r zb~KO^=QT7lFf%kU0D~wX*TTTu(8S2t)Y8;4%Aj#Nk_(;v3!X1NL6`cL`bbLZw z^bC0nxWInmVGeR}hG}FbtkIx}Q2{wL8Ce;an;3Z+fZ`lXO^l2T2bBC>mDXJ1zOu19 z|A^^_b5c%XMi+X&KH9qW^5t-$t|#)^_VZ?ZIvJ?(e6qHB*U?fghJ!^siv&-U-tqRd zUO$JKpNVyU@brGW!rAH!nr9oF%h!aa&8_RxKXycJ)5*Sb z@4l)2A>mMd_B?^>4juP-Uz^t|MII{W8Ti#a@%QrAg znh-znZIjOFplo&#!6mygkK|9-xSL!1T+mDIbk8W`rH@13@Fcp%>`Hp@#oGU&&sQc! z=EY5nvB2<%1Sc_BVHPF>1_M4|Xv^|5GX7^_VP;})Fwh3^7+G1_ znHa^yLE4Lf`csg!Cl?eOsKOO78A$SARaR7xXdn!-LX`!SETD!mGaH1%*o=%U-Uglq z@-V&uW1BFlds9H}HBf^qV8Y{}5}-jq+mu-(48$5lrdbDns5G9wzP9JWAzaOj&TkuY$-oo~53X2YRl+V-Zf0LuSC0&y2J;Dhx3$r_OIMjZKAvS*{N4k1hs;l{nKo; zbIY1*9&hGoWBuRaByd~7wtD4$2G*xj*TmnwCwb+o*+ZkoU+WT=F?(NL<+zaH*sWJ{ zga1tp;M{se%Ru(w&L<+`%63tSpAV}YJzv9Gzkn_61yGG_vuF4&43g$0-0@ CL9NjM literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/taobao.cer b/src/MalwarePatch/Certificates/taobao.cer new file mode 100644 index 0000000000000000000000000000000000000000..2e16c27195f37d9802a4cb8c4946f91b4028dbab GIT binary patch literal 1336 zcmXqLVl^>nVv$+E%*4pVBv8S{V6^O9Eq824(ATq1748`DvTc;+SR8Oj^Tf+VlpiWk6Glfu`yu z=jZAd6(lNXBx@QP80s15fHX4;tHMop&PgmTRxnm@&QD2I068QxFI~aNz|cU!+0j5w zoY&CIzzm4NAPUH}FfcbXF)}u_G_{N}Xq=AZEoVPNK?8n}`5eL=Q5mUOnTdJnFd=qf z4i6x=DkHztP}4viq>4*KA;i(&$i!P#F=$0x)^&ydG} z3+!7F<{%emm_}y88V#Bl6_DeAk(GhDiIJB9D9*vu#K_2SK*`@#Y0V|>D;vA>kC=Wq zC*>q&bfNd_qpfQ%Uk(@QdLplFKX1mTlYtt~Cu^&B9WCWzI9SB9Nbp4I9dA$T^>di{ znOOG+Pw%%YoUP8FdA7m1d`)QD+`1l~3qhI26@`2v1wRBHul(=#V@KpRo$NdJ?wjf# z5)S2O&l9-r&~cylwaHD6f^F^-dqOL6j_qB%R``j$aA}su-8D0AK5;rZNn?I~N7mFQ z)vsOth{irUzFy*_vi&EiAiL=`4>{ZBEM~DR{Ik05LdC<1Bb(p6<$V>gd;`Oz3Gox( zHtC!W%4Qc4T(T?kNdAP4yScT`1-;}>_lz=L`Z)9rPoitguA~QFtofVqI3iBU`(mPk{O zv?mu78>qq+F&RkmU{wZ8#sh_~ zMN9eAY>q2NtCxEmi@KQn;>79e$O#Zw2mlixBg4k5+c(^I^^TEnc;2Kc`H% z=TdOR`k}aTg|JPH+~=bTe4Z)6WuHVsrvGJZVq1I0y6*Cqt%*EmFLkat^8V=Sg6u~o zN)Oym95LeBynlYV?o{{ovWfR*FX}eV*;C48RUn-E;aJM1hkBD54p<%PzG-ybQ&~ZF z9@|RZJ=rPj%D=Ro1tvcZQ{cbKedlHkgH-(_F^`ZVwA{4I?fJ&%1k2p?+cqr*;0DPt_loR@;QX;JI9pBe&S@^R6d; s+g5i>7h4+rA}CkZHpK78-x!1Zb9ZZ9en|PAvc19iUCHTIK_Occ03U$EF8}}l literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/tencent 2018.11.cer b/src/MalwarePatch/Certificates/tencent 2018.11.cer new file mode 100644 index 0000000000000000000000000000000000000000..e943e5660b4148a9b3abb5de34c4efd33bbf6bc3 GIT binary patch literal 1375 zcmXqLVvROvVsT!;%*4pVBv9jGTf3Xp&vj0qZCdQF-t7jwY@Awc9&O)w85vnw84Mb? z7;+nMvN4CUun9AT1{;bSh=Mp=!hB(=MVY~w>3KQ|o_Wc7hVlloAPH_^F_?rxNKt8V ziGp8hNqK%zwxP9wB}9QyNNQ1Tu|j^DLTPcTLSl(RMoCFQv6a4ld3m{B8PL>Xps9Mv z`MLT<1&In8$(n`+hI$4%AkECes&Lbta}tY-6^s>}^HWk4Kn}^wOII*5Ff>qbb~KO^ z=QXqd>N7L|gD7!cBLf2?10y42Q%h6JD1*j5NZxYxGZZoq0GZFh!|7g{n3tZCpO+nI)+yh7ty1AZ^?{{LdFmdD=hm`MQPAC$zn6UI8bHR`oV7Un{!Rm zgu}lU3$C)1or{j{E?Z${akl&3$F9V$ zPwwno_VWJrcDGkMepovkSzx}G)AWifbCZ+6=@7_CF3K@T1SwWvi86>V z2xDVQZ{%TQVKneDP-f%MW&>sxb|ywKaadYTLDHUFP;8(ISHxr>$%9oHFtr;9gRD?x z;W6NXsb^+32#2v58CkpyJPqVwd;`WdVN~~~fZS`K23Np@$3rDRgMhXvvjCH4gUI=r zD_>Qseepio*MI#3tJ?d=mzK{3XK7hJ7BLo)hI98eR==El`u>6W2TshWIrMVg!zkn= z2rMgrNsy6Y2d8`cq2d{*PAO&B?W^71eSVFXBh%TlFOO7bHl9;o|JQI{Q%B{~t)=BN zrrem^uxJ@)s;`8k)0Wd8-%gto{Z_s*-$Q({xx!n+lq*JCwkgbCqZ8RumJ+u0M&Na) z`Tqj~*YA4R&iYAtj`OWK6D!2KG$(#uw^{AVgq0O%b!y*Dakl>`^nCl-m$%|1gri=H z`=`bmMDWfRC?X_Sp=Pvh6hnX8mlPH@0iatGK3Te2{NtX~)Iu z9}YQAI-~h(irUuXWqJ=~jlUH5_kWz6QZ8Y%abD1d&k0r^W$$0+e--d)#(rO|d6CoB Wm~<|z<4jettoI7HZ1m79$OQl|u<0TI literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/tencent 256.2018.11.cer b/src/MalwarePatch/Certificates/tencent 256.2018.11.cer new file mode 100644 index 0000000000000000000000000000000000000000..f8d1fb047a08af05f4489e5f5026cfe1390654e5 GIT binary patch literal 1321 zcmXqLVpTP0V&PrD%*4pVBoM3Hv)}V1r%&C=d081|aYhEbY@Awc9&O)w85y}*84T(T zxeYkkm_u3EgqcEv4P_0aK^!h&k>JYQ#JrN!WCiE^qJsRQ#FEVXJVSW{S&%fhuozrA zq^PvGM8Pk$q&&YU+t9#352S!uSRJmwIVZ8WSix8!*u&At)C_1`N~%I|W_n&`Ub=#_ zqk)__uc3vZfgw;U2tY!MG=Z+k zElA9(RPf2n%`8bxF_bV618L*t;eWnh%G3Ud&(|${KB4Vp^9q=O%%mA;(8Q>O9OR6w z49rc8{0u;GE~X|%MuyFa`&z@<_T#jKDMoq|Bk0VIXX%D z(Dtr3&WCjGN?YD_el%H5N-OlU+g!0KlT)vD{+hAqHlKN7eM!P3CfiHlhr}Xn-?(mpag7Crtl`IX zgHxkUZ}kh2t6%>|+;Q^jsOlnL=kHAn#Z1hM42+AL7-NAU5(!R;vcfD(1`Gy#z<7}5 zXJq`(!otkN-e8~&;>)wB7$_MiERb6u(WXFgt4)uH}WvDFdFz6D6?^BvoW%=vNJJ?iG#Ek1NEmMX-_UFHc*8tVlt5A z!K$pNAkjb=WQ8gVj{z4B6$l`6_X&?{d8!)yBqq;W*f2cH`zP`5ky`J`&Q`_6*iqgROQkIWJj76m3+`Wy}FDIYAe_;NB z6EkWKy`1+j3ONY^b3HH#GBTLGnfY&J(3YQ^aSQq;$liUi$4+n3+sTL8<_kPjT2{Hd zqUk?#)Xe>7kC$IK9HymzK_z_ULSfdZ^A9+;Y`hrUCL_0?hv91R6OEpE|E6qK7UKH& zd1HWWS?ZZ*ku1Eof);(d>o>D|#nXbMg3odZ#}0n}aoUT0wTpv%wEl0;B%ODv7dXqE zyalc@MQ>iL=pXR=am=y;?>t8PCF1K3)U5x1dV+bSyy*(v-&bA#JwNwicE9gm&VazM z3)5Ef1*dyG`afxHUL#xh3Cos4KTG2eb}U?U%X{&Sd!+#rKHogub*u24bLL&CMRI0G i=ic6#V9IN%dvHVH%Po$7*IX+P+^G3^-3Kup|0DqEFWvb7 literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/tencent 256.cer b/src/MalwarePatch/Certificates/tencent 256.cer new file mode 100644 index 0000000000000000000000000000000000000000..dc191fb53cd5c75bbd0b80848434d3a5f85deb27 GIT binary patch literal 1321 zcmXqLVpTP0V&PrD%*4pVB*1-D)SUUo)gSWj%Oo=yW{DW^vT=DaaFUYU9K^+RuR+R9U5`Q>Sf#2rPaS2(|Klu=iPKPIkVQ` zZ~BWl?mofE7h~`2sb9R%;pXfLyXiJUQXwa=h&wguHSA?=d1Q3^Lr%qV9_|OL`>)N{ z5Ino5VyS?AqE6%`hVZP2y8*|FSM8bW^GmJl*TdyT*rn$a z{&dcXWjC&T_}}LJa>u>$KR>Iu`F?6CxK2IX_oHU}sua$4e^GUb!v>ply;eUpZ4v#y zV`iF1ij@A_qpD6$+fMB0GDv^Sygop38`I?e8`JLP#VNE)FX@~3*FCz(AyztnrL(ZY z?=#Gq+&h{xuCOjOzHYYUs%g@O8 zpM`~)iM_!<8^o7qQ87?5P*@$%9o{ zQ9+`CFvtp379ImGn0jVrgK!v|k&(sQz|%k;#y4PW6GnA!3dp?%YH$Ticsx`BGze&$ zG7B(yHi%5K4*pPSJbis_^Lst*GpDw<$rYu6^Q9~wix`WDiDrj2n|#XTDKo4dybR2p z9ls!&4LJz{b3HH#GBU7T(tRr*`abGaqoQS}XY#fa6X!=9S9D!*_`uDyifWowwy9NaYU7+ctcCSrp&5eb<$rz=W|xq^WYAzc_sdr$gM&|>UKSPn*K2&_ z=*27TZZ!uo8<;vSxCGY7ou1@kuO$8crtqI>k6;G&suReP#TQ}Hm?fr(j1?^t4 z8=vbMt@F9Gw3gp|+WGd^KduHhYTQ|T{qg<-oJ!N5NZM_>rhoF{OwI)xu08beIeBzG za~Lbf6qA*?9^73-MGN7r&KvVUS z^K}Vh- z&TD99U}Ruo00vP&uBCyok%f`5simo9ltJSjByTzU844K)fXwIM;dC!e%u7$n&r3HH zG~fq`vGZ^QXQbv;0kNT}fiXyki$^CUH7_|euS6jvH8~?MKPNxEQUj(+6X>Meg2cQ^ z1)t2^%#zd;LkR;hkTz}}{^tv(Jnf(OeBHw56WU%juYeiIOqziPO^iy&5yi;Lz}&>h z&j1wXVrpV!WcaMg5LY#O+T|KEYZWp5-Jua@tX{TVU0VIiF`Z{dc-~D%lQU}_{-(c} z^y8qgI4Z*W} zDwYb^C+b9AVhGQQxEpY+c-5Y{KEKq;emz`nlpS_wX-Ia{@ppX;hZ21SzaBM^<4@E`#*P%t9Ac&OS2_zT{652+ z$-SdF;|l9iv)%mnUR5UaT8-KFhnB3$yZjGg~@=yfDafCviyvU|5;d= znb;c)v_X7%78L^}1BC^03uM})K#38U7K_vLiYs%IlfdZ^$Vo2BF-Qa{R$z%Th%g9a zV@q%3VPs)6@G($kKz=X#`B|w9Kwkfj!lV^j-`I#$U zRjYmRKH1lQ{R6Ao`^T4-&jn{`Sw0pq77-K84r?~~l*vujxKzmBg`Ur=H8OBMYO1?P5hw}w2QCOf~Vt-~!RC~SQ>t{gu3_t1$gLC5|W@Un4gwRyCC=VfH%W@RvF zoM^~xz{$oO%EBhh6dG(OYak8ca0!b9SLP<>m82#sIOi7?ESsVNF!i8+}mVDo@x zr=%(bXQt<6=A|n*J1XcZxEmSBiSrs-7#JH_8h}BRIIocbkZWONY-(w08D-GKXkjR9 zAjrn8&Bn;W*ko?Q#K6i$@pc1ci`{Qeemw!9o!f7$K?28F~3R z`RSRd#R@(pDS9xwxOtd7Ltut5lV}Jq?39p`03#~{a}y&!15licsfm%1VYf1iefeIA zA2a_ZZ`l6kh2#v?y`kmbkKE7uxiq!zBV#>FbyB0xB>ok)r|xf!ySSQh%d!1)HU7V| z^jBKErAK1ns~^)gEZF;1@8t%o>>|D-p99Q>;A@RC6aq| z&eqnQfAmwK{M@$6)|bI2N)mRP*4;TYqjk+;{+eq=#WVf%*XVIyI`Eq5dK2&ZMFpEW zKDBqQXnCl2{Lb6v!{<&vv=)t8tRH+Q!&7QIM|;pNFZ0!V9?x|=SAVfFTS;8idQu0E zdfcZcS33Ea>%{CD}f=U)OZr*gG}Q^N?Dj z#0}kECT2zk#>GvH3BVAE0cQ+ZVHPF>1_M4|oXPStGX7^_VP;})Fwh3^M? zIDjdbm6e@|QA`}9yBMfF1xa^uL9u}G59h^5{0GI<=ZT(FIKW6sKBYtBaI%?9UZSw0pq7LiRaPAonla!CHg0!4vn zi8E)u@@`-?h=7^J$jIVj-~}`f>ShDRHepmBr+|EHpbl5S)FusAV2I=^aF~=Jr$S&s z1WbjD44KQd1&d!)KKZEd>*xC$u1bsw_CMFJe|5g{;mzYEK|2h4w|!cvzMd&9?P^_* z(UE|d2@Qq^TeL4+-6L(UxMzjyytG57 zvPM4zOOJdJl6-ov!ktUd{>utIzGbO<9>icUt{gu3_t1$gLC5|W@Un4gwRyCC=VfH%W@RvF zoM^~xz{$oO%EBhh6dG(OYak8ca0!b9SLP<>m82#sIOi7?ESsVNF!i8+}mVDo@x zr=%(bXQt<6=A|n*J1XcZxEmSBiSrs-7#JH_8h}BRIIocbkZWONY-(w08D-GKXkjR9 zAjrn8&Bn;W*ko?Q#K6i$@pc1ci`{Qeemw!9o!f7$K?28F~3R z`RSRd#R@(pDS9xwxOtd7Ltut5lV}Jq?39p`03#~{a}y&!15licsfm%1VYf1iefeIA zA2a_ZZ`l6kh2#v?y`kmbkKE7uxiq!zBV#>FbyB0xB>ok)r|xf!ySSQh%d!1)HU7V| z^jBKErAK1ns~^)gEZF;1@8t%o>>|D-p99Q>;A@RC6aq| z&eqnQfAmwK{M@$6)|bI2N)mRP*4;TYqjk+;{+eq=#WVf%*XVIyI`Eq5dK2&ZMFpEW zKDBqQXnCl2{Lb6v!{<&vv=)t8tRH+Q!&7QIM|;pNFZ0!V9?x|=SAVfFTS;8idQu0E zdfcZcS33Ea>%{CD}f=U)OZr*gG}Q^N?Dj z#0}kECT2zk#>GvH3BVAE0cQ+ZVHPF>1_M4|oXPStGX7^_VP;})Fwh3^M? zIDjdbm6e@|QA`}9yBMfF1xa^uL9u}G59h^5{0GI<=ZT(FIKW6sKBYtBaI%?9UZSw0pq7LiRaPAonla!CHg0!4vn zi8E)u@@`-?h=7^J$jIVj-~}`f>ShDRHepmBr+|EHpbl5S)FusAV2I=^aF~=Jr$S&s z1WbjD44KQd1&d!)KKZEd>*xC$u1bsw_CMFJe|5g{;mzYEK|2h4w|!cvzMd&9?P^_* z(UE|d2@Qq^TeL4+-6L(UxMzjyytG57 zvPM4zOOJdJl6-ov!ktUd{>utIzGbO<9>icUT!G^L1(jX3(ut;!aZem_ZYO;cJeo;YwQDRAEex9McfhWH8~?MKPNvu zGqqU3rzAzsP{4o>q>o#K-M=6e=<8INNz5dgWYEN@gdEt6tPIRejQk8haW1ANMn;CC zDQ*s_jt1!gM!7xO&svl|ao@Ijnceo4HTB`67dw{Uc%HWD)B$VXuUDm1F2CLI`^(}B z`*n{dx-NDxu1o#v;3~!B-FYbXpGw;`|GxEyVso3;>!tSOY!~RXU$KC>TJG^5p`?J@ zf5La_mt=9I%xI52xapgn;M+f6Hg>Ev=(jOlzeqW}PTKj=yQPaRo~q$-XJ7nAcd6O5 z^@n2ad_L^SQ?`CV{OY8TJ=_)>Hr^IczHXRdbI!=hD}iBejQzFkJ^Hh>w(XkTH21=R zUDxv(_j1o*`tVxztNYjKaw#n9(;q$NnbY;@!BJ_^qTe4^?lM+6X{=ltCd{8$GUxI3 z!~QqJ_Ag=m{+)@Lk%4h>6JruEMB>0{P*#|Q$$$YI0kZszjQ?3!n3>oc477m}A}i0L zVxVN8ut08sOq*0jNlAf~zJ76;UU6k^a*|$helCcUT$E#w22!lR5^oS|5Y5J&(B{F| z_QREtU7Xp#$3U5lLz|6}m6e@|QA`|UMlsNk6eKf}3yKX?;fk0HBzdqZD=J7d5C++! z%EDv71yj$=Y!D7(GcvMx8+aPX!}tb_ZNjLIP60XEKn<>d36HNzfCd3=Q)ZDc5Ni;b zW*z*Y(s=s%+UECq+GkE}Z<8xZ17}NFJ{B<+k+VNn+Rt4e_@ghQV9qtEPa9{fo704x z4uP2-m<|~kD#dNRxqjb%E9<80R#hHkQxtSdO)1}h@$uujE6k_gk@oxSwkrR&iA!(B z$FcE9`QGJBC}?HlL3 z?5GVcJ9TDL_(s;+^zdnobDK{oD>SBgt=@T?e|e|*hoHw-s+d20>zbvec5k7Dg|6Qx zm+yswSxI$~#xYHQ?o6tP)7sEoRNvFNcG}7_lN!gkm6%(+Gj)>N3D|9!74#W6I|Ja><@9q1%_j~jE zK47Qmft{*yATR{O%(d%+v6WBE?@H8S74W5bFRoBjJokklA1VbHaUbAKL()+i1}Dhy zxgdx%7}#uiz9~nOuQuq7EMpc~8UQO`<@XK`3+MLbU^B0l7N@K%s7E&@V48i@EJA;=<3F%a^=qzUX$F&+xuBrEwb z=cHN;g&LcVrLyQXM#Cl#9}fnBWSENi2?T%-a2)W(Vt%wpfMdX)=JPfULLs|Y0z(J} zCo1s}5Io%pW8U)gc%@vbQp!EYot6M$UTTF*nMFL)#zHViFj3MAW5^3M#Id9%qaJ?) z%qE?5%v+tOGqSRX7aj*g;q?A0Kkoxwn?y?`^+-yn48&!`;*AYCJl8 zvg3Y#w`)&3j=O4l+^r|XgQaCru1-4+KqN_EFvI`-)75Jq9w>jXr)TJ7-B5ocfpRx? zxEre;?5cH@A9B_7;sF37Gkh?n$*i-Gz7T(N}N0wV=8G_92Cre;52vGs4p;lb!kt$xUgzP1MRdcg2p@?(e`Siz4!))yV@%?dQ6V}bM&ELO%eXT7etn}JM?H6`7mJz#8niBvc z5Cz(6hn^D?83VJ3p@;fG&;*JiFufF%IcQ$Q-J??J5QLW1gR)wnobmv;A|cOaGskeb zR-LxMqKnjf9WNr{|lrR&%7*Vk7R>WCZ|K z@Fsa=kT(VC*-ErpR8%w*Y|)ubR)fuC zDd7S-jjAtWLWpO7gkmTRC_qM52t#9m1jIO^9HI)rWSd$`{!G^EnMA3;DUiJgT8qH|jI$x5gpS#9PL zPR#b*$!9yFxtSo03@<>5{ZcyT){>P=7Mp~e=8~NU6l>0Gh*b~tO&15TI|*?>6qQz5 z^wa+4jRBW#a5uuUvLlK=OFGS$p5CT?O1bl_{d!8P$j7moQyh@~=?F`B#kpPh^C4VP z`*O$9-4T-b%g2;4Ic2A1scGLA?A5H;Y#oSrndiv={r&V1-`dKHM|^Idy8BIER>G^G z3-X)qJ-hnn;jjWxoN`^rqZ8SumIvPJvu(k3Z6#|5b5Gpe+}l|I`j6en9Alkb+_BU- z$_dK3deItt#yx^Qo>yE`m$v@PtvIh7@_(#~njhX0d?Y~_5wc{w?^{K3(+0VGq|a42 zlsR#^d(gS+*{*9&O#?mKEMFr&->6<6Bv@!18?R54{>57L)h9Q9cxe0h{LN!+{?{A+ E0rQ?kM*si- literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/thunder accel.cer b/src/MalwarePatch/Certificates/thunder accel.cer new file mode 100644 index 0000000000000000000000000000000000000000..db03557834aae53a29ad2dc67c57bec7149c7ef9 GIT binary patch literal 1643 zcma)+c~BE~6vwki5(q)0D~EI_Q73}dkl*G68j&MuBG3dTg9vIRgcxEmiAlJ$(?U8R zSQIE)s=|<>7_lN!gkm6%(+Gj)>N3D|9!74#W6I|Ja><@9q1%_j~jE zK47Qmft{*yATR{O%(d%+v6WBE?@H8S74W5bFRoBjJokklA1VbHaUbAKL()+i1}Dhy zxgdx%7}#uiz9~nOuQuq7EMpc~8UQO`<@XK`3+MLbU^B0l7N@K%s7E&@V48i@EJA;=<3F%a^=qzUX$F&+xuBrEwb z=cHN;g&LcVrLyQXM#Cl#9}fnBWSENi2?T%-a2)W(Vt%wpfMdX)=JPfULLs|Y0z(J} zCo1s}5Io%pW8U)gc%@vbQp!EYot6M$UTTF*nMFL)#zHViFj3MAW5^3M#Id9%qaJ?) z%qE?5%v+tOGqSRX7aj*g;q?A0Kkoxwn?y?`^+-yn48&!`;*AYCJl8 zvg3Y#w`)&3j=O4l+^r|XgQaCru1-4+KqN_EFvI`-)75Jq9w>jXr)TJ7-B5ocfpRx? zxEre;?5cH@A9B_7;sF37Gkh?n$*i-Gz7T(N}N0wV=8G_92Cre;52vGs4p;lb!kt$xUgzP1MRdcg2p@?(e`Siz4!))yV@%?dQ6V}bM&ELO%eXT7etn}JM?H6`7mJz#8niBvc z5Cz(6hn^D?83VJ3p@;fG&;*JiFufF%IcQ$Q-J??J5QLW1gR)wnobmv;A|cOaGskeb zR-LxMqKnjf9WNr{|lrR&%7*Vk7R>WCZ|K z@Fsa=kT(VC*-ErpR8%w*Y|)ubR)fuC zDd7S-jjAtWLWpO7gkmTRC_qM52t#9m1jIO^9HI)rWSd$`{!G^EnMA3;DUiJgT8qH|jI$x5gpS#9PL zPR#b*$!9yFxtSo03@<>5{ZcyT){>P=7Mp~e=8~NU6l>0Gh*b~tO&15TI|*?>6qQz5 z^wa+4jRBW#a5uuUvLlK=OFGS$p5CT?O1bl_{d!8P$j7moQyh@~=?F`B#kpPh^C4VP z`*O$9-4T-b%g2;4Ic2A1scGLA?A5H;Y#oSrndiv={r&V1-`dKHM|^Idy8BIER>G^G z3-X)qJ-hnn;jjWxoN`^rqZ8SumIvPJvu(k3Z6#|5b5Gpe+}l|I`j6en9Alkb+_BU- z$_dK3deItt#yx^Qo>yE`m$v@PtvIh7@_(#~njhX0d?Y~_5wc{w?^{K3(+0VGq|a42 zlsR#^d(gS+*{*9&O#?mKEMFr&->6<6Bv@!18?R54{>57L)h9Q9cxe0h{LN!+{?{A+ E0rQ?kM*si- literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/thunder game 256.2018.7.8.cer b/src/MalwarePatch/Certificates/thunder game 256.2018.7.8.cer new file mode 100644 index 0000000000000000000000000000000000000000..8d4e16ebdcf1835bf5bb6b7e6638b8ce80e101ef GIT binary patch literal 1593 zcma)+X;4#F6vy*k7M3Ig2nZsP)O{3^`vN40NDU+=SPa#G3ldc{)F_k+<_cM{S|Ky4wHju+ zR-wfF)EX5tozIM8O2vFmA{SkV;=$AiD#Akml7t|fgm`W)x=jLH4i}XW1mpq>v=d=~ zDOe;LCG1nZdXvnkWM=7AGL3rkI3Jk;CSztIJ#;>jkO1NV;3aUm2!|WbU53y>2#Gw8 z1Q8$$F9nA1bU0mtM1e?O5vB)-a`+OFAWI?|Ke3MkME949g_2zK^QjEV2nE4dRDWOJ z5J1B;KOdh=umqC=DCwRrYdub<$KK&R`Tbz4Yp9`i*u2+!WY1t#`9NFqK!<(E)iUUE zdg@ONxmyN0fASn`Mi5W6Yw*x%UVphc$>X#j0I)DxAZ7Nye|p+1LuV?754ybWJ>JfG z6g61iGFZQB_&|-P@|dT(4T%JkFb^`FmZekb(So6uAW-UztO*wWf3wiLnC9Cq5D|yB zKr|ex2f`Kz!gZzJ>t8u@#y10Ia_|0w{)=nZ-hW=%cJ15U7vzKI`!|NlBXMxtg)2*d39}^iYq~IK_On$x<>e5)McVJ#+}S-RwW$S z^4GOo-7{*D&33|h=q`-MX56szXyk6qgFg*;UK!1XO-PgHm3iSF%*&<7Pm|h9%c-V9RB4rQXO^8Iy6&Qb4jJ$-%WIyh~HAFMgl(;Uv+6 z76UqlnMt64z=^!@c)-BKAi^X<*xlMop$gKSu-Z%T!M{M&h=H^>cb|n#Mv-c#qvY(_mkH zXXNe3kl)$vih{#;Z`HdScSbIvMMb}gA~hD)AR;qk>&TN;Zo^0hLrN?=@Fx56so%bE z$;U2QXS?~c3!a5!yM*FxH#?g)59pGV!)M$7=w??(AI&-b>uCSiIjP|4)YI2ktIwxi z*s^i#X-E&HFX`h~b!ENRsTq+vckr>Oy~3|dxAS`yH~KEe9nykP;r1Ucwufi0u*=eK gUtQ4CD*njtO>#+>MZT4P+;Nz^BdzjxP5(;!Kcy~6v;Y7A literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/thunder game 256.cer b/src/MalwarePatch/Certificates/thunder game 256.cer new file mode 100644 index 0000000000000000000000000000000000000000..96e19378c5f014908837e2c18b6af33efd96dbf7 GIT binary patch literal 1593 zcmXqLVly>pVwGLM%*4pV#8X{R{ATLPFrmty*$xK0Y@Awc9&O)w85y}*84U6axeYkk zm_u3EgqfUN4J8f4K^!h&0r#Bzq{N)y%=A2kyfWS5L_-$?Cy*4gur-pDYeh+FUP@|; zLRex>W=dj7W`3T6bAC!HNMB}Nx`MN#g04cahoh0H8Ia*_Y#=AjYiMp@YGh_;U}$J) z5C!B~7?{Di22G3|hO!3IAe;DkL;{L3%Mwdc75t0R6Z0~wz~&oD8%TnrS%rlx4NXi8 zj13ITP0Y*;jm(VA0u6-?1lhQ?*%(f-sw*_ZhYFa z>-nZ7&$e!Vv2gm!#>vl@Pkh$Z@MOo@C%bxHY+wIu`^KkpHow@r{>kobPiL<+G<@2> z{n^qz=8qd1EuL;{GBhyI1DVFfqYhE|bVt*R{jD!&Z-2gb;`7~efJQx=v;Ntf&X+SM zJZ)X`w10=8gn<}H2e&Z4e?e*yFu;J3;F4NUq6agJnP{_saiN5qTo_pyn41{+8Gzzk zOihf844dM`k21U~Ew>QKYSY)XeB8TtS#|ouNV%By-Ky=r6R(9W-|QPFIYHg3GP?Br zv6K1r>k@-bF}&Bg6c}S_QSTzBwAMxJpOJ*U(q|t>?ZE6)?+ODZRTx(PYj-HuTH_*{ zc}ZisnAgo4%gf`AzEg@iem2+L;q)T=Xs3PeqgUOXeJ&;Caa877&c)IKMpHftOUQhQ z7BKEoVEh$VLM`V7SZjGcx{XVPR%sZ!lBjlV#RYoFMI{DyaPt`3jG*R$B#qFG!)}g2D9FhQEPe()299i; z;9Rr7h>^*_#J~tGd;IH@>@ZA~%3zE95arR| z{k?eY(+k_)7JJ&=y#M6slh=anD-P9q91l^OGw+tIfB?Jq)fbx_?N2QePS4sOQ_d-l)b-iO2HthteY%csYjf&k_;q3R@+cltJ-u|LS0GfA0YybcN literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/thunder game.2018.7.8.cer b/src/MalwarePatch/Certificates/thunder game.2018.7.8.cer new file mode 100644 index 0000000000000000000000000000000000000000..8d4e16ebdcf1835bf5bb6b7e6638b8ce80e101ef GIT binary patch literal 1593 zcma)+X;4#F6vy*k7M3Ig2nZsP)O{3^`vN40NDU+=SPa#G3ldc{)F_k+<_cM{S|Ky4wHju+ zR-wfF)EX5tozIM8O2vFmA{SkV;=$AiD#Akml7t|fgm`W)x=jLH4i}XW1mpq>v=d=~ zDOe;LCG1nZdXvnkWM=7AGL3rkI3Jk;CSztIJ#;>jkO1NV;3aUm2!|WbU53y>2#Gw8 z1Q8$$F9nA1bU0mtM1e?O5vB)-a`+OFAWI?|Ke3MkME949g_2zK^QjEV2nE4dRDWOJ z5J1B;KOdh=umqC=DCwRrYdub<$KK&R`Tbz4Yp9`i*u2+!WY1t#`9NFqK!<(E)iUUE zdg@ONxmyN0fASn`Mi5W6Yw*x%UVphc$>X#j0I)DxAZ7Nye|p+1LuV?754ybWJ>JfG z6g61iGFZQB_&|-P@|dT(4T%JkFb^`FmZekb(So6uAW-UztO*wWf3wiLnC9Cq5D|yB zKr|ex2f`Kz!gZzJ>t8u@#y10Ia_|0w{)=nZ-hW=%cJ15U7vzKI`!|NlBXMxtg)2*d39}^iYq~IK_On$x<>e5)McVJ#+}S-RwW$S z^4GOo-7{*D&33|h=q`-MX56szXyk6qgFg*;UK!1XO-PgHm3iSF%*&<7Pm|h9%c-V9RB4rQXO^8Iy6&Qb4jJ$-%WIyh~HAFMgl(;Uv+6 z76UqlnMt64z=^!@c)-BKAi^X<*xlMop$gKSu-Z%T!M{M&h=H^>cb|n#Mv-c#qvY(_mkH zXXNe3kl)$vih{#;Z`HdScSbIvMMb}gA~hD)AR;qk>&TN;Zo^0hLrN?=@Fx56so%bE z$;U2QXS?~c3!a5!yM*FxH#?g)59pGV!)M$7=w??(AI&-b>uCSiIjP|4)YI2ktIwxi z*s^i#X-E&HFX`h~b!ENRsTq+vckr>Oy~3|dxAS`yH~KEe9nykP;r1Ucwufi0u*=eK gUtQ4CD*njtO>#+>MZT4P+;Nz^BdzjxP5(;!Kcy~6v;Y7A literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/thunder game.cer b/src/MalwarePatch/Certificates/thunder game.cer new file mode 100644 index 0000000000000000000000000000000000000000..96e19378c5f014908837e2c18b6af33efd96dbf7 GIT binary patch literal 1593 zcmXqLVly>pVwGLM%*4pV#8X{R{ATLPFrmty*$xK0Y@Awc9&O)w85y}*84U6axeYkk zm_u3EgqfUN4J8f4K^!h&0r#Bzq{N)y%=A2kyfWS5L_-$?Cy*4gur-pDYeh+FUP@|; zLRex>W=dj7W`3T6bAC!HNMB}Nx`MN#g04cahoh0H8Ia*_Y#=AjYiMp@YGh_;U}$J) z5C!B~7?{Di22G3|hO!3IAe;DkL;{L3%Mwdc75t0R6Z0~wz~&oD8%TnrS%rlx4NXi8 zj13ITP0Y*;jm(VA0u6-?1lhQ?*%(f-sw*_ZhYFa z>-nZ7&$e!Vv2gm!#>vl@Pkh$Z@MOo@C%bxHY+wIu`^KkpHow@r{>kobPiL<+G<@2> z{n^qz=8qd1EuL;{GBhyI1DVFfqYhE|bVt*R{jD!&Z-2gb;`7~efJQx=v;Ntf&X+SM zJZ)X`w10=8gn<}H2e&Z4e?e*yFu;J3;F4NUq6agJnP{_saiN5qTo_pyn41{+8Gzzk zOihf844dM`k21U~Ew>QKYSY)XeB8TtS#|ouNV%By-Ky=r6R(9W-|QPFIYHg3GP?Br zv6K1r>k@-bF}&Bg6c}S_QSTzBwAMxJpOJ*U(q|t>?ZE6)?+ODZRTx(PYj-HuTH_*{ zc}ZisnAgo4%gf`AzEg@iem2+L;q)T=Xs3PeqgUOXeJ&;Caa877&c)IKMpHftOUQhQ z7BKEoVEh$VLM`V7SZjGcx{XVPR%sZ!lBjlV#RYoFMI{DyaPt`3jG*R$B#qFG!)}g2D9FhQEPe()299i; z;9Rr7h>^*_#J~tGd;IH@>@ZA~%3zE95arR| z{k?eY(+k_)7JJ&=y#M6slh=anD-P9q91l^OGw+tIfB?Jq)fbx_?N2QePS4sOQ_d-l)b-iO2HthteY%csYjf&k_;q3R@+cltJ-u|LS0GfA0YybcN literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/thunder player 2018.12.cer b/src/MalwarePatch/Certificates/thunder player 2018.12.cer new file mode 100644 index 0000000000000000000000000000000000000000..bb458507fa56d8de423ac80231d076fb50b3b3f0 GIT binary patch literal 1593 zcma)+drZ?;6vumiebEOkQU_LLRGGLTE%(>b0zNQ(AdE?IB8n)PU8$wBw%AsRPG{Q) z8xs^Chzh!*P8bnQB~s;4bWWXPIE|W2MO~l;I-?U!K;0bs{g^C`@sIuSOYZ%i-}#(# z&pqct2Sp4WHV96D1ZHOrgb;rj?Ea1Hd2?paEq-8iklmqHqvd z3d)7y_=e62N!1%aRq3;IS_98e#5b!@1(e|?B4s5stme~V|;W9@ z%U9bx*m2U^*5a#aLQ&ricmKET34JzuqR-{PswBW^bmq)||MZ=440e|IYup1JI|tfo zF;su;$^P0h|Ncr}$#LI~Gw383hI=qL?94)q2`dP({Vkj_b8qzY>mH%~>QG&SH|l!vAp3B5W>?JWU#LSHLo;qkB8^8|&iPq?{$>IBmZ|x-axQNfvP5Sa*M!1|Cs9YXta?`GxwN4AS=SBEgA|%S zW>e?;vd@0&o&Nxy?>V0_Y}#c#RkX4`^Y@{-9(_~P=zK*p^(Eals7-<(QM+!cFb zbFW0*%WcS;lS5s>>)X7iC-_-jMOmNoy|R#Z<}XobR}=?V%;eTvyg9TF6m`ubioZPH zJu%(B-tg!=up&f207o3)G*%H8WMOrWU;{8pA`ua)4ceWQAgmF|WGVn8`)+8jgvxOR zBBindi=}XOT%1{>UT@L}v}5CD#>PgVHm;3RtJE5kB~EMBj18C?8!6moE>H=zBBR<| zC{UX$F!?_oC>6fu;YQ(`xVLj)Hl8w%q=XBhltLSu8mAB-FdhoW$p{FG#>r+ZRjbwd zCfKAYG@5l5qiI7Nq*BOQI};Gc-jfIp34sKdf=7rXCBwOJwlmQwDUE-frrM-`llAr_ zv4iR%2gl4HF(G|CFCq~};3A6@Mw%FObC_4ab+siFZQggdXpt;<7v%tq#LZD8Y#?kC zdt!59V~k?{Hyf%N((-;-o1E2oHn6p^mk?`hKqz26;C1I7e5G)7RejmqRdq>KvqT^l zgxvSI?{jyzJbam9=kFIzy0hZv(WgSTUONm z#oqLi3#;1~f3)D5=N`*3wd}HfO<&EGm+RA49xFSDpfqm@z2k+cVACtF>9O)@TSXiC zLYmq5BkX0iT}-S@a(Aej!op`%KTnEJ hjV-*hcxyNB>VX5YHDzqgQ||ERJ&U*PD;6(U{tsbmOQiq+ literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/thunder player 256.2018.12.cer b/src/MalwarePatch/Certificates/thunder player 256.2018.12.cer new file mode 100644 index 0000000000000000000000000000000000000000..bb458507fa56d8de423ac80231d076fb50b3b3f0 GIT binary patch literal 1593 zcma)+drZ?;6vumiebEOkQU_LLRGGLTE%(>b0zNQ(AdE?IB8n)PU8$wBw%AsRPG{Q) z8xs^Chzh!*P8bnQB~s;4bWWXPIE|W2MO~l;I-?U!K;0bs{g^C`@sIuSOYZ%i-}#(# z&pqct2Sp4WHV96D1ZHOrgb;rj?Ea1Hd2?paEq-8iklmqHqvd z3d)7y_=e62N!1%aRq3;IS_98e#5b!@1(e|?B4s5stme~V|;W9@ z%U9bx*m2U^*5a#aLQ&ricmKET34JzuqR-{PswBW^bmq)||MZ=440e|IYup1JI|tfo zF;su;$^P0h|Ncr}$#LI~Gw383hI=qL?94)q2`dP({Vkj_b8qzY>mH%~>QG&SH|l!vAp3B5W>?JWU#LSHLo;qkB8^8|&iPq?{$>IBmZ|x-axQNfvP5Sa*M!1|Cs9YXta?`GxwN4AS=SBEgA|%S zW>e?;vd@0&o&Nxy?>V0_Y}#c#RkX4`^Y@{-9(_~P=zK*p^(Eals7-<(QM+!cFb zbFW0*%WcS;lS5s>>)X7iC-_-jMOmNoy|R#Z<}XobR}=?V%;eTvyg9TF6m`ubioZPH zJu%(B-tg!=up&f207o3)G*%H8WMOrWU;{8pA`ua)4ceWQAgmF|WGVn8`)+8jgvxOR zBBindi=}XOT%1{>UT@L}v}5CD#>PgVHm;3RtJE5kB~EMBj18C?8!6moE>H=zBBR<| zC{UX$F!?_oC>6fu;YQ(`xVLj)Hl8w%q=XBhltLSu8mAB-FdhoW$p{FG#>r+ZRjbwd zCfKAYG@5l5qiI7Nq*BOQI};Gc-jfIp34sKdf=7rXCBwOJwlmQwDUE-frrM-`llAr_ zv4iR%2gl4HF(G|CFCq~};3A6@Mw%FObC_4ab+siFZQggdXpt;<7v%tq#LZD8Y#?kC zdt!59V~k?{Hyf%N((-;-o1E2oHn6p^mk?`hKqz26;C1I7e5G)7RejmqRdq>KvqT^l zgxvSI?{jyzJbam9=kFIzy0hZv(WgSTUONm z#oqLi3#;1~f3)D5=N`*3wd}HfO<&EGm+RA49xFSDpfqm@z2k+cVACtF>9O)@TSXiC zLYmq5BkX0iT}-S@a(Aej!op`%KTnEJ hjV-*hcxyNB>VX5YHDzqgQ||ERJ&U*PD;6(U{tsbmOQiq+ literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/thunder player 256.cer b/src/MalwarePatch/Certificates/thunder player 256.cer new file mode 100644 index 0000000000000000000000000000000000000000..57e5120a36d6f52aa2e4624df8c6fd707f5b04e0 GIT binary patch literal 1593 zcma)+Yfuwc6vwlhO?V|nSVVkKqZAR8a5s=e5m8M+t>DxHkuhkn?Zd;e$8@0@$? zITz^JBA{pa)H7iShB=9KW8g?kE7uwwx)pHQE`f#w!wW71xv>~PiMat6HdBJIQ8+pd zn+B%R8&`C4e70&mk)5iLEBVU2APs@Vf@s>rL>D`l;_|hmQbx-7tBGudjL<4nN`8z= zM$&!?rJNrV#Sh}ACPWEEIJJlm0q;%aVqrie#4!wnfRMG+b|Jv2Ex;&cEzm=|Fds03 zj>O}5u2d`X2rbD^QOgOXV#_!mn*pZLW)|wP2n!9RC?G5p$1x!ug0I3*;LdiN&xR04 z9~J>aOcah0W7C1RqX?re@scQUd~Aw1e*DA^4iM^`nh+;mOMMQNp%@-uG9A^~(bpaD zXwAvNX9Y;4B^OSNt)j+eHrvY2_MiIF-q|(KQ1eK)x4*gCURM0ja{S@h@`0{4dzaZ} zY#-=pdwA}&t@b#E*($s2joo1niggQZW<3UgfTp=}{Qv#aX3-B^*!ifotG}nZ|D2IR z*^O;>W9g$qRkocbTcri_241v>8_G+`A=OmDs7r_?bF_j97W03zsJocs*e(!@!PG-M z2Bo{gdI(}P^)C7G5;%Nb(>erN)(0ft%bYjsX;6msRc}ti=~83w>%o({>;C84Ea`g( zM8B3C=sC^md_MeS_l*2KSyc_myOH~sE)J)GZGCvl{q%F{4ilOd`NOuC-`sXiipbhf z?jH2~>C&u}{MtP@p&`1OH(;&!M~0EB;pk}Qnxhhvh*yH)?>}YSu(Ves{k-Umf9~?K zc`cc(@$feLDLgL9Xt>~z(Dk-m{E+F0No4+dk zcXjCtgLkXhvLJEjq_8nD`R4ROa_qsuz6KvzyRh&ux7}2smHF+r zjaqF^cyO?WlzyTn1@iH6(@nvH}|9-@+Jas*Pf z7DWEXgABqqJlZIH8~1JwkkBdf5iwW+qS!9uQ&TU5U=Rv~6J!|jnoE;4RH~adZ+;uB zCUaC8g;u352nJ4UmR!eynB(t>4~oEm0pjQgvyey-0mADS*5iiIH)%@M*>AJnog{V8 zY=F`jKZFBZC-P!4fe$TCLc9>q%Tv}3p1IQ9UoyS*#+D*vw7FWc70jZ|z6doC#h!N; zWGo0&iGn^a*x!V-3otxdgzRBJ zYgx~$BC_GN?&9|EMy1Xl2T1P1%hHrb{WzWy@#^bk(Rok)$mQ+2Wc?|xz?whead_m; zHK$zxLsqv=uZXhpBWKytrcGbXMA>!E`go&p756^^MFZzytk3}%Kuv?P!;h?^G zB_7oldr0%!9r6Ts>#5u8PGEs)m0vX1cM+t>DxHkuhkn?Zd;e$8@0@$? zITz^JBA{pa)H7iShB=9KW8g?kE7uwwx)pHQE`f#w!wW71xv>~PiMat6HdBJIQ8+pd zn+B%R8&`C4e70&mk)5iLEBVU2APs@Vf@s>rL>D`l;_|hmQbx-7tBGudjL<4nN`8z= zM$&!?rJNrV#Sh}ACPWEEIJJlm0q;%aVqrie#4!wnfRMG+b|Jv2Ex;&cEzm=|Fds03 zj>O}5u2d`X2rbD^QOgOXV#_!mn*pZLW)|wP2n!9RC?G5p$1x!ug0I3*;LdiN&xR04 z9~J>aOcah0W7C1RqX?re@scQUd~Aw1e*DA^4iM^`nh+;mOMMQNp%@-uG9A^~(bpaD zXwAvNX9Y;4B^OSNt)j+eHrvY2_MiIF-q|(KQ1eK)x4*gCURM0ja{S@h@`0{4dzaZ} zY#-=pdwA}&t@b#E*($s2joo1niggQZW<3UgfTp=}{Qv#aX3-B^*!ifotG}nZ|D2IR z*^O;>W9g$qRkocbTcri_241v>8_G+`A=OmDs7r_?bF_j97W03zsJocs*e(!@!PG-M z2Bo{gdI(}P^)C7G5;%Nb(>erN)(0ft%bYjsX;6msRc}ti=~83w>%o({>;C84Ea`g( zM8B3C=sC^md_MeS_l*2KSyc_myOH~sE)J)GZGCvl{q%F{4ilOd`NOuC-`sXiipbhf z?jH2~>C&u}{MtP@p&`1OH(;&!M~0EB;pk}Qnxhhvh*yH)?>}YSu(Ves{k-Umf9~?K zc`cc(@$feLDLgL9Xt>~z(Dk-m{E+F0No4+dk zcXjCtgLkXhvLJEjq_8nD`R4ROa_qsuz6KvzyRh&ux7}2smHF+r zjaqF^cyO?WlzyTn1@iH6(@nvH}|9-@+Jas*Pf z7DWEXgABqqJlZIH8~1JwkkBdf5iwW+qS!9uQ&TU5U=Rv~6J!|jnoE;4RH~adZ+;uB zCUaC8g;u352nJ4UmR!eynB(t>4~oEm0pjQgvyey-0mADS*5iiIH)%@M*>AJnog{V8 zY=F`jKZFBZC-P!4fe$TCLc9>q%Tv}3p1IQ9UoyS*#+D*vw7FWc70jZ|z6doC#h!N; zWGo0&iGn^a*x!V-3otxdgzRBJ zYgx~$BC_GN?&9|EMy1Xl2T1P1%hHrb{WzWy@#^bk(Rok)$mQ+2Wc?|xz?whead_m; zHK$zxLsqv=uZXhpBWKytrcGbXMA>!E`go&p756^^MFZzytk3}%Kuv?P!;h?^G zB_7oldr0%!9r6Ts>#5u8PGEs)m0vX1c_0q&D;TV=jn(q`{X7w8IvTc;+SR8Oj^Tf+VlpiWk6Glfu`yu z=jZAd6(lNXBx@QP80s15fHX4;tHMop&PgmTRxnm@&QD2I068QxFI~aNz|cU!+0j5w zoY&CYz{tqR01TplTnhtpBU2+|Q%h6JD1*jrNZxYxGZZoq0GZFh!|7g{n3tZCpOFeR^wn!L4-jV8(VrK4mf+pDXR>E)e|Dmr*e1n$)L_GuF*%LQaCfQUaI+85wrI4C%Xf z=y;Zc*6p&*uRfoi#36X{_oLh?SGRN6PAOiiy~Gvs|CL+ct3NEcRjJYbNtjSg8E51!Z@I3; z$M(CnsD?zT7Av|} g;wdM2-Mt9aTP2MGb>K^Sg1KhSv@w9GR)aUTx%+<5YfymSR; zM*}%=UPE(310yp7Fo*(jEkIl&V^d30%P51!4M;9@_A}%&-~rjd!Ncm9mrkJkTz}}&isN@sCS`8F_UJLK@+1AaxgQpGB7tW@-qO%xtN+585wqjY+kWBVU56} z&(E$)-Cca){?Wf5S@wr@Hhm0z(eSs))=72!&;H|i(jIEZeU-H|9iBz6e`I}WlG#D2GFE+Ae3k7& zBG=Ccsse0l`sQ%IU^M$2bc9Rx)06W#ooilOzA?TQ=OrcG-)ru;GoXIsq1>*!2iMKj z{m;bA$iTR`i7^%!B9Y+KCo9atWWZp+2aEw(en!UsEG*1S>+MT|wnmT^khg}OB?@~L(@Exemv->=MifSd$@IUSe;85!8}&#{@6 zv1ba**4mhJyZ5(4iGpkWubl2rBCgjNqJ-3<1CtvjD6Nl-nX`AQfzsB`86PCRd1^gW z>=rFnk$AYD)7SWH)Ql@$&kEc4mj0W$apMaGWB(&g`5kFV59@7zy*e)waO2@5v1I|< zf}N8bi|(xQzJGDX#uE{|24{CYfB(1Yo7Tm^a2W@E_J4W>mo_>%-dUejwLMsU-JwVbAKP)ZP_Dumf2?WmD^QE-sS9OnY<(CW&dnx z&f0~FZBJ!uo;*14;rEqUKR)l=m#1=M-XuB6?8#M|x&unyWlwHDe^G0-$lS{UqLEoj JA5BGCEdfGK&oBT0 literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/xingcheng (at).cer b/src/MalwarePatch/Certificates/xingcheng (at).cer new file mode 100644 index 0000000000000000000000000000000000000000..796de1d91811f1c8f52f1a29e6a65711516cb222 GIT binary patch literal 1363 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 literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/youku 256.2018.8.cer b/src/MalwarePatch/Certificates/youku 256.2018.8.cer new file mode 100644 index 0000000000000000000000000000000000000000..6fcb9216d3d7b4c10063a511885f27692bf59508 GIT binary patch literal 1306 zcmXqLVihxJV*a;)nTe5!Ng!sWVXt6(&7zppbG{yTbG+hS=o#`DaDlzY!yM$|3^Rk7Br^<}7?qI2n30u%xrvdV0VvMJ)WpchaNYcT!yofm zLd(+nyMI{xJ-}me{9OHoL>7ftVOa-@E7c06?54kPocHbx!;ZL$B`STh&rSQN7r!BXT9c0=r{R9AIau>T2tbacs$n2L{xg8_G{ypt>$$h zilvulpLulkw7aXQx6_=|U=@R!wPt1WPKl)5*IXU2Zqa%9XAa+L1-G+VYlVMa{9p5I zz`ieKfxFkTRq@Zy(B;%$8>M%C)Y4e%@O5`*tNGbKHhT1@xgzOrCQH*HRQTZ z&Szp~WMEv}#25<B6 z$l`6_X&?{d8!)yBqq;W*FaBo-|K0g zIkmk_t|$$h5oP&U#8^b~eox!EORsr;;E$;AZB^ymM~{1$BPT&%HU}m_Muy2kepeM! zIyY+V=XWcq5poh@{%aug&|1%?cJd^>f^E0C!!B;{I20qp$#gWKu*LX_sb_4!9`wS2s~xOUl! z#~f82kGJP;4rV%i+T(-+pQr!#``M8aTtRd0$0!SJsx4_VGL5a9(eh#4`H+uZ>z7p) H2J8X=I8L{= literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/youku 256.cer b/src/MalwarePatch/Certificates/youku 256.cer new file mode 100644 index 0000000000000000000000000000000000000000..22fad9e19d883ef3d4b44eaf831fc242cd782d18 GIT binary patch literal 1304 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 literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/yy 2018.12.cer b/src/MalwarePatch/Certificates/yy 2018.12.cer new file mode 100644 index 0000000000000000000000000000000000000000..01d763d0e8c6548fc7c086a38a1f2f0cbac3c6e2 GIT binary patch literal 1234 zcmXqLVmW8f#Jp_*GZP~dlYm6ooF`E}q1;bqE@RQMsZBB9W#iOp^Jx3d%gD&h%3x4$ z$Zf#M#vIDRCd?EXY$$6W4dQSKiv(BZCgzo-CM!7S7Zv0eC6;97=NZZy$bzJ~g~i~~ zAw{LdB?^A2CFS`=*@gxNdLRYN!s>7Z&N+$2#R|p>!5)rAre;9nQc@LyGt=`j^U@WZ z9S!8fc?~TL4GfJ8z#t09wKOy|urM+J(w}vJWQS;FllDEv_TW25^~ruvNA9?G4eA2 z#krW87#SH(RH}=;+VN^a;M1x61t(>{EAlVBFpt5|>y&TN^Ru5jFKfsiun=TdYdp5R zG5&tK`~IyPWqM-jekh*i$TpDDbUrTUd!TqjYIxa|qY5HXdIp!mRxHbCC<5s(W2V`_b?l~HHpmmh9zEvlMOP{@C z@0@#Ov*4nscV^uBcH(bwxIhla^XVU5wuR4g59_f{+0xS&Rk2uWvog=+JAJx8Yn<5C zy1kP!9w%*VO#I`pch=7@=}gRw42+AL7-NAU5(!Q+vcfD(1`ObEmgQ$;{LjL|%*5Vc zpbZRnS$P%}10@561#$~y+N3f{N(!v>^^42&iYs%Ilk}4Fb3vTsq8x)nkYWXvD1!)t zFgCXIMjl2MMgt!MWi}3NHbz!fb|ywKagg?6p#Bsj?a2kj2C8sHOa_uXSd|qOBpL{V ztWag)G2nu!XJ$4Chp`zMS-cHA4dh{b1I9LCRQINU+-sl)SHOhFLnT0ifVL^KNEnDU zh)lB%{!nQ=eSK~7dp+$lr?$7r6{UeQkSrgI7>fv}>b!D?7wX$%+0Giage?3}oF>SD zoCJZ{6PN@U8JPUK)&A9H3OZ%Xj@l~cQ_0pjQ_p#>1KBCYvkRvGd5`6{*bWo$G`i^ zQkq3e#UE;B@7?((-|a{0?J(>_9 z(@|R{`R0nuhern|b&KrVdtasbmV%;bYR=OYUSHi#-_kvH(Bzx&ovjwrEf4?IVfeM} YSb6T6^>U0)H9~Ks*#--qyTWP@09IL}s{jB1 literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/yy 256.2018.12.cer b/src/MalwarePatch/Certificates/yy 256.2018.12.cer new file mode 100644 index 0000000000000000000000000000000000000000..01d763d0e8c6548fc7c086a38a1f2f0cbac3c6e2 GIT binary patch literal 1234 zcmXqLVmW8f#Jp_*GZP~dlYm6ooF`E}q1;bqE@RQMsZBB9W#iOp^Jx3d%gD&h%3x4$ z$Zf#M#vIDRCd?EXY$$6W4dQSKiv(BZCgzo-CM!7S7Zv0eC6;97=NZZy$bzJ~g~i~~ zAw{LdB?^A2CFS`=*@gxNdLRYN!s>7Z&N+$2#R|p>!5)rAre;9nQc@LyGt=`j^U@WZ z9S!8fc?~TL4GfJ8z#t09wKOy|urM+J(w}vJWQS;FllDEv_TW25^~ruvNA9?G4eA2 z#krW87#SH(RH}=;+VN^a;M1x61t(>{EAlVBFpt5|>y&TN^Ru5jFKfsiun=TdYdp5R zG5&tK`~IyPWqM-jekh*i$TpDDbUrTUd!TqjYIxa|qY5HXdIp!mRxHbCC<5s(W2V`_b?l~HHpmmh9zEvlMOP{@C z@0@#Ov*4nscV^uBcH(bwxIhla^XVU5wuR4g59_f{+0xS&Rk2uWvog=+JAJx8Yn<5C zy1kP!9w%*VO#I`pch=7@=}gRw42+AL7-NAU5(!Q+vcfD(1`ObEmgQ$;{LjL|%*5Vc zpbZRnS$P%}10@561#$~y+N3f{N(!v>^^42&iYs%Ilk}4Fb3vTsq8x)nkYWXvD1!)t zFgCXIMjl2MMgt!MWi}3NHbz!fb|ywKagg?6p#Bsj?a2kj2C8sHOa_uXSd|qOBpL{V ztWag)G2nu!XJ$4Chp`zMS-cHA4dh{b1I9LCRQINU+-sl)SHOhFLnT0ifVL^KNEnDU zh)lB%{!nQ=eSK~7dp+$lr?$7r6{UeQkSrgI7>fv}>b!D?7wX$%+0Giage?3}oF>SD zoCJZ{6PN@U8JPUK)&A9H3OZ%Xj@l~cQ_0pjQ_p#>1KBCYvkRvGd5`6{*bWo$G`i^ zQkq3e#UE;B@7?((-|a{0?J(>_9 z(@|R{`R0nuhern|b&KrVdtasbmV%;bYR=OYUSHi#-_kvH(Bzx&ovjwrEf4?IVfeM} YSb6T6^>U0)H9~Ks*#--qyTWP@09IL}s{jB1 literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/yy 256.cer b/src/MalwarePatch/Certificates/yy 256.cer new file mode 100644 index 0000000000000000000000000000000000000000..dc2dd68b19aa0a68c10a3f10503364d89781187a GIT binary patch literal 1234 zcmXqLVmW8f#Jp_*GZP~dlYo(Fi`$#YsZUB85(UhQdvpzW**LY@JlekVGBR?rG8ohw zavN~6F^96S2{VNT8_F6;gE(BmBEglpiFqZd$qLT-MFsgqi6xo&d4}=^vLI=0VKKOL zNKt8ViGp8hNqK%zwxNN69!LSRusU3Ub53G$v4XKeu!p0OsTt6?lvIV_%=Em>ymSR; zM*}%=UPChjBO_A-Fo*(jEes6|O^u9AEln+>4APJs=tfJ2zmy)-c|JtaRc z9VW&O6|2g~FEtb}-~)R^ggr7+!80#e4`vLv2vdMBOqv-kZP3K1gd8@EtPIRejQk8h zaW1ANMn;Co%5}RR`$gHMr;6>?zad*1Q_p?4B&GGQ9%K7)x6aci(o8B$xiXX-op*U! zzqS-^Tbfl>|3F*uD3g50ER}^Blg`(3bj7D!sK0IUy!?*3MA$a#N$PUnW)<7aS0p7{mi^l6 zs`A&ba^>ySnVYrG-TnXRTlKW{H#YFEm{-2??A@2gT>2Z69-Q4LzB7JK_m{&581n1W zO&q?So@oOf%Zn3BCLhsA^PiBjhVB39nLaNT^=}D%nmnD&u6OR1-*aEZG9Hup zSaO~-Sx7(a1bdIbnK!RzGchwVFfMLlj0J{BBsj^)3bQa7Fo45ZmY7+G1_nHa^yLE4Lf`csg!Cl?eOsKOO78A$SARaR7xXdn!- zLY0NbfD5Lcnb{y5#%5$>@iy=@kcaUN7~6zV-J1e(uYnp|0TUh%l>iL_+NR7RVIbBZ zGR->pL#6Tb^|j6K^|a5N+TJEtlm^Z~vV1IJEFzvOZ>^r#@mc-qb}zfre{3e5W&YuV zoCJZ{6PN@U8B$_@{Mz&3TXf2$2T%CoPl>+@dJwn1B5mE$7k7`ZSug8+GOlNK@{eWf z-<{+ru88>3+q8WRtBB@gdzFAc0%3FX0{cEbO0SGmRmf1|-?aNiqDnK%TyBwlcR#KE zG1pma-O7+Ji7hQHk*VnuZtO{&?(r*Nw{ByOLWJpupiOdoOVsR2B#)VwFf2c(@_j+f z*}%u&VgtXG#Tzw0F+RA0?ftuOyH$U0ZV|cYedF}wb@z@wn&ek!qVPPo@Y>P^0!!;f z!~cDoep7^3J6S&H#PQyjGXn$u3!eyGP{bGMaE9ev%ckJ(dUoxB#lPA^6)QI0*t@HB YiPYSqYHx%0wP<>B_Sn?9UOVs<0I_YaIRF3v literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/yy browser.cer b/src/MalwarePatch/Certificates/yy browser.cer new file mode 100644 index 0000000000000000000000000000000000000000..e3959cd190785c79e5978ce1a83d5e8228411055 GIT binary patch literal 1383 zcmXqLVof$^V)0(U%*4pVB*4NixZ+`h^!4ra(E`yAm0ue0vTc;+SR8Oj^Tf+VlpiWk6Glfu`yu z=jZAd6(lNXBx@QP80s15fHX4;tHMop&PgmTRxnm@&QD2I068QxFI~aNz|cU!+0j5w zoY&CEz|zP70-}IiQxMn4*woV0GRmNF8Irf0{S1W+1VH9<2y>>FCg!E57oF0o34UyW^z$}aei8fLNJgh zPb^AR2usY#Oi3)s%+FIOGlDsTTZG9o1ZF%l+<1c~MkVAZVPs`sZerwT0E%-lH8C>9$#v5MCM9n+kx&QVLPTN%BejBT5Iw~dW~nw z1VOJWZ6S;LbA@lJGATESgdhBASHkKR^1C4K%Ep;uh3}5L{}F!nD&Tg+I=^FWu0qCE zyWhUZHQG1n@MZqD2W|8(Jz4oo*K*h9=5Myl=eO_3zTvmD+VJ(#f@@+2SFmq8U3;0g zVUyavq^x{h!yk>;7e7rb5aGD!?Dnv9rrncVw{4p?Y<~0g80*}$77Q34OcE|mMzn;`Tv~pU}Sk;*`kYgj>#~d zwO!$pciqHRb|DipBLm~&CdO)Dh?Ij9s;n>zlK}%bo@DtM8UM4eFf*|?7&ri9Nmic4 z(!kunbb;{#!!~_TvIC~Ncyh&70upSki?wb~c& zlYRZyKd`F3e|%~ATmwNiPKY0!fQ|x&A&Y>47#kPRmn@7;=1h#zEF1=Gzyt^kVdMk~ zEHi)!l#$`ki|albKa}=W{amYf?Oh_r6eDA2TZ!0`n-31@zc`n=wMF4|K)OlF;tY3w zRf$z!cHI)ZGgJK9i+dmE3w(YbDSG1A-X{O>$ANz=X7evE%W7YJ*3tjo@x5!LpWfxmqR7NyGK-&A^@BKTq#j W_3i$Q*LIA&K3><@rZMPGp9%oqJk=)v literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Certificates/yy.cer b/src/MalwarePatch/Certificates/yy.cer new file mode 100644 index 0000000000000000000000000000000000000000..51938d5e30c37c198994ed0ec2adfb61afe3eef8 GIT binary patch literal 1293 zcmXqLV&ybwV*a>*nTe5!Ngz1Eo?of^>BJ!E8A_*GwXPWOvTc;+SR8Oj^Tf+VlpiWk6Glfu`yu z=jZAd6(lNXBx@QP80s15fHX4;tHMop&PgmTRxnm@&QD2I068QxFI~aNz|cU!+0j5w zoY&CQz}(Q>01TplTnnHvrbfo5mZp|b25CsXa`rP6G7tb6&mqj|UYeMfo|2!J4ijUC zidALgml_Hf@PX8EiLggTLc9$P9BvV&0AH9iGhEuBiBSnTL>XBbn41{+8GzzkOihf8 z43m}Xc0cxuvP(}D+pT{?wlt=m`*2B0>t8*__Tz4yr%$ArRG4yQC^>;qivJwV4g0Q0O13QfwbxbUuV3ZL z+p9A-YoELO|I@eXY3pxn;9oJXeC64@FORwOHzqweyH9*){G9GDhYv91*Qc8}d_6tW zCg!|Ntnii>Czeb;qLJo5A!iNS|I;&lUM%Y068bcGI-6bZ+%3Q7zKUf$CiAi6JZG|y ze%cB49)UA&Ue9J?W@KPo+{Bm!43Ri+I+GPK^jQ00!zF>tU)vzcS4&7W7`i` zMs{ MrrHV$nzVA5u1ViXgHrMwg*Gm;C64OHQZm<%L&uqp$lO#@+&J*q4`23#=p z%*+PiFg7D2i?@NNfjo?Fz}O~?>gW`ZqYc#H3YhTtssv~d&^Bcj2?MbPk@GWGzN%LH z;(fBO|M~}3wfB!NEuRa{fUUJ-?(|>Fxon`*vgPab5IUAS` z85ypea}Za5*ffzj|Jw=fJ;|!0m{^l8b z!QV4X%bIU|$!vJ)tRwYN=2*+hWsQb1OB^<2oHJT*TF)hG?c=7&Wq(rGFUs`#S6vGJ z5;ry7N?mKsd?~4$qWKddKl>hWY2$NvY~jA)n&!WT=|5j67f!b;GP^e`+Iy{p!}e*? QjX$^l*%rtr!4)L|0EX|m5dZ)H literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/CliTools/MalwareChecker.cs b/src/MalwarePatch/CliTools/MalwareChecker.cs new file mode 100644 index 0000000..c1f0540 --- /dev/null +++ b/src/MalwarePatch/CliTools/MalwareChecker.cs @@ -0,0 +1,276 @@ +using Ace; +using Ace.Files; +using Ace.Files.Json; +using Ace.Wpf.Mvvm; +using MalwarePatch.Windows.Check; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Net.Mime; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Shell; + +namespace MalwarePatch.CliTools +{ + class MalwareCheckException : Exception + { + public MalwareCheckException(string message) : base(message) { } + public MalwareCheckException() : base() { } + } + class MalwareChecker + { + private const string InfoPath = @"assets/malware-remote-info.json"; + private const string UserAgent = @"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36"; + private readonly JsonObject infoObject; + private readonly StringBuilder stringBuilder = new StringBuilder(); + private readonly bool clean = false; + private const string LogFileName = "mwp-check.log"; + private double downloadedCount = 0; + + public MalwareChecker(bool clean = false) + { + this.clean = clean; + infoObject = JsonObject.Parse(AppResource.GetResourceData(InfoPath).ToString(true)); + } + public static bool TryParse(string[] args) + { + if (args.Length == 0) + { + return false; + } + if (args[0].EqualsIgnoreCase("--malware-check")) + { + new CheckWindow(args.Length > 1 && args[1] == "--clean").ShowDialog(); + return true; + } + else + { + return false; + } + } + public MalwareCheckerModel Model { get; } = new MalwareCheckerModel(); + public bool Debug { get; set; } = false; + public Task Start() + { + stringBuilder.Clear(); + downloadedCount = 0; + Model.ProgressState = TaskbarItemProgressState.Normal; + log("Malware checker started"); + return Task.Run(() => + { + Parallel.ForEach(infoObject, property => downloadCategory(property)); + // infoObject.ForEach(property => downloadCategory(property)); + Stop(); + }); + } + public void Stop() + { + log("Malware checker completed"); + Model.ProgressState = TaskbarItemProgressState.None; + lock (stringBuilder) + { + File.WriteAllText(LogFileName, stringBuilder.ToString()); + } + } + private void log(string message) + { + lock (stringBuilder) + { + stringBuilder + .Append($"[{DateTime.Now.ToString()}] ") + .Append(message) + .Append(Environment.NewLine); + System.Diagnostics.Debug.WriteLine(message); + } + } + private void error(string message) + { + lock (stringBuilder) + { + stringBuilder + .Append(Environment.NewLine) + .Append($"[{DateTime.Now.ToString()}] ") + .Append(message) + .Append(Environment.NewLine) + .Append(Environment.NewLine); + System.Diagnostics.Debug.WriteLine(message); + } + } + private void downloadCategory(JsonProperty category) + { + try + { + Model.Message = $"Downloading: {category.Name}"; + downloadFixedUrl(category.ObjectValue["fixed"].ArrayValue); + // log($"Downloaded fixed urls of {category.Name}"); + downloadRegexUrl(category.ObjectValue["match"].ArrayValue); + // log($"Downloaded regex urls of {category.Name}"); + downloadedCount++; + Model.ProgressValue = downloadedCount / infoObject.Count; + } + catch (Exception ex) + when (ex is MalwareCheckException || ex is WebException /*|| ex is CryptographicException*/) + { + error($"Error downloading {category.Name}: {ex.Message}"); + } + } + private void downloadUrl(string url) + { + if (!Debug) + { + using (var webClient = new WebClient()) + { + if (url.StartsWith("//")) + { + url = "http:" + url; + } + webClient.Headers["user-agent"] = UserAgent; + var filename = url.GetHashCode().ToString() + ".exe"; + if (!File.Exists(filename)) + { + var data = webClient.DownloadData(url); + File.WriteAllBytes(filename, data); + log($"Downloaded: {url}"); + } + else + { + log($"Already downloaded: {url}"); + } + verifyCertificate(filename); + } + } + else + { + // Thread.Sleep(3000); + log($"Debug download: {url}"); + } + } + private void verifyCertificate(string path) + { + var disallowed = false; + try + { + var certificate = new CertificateFile(new X509Certificate2(path)); + disallowed = certificate.IsDisallowed; + certificate.Dispose(); + } + catch (CryptographicException ex) + { + error($"Certificate error: {ex.Message}, path={path}"); + } + + if (disallowed) + { + if (clean) + { + try + { + File.Delete(path); + log($"Verified {path}: Disallowed and deleted."); + } + catch (Exception ex) + { + error($"Error deleting file {path}: {ex.Message}"); + } + } + else + { + log($"Verified {path}: Disallowed."); + } + } + else + { + log($"Verified {path}: NOT disallowed."); + } + } + private void downloadFixedUrl(JsonArray array) + { + array.ToStringList().ForEach(url => downloadUrl(url)); + } + private void downloadRegexUrl(JsonArray array) + { + foreach (var matchInfo in array.ToObjectList()) + { + var url = matchInfo["url"].StringValue; + var html = ""; + try + { + using (var webClient = new WebClient()) + { + webClient.Headers["user-agent"] = UserAgent; + webClient.Encoding = Encoding.UTF8; + html = webClient.DownloadString(url); + } + var regex = matchInfo["regex"].StringValue; + var match = html.Match(regex); + var group = decimal.ToInt32(matchInfo["group"].NumberValue.Value); + if (match.Success) + { + if (match.Groups.Count > group - 1) + { + var matchedUrl = match.Groups[group].Value; + downloadUrl(matchedUrl); + } + else + { + throw new MalwareCheckException($"Regex group not found for {url}, group = {group}"); + } + } + else + { + throw new MalwareCheckException($"Regex match for {url} failed, regex = {regex}"); + } + } + catch (Exception ex) + when (ex is MalwareCheckException || ex is WebException/* || ex is CryptographicException*/) + { + error($"Error fetching {url}: {ex.Message}"); + File.WriteAllText($"{url.GetHashCode()}.html", html); + } + } + + } + } + class MalwareCheckerModel : NotificationObject + { + + private string message = ""; + public string Message + { + get => message; + set + { + message = value; + OnPropertyChanged(nameof(Message)); + } + } + + private double progressValue = 0.0; + public double ProgressValue + { + get => progressValue; + set + { + progressValue = value; + OnPropertyChanged(nameof(ProgressValue)); + } + } + + private TaskbarItemProgressState progressState = TaskbarItemProgressState.None; + public TaskbarItemProgressState ProgressState + { + get => progressState; + set + { + progressState = value; + OnPropertyChanged(nameof(ProgressState)); + } + } + } +} diff --git a/src/MalwarePatch/CliTools/SilentUpdater.cs b/src/MalwarePatch/CliTools/SilentUpdater.cs new file mode 100644 index 0000000..f06ff71 --- /dev/null +++ b/src/MalwarePatch/CliTools/SilentUpdater.cs @@ -0,0 +1,122 @@ +using Ace; +using MalwarePatch.Models; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MalwarePatch.CliTools +{ + internal class SilentUpdater + { + public const string + SilentUpdateParameter = "--silent-update", + DisallowAllParameter = "--disallow-all", + AllowAllParameter = "--allow-all", + ProxyParameter = "--proxy"; + + public static bool TryParse(string[] args) + { + var dictionary = string.Join(" ", args).SplitToDictionary(" ", "=", true); + var proxy = null as string; + //if (dictionary.ContainsKey(ProxyParameter)) + //{ + // proxy = dictionary[ProxyParameter]; + //} + + try + { + if (dictionary.ContainsKey(SilentUpdateParameter)) + { + Update(dictionary, proxy)?.Wait(); + } + else if (dictionary.ContainsKey(DisallowAllParameter)) + { + DisallowAll().Wait(); + } + else if (dictionary.ContainsKey(AllowAllParameter)) + { + AllowAll().Wait(); + } + else + { + return false; + } + } + catch + { + return false; + } + + return true; + } + public static Task Update(Dictionary dictionary, string proxy = null) + { + var checker = new VersionChecker + { + Proxy = proxy + }; + if (checker.HasNewVersion) + { + return Task.Run(() => + { + var arguments = new Dictionary + { + { Updater.RestartParameter, null } + }; + arguments.AddRange(dictionary); + arguments.Remove(SilentUpdateParameter); + + var finalArguments = string.Join(" ", arguments.Select(item => + { + if (item.Value is null) + { + return item.Key; + } + else + { + return $"{item.Key}={item.Value}"; + } + })); + var updater = new Updater + { + Proxy = proxy, + RestartParameters = finalArguments == Updater.RestartParameter ? "" : finalArguments + }; + updater.DownloadUpdate().Wait(); + if (File.Exists(Updater.UpdateFileName)) + { + var startInfo = new ProcessStartInfo(Updater.UpdateFileName) + { + Arguments = $"{Updater.UpdateParameter}={(Process.GetCurrentProcess().MainModule.FileName.GetFileName()).Quotes()} {updater.RestartParameters}", + WorkingDirectory = Environment.CurrentDirectory, + UseShellExecute = false, + }; + Process.Start(startInfo); + } + }); + } + else + { + return null; + } + } + public static Task DisallowAll() + { + return Task.Run(() => + { + BuiltInCertificates.All.ForEach(c => c.Disallow()); + }); + } + public static Task AllowAll() + { + return Task.Run(() => + { + BuiltInCertificates.All.ForEach(c => c.Allow()); + }); + } + } +} diff --git a/src/MalwarePatch/CliTools/UserCertificateCli.cs b/src/MalwarePatch/CliTools/UserCertificateCli.cs new file mode 100644 index 0000000..29d72a2 --- /dev/null +++ b/src/MalwarePatch/CliTools/UserCertificateCli.cs @@ -0,0 +1,56 @@ +using Ace; +using Ace.Files; +using MalwarePatch.Commands; +using MalwarePatch.Models; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; +using System.Windows; + +namespace MalwarePatch.CliTools +{ + static class UserCertificateCli + { + private const string disallowKey = "--disallow", allowKey = "--allow"; + public static bool TryParse(string[] args) + { + if (args.Length == 0) + { + return false; + } + var dict = string.Join(",", args).ToLowerInvariant().SplitToDictionary(",", "=", true); + if (dict.ContainsKey(disallowKey)) + { + var filename = dict[disallowKey]?.NoQuotes(); + if (filename is null) + { + new UserCertificateCommand(allow: false, null).Execute(); + } + else + { + new UserCertificate(filename).Disallow(); + } + return true; + } + if (dict.ContainsKey(allowKey)) + { + var filename = dict[allowKey]?.NoQuotes(); + if (filename is null) + { + new UserCertificateCommand(allow: true, null).Execute(); + } + else + { + new UserCertificate(filename).Allow(); + } + return true; + } + return false; + } + } +} diff --git a/src/MalwarePatch/Commands/BatchCheckCommand.cs b/src/MalwarePatch/Commands/BatchCheckCommand.cs new file mode 100644 index 0000000..aebf4ec --- /dev/null +++ b/src/MalwarePatch/Commands/BatchCheckCommand.cs @@ -0,0 +1,35 @@ +using MalwarePatch.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using System.Windows.Input; + +namespace MalwarePatch.Commands +{ + sealed class BatchCheckCommand : ICommand + { + private readonly bool checkValue; + private readonly IEnumerable certificates; + public BatchCheckCommand(bool checkValue, IEnumerable certificates) + { + this.checkValue = checkValue; + this.certificates = certificates; + } + + public event EventHandler CanExecuteChanged; + private void invokeCanExecuteChanged() => CanExecuteChanged?.Invoke(this, EventArgs.Empty); + + public bool CanExecute(object parameter) => certificates.Count() != 0; + public void Execute(object parameter) + { + foreach (var certificate in certificates) + { + certificate.IsAllowed = checkValue; + } + } + } +} diff --git a/src/MalwarePatch/Commands/DirectCommand.cs b/src/MalwarePatch/Commands/DirectCommand.cs new file mode 100644 index 0000000..fe25fbf --- /dev/null +++ b/src/MalwarePatch/Commands/DirectCommand.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Input; + +namespace MalwarePatch.Commands +{ + class DirectCommand : ICommand + { + public event EventHandler CanExecuteChanged; + private void onCanExecuteChanged() => CanExecuteChanged?.Invoke(this, EventArgs.Empty); + public Func CanExecuteFunc { get; set; } + public bool CanExecute(object parameter) => CanExecuteFunc?.Invoke(parameter) ?? true; + public Action ExcuteAction { get; set; } + public void Execute(object parameter) => ExcuteAction?.Invoke(parameter); + } +} diff --git a/src/MalwarePatch/Commands/SaveChangesCommand.cs b/src/MalwarePatch/Commands/SaveChangesCommand.cs new file mode 100644 index 0000000..63342f9 --- /dev/null +++ b/src/MalwarePatch/Commands/SaveChangesCommand.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using System.Windows.Input; +using Ace; +using MalwarePatch.Models; + +namespace MalwarePatch.Commands +{ + sealed class SaveChangesCommand : ICommand + { + public event EventHandler CanExecuteChanged; + private void invokeCanExecuteChanged() => CanExecuteChanged?.Invoke(this, EventArgs.Empty); + private readonly IEnumerable certificates; + + public Action BeforeExecute { get; set; } + public Action AfterExecute { get; set; } + public SaveChangesCommand(IEnumerable certificates) + { + this.certificates = certificates; + } + public bool CanExecute(object parameter) + { + return Utils.IsAdministratorProcess; + } + public async void Execute(object parameter) + { + BeforeExecute?.Invoke(); + await Task.Run(() => + { + foreach (var certificate in certificates) + { + if (certificate.IsAllowed) + { + certificate.Allow(); + } + else + { + certificate.Disallow(); + } + } + }); + AfterExecute?.Invoke(); + } + } +} diff --git a/src/MalwarePatch/Commands/UserCertificateCommand.cs b/src/MalwarePatch/Commands/UserCertificateCommand.cs new file mode 100644 index 0000000..f20b0e3 --- /dev/null +++ b/src/MalwarePatch/Commands/UserCertificateCommand.cs @@ -0,0 +1,48 @@ +using Ace; +using Ace.Wpf.Mvvm; +using MalwarePatch.Models; +using Microsoft.Win32; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Input; + +namespace MalwarePatch.Commands +{ + class UserCertificateCommand : Ace.Wpf.Mvvm.Command + { + private readonly bool allow = true; + private readonly IEnumerable certificates; + public UserCertificateCommand(bool allow, IEnumerable certificates) + { + this.allow = allow; + this.certificates = certificates; + } + + protected override void ExecuteCommand(object parameter) + { + var dialog = new OpenFileDialog + { + AddExtension = true, + DefaultExt = ".exe", + Multiselect = false, + }; + if (dialog.ShowDialog() ?? false) + { + var filename = dialog.FileName; + var certificate = new UserCertificate(filename); + if (allow) + { + certificate.Allow(); + } + else + { + certificate.Disallow(); + } + certificates?.ForEach(c => c.UpdateState()); + } + } + } +} diff --git a/src/MalwarePatch/Languages/MainLanguage.cs b/src/MalwarePatch/Languages/MainLanguage.cs new file mode 100644 index 0000000..66d498d --- /dev/null +++ b/src/MalwarePatch/Languages/MainLanguage.cs @@ -0,0 +1,98 @@ +using Ace; +using Ace.Files.Json; +using Ace.Wpf.Mvvm; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace MalwarePatch.Languages +{ + sealed class MainLanguage : Language + { + public enum Keys + { + Title, + TextAvailablePatches, + ButtonSave, + ToggleUncheckedHelp, + ToggleCheckedHelp, + ButtonAdd, + ButtonRemove, + ButtonCheckAll, + ButtonUncheckAll, + ButtonUpdate, + TextSaved, + TextNewVersion, + DisallowProgram, + AllowProgram, + DisallowProgramDescription, + AllowProgramDescription, + } + internal static DateTime LastModifiedTime => File.GetLastWriteTime(Process.GetCurrentProcess().MainModule.FileName); + internal const int UpdateMonth = 10; + internal static string UpdateTime + { + get + { + var now = new DateTime(); + return new DateTime(now.Year, UpdateMonth, now.Day).ToString("MMMM"); + } + } + public MainLanguage() + { + translations.Add(new Translation + { + Culture = new System.Globalization.CultureInfo("en-US"), + Texts = new List + { + $"{UpdateTime} Update - v{Assembly.GetExecutingAssembly().GetName().Version}", + "Malware Patch", + "Save", + "Uncheck to disallow", + "Check to allow", + "Add", + "Remove", + "Allow All", + "Disallow All", + "Update", + "Saved", + "New Version Available", + "Disallow program", + "Allow program", + "Select and disallow program.", + "Select and Allow program.", + + } + }); + translations.Add(new Translation + { + Culture = new System.Globalization.CultureInfo("zh-CN"), + Texts = new List + { + $"{UpdateTime}更新 - v{Assembly.GetExecutingAssembly().GetName().Version}", + "软件屏蔽器", + "保存更改", + "打叉以屏蔽", + "打勾以允许", + "添加", + "移除", + "全部允许", + "全部屏蔽", + "检查更新", + "已保存", + "新版本可用", + "屏蔽选定程序", + "允许选定程序", + "选择并屏蔽一个程序.", + "选择并允许一个程序.", + + } + }); + } + } +} diff --git a/src/MalwarePatch/Languages/UpdateLanguage.cs b/src/MalwarePatch/Languages/UpdateLanguage.cs new file mode 100644 index 0000000..76885f9 --- /dev/null +++ b/src/MalwarePatch/Languages/UpdateLanguage.cs @@ -0,0 +1,91 @@ +using Ace.Wpf.Mvvm; +using MalwarePatch.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MalwarePatch.Languages +{ + sealed class UpdateLanguage : Language + { + public enum Keys + { + WindowTitle, + ButtonDownload, + ButtonRetry, + ButtonRestart, + TextProxyLabel, + NewVerisonTitle, + NewVerisonStatus, + CheckingNewVersion, + NoNewVerisonTitle, + NoNewVerisonStatus, + DownloadingStatus, + DownloadCompleteStatus, + CheckFailedStatus, + CheckFailedTitle, + DownloadFailedStatus, + DownloadFailedTitle, + UpdateFromPreupdateFile, + Unknown, + TextProxyPlaceholder, + } + public UpdateLanguage() + { + translations.Add(new Translation + { + Culture = new System.Globalization.CultureInfo("en-US"), + Texts = new List + { + "Check for updates", + "Download", + "Check Again", + "Restart App", + "Proxy:", + "New Verison Available", + "Found new verison ({0}), click Download to update.", + "Checking updates...", + "Up to date", + "You are on latest verison.", + "Downloading...", + "Download complete. Exit app to run update, or click \"Restart App\" to restart app after updating.", + "Check update failed: {0}", + "Check update failed", + "Download failed: {0}", + "Download failed", + $"You cannot download update using a pre-update file ({Updater.UpdateFileName}).", + "Unknown error.", + "Default" + } + }); + translations.Add(new Translation + { + Culture = new System.Globalization.CultureInfo("zh-CN"), + Texts = new List + { + "检查更新", + "下载更新", + "重新检查", + "重启程序", + "代理:", + "新版本可用", + "已发现新版本({0}),点击下载以开始更新。", + "正在检查新版本...", + "已是最新版本", + "没有发现更新的版本。", + "正在下载...", + "下载完成。关闭程序后将进行更新,或点击\"重启程序\"以在更新完成后再次启动。", + "检查更新失败: {0}", + "检查更新失败", + "下载失败: {0}", + "下载失败", + $"你不能在预更新文件({Updater.UpdateFileName})上下载更新。", + "未知错误。", + "默认", + } + }); + } + } +} diff --git a/src/MalwarePatch/Languages/UserCertificateLanguage.cs b/src/MalwarePatch/Languages/UserCertificateLanguage.cs new file mode 100644 index 0000000..c0c9c91 --- /dev/null +++ b/src/MalwarePatch/Languages/UserCertificateLanguage.cs @@ -0,0 +1,60 @@ +using Ace.Wpf.Mvvm; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MalwarePatch.Languages +{ + sealed class UserCertificateLanguage : Language + { + public enum Keys + { + Error, + Tip, + Complete, + TipMessage, + FileNotFound, + FileNotSigned, + Allowed, + Disallowed, + UnknownPublisher, + } + public UserCertificateLanguage() + { + translations.Add(new Translation + { + Culture = new System.Globalization.CultureInfo("en-US"), + Texts = new List + { + "Error", + "Tip", + "Complete", + "Usage: --allow/--disallow=", + "Input file \"{0}\" not found.", + "Input file \"{0}\" is not signed.", + "Allowed programs from \"{0}\".", + "Disallowed programs from \"{0}\".", + "Unknown Publisher", + } + }); + translations.Add(new Translation + { + Culture = new System.Globalization.CultureInfo("zh-CN"), + Texts = new List + { + "错误", + "提示", + "完成", + "用法: --allow/--disallow=<文件名>", + "输入的文件 \"{0}\" 不存在.", + "输入的文件 \"{0}\" 未签名.", + "已允许来自 \"{0}\" 的程序.", + "已屏蔽来自 \"{0}\" 的程序.", + "未知发布者", + } + }); + } + } +} diff --git a/src/MalwarePatch/MalwarePatch.csproj b/src/MalwarePatch/MalwarePatch.csproj new file mode 100644 index 0000000..179b918 --- /dev/null +++ b/src/MalwarePatch/MalwarePatch.csproj @@ -0,0 +1,338 @@ + + + + + Debug + AnyCPU + {769D2F79-D71B-4F5F-A61F-B1EF3A4C7414} + WinExe + MalwarePatch + mwp + v4.7.2 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + true + + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + true + 7.2 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + 7.2 + + + MalwarePatch.ico + + + false + + + LocalIntranet + + + false + + + Properties\app.manifest + + + + ..\..\Ace\Ace\bin\Release\Ace.dll + False + + + + + + + + + + + 4.0 + + + + + + + + MSBuild:Compile + Designer + + + + + + + + + CheckWindow.xaml + + + + + + + + DialogWindow.xaml + + + + + + + + + + UpdateWindow.xaml + + + + + + + + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + MSBuild:Compile + Designer + + + App.xaml + Code + + + MainWindow.xaml + Code + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + + + + + + + + + + + + + + + + "C:\My Programs\Tools\InsertIcons.exe" "$(TargetPath)" "$(ProjectDir)AppIcons" +if $(ConfigurationName)==Release ( +xcopy "$(TargetPath)" "C:\Users\The18\Documents\My Docs\Codes\malware-patch\mwp.exe" /Y +) + + + \ No newline at end of file diff --git a/src/MalwarePatch/MalwarePatch.ico b/src/MalwarePatch/MalwarePatch.ico new file mode 100644 index 0000000000000000000000000000000000000000..69eeb39f6da9ea87338e090f255de7a568d33a46 GIT binary patch literal 1394798 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

eBAqNU(cDb!uB{ZXpsN`2sj~Nt4TAz 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 literal 0 HcmV?d00001 diff --git a/src/MalwarePatch/Models/BuiltInCertificates.cs b/src/MalwarePatch/Models/BuiltInCertificates.cs new file mode 100644 index 0000000..890a29e --- /dev/null +++ b/src/MalwarePatch/Models/BuiltInCertificates.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Ace.Files; +using Ace; +using System.Windows; +using System.IO; +using System.Windows.Controls.Primitives; +using System.Windows.Media; +using Ace.Files.Json; +using MalwarePatch.Languages; +using System.Globalization; + +namespace MalwarePatch.Models +{ + sealed class BuiltInCertificates : Certificates + { + private BuiltInCertificates(params string[] names) + { + foreach (var name in names) + { + var uri = new Uri("/Certificates/" + name, UriKind.Relative); + certificateFiles.Add(new CertificateFile(AppResource.GetResourceData(uri))); + } + } + + private static readonly List all = new List(); + private static void loadList() + { + all.Clear(); + + var certificateMap = JsonObject + .Parse(AppResource + .GetResourceData("assets/certificate-map.json") + .ToString(true)); + + var displayNameMap = JsonObject + .Parse(AppResource + .GetResourceData("assets/display-names.json") + .ToString(true)); + + const string fallbackLanguageTag = "en-US"; + var languageTag = CultureInfo.CurrentUICulture.IetfLanguageTag; + + if (displayNameMap.ContainsName(languageTag)) + { + displayNameMap = displayNameMap[languageTag].ObjectValue; + } + else + { + displayNameMap = displayNameMap[fallbackLanguageTag].ObjectValue; + } + + var maps = from key in certificateMap.Select(p => p.Name) + join displayName in displayNameMap + on key equals displayName.Name + select ( + certificate: certificateMap[key].ArrayValue.FilterString().ToArray(), + displayName: displayName.StringValue + ); + foreach (var (certificate, displayName) in maps) + { + all.Add(new BuiltInCertificates(certificate) { DisplayName = displayName }); + } + } + public static List All + { + get + { + if (all.Count == 0) + { + loadList(); + } + return all; + } + } + } + +} \ No newline at end of file diff --git a/src/MalwarePatch/Models/CertificateAdapter.cs b/src/MalwarePatch/Models/CertificateAdapter.cs new file mode 100644 index 0000000..d40901b --- /dev/null +++ b/src/MalwarePatch/Models/CertificateAdapter.cs @@ -0,0 +1,49 @@ +using Ace.Wpf.Mvvm; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MalwarePatch.Models +{ + sealed class CertificateAdapter : NotificationObject + { + private readonly Certificates certificates; + public CertificateAdapter(Certificates certificates) + { + this.certificates = certificates; + UpdateState(); + } + + public string Name => certificates.DisplayName; + + private bool isAllowed; + public bool IsAllowed + { + get => isAllowed; + set + { + isAllowed = value; + OnPropertyChanged(nameof(IsAllowed)); + } + } + public void UpdateState() => IsAllowed = !certificates.IsDisallowed; + + public void Allow() + { + if (IsAllowed && certificates.IsDisallowed) + { + certificates.Allow(); + } + } + + public void Disallow() + { + if (!IsAllowed && !certificates.IsDisallowed) + { + certificates.Disallow(); + } + } + } +} diff --git a/src/MalwarePatch/Models/Certificates.cs b/src/MalwarePatch/Models/Certificates.cs new file mode 100644 index 0000000..fbeb521 --- /dev/null +++ b/src/MalwarePatch/Models/Certificates.cs @@ -0,0 +1,18 @@ +using Ace.Files; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MalwarePatch.Models +{ + public abstract class Certificates + { + protected List certificateFiles = new List(); + public string DisplayName { get; protected set; } + public void Allow() => certificateFiles.ForEach(file => file.Allow()); + public void Disallow() => certificateFiles.ForEach(file => file.Disallow()); + public bool IsDisallowed => certificateFiles.TrueForAll(file => file.IsDisallowed); + } +} diff --git a/src/MalwarePatch/Models/UIElementToImageConverter.cs b/src/MalwarePatch/Models/UIElementToImageConverter.cs new file mode 100644 index 0000000..0bc2933 --- /dev/null +++ b/src/MalwarePatch/Models/UIElementToImageConverter.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Data; +using System.Windows.Media; +using System.Windows.Media.Imaging; + +namespace MalwarePatch.Models +{ + class UIElementToImageConverter : IValueConverter + { + // https://stackoverflow.com/questions/6676072/get-system-drawing-bitmap-of-a-wpf-area-using-visualbrush + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is UIElement element) + { + var target = new RenderTargetBitmap(96, 96, 96, 96, PixelFormats.Pbgra32); + var brush = new VisualBrush(element); + + var visual = new DrawingVisual(); + var drawingContext = visual.RenderOpen(); + + + drawingContext.DrawRectangle(brush, null, new Rect(new Point(0, 0), + new Point(96, 96))); + + drawingContext.Close(); + + target.Render(visual); + + return target; + } + return null; + } + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException(); + } +} diff --git a/src/MalwarePatch/Models/Updater.cs b/src/MalwarePatch/Models/Updater.cs new file mode 100644 index 0000000..39057f0 --- /dev/null +++ b/src/MalwarePatch/Models/Updater.cs @@ -0,0 +1,186 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Ace; +using Ace.Web; +using System.Windows; +using System.IO; +using System.Diagnostics; +using System.Net; +using System.Reflection; +using System.Threading; +using MalwarePatch.Languages; +using MalwarePatch.Windows.Main; + +namespace MalwarePatch.Models +{ + sealed class Updater + { + ///

+ /// 更新源的ID + /// + private const string UpdateId = "0B4uebmDoSFx-c0kzcG5yVlZVMlE"; + public string Proxy { get; set; } + private UpdateLanguage Languages { get; } = new UpdateLanguage(); + public DownloadProgressChangedEventHandler ProgressChanged { get; set; } + + public const string + UpdateFileName = "__mwp.exe", + UpdateParameter = "--update", + RestartParameter = "--restart", + RemoveOldFileParameter = "--remove"; + public Task DownloadUpdate() + { + if (Process.GetCurrentProcess().MainModule.FileName.GetFileName() == UpdateFileName) + { + var message = Languages[UpdateLanguage.Keys.UpdateFromPreupdateFile]; + throw new InvalidOperationException(message); + } + if (File.Exists(UpdateFileName)) + { + File.Delete(UpdateFileName); + } + var downloadLink = "https://github.com/the1812/malware-patch/raw/master/mwp.exe"; + //var downloadLink = GoogleDrive.GetDirectLinkFromId(UpdateId); + var info = new DownloadInfo(downloadLink) + { + Proxy = Proxy, + ProgressChanged = ProgressChanged, + }; + return info.DownloadFileAsync(UpdateFileName); + } + public string RestartParameters { get; set; } = ""; + public void SetUpdatePlan() + { + Application.Current.Exit += (s, e) => + { + if (File.Exists(UpdateFileName)) + { + var startInfo = new ProcessStartInfo(UpdateFileName) + { + Arguments = $"{UpdateParameter}={(Process.GetCurrentProcess().MainModule.FileName.GetFileName()).Quotes()} {RestartParameters}", + WorkingDirectory = Environment.CurrentDirectory, + UseShellExecute = false, + }; + Process.Start(startInfo); + } + }; + } + /// + /// 安装更新(如果有)并启动应用 + /// + /// 应用 + /// 命令行参数 + public static void InstallUpdateAndRun(App app, string[] args) + { + const int maxWaitTimes = 60; + var waitTimes = 0; + void removeUpdateFile() + { + var selfFileName = Process.GetCurrentProcess().MainModule.FileName.GetFileName(); + var fileNameToRemove = UpdateFileName; + if (selfFileName != fileNameToRemove + && File.Exists(fileNameToRemove)) + { + //Ensure the old app has exited + while (Utils.IsRunning(fileNameToRemove)) + { + Thread.Sleep(500); + waitTimes++; + if (waitTimes > maxWaitTimes) + { + app.Shutdown(); + } + } + Thread.Sleep(500); + File.Delete(fileNameToRemove); + } + } + void copyUpdateFile(Dictionary dictionary) + { + var targetFileName = dictionary[UpdateParameter].NoQuotes(); + var selfFileName = Process.GetCurrentProcess().MainModule.FileName.GetFileName(); +#if DEBUG + //MessageBox.Show(targetFileName, selfFileName); +#endif + if (!selfFileName.EqualsIgnoreCase(targetFileName)) + { + //Ensure the old app has exited + while (Utils.IsRunning(targetFileName)) + { + Thread.Sleep(500); + waitTimes++; + if (waitTimes > maxWaitTimes) + { + app.Shutdown(); + } + } + //Thread.Sleep(500); + File.Copy(selfFileName, targetFileName, true); + Process.Start(new ProcessStartInfo + { + FileName = targetFileName, + WorkingDirectory = Environment.CurrentDirectory, + Arguments = RemoveOldFileParameter, + }); + //Check if restart is required + if (dictionary.ContainsKey(RestartParameter)) + { + var arguments = new Dictionary(dictionary); + arguments.Remove(RestartParameter); + arguments.Remove(UpdateParameter); + Process.Start(new ProcessStartInfo + { + Arguments = string.Join(" ", arguments.Select(kv => + { + if (kv.Value is null) + { + return kv.Key; + } + else + { + return $"{kv.Key}={kv.Value}"; + } + })), + FileName = targetFileName, + WorkingDirectory = Environment.CurrentDirectory, + }); + } + } + } + if ((args?.Length ?? -1) > 0) + { + var oldVersionParameter = $"{UpdateParameter}:"; + var flattenedArgs = string.Join(" ", args); + Dictionary dictionary = null; + if (!flattenedArgs.Contains(oldVersionParameter)) + { + dictionary = flattenedArgs.SplitToDictionary(" ", "=", true); + } + else + { + dictionary = flattenedArgs.SplitToDictionary(" ", ":", true); + } +#if DEBUG + File.AppendAllText("args.txt", Environment.NewLine + flattenedArgs); +#endif + + if (dictionary.ContainsKey(UpdateParameter)) + { + copyUpdateFile(dictionary); + } + else if (dictionary.ContainsKey(RemoveOldFileParameter)) + { + removeUpdateFile(); + } + } + else + { + new MainWindow().ShowDialog(); + } + app.Shutdown(); + } + } +} diff --git a/src/MalwarePatch/Models/UserCertificate.cs b/src/MalwarePatch/Models/UserCertificate.cs new file mode 100644 index 0000000..ace1030 --- /dev/null +++ b/src/MalwarePatch/Models/UserCertificate.cs @@ -0,0 +1,91 @@ +using Ace; +using Ace.Files; +using MalwarePatch.Languages; +using MalwarePatch.Windows.Dialog; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; + +namespace MalwarePatch.Models +{ + class UserCertificate + { + private readonly string filename; + private readonly UserCertificateLanguage language = new UserCertificateLanguage(); + private static void dialog(string message, string title) + { + // MessageBox.Show(message, title, MessageBoxButton.OK); + DialogWindow.Show(message, title); + } + public UserCertificate(string filename) + { + this.filename = filename; + } + public void Allow() => processCertificate(allow: true, UserCertificateLanguage.Keys.Allowed); + public void Disallow() => processCertificate(allow: false, UserCertificateLanguage.Keys.Disallowed); + private bool Exists => File.Exists(filename); + private CertificateFile Certificate + { + get + { + try + { + var certificate = new X509Certificate2(filename); + return new CertificateFile(certificate); + } + catch (CryptographicException) + { + return null; + } + } + } + private void processCertificate(bool allow, UserCertificateLanguage.Keys messageKey) + { + if (check()) + { + var cert = Certificate; + if (allow) + { + cert.Allow(); + } + else + { + cert.Disallow(); + } + var name = cert.Certificate.GetNameInfo(X509NameType.SimpleName, false); + if (name.IsNullOrWhiteSpace()) + { + name = language[UserCertificateLanguage.Keys.UnknownPublisher]; + } + dialog(string.Format(language[messageKey], name), + language[UserCertificateLanguage.Keys.Complete]); + } + } + private bool check() + { + if (filename.IsNullOrWhiteSpace()) + { + dialog(language[UserCertificateLanguage.Keys.TipMessage], language[UserCertificateLanguage.Keys.Tip]); + return false; + } + if (!Exists) + { + dialog(string.Format(language[UserCertificateLanguage.Keys.FileNotFound], filename), + language[UserCertificateLanguage.Keys.Error]); + return false; + } + if (Certificate is null) + { + dialog(string.Format(language[UserCertificateLanguage.Keys.FileNotSigned], filename), + language[UserCertificateLanguage.Keys.Error]); + return false; + } + return true; + } + } +} diff --git a/src/MalwarePatch/Models/VersionChecker.cs b/src/MalwarePatch/Models/VersionChecker.cs new file mode 100644 index 0000000..0154d51 --- /dev/null +++ b/src/MalwarePatch/Models/VersionChecker.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using Ace.Web; +using Ace; +using System.Windows; + +namespace MalwarePatch.Models +{ + sealed class VersionChecker + { + public Version NewVersion { get; private set; } + private Version CurrectVerison => Assembly.GetEntryAssembly().GetName().Version; + public string Proxy { get; set; } + + public bool HasNewVersion + { + get + { + //var downloadLink = GoogleDrive.GetDirectLinkFromId(NewVersionId); + var downloadLink = "https://github.com/the1812/malware-patch/raw/master/mwp-ver.txt"; + var info = new DownloadInfo(downloadLink) + { + Proxy = Proxy, + }; + var newVersionString = info.DownloadString(); + NewVersion = new Version(newVersionString); + +//#if DEBUG +// return true; +//#endif + return NewVersion > CurrectVerison; + } + } + } +} diff --git a/src/MalwarePatch/Properties/AssemblyInfo.cs b/src/MalwarePatch/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..6bd9308 --- /dev/null +++ b/src/MalwarePatch/Properties/AssemblyInfo.cs @@ -0,0 +1,55 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("Malware Patch")] +[assembly: AssemblyDescription("Malware Patch")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Ace Studio")] +[assembly: AssemblyProduct("Malware Patch")] +[assembly: AssemblyCopyright("Copyright © Ace Studio 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +//若要开始生成可本地化的应用程序,请设置 +//.csproj 文件中的 CultureYouAreCodingWith +//例如,如果您在源文件中使用的是美国英语, +//使用的是美国英语,请将 设置为 en-US。 然后取消 +//对以下 NeutralResourceLanguage 特性的注释。 更新 +//以下行中的“en-US”以匹配项目文件中的 UICulture 设置。 + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //主题特定资源词典所处位置 + //(未在页面中找到资源时使用, + //或应用程序资源字典中找到时使用) + ResourceDictionaryLocation.SourceAssembly //常规资源词典所处位置 + //(未在页面中找到资源时使用, + //、应用程序或任何主题专用资源字典中找到时使用) +)] + + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 +// 方法是按如下所示使用“*”: : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("2.8.2.0")] +[assembly: AssemblyFileVersion("2.8.2.0")] diff --git a/src/MalwarePatch/Properties/Resources.Designer.cs b/src/MalwarePatch/Properties/Resources.Designer.cs new file mode 100644 index 0000000..8825736 --- /dev/null +++ b/src/MalwarePatch/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace MalwarePatch.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MalwarePatch.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性 + /// 重写当前线程的 CurrentUICulture 属性。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/src/MalwarePatch/Properties/Resources.resx b/src/MalwarePatch/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/src/MalwarePatch/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/src/MalwarePatch/Properties/Settings.Designer.cs b/src/MalwarePatch/Properties/Settings.Designer.cs new file mode 100644 index 0000000..e61ce64 --- /dev/null +++ b/src/MalwarePatch/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace MalwarePatch.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/src/MalwarePatch/Properties/Settings.cs b/src/MalwarePatch/Properties/Settings.cs new file mode 100644 index 0000000..c10292a --- /dev/null +++ b/src/MalwarePatch/Properties/Settings.cs @@ -0,0 +1,28 @@ +namespace MalwarePatch.Properties { + + + // 通过此类可以处理设置类的特定事件: + // 在更改某个设置的值之前将引发 SettingChanging 事件。 + // 在更改某个设置的值之后将引发 PropertyChanged 事件。 + // 在加载设置值之后将引发 SettingsLoaded 事件。 + // 在保存设置值之前将引发 SettingsSaving 事件。 + internal sealed partial class Settings { + + public Settings() { + // // 若要为保存和更改设置添加事件处理程序,请取消注释下列行: + // + // this.SettingChanging += this.SettingChangingEventHandler; + // + // this.SettingsSaving += this.SettingsSavingEventHandler; + // + } + + private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) { + // 在此处添加用于处理 SettingChangingEvent 事件的代码。 + } + + private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) { + // 在此处添加用于处理 SettingsSaving 事件的代码。 + } + } +} diff --git a/src/MalwarePatch/Properties/Settings.settings b/src/MalwarePatch/Properties/Settings.settings new file mode 100644 index 0000000..033d7a5 --- /dev/null +++ b/src/MalwarePatch/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/MalwarePatch/Properties/app.manifest b/src/MalwarePatch/Properties/app.manifest new file mode 100644 index 0000000..804f159 --- /dev/null +++ b/src/MalwarePatch/Properties/app.manifest @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/MalwarePatch/Styles/CertificateSwitch.xaml b/src/MalwarePatch/Styles/CertificateSwitch.xaml new file mode 100644 index 0000000..a59798c --- /dev/null +++ b/src/MalwarePatch/Styles/CertificateSwitch.xaml @@ -0,0 +1,334 @@ + + + #88607D8B + + + #AF26A69A + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/MalwarePatch/Styles/FlatTextBox.xaml b/src/MalwarePatch/Styles/FlatTextBox.xaml new file mode 100644 index 0000000..d145bb4 --- /dev/null +++ b/src/MalwarePatch/Styles/FlatTextBox.xaml @@ -0,0 +1,390 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/MalwarePatch/Styles/LightButton.xaml b/src/MalwarePatch/Styles/LightButton.xaml new file mode 100644 index 0000000..0e3f9cf --- /dev/null +++ b/src/MalwarePatch/Styles/LightButton.xaml @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/MalwarePatch/Styles/LightScrollBar.xaml b/src/MalwarePatch/Styles/LightScrollBar.xaml new file mode 100644 index 0000000..7b4796f --- /dev/null +++ b/src/MalwarePatch/Styles/LightScrollBar.xaml @@ -0,0 +1,490 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/MalwarePatch/Styles/LightScrollViewer.xaml b/src/MalwarePatch/Styles/LightScrollViewer.xaml new file mode 100644 index 0000000..abad82f --- /dev/null +++ b/src/MalwarePatch/Styles/LightScrollViewer.xaml @@ -0,0 +1,33 @@ + + + + + + + \ No newline at end of file diff --git a/src/MalwarePatch/Styles/ToolButton.xaml b/src/MalwarePatch/Styles/ToolButton.xaml new file mode 100644 index 0000000..391273d --- /dev/null +++ b/src/MalwarePatch/Styles/ToolButton.xaml @@ -0,0 +1,374 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/MalwarePatch/UpdateID.txt b/src/MalwarePatch/UpdateID.txt new file mode 100644 index 0000000..a660e46 --- /dev/null +++ b/src/MalwarePatch/UpdateID.txt @@ -0,0 +1,6 @@ +Verison = 0B4uebmDoSFx-Tnp2R1V3RE9nRGs +Program = 0B4uebmDoSFx-c0kzcG5yVlZVMlE +// Deprecated: DebugProgram = 0B4uebmDoSFx-VXFLTnUzOXRha1E + +Version Github = https://github.com/the1812/malware-patch/raw/preview/mwp-ver.txt +Program Github = https://github.com/the1812/malware-patch/raw/preview/mwp.exe \ No newline at end of file diff --git a/src/MalwarePatch/Windows/CheckWindow.xaml b/src/MalwarePatch/Windows/CheckWindow.xaml new file mode 100644 index 0000000..bc48492 --- /dev/null +++ b/src/MalwarePatch/Windows/CheckWindow.xaml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/MalwarePatch/Windows/DialogWindow.xaml.cs b/src/MalwarePatch/Windows/DialogWindow.xaml.cs new file mode 100644 index 0000000..6624031 --- /dev/null +++ b/src/MalwarePatch/Windows/DialogWindow.xaml.cs @@ -0,0 +1,43 @@ +using Ace.Wpf; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; + +namespace MalwarePatch.Windows.Dialog +{ + public partial class DialogWindow : Window + { + public DialogWindow() + { + InitializeComponent(); + buttonOK.Click += (s, e) => Close(); + this.DragMove(this); + } + public static bool? Show(string message, string title) + { + var window = Application.Current.Windows.OfType().SingleOrDefault(x => x.IsActive); + return new DialogWindow() + { + Owner = window ?? null, + WindowStartupLocation = window is null ? + WindowStartupLocation.CenterScreen : + WindowStartupLocation.CenterOwner, + DataContext = new + { + Title = title, + Message = message + } + }.ShowDialog(); + } + } +} diff --git a/src/MalwarePatch/Windows/Main/MainViewModel.Commands.cs b/src/MalwarePatch/Windows/Main/MainViewModel.Commands.cs new file mode 100644 index 0000000..645de70 --- /dev/null +++ b/src/MalwarePatch/Windows/Main/MainViewModel.Commands.cs @@ -0,0 +1,58 @@ +using MalwarePatch.Models; +using MalwarePatch.Commands; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using System.Windows.Input; +using MalwarePatch.Windows.Update; + +namespace MalwarePatch.Windows.Main +{ + partial class MainViewModel + { + private bool isNotBusy = true; + public bool IsNotBusy + { + get => isNotBusy; + set + { + isNotBusy = value; + OnPropertyChanged(nameof(IsNotBusy)); + } + } + public SaveChangesCommand ButtonSaveCommand => new SaveChangesCommand(Certificates) + { + BeforeExecute = () => IsNotBusy = false, + AfterExecute = () => + { + IsNotBusy = true; + ShowSavedPopup = true; + } + }; + + public ICommand ButtonCheckAllCommand => new BatchCheckCommand(true, Certificates); + public ICommand ButtonUncheckAllCommand => new BatchCheckCommand(false, Certificates); + public ICommand AllowFileCommand => new UserCertificateCommand(true, Certificates); + public ICommand DisallowFileCommand => new UserCertificateCommand(false, Certificates); + + public DirectCommand ButtonUpdateCommand => new DirectCommand + { + ExcuteAction = o => + { + var updateWindow = new UpdateWindow() + { + Owner = View + }; + ShowNewVersionPopup = false; + ShowSavedPopup = false; + updateWindow.ShowDialog(); + } + }; + + } +} diff --git a/src/MalwarePatch/Windows/Main/MainViewModel.cs b/src/MalwarePatch/Windows/Main/MainViewModel.cs new file mode 100644 index 0000000..d9b36c9 --- /dev/null +++ b/src/MalwarePatch/Windows/Main/MainViewModel.cs @@ -0,0 +1,120 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using MalwarePatch.Languages; +using System.ComponentModel; +using System.Windows; +using MalwarePatch.Commands; +using System.Windows.Controls; +using System.Threading; +using MalwarePatch.Models; +using Ace.Wpf.Mvvm; +using System.Collections.ObjectModel; + +namespace MalwarePatch.Windows.Main +{ + sealed partial class MainViewModel : ViewModel + { + public MainViewModel(MainWindow mainWindow) : base(mainWindow) + { + silentCheckUpdate(); + certificates = new ObservableCollection(); + BuiltInCertificates.All.ForEach(cert => certificates.Add(new CertificateAdapter(cert))); + } + private async void silentCheckUpdate() + { +#if DEBUG + await Task.Run(() => + { + //ShowNewVersionPopup = true; + var checker = new VersionChecker(); + var hasNewVersion = false; + try + { + hasNewVersion = checker.HasNewVersion; + } + catch + { + hasNewVersion = false; + } + if (hasNewVersion) + { + ShowNewVersionPopup = true; + } + }); +#else + await Task.Run(() => + { + //ShowNewVersionPopup = true; + var checker = new VersionChecker(); + var hasNewVersion = false; + try + { + hasNewVersion = checker.HasNewVersion; + } + catch + { + hasNewVersion = false; + } + if (hasNewVersion) + { + ShowNewVersionPopup = true; + } + }); +#endif + + } + + private ObservableCollection certificates; + public ObservableCollection Certificates + { + get => certificates; + set + { + certificates = value; + OnPropertyChanged(nameof(Certificates)); + } + } + + private bool showSavedPopup = false; + public bool ShowSavedPopup + { + get => showSavedPopup; + set + { + showSavedPopup = value; + OnPropertyChanged(nameof(ShowSavedPopup)); + if (value) + { + Task.Run(() => + { + Thread.Sleep(2000); + ShowSavedPopup = false; + }); + } + } + } + private bool showNewVersionPopup = false; + public bool ShowNewVersionPopup + { + get => showNewVersionPopup; + set + { + showNewVersionPopup = value; + OnPropertyChanged(nameof(ShowNewVersionPopup)); + if (value) + { + Task.Run(() => + { + Thread.Sleep(5000); + ShowNewVersionPopup = false; + }); + } + } + } + + } +} diff --git a/src/MalwarePatch/Windows/Main/MainWindow.xaml b/src/MalwarePatch/Windows/Main/MainWindow.xaml new file mode 100644 index 0000000..a083bf9 --- /dev/null +++ b/src/MalwarePatch/Windows/Main/MainWindow.xaml @@ -0,0 +1,379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +