- The password tamper check reads a few hundred bytes from the already opened VI resource (LabVIEW needs to open and load that file into memory no matter what) and then does some MD5 and possibly other hash checks on it, and that costs a LOT less time than walking the linked list even a single time for any non trivial project.
- Typically the passwords are stored at 90h and A0h. ( It seems to me like that) Anyway, once i replaced the data - to be more clear 1. I created a vi with no passwords. I opened it in HEX editor 3. I did a comparison with same vi (password protected) using HEX mode 4. Just replace the code with the previous one. I need to check.
- Complete the following steps to set password protection for a VI. Select File»VI Properties to display the VI Properties dialog box. Select Protection from the Category pull-down menu in the VI Properties dialog box. Select the Password-protected option to display the Enter Password dialog box. Enter the password in the Enter New Password field.
- LabView VI File Format Online LabView VI Password Recovery Tool Support version 5.0 up to 2019 For more information about protecting VI Block Diagrams, see the NI Knowledge Base article on this subject: Security of LabVIEW VI Password Protection vs. Removing VI Block Diagrams.
What I was trying to say is hackers adapt every 6 months or so to crack the latest LabVIEW, which makes me think that the same effort could be put into cracking LabVIEW passwords. The real problem lies in the fact that is doesn't even take a skilled cracker 6 months to adapt, but more like 6 hours or 6 days at worst.
VI-File-Explorer_v0.9clFile
...........................clFile.lvclass
...........................clFile_contentLen.vi
...........................clFile_readFromFile.vi
...........................clFile_readFromString.vi
...........................clFile_readStr.vi
...........................clFile_writeStr.vi
...........................clFile_writeToFile.vi
.....................clFileReader
.................................clFileReader.lvclass
.................................clFileReader_getLenght.vi
.................................clFileReader_getNewReader.vi
.................................clFileReader_initReader.vi
.................................clFileReader_readInt.vi
.................................clfilereader_readStr.vi
.................................clFileReader_setReaderPropertys.vi
.................................clFileReader_writeStr.vi
.................................clFileReader_writeToFile.vi
.....................clLabview
..............................clLabview.lvclass
..............................clLabview_BDPW.vi
..............................clLabview_BDPW_calc.vi
..............................clLabview_BDPW_calcSalt.vi
..............................clLabview_BDPW_SaltFormat.vi
..............................clLabview_blockUncompress.vi
..............................clLabview_getBlockIdByName.vi
..............................clLabview_icon.vi
..............................clLabview_init.vi
..............................clLabview_LVSR.vi
..............................clLabview_md5.vi
..............................clLabview_readVI.vi
..............................clLabview_updateFileReader.vi
..............................clLabview_version.vi
..............................clLabview_writeLVSR.vi
..............................clLabview_writeToFile.vi
..............................clLabview_writeVI.vi
..............................MD5Checksum_format_output.vi
..............................MD5Checksum_string.vi
.....................vi_lib.lvlib
.....................vi-File-Explorer.aliases
.....................vi-File-Explorer.lvproj
.....................VI-File-Explorer.vi
.....................zlib.dll
LabVIEWBlog - Individual Entry
VI Password Cracking
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
Labview Vi Password Crack
Labview Vi Password Crack 2017
Support or questions on this code should be done via the forums.