当前位置:编程学习 > 网站相关 >>

探测简单的rar密码

密码格式:年月日(yyyyMMdd)
Java代码 
package org.demo; 
 
import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
 
/**
 * 探测 rar 压缩包的密码
 * <p>
 * 针对密码格式为 yyyyMMdd 的 rar 压缩包,使用穷举法探测密码
 * <p>
 * 
 */ 
public class RarPasswordTest 

 
    /**
     * 
     * 探测 rar 压缩包的密码,密码格式为:yyyyMMdd
     * 
     * @param args fileName startDate endDate
     * @throws Exception
     */ 
    public static void main(String[] args) throws Exception 
    { 
        String path = "E:\\password_test.rar"; 
        String cmd_prefix = "\"C:\\Program Files\\WinRAR\\rar.exe\" -y x -p"; 
         
        // 分析入参 
        int start = 20110901; 
        int end = 20111231; 
        if (args.length > 0){ 
            path = args[0]; 
        } 
        if (args.length > 2){             
            start = Integer.parseInt(args[1]); 
            end = Integer.parseInt(args[2]); 
        } 
         
        Runtime runtime = Runtime.getRuntime(); 
        String cmd = null; 
        for (int i=start; i < end; i++){ 
            // command 
            cmd = cmd_prefix + i + " " + path;             
             
            // execute command 
            Process proc = runtime.exec(cmd);             
             
            // out information (这里inputStream和errorStream 需要同时读,否则会发生死锁的情况) 
            new Thread(new OutTask(proc.getInputStream())).start(); 
             
            // error information 
            InputStream is = proc.getErrorStream(); 
            BufferedReader br = new BufferedReader(new InputStreamReader(is, "gbk")); 
            String data = null; 
             
            boolean finish = true; 
            while((data = br.readLine()) != null){ 
                if (data.contains("errors") || data.contains("failed")){ 
                    finish = false; 
                    break; 
                } 
            } 
            br.close(); 
             
            if (finish){ 
                System.out.println("------- password -------"); 
                System.out.println(i); 
                System.out.println("> finished"); 
                System.exit(0); 
            } 
            System.out.println(i); 
        } 
         
        System.out.println("> exit"); 
    } 

 
class OutTask implements Runnable{ 
 
    private InputStream is; 
     
    public OutTask(InputStream is){ 
        this.is = is; 
    } 
     
    @Override 
    public void run() 
    { 
        try { 
            BufferedReader br = new BufferedReader(new InputStreamReader(is, "gbk")); 
            while(br.readLine() != null){ 
                // .. 
            } 
            br.close(); 
        } catch(Exception e){ 
             
        } 
         
    }     
}    

作者“dyccsxg”
 

补充:综合编程 , 安全编程 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,