Bypass email server filtering provided you have a JDK installed
A few days ago I was facing a funny issue at a client :
Save it in EncodeFileWithBase64.java
Open another text editor and paste the following code :
And save it to DecodeFileWithBase64.java
Copiy also a small .rar file to make a test so that we can test the integrity of the process
Warning are normal are these class are not supposed to be used.
Now make a test :
- No usb key access
- Only CDROM Drive, but I replaced my laptop CDROM by an hardrive
- Mail attachment agressively scanned and filtered
So the project binaries I had to deliver (that contains .bat files, .jar, which are likely to cause the rejection) was rejected by the mail server.
So I had the idea to make a base64 encoding of the zip file, zip the text resutlt and send it by email...
and it did work ;)
The only requirement is to have a JDK on the traget machine.
I used the SUN.MISC version as it's shipped with the JDK and requires no additional jar.
So Open a text editor, paste the following code :
import java.io.*; import sun.misc.BASE64Encoder; public class EncodeFileWithBase64 { public static void main(String[] args) throws Exception { if (args.length < 2) { System.out.println("Usage: java EncodeFileWithBASE64 <inputfile> <outputfile>"); return; } String inputFile = args[0]; String outputFile = args[1]; BASE64Encoder encoder = new BASE64Encoder(); encoder.encode( new FileInputStream(inputFile), new FileOutputStream(outputFile) ); } }
Save it in EncodeFileWithBase64.java
Open another text editor and paste the following code :
import java.io.*; import sun.misc.BASE64Encoder; import sun.misc.BASE64Decoder; public class DecodeFileWithBase64 { public static void main(String[] args) throws Exception { if (args.length < 2) { System.out.println("Usage: java DecodeFileWithBASE64 <inputfile> <outputfile>"); return; } String inputFile = args[0]; String outputFile = args[1]; BASE64Decoder decoder = new BASE64Decoder(); decoder.decodeBuffer(new FileInputStream(inputFile), new FileOutputStream(outputFile)); } }
And save it to DecodeFileWithBase64.java
Copiy also a small .rar file to make a test so that we can test the integrity of the process
C:\temp\base64>dir Volume in drive C is SSD 150GB Volume Serial Number is E4B6-8C1D Directory of C:\temp\base64 20/04/2012 22:06 <dir> . 20/04/2012 22:06 <dir> .. 20/04/2012 22:05 613 DecodeFileWithBase64.java 19/04/2012 23:36 484 EncodeFileWithBase64.java 20/04/2012 22:12 127 025 etc1tool.rar 3 File(s) 268 873 bytes 2 Dir(s) 13 491 298 304 bytes free C:\temp\base64>c:\dev\jdk1.6.0_25\bin\javac.exe *.java DecodeFileWithBase64.java:2: warning: sun.misc.BASE64Encoder is Sun proprietary API and may be removed in a future release import sun.misc.BASE64Encoder; ^ DecodeFileWithBase64.java:3: warning: sun.misc.BASE64Decoder is Sun proprietary API and may be removed in a future release import sun.misc.BASE64Decoder; ^ EncodeFileWithBase64.java:2: warning: sun.misc.BASE64Encoder is Sun proprietary API and may be removed in a future release import sun.misc.BASE64Encoder; ^ DecodeFileWithBase64.java:15: warning: sun.misc.BASE64Decoder is Sun proprietary API and may be removed in a future release BASE64Decoder decoder = new BASE64Decoder(); ^ DecodeFileWithBase64.java:15: warning: sun.misc.BASE64Decoder is Sun proprietary API and may be removed in a future release BASE64Decoder decoder = new BASE64Decoder(); ^ EncodeFileWithBase64.java:14: warning: sun.misc.BASE64Encoder is Sun proprietary API and may be removed in a future release BASE64Encoder encoder = new BASE64Encoder(); ^ EncodeFileWithBase64.java:14: warning: sun.misc.BASE64Encoder is Sun proprietary API and may be removed in a future release BASE64Encoder encoder = new BASE64Encoder(); ^ 7 warnings C:\temp\base64> C:\temp\base64>dir Volume in drive C is SSD 150GB Volume Serial Number is E4B6-8C1D Directory of C:\temp\base64 20/04/2012 22:07 <dir> . 20/04/2012 22:07 <dir> .. 20/04/2012 22:07 812 DecodeFileWithBase64.class 20/04/2012 22:05 613 DecodeFileWithBase64.java 20/04/2012 22:07 806 EncodeFileWithBase64.class 19/04/2012 23:36 484 EncodeFileWithBase64.java 20/04/2012 22:12 127 025 etc1tool.rar 5 File(s) 270 491 bytes 2 Dir(s) 13 490 741 248 bytes free C:\temp\base64>
Warning are normal are these class are not supposed to be used.
Now make a test :
C:\temp\base64>java EncodeFileWithBase64 etc1tool.rar etc1tool.rar.txt C:\temp\base64>dir Volume in drive C is SSD 150GB Volume Serial Number is E4B6-8C1D Directory of C:\temp\base64 20/04/2012 22:15. 20/04/2012 22:15 .. 20/04/2012 22:07 812 DecodeFileWithBase64.class 20/04/2012 22:05 613 DecodeFileWithBase64.java 20/04/2012 22:07 806 EncodeFileWithBase64.class 19/04/2012 23:36 484 EncodeFileWithBase64.java 20/04/2012 22:12 127 025 etc1tool.rar 20/04/2012 22:15 173 824 etc1tool.rar.txt 6 File(s) 303 564 bytes 2 Dir(s) 13 488 807 936 bytes free C:\temp\base64>
check the produce file, it's a text file :
UmFyIRoHAJvXc0gADQAAAAAAAAB4DXSAgCwAyucBAAAWBAACtdHsHZtGfkAdNQwAIAAAAGV0YzF0 b29sLmV4ZRglkRTMyNmcGCJXxjicFBoBgOEZIy2BZKQBsJSxkZam3G3AI6JNDbhAYFtK67LAs8gl ... Kvxhs8e6Pi+mM5R3mynJQuXpCFu5svGg1zFS/peYfl2J/Cbr3TZDIsMOJ4SXDwRK9CHm7q8iruk5 E/Rs2mZWjv9Wkiner6lw+Bj3pSb3i8Q9ewBABwA=
Decode the produced file :
C:\temp\base64>java DecodeFileWithBase64 etc1tool.rar.txt etc1tool_decoded.rar C:\temp\base64>dir Volume in drive C is SSD 150GB Volume Serial Number is E4B6-8C1D Directory of C:\temp\base64 20/04/2012 22:20. 20/04/2012 22:20 .. 20/04/2012 22:07 812 DecodeFileWithBase64.class 20/04/2012 22:05 613 DecodeFileWithBase64.java 20/04/2012 22:07 806 EncodeFileWithBase64.class 19/04/2012 23:36 484 EncodeFileWithBase64.java 20/04/2012 22:12 127 025 etc1tool.rar 20/04/2012 22:15 173 824 etc1tool.rar.txt 20/04/2012 22:20 127 025 etc1tool_decoded.rar 7 File(s) 430 589 bytes 2 Dir(s) 13 486 784 512 bytes free C:\temp\base64>
No error !
Now you can send it by mail, it will pass as the mail gateway will only see an archive with text inside...
Comments