Android由于其代碼是放在dalvik虛擬機上的托管代碼,所以能夠很容易的將其反編譯為我們可以識別的代碼。 之前我寫過一篇文章反編譯Android的apk包到smali文件 然后再重新編譯簽名后打包實現(xiàn)篡改apk的功能。 最近又有一種新的方法來實現(xiàn)直接從Android apk包里的classes.dex文件,把dex碼反編譯到j(luò)ava的.class二進制碼,然后從.class二進制碼反編譯到j(luò)ava源碼想必就不用我來多說了吧。 首先我們需要的工具是dex2jar和jd-gui 其中第一個工具dex2jar是用來把classex.dex文件也就是dex二進制碼轉(zhuǎn)化為java的標準.class二進制碼,然后jd-gui是把標準的.class二進制碼再反編譯為java源碼。 首先從apk包里面提取出classes.dex 放到dex2jar目錄下 然后在命令行下執(zhí)行 dex2jar.bat classes.dex這時執(zhí)行成功后會生成一個classes.dex.dex2jar.jar文件 這個文件再用jd-gui打開,如下圖幾乎跟我自己寫的這個程序的源碼一樣 提供這個反編譯方法主要用于大家學(xué)習(xí)與研究,有問題可以與我郵件討論。 希望大家不要用這個方法從事惡意的活動,畢竟,別人辛辛苦苦寫程序也不容易,用這個方法可以大致的學(xué)習(xí)到別人寫的程序的邏輯,架構(gòu),希望對大家有所幫助。 Android 逆向apk程序的心得 本文主要介紹如何逆向一個Android的APK應(yīng)用程序,本文提供的方法僅供研究學(xué)習(xí)之用。 本文需要用到的工具有 jdk 這個用于搭建java運行環(huán)境 AXMLPrinter2.jar 這個用于逆向.xml文件 baksmali.jar 這個用于逆向classex.dex文件 由于Android的.apk文件實際上就是一個zip文件 可以直接用winrar打開

成都創(chuàng)新互聯(lián)公司專注于企業(yè)全網(wǎng)營銷推廣、網(wǎng)站重做改版、富順網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5、成都商城網(wǎng)站開發(fā)、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為富順等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
通過dx工具將jar包中所有的類打包編譯為一個名為classes.dex的文件。
該工具在
sdk的build-tools里面比如build-tools\19.1.0
cmd切換目錄到該文件夾下,執(zhí)行
注意 待統(tǒng)計.jar 也應(yīng)該在該目錄下,或者其它目錄,如:
輸入完命令,點擊回車,等執(zhí)行完后,在改目錄已經(jīng)生成了我們需要的dex文件。
如果有興趣的話可以繼續(xù)看下一篇
java統(tǒng)計apk或者jar、dex方法數(shù)
可使用android自帶的httpclient框架實現(xiàn)向服務(wù)器發(fā)起get或post請求,以下為完整的示例代碼:
1. GET 方式傳遞參數(shù)
//先將參數(shù)放入List,再對參數(shù)進行URL編碼
ListBasicNameValuePair params = new LinkedListBasicNameValuePair();
params.add(new BasicNameValuePair("param1", "數(shù)據(jù)")); //增加參數(shù)1
params.add(new BasicNameValuePair("param2", "value2"));//增加參數(shù)2
String param = URLEncodedUtils.format(params, "UTF-8");//對參數(shù)編碼
String baseUrl = "服務(wù)器接口完整URL";
HttpGet getMethod = new HttpGet(baseUrl + "?" + param);//將URL與參數(shù)拼接
HttpClient httpClient = new DefaultHttpClient();
try {
HttpResponse response = httpClient.execute(getMethod); //發(fā)起GET請求
Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //獲取響應(yīng)碼
Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8"));//獲取服務(wù)器響應(yīng)內(nèi)容
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
2. POST方式 方式傳遞參數(shù)
//和GET方式一樣,先將參數(shù)放入List
params = new LinkedListBasicNameValuePair();
params.add(new BasicNameValuePair("param1", "Post方法"));//增加參數(shù)1
params.add(new BasicNameValuePair("param2", "第二個參數(shù)"));//增加參數(shù)2
try {
HttpPost postMethod = new HttpPost(baseUrl);//創(chuàng)建一個post請求
postMethod.setEntity(new UrlEncodedFormEntity(params, "utf-8")); //將參數(shù)填入POST Entity中
HttpResponse response = httpClient.execute(postMethod); //執(zhí)行POST方法
Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //獲取響應(yīng)碼
Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8")); //獲取響應(yīng)內(nèi)容
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
首先需要說明的是,在Android中用于輸入的控件是EditText;
對EditText使用getText()方法,返回一個Editable對象,對這個對象使用toString()方法,獲得一個String對象;
使用Integer.parseInt(String str);方法可以將String對象轉(zhuǎn)換成Int型數(shù)據(jù);
最后對TextView對象使用setText()方法,需要注意的是這個方法接受String對象,或者int型資源ID;
private EditText etvalue2;
private EditText etvalue1;
private TextView textView;
private int value1;
private int value2;
private int result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=(TextView)findViewById(R.id.textView);
etvalue1 = (EditText) findViewById(R.id.editText);
etvalue2=(EditText)findViewById(R.id.editText2);
findViewById(R.id.btn_run).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
value1 =Integer.parseInt(etvalue1.getText().toString()) ;
value2 = Integer.parseInt(etvalue2.getText().toString());
result =value1+value2;
textView.setText(""+result+"");
}
});
}
分享
String s=Integer.toBinaryString(363); //二進制串
String a=s.charAt(bs.length()-index); //取第index位
java.lang.Integer這個API包中有進制轉(zhuǎn)換的函數(shù)
public static String toBinaryString(int i)
public static String toHexString(int i)
public static String toOctalString(int i)
這3個函數(shù)都可以將十進制的整數(shù)轉(zhuǎn)換成二、一六、八進制數(shù)
新聞名稱:android二進制,android二進制 后六位 異或
文章源于:http://chinadenli.net/article9/dsihsih.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、自適應(yīng)網(wǎng)站、網(wǎng)站排名、建站公司、品牌網(wǎng)站設(shè)計、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)