使用ApkTool分析apk文件(windows)

来源:互联网 发布:python获取当前函数名 编辑:程序博客网 时间:2024/06/03 18:48

使用androidstudio生成一个APK文件
方法是:
buildgenerate 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
这里写图片描述
这里面包括了各种开发者相关的信息。

原创粉丝点击