So there are like a billion free opensource version control products out there and the ONLY plugin I can find for InteliJ to use a Subversion repository is TMate, and they want over $50 for the privilage.
Just for kicks and educational experience I take a quick look at how the good folks at TMate implement security. They actually do a much better job than most products do and they are an excellent subject for educational review. Let us proceed:
So I download the plugin, it arrives in a jar
C:\IntelliJ-IDEA-4.5\config\plugins\tmate-idea\lib\tmate.jar
Pop that bad boy open and quickly discover that the folks at TMate have used a code obsfucator. That sucks, but it's not too hard to figure out that the license is handled through org\tmatesoft\tmate\A\D.class
It's reading from a file named "tmate10.key". I found an old ticket on the web that mentioned that these geniuses used to check this file once per second, a little retentive if you ask me.
private static M A() obviously initiates the checking, it reads in two variables:
s = bufferedreader.readLine();
s1 = bufferedreader.readLine();
The rest of the code is pretty messed up, and there are about 600 class files. The rest of the routine looks like this:
M m;
m = M.A(s, s1);
m.B = s1;
goto _L5
Throwable throwable;
throwable;
null;
obj;
JVM INSTR monitorexit ;
return;
_L5:
if(s.equals(m.K)) goto _L7; else goto _L6
_L6:
null;
obj;
JVM INSTR monitorexit ;
return;
_L7:
C = m;
m;
obj;
JVM INSTR monitorexit ;
return;
Exception exception1;
exception1;
throw exception1;
}
so I'm guessing I have to figure out which class is M. Takes me about a minute to figure out this is
public String toString()
{
StringBuffer stringbuffer = new StringBuffer();
stringbuffer.append("\n");
stringbuffer.append("user name:" + K + "\n");
stringbuffer.append("customer id:" + N + "\n");
stringbuffer.append("product id:" + E + "\n");
stringbuffer.append("license type:" + F + "\n");
stringbuffer.append("major version:" + D + "\n");
stringbuffer.append("minor version:" + L + "\n");
stringbuffer.append("generationDate:" + new Date((long)A * 1000L) + "\n");
stringbuffer.append("days issued:" + M + "\n");
return stringbuffer.toString();
}
Each of these 8 pieces of information were pulled from pieces of my decrypted key. Also in my decrypted key was my user name. Notice how that original chunk of code said:
All in all, a halfway decent job of coding a security module. The key is certainly strong enough to avoid any frontal assult with a decryption routine, though it's kind of like having a massive vault door guarding the entrance to your tent. It might take all the computers on earth an amount of time equal to the age of the univers to break the encryption, but how long would it take someone to recompile the M.class. Probably the easiest way would be to manipulate the bytecode directly.
|
| Even if you don't run a business security cameras may be useful for you. There is a peace of mind in having security cameras for some people, who want more security in their home, but you may also get a discount on home insurance for having security products installed in your home. |