读书人

亿塞通加密简略破解

发布时间: 2013-10-08 16:46:23 作者: rapoo

亿塞通加密简单破解

公司的开发服务器和电脑都安装了亿塞通加密软件,代码文件和pdf文档就加密了。如果需要拷贝一些资料或者离职的时候,带走一些东西(这个大家都懂的),就比较麻烦。

公司内部有专人负责维护这个加密软件,比如自己的电脑上面只有eclipse、editplus、ultraedit等才能打开加密文件,使用notepad++就不能打开。同理一般的pdf文件,使用pdf默认的阅读器就可以打开,使用福昕就不可以的。公司的加密加密文件也是选择性加密,比如txt,doc等文件不加密,java文件,cpp文件是加密的。

当然,不是这个软件不能打开,只是需要这个加密软件识别你这个软件才行,类似与黑白名单一样,在我这个加密软件的白名单内,你是可以打开的。

配置的方法好像是需要指定这个软件的进程名称,具体的可以在任务管理器中查看软件的进程名称。


下面以简单的方法介绍怎么破解加密文件。


在有一次不小心复制一个文件的时候,比如Test.java文件复制成Test2.java,一不小心,把java的后缀去掉了,文件就变成了Test2,然后我用notepad++查看了这个文件,

居然可以正常显示里面的代码,由此说明,在执行复制的操作过程中,这个进程是加密软件认可的,所以在加密的时候,没有加密处理,然后在再复制Test.java文件成Test3.java的时候,发现使用notepad是不可以的打开的。根据以上的规律,只要我在复制文件的时候,目标的文件不是加加密的。

然后我想到了使用代码来实现一个复制的功能,只要复制后生成的文件不是加密的就好了。然后拷贝到自己电脑上的时候,在一次进行还原。


由于本人的工作主要语音是Java,所以下面的解决方案是根据Java语言来实现的。

本质思想:

Test.java (公司电脑)------>Test.java_ (后面的下划线是也是文件名,这个文件就不是加密文件了)----->Test.java(自己电脑,需要经过转化)


方案一:使用Java的IO操作加密的代码文件,按照文件的树形结构依次复制,注意:Java中具体的文件和文件夹都是File,在处理的时候,需要做判断,只有真正的代码文件,复制的时候,后面才加下划线,文件夹复制是不需要添加的。这种方式也是比较简单的和适用的,再次不做介绍,Java的IO相比都是比较简单的。


方案二:方案二是在方案一的基础上作了少许优化,复制不是采用Java的IO操作,主要是因为如果复制一个很多文件的时候,就会有效率问题,毕竟Java还是调用系统的api接口来读写操作的。这样我想到了系统的复制功能,结合平时使用linux的想法,使我想到window下是cmd命令,cmd中有个copy命令,这个大家应该都懂的,说干就干下面演示简单例子使用cmd的copy复制文件。

测试代码文件:Test.java



Java文件,使用notepad++会乱码

亿塞通加密简略破解


复制后的Java文件Test.java_,使用notepad++查看,正常显示,没有乱码。

亿塞通加密简略破解

Java中调用cmd命令的方法如下所示:

import java.io.BufferedReader;import java.io.File;import java.io.FileFilter;import java.io.InputStream;import java.io.InputStreamReader;public class _2Souce {static String fromStr = Constant.PROJECT_NAME + "_";static String toStr = Constant.PROJECT_NAME + "__";static String[] ENCODE_FILES = { "^.*\\.java\\_$", "^.*\\.c\\_$", "^.*\\.h\\_$", "^.*\\.cpp\\_$" };static String[] EXCLUDE_FOLDERS = { "^\\.svn$" };public static void main(String[] args) throws Exception {File fromFile = new File(fromStr);copy(fromFile);}static void copy(File file) throws Exception {if (file.isDirectory()) {File[] files = getSubFile(file);for (File f : files) {copy(f);}if (files.length == 0) {String fromAbs = file.getAbsolutePath();String toAbs = fromAbs.replace(fromStr, toStr);File toFile = new File(toAbs);if (!toFile.exists()) {toFile.mkdirs();}}} else {String fromAbs = file.getAbsolutePath();System.out.println(fromAbs);String toAbs = fromAbs.replace(fromStr, toStr);boolean isChange = false;for (String reg : ENCODE_FILES) {if (toAbs.matches(reg)) {isChange = true;break;}}if (isChange) {toAbs = toAbs.substring(0, toAbs.length() - 1);}System.out.println(toAbs);File toFile = new File(toAbs);if (!toFile.getParentFile().exists()) {toFile.getParentFile().mkdirs();}// "cmd /c copy  Test.c Test.txt"String cmd1 = "cmd /c copy " + fromAbs + " " + toAbs;Runtime runtime = Runtime.getRuntime();Process process = runtime.exec(cmd1);println(process.getInputStream());}}static void println(InputStream input) throws Exception {BufferedReader br = new BufferedReader(new InputStreamReader(input, "gbk"));String line = null;while ((line = br.readLine()) != null) {System.out.println(line);}input.close();}static File[] getSubFile(File file) {return file.listFiles(new FileFilter() {public boolean accept(File pathname) {boolean ret = true;if (pathname.isDirectory()) {for (String reg : EXCLUDE_FOLDERS) {if (pathname.getAbsolutePath().matches(reg)) {ret = false;break;}}}return ret;}});}}
后面考虑需要添加的功能,有空的时候再来实现吧:

1、默认文件需要在复制的时候,可以指定哪些后缀需要复制的时候添加下划线,哪些不需要。哪些文件需要复制,哪些文件不需要复制,比如svn的一些东西,就不用复制了吧,当然可以在复制之前使用命令删除svn的信息,不过做软件本着使用灵活的思想,还是可以添加的,最后可以指定配置,结合正则来匹配。

2、添加多线程技术,使用内置的线程池技术,多个线程同时复制,这样速度也稍微可以接受的。

读书人网 >其他相关

热点推荐