Abrir um arquivo codificado

[b]Olá pessoal gostaria de pedir a ajuda de vocês em uma coisa eu quero abrir um arquivo codificado ( nao sei a codificacao do mesmo ) e pegar o conteudo dele e colocar em uma area de texto ou qual quer coisa ou até mesmo gerar um outro arquivo com o conteudo do arquivo inicial ja descodificado sabe ?.. entao vou postar aqui o arquivo e um programa que o abre so que eu nao uso este programa pois ele nao tem algumas coisas que eu gostaria que tivesse entao queria saber como descodificar o arquivo ai eu mesmo fasso o meu bom o programa é um JAR e so descompilar os arquivos .class com algum programa como o DJ Java Decompiler ou outro e ver o fonte ( pelomenos eu acho que é isso neh ^^)

agradeco a todos desde já.[/b]

Bem vindo ao fórum!

Tente explicar seu problema melhor e deixe bem claro qual a sua dúvida. O que você escreveu acima está muito confuso (tudo aquilo em 2 períodos…).

oi,

existe um pacote java.util.jar que você pode utilizar para abrir um jar e trabalhar com ele

dê uma olhada na API

abs

[quote=André Fonseca]oi,

existe um pacote java.util.jar que você pode utilizar para abrir um jar e trabalhar com ele

dê uma olhada na API

abs[/quote]

dessa eu n sabia…
vou testar, vlw ae André!

opa é o seguinte sabem o arquivo que postei junto com o programa neh ?.. pois então esse programa pega oque o arquivo tem e joga em alguns lugares nele como campos de textos label etc… queria fazer o mesmo so que não queria trabalhar em cima deste projeto já feito pois tem varios outros arquivos que eu tenho aqui e que esse programa ai não abre sabe?, por isso quero saber um geito de eu mesmo descodificar o arquivo e obrigado pela resposta rapida!

Você gostaria de criar seu próprio formato de arquivo para salvar o estado de um objeto? Ou será que o que você procura é sobre serialização?

:?: nao entendi muito bem amigo mas eu so quero ver o conteudo deste arquivo/pegar conteudo dele etc… é que é assim esse arquivo é de um jogo chamado Perfect World da Level Up Games entao preciso criar uma ferramenta pra abrir ele sabe como falei nos outros posts so quero saber como abrir ele apenas isso obrigado.

Se você não sabe qual o tipo/formato do arquivo então não tem como te ajudar. E se liga que pode ser que mudando o conteúdo desse arquivo seu jogo não funcione mais. Caras que desenvolvem games não são bobos, ou são ViniGodoy? 8)

funciona sim ja mudei algumas coisas com o programa que coloquei no 1 post ^^ ja mudei diversas coisas no jogo

bom pessoal so quero mesmo saber como posso descodificar este arquivo obrigado a todos espero que alguem possa me ajudar pois ja vi programas que fazem isso tanto em JAVA quanto em programacao normal mesmo tipo C++, C, Delphi etc…

ae pessoal eu achei esse codigo aqui nos arquivos .class sera que é ele que abre/descodifica o arquivo ?

package utils;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.zip.CRC32;
import java.util.zip.Checksum;

public class conv
{
  private static final char[] HEXTAB = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

  public static String HexFromString(String ascii)
  {
    String st = "";

    for (int i = 0; i < ascii.length(); ++i)
    {
      int ch = ascii.charAt(i);

      String tempo = Integer.toHexString(ch);
      if (tempo.length() < 2)
        tempo = "0" + tempo;

      st = st + tempo;
    }
    return st;
  }

  public static String HexFromBytes(byte[] data)
  {
    int ofs = 0; int len = 0;
    StringBuffer sbuf = new StringBuffer();
    sbuf.setLength(len << 1);

    int pos = 0;
    int c = ofs + len;

    while (ofs < c)
    {
      sbuf.setCharAt(pos++, HEXTAB[(data[ofs] >> 4 & 0xF)]);
      sbuf.setCharAt(pos++, HEXTAB[(data[(ofs++)] & 0xF)]);
    }
    return sbuf.toString().toUpperCase();
  }

  public static byte[] fromHexString(String in) {
    byte[] bts = new byte[in.length() / 2];
    for (int i = 0; i < bts.length; ++i)
      bts[i] = (byte)Integer.parseInt(in.substring(2 * i, 2 * i + 2), 16);

    return bts;
  }

  public static void ChangeEndian(byte[] array, int ofs) {
    byte b0 = array[(ofs + 0)];
    byte b1 = array[(ofs + 1)];
    array[(ofs + 0)] = array[(ofs + 3)];
    array[(ofs + 1)] = array[(ofs + 2)];
    array[(ofs + 2)] = b1;
    array[(ofs + 3)] = b0;
  }

  public static byte[] BytesFromInt(int i, boolean toLittleEndian) {
    byte[] array = new byte[4];
    array[0] = (byte)(i >>> 24 & 0xFF);
    array[1] = (byte)(i >> 16 & 0xFF);
    array[2] = (byte)(i >> 8 & 0xFF);
    array[3] = (byte)(i & 0xFF);
    if (toLittleEndian)
      ChangeEndian(array, 0);
    return array;
  }

  public static long BytesToLong(byte[] arr, int ofs) {
    byte[] tmp = new byte[8];
    for (int i = 0; i < 8; ++i)
      tmp[i] = arr[(ofs + i)];

    long accum = 0L;
    int i = 0;
    for (int shiftBy = 0; shiftBy < 64; shiftBy += 8) {
      accum |= (tmp[i] & 0xFF) << shiftBy;
      ++i;
    }
    return accum;
  }

  public static float BytesToFloat(byte[] arr, int ofs, boolean changeEndian) {
    int fl = BytestoInt(arr, 0, changeEndian);
    return Float.intBitsToFloat(fl);
  }

  public static byte[] WordFromInteger(int i, boolean toLittleEndian) {
    byte[] Bint = BytesFromInt(i, toLittleEndian);
    byte[] toReturn = new byte[2];
    if (toLittleEndian)
      System.arraycopy(Bint, 0, toReturn, 0, 2);
    else
      System.arraycopy(Bint, 0, toReturn, 2, 2);
    Bint = null;
    return toReturn;
  }

  public static String longToHexStr(Long l, boolean toLittleEndian) throws IOException {
    ByteArrayOutputStream doubleByteArray = new ByteArrayOutputStream();
    DataOutputStream Data = new DataOutputStream(doubleByteArray);
    Data.writeLong(l.longValue());
    Data.flush();
    byte[] temp = doubleByteArray.toByteArray();
    Data.close();
    doubleByteArray.close();
    Data = null;
    doubleByteArray = null;
    if (toLittleEndian) {
      int i = 0; for (int j = 7; i < 4; ) {
        byte tempo = temp[j];
        temp[j] = temp[i];
        temp[i] = tempo;

        ++i; --j;
      }

    }

    return HexFromBytes(temp);
  }

  public static String HexByteFromInteger(int i) {
    String hx = Integer.toHexString(i);
    if (hx.length() < 2)
      hx = "0" + hx;
    else hx = hx.substring(0, 2);
    return hx;
  }

  public static String FloatToHexStr(float f, boolean toLittleEndian) {
    String toReturn = "";
    byte[] temp = BytesFromInt(Float.floatToRawIntBits(f), toLittleEndian);
    toReturn = HexFromBytes(temp);
    temp = null;
    return toReturn;
  }

  public static int BytestoInt(byte[] data, int ofs, boolean changeEndian) {
    byte[] temp = { data[(ofs + 0)], data[(ofs + 1)], data[(ofs + 2)], data[(ofs + 3)] };
    if (changeEndian)
      ChangeEndian(temp, 0);
    int bits = temp[0] << 24 | (temp[1] & 0xFF) << 16 | (temp[2] & 0xFF) << 8 | temp[3] & 0xFF;

    return bits;
  }

  public static String md5(String key)
  {
    byte[] uniqueKey = key.getBytes();
    byte[] hash = null;
    try
    {
      hash = MessageDigest.getInstance("MD5").digest(uniqueKey);
    } catch (NoSuchAlgorithmException e) {
      throw new Error("no MD5 support in this VM");
    }

    StringBuffer hashString = new StringBuffer();
    for (int i = 0; i < hash.length; ++i) {
      String hex = Integer.toHexString(hash[i]);
      if (hex.length() == 1) {
        hashString.append('0');
        hashString.append(hex.charAt(hex.length() - 1));
      } else {
        hashString.append(hex.substring(hex.length() - 2)); }
    }
    return hashString.toString();
  }

  public static long checkSum(byte[] data) {
    Checksum checksumEngine = new CRC32();
    checksumEngine.update(data, 0, data.length);
    return checksumEngine.getValue();
  }
}

[quote=4L1S0N]ae pessoal eu achei esse codigo aqui nos arquivos .class sera que é ele que abre/descodifica o arquivo ?
[/quote]
Aparentemente não. Essa classe só fornece métodos utilitários para converter String para códigos hexa, calcular MD5, etc… Essa classe deve ser usada para a criptografia, mas o algoritmo não está nela.

Você só poderá ter certeza se você souber exatamente como o arquivo é gerado (e, consequentemente descriptografado).

marcos poderia me ajudar por favor?.. isso é muito importante pra min gostaria que voce pelomenos desse uma olhada nos arquivos .class do programa para me falar qual a codificacao do arquivo ou um meio de abrir o mesmo obrigado ia ser uma ótima ajuda amigo e si isso te ajudar a extensao do arquivo ou tipo sei la é .data ele é de um jogo online chamado Perfect World

Não sei porque é tão importante… será que você precisa trapacear no jogo mesmo?

De qualquer forma, toda a lógica se encontra na classe gshop (procure por algum decompilador, como o JD-GUI, e veja você mesmo).

bom ai ja nao seria pra min trapacear no jogo msm por que existem coisas mais simples neh ^^ é por que eu tenho um Servidor desse jogo e preciso criar uma ferramenta para abrir o arquivo editalo e salvar o mesmo de novo entao por isso ta tao dificil ^^