保存在FinalShell服务器登录密码忘记了,如何快速获取到

avatar
作者
筋斗云
阅读量:0

一、从FinalShell获取服务器基本信息

如图操作会导出一个json文件,可以直接保存在桌面,或者其他位置

json格式如下:

{"forwarding_auto_reconnect":false ,"custom_size":false ,"delete_time":0 ,"secret_key_id":"" ,"user_name":"root" ,"remote_port_forwarding":{} ,"conection_type":100 ,"sort_time":0 ,"description":"" ,"proxy_id":"0" ,"authentication_type":1 ,"drivestoredirect":true ,"delete_key_sequence":0 ,"password":"xE4F2Pi13TnbkO8vo6wwmQNbqB77PUeI" ,"modified_time":1700460445433 ,"host":"x.xx.xx.xx" ,"accelerate":false ,"id":"sn1xqbrr5womw787" ,"height":0 ,"order":0 ,"create_time":1700460445433 ,"port_forwarding_list":[] ,"parent_update_time":0 ,"rename_time":0 ,"backspace_key_sequence":2 ,"fullscreen":false ,"port":22 ,"terminal_encoding":"UTF-8" ,"parent_id":"root" ,"exec_channel_enable":true ,"width":0 ,"name":"xx.xx.xx.xx" ,"access_time":1719895278353}

二、代码读取并解析获取账号明文信息

package com.base.info.controller;  import com.alibaba.fastjson.JSON; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import lombok.NoArgsConstructor; import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.StringUtils;  import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.File; import java.io.IOException; import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.*;  public class FinalShellDecodePass {     public static void main(String[] args) throws Exception {         // 获取finalshell的所有json数据,json数据所在文件夹         File file = new File("C:\\Users\\12118\\Desktop"); //我的放在桌面了,如果json文件在其他位置,需要更改为对应路径         // 获取所有的json文件         File[] files = file.listFiles(pathname -> "json".equalsIgnoreCase(FilenameUtils.getExtension(pathname.getName())));         // 主要信息: ip/端口/用户名/密码         List<Map<String, Object>> infoList = new ArrayList<>(files.length);         for (File jsonFile : files) {             String s = FileUtils.readFileToString(jsonFile);             FinalShellConfig shellConfig = JSON.parseObject(s, FinalShellConfig.class);             // 密文改明文             String password = shellConfig.getPassword();             if (StringUtils.isNotBlank(password)) {                 shellConfig.setPassword(decodePass(password));             }             String s1 = JSON.toJSONString(shellConfig);             System.err.println(s1);              Map<String, Object> map = new LinkedHashMap<>();             map.put("主机", shellConfig.getHost());             map.put("端口", shellConfig.getPort());             map.put("用户名", shellConfig.getUserName());             map.put("密码", shellConfig.getPassword());             infoList.add(map);         }         for (Map<String, Object> stringObjectMap : infoList) {             System.err.println(JSON.toJSONString(stringObjectMap));         }      }      public static byte[] desDecode(byte[] data, byte[] head) throws Exception {         SecureRandom sr = new SecureRandom();         DESKeySpec dks = new DESKeySpec(head);         SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");         SecretKey securekey = keyFactory.generateSecret(dks);         Cipher cipher = Cipher.getInstance("DES");         cipher.init(2, securekey, sr);         return cipher.doFinal(data);     }      public static String decodePass(String data) throws Exception {         if (data == null) {             return null;         } else {             String rs = "";             byte[] buf = Base64.getDecoder().decode(data);             byte[] head = new byte[8];             System.arraycopy(buf, 0, head, 0, head.length);             byte[] d = new byte[buf.length - head.length];             System.arraycopy(buf, head.length, d, 0, d.length);             byte[] bt = desDecode(d, ranDomKey(head));             rs = new String(bt);              return rs;         }     }      static byte[] ranDomKey(byte[] head) {         long ks = 3680984568597093857L / (long) (new Random((long) head[5])).nextInt(127);         Random random = new Random(ks);         int t = head[0];          for (int i = 0; i < t; ++i) {             random.nextLong();         }          long n = random.nextLong();         Random r2 = new Random(n);         long[] ld = new long[]{(long) head[4], r2.nextLong(), (long) head[7], (long) head[3], r2.nextLong(), (long) head[1], random.nextLong(), (long) head[2]};         ByteArrayOutputStream bos = new ByteArrayOutputStream();         DataOutputStream dos = new DataOutputStream(bos);         long[] var15 = ld;         int var14 = ld.length;          for (int var13 = 0; var13 < var14; ++var13) {             long l = var15[var13];              try {                 dos.writeLong(l);             } catch (IOException var18) {                 var18.printStackTrace();             }         }          try {             dos.close();         } catch (IOException var17) {             var17.printStackTrace();         }          byte[] keyData = bos.toByteArray();         keyData = md5(keyData);         return keyData;     }      public static byte[] md5(byte[] data) {         String ret = null;         byte[] res = null;          try {             MessageDigest m;             m = MessageDigest.getInstance("MD5");             m.update(data, 0, data.length);             res = m.digest();             ret = new BigInteger(1, res).toString(16);         } catch (NoSuchAlgorithmException e) {             e.printStackTrace();         }         return res;     }       @NoArgsConstructor     @Data     static class FinalShellConfig {          @JsonProperty("forwarding_auto_reconnect")         private Boolean forwardingAutoReconnect;         @JsonProperty("custom_size")         private Boolean customSize;         @JsonProperty("delete_time")         private Integer deleteTime;         @JsonProperty("secret_key_id")         private String secretKeyId;         @JsonProperty("user_name")         private String userName;         @JsonProperty("conection_type")         private Integer conectionType;         @JsonProperty("sort_time")         private Integer sortTime;         @JsonProperty("description")         private String description;         @JsonProperty("proxy_id")         private String proxyId;         @JsonProperty("authentication_type")         private Integer authenticationType;         @JsonProperty("drivestoredirect")         private Boolean drivestoredirect;         @JsonProperty("delete_key_sequence")         private Integer deleteKeySequence;         @JsonProperty("password")         private String password;         @JsonProperty("modified_time")         private Long modifiedTime;         @JsonProperty("host")         private String host;         @JsonProperty("accelerate")         private Boolean accelerate;         @JsonProperty("id")         private String id;         @JsonProperty("height")         private Integer height;         @JsonProperty("order")         private Integer order;         @JsonProperty("create_time")         private Long createTime;         @JsonProperty("port_forwarding_list")         private List<?> portForwardingList;         @JsonProperty("parent_update_time")         private Integer parentUpdateTime;         @JsonProperty("rename_time")         private Long renameTime;         @JsonProperty("backspace_key_sequence")         private Integer backspaceKeySequence;         @JsonProperty("fullscreen")         private Boolean fullscreen;         @JsonProperty("port")         private Integer port;         @JsonProperty("terminal_encoding")         private String terminalEncoding;         @JsonProperty("parent_id")         private String parentId;         @JsonProperty("exec_channel_enable")         private Boolean execChannelEnable;         @JsonProperty("width")         private Integer width;         @JsonProperty("name")         private String name;         @JsonProperty("access_time")         private Long accessTime;     } } 

三、执行main方法,获取信息

这样就获取到了!

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!