使用androidstudio生成一个APK文件
方法是:
build
→
generate signed apk
生成一个APK文件,在mainifest.xml文件中添加一些权限,
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.VIBRATE" />
就是这些,在MainActivity.java中添加一个Toast
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast.makeText(getApplicationContext(), "发送完毕,你的信息被我偷走了", Toast.LENGTH_SHORT).show();
}
}
生成了apk文件之后从apktool官网下载最新的apktool.jar文件,和apktool.bat文件。把这两个文件保存到c:\windows下,点击apktool.bat文件。
此时可以在任何目录下是用apktool命令,
命令为:apktool d app-release.apk
此时会在工作目录下生成一个同名文件夹app-release
在smali中是反编译得到的smali文件
其中有一个是MainActivity.smali就是我们刚刚修改过的文件:
这是内容可以使用其他工具使其变成可以被jdgui查看的文件形式。
.class public Lcom/example/administrator/myapplication/MainActivity;
.super Landroid/support/v7/app/AppCompatActivity;
.source "MainActivity.java"
# direct methods
.method public constructor <init>()V
.locals 0
.prologue
.line 7
invoke-direct {p0}, Landroid/support/v7/app/AppCompatActivity;-><init>()V
return-void
.end method
# virtual methods
.method protected onCreate(Landroid/os/Bundle;)V
.locals 3
.param p1, "savedInstanceState" # Landroid/os/Bundle;
.prologue
.line 11
invoke-super {p0, p1}, Landroid/support/v7/app/AppCompatActivity;->onCreate(Landroid/os/Bundle;)V
.line 12
const v0, 0x7f04001b
invoke-virtual {p0, v0}, Lcom/example/administrator/myapplication/MainActivity;->setContentView(I)V
.line 13
invoke-virtual {p0}, Lcom/example/administrator/myapplication/MainActivity;->getApplicationContext()Landroid/content/Context;
move-result-object v0
const-string v1, "\u53d1\u9001\u5b8c\u6bd5,\u4f60\u7684\u4fe1\u606f\u88ab\u6211\u5077\u8d70\u4e86"
const/4 v2, 0x0
invoke-static {v0, v1, v2}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object v0
invoke-virtual {v0}, Landroid/widget/Toast;->show()V
.line 14
return-void
.end method
可以使用smali2java使其反编译为java文件
/**
* Generated by smali2java 1.0.0.558
* Copyright (C) 2013 Hensence.com
*/
package com.example.administrator.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.Context;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle p1) {
super.onCreate(p1);
setContentView(0x7f04001b);
Toast.makeText(getApplicationContext(), "\u53d1\u9001\u5b8c\u6bd5,\u4f60\u7684\u4fe1\u606f\u88ab\u6211\u5077\u8d70\u4e86", 0x0).show();
}
}
在original文件夹得到的是manifest.xml文件和一些签名文件在original中还有一个文件夹META-INF其中有三个文件,有一个文件是CERT.RSA可以使用keytool来查看里面的内容:
命令是:>keytool -printcert -file cert.rsa
这里面包括了各种开发者相关的信息。