Giter Site home page Giter Site logo

samrocketman / ekeyfinder Goto Github PK

View Code? Open in Web Editor NEW
59.0 14.0 14.0 742 KB

Archive of my sourceforge project Enchanted Keyfinder. Software key retrieval on Windows.

Home Page: http://ekeyfinder.sourceforge.net/

License: GNU General Public License v3.0

Python 0.54% Pascal 99.46%
keyfinder mjb-kf lazarus delphi pascal sourceforge tango registry

ekeyfinder's Introduction

Enchanted Keyfinder

This is a migration of the enchanted keyfinder source code base from SourceForge. This is purely meant as an archive of my sourceforge project. Enchanted Keyfinder was born out of the will to keep an open source project open for anybody to study. What follows is original excerpts from the ekeyfinder website. There was a small effort to port the Pascal code base to Lazarus, an open source Free Pascal IDE, however that effort was ultimately abandoned.

About from the website

Enchanted Keyfinder is a Magical Jelly Bean Keyfinder (MJB KF) fork from the open source version of MJB KF. It is a utility that retrieves the product key used to install Windows from your registry or from an unbootable Windows installation. It works on Windows 9X, ME, NT/2K/XP, and Vista/Win7 and for other software.

Enchanted Keyfinder is written in Pascal and compiles in: Delphi 7, Borland Developer Studio 2006, DS Turbo Delphi 2006, Delphi 2007. It may compile in other versions of Delphi.

Features

This is a summary of the features and goals currently outlined in the project. This is something to keep the EK team on track but also so that you, as a user, understand where we wish to take this project. The first stable release, v0.2, will be released soon. You can read below and see what is currently missing from the stable version. The changes listed below the General Feature List are changes which have been made since Magical Jelly Bean Keyfinder 2.0.8.

General Feature List

  • Office 2010, Office 2007, Vista, & Windows 7 support.
  • MS Office 2010 key recovery is experimental.
  • Change Windows Registration information and Product Key.
  • Portable, settings saved in an INI file.
  • An optional config file for software serial lookups.
  • Export found keys to csv, html, ini, or txt.
  • Load a registry hive backup.
  • Can check for program and config file updates.
  • Command line options.
  • No software installation.

What is currently stable in the EK v0.1 Betas? (v0.1)

  • Retrieve product key for MS Office 2010.
  • Change the Windows XP Product Key of a Windows Installation.
  • All settings are now saved and loaded from an INI file. I had PortableApps.com in mind when I did this because I enjoy their releases.
  • Saving and loading of Font Settings are now done correctly.
  • The File > Refresh menu entry which reloads the keyfinder.cfg file and then displays the newly detected keys.
  • Graphics and logos of the program (using the Tango Icon Library).
  • The list of detected keys (no more blank entries). Also the program doesn't fail in Wine on Linux from invalid data types when reading the registry. Add config setting for displaying blank keys.
  • Software updates. They are implemented for both unstable and stable versions of EK. To check for updates you click Help > Check for Updates in the menu. This is the only time the program will connect to the internet.
  • User defined keyfinder.cfg file.
  • Path to config file setting has been implemented. Check out the documentation in keyfinder.ini.
  • Documentation - This has been finished for the stable release. The wiki documentation has been written and I can export it to the mediawiki xml schema. I wrote a python script which parses the mediawiki xml schema and generates html files as output. Then I can compile the generated html files into a chm format all automated. It took me 5 or 6 hours to create but from now on generating documentation will take seconds for me across all of my projects.

The logs settings are "stable" that is to say they don't do anything (they didn't in MJBKF 2.0.8) and they won't for the first stable release of EK v0.2.

What is unstable but will be finished for EK v0.2 Stable? (v0.2)

  • keyfinder.cfg needs to be reorganized into a standard format.
  • Once keyfinder.cfg is standardized then we need to update exporting keys to match it. This way when keys are exported the found serials are all uniform.

What are my current plans for the next unstable release? (v0.3)

  • Remote registry connection. This is something which has already been in the works since MJBKF 2.0.8. The dialogs are somewhat there but the implementation isn't. I want to start to get this working because it could be a useful feature for a sys-admin. After that I probably won't do too much more because I want ekeyfinder to remain a small and simple program. I want it to do one thing, and do it well... look up keys in the registry.
  • Implement logging.
  • Exporting to other formats?
  • More serials!
  • Possibly recovering wifi keys from connected networks?
  • Any request that a user may have which would better enable the program to do its original intent of functionality. Go ahead and submit a request if you have an idea (even if the idea is incomplete).

Beyond?

I want to abstract the underlying code away from the UI. The previous developers did not do this very well. Right now it is very integrated. Once I have the code abstracted away then I can begin work on a Linux edition of Enchanted Keyfinder which is native to the Linux OS (and possibly a Mac native). I was thinking of doing it in Kylix but apparently it's difficult to get a hold of so I will check out other Pascal IDEs such as Lazarus.

History

Magical Jellybean Keyfinder 1.51

MJB KF 1.51 was closed source. It was basically a self extracting RAR file. It extracted to the Windows %TEMP% folder four files:

  1. findkey.exe - A Delphi/Pascal GUI front end which displayed text files from output of other programs.
  2. chgxp.vbs - VBScript which changed the Windows XP product key.
  3. xpkey.exe - A cli executable which found/decoded Windows XP and below key to plain txt file.
  4. officekey.exe - same as xpkey.exe but for Office 2003 and below.

Magical Jellybean Keyfinder 2.0

MJB KF became open source in MJB KF 2.0 under the GNU GPLv3 license. It remained open source until last year (2010). The last open source version is 2.0.8. Recover Keys bought the project and closed the source which shut the community project down. The current MJB KF is the "less feature rich" product compared to their flagship product. They took out many of the keyfinder.cfg entries with the intention to make it view fewer software keys. Entries in the keyfinder.cfg which were built by community members of MJB KF when it was open source. EK v0.1 was born from the original open source MJB KF 2.0.8.

Enchanted Keyfinder vs. Magical Jellybean Keyfinder open source

Here are some features which EK does better than MJB KF open source.

  • It works for Office 2010
  • Load Hive is more reliable
  • Documentation is actually existent
  • Live updates of the software and not just a web link
  • Able to change the Windows XP product key similar to MJB KF 1.51
  • Several other minor bug fixes

Also the EK keyfinder.cfg is built from the original community versions of MJB KF keyfinder.cfg. Some entries have been added to that and eventually the whole file will be reformatted to match a standard. There are even more plans for more features which will aide it with recovering software keys. There's more that it can do from the svn repository but that's what the current unstable releases can do (EK v0.1). The Enchanted Keyfinder project isn't attempting to copy the original MJB KF, we're trying to evolve it into something more with our own set of features and goals in mind.

ekeyfinder's People

Contributors

assarbad avatar m4thfr34k avatar samrocketman avatar versionboy 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

Watchers

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

ekeyfinder's Issues

Algorithm to decode Windows keys

  • GetXPKey / GetVistaKey - Get key for a given operating system. It calls GetMSDPID3.
  • GetMSDPID3 - Get Microsoft Digital Product Identification number. It calls DecodeMSKey.
  • DecodeMSKey - decodes MS product key.

ekeyfinder/Main.pas

Lines 1961 to 2006 in d8e5904

function TfrmMain.DecodeMSKey(const HexSrc: array of byte; const ID: boolean): string;
const
Digits: array[0..23] of char =
('B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'M', 'P', 'Q', 'R', 'T',
'V', 'W', 'X', 'Y', '2', '3', '4', '6', '7', '8', '9');
iDecodedLen: integer = 29; // Length of Decoded Product Key
iEncodedLen: integer = 15;
// Length of Encoded Product Key in Bytes (An total of 30 in chars)
var
HexDigitalPID: array of cardinal;
Des: array[0..30] of char; // Length of Decoded Product Key + 1
iStartOffset: integer;
iEndOffset: integer;
I: integer;
N: integer;
HN: cardinal;
Value: cardinal;
begin
if ID then
iStartOffset := $328
else
iStartOffset := $34;
iEndOffset := iStartOffset + 15;
Result := '';
SetLength(HexDigitalPID, iDecodedLen);
for I := iStartOffset to iEndOffset do
HexDigitalPID[I - iStartOffSet] := HexSrc[I];
for I := iDecodedLen - 1 downto 0 do
if (((I + 1) mod 6) = 0) then
Des[I] := '-'
else
begin
HN := 0;
for N := iEncodedLen - 1 downto 0 do
begin
Value := (HN shl 8) or HexDigitalPID[N];
HexDigitalPID[N] := Value div 24;
HN := Value mod 24;
end;
Des[I] := Digits[HN];
end;
Des[iDecodedLen] := Chr(0);
Result := StrPas(Des);
end; // TfrmMain.DecodeMSKey

Change Product Key in Windows Vista and Windows 7

There is a VBScript built into Windows Vista and 7 which allows command line interaction with changing the product key.
C:\WINDOWS\system32\slmgr.vbs

More information about it:
http://technet.microsoft.com/en-us/library/ff793433.aspx

I think we should use portions of it to change the product key similar to how the product key is changed in Windows XP within keyfinder (also uses VBScript).

Though it might be wiser to just reference the original VBScript without keyfinder creating one at all.

Migrated from https://sourceforge.net/p/ekeyfinder/feature-requests/5/

CorelDraw Suite x4

The product key on my system is located in HKEY_USERS\...a user's profile...\Software\Corel\CorelDRAW\14.0\CorelReg\DR14=ConfirmationCode

By the looks of it, you need a way to tell the program to search each user profile for the given key until a hit is found.

Migrated from https://sourceforge.net/p/ekeyfinder/bugs/10/

Add support for Adobe CS3+

Add serial support for the newer editions of Adobe CS (CS3-CS5)

Adobe Creative Suite 3 and higher store the key within an XML file called application.xml rather than within the registry (took me hours to figure this out).

The XML file could be within (search for application.xml):
\Program Files\Adobe
\Program Files\Common Files\Adobe
\Program Files (x86)\Adobe
\Program Files (x86)\Common Files\Adobe

The key can then be decoded using the algorithm. I have to figure out a way in which different CS versions can be detected (Using the registry or some other method within the XML files).

Anyway this is a big task so if anyone wants to take it on o.0... if not, I'll get to it eventually.

Migrated from https://sourceforge.net/p/ekeyfinder/feature-requests/4/

XML result

In order to use ekeyfinder with OCS Inventory NG software (Agent for Windows), it would be good to have a new command line option in order to save in a xml result file like this :

<EKEYFINDER>
<VERSION>Microsoft Office XP Standard</VERSION>
<KEY>BBBBB-DDDDD-88888-KKKKK-55555</KEY>
<TYPE>Volume License</TYPE>
</EKEYFINDER>

Migrated from https://sourceforge.net/p/ekeyfinder/feature-requests/12/

Algorithm to decode Adobe keys

Perhaps document in the README the Adobe algorithm.

ekeyfinder/Main.pas

Lines 2893 to 2932 in d8e5904

function TfrmMain.DecodeAdobeKey(const sAdobeEncryptedKey: string): string;
// Decode Adobe Key Encryption. A simple substitution cipher.
// Converted from Dave Hope's original C++ version
// Copyright (C) 2008 VersionBoy
// Version 1.0
type
TAdobeCipher = array[1..24] of string;
const
// It basically represents the decrypted versions of each char in the key.
// aaaa-bbbb-cccc-dddd-eeee-ffff
AdobeCipher: TAdobeCipher =
// Section A.
('0000000001', '5038647192', '1456053789', '2604371895',
// Section B.
'4753896210', '8145962073', '0319728564', '7901235846',
// Section C.
'7901235846', '0319728564', '8145962073', '4753896210',
// Section D.
'2604371895', '1426053789', '5038647192', '3267408951',
// Section E.
'5038647192', '2604371895', '8145962073', '7901235846',
// Section F.
'3267408951', '1426053789', '4753896210', '0319728564');
var
sAdobeDecryptedKey: string;
i: integer;
begin
// Ensure we're dealing with a key we can support:
if (sAdobeEncryptedKey <> '') and (IsNumeric(sAdobeEncryptedKey, True)) and (Length(sAdobeEncryptedKey) = 24) then
begin
sAdobeDecryptedKey := sAdobeEncryptedKey; // Set length of sAdobeDecryptedKey
// Iterate through each char in the key.
for i := 1 to Length(sAdobeEncryptedKey) do
sAdobeDecryptedKey[i] := adobeCipher[i][(StrToInt(sAdobeDecryptedKey[i]) + 1)];
FormatAdobeKey(sAdobeDecryptedKey);
end
else // We don't understand the format we're given, return empty string.
sAdobeDecryptedKey := 'corrupt serial';
Result := sAdobeDecryptedKey;
end;

Skips application when first key is not found

If the first registry key of a .cfg file's application entry is not present or is blank, then it doesn't display anything at all for that product. Just in case, I even tried changing the "ShowBlankSerials" option; but, it didn't make a difference.

For example, the current "Nero 7" entry looks in "HKEY_LOCAL_MACHINE\SOFTWARE\Ahead\Installation\Families\Nero 7\Info" for the following keys (in the listed order): User, Company, Version, and Serial7_*.

The presence or absence of the other three keys makes no difference; but, if the 'User' key is blank or not in the registry at all, then Nero 7 doesn't show up in the results.

Since the serial is supposed to be the first key searched for (according to your .cfg file standard), I realize this may be intentional behavior. If so, then (as you've mentioned) a bunch of entries need to be re-formatted. Until that happens (and even after), perhaps there needs to be an option that lists an application as long as any one of its keys exists (even when blank).

Migrated from https://sourceforge.net/p/ekeyfinder/bugs/11/

More keyfinder.cfg

I randomly found these on the internet. Keys for different games and software. After keyfinder.cfg is updated to a standard format we should check these to see if there's any we don't have and update the cfg.

{HKEY_CURRENT_USER,"Software\\Valve\\CounterStrike\\Settings","CDKey","Counter-Strike (Retail)",NULL,NULL},
{HKEY_CURRENT_USER,"Software\\Eugen Systems\\The Gladiators","RegNumber","The Gladiators",NULL,NULL},
{HKEY_CURRENT_USER,"Software\\Valve\\Gunman\\Settings","Key","Gunman Chronicles",NULL,NULL},
{HKEY_CURRENT_USER,"Software\\Valve\\Half-Life\\Settings","Key","Half-Life",NULL,NULL},
{HKEY_CURRENT_USER,"Software\\JoWooD\\InstalledGames\\IG2","prvkey","Industry Giant 2",NULL,NULL},
{HKEY_CURRENT_USER,"Software\\3d0\\Status","CustomerNumber","Legends of Might and Magic",NULL,NULL},
{HKEY_CURRENT_USER,"Software\\Silver Style Entertainment\\Soldiers Of Anarchy\\Settings","CDKey","Soldiers Of Anarchy",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion","ProductId","Microsoft Windows Product ID",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Unreal Technology\\Installed Apps\\UT2003","CDKey","Unreal Tournament 2003",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Unreal Technology\\Installed Apps\\UT2004","CDKey","Unreal Tournament 2004",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\IGI 2 Retail","CDKey","IGI 2: Covert Strike",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Electronic Arts\\EA Distribution\\Freedom Force\\ergc","","Freedom Force",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Electronic Arts\\EA GAMES\\Battlefield 1942\\ergc","","Battlefield 1942",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Electronic Arts\\EA GAMES\\Battlefield 1942 The Road to Rome\\ergc","","Battlefield 1942 (Road To Rome)",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Electronic Arts\\EA GAMES\\Battlefield 1942 Secret Weapons of WWII\\ergc","","Battlefield 1942 (Secret Weapons of WWII)",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Electronic Arts\\EA GAMES\\Battlefield Vietnam\\ergc","","Battlefield Vietnam",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Electronic Arts\\EA GAMES\\Black and White\\ergc","","Black and White",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Electronic Arts\\EA GAMES\\Command and Conquer Generals Zero Hour\\ergc","","Command and Conquer: Generals (Zero Hour)",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Electronic Arts\\EA GAMES\\James Bond 007 Nightfire\\ergc","","James Bond 007: Nightfire",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Electronic Arts\\EA GAMES\\Generals\\ergc","","Command and Conquer: Generals",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Electronic Arts\\EA GAMES\\Global Operations\\ergc","","Global Operations",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Electronic Arts\\EA GAMES\\Medal of Honor Allied Assault\\ergc","","Medal of Honor: Allied Assault",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Electronic Arts\\EA GAMES\\Medal of Honor Allied Assault Breakthrough\\ergc","","Medal of Honor: Allied Assault: Breakthrough",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Electronic Arts\\EA GAMES\\Medal of Honor Allied Assault Spearhead\\ergc","","Medal of Honor: Allied Assault: Spearhead",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Electronic Arts\\EA GAMES\\Need For Speed Hot Pursuit 2","ergc","Need For Speed Hot Pursuit 2",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Electronic Arts\\EA GAMES\\Need For Speed Underground\\ergc","","Need For Speed: Underground",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Electronic Arts\\EA GAMES\\Shogun Total War - Warlord Edition\\ergc","","Shogun: Total War: Warlord Edition",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Electronic Arts\\EA Sports\\FIFA 2002\\ergc","","FIFA 2002",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Electronic Arts\\EA Sports\\FIFA 2003\\ergc","","FIFA 2003",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Electronic Arts\\EA Sports\\NHL 2002\\ergc","","NHL 2002",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Electronic Arts\\EA Sports\\NHL 2003\\ergc","","NHL 2003",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Electronic Arts\\EA Sports\\Nascar Racing 2002\\ergc","","Nascar Racing 2002",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Electronic Arts\\EA Sports\\Nascar Racing 2003\\ergc","","Nascar Racing 2003",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Red Storm Entertainment\\RAVENSHIELD","CDKey","Rainbow Six III RavenShield",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Westwood\\Tiberian Sun","Serial","Command and Conquer: Tiberian Sun",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Westwood\\Red Alert","Serial","Command and Conquer: Red Alert",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Westwood\\Red Alert 2","Serial","Command and Conquer: Red Alert 2",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Westwood\\NOX","Serial","NOX",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Techland\\Chrome","SerialNumber","Chrome",NULL,NULL},
{HKEY_LOCAL_MACHINE,"SOFTWARE\\Electronic Arts\\EA Games\\Battlefield 2\\ergc","","Battlefield 2",NULL,NULL},
{HKEY_LOCAL_MACHINE,"SOFTWARE\\Electronic Arts\\EA GAMES\\Battlefield 2142\\ergc","","Battlefield 2142",NULL,NULL},
{HKEY_LOCAL_MACHINE,"SOFTWARE\\Activision\\Call of Duty 4", "codkey", "CoD 4",NULL,NULL},
{HKEY_LOCAL_MACHINE,"SOFTWARE\\Activision\\Call of Duty WAW", "codkey", "CoD WaW",NULL,NULL},
{HKEY_LOCAL_MACHINE,"SOFTWARE\\Electronic Arts\\Electronic Arts\\Crysis\\ergc","","Crysis",NULL,NULL},
{HKEY_LOCAL_MACHINE,"SOFTWARE\\Electronic Arts\\Electronic Arts\\The Battle for Middle-earth II\\ergc","","LotR BFME2",NULL,NULL},
{HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion", "ProductID", "Microsoft Product ID",NULL,NULL},,
{HKEY_LOCAL_MACHINE,"SOFTWARE\\Unreal Technology\\Installed Apps\\UT2004","","CDKey", "Unreal Tournament 2009",NULL,NULL},
{HKEY_LOCAL_MACHINE,"SOFTWARE\\Electronic Arts\\EA Games\\SPORE(TM)\\ergc","","Spore",NULL,NULL},
{HKEY_LOCAL_MACHINE,"Software\\Electronic Arts\\EA GAMES\\Battlefield 1942\\ergc","","Battlefield 1942",NULL,NULL},

Migrated from https://sourceforge.net/p/ekeyfinder/feature-requests/10/

User-edited file in addition to official file

scriptdaemon wrote:

Also, another thing I wanted to discuss with you. Since our apps should backup user data, I was curious if you could have separate files for software registry keys. One file for user additions, and the other still being the officially updated file. As the user can add his or her own programs into the file, he or she might want to have that data backed up with the rest of his or her settings. In doing this, whenever there is an officially updated key file, the user added software would be deleted.

From http://portableapps.com/node/26332#post-168535

Abandoned unless someone is willing to port to Lazarus

I no longer have delphi and do not plan to continue development. However, if someone has the will to port the code base to Lazarus I may be willing to continue working on it.

Preferably with a Makefile and lazbuild.

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.