<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent posts to blog</title><link>https://sourceforge.net/p/jbrute/blog/</link><description>Recent posts to blog</description><atom:link href="https://sourceforge.net/p/jbrute/blog/feed.rss" rel="self"/><language>en</language><lastBuildDate>Sat, 09 Nov 2013 12:53:24 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/jbrute/blog/feed.rss" rel="self" type="application/rss+xml"/><item><title>New version released: v0.99 (beta)</title><link>https://sourceforge.net/p/jbrute/blog/2013/11/new-version-released-v099-beta/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hey, now it is available a new relase of JBrute, there are several bug fixes and some new functionalities. You can read the changelog to get a detail of the changes.&lt;br /&gt;
Please donwload the binary or checkout the source code and get me your opinion!&lt;br /&gt;
I really need volunteers to make a deep test on dictionary decrypt method.&lt;/p&gt;
&lt;p&gt;Regards, &lt;br /&gt;
Gonzalo&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">chalo</dc:creator><pubDate>Sat, 09 Nov 2013 12:53:24 -0000</pubDate><guid>https://sourceforge.netaf98be03c81845d96e89b3c6b25412a593a3ec08</guid></item><item><title>Bug found on version 0.98: JBrute is not thread-safe for dictionary decryptino method</title><link>https://sourceforge.net/p/jbrute/blog/2013/11/bug-found-on-version-098-jbrute-is-not-thread-safe-for-dictionary-decryptino-method/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hey folks, I discovered a bug with a specific scenario: when you use multi-threading in dictionary decryption, you will get an exception if you are processing a rule with memory access commands/constans. This is because the strategy that I choose to manage memory, and that strategy is not thread-safe.&lt;/p&gt;
&lt;p&gt;I correct it and it will be available on the next release. Anyway, if you don't use multiple threads, or if you use multiple threads but no memory access commands/constants, you can work without problems with dictionary method.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">chalo</dc:creator><pubDate>Fri, 08 Nov 2013 14:46:50 -0000</pubDate><guid>https://sourceforge.net69104a1343a05321098485f74bfa0eb557f8042e</guid></item><item><title>New version released: v0.98 (beta)</title><link>https://sourceforge.net/p/jbrute/blog/2013/11/new-version-released-v098-beta/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hey, now it is available a new relase of JBrute, there are several bug fixes and some new functionalities. You can read the changelog to get a detail of the changes.&lt;br /&gt;
This version fix serious bugs related to chained algorithms (because in last version I rewrited the main code for threads, to improve decryption with no salt).&lt;br /&gt;
Please donwload the binary or checkout the source code and get me your opinion!&lt;br /&gt;
I really need volunteers to make a deep test on dictionary decrypt method.&lt;br /&gt;
Regards, &lt;br /&gt;
Gonzalo.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">chalo</dc:creator><pubDate>Wed, 06 Nov 2013 21:39:29 -0000</pubDate><guid>https://sourceforge.net57695cebb4d28623f087e8a39f1b7d823a44e943</guid></item><item><title>New version released: v0.97 (beta)</title><link>https://sourceforge.net/p/jbrute/blog/2013/10/new-version-released-v097-beta/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hey, now it is available a new relase of JBrute, there are several bug fixes and some new functionalities. You can read the changelog to get a detail of the changes.&lt;br /&gt;
This version has important improves, like multi-threading support for dictionary attacks, really better performance for chained algorithms, and new functionalities for rule pre processor.&lt;/p&gt;
&lt;p&gt;Please donwload the binary or checkout the source code and get me your opinion!&lt;br /&gt;
I really need volunteers to make a deep test on dictionary decrypt method.&lt;br /&gt;
Regards, &lt;br /&gt;
Gonzalo.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">chalo</dc:creator><pubDate>Tue, 29 Oct 2013 15:00:52 -0000</pubDate><guid>https://sourceforge.net8caa752878bba264b9ae66168310b21a6ddd5c93</guid></item><item><title>JBrute Labs: a little of cryptoanalysis over Informix's password algorithm</title><link>https://sourceforge.net/p/jbrute/blog/2013/10/jbrute-labs-a-little-of-cryptoanalysis-over-informixs-password-algorithm/</link><description>&lt;div class="markdown_content"&gt;&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Starting on version 11.70, Informix allows DBSA to create internal users and to manage their authentication locally, and not with the OS. This feature is called USERMAPPING. We will try to understand how Informix does to store the passwords for that users.&lt;br /&gt;
On the other hand, we will use JBrute as a support tool to help us in the cryptoanalysis, and this is a new different (and interesting) use of it.&lt;/p&gt;
&lt;h2 id="lets-play"&gt;Lets play&lt;/h2&gt;
&lt;p&gt;The mapped users can be found in the table sysintauthusers, inside the SYSUSER database. This table has several columns, but we are interested in only 4: username, salt, hashed_password and hash_type.&lt;/p&gt;
&lt;p&gt;The IBM documentation says this about the content of the sysintauthusers table:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;username: Name for the user.&lt;br /&gt;
salt: 64-bit salt that the server uses to morph the password before applying the hashing algorithm. The server can use salt to change a password so that two users with the same password do not have the same hashed password in the database. Salt improves security because it prevents password guessing.&lt;br /&gt;
hashed_password: A sha-256 hashed and base-64 encoded password.&lt;br /&gt;
hash_type: Type of hashing algorithm used. Currently the SHA-256 algorithm is used.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ok, so, it seems that we will have to deal with a salted sha-256 hash (not really complicated), with a particularity: it is base64 encoded.&lt;/p&gt;
&lt;p&gt;Before starting the cryptoanalysis, we must to collect some information. We know some&lt;br /&gt;
things by the documentation, but we must get some hashes to do the job. So, we need an &lt;br /&gt;
Informix's installation to create some users. This is not an important section, so I will just put the command to create one:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;create user batman with password "batman" properties UID 501 group(501) home "/home/userinf";&lt;br /&gt;
create user robin with password "robin" properties UID 501 group(501) home "/home/userinf";&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Please ignore the properties section, it is irrelevant at this point. Ok, we have our testing users "batman" and "robin". We just need to get the hashed password and the generated salt for both. For this, I execute this sql query over the "SYSUSER" database:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;select username,salt,hashed_password,hash_type from sysintauthusers;&lt;/p&gt;
&lt;p&gt;username         batman&lt;br /&gt;
salt             3561468224442120539&lt;br /&gt;
hashed_password  MUz_GO.idl2RwWkB3ChUIhecxmzLDWMwm2hcSl37YHME√ü&lt;br /&gt;
hash_type        SHA-256&lt;/p&gt;
&lt;p&gt;username         robin&lt;br /&gt;
salt             3478653688976053352&lt;br /&gt;
hashed_password  r4gUfQaWC3nciILif0gG06DUfJtbx66AmOCsAoKuPIME§&lt;br /&gt;
hash_type        SHA-256&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And that is all the information that we need. An important thing: note that if could have only the "robin" user hash, we will not be able to note that there are some strange thing with the base64 encode, as we can see on the "batman" hash. For this reason, it is important to generate several hashes to get different scenarios.&lt;/p&gt;
&lt;p&gt;I will put some points clear:&lt;br /&gt;
What we know:&lt;br /&gt;
    _ It is a sha-256 hash&lt;br /&gt;
    _ It is salted&lt;br /&gt;
    _ It is not the rfc3548 implementation of base64 encoding&lt;/p&gt;
&lt;p&gt;What we don't know:&lt;br /&gt;
    _ What kind of salt is in use? pre-salt or post-salt?&lt;br /&gt;
    _ How is the base64 Informix's proprietary implementation?&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;First, I really suggest you taking a look to the rfc3548 if you are not acquainted about base64. You can read the definition here:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.faqs.org/rfcs/rfc3548.html" rel="nofollow"&gt;http://www.faqs.org/rfcs/rfc3548.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I have to say that the pad character of the base64 encoded used by Informix is really strange: we should have only 1 padding character, but we've got more: "E√ü".&lt;br /&gt;
I suspect that it is a language conversion issue, we will see...&lt;/p&gt;
&lt;p&gt;Ok, we have all points clear at this moment. So, we start discovering if the salt is&lt;br /&gt;
pre or post salt. We need to generate hashes for both scenarios. I developed 2 new optional parameters in JBrute for the "--encrypt" main parameter to do this job: "--salt_type" and "--base64". This parameters will be included in the next version of JBrute (0.97). At this moment, you can check out the source and use it, actually the DEV version is the 0.97 DEV-2. It's better to choose the hash of batman user, because it has 2 strange characters that are not part of the rfc3548 base64 encode.&lt;/p&gt;
&lt;p&gt;After the checkout, now we can use JBrute to try the encryption :)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;[root@localhost ~]&lt;/span&gt;# ./jbrute.sh --encrypt --presalt=3561468224442120539 --salt_type=int64 --word=batman --base64 --algorithm=5&lt;/p&gt;
&lt;p&gt;Word to hash: batman&lt;br /&gt;
Pre-salt used: 3561468224442120539&lt;br /&gt;
Salt type: int64&lt;br /&gt;
Hash SHA-256() : 314cff18efa2765d91c16901dc285422179cc66ccb0d63309b685c4a5dfb6073&lt;br /&gt;
Base64 SHA-256() : &lt;strong&gt;MUz/GO+idl2RwWkB3ChUIhecxmzLDWMwm2hcSl37YHM=&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;[root@localhost ~]&lt;/span&gt;# ./jbrute.sh --encrypt --postsalt=3561468224442120539 --salt_type=int64 --word=batman --base64 --algorithm=5&lt;/p&gt;
&lt;p&gt;Word to hash: batman&lt;br /&gt;
Post-salt used: 3561468224442120539&lt;br /&gt;
Salt type: int64&lt;br /&gt;
Hash SHA-256() : 804ee5d2ef79403ef38553c7cbc67bee114e7a35169dff7421598b0b86a90da8&lt;br /&gt;
Base64 SHA-256() : gE7l0u95QD7zhVPHy8Z77hFOejUWnf90IVmLC4apDag=&lt;/p&gt;
&lt;p&gt;&lt;span&gt;[root@localhost ~]&lt;/span&gt;#&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;BINGO!!! We are very luck! As we can see, the presalt hash is really similar to the Informix's hash, we are very close! &lt;/p&gt;
&lt;p&gt;We should compare the two hashes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Informix's one: MUz_GO.idl2RwWkB3ChUIhecxmzLDWMwm2hcSl37YHME√ü&lt;br /&gt;
JBrute's one  : MUz/GO+idl2RwWkB3ChUIhecxmzLDWMwm2hcSl37YHM=&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The only difference that we can find on this hashes are the characters "/" and "+" of rfc3548 base64. As we said before, there is a strange thing about the pad character, that should be just one. If we take the first 43 character of the Informix's hash, and if we replace then the "_" character with the "/" character, and the "." character with the "+" character, and if we add to the result the pad character "=", then we have a base64 encoded sha-256 hash, as JBrute shows.&lt;/p&gt;
&lt;p&gt;Thats all, the algorithm is not complex. In fact, it is easy to understand and to implement.&lt;/p&gt;
&lt;p&gt;One more thing: the password length can't be less than 6 or grater than 32. (I discover that altering the password of some users).&lt;/p&gt;
&lt;p&gt;Finally, after a couple of hours, I added support for the Informix's algorithm in JBrute, so, we can check the final result:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;[root@localhost ~]&lt;/span&gt;# ./jbrute.sh --decrypt --algorithm=L --hash=3561468224442120539/MUz_GO.idl2RwWkB3ChUIhecxmzLDWMwm2hcSl37YHM=&lt;/p&gt;
&lt;p&gt;Algorithm: INFORMIX-1170()&lt;br /&gt;
Number of cores detected: 2&lt;br /&gt;
Number of threads: 1&lt;br /&gt;
Number of hash/es to decrypt: 1&lt;br /&gt;
Using brute force decryption method.&lt;br /&gt;
Using loweralpha as charset (default).&lt;br /&gt;
Combinations of 1 characters min (default)&lt;br /&gt;
Combinations of 7 characters max (default)&lt;/p&gt;
&lt;p&gt;Starting with combinations of 1 characters...&lt;br /&gt;
Done. (Time elapsed (sec): 0)&lt;br /&gt;
Starting with combinations of 2 characters...&lt;br /&gt;
Done. (Time elapsed (sec): 0)&lt;br /&gt;
Starting with combinations of 3 characters...&lt;br /&gt;
Done. (Time elapsed (sec): 0)&lt;br /&gt;
Starting with combinations of 4 characters...&lt;br /&gt;
Done. (Time elapsed (sec): 0)&lt;br /&gt;
Starting with combinations of 5 characters...&lt;br /&gt;
Done. (Time elapsed (sec): 21)&lt;br /&gt;
Starting with combinations of 6 characters...&lt;br /&gt;
Founded: 3561468224442120539/MUz_GO.idl2RwWkB3ChUIhecxmzLDWMwm2hcSl37YHM=:batman&lt;/p&gt;
&lt;p&gt;All hashes decrypted!!!&lt;br /&gt;
Results: &lt;br /&gt;
3561468224442120539/MUz_GO.idl2RwWkB3ChUIhecxmzLDWMwm2hcSl37YHM= --&amp;gt; batman&lt;/p&gt;
&lt;p&gt;Total Seconds Elapsed: 43&lt;/p&gt;
&lt;p&gt;&lt;span&gt;[root@localhost ~]&lt;/span&gt;#&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As you can see, JBrute needs a special format for the hash (a related concept to ORACLE-10G or POSTGRESQL hashes). To get the correct format, you should get the hash with this sql query on Informix:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;select salt || '/' || substring(hashed_password from 1 for 43) || '=' &lt;br /&gt;
from sysintauthusers; &lt;/p&gt;
&lt;/blockquote&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">chalo</dc:creator><pubDate>Sat, 19 Oct 2013 23:53:07 -0000</pubDate><guid>https://sourceforge.net3ef54a5e198c9228de091675126ecf159b4cc8fc</guid></item><item><title>We have a mailing list!!!</title><link>https://sourceforge.net/p/jbrute/blog/2013/10/we-have-a-mailing-list/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;From today, JBrute's users can ask questions, exchange opinions, and write about general issues on the JBrute's user list.&lt;/p&gt;
&lt;p&gt;To suscribe: &lt;a href="https://lists.sourceforge.net/lists/listinfo/jbrute-users"&gt;https://lists.sourceforge.net/lists/listinfo/jbrute-users&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To send an email to the list: jbrute-users@lists.sourceforge.net&lt;/p&gt;
&lt;p&gt;Cheers, &lt;br /&gt;
Gonzalo.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">chalo</dc:creator><pubDate>Thu, 10 Oct 2013 01:16:34 -0000</pubDate><guid>https://sourceforge.net8f9c42bb75523df337d3d9efec0d19911bab2692</guid></item><item><title>New version released: v0.96 (beta)</title><link>https://sourceforge.net/p/jbrute/blog/2013/10/new-version-released-v096-beta/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hey, now it is available a new relase of JBrute, there are several bug fixes and some new functionalities. You can read the changelog to get a detail of the changes.&lt;br /&gt;
Please donwload the binary or checkout the source code and get me your opinion!&lt;/p&gt;
&lt;p&gt;I really need volunteers to make a deep test on dictionary decrypt method.&lt;/p&gt;
&lt;p&gt;Regards, &lt;br /&gt;
Gonzalo.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">chalo</dc:creator><pubDate>Tue, 08 Oct 2013 19:22:36 -0000</pubDate><guid>https://sourceforge.net6aa53f3e82cf8d1f85eea35476d203cc371489d1</guid></item><item><title>Bug found on version 0.95: error when test performance on any algorithm with more than 1 thread</title><link>https://sourceforge.net/p/jbrute/blog/2013/10/bug-found-on-version-095-error-when-test-performance-on-any-algorithm-with-more-than-1-thread/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Discovered today:&lt;/p&gt;
&lt;p&gt;$ ./jbrute.sh --test --threads=4&lt;/p&gt;
&lt;p&gt;ERROR! unknow parameter&lt;/p&gt;
&lt;p&gt;I fixed it for the next version.&lt;/p&gt;
&lt;p&gt;It is very difficult for me to test all scenarios after a change, and, until now, I did not receive any comments or reports from JBrute's users, so I must discover this kind of bugs by myself, and it is a really slow process... In this case, a friend of mine reported it!&lt;/p&gt;
&lt;p&gt;Regards,&lt;br /&gt;
Gonzalo&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">chalo</dc:creator><pubDate>Mon, 07 Oct 2013 15:22:21 -0000</pubDate><guid>https://sourceforge.net0ca02e9bcbfb82d5f33a16025b83287d606e0c95</guid></item><item><title>Bug found on version 0.94: error when test performance on ORACLE-10G algorithm</title><link>https://sourceforge.net/p/jbrute/blog/2013/09/bug-found-on-version-094-error-when-test-performance-on-oracle-10g-algorithm/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Yesterday I discovered this error. When I tried to test performance of the ORACLE-10G algorithm on my laptop, I get this error:&lt;/p&gt;
&lt;p&gt;$ ./jbrute.sh --test --algorithm=A&lt;/p&gt;
&lt;p&gt;Number of cores detected: 8&lt;br /&gt;
Number of threads to use: 1&lt;/p&gt;
&lt;p&gt;Testing performance for ORACLE-10G() ...&lt;br /&gt;
Exception in thread "Thread-0" java.lang.IllegalArgumentException: hexBinary needs to be even-length: SYSTEM/2F4C3799A242887767&lt;br /&gt;
        at javax.xml.bind.DatatypeConverterImpl.parseHexBinary(Unknown Source)&lt;br /&gt;
        at javax.xml.bind.DatatypeConverter.parseHexBinary(Unknown Source)&lt;br /&gt;
        at specialAlgorithm.Oracle10g.toByteArray(Oracle10g.java:237)&lt;br /&gt;
        at specialAlgorithm.MyMessageDigest.hashToByteArray(MyMessageDigest.java:118)&lt;br /&gt;
        at entities.MyBruteDecryptThread.testBruteForceSpecial(MyBruteDecryptThread.java:255)&lt;br /&gt;
        at entities.MyBruteDecryptThread.run(MyBruteDecryptThread.java:128)&lt;br /&gt;
You could compute 0 ORACLE-10G() hashes/sec approx.&lt;/p&gt;
&lt;p&gt;The bug was not on the algorithm itself (decrypt works fine), it was an error on the "testBruteForceSpecial" method on MyBruteDecryptThread class, and it was corrected. The change will be included in the next release, but, I commited it. So, if you need a binary with this error fixed now, you can check out the source and build your own "JBrute.jar" package.&lt;/p&gt;
&lt;p&gt;I´m sorry about it, but it is very difficult to me to test all scenarios after a change, and, until now, I did not receive any comments or reports of JBrute from users, so I must discover this kind of bugs by myself, and it is a really slow process...&lt;/p&gt;
&lt;p&gt;Regards,&lt;br /&gt;
Gonzalo&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">chalo</dc:creator><pubDate>Mon, 23 Sep 2013 14:28:33 -0000</pubDate><guid>https://sourceforge.net7f3ca93c9afe51708b099201982fcc64157771b5</guid></item><item><title>first 100 downloads!!!</title><link>https://sourceforge.net/p/jbrute/blog/2013/09/first-100-downloads/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Today JBrute´s downloads grows over 100, thank you for your support! Please notify me any bug that you find to make JBrute a better app.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">chalo</dc:creator><pubDate>Fri, 20 Sep 2013 20:29:30 -0000</pubDate><guid>https://sourceforge.net42406de357fd70f09e14f87b02c5093ac07ea743</guid></item></channel></rss>