Last active
October 1, 2021 05:11
-
-
Save DinisCruz/6212171 to your computer and use it in GitHub Desktop.
H2 script - Generate Small MD5 Rainbow Table
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| var topPanel = "{name}".popupWindow(700,200); | |
| //var topPanel = panel.clear().add_Panel(); | |
| "Loading data".info(); | |
| var baseFolder = @"C:\Users\o2\AppData\Roaming\OWASP_O2_Platform_5.3\8_12_2013\MD5_Hashes"; | |
| var md5HashesFile = baseFolder.pathCombine("(10x numbers - 2x length) M5_for_10_chars_with_2_depth.txt"); | |
| var md5Hashes = md5HashesFile.fileContents(); | |
| var mappings = new Dictionary<string,string>(); | |
| foreach(var line in md5Hashes.lines()) | |
| { | |
| var splittedline = line.split("\t"); | |
| mappings.Add(splittedline[0], splittedline[1]); | |
| } | |
| "There were {0} hashes loaded".info(md5Hashes.size()); | |
| var result = topPanel.add_Label("(click Go)").fill().font_bold().font("Arial",40).text_Center(); | |
| Action<string> resolveHash = | |
| (md5Hash)=> { | |
| var value = mappings.value(md5Hash); | |
| if(value.isNull()) | |
| result.set_Text("(no match)").pink(); | |
| else | |
| result.set_Text(value).green(); | |
| }; | |
| topPanel.insert_Above(5); | |
| topPanel.insert_Above(25) | |
| .add_LabelAndTextAndButton("Hash to solve", // label text | |
| "FBD7939D674997CDB4692D34DE8633C4", // initial value | |
| "Go", // button text | |
| resolveHash); // onButtonClick callback | |
| return "done"; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| //var topPanel = "{name}".popupWindow(700,400); | |
| var topPanel = panel.clear().add_Panel(); | |
| //var rainbowTable = new Dictionary<string,string>(); | |
| var values = new List<string>(); | |
| var md5RainbowTable = new StringBuilder(); | |
| Func<string,int, string> appendPayload = null; // only this is needed here, since it is the only Lambda that is recursive | |
| Func<string> generatePayloads = null; | |
| Func<string> generateMd5s = null; | |
| Func<string> saveMD5s = null; | |
| var targetFolder = "MD5_Hashes".tempDir(false); | |
| var targetChars = "01234567890"; // max depth in 32bit process of 6 | |
| //var targetChars = "01234567890qwertyuiopasdfghjklzxcvbnm"; // max depth in 32bit process of 4 | |
| var maxDepth = 6; | |
| appendPayload = | |
| (seed, depth)=>{ | |
| if (depth <1) | |
| return seed; | |
| foreach(var @char in targetChars) | |
| { | |
| var newValue = "{0}{1}".format(seed, @char); | |
| values.Add(appendPayload(newValue, depth -1)); | |
| } | |
| //GC.Collect(); | |
| return seed; | |
| }; | |
| generatePayloads = | |
| ()=>{ | |
| var start = DateTime.Now; | |
| appendPayload("",maxDepth); | |
| return (DateTime.Now - start).TotalSeconds.str(); | |
| }; | |
| generateMd5s = | |
| ()=>{ | |
| var start = DateTime.Now; | |
| foreach(var value in values) | |
| md5RainbowTable.Append("{0}\t{1}\r\n".format(value.md5Hash(), value)); | |
| return (DateTime.Now - start).TotalSeconds.str(); | |
| }; | |
| saveMD5s = | |
| ()=>{ | |
| var start = DateTime.Now; | |
| var fileName = targetFolder.pathCombine("M5_for_{0}_chars_with_{1}_depth.txt".format(targetChars.size(), maxDepth)); | |
| md5RainbowTable.str().saveAs(fileName); | |
| "{0} payloads saved to: {1}".info(values.size(), fileName); | |
| return (DateTime.Now - start).TotalSeconds.str(); | |
| }; | |
| var duration_GeneratePayloads = generatePayloads().info(); | |
| var duration_generateMd5s = generateMd5s().info(); | |
| var duration_saveMD5s = saveMD5s().info(); | |
| targetFolder.startProcess(); | |
| return "Completed: for {0} values, the Generation took {1}s the MD5s took {2}s, the save took {3}s".info( | |
| values.size(), | |
| duration_GeneratePayloads, | |
| duration_generateMd5s, | |
| duration_saveMD5s); | |
| return values; | |
| //rainbowTable.Append("{0}\t{1}\n".format(value.md5Hash(), value)); | |
| //return rainbowTable.str(); | |
| //using System.Text; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment