重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
package test;
10年积累的成都网站设计、成都网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先做网站设计后付款的网站建设流程,更有民权免费网站建设让你可以放心的选择与我们合作。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpTest {
private String u;
private String encoding;
public static void main(String[] args) throws Exception {
HttpTest client = new HttpTest("", "UTF-8");
client.run();
}
public HttpTest(String u, String encoding) {
this.u = u;
this.encoding = encoding;
}
public void run() throws Exception {
URL url = new URL(u);// 根据链接(字符串格式),生成一个URL对象
HttpURLConnection urlConnection = (HttpURLConnection) url
.openConnection();// 打开URL
BufferedReader reader = new BufferedReader(new InputStreamReader(
urlConnection.getInputStream(), encoding));// 得到输入流,即获得了网页的内容
String line; // 读取输入流的数据,并显示
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
}
根据具体问题类型,进行步骤拆解/原因原理分析/内容拓展等。
具体步骤如下:/导致这种情况的原因主要是……
请搜索反编译,jad decompile,可以安装在myeclipse等java开发工具中,可以直接打开.class文件查看源代码,所以答案是可以破解。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpTest {
String urlString;
public static void main(String[] args) throws Exception {
HttpTest client = new HttpTest(网址);
client.run();
}
public HttpTest(String urlString) {
this.urlString = urlString;
}
public void run() throws Exception {
//生成一个URL对象
URL url = new URL(urlString);
//打开URL
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
//得到输入流,即获得了网页的内容
BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection
.getInputStream()));
String line;
// 读取输入流的数据,并显示
while ((line = reader.readLine()) != null){
System.out.println(line);
}
}
}
一.破解工具预备
要破解JAVA软件,必须要反编译用JAVA编写的类文件。由于网上大虾们的支持,许多反编译软件被研制出来
其中,我经常使用的是:
1. cavaj Java Decompile 1.11
2.Java源代码反编译专家(该软件支持目录编译)
3.JAD
这三个软件各有优缺点:前二个软件是GUI界面,使用起来很方便。尤其是"Java源代码反编译专家",支持
目录编译,用起来很得心应手;第三个软件JAD功能最强,由于是字符界面,但是相对初学者比较难一点。
二.破解步骤
1.首先分析批处理文件,找到第一个调用的CLASS。
在分析iavaZIP20软件的iavaZIP2.bat,我把最重要的一句COPY到下行:
com.sfs.app.iavazip20.iavaZIP20 %1 %2 %3 %4 %5 %6 %7 %8 %9
可以知道,在com\sfs\app\iavazip20的目录下的iavaZIP20.CLASS就是被调用的第一个CLASS.
2.反编译第一个CLASS,分析MAIN方法,寻找版本控制的代码段
我用“cavaj Java Decompile 1.11”编译iavaZIP20.class文件,很快就可以得到该软件的JAVA代码,
main方法的全部代码如下:
public static void main(String args[])
{
iavaZIP20 iavazip20 = new iavaZIP20(args);
if(iavazip20.isEXPired())
{
System.out.println("iavaZIP20 trial time has expired. Please purchase and enter licence key.");
for(_cls13 _lcls13 = new _cls13(iavazip20, true); _lcls13.expirationFrame.isShowing();)
{
try
{
Thread.sleep(1000L);
}
catch(InterruptedException _ex) { }
}
if(_cls66.isSerialRegcode(((_cls1) (iavazip20)).res.getProperty("user.id")))
{
iavazip20._fld6.remove(iavazip20._fld4);
iavazip20._fld6.add("Right", iavazip20._fld4 = iavazip20._fld0 = new _cls13(iavazip20));
iavazip20._fld6.validate();
} else
{
iavazip20.dispose();
System.exit(0);
}
}
iavazip20.show();
}
很明显,iavazip20.isExpired()就是版本控制的代码。
3.分析版本控制的语句,找到破解的方法
由于isExpired()的方法的代码如下:
public boolean isExpired()
{
return !_cls66.isSerialRegcode(super.res.getProperty("user.id", "0")) Long.parseLong(super.res.getProperty("magic")) magicTime System.currentTimeMillis();
}
看了com\sfs\app\iavazip20的所有文件,由于该文件夹中的文件都是从1-66之间的整数问文件名,“class”为扩展名的类文件,分析“!_cls66.isSerialRegcode”的方法是破解的要害类应该就是66.class文件
/**
* @description:
* @author chenshiqiang E-mail:csqwyyx@163.com
* @date 2014年9月7日 下午2:51:50
* @version 1.0
*/
package com.example.baidumap;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.ViewPager;
import android.text.Editable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ExpandableListView;
import android.widget.ListView;
import com.baidu.mapapi.map.offline.MKOLSearchRecord;
import com.baidu.mapapi.map.offline.MKOLUpdateElement;
import com.baidu.mapapi.map.offline.MKOfflineMap;
import com.baidu.mapapi.map.offline.MKOfflineMapListener;
import com.example.baidumap.adapters.OfflineExpandableListAdapter;
import com.example.baidumap.adapters.OfflineMapAdapter;
import com.example.baidumap.adapters.OfflineMapManagerAdapter;
import com.example.baidumap.interfaces.OnOfflineItemStatusChangeListener;
import com.example.baidumap.models.OfflineMapItem;
import com.example.baidumap.utils.CsqBackgroundTask;
import com.example.baidumap.utils.ToastUtil;
import com.example.system.R;
public class BaiduOfflineMapActivity extends Activity implements MKOfflineMapListener, OnOfflineItemStatusChangeListener
{
// ------------------------ Constants ------------------------
// ------------------------- Fields --------------------------
private ViewPager viewpager;
private PagerTabStrip pagertab;
private MySearchView svDown;
private ListView lvDown;
private MySearchView svAll;
private ExpandableListView lvWholeCountry;
private ListView lvSearchResult;
private ListView views = new ArrayListView(2);
private ListString titles = new ArrayListString(2);
private MKOfflineMap mOffline = null;
private OfflineMapManagerAdapter downAdapter;
private OfflineMapAdapter allSearchAdapter;
private OfflineExpandableListAdapter allCountryAdapter;
private ListOfflineMapItem itemsDown; // 下载或下载中城市
private ListOfflineMapItem itemsAll; // 所有城市,与热门城市及下载管理对象相同
private ListOfflineMapItem itemsProvince;
private ListListOfflineMapItem itemsProvinceCity;
// ----------------------- Constructors ----------------------
// -------- Methods for/from SuperClass/Interfaces -----------
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_offline_map);
// final String packname = this.getPackageName();
// PackageInfo packageInfo;
// try
// {
// packageInfo = this.getPackageManager().getPackageInfo(packname, PackageManager.GET_SIGNATURES);
//
//
// if (code == -00)
// {
// 初始化离线地图管理
mOffline = new MKOfflineMap();
mOffline.init(this);
initViews();
viewpager.setCurrentItem(1);
// }
// }
// catch (NameNotFoundException e)
// {
// e.printStackTrace();
// }
}
private boolean isResumed = false;
@Override
protected void onResume()
{
super.onResume();
if (!isResumed)
{
isResumed = true;
loadData();
}
}
@Override
protected void onDestroy()
{
super.onDestroy();
mOffline.destroy();
}
/**
*
* @author chenshiqiang E-mail:csqwyyx@163.com
* @param type
* 事件类型: MKOfflineMap.TYPE_NEW_OFFLINE, MKOfflineMap.TYPE_DOWNLOAD_UPDATE, MKOfflineMap.TYPE_VER_UPDATE.
* @param state
* 事件状态: 当type为TYPE_NEW_OFFLINE时,表示新安装的离线地图数目. 当type为TYPE_DOWNLOAD_UPDATE时,表示更新的城市ID.
*/
@Override
public void onGetOfflineMapState(int type, int state)
{
switch (type)
{
case MKOfflineMap.TYPE_DOWNLOAD_UPDATE:
MKOLUpdateElement update = mOffline.getUpdateInfo(state);
if (setElement(update, true) != null)
{
if (itemsDown != null itemsDown.size() 1)
{
Collections.sort(itemsDown);
}
refreshDownList();
}
else
{
downAdapter.notifyDataSetChanged();
}
allSearchAdapter.notifyDataSetChanged();
allCountryAdapter.notifyDataSetChanged();
break;
case MKOfflineMap.TYPE_NEW_OFFLINE:
// 有新离线地图安装
Log.d("OfflineDemo", String.format("add offlinemap num:%d", state));
break;
case MKOfflineMap.TYPE_VER_UPDATE:
// 版本更新提示
break;
}
}
/**
* 百度下载状态改变(暂停--》恢复)居然不回调,所以改变状态时自己得增加接口监听状态改变刷新界面
*
* @author chenshiqiang E-mail:csqwyyx@163.com
* @param item
* 有状态改变的item
* @param removed
* item是否被删除
*/
@Override
public void statusChanged(OfflineMapItem item, boolean removed)
{
if (removed)
{
for (int i = itemsDown.size() - 1; i = 0; i--)
{
OfflineMapItem temp = itemsDown.get(i);
if (temp.getCityId() == item.getCityId())
{
itemsDown.remove(i);
}
}
refreshDownList();
}
else
{
loadData();
downAdapter.notifyDataSetChanged();
}
allSearchAdapter.notifyDataSetChanged();
allCountryAdapter.notifyDataSetChanged();
}
// --------------------- Methods public ----------------------
public void toDownloadPage()
{
viewpager.setCurrentItem(0);
}
// --------------------- Methods private ---------------------
private void initViews()
{
// TODO
viewpager = (ViewPager) findViewById(R.id.viewpager);
pagertab = (PagerTabStrip) findViewById(R.id.pagertab);
LayoutInflater inf = LayoutInflater.from(this);
View v1 = inf.inflate(R.layout.view_offline_download, null, false);
svDown = (MySearchView) v1.findViewById(R.id.svDown);
lvDown = (ListView) v1.findViewById(R.id.lvDown);
views.add(v1);
View v2 = inf.inflate(R.layout.view_offline_countrys, null, false);
svAll = (MySearchView) v2.findViewById(R.id.svAll);
lvWholeCountry = (ExpandableListView) v2.findViewById(R.id.lvWholeCountry);
lvSearchResult = (ListView) v2.findViewById(R.id.lvSearchResult);
views.add(v2);
titles.add("下载管理");
titles.add("城市列表");
pagertab.setTabIndicatorColor(0xff00cccc);
pagertab.setDrawFullUnderline(false);
pagertab.setBackgroundColor(0xFF38B0DE);
pagertab.setTextSpacing(50);
viewpager.setOffscreenPageLimit(2);
viewpager.setAdapter(new MyPagerAdapter());
svDown.setSearchListener(new MySearchView.SearchListener()
{
@Override
public void afterTextChanged(Editable text)
{
refreshDownList();
}
@Override
public void search(String text)
{
}
});
svAll.setSearchListener(new MySearchView.SearchListener()
{
@Override
public void afterTextChanged(Editable text)
{
refreshAllSearchList();
}
@Override
public void search(String text)
{
}
});
downAdapter = new OfflineMapManagerAdapter(this, mOffline, this);
lvDown.setAdapter(downAdapter);
allSearchAdapter = new OfflineMapAdapter(this, mOffline, this);
lvSearchResult.setAdapter(allSearchAdapter);
allCountryAdapter = new OfflineExpandableListAdapter(this, mOffline, this);
lvWholeCountry.setAdapter(allCountryAdapter);
lvWholeCountry.setGroupIndicator(null);
}
/**
* 刷新下载列表, 根据搜索关键字及itemsDown 下载管理数量变动时调用
*/
private void refreshDownList()
{
String key = svDown.getInputText();
if (key == null || key.length() 1)
{
downAdapter.setDatas(itemsDown);
}
else
{
ListOfflineMapItem filterList = new ArrayListOfflineMapItem();
if (itemsDown != null !itemsDown.isEmpty())
{
for (OfflineMapItem i : itemsDown)
{
if (i.getCityName().contains(key))
{
filterList.add(i);
}
}
}
downAdapter.setDatas(filterList);
}
}
/**
* 刷新所有城市搜索结果
*/
private void refreshAllSearchList()
{
String key = svAll.getInputText();
if (key == null || key.length() 1)
{
lvSearchResult.setVisibility(View.GONE);
lvWholeCountry.setVisibility(View.VISIBLE);
allSearchAdapter.setDatas(null);
}
else
{
lvSearchResult.setVisibility(View.VISIBLE);
lvWholeCountry.setVisibility(View.GONE);
ListOfflineMapItem filterList = new ArrayListOfflineMapItem();
if (itemsAll != null !itemsAll.isEmpty())
{
for (OfflineMapItem i : itemsAll)
{
if (i.getCityName().contains(key))
{
filterList.add(i);
}
}
}
allSearchAdapter.setDatas(filterList);
}
}
private void loadData()
{
new CsqBackgroundTaskVoid(this)
{
@Override
protected Void onRun()
{
// TODO Auto-generated method stub
// 导入离线地图包
// 将从官网下载的离线包解压,把vmp文件夹拷入SD卡根目录下的BaiduMapSdk文件夹内。
// 把网站上下载的文件解压,将\BaiduMap\vmp\l里面的.dat_svc文件,拷贝到手机BaiduMapSDK/vmp/h目录下
int num = mOffline.importOfflineData();
if (num 0)
{
ToastUtil.showToastInfo(BaiduOfflineMapActivity.this, "成功导入" + num + "个离线包", false);
}
ListMKOLSearchRecord all = null;
try
{
all = mOffline.getOfflineCityList();
}
catch (Exception e)
{
e.printStackTrace();
}
if (all == null || all.isEmpty())
{
ToastUtil.showToastInfo(BaiduOfflineMapActivity.this, "未获取到离线地图城市数据,可能有其他应用正在使用百度离线地图功能!", false);
return null;
}
ListMKOLSearchRecord hotCity = mOffline.getHotCityList();
HashSetInteger hotCityIds = new HashSetInteger();
if (!hotCity.isEmpty())
{
for (MKOLSearchRecord r : hotCity)
{
hotCityIds.add(r.cityID);
}
}
itemsAll = new ArrayListOfflineMapItem();
itemsDown = new ArrayListOfflineMapItem();
itemsProvince = new ArrayListOfflineMapItem();
itemsProvinceCity = new ArrayListListOfflineMapItem();
// cityType 0:全国;1:省份;2:城市,如果是省份,可以通过childCities得到子城市列表
// 全国概略图、直辖市、港澳 子城市列表
ArrayListMKOLSearchRecord childMunicipalities = new ArrayListMKOLSearchRecord();
proHot.cityName = "热门城市";
proHot.childCities = cs;
ListMKOLUpdateElement updates = mOffline.getAllUpdateInfo();
if (updates != null updates.size() 0)
{
}
@Override
protected void onResult(Void result)
{
// TODO Auto-generated method stub
refreshDownList();
refreshAllSearchList();
allCountryAdapter.setDatas(itemsProvince, itemsProvinceCity);
}
}.execute();
}
1.编写useSourceViewer 类的基本框架,该类仅包括无返回值的main ()方法,该方法从参数中获取URL,通过输入缓冲和输出缓冲将该URL 原码输出。
2.编写useSourceViewer 类,代码如下:
import java.net.*;
import java.io.*;
public class useSourceViewer
{
public static void main (String[] args)
{
if (args.length 0)
{
try
{
//读入URL
URL u = new URL(args[0]);
InputStream in = u.openStream( );
// 为增加性能存储输入流
in = new BufferedInputStream(in);
// 将输入流连接到阅读器
Reader r = new InputStreamReader(in);
int c;
while ((c = r.read( )) != -1)
{
System.out.print((char) c);
}
Object o = u.getContent( );
System.out.println("I got a " + o.getClass().getName( ));
}
catch (MalformedURLException e)
{
System.err.println(args[0] + " is not a parseable URL");
}
catch (IOException e)
{
System.err.println(e);
}
} // end if
} // end main
} // end SourceViewer}