Code Monkey home page Code Monkey logo

crypter's Introduction

Crypter

Crypter Logo
A Ransomware and Ransomware Builder for Windows written purely in Python


Created for security researchers, enthusiasts and educators, Crypter allows you to experience ransomware first hand. The newly released v3.0 is a complete overhaul that drastically simplifies setup and brings the package up-to-date to work with Python 3.6 and above.

If you're looking to dive straight in then head to the section on Getting Started. Otherwise continue reading to learn more about Crypter.

Note: By making use of this repository and/or the content within, you agree that you have read and accepted the terms of the Disclaimer

Contents

What's New? (v3.0)

  • Decryption key validation check before attempting decryption
  • Overhaul to support Python 3.6 and above
  • Drastically simplified dependency installation

Disclaimer

Crypter is intended for educational and research purposes only. This software should not be used within any system or network for which you do not have permission, nor should it be used for any illegal or illicit purposes. The author takes no responsibility for any damages that may be caused by the software in this repository.

Once compiled, Crypter WILL encrypt the files on the computer on which it is executed. Whilst Crypter provides you with access to the decryption key, enabling you to decrypt any encrypted files, bugs and other issues could, in theory, interrupt or prevent a successful decryption. Consequently, a permanent and irreversible loss of data could occur. To avoid any potential damage, you should only run Crypter on a test machine created for this purpose.

Once again,the author accepts no responsibility for any damages that may occur, and by downloading this software you accept and agree to this disclaimer.

Screenshots

Crypter Builder and Ransomware Example
Builder application (left) for customising and building the Crypter Ransomware (right)

Getting Started

From version 3.0 onwards, getting started is now easier than ever:

  1. Download or clone this repository
  2. Install the dependencies by running pip install -r requirements.txt
  3. Run Builder.pyw to open the Builder and start building!
It's really that simple.

How Does it Work?

Builder

The builder is the application that allows you to customise and build the Crypter Ransomware. Some of the options you can set include:

  • Binary Executable File Icon
  • GUI Title/Heading
  • GUI Font and Background Colour
  • Bitcoin Wallet Address
  • Ransom Fee
  • Ransom Message
  • Payment Time Limit
  • File Shadow Copy Deletion
  • Filetypes to Encrypt

and many more. After setting these options simply hit the BUILD button the build the executable.

Ransomware

Once executed, Crypter will take the following steps:

  • Generate an AES-256 bit encryption/decryption key and write it to key.txt in the current directory
  • Search relevant locations (network drives, user directories, etc.) for matching files
  • Encrypt all matching files
  • Display the Crypter GUI to the victim

FAQs

1. Why did you create this?

Crypter was created for two reasons:

  • As an experiment and Proof-of-Concept (PoC)
  • For use in Red vs. Blue training environments

Traditionally, malware is written in compiled languages like C and C++. As a security researches and Python developer, I set out to determine the extent to which interpretted languages could be used for the creation of malware. At the same time I was working for a security reseller who offered Red vs. Blue training to large enterprises. The training environment made use of live malware samples which were realistic, but unreliable and volatile. After completing the initial PoC, I continued working on Crypter for this organisation to provide a customisable Ransomware sample for use use in this environment.

2. Why make it publically available?

Crypter was made publically available to enable security researchers and enthusiasts to gain a better understanding of Ransomware. While there are plenty of guides and videos on the topic, they usually don't provide the understanding that can be gained by experiencing something first hand.

3. But couldn't it be used by criminals for malicious purposes?!

While Crypter can be used to simulate a real Ransomware attack, steps have been taken to allow users to reverse any damage, and to prevent use by criminals in the wild. Ransomware is only useful to a criminal if they have the ability to decrypt the user's files and the user does not. Traditionally this is done by sending the encryption key to a remote Command & Control (CnC) server controlled by an attack once the user's files have been encrypted. The victim then pays a ransom fee to retrieve access to the key that will decrypt their files.

With Crypter however, there is no inbuilt CnC capability. Once the user's files have been encrypted, the decryption key is written to key.txt in the same directory as the ransomware executable. The user can then use this key to decrypt their files.

4. Could it not be adapted for malicious use?

It is certainly possible to further develop Crypter and implement the missing CnC capabilities. However, this requires expertise and knowledge in programming as well as malware tactics and techniques. Anyone motivated and knowledgeable enough to add these components would most likely create a piece of Ransomware from scratch, and not make use of an existing, open source and publically available package as the basis for their attacks.

5. Can you add a feature for me?

Firstly, if you're going to ask me if I can add CnC functionality, or implement some method for sending the encryption key to remote server, Email etc. please don't waste you time. This is not something I'm willing to do, as it would provide script kiddies with a ready made Ransomware tool that would almost certainly be used for nefarious purposes. Again, this project was created purely for research and educational purposes.

Alternatively, if there is a feature that you think could be cool or useful, then feel free to create an issue with some information on what you're looking for and why. I'm usually quite busy with other projects, but if I think it's worthwhile and I can find the time, I may see if it's something that I can implement.

crypter's People

Contributors

sithis993 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

crypter's Issues

Crypt Drives?

Can you please make it so that i can encrypt drives also? iv attempted to do so but faild

Added better error handling for misisng PyInstaller

Currently, if the user doesn't have PyInstaller installed, then a CMD prompt opens during the built stating the subprocess could not find the target:

image

We should have better error handling here to report this problem in the builder itself

Creation of a distributable package complete with dependencies

The process of installing the correct dependencies is proving difficult and confusing. Consequently, a distributable such as a .rar or .zip needs to be created. This should contain the repository structure, in addition to the required dependencies.

Possible self-encryption of PyInstaller directory

With the recent addition/change to the encryption of the user's home directory, there may be a problem with self-encryption. Crypter now encrypts all directories, and all matching files, found inside the user's home directory. This includes AppData, which is where PyInstaller extracts all of its resources to. This is problematic as we may encrypt resources that we need. The list of encrypted files is also written out to this location.

Solution:

  1. Determine if this is indeed a problem, and if it is...
  2. Extend the excludes functionality so that we can exclude directories, as well as files, from encryption
  3. Add the encrypted files list to the list of files to exclude from encryption

Add error handling for when PyInstaller can't be found by the builder

Currently there are no checks (before the builder starts the build process) to see if PyInstaller is installed and accessible. This means the builder runs correctly but fails - with no message to the user - when it calls out to PyInstaller.

We need to add handling for this which tells the user what's required to resolve the missing dependency

Blinking encryption message alignment changes to right side of GUI

On occasion, the message box which is used to display the "your files have been encrypted" and "your files have been decrypted" messages, seems to become aligned to the right side of the GUI at seemingly random points:

image

Identify what causes this problem, and how it can be solved

crypter is not encrypt

i tried to test this application on a real virus i created a virus and tried to crypt it with this tool but when i uploaded it to virustotal

17 / 66

i tried to make it FUD..

does the crypter work?
i saw the video and i dont see the red window , key.txt ,bin and some other files..
i downloaded the newest version..

SMTP SERVER

Hello,
I try to add some components to your code and I'm building an SMTP server to send the KEY & ID to an email!
But inside the Crypt.py my code don't want to sit, contact me in private if you want to know more !

Thanks !

Main Returned -1

Hi,
Thanks for developing the software...
I hope you have a time to have look at this I am using your 2.41 version everything goes fine, it creates around 9 MB Crypter.exe (With UPX Packer around 6.5) but when I run the exe it throws fatal error "Main returned - 1"... The Notebook I am trying to run exe is in German language.
I also forgot to mention that initially builder.py was throwing an error "OrderDict" not found but when I changed the import in Base.py to "from collections import orderdict" builder.py worked.
Waiting for your response.

Regards,

failure to execute script main

hello, i tried everything and it worked and created the crypter.exe file in Bin directory but when i try opening the file i am getting the error "failure to execute script main". By the way i tried this with version 2,40. thanks

BoxSizer.AddSpacer() error

HI,

I am working on an MSc Cyber Security and found this, it looks really good. I have installed all of the packages and I am getting the following error running the Builder.pyw. Any help would be very appreciative.

======================================================================
*** ATTENTION ***
This messaging protocol is deprecated. This module, and hence arg1
messaging protocol, will be removed in v3.4 of PyPubSub. Please make
the necessary changes to your code so that it no longer requires this
module. The pypubsub documentation provides steps that may be useful
to minimize the chance of introducing bugs in your application.

C:\Users\WinSlave\Downloads\Crypter-master\Crypter-master\build\ExeBuilder\BuilderGuiAbsBase.py:22: wxPyDeprecationWarning: Cal
se SetSizeHints instead.
self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
C:\Users\WinSlave\Downloads\Crypter-master\Crypter-master\build\ExeBuilder\BuilderGuiAbsBase.py:42: wxPyDeprecationWarning: Cal
se SetToolTip instead.
self.LoadFilePicker.SetToolTipString( u"Load an existing configuration file" )
Traceback (most recent call last):
File "Builder.pyw", line 10, in
go = ExeBuilder.ExeBuilder()
File "C:\Users\WinSlave\Downloads\Crypter-master\Crypter-master\build\ExeBuilder\ExeBuilder.py", line 31, in init
builder_gui = Gui()
File "C:\Users\WinSlave\Downloads\Crypter-master\Crypter-master\build\ExeBuilder\Gui.py", line 40, in init
MainFrame.init( self, parent=None )
File "C:\Users\WinSlave\Downloads\Crypter-master\Crypter-master\build\ExeBuilder\BuilderGuiAbsBase.py", line 47, in init
bSizer49.AddSpacer( ( 0, 0), 1, wx.EXPAND, 5 )
TypeError: BoxSizer.AddSpacer(): argument 1 has unexpected type 'tuple'

Many thanks.

Help needed

I got this : (ERROR): Builder: Call to PyInstaller failed. Check that PyInstaller is installed and can be found on the system path

But i've already installed the Pyintsaller I don't understand

Create Wiki with installation and usage guide

Currently the only form of documentation is the project's README and a now out-of-date YouTube video. Documentation needs creating to provide user's with a better understanding of how to install and use Crypter. The wiki is probably the best place for this

Stop Crypter from encrypting the key, and itself

If executed in one of the target directories, Crypter will encrypt itself, and the key produced and stored in key.txt. Make the necessary adjustments to prevent this (make sure the file being encrypted is not key.txt or .exe

Stuck on Builder: Calling PyInstaller. Please wait...

Hi,
First of all, Amazing job on this builder!

Everything was going fine, except for one part, when i started building, the builder stays on "Builder: Calling PyInstaller. Please wait...", i tried waiting for over an hour but no progress happened. I would really appreciate the help :(
Here's the full log :
[2018-04-10 11:05:06]: Build Launched
[2018-04-10 11:05:06]: DEBUG Level: 1 - Low
[2018-04-10 11:05:06]: Builder: Checking configuration...
[2018-04-10 11:05:06]: Builder: Checking builder_language
[2018-04-10 11:05:06]: Builder: Checking pyinstaller_aes_key
[2018-04-10 11:05:06]: Builder: Checking icon_file
[2018-04-10 11:05:06]: Builder: Checking open_gui_on_login
[2018-04-10 11:05:06]: Builder: Checking gui_title
[2018-04-10 11:05:07]: Builder: Checking upx_dir
[2018-04-10 11:05:07]: Builder: Checking delete_shadow_copies
[2018-04-10 11:05:07]: Builder: Checking disable_task_manager
[2018-04-10 11:05:07]: Builder: Checking key_destruction_time
[2018-04-10 11:05:07]: Builder: Checking wallet_address
[2018-04-10 11:05:07]: Builder: Checking bitcoin_fee
[2018-04-10 11:05:07]: Builder: Checking encrypt_attached_drives
[2018-04-10 11:05:07]: Builder: Checking encrypt_user_home
[2018-04-10 11:05:07]: Builder: Checking max_file_size_to_encrypt
[2018-04-10 11:05:08]: Builder: Checking filetypes_to_encrypt
[2018-04-10 11:05:08]: Builder: Checking encrypted_file_extension
[2018-04-10 11:05:08]: Builder: Checking make_gui_resizeable
[2018-04-10 11:05:08]: Builder: Checking always_on_top
[2018-04-10 11:05:08]: Builder: Checking background_colour
[2018-04-10 11:05:08]: Builder: Checking heading_font_colour
[2018-04-10 11:05:08]: Builder: Checking primary_font_colour
[2018-04-10 11:05:08]: Builder: Checking secondary_font_colour
[2018-04-10 11:05:08]: Builder: Checking ransom_message
[2018-04-10 11:05:08]: Builder: Checking debug_level
[2018-04-10 11:05:08]: Builder: Validation successful
[2018-04-10 11:05:09]: Builder: Encryption will target attached drives and the user's home directory
[2018-04-10 11:05:09]: Builder: Creating binary runtime config at Resources/runtime.cfg
[2018-04-10 11:05:09]: Builder: Runtime config successfully written
[2018-04-10 11:05:09]: Builder: Creating PyInstaller SPEC file
[2018-04-10 11:05:09]: Spec: PyInstaller binary Icon file specified. Custom icon will be added
[2018-04-10 11:05:09]: Builder: (Warning): UPX path not specified. The PyInstaller binary will not be packed. It is recommended that UPX is used as this can reduce the binary size by several Megabytes
[2018-04-10 11:05:09]: Builder: SPEC file successfully created
[2018-04-10 11:05:09]: Builder: Calling PyInstaller. Please wait...

Thank you so much :)

Adjust Mutex catch to raise an error stating the file is corrupt

If an existing Mutex is detected, Crypter should instead raise an error Box stating that the "file" is corrupt. This can be done via wx, but this could be a little picky to do from it's location. Creating a separate class for only this error message is probably the best way around this problem. The error should look like this:

image

This was raised using the following code:

app = wx.App()
dlg = wx.MessageDialog(None, "Error", "The file is corrupt and cannot be opened", wx.OK | wx.ICON_ERROR)
dlg.ShowModal()
app.MainLoop

Failed to execute script Main

Hi, I built Crypter with your config_example.cfg config file. And I faced this problem when tried to execute the binary:

My environment:

  • Python x86 ( I read the previous issue of GhostYWP )
  • OS version: Windows 10 x64 - 10.0.19041 ( I built Crypter and tried to execute it on the same virtual machine)
  • The Python packages were installed successfully via pip.

Can you help me? Great project, btw ๐Ÿ‘


Edit: I used python 3.7.6 instead of 3.8.2. everything is okay now :D

Fatal Error !

Crypter.exe run but fatal error "main returned -1 "

[2017-10-13 15:41:40]: Build Launched
[2017-10-13 15:41:40]: DEBUG Level: 1 - Low
[2017-10-13 15:41:40]: Builder: Checking configuration...
[2017-10-13 15:41:40]: Builder: Checking builder_language
[2017-10-13 15:41:40]: Builder: Checking pyinstaller_aes_key
[2017-10-13 15:41:41]: Builder: Checking icon_file
[2017-10-13 15:41:41]: Builder: Checking upx_dir
[2017-10-13 15:41:41]: Builder: Checking encrypted_file_extension
[2017-10-13 15:41:41]: Builder: Checking wallet_address
[2017-10-13 15:41:41]: Builder: Checking bitcoin_fee
[2017-10-13 15:41:41]: Builder: Checking key_destruction_time
[2017-10-13 15:41:41]: Builder: Checking max_file_size_to_encrypt
[2017-10-13 15:41:41]: Builder: Checking filetypes_to_encrypt
[2017-10-13 15:41:41]: Builder: Checking ransom_message
[2017-10-13 15:41:42]: Builder: Checking debug_level
[2017-10-13 15:41:42]: Builder: Validation successful
[2017-10-13 15:41:42]: Builder: Creating binary runtime config at Resources/runtime.cfg
[2017-10-13 15:41:42]: Builder: Runtime config successfully written
[2017-10-13 15:41:42]: Builder: Creating PyInstaller SPEC file
[2017-10-13 15:41:42]: Spec: PyInstaller AES key provided. Script files will be encrypted
[2017-10-13 15:41:42]: Spec: PyInstaller binary Icon file specified. Custom icon will be added
[2017-10-13 15:41:42]: Spec: UPX Packer specified. UPX will be used
[2017-10-13 15:41:42]: Builder: SPEC file successfully created
[2017-10-13 15:41:42]: Builder: Calling PyInstaller. Please wait...
[2017-10-13 15:41:42]: PyInstaller: 46 INFO: PyInstaller: 3.1.1
[2017-10-13 15:41:42]: PyInstaller: 46 INFO: Python: 2.7.13
[2017-10-13 15:41:42]: PyInstaller: 46 INFO: Platform: Windows-10-10.0.15063
[2017-10-13 15:41:42]: PyInstaller: 93 INFO: UPX is available.
[2017-10-13 15:41:42]: PyInstaller: 93 INFO: Removing temporary files and cleaning cache in C:\Users\xxx\AppData\Roaming\pyinstaller
[2017-10-13 15:41:42]: PyInstaller: 125 INFO: Extending PYTHONPATH with paths
[2017-10-13 15:41:42]: PyInstaller: ['C:\Users\xxx\Desktop\Crypter-develop\Crypter-develop\Crypter',
[2017-10-13 15:41:42]: PyInstaller: 'C:\Users\xxx\Desktop\Crypter-develop\Crypter-develop\build\build']
[2017-10-13 15:41:42]: PyInstaller: 125 INFO: Will encrypt Python bytecode with key: 0123456789ANCDEF
[2017-10-13 15:41:42]: PyInstaller: 125 INFO: Adding dependencies on pyi_crypto.py module
[2017-10-13 15:41:42]: PyInstaller: 125 INFO: checking Analysis
[2017-10-13 15:41:42]: PyInstaller: 125 INFO: Building Analysis because out00-Analysis.toc is non existent
[2017-10-13 15:41:42]: PyInstaller: 125 INFO: Initializing module dependency graph...
[2017-10-13 15:41:42]: PyInstaller: 125 INFO: Initializing module graph hooks...
[2017-10-13 15:41:42]: PyInstaller: 202 INFO: Analyzing hidden import 'Crypto.Cipher._AES'
[2017-10-13 15:41:43]: PyInstaller: 296 INFO: running Analysis out00-Analysis.toc
[2017-10-13 15:41:43]: PyInstaller: 296 INFO: Adding Microsoft.VC90.CRT to dependent assemblies of final executable
[2017-10-13 15:41:43]: PyInstaller: required by C:\Python27\python.exe
[2017-10-13 15:41:43]: PyInstaller: 406 INFO: Found C:\WINDOWS\WinSxS\Manifests\x86_policy.9.0.microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.1_none_8550c6b5d18a9128.manifest
[2017-10-13 15:41:43]: PyInstaller: 406 INFO: Found C:\WINDOWS\WinSxS\Manifests\x86_policy.9.0.microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_f47e1bd6f6571810.manifest
[2017-10-13 15:41:43]: PyInstaller: 406 INFO: Found C:\WINDOWS\WinSxS\Manifests\x86_policy.9.0.microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_f480bfaef65491a5.manifest
[2017-10-13 15:41:43]: PyInstaller: 406 INFO: Found C:\WINDOWS\WinSxS\Manifests\x86_policy.9.0.microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.9279_none_f4810f46f6546fca.manifest
[2017-10-13 15:41:43]: PyInstaller: 625 INFO: Searching for assembly x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.9279_none ...
[2017-10-13 15:41:43]: PyInstaller: 625 INFO: Found manifest C:\WINDOWS\WinSxS\Manifests\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.9279_none_50939ec6bcb7c97c.manifest
[2017-10-13 15:41:43]: PyInstaller: 625 INFO: Searching for file msvcr90.dll
[2017-10-13 15:41:43]: PyInstaller: 625 INFO: Found file C:\WINDOWS\WinSxS\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.9279_none_50939ec6bcb7c97c\msvcr90.dll
[2017-10-13 15:41:43]: PyInstaller: 625 INFO: Searching for file msvcp90.dll
[2017-10-13 15:41:43]: PyInstaller: 625 INFO: Found file C:\WINDOWS\WinSxS\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.9279_none_50939ec6bcb7c97c\msvcp90.dll
[2017-10-13 15:41:43]: PyInstaller: 625 INFO: Searching for file msvcm90.dll
[2017-10-13 15:41:43]: PyInstaller: 625 INFO: Found file C:\WINDOWS\WinSxS\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.9279_none_50939ec6bcb7c97c\msvcm90.dll
[2017-10-13 15:41:43]: PyInstaller: 781 INFO: Found C:\WINDOWS\WinSxS\Manifests\x86_policy.9.0.microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.1_none_8550c6b5d18a9128.manifest
[2017-10-13 15:41:43]: PyInstaller: 781 INFO: Found C:\WINDOWS\WinSxS\Manifests\x86_policy.9.0.microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_f47e1bd6f6571810.manifest
[2017-10-13 15:41:43]: PyInstaller: 796 INFO: Found C:\WINDOWS\WinSxS\Manifests\x86_policy.9.0.microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_f480bfaef65491a5.manifest
[2017-10-13 15:41:43]: PyInstaller: 796 INFO: Found C:\WINDOWS\WinSxS\Manifests\x86_policy.9.0.microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.9279_none_f4810f46f6546fca.manifest
[2017-10-13 15:41:43]: PyInstaller: 796 INFO: Adding redirect Microsoft.VC90.CRT version (9, 0, 21022, 8) -> (9, 0, 30729, 9279)
[2017-10-13 15:41:43]: PyInstaller: 859 INFO: Analyzing ..\Crypter\Main.py
[2017-10-13 15:41:47]: PyInstaller: 4665 INFO: Processing pre-find module path hook distutils
[2017-10-13 15:41:47]: PyInstaller: 4859 INFO: Looking for import hooks ...
[2017-10-13 15:41:47]: PyInstaller: 4859 INFO: Processing hook hook-distutils.py
[2017-10-13 15:41:47]: PyInstaller: 4859 INFO: Processing hook hook-encodings.py
[2017-10-13 15:41:48]: PyInstaller: 5266 INFO: Processing hook hook-wx.lib.pubsub.py
[2017-10-13 15:41:48]: PyInstaller: 5610 INFO: Processing pre-safe import module hook _xmlplus
[2017-10-13 15:41:48]: PyInstaller: 5799 INFO: Processing hook hook-xml.py
[2017-10-13 15:41:49]: PyInstaller: 6368 INFO: Processing hook hook-httplib.py
[2017-10-13 15:41:49]: PyInstaller: 6382 INFO: Looking for ctypes DLLs
[2017-10-13 15:41:49]: PyInstaller: 6382 INFO: Analyzing run-time hooks ...
[2017-10-13 15:41:49]: PyInstaller: 6398 INFO: Looking for dynamic libraries
[2017-10-13 15:41:49]: PyInstaller: 7195 WARNING: Attempted to add Python module twice with different upper/lowercases: Crypto.Util._counter
[2017-10-13 15:41:49]: PyInstaller: 7195 WARNING: Attempted to add Python module twice with different upper/lowercases: Crypto.Cipher._DES
[2017-10-13 15:41:49]: PyInstaller: 7195 WARNING: Attempted to add Python module twice with different upper/lowercases: Crypto.Util.strxor
[2017-10-13 15:41:49]: PyInstaller: 7195 WARNING: Attempted to add Python module twice with different upper/lowercases: Crypto.Hash._SHA256
[2017-10-13 15:41:49]: PyInstaller: 7195 WARNING: Attempted to add Python module twice with different upper/lowercases: Crypto.Cipher._DES3
[2017-10-13 15:41:49]: PyInstaller: 7195 WARNING: Attempted to add Python module twice with different upper/lowercases: Crypto.Random.OSRNG.winrandom
[2017-10-13 15:41:49]: PyInstaller: 7195 WARNING: Attempted to add Python module twice with different upper/lowercases: Crypto.Cipher._AES
[2017-10-13 15:41:49]: PyInstaller: 7195 INFO: Looking for eggs
[2017-10-13 15:41:49]: PyInstaller: 7195 INFO: Using Python library C:\WINDOWS\system32\python27.dll
[2017-10-13 15:41:49]: PyInstaller: 7195 INFO: Found binding redirects:
[2017-10-13 15:41:49]: PyInstaller: [BindingRedirect(name=u'Microsoft.VC90.CRT', language=None, arch=u'x86', oldVersion=(9, 0, 21022, 8), newVersion=(9, 0, 30729, 9279), publicKeyToken=u'1fc8b3b9a1e18e3b')]
[2017-10-13 15:41:49]: PyInstaller: 7210 INFO: Warnings written to C:\Users\xxx\Desktop\Crypter-develop\Crypter-develop\build\build\Main\warnMain.txt
[2017-10-13 15:41:50]: PyInstaller: 7304 INFO: Appending 'datas' from .spec
[2017-10-13 15:41:50]: PyInstaller: 7304 INFO: checking PYZ
[2017-10-13 15:41:50]: PyInstaller: 7304 INFO: Building PYZ because out00-PYZ.toc is non existent
[2017-10-13 15:41:50]: PyInstaller: 7304 INFO: Building PYZ (ZlibArchive) C:\Users\xxx\Desktop\Crypter-develop\Crypter-develop\build\build\Main\out00-PYZ.pyz
[2017-10-13 15:41:50]: PyInstaller: 8007 INFO: checking PKG
[2017-10-13 15:41:50]: PyInstaller: 8007 INFO: Building PKG because out00-PKG.toc is non existent
[2017-10-13 15:41:50]: PyInstaller: 8007 INFO: Building PKG (CArchive) out00-PKG.pkg
[2017-10-13 15:41:50]: PyInstaller: 8023 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\msvcr90.dll
[2017-10-13 15:41:51]: PyInstaller: 8414 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\msvcp90.dll
[2017-10-13 15:41:51]: PyInstaller: 8664 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\msvcm90.dll
[2017-10-13 15:41:51]: PyInstaller: upx: C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\msvcm90.dll: CantPackException: .NET files are not yet supported
[2017-10-13 15:41:51]: PyInstaller: 8726 INFO: Redirecting Microsoft.VC90.CRT version (9, 0, 21022, 8) -> (9, 0, 30729, 9279)
[2017-10-13 15:41:51]: PyInstaller: 8726 INFO: Updating manifest in C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\python27.dll
[2017-10-13 15:41:51]: PyInstaller: 8726 INFO: Updating resource type 24 name 2 language 1033
[2017-10-13 15:41:51]: PyInstaller: 8743 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\python27.dll
[2017-10-13 15:41:53]: PyInstaller: 10320 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\unicodedata.pyd
[2017-10-13 15:41:53]: PyInstaller: 10743 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\bz2.pyd
[2017-10-13 15:41:53]: PyInstaller: 10820 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\crypto.util._counter.pyd
[2017-10-13 15:41:53]: PyInstaller: 10898 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\crypto.cipher._des.pyd
[2017-10-13 15:41:53]: PyInstaller: 10993 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\crypto.util.strxor.pyd
[2017-10-13 15:41:53]: PyInstaller: upx: C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\crypto.util.strxor.pyd: NotCompressibleException
[2017-10-13 15:41:53]: PyInstaller: 11054 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit_hashlib.pyd
[2017-10-13 15:41:54]: PyInstaller: 11726 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\crypto.hash._sha256.pyd
[2017-10-13 15:41:54]: PyInstaller: 11789 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\crypto.cipher._des3.pyd
[2017-10-13 15:41:54]: PyInstaller: 11882 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\crypto.random.osrng.winrandom.pyd
[2017-10-13 15:41:54]: PyInstaller: 11945 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\crypto.cipher._aes.pyd
[2017-10-13 15:41:54]: PyInstaller: 12023 INFO: Updating manifest in C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\wx.misc.pyd
[2017-10-13 15:41:54]: PyInstaller: 12023 INFO: Updating resource type 24 name 2 language 1033
[2017-10-13 15:41:54]: PyInstaller: 12039 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\wx.misc.pyd
[2017-10-13 15:41:55]: PyInstaller: 12460 INFO: Updating manifest in C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\wx.controls.pyd
[2017-10-13 15:41:55]: PyInstaller: 12460 INFO: Updating resource type 24 name 2 language 1033
[2017-10-13 15:41:55]: PyInstaller: 12476 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\wx.controls.pyd
[2017-10-13 15:41:55]: PyInstaller: 13070 INFO: Updating manifest in C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\wx.windows.pyd
[2017-10-13 15:41:55]: PyInstaller: 13070 INFO: Updating resource type 24 name 2 language 1033
[2017-10-13 15:41:55]: PyInstaller: 13070 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\wx.windows.pyd
[2017-10-13 15:41:56]: PyInstaller: 13539 INFO: Updating manifest in C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\wx.gdi.pyd
[2017-10-13 15:41:56]: PyInstaller: 13539 INFO: Updating resource type 24 name 2 language 1033
[2017-10-13 15:41:56]: PyInstaller: 13539 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\wx.gdi.pyd
[2017-10-13 15:41:56]: PyInstaller: 14132 INFO: Updating manifest in C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\wx.core.pyd
[2017-10-13 15:41:56]: PyInstaller: 14132 INFO: Updating resource type 24 name 2 language 1033
[2017-10-13 15:41:56]: PyInstaller: 14164 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\wx.core.pyd
[2017-10-13 15:41:57]: PyInstaller: 14929 INFO: Updating manifest in C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\wx._xrc.pyd
[2017-10-13 15:41:57]: PyInstaller: 14929 INFO: Updating resource type 24 name 2 language 1033
[2017-10-13 15:41:57]: PyInstaller: 14945 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\wx._xrc.pyd
[2017-10-13 15:41:57]: PyInstaller: 15085 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\pyexpat.pyd
[2017-10-13 15:41:58]: PyInstaller: 15233 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit_ssl.pyd
[2017-10-13 15:41:58]: PyInstaller: 16122 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit_socket.pyd
[2017-10-13 15:41:59]: PyInstaller: 16263 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\select.pyd
[2017-10-13 15:41:59]: PyInstaller: 16419 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\win32event.pyd
[2017-10-13 15:41:59]: PyInstaller: 16497 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\win32api.pyd
[2017-10-13 15:41:59]: PyInstaller: 16717 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\wxmsw30u_core_vc90.dll
[2017-10-13 15:42:04]: PyInstaller: 21909 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\wxmsw30u_adv_vc90.dll
[2017-10-13 15:42:05]: PyInstaller: 22542 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\wxbase30u_vc90.dll
[2017-10-13 15:42:06]: PyInstaller: 23714 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\wxmsw30u_html_vc90.dll
[2017-10-13 15:42:06]: PyInstaller: 24079 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\wxbase30u_net_vc90.dll
[2017-10-13 15:42:06]: PyInstaller: 24220 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\wxmsw30u_xrc_vc90.dll
[2017-10-13 15:42:07]: PyInstaller: 24605 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\wxbase30u_xml_vc90.dll
[2017-10-13 15:42:07]: PyInstaller: 24730 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\pywintypes27.dll
[2017-10-13 15:42:07]: PyInstaller: 24839 INFO: Redirecting Microsoft.VC90.CRT version (9, 0, 21022, 8) -> (9, 0, 30729, 9279)
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Bootloader C:\Python27\lib\site-packages\pyinstaller-3.1.1-py2.7.egg\PyInstaller\bootloader\Windows-32bit\runw.exe
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: checking EXE
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Building EXE because out00-EXE.toc is non existent
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Building EXE from out00-EXE.toc
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: SRCPATH [('C:\pdf.ico', None)]
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Updating icons from ['C:\pdf.ico'] to c:\users\xxx\appdata\local\temp\tmp7k_hds
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_GROUP_ICON 0 resource with 384 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 1 resource with 26184 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 2 resource with 14593 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 3 resource with 6048 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 4 resource with 1128 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 5 resource with 2440 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 6 resource with 4264 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 7 resource with 9640 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 8 resource with 16936 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 9 resource with 21640 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 10 resource with 38056 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 11 resource with 67624 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 12 resource with 1384 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 13 resource with 1736 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 14 resource with 2216 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 15 resource with 3752 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 16 resource with 5672 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 17 resource with 7112 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 18 resource with 11432 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 19 resource with 19496 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 20 resource with 296 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 21 resource with 488 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 22 resource with 744 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 23 resource with 1640 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 24 resource with 2664 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 25 resource with 3560 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 26 resource with 5864 bytes
[2017-10-13 15:42:08]: PyInstaller: 25605 INFO: Writing RT_ICON 27 resource with 10344 bytes
[2017-10-13 15:42:08]: PyInstaller: 25620 INFO: Executing - C:\upx394w\upx --lzma -q C:\Users\xxxx\AppData\Roaming\pyinstaller\bincache01_py27_32bit\tmp7k_hds
[2017-10-13 15:42:08]: PyInstaller: 25761 INFO: Appending archive to EXE C:\Users\xxx\Desktop\Crypter-develop\Crypter-develop\build\dist\Main.exe
[2017-10-13 15:42:08]: Build successful
[2017-10-13 15:42:08]: Crypter exe written to 'C:\Users\xxxx\Desktop\Crypter-develop\Crypter-develop\bin\Crypter.exe'

key and decryption tools

Hi
local pc key (key.txt) and decryption tool local pc :))
how to key + pc name + ip adres sending mail, ftp, websites scripts

Create simple GUI for building Crypter

Currently the Build process involves modifying a config txt file with a limited number of options, and then running Build.py which provides CLI output on the build progress.

This should be improved by creating a small GUI where the options can be easily edited. A button should also exist to launch the build and the progress should be displayed in a console-style text box.

Help decrypting files

The program left some files encrypted, I have the key but dont know how to decrypt those files, anyway to include the files in the list of encrypted files? Or make a standalone decryptor? Please I will lose alot of office files

Decryption does NOT use the decryption key inputted by the user

It has been observed that the decryption process does not actually use the decryption key specified by the user using the "decrypt files" prompt, but instead uses the contents of key.txt and simply ignores whatever the users input is. This is left over from the original decryption method and should be addressed. This is a relatively straightforward fix.

Want to encrypt all Data on Computer

Hello
Thank you for releasing this good piece of software
I have a Feature suggestion, to disable Crypter GUI closing and after the decryption finished, it exits.
Thanks

Encryption of attached drives

As requested by a number of users, add functionality to encrypt attached drives, such as additional internal drives, attached external drives, USBs and network shares.

There should probably also be a hierarchy here to determine which files are encrypted first:

  1. Network shares
  2. Attached drvies (USBs, other internals etc.)
  3. C:\ directories

C2 Infrastructure/Mechanism

Out of interest. Will you be providing a C2 mechanism? As in, will you add capability to the ransomware to connect to a remote host where keys would be potentially stored? Be it deep web or otherwise.

Build process not creating key.txt

Hey sithis993,

Thanks for the project! I have been testing recently, however, I have run into a challenge with which I need some assistance.

Environment:
-OS: 2 different Windows 10 Pro virtual machines
-Running crypter distributable 2.41
-All prerequisites installed in the order specified within the Readme file

I extracted the program on the first Windows 10 Pro machine to C:\tmp\Crypter_distributable_2.41 and successfully created the .exe and key.txt file. However, when attempting to duplicate the process subsequent times on the same machine or on the second Windows 10 Pro machine, it does not create the key.txt file.

Any thoughts? Thx.

You cannot execute this application

i have this error in my virtualmachine with windows 10 x86.
https://prnt.sc/s7p2gy

what is wrong?
This is Crypter Version 3.0 (latest release)

here my config file

{
"builder_language": "English",
"pyinstaller_aes_key": "bRADMAyx8KAB2Aeu",
"icon_file": "C:\Users\CENSURED\Desktop\Crypter-master\build\Crypter-3.0\CrypterBuilder\Resources\pdf.ico",
"open_gui_on_login": true,
"gui_title": "TitleWindow",
"upx_dir": "C:\Users\CENSURED\Desktop\Crypter-master\bin\upx-3.96-win64",
"delete_shadow_copies": true,
"disable_task_manager": false,
"key_destruction_time": "86400",
"wallet_address": "CENSURED",
"bitcoin_fee": "1",
"encrypt_attached_drives": true,
"encrypt_user_home": true,
"max_file_size_to_encrypt": "50",
"filetypes_to_encrypt": [
"txt",
"exe",
"rar"
],
"encrypted_file_extension": "locked",
"make_gui_resizeable": true,
"always_on_top": true,
"background_colour": [
177,
7,
14,
255
],
"heading_font_colour": [
0,
0,
0,
255
],
"primary_font_colour": [
255,
255,
0,
255
],
"secondary_font_colour": [
255,
255,
255,
255
],
"ransom_message": "111\n11\n1\n11\n111",
"debug_level": "3 - High"
}

General Errors

Hello
Sorry I got Paypal Problems so I couldn't donate you something I will pay you as soon my problems away. I tested the crypter on a VM and Disable Task Manager didnt work am I doing something wrong ?
Thanks

Extend list of encrypted Files

Currently the default set of extensions/filetypes that are encrypted is quite limited. These need to be expanded upon. The current is set is very small:

  • sln, jpg, png, mp4, avi, mkv, doc, docx, txt, pdf, mp3, exe, msi, php tgz, zip, rar

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.