美文网首页
Android-研究Apk重打包

Android-研究Apk重打包

作者: 放羊娃华振 | 来源:发表于2019-11-29 21:51 被阅读0次

    一、概述

    我之前接手了一个项目,刚入职几天就发现应用商场上有一个几乎一样的应用,功能基本一致,唯一不一样的就是启动页面之前加了广告。之后我就对apk混淆加固处理,完美的规避了这个问题。接下来聊聊他们是怎么破解我们的apk,并且在上面添加广告的!

    二、工具

    几个重要的工具,注意使用最新版本。
    Apktool:https://ibotpeaches.github.io/Apktool/
    JD-GUI:http://jd.benow.ca/
    dex2jar:https://sourceforge.net/projects/dex2jar/

    apktools:主要用户反编译和打包;
    JD-GUI :主要用于对.class文件展示为源码(比如jar文件)
    dex2jar : 主要用于将dex文件转化为jar文件
    大家尽可能的下载最新版本,因为出新版本是有一定的原因的。

    三、不用资源文件的插入页面

    1.首先需要准备一个需要重新打包的Apk,代码如下:
    package com.stormful.android.testrepackage;
    import androidx.appcompat.app.AppCompatActivity;
    import android.os.Bundle;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    }
    
    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="我是原本的App主页"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    
    2.再准备一个假想的广告页面;需要新建一个工程,包名和原始的apk是一致的。
    /**
     * @description 需要插入的页面
     * @author: dzh
     * @CreateDate: ${DATE} ${TIME}
     */
    public class ADActivity extends AppCompatActivity {
    
        private Handler mHandler = new Handler(Looper.getMainLooper());
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mHandler.postDelayed(mCallback, 3000);
        }
    
        private Runnable mCallback = new Runnable() {
            @Override
            public void run() {
                Intent intent = new Intent();
                intent.setComponent(new ComponentName("com.stormful.android.testrepackage",
                        "com.stormful.android.testrepackage.MainActivity"));
                startActivity(intent);
            }
        };
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            mHandler.removeCallbacks(mCallback);
        }
    }
    
    3.反编译上面两个Apk文件。
    apktool d origin.apk  //反编译原始的apk
    apktool d ad.apk      //反编译广告apk
    

    原始反编译后的原始apk信息展示:


    image.png

    反编译后广告apk的信息展示:


    image.png
    4.把广告生成的两个smail文件放到原始apk里面:
    image.png
    5.修改原始apk清单文件,把启动的改为广告的页面,当广告页面展示完再跳转到原始app的页面:
    image.png
    6.重新打包原始apk:
    apktool b origin -o origin_new.apk //重新打包命名为origin_new.apk
    
    image.png
    7.对打包成功的apk进行重新签名:
    image.png
    8.当签名成功之后就可以安装apk了!!!

    四、处理广告页面有xml文件的处理方式:

    1.重需改广告apk的源代码,并加上activity_ad.xml,代码如下:
    public class ADActivity extends AppCompatActivity {
    
        private Handler mHandler = new Handler(Looper.getMainLooper());
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_ad);
            mHandler.postDelayed(mCallback, 3000);
        }
    
        private Runnable mCallback = new Runnable() {
            @Override
            public void run() {
                Intent intent = new Intent();
                intent.setComponent(new ComponentName("com.stormful.android.testrepackage",
                        "com.stormful.android.testrepackage.MainActivity"));
                startActivity(intent);
            }
        };
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            mHandler.removeCallbacks(mCallback);
        }
    }
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:text="i am ad!!!!!" />
    
    </LinearLayout>
    
    2.反编译有xml的广告apk:
    image.png
    3.把布局文件拷到工程:
    image.png
    4.添加布局ID:
    image.png
    5.修改广告页面的布局ID即可:
    image.png
    6.之后需要跟方式一一样的打包、签名就ok了!

    五、总结

    我是对smail语言不了解,才使用创建一个工程,让其生成smail源码再做简单修改的方式实现的。如果你是大牛,你可以直接操作smail源码实现你想要的效果。还有就是怎么签名的细节,我就不再描述了,可以自行学习!

    相关文章

      网友评论

          本文标题:Android-研究Apk重打包

          本文链接:https://www.haomeiwen.com/subject/dukgwctx.html