熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

反編譯、破解JAVA軟件的方法、實例與經驗

2022-06-13   來源: JSP教程 

  前幾天得到一個用JAVA編寫的壓縮軟件iavaZip雖然好用可惜是個試用版本限定的時間一到就不能
  
  用了能不能把這個軟件據為己有呢?本人試圖破解它在不到半個小時的時間裡成功破解了這個JAVA
  
  軟件的注冊碼下面現把這個破解的方法和過程向大家做個詳細的介紹
  
  
  
  一破解工具准備
  
  要破解JAVA軟件必須要反編譯用JAVA編寫的類文件由於網上大蝦們的支持許多反編譯軟件被研制出來
  
  其中我經常使用的是
  
   cavaj Java Decompile
  
  Java源代碼反編譯專家(該軟件支持目錄編譯)
  
  JAD
  
  這三個軟件各有優缺點前二個軟件是GUI界面使用起來很方便尤其是Java源代碼反編譯專家支持
  
  目錄編譯用起來很得心應手第三個軟件JAD功能最強由於是字符界面但是相對初學者比較難一點
  
  
  
  二破解步驟
  
  首先分析批處理文件找到第一個調用的CLASS
  
  在分析iavaZIP軟件的iavaZIPbat我把最重要的一句COPY到下行
  
  comsfsappiavazipiavaZIP % % % % % % % % %
  
  可以知道在com\sfs\app\iavazip的目錄下的iavaZIPCLASS就是被調用的第一個CLASS
  
  
  
  反編譯第一個CLASS分析MAIN方法尋找版本控制的代碼段
  
  我用cavaj Java Decompile 編譯iavaZIPclass文件很快就可以得到該軟件的JAVA代碼
  
  main方法的全部代碼如下
  
  public static void main(String args[])
  
  {
  
  iavaZIP iavazip = new iavaZIP(args);
  
  if(iavazipisExpired())
  
  {
  
  Systemoutprintln(iavaZIP trial time has expired Please purchase and enter licence key);
  
  for(_cls _lcls = new _cls(iavazip true); _lclsexpirationFrameisShowing();)
  
  {
  
  try
  
  {
  
  Threadsleep(L);
  
  }
  
  catch(InterruptedException _ex) { }
  
  }
  
  
  
  if(_clsisSerialRegcode(((_cls) (iavazip))resgetProperty(userid)))
  
  {
  
  iavazip_fldremove(iavazip_fld);
  
  iavazip_fldadd(Right iavazip_fld = iavazip_fld = new _cls(iavazip));
  
  iavazip_fldvalidate();
  
  } else
  
  {
  
  iavazipdispose();
  
  Systemexit();
  
  }
  
  }
  
  iavazipshow();
  
  }
  
  
  
  很明顯iavazipisExpired()就是版本控制的代碼
  
  
  
  
  
  分析版本控制的語句找到破解的方法
  
  由於isExpired()的方法的代碼如下
  
  public boolean isExpired()
  
  {
  
  return !_clsisSerialRegcode(superresgetProperty(userid )) && LongparseLong(superresgetProperty(magic)) + magicTime < System.currentTimeMillis();
  
  }
  
  
  
  看了com\sfs\app\iavazip20的所有文件,由於該文件夾中的文件都是從1-66之間的整數問文件名,“class”為擴展名的類文件,分析“!_cls66.isSerialRegcode”的方法是破解的關鍵類應該就是66.class文件
  
  。Tw.wINgwiT.cOm試圖用iavaj反編譯該文件,居然不能反編譯得到。改用JAD命令
  
  “ jad -p 66.class > java得到部分編譯後代碼摘錄如下
  
  public class _cls
  
  {
  
  
  
  public _cls()
  
  {
  
  }
  
  
  
  public static boolean isSerialRegcode(String s)
  
  {
  
  if(s == null)
  
  return false;
  
  boolean flag = true;
  
  if(slength() != )
  
  flag = false;
  
  if(flag)
  
  {
  
  long l = IntegerparseInt(s);
  
  if(l == L)
  
  flag = false;
  
  if(flag)
  
  {
  
  flag = false;
  
  for(int i = ; (long)i <= 9L; i++)
  
  if(_fld0[i * 2] <= l && _fld0[i * 2 + 1] >= l)
  
  flag = true;
  
  
  
  }
  
  }
  
  return flag;
  
  }
  
  
  
  private static long _fld0[];
  
  private static final long _fld1 = 10L;
  
  
  
  static
  
  {
  
  _fld0 = new long[20];
  
  _fld0[0] = 0xd3f3471L;
  
  _fld0[1] = 0xd3f34d4L;
  
  _fld0[2] = 0x1653939L;
  
  _fld0[3] = 0x165399cL;
  
  _fld0[4] = 0x313abcc9L;
  
  _fld0[5] = 0x313abd2cL;
  
  _fld0[6] = 0x320aa371L;
  
  _fld0[7] = 0x320aa3d4L;
  
  _fld0[8] = 0x11761f91L;
  
  _fld0[9] = 0x11761ff4L;
  
  _fld0[10] = 0xd52b0b9L;
  
  _fld0[11] = 0xd52b11cL;
  
  _fld0[12] = 0x391d5681L;
  
  _fld0[13] = 0x391d56e4L;
  
  _fld0[14] = 0x196c9351L;
  
  _fld0[15] = 0x196c93b4L;
  
  _fld0[16] = 0x185a2d39L;
  
  _fld0[17] = 0x185a2d9cL;
  
  _fld0[18] = 0xc0053a1L;
  
  _fld0[19] = 0xc005404L;
  
  }
  
  }
  
  
  
  代碼if(s.length() != 9),表明sn的長度必須是九位。
  
  代碼 long l = Integer.parseInt(s);
  
  if(l == -1L)
  
  表明sn必須是數字,而且是九位數字。
  
  
  
  代碼:for(int i = 0; (long)i <= 9L; i++)
  
  if(_fld0[i * 2] <= l && _fld0[i * 2 + 1] >= l)
  
  flag = true;
  
  表明,sn必須是小於—fld0[]數組中相鄰數組的值,sn共有10組。
  
  我們注意到
  
  _fld0[0] = 0xd3f3471L;
  
  _fld0[1] = 0xd3f34d4L;
  
  用計算器計算_fld0[0]和_fld0[1]的十進制,得到
  
  _fld0[0]=22246001
  
  _fld0[1]=22246100
  
  也就是你把SN輸入為22246001 - 22246100 中的任何一個數字都是合法的序列號。
  
  
  
  4。經驗總結
  
  1。要選擇不同的工具進行反編譯,
  
  2。破解軟件的目的是為了學習軟件編寫的思想和方法以及個人使用,而不是用於達到商業目的。
  
  3。有好的見解和方法可以和我聯系
  
  

From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19278.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.