I get many search hits by people looking for "crack labview vi's" or "crack vi password labview" or "labview password diagram crack"... Well folks here it is. Ok, let's get one thing straight, I'm using brute force method which means if the password is 5 characters and under then it will be found sooner or later under a few hours. Anything higher than this and it just isn't practical - it just takes too long. I am working on a dictionary method right now which makes more sense.
The basic principle behind brute force method is to try every possible combination until you get in. The characters I use are the following: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890`~!@#$%^&*()_+=-{}|[]\:";'<>?,./ I'm also checking for the space character. This list can be cut down to size if you know certain things a bout your password already. If it does not contain numbers or strange characters then they can be removed from the list. Also note that this version does not have any bells and whistles. For example if you want to remove the characters that are checked then you have to manually remove them from the array on the front panel of the passwordcrack.vi All of this can be made user freindly but I just want to get the techniqe across right now.
As you can see from the main diagram, I am opening a reference to the password protected VI and I keep it open for the duration of the cracking. The method I am calling is set lock state. This is using an Invoke Node from the application control pallete. The method has several options, basicaly all we want is to unlock the VI so we set the lockState to Not Locked and feed in the required password as a string. By the way, you can also use this method to password-protect a lot of VI's quickly with this method instead of using the LabVIEW dialog box. All you would need to do is feed in a list of passwords and vi references.
The next important thing is to check if the password we are using worked. We check the error cluster for this. A success will give us no error and if inverted will tell the while loop to stop. I have also added an abort button in case you want to break out of it before it finishes. A usefull feature to add in the future could be the ability to save where you are and continue where you left off if aborted.
Below the invoke node we see four vi's. These are all identical and have their excecution property set to be re-entrant. This allows us to use the same code four times and each one will maintain its own data space.
The diagram above shows what's inside the character generator vi's. All I am doing is taking in the array of characters that I want to use in my password checking and indexing them one by one to make up a spot on the password.
When this vi is first called it will start indexing th array of characters at index 0. The index is then incremented by one and passed into a shift register so that the next time it is executed it will index the next character out. This will continue until all the characters (95 of them) have been indexed. Once the index exceeds 94, this means it time to start at index 0 again and start the process all over again.
Now, these vi's will be cascaded so we need a method to tell the next vi to increment the index by one only if this vi has gone through all the characters. For this we use a boolean indicator that triggers when all chars have been indexed. This in turn is fed to the index? input. As seen below, the index input controls a case structure that disables the code when false.
If you go back to the main vi you will see that I am using four of the character indexing vi's. This is because I want to check the password using 4-characters. If you require more characters then just add (cascade) more of these sub-vi's.
If you find any bugs or have any suggestions for speed improvements on this set of vi's then please email me directly or post your thoughts on the discussion boards. I will update this code with your suggestions and give you credit.
LV Version 6.0 VI's: passwordcrack.zip
Support or questions on this code should be done via the forums.