Java对象ClassNotFoundException的反序列化

时间:2016-09-25 06:09:40

标签: java serialization

首先,我对Java知之甚少。我参与了夺旗活动,需要对一些Base64编码的cookie信息进行反序列化,以改变一些参数值,以便在挑战中取得进一步进展。

我已经回顾了很多关于此错误消息的其他问题,但我有限的Java知识(只为编写Java代码以回答此挑战问题)意味着我需要一些专业知识来帮助我快速理解。

我有以下代码来解码base64 cookie值,然后尝试反序列化。

import java.util.Base64;
import java.util.UUID;
import java.io.*;

public class decode {
   public static void main(String args[]){

      try {
         // get the encoded string and print for reference
         String base64encodedString = "mybase64encodedstring==";
         System.out.println("Base64 encoded string : " + base64encodedString + "\n");

         // base64 decode and print
         byte[] base64decodedBytes = Base64.getDecoder().decode(base64encodedString);
         System.out.println("Base64 decoded string : " + new String(base64decodedBytes, "utf-8") + "\n");

         // deserialize 
         InputStream in = new ByteArrayInputStream(base64decodedBytes);

         ObjectInputStream obin = new ObjectInputStream(in);
         Object object = obin.readObject();
         obin.close();

         System.out.println("Object class is " + object.getClass().toString());

      }catch(UnsupportedEncodingException e){
         System.out.println("UnsupportedEncodingException :" + e.getMessage());
         return;
      }catch(IOException e) {
         System.out.println("IOException :" + e.getMessage());
         return;
      }catch(ClassNotFoundException e) {
         System.out.println("Class not found");
         e.printStackTrace();
         return;
      }
   }
}

请注意,我还没有包含我的实际base64编码字符串,因为害怕其他人在Google上搜索挑战并找到他们可能还需要的答案:)

base64解码字符串的输出类似于以下格式:

Base64 decoded string : ��srcom.myapp.name.model.User��x�g�e�Iidis_adminpasswordtLjava/lang/String;L        password2q~usernameq~xpt<somepasswordstring>
bsmith

我得到的错误是:

java.lang.ClassNotFoundException: com.myapp.name.model.User

据我所知,这与com.myapp.name.model.User不属于ClassPath有关吗?我不知道这意味着什么以及我需要做什么来反序列化这些数据。

对此有任何帮助表示赞赏!

0 个答案:

没有答案