From 38bd210c976579ce899c108cdc06b6e46681d25d Mon Sep 17 00:00:00 2001 From: Patrick Wardle Date: Mon, 22 Oct 2018 20:22:45 -1000 Subject: [PATCH] v1.1.2 commit compile for 10.12+ ignore UDP connections to localhos process network events one at a time (otherwise, threading issues) --- .../FriendsDigita.imageset/Contents.json | 6 +- .../{Digita-1.pdf => digitaDark.pdf} | Bin .../{Digita-2.pdf => digitaLight.pdf} | Bin .../Contents.json | 4 +- ...alwarebytes-1.pdf => malwarebytesDark.pdf} | Bin ...lwarebytes-2.pdf => malwarebytesLight.pdf} | Bin .../FriendsSophos.imageset/Contents.json | 35 ++++++++ .../FriendsSophos.imageset/sophos.png | Bin 0 -> 1364 bytes .../FriendsSophos.imageset/sophosDark.png | Bin 0 -> 1364 bytes .../FriendsSophos.imageset/sophosLight.png | Bin 0 -> 1364 bytes .../InstallerIcon.imageset/Contents.json | 4 +- .../{luluIcon_dark.pdf => luluIconDark.pdf} | Bin .../{luluIcon-1.pdf => luluIconLight.pdf} | Bin .../InstallerLuLuText.imageset/Contents.json | 6 +- .../{lulu_text-1.pdf => luluText.pdf} | Bin .../{lulu_text-2.pdf => luluTextDark.pdf} | Bin .../{lulu_text.pdf => luluTextLight.pdf} | Bin .../Configure/ConfigureWindowController.xib | 31 +++++-- configure/Configure/Images/digita.png | Bin 45056 -> 0 bytes configure/Configure/Images/malwarebytes.png | Bin 20390 -> 0 bytes configure/Configure/Info.plist | 4 +- configure/Configure/Script/configure.sh | 6 +- configure/Helper/Info.plist | 6 +- configure/configure.xcodeproj/project.pbxproj | 12 +-- .../kernelExtension.xcodeproj/project.pbxproj | 12 +-- kernelExtension/kernelExtension/Info.plist | 4 +- .../kernelExtension/socketEvents.cpp | 79 ++++++++++++++---- .../kernelExtension/socketEvents.hpp | 4 +- .../kernelExtension/userInterface.cpp | 2 +- .../launchDaemon.xcodeproj/project.pbxproj | 8 +- launchDaemon/launchDaemon/Alerts.m | 2 +- launchDaemon/launchDaemon/KextListener.m | 31 +------ launchDaemon/launchDaemon/XPCDaemon.h | 9 -- launchDaemon/launchDaemonBundle/Info.plist | 4 +- loginItem/loginItem.xcodeproj/project.pbxproj | 4 +- loginItem/loginItem/Info.plist | 4 +- mainApp/mainApp.xcodeproj/project.pbxproj | 8 +- mainApp/mainApp/Info.plist | 4 +- mainApp/mainApp/patrons.txt | 4 +- 39 files changed, 177 insertions(+), 116 deletions(-) rename configure/Configure/Assets.xcassets/FriendsDigita.imageset/{Digita-1.pdf => digitaDark.pdf} (100%) rename configure/Configure/Assets.xcassets/FriendsDigita.imageset/{Digita-2.pdf => digitaLight.pdf} (100%) rename configure/Configure/Assets.xcassets/FriendsMalwarebytes.imageset/{malwarebytes-1.pdf => malwarebytesDark.pdf} (100%) rename configure/Configure/Assets.xcassets/FriendsMalwarebytes.imageset/{malwarebytes-2.pdf => malwarebytesLight.pdf} (100%) create mode 100644 configure/Configure/Assets.xcassets/FriendsSophos.imageset/Contents.json create mode 100644 configure/Configure/Assets.xcassets/FriendsSophos.imageset/sophos.png create mode 100644 configure/Configure/Assets.xcassets/FriendsSophos.imageset/sophosDark.png create mode 100644 configure/Configure/Assets.xcassets/FriendsSophos.imageset/sophosLight.png rename configure/Configure/Assets.xcassets/InstallerIcon.imageset/{luluIcon_dark.pdf => luluIconDark.pdf} (100%) rename configure/Configure/Assets.xcassets/InstallerIcon.imageset/{luluIcon-1.pdf => luluIconLight.pdf} (100%) rename configure/Configure/Assets.xcassets/InstallerLuLuText.imageset/{lulu_text-1.pdf => luluText.pdf} (100%) rename configure/Configure/Assets.xcassets/InstallerLuLuText.imageset/{lulu_text-2.pdf => luluTextDark.pdf} (100%) rename configure/Configure/Assets.xcassets/InstallerLuLuText.imageset/{lulu_text.pdf => luluTextLight.pdf} (100%) delete mode 100644 configure/Configure/Images/digita.png delete mode 100644 configure/Configure/Images/malwarebytes.png diff --git a/configure/Configure/Assets.xcassets/FriendsDigita.imageset/Contents.json b/configure/Configure/Assets.xcassets/FriendsDigita.imageset/Contents.json index d0130d3..d54931d 100644 --- a/configure/Configure/Assets.xcassets/FriendsDigita.imageset/Contents.json +++ b/configure/Configure/Assets.xcassets/FriendsDigita.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "mac", - "filename" : "Digita.pdf" + "filename" : "digita.pdf" }, { "idiom" : "mac", - "filename" : "Digita-1.pdf", + "filename" : "digitaLight.pdf", "appearances" : [ { "appearance" : "luminosity", @@ -16,7 +16,7 @@ }, { "idiom" : "mac", - "filename" : "Digita-2.pdf", + "filename" : "digitaDark.pdf", "appearances" : [ { "appearance" : "luminosity", diff --git a/configure/Configure/Assets.xcassets/FriendsDigita.imageset/Digita-1.pdf b/configure/Configure/Assets.xcassets/FriendsDigita.imageset/digitaDark.pdf similarity index 100% rename from configure/Configure/Assets.xcassets/FriendsDigita.imageset/Digita-1.pdf rename to configure/Configure/Assets.xcassets/FriendsDigita.imageset/digitaDark.pdf diff --git a/configure/Configure/Assets.xcassets/FriendsDigita.imageset/Digita-2.pdf b/configure/Configure/Assets.xcassets/FriendsDigita.imageset/digitaLight.pdf similarity index 100% rename from configure/Configure/Assets.xcassets/FriendsDigita.imageset/Digita-2.pdf rename to configure/Configure/Assets.xcassets/FriendsDigita.imageset/digitaLight.pdf diff --git a/configure/Configure/Assets.xcassets/FriendsMalwarebytes.imageset/Contents.json b/configure/Configure/Assets.xcassets/FriendsMalwarebytes.imageset/Contents.json index e216273..f3c6d2f 100644 --- a/configure/Configure/Assets.xcassets/FriendsMalwarebytes.imageset/Contents.json +++ b/configure/Configure/Assets.xcassets/FriendsMalwarebytes.imageset/Contents.json @@ -6,7 +6,7 @@ }, { "idiom" : "mac", - "filename" : "malwarebytes-1.pdf", + "filename" : "malwarebytesLight.pdf", "appearances" : [ { "appearance" : "luminosity", @@ -16,7 +16,7 @@ }, { "idiom" : "mac", - "filename" : "malwarebytes-2.pdf", + "filename" : "malwarebytesDark.pdf", "appearances" : [ { "appearance" : "luminosity", diff --git a/configure/Configure/Assets.xcassets/FriendsMalwarebytes.imageset/malwarebytes-1.pdf b/configure/Configure/Assets.xcassets/FriendsMalwarebytes.imageset/malwarebytesDark.pdf similarity index 100% rename from configure/Configure/Assets.xcassets/FriendsMalwarebytes.imageset/malwarebytes-1.pdf rename to configure/Configure/Assets.xcassets/FriendsMalwarebytes.imageset/malwarebytesDark.pdf diff --git a/configure/Configure/Assets.xcassets/FriendsMalwarebytes.imageset/malwarebytes-2.pdf b/configure/Configure/Assets.xcassets/FriendsMalwarebytes.imageset/malwarebytesLight.pdf similarity index 100% rename from configure/Configure/Assets.xcassets/FriendsMalwarebytes.imageset/malwarebytes-2.pdf rename to configure/Configure/Assets.xcassets/FriendsMalwarebytes.imageset/malwarebytesLight.pdf diff --git a/configure/Configure/Assets.xcassets/FriendsSophos.imageset/Contents.json b/configure/Configure/Assets.xcassets/FriendsSophos.imageset/Contents.json new file mode 100644 index 0000000..3221459 --- /dev/null +++ b/configure/Configure/Assets.xcassets/FriendsSophos.imageset/Contents.json @@ -0,0 +1,35 @@ +{ + "images" : [ + { + "idiom" : "mac", + "filename" : "sophos.png" + }, + { + "idiom" : "mac", + "filename" : "sophosLight.png", + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "light" + } + ] + }, + { + "idiom" : "mac", + "filename" : "sophosDark.png", + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ] + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "preserves-vector-representation" : true + } +} \ No newline at end of file diff --git a/configure/Configure/Assets.xcassets/FriendsSophos.imageset/sophos.png b/configure/Configure/Assets.xcassets/FriendsSophos.imageset/sophos.png new file mode 100644 index 0000000000000000000000000000000000000000..a5da6436fa0088851f46a62d5ad0840565402053 GIT binary patch literal 1364 zcmb7^>r;{m6vp3{h_n#RY&J>E%*xHYfN6qa7d6qm^hU6zc}Z6@FKJRRiI=2uT^n^Q zvJ50mA~P>j5>ZCp+ERBBb=6E1&?#L3myD2*(PjUHojK3>%{=Ek=i@1f3_l7tw>1X< z08R)F08MN+Nwgkf>M!D$l_p>!j}Ze+1fu!>tLgyjOjF8|0*0Re+}|Ahr!Z?kwmrVZ zvYZnM>`eAF&CIfbqjCUX!>0eVW@s|sXfk0GLRcV70Yg~q*u=GMdjJ4y?+^kG5osUQ zY$a*NedE=8yHZ`lPE4()E^U7Ps!-+Ss64}-`HrBkEq4r^xiBwI7-1XATj!B<#(7Ql zUvd)>_3LCNZr`sr5z^4T31)iFc)XGewTAG=Urft6p|l%?Y&x2 zeB5HvcI792{5H8;-P}VBDyqJr7{IE$ zG}Fj-2V+>tLsrxTM^tlU1&sSj#-5gs{QRq!CV@0Ap%oQ8A zhn_r=t~v3wFmCUeV#V;Mow@vbUA!vee0NzFFYT$%I{Huxb@!#s_$Z`wM>lSq-|0>B z*6+Cve|_>{9B2V`g5gi2Zg|Ks*X~9fH|yphz|w&(E9?!5D}SrGKTi=cfdcR{Wpw7} zh`8t9veSa)A35o}&x2W5;sKJdiMe3=60zb0* zsKTE;?qwJ}MW#1o_|?T9h(Kwr0s$PRf!e9i2Uut&*MUkBtt- zcUf+*m1cOXE^v+To@(fdVEO6Ux}?X8R|QicM`}}g=itAAsCR6V@GS&?xn#SxHS`O^ z1+>zp+AoXRNxzp}w@|Dqss%o}hl@g?`)sULD4?gqpr^busX=J1#vjazI=(l3lH#Jzna0;aS^V2D3yZ_|dLD z>JtBW#b4Z!b%(@YTkp-=9NgM#^C3#mgWmwxR*`AAMb(pzKJo1zv`ji2wiq literal 0 HcmV?d00001 diff --git a/configure/Configure/Assets.xcassets/FriendsSophos.imageset/sophosDark.png b/configure/Configure/Assets.xcassets/FriendsSophos.imageset/sophosDark.png new file mode 100644 index 0000000000000000000000000000000000000000..a5da6436fa0088851f46a62d5ad0840565402053 GIT binary patch literal 1364 zcmb7^>r;{m6vp3{h_n#RY&J>E%*xHYfN6qa7d6qm^hU6zc}Z6@FKJRRiI=2uT^n^Q zvJ50mA~P>j5>ZCp+ERBBb=6E1&?#L3myD2*(PjUHojK3>%{=Ek=i@1f3_l7tw>1X< z08R)F08MN+Nwgkf>M!D$l_p>!j}Ze+1fu!>tLgyjOjF8|0*0Re+}|Ahr!Z?kwmrVZ zvYZnM>`eAF&CIfbqjCUX!>0eVW@s|sXfk0GLRcV70Yg~q*u=GMdjJ4y?+^kG5osUQ zY$a*NedE=8yHZ`lPE4()E^U7Ps!-+Ss64}-`HrBkEq4r^xiBwI7-1XATj!B<#(7Ql zUvd)>_3LCNZr`sr5z^4T31)iFc)XGewTAG=Urft6p|l%?Y&x2 zeB5HvcI792{5H8;-P}VBDyqJr7{IE$ zG}Fj-2V+>tLsrxTM^tlU1&sSj#-5gs{QRq!CV@0Ap%oQ8A zhn_r=t~v3wFmCUeV#V;Mow@vbUA!vee0NzFFYT$%I{Huxb@!#s_$Z`wM>lSq-|0>B z*6+Cve|_>{9B2V`g5gi2Zg|Ks*X~9fH|yphz|w&(E9?!5D}SrGKTi=cfdcR{Wpw7} zh`8t9veSa)A35o}&x2W5;sKJdiMe3=60zb0* zsKTE;?qwJ}MW#1o_|?T9h(Kwr0s$PRf!e9i2Uut&*MUkBtt- zcUf+*m1cOXE^v+To@(fdVEO6Ux}?X8R|QicM`}}g=itAAsCR6V@GS&?xn#SxHS`O^ z1+>zp+AoXRNxzp}w@|Dqss%o}hl@g?`)sULD4?gqpr^busX=J1#vjazI=(l3lH#Jzna0;aS^V2D3yZ_|dLD z>JtBW#b4Z!b%(@YTkp-=9NgM#^C3#mgWmwxR*`AAMb(pzKJo1zv`ji2wiq literal 0 HcmV?d00001 diff --git a/configure/Configure/Assets.xcassets/FriendsSophos.imageset/sophosLight.png b/configure/Configure/Assets.xcassets/FriendsSophos.imageset/sophosLight.png new file mode 100644 index 0000000000000000000000000000000000000000..a5da6436fa0088851f46a62d5ad0840565402053 GIT binary patch literal 1364 zcmb7^>r;{m6vp3{h_n#RY&J>E%*xHYfN6qa7d6qm^hU6zc}Z6@FKJRRiI=2uT^n^Q zvJ50mA~P>j5>ZCp+ERBBb=6E1&?#L3myD2*(PjUHojK3>%{=Ek=i@1f3_l7tw>1X< z08R)F08MN+Nwgkf>M!D$l_p>!j}Ze+1fu!>tLgyjOjF8|0*0Re+}|Ahr!Z?kwmrVZ zvYZnM>`eAF&CIfbqjCUX!>0eVW@s|sXfk0GLRcV70Yg~q*u=GMdjJ4y?+^kG5osUQ zY$a*NedE=8yHZ`lPE4()E^U7Ps!-+Ss64}-`HrBkEq4r^xiBwI7-1XATj!B<#(7Ql zUvd)>_3LCNZr`sr5z^4T31)iFc)XGewTAG=Urft6p|l%?Y&x2 zeB5HvcI792{5H8;-P}VBDyqJr7{IE$ zG}Fj-2V+>tLsrxTM^tlU1&sSj#-5gs{QRq!CV@0Ap%oQ8A zhn_r=t~v3wFmCUeV#V;Mow@vbUA!vee0NzFFYT$%I{Huxb@!#s_$Z`wM>lSq-|0>B z*6+Cve|_>{9B2V`g5gi2Zg|Ks*X~9fH|yphz|w&(E9?!5D}SrGKTi=cfdcR{Wpw7} zh`8t9veSa)A35o}&x2W5;sKJdiMe3=60zb0* zsKTE;?qwJ}MW#1o_|?T9h(Kwr0s$PRf!e9i2Uut&*MUkBtt- zcUf+*m1cOXE^v+To@(fdVEO6Ux}?X8R|QicM`}}g=itAAsCR6V@GS&?xn#SxHS`O^ z1+>zp+AoXRNxzp}w@|Dqss%o}hl@g?`)sULD4?gqpr^busX=J1#vjazI=(l3lH#Jzna0;aS^V2D3yZ_|dLD z>JtBW#b4Z!b%(@YTkp-=9NgM#^C3#mgWmwxR*`AAMb(pzKJo1zv`ji2wiq literal 0 HcmV?d00001 diff --git a/configure/Configure/Assets.xcassets/InstallerIcon.imageset/Contents.json b/configure/Configure/Assets.xcassets/InstallerIcon.imageset/Contents.json index eadb81c..83fb322 100644 --- a/configure/Configure/Assets.xcassets/InstallerIcon.imageset/Contents.json +++ b/configure/Configure/Assets.xcassets/InstallerIcon.imageset/Contents.json @@ -6,7 +6,7 @@ }, { "idiom" : "mac", - "filename" : "luluIcon-1.pdf", + "filename" : "luluIconLight.pdf", "appearances" : [ { "appearance" : "luminosity", @@ -16,7 +16,7 @@ }, { "idiom" : "mac", - "filename" : "luluIcon_dark.pdf", + "filename" : "luluIconDark.pdf", "appearances" : [ { "appearance" : "luminosity", diff --git a/configure/Configure/Assets.xcassets/InstallerIcon.imageset/luluIcon_dark.pdf b/configure/Configure/Assets.xcassets/InstallerIcon.imageset/luluIconDark.pdf similarity index 100% rename from configure/Configure/Assets.xcassets/InstallerIcon.imageset/luluIcon_dark.pdf rename to configure/Configure/Assets.xcassets/InstallerIcon.imageset/luluIconDark.pdf diff --git a/configure/Configure/Assets.xcassets/InstallerIcon.imageset/luluIcon-1.pdf b/configure/Configure/Assets.xcassets/InstallerIcon.imageset/luluIconLight.pdf similarity index 100% rename from configure/Configure/Assets.xcassets/InstallerIcon.imageset/luluIcon-1.pdf rename to configure/Configure/Assets.xcassets/InstallerIcon.imageset/luluIconLight.pdf diff --git a/configure/Configure/Assets.xcassets/InstallerLuLuText.imageset/Contents.json b/configure/Configure/Assets.xcassets/InstallerLuLuText.imageset/Contents.json index 78be079..afb6105 100644 --- a/configure/Configure/Assets.xcassets/InstallerLuLuText.imageset/Contents.json +++ b/configure/Configure/Assets.xcassets/InstallerLuLuText.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "mac", - "filename" : "lulu_text.pdf" + "filename" : "luluText.pdf" }, { "idiom" : "mac", - "filename" : "lulu_text-1.pdf", + "filename" : "luluTextLight.pdf", "appearances" : [ { "appearance" : "luminosity", @@ -16,7 +16,7 @@ }, { "idiom" : "mac", - "filename" : "lulu_text-2.pdf", + "filename" : "luluTextDark.pdf", "appearances" : [ { "appearance" : "luminosity", diff --git a/configure/Configure/Assets.xcassets/InstallerLuLuText.imageset/lulu_text-1.pdf b/configure/Configure/Assets.xcassets/InstallerLuLuText.imageset/luluText.pdf similarity index 100% rename from configure/Configure/Assets.xcassets/InstallerLuLuText.imageset/lulu_text-1.pdf rename to configure/Configure/Assets.xcassets/InstallerLuLuText.imageset/luluText.pdf diff --git a/configure/Configure/Assets.xcassets/InstallerLuLuText.imageset/lulu_text-2.pdf b/configure/Configure/Assets.xcassets/InstallerLuLuText.imageset/luluTextDark.pdf similarity index 100% rename from configure/Configure/Assets.xcassets/InstallerLuLuText.imageset/lulu_text-2.pdf rename to configure/Configure/Assets.xcassets/InstallerLuLuText.imageset/luluTextDark.pdf diff --git a/configure/Configure/Assets.xcassets/InstallerLuLuText.imageset/lulu_text.pdf b/configure/Configure/Assets.xcassets/InstallerLuLuText.imageset/luluTextLight.pdf similarity index 100% rename from configure/Configure/Assets.xcassets/InstallerLuLuText.imageset/lulu_text.pdf rename to configure/Configure/Assets.xcassets/InstallerLuLuText.imageset/luluTextLight.pdf diff --git a/configure/Configure/ConfigureWindowController.xib b/configure/Configure/ConfigureWindowController.xib index 75872ac..6b699f8 100644 --- a/configure/Configure/ConfigureWindowController.xib +++ b/configure/Configure/ConfigureWindowController.xib @@ -1,8 +1,8 @@ - + - + @@ -106,7 +106,7 @@ - + @@ -115,14 +115,14 @@ - + - - + + - + + + + + + + + + + - + @@ -144,6 +153,11 @@ + + + + + @@ -151,6 +165,7 @@ + diff --git a/configure/Configure/Images/digita.png b/configure/Configure/Images/digita.png deleted file mode 100644 index a5beaf285c91ed38e49602e5e796a807445155ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45056 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 AH~;_u diff --git a/configure/Configure/Images/malwarebytes.png b/configure/Configure/Images/malwarebytes.png deleted file mode 100644 index 484600bf404576e86c8a16d668a1b4200d4ca3ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20390 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 APPL CFBundleShortVersionString - 1.1.1 + 1.1.2 CFBundleSignature ???? CFBundleVersion - 1.1.1 + 1.1.2 NSHumanReadableCopyright Copyright (c) 2018 Objective-See. All rights reserved. NSMainNibFile diff --git a/configure/Configure/Script/configure.sh b/configure/Configure/Script/configure.sh index c6f2390..b813109 100755 --- a/configure/Configure/Script/configure.sh +++ b/configure/Configure/Script/configure.sh @@ -13,11 +13,11 @@ INSTALL_DIRECTORY="/Library/Objective-See/LuLu" #OS version check -# only support 10.10+ +# only support 10.12+ OSVers="$(sw_vers -productVersion)" -if [ "${OSVers:3:2}" -lt 10 ]; then +if [ "${OSVers:3:2}" -lt 12 ]; then echo "\nERROR: ${OSVers} is currently unsupported" - echo "LuLu requires macOS 10.10+\n" + echo "LuLu requires macOS 10.12+\n" exit -1 fi diff --git a/configure/Helper/Info.plist b/configure/Helper/Info.plist index 382ec34..6c21664 100644 --- a/configure/Helper/Info.plist +++ b/configure/Helper/Info.plist @@ -9,14 +9,14 @@ CFBundleName helper CFBundleShortVersionString - 1.1.1 + 1.1.2 CFBundleVersion - 1.1.1 + 1.1.2 NSHumanReadableCopyright Copyright (c) 2018 Objective-See. All rights reserved. SMAuthorizedClients - anchor apple generic and identifier "com.objective-see.lulu.installer" and (certificate leaf[field.1.2.840.113635.100.6.1.9] /* exists */ or certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = VBG97UB4TA) + anchor apple generic and identifier "com.objective-see.lulu.installer" and (certificate leaf[field.1.2.840.113635.100.6.1.9] /* exists */ or certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = VBG97UB4TA) diff --git a/configure/configure.xcodeproj/project.pbxproj b/configure/configure.xcodeproj/project.pbxproj index dd205c1..3d98b83 100644 --- a/configure/configure.xcodeproj/project.pbxproj +++ b/configure/configure.xcodeproj/project.pbxproj @@ -115,9 +115,7 @@ CD73DA98200490B4001FFC84 /* HelperComms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HelperComms.h; sourceTree = ""; }; CDA6E62C203B674C00C78F91 /* configure.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = configure.sh; sourceTree = ""; }; CDA6E62E203B67A100C78F91 /* consts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = consts.h; path = ../../shared/consts.h; sourceTree = ""; }; - CDA6E631203B6B7800C78F91 /* luluText.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = luluText.png; path = ../../shared/images/luluText.png; sourceTree = ""; }; CDA6E632203B6B7800C78F91 /* objectiveSeeText.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = objectiveSeeText.png; path = ../../shared/images/objectiveSeeText.png; sourceTree = ""; }; - CDA6E633203B6B7900C78F91 /* luluIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = luluIcon.png; path = ../../shared/images/luluIcon.png; sourceTree = ""; }; CDA6E634203B6B7900C78F91 /* objectiveSeeLogo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = objectiveSeeLogo.png; path = ../../shared/images/objectiveSeeLogo.png; sourceTree = ""; }; CDAAC23F202255580032F2E6 /* utilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = utilities.m; path = ../../shared/utilities.m; sourceTree = ""; }; CDAAC240202255580032F2E6 /* utilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = utilities.h; path = ../../shared/utilities.h; sourceTree = ""; }; @@ -244,8 +242,6 @@ CDAAC24620226D400032F2E6 /* Images */ = { isa = PBXGroup; children = ( - CDA6E633203B6B7900C78F91 /* luluIcon.png */, - CDA6E631203B6B7800C78F91 /* luluText.png */, CDA6E634203B6B7900C78F91 /* objectiveSeeLogo.png */, CDA6E632203B6B7800C78F91 /* objectiveSeeText.png */, ); @@ -477,7 +473,7 @@ GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; INFOPLIST_FILE = configure/Info.plist; LIBRARY_SEARCH_PATHS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.12; OTHER_CODE_SIGN_FLAGS = "-o hard,kill,library"; PRODUCT_BUNDLE_IDENTIFIER = "com.objective-see.lulu.installer"; PRODUCT_NAME = "LuLu Installer"; @@ -500,7 +496,7 @@ GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; INFOPLIST_FILE = configure/Info.plist; LIBRARY_SEARCH_PATHS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.12; OTHER_CODE_SIGN_FLAGS = "-o hard,kill,library"; PRODUCT_BUNDLE_IDENTIFIER = "com.objective-see.lulu.installer"; PRODUCT_NAME = "LuLu Installer"; @@ -554,7 +550,7 @@ GCC_WARN_UNUSED_LABEL = YES; GCC_WARN_UNUSED_PARAMETER = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.12; ONLY_ACTIVE_ARCH = YES; PROVISIONING_PROFILE = ""; RUN_CLANG_STATIC_ANALYZER = YES; @@ -604,7 +600,7 @@ GCC_WARN_UNUSED_LABEL = YES; GCC_WARN_UNUSED_PARAMETER = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.12; PROVISIONING_PROFILE = ""; RUN_CLANG_STATIC_ANALYZER = YES; SDKROOT = macosx; diff --git a/kernelExtension/kernelExtension.xcodeproj/project.pbxproj b/kernelExtension/kernelExtension.xcodeproj/project.pbxproj index 174b7f9..01d5062 100644 --- a/kernelExtension/kernelExtension.xcodeproj/project.pbxproj +++ b/kernelExtension/kernelExtension.xcodeproj/project.pbxproj @@ -240,7 +240,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.12; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -290,7 +290,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.12; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; }; @@ -304,9 +304,9 @@ CURRENT_PROJECT_VERSION = 1.0.0; DEVELOPMENT_TEAM = VBG97UB4TA; INFOPLIST_FILE = kernelExtension/Info.plist; - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.12; MODULE_NAME = "com.objective-see.lulu"; - MODULE_VERSION = 1.1.1; + MODULE_VERSION = 1.1.2; PRODUCT_BUNDLE_IDENTIFIER = "com.objective-see.lulu"; PRODUCT_MODULE_NAME = LuLu; PRODUCT_NAME = LuLu; @@ -322,9 +322,9 @@ CURRENT_PROJECT_VERSION = 1.0.0; DEVELOPMENT_TEAM = VBG97UB4TA; INFOPLIST_FILE = kernelExtension/Info.plist; - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.12; MODULE_NAME = "com.objective-see.lulu"; - MODULE_VERSION = 1.1.1; + MODULE_VERSION = 1.1.2; PRODUCT_BUNDLE_IDENTIFIER = "com.objective-see.lulu"; PRODUCT_MODULE_NAME = LuLu; PRODUCT_NAME = LuLu; diff --git a/kernelExtension/kernelExtension/Info.plist b/kernelExtension/kernelExtension/Info.plist index 3e9b85a..6350da3 100644 --- a/kernelExtension/kernelExtension/Info.plist +++ b/kernelExtension/kernelExtension/Info.plist @@ -15,9 +15,9 @@ CFBundlePackageType KEXT CFBundleShortVersionString - 1.1.1 + 1.1.2 CFBundleVersion - 1.1.1 + 1.1.2 IOKitPersonalities Firewall diff --git a/kernelExtension/kernelExtension/socketEvents.cpp b/kernelExtension/kernelExtension/socketEvents.cpp index c42d21f..bfe29ad 100644 --- a/kernelExtension/kernelExtension/socketEvents.cpp +++ b/kernelExtension/kernelExtension/socketEvents.cpp @@ -442,7 +442,7 @@ static void unregistered(sflt_handle handle) //determine if socket should be ignored // i.e. firewall disabled, in lockdown mode, etc -bool shouldIgnore(const struct sockaddr *to, kern_return_t* result) +bool shouldIgnore(socket_t so, const struct sockaddr *to, kern_return_t* result) { //flag bool ingore = false; @@ -466,7 +466,7 @@ bool shouldIgnore(const struct sockaddr *to, kern_return_t* result) //check 0x2: // is socket local host? - if(true == isLocalHost(to)) + if(true == isLocalHost(so, to)) { //dbg msg //IOLog("LULU: socket destination is 'localhost' so ignoring w/ 'allow'\n"); @@ -506,43 +506,92 @@ bool shouldIgnore(const struct sockaddr *to, kern_return_t* result) return ingore; } -//check if socket is local host -bool isLocalHost(const struct sockaddr *to) +//check if socket destination is local host +bool isLocalHost(socket_t so, const struct sockaddr *to) { //flag bool localHost = false; - //sanity check + //socket name + struct sockaddr_in6 socketName = {0}; + + //peer name + struct sockaddr_in6 peerName = {0}; + + //destination + struct sockaddr_in6* destination = {0}; + + //family + int family = 0; + + //UDP sockets' dest. can be null + // if so, extract via 'sock_getsockname' / 'getpeername' if(NULL == to) { - //bail - goto bail; + //get socket family + if(0 != sock_getsockname(so, (struct sockaddr*)&socketName, sizeof(socketName))) + { + //err msg + IOLog("LULU ERROR: sock_getsockname() failed\n"); + + //bail + goto bail; + } + + //extract family + family = socketName.sin6_family; + + //lookup remote socket info + if(0 != sock_getpeername(so, (struct sockaddr*)&peerName, sizeof(peerName))) + { + //err msg + IOLog("LULU ERROR: sock_getpeername() failed\n"); + + //bail + goto bail; + } + + //init destination addr + destination = &peerName; + } + //'to' not NULL + // so use its values + else + { + //extract family + family = to->sa_family; + + //init ptr to destination addr + destination = (struct sockaddr_in6*)to; } //check socket addr - switch(to->sa_family) + switch(family) { //IPv4 case AF_INET: - localHost = (INADDR_LOOPBACK == htonl(((const struct sockaddr_in*)to)->sin_addr.s_addr)); + + //local host check + localHost = (INADDR_LOOPBACK == htonl(((const struct sockaddr_in*)destination)->sin_addr.s_addr)); + break; //IPv6 case AF_INET6: //IPv4 addr mapped into IPv6? - if(true == IN6_IS_ADDR_V4MAPPED(&((const struct sockaddr_in6*)to)->sin6_addr)) + if(true == IN6_IS_ADDR_V4MAPPED(&((const struct sockaddr_in6*)destination)->sin6_addr)) { //local host check // only on IPv4 portion - localHost = (INADDR_LOOPBACK == htonl((*(const __uint32_t *)(const void *)(&(((const struct sockaddr_in6*)to)->sin6_addr).s6_addr[12])))); + localHost = (INADDR_LOOPBACK == htonl((*(const __uint32_t *)(const void *)(&(((const struct sockaddr_in6*)destination)->sin6_addr).s6_addr[12])))); } //'pure' IPv6 local host? else { //local host check - localHost = IN6_IS_ADDR_LOOPBACK(&((const struct sockaddr_in6*)to)->sin6_addr); + localHost = IN6_IS_ADDR_LOOPBACK(&((const struct sockaddr_in6*)destination)->sin6_addr); } break; @@ -779,7 +828,8 @@ static kern_return_t data_out(void *cookie, socket_t so, const struct sockaddr * //should ignore? // if disabled, in lockdown mode, etc - if(true == shouldIgnore(to, &result)) + // note: call sets result (allow, disallow, etc) + if(true == shouldIgnore(so, to, &result)) { //bail goto bail; @@ -822,7 +872,8 @@ static kern_return_t connect_out(void *cookie, socket_t so, const struct sockadd //should ignore? // if disabled, in lockdown mode, etc - if(true == shouldIgnore(to, &result)) + // note: call sets result (allow, disallow, etc) + if(true == shouldIgnore(so, to, &result)) { //bail goto bail; diff --git a/kernelExtension/kernelExtension/socketEvents.hpp b/kernelExtension/kernelExtension/socketEvents.hpp index 6c4181c..b790a82 100644 --- a/kernelExtension/kernelExtension/socketEvents.hpp +++ b/kernelExtension/kernelExtension/socketEvents.hpp @@ -48,8 +48,8 @@ static boolean_t gUnregisteringUDPIPV6 = FALSE; //register socket filters kern_return_t registerSocketFilters(); -//check if socket is local host -bool isLocalHost(const struct sockaddr *to); +//check if socket destination is local host +bool isLocalHost(socket_t so, const struct sockaddr *to); //process a socket kern_return_t process(void *cookie, socket_t so, const struct sockaddr *to); diff --git a/kernelExtension/kernelExtension/userInterface.cpp b/kernelExtension/kernelExtension/userInterface.cpp index 75d4a06..029f0d2 100755 --- a/kernelExtension/kernelExtension/userInterface.cpp +++ b/kernelExtension/kernelExtension/userInterface.cpp @@ -175,7 +175,7 @@ bool com_objectivesee_driver_LuLu::initWithTask(task_t owningTask, void* securit } //TODO: validate client here - // only signed by obj-see!? + // only signed by objective-see!? //dbg msg IOLog("LULU: allowed client to connect\n"); diff --git a/launchDaemon/launchDaemon.xcodeproj/project.pbxproj b/launchDaemon/launchDaemon.xcodeproj/project.pbxproj index 04a5e5a..269a85a 100644 --- a/launchDaemon/launchDaemon.xcodeproj/project.pbxproj +++ b/launchDaemon/launchDaemon.xcodeproj/project.pbxproj @@ -401,7 +401,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.12; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -451,7 +451,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.12; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; }; @@ -504,7 +504,7 @@ GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = launchDaemonBundle/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.12; OTHER_CFLAGS = "-DLAUNCH_DAEMON=1"; OTHER_CODE_SIGN_FLAGS = "-o hard,kill,library"; PRODUCT_BUNDLE_IDENTIFIER = "com.objective-see.lulu.bundle"; @@ -528,7 +528,7 @@ GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = launchDaemonBundle/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.12; OTHER_CFLAGS = "-DLAUNCH_DAEMON=1"; OTHER_CODE_SIGN_FLAGS = "-o hard,kill,library"; PRODUCT_BUNDLE_IDENTIFIER = "com.objective-see.lulu.bundle"; diff --git a/launchDaemon/launchDaemon/Alerts.m b/launchDaemon/launchDaemon/Alerts.m index df3a853..bccfa70 100644 --- a/launchDaemon/launchDaemon/Alerts.m +++ b/launchDaemon/launchDaemon/Alerts.m @@ -94,7 +94,7 @@ -(NSMutableDictionary*)create:(struct networkOutEvent_s*)event process:(Process* alert[ALERT_PATH] = process.path; //add (remote) ip - alert[ALERT_IPADDR] = convertSocketAddr((struct sockaddr*)&(event->remoteAddress)); + alert[ALERT_IPADDR] = remoteAddress; //try get host name from DNS cache // since it's based on recv'ing data from kernel, try for a bit... diff --git a/launchDaemon/launchDaemon/KextListener.m b/launchDaemon/launchDaemon/KextListener.m index 2d99743..66b537f 100644 --- a/launchDaemon/launchDaemon/KextListener.m +++ b/launchDaemon/launchDaemon/KextListener.m @@ -345,35 +345,8 @@ -(void)processEvents //network out events case EVENT_NETWORK_OUT: { - //dispatch to handle/process rule - // code signing computations, slow for big apps, don't want those to slow everything down - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - - //copy of event - struct networkOutEvent_s* networkOutEvent = NULL; - - //allocate - networkOutEvent = calloc(0x1, sizeof(struct networkOutEvent_s)); - if(NULL == networkOutEvent) - { - //bail - // from block - return; - } - - //make copy - memcpy(networkOutEvent, &event.networkOutEvent, sizeof(struct networkOutEvent_s)); - - //process - [self processNetworkOut:networkOutEvent]; - - //free - free(networkOutEvent); - - //unset - networkOutEvent = NULL; - - }); + //process + [self processNetworkOut:((struct networkOutEvent_s*)&event.networkOutEvent)]; break; } diff --git a/launchDaemon/launchDaemon/XPCDaemon.h b/launchDaemon/launchDaemon/XPCDaemon.h index d099e13..e26b62f 100644 --- a/launchDaemon/launchDaemon/XPCDaemon.h +++ b/launchDaemon/launchDaemon/XPCDaemon.h @@ -9,7 +9,6 @@ @import Foundation; -//#import "XPCUserClient.h" #import "XPCDaemonProto.h" @interface XPCDaemon : NSObject @@ -19,12 +18,4 @@ /* PROPERTIES */ -//xpc client for talking to user -//@property(nonatomic, retain)XPCUserClient* xpcUserClient; - - - -//last alert -//@property(nonatomic,retain)NSDictionary* dequeuedAlert; - @end diff --git a/launchDaemon/launchDaemonBundle/Info.plist b/launchDaemon/launchDaemonBundle/Info.plist index 5534f3b..49cb9e4 100644 --- a/launchDaemon/launchDaemonBundle/Info.plist +++ b/launchDaemon/launchDaemonBundle/Info.plist @@ -15,9 +15,9 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 1.1.1 + 1.1.2 CFBundleVersion - 1.1.1 + 1.1.2 NSHumanReadableCopyright Copyright © 2018 Objective-See. All rights reserved. NSPrincipalClass diff --git a/loginItem/loginItem.xcodeproj/project.pbxproj b/loginItem/loginItem.xcodeproj/project.pbxproj index d68175c..bd22d32 100644 --- a/loginItem/loginItem.xcodeproj/project.pbxproj +++ b/loginItem/loginItem.xcodeproj/project.pbxproj @@ -393,7 +393,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.12; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -443,7 +443,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.12; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; }; diff --git a/loginItem/loginItem/Info.plist b/loginItem/loginItem/Info.plist index 1e55733..0e1720d 100644 --- a/loginItem/loginItem/Info.plist +++ b/loginItem/loginItem/Info.plist @@ -17,11 +17,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.1.1 + 1.1.2 CFBundleSignature ???? CFBundleVersion - 1.1.1 + 1.1.2 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) LSUIElement diff --git a/mainApp/mainApp.xcodeproj/project.pbxproj b/mainApp/mainApp.xcodeproj/project.pbxproj index 7aadaba..29dfb26 100644 --- a/mainApp/mainApp.xcodeproj/project.pbxproj +++ b/mainApp/mainApp.xcodeproj/project.pbxproj @@ -431,7 +431,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.12; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = "-DMAIN_APP=1"; @@ -482,7 +482,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.12; MTL_ENABLE_DEBUG_INFO = NO; OTHER_CFLAGS = "-DMAIN_APP=1"; SDKROOT = macosx; @@ -499,7 +499,7 @@ DEVELOPMENT_TEAM = VBG97UB4TA; FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/../Carthage/Build/Mac"; INFOPLIST_FILE = mainApp/Info.plist; - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.12; OTHER_CODE_SIGN_FLAGS = "-o hard,kill,library"; OTHER_LDFLAGS = "-Wl,-sectcreate,__RESTRICT,__restrict,/dev/null"; PRODUCT_BUNDLE_IDENTIFIER = "com.objective-see.lulu"; @@ -517,7 +517,7 @@ DEVELOPMENT_TEAM = VBG97UB4TA; FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/../Carthage/Build/Mac"; INFOPLIST_FILE = mainApp/Info.plist; - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.12; OTHER_CODE_SIGN_FLAGS = "-o hard,kill,library"; OTHER_LDFLAGS = "-Wl,-sectcreate,__RESTRICT,__restrict,/dev/null"; PRODUCT_BUNDLE_IDENTIFIER = "com.objective-see.lulu"; diff --git a/mainApp/mainApp/Info.plist b/mainApp/mainApp/Info.plist index 72e2129..703ae2d 100644 --- a/mainApp/mainApp/Info.plist +++ b/mainApp/mainApp/Info.plist @@ -17,9 +17,9 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.1.1 + 1.1.2 CFBundleVersion - 1.1.1 + 1.1.2 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) NSHumanReadableCopyright diff --git a/mainApp/mainApp/patrons.txt b/mainApp/mainApp/patrons.txt index 4a4103d..e8f8421 100644 --- a/mainApp/mainApp/patrons.txt +++ b/mainApp/mainApp/patrons.txt @@ -1,5 +1,5 @@ Patrons: -Halo Privacy, Ash Morgan, Jesse Daguanno, Beau Galbraith, Nando Mendonca, Khalil Sehnaoui, Jeff Golden, Geoffrey Weber, Randy Wong, Gamer_Bot +Halo Privacy, Ash Morgan, Beau Galbraith, Nando Mendonca, Khalil Sehnaoui, Geoffrey Weber, Randy Wong, Gamer_Bot Friends of Objective-See: -Digita Security, Malwarebytes, Don MacAskill +Digita Security, Sophos, Malwarebytes, SmugMug, Sudo Security Group