破解安卓程序的helloworld

一、环境及其工具

win10、AS、Apktool反编译工具、反编译后的签名工具APKSign
Apktool反编译环境搭建
在https://github.com/iBotPeaches/Apktool 的Links/Downloads中下载apktool_2.4.1.jar,修改为apktool.jar,下载文件Apktool/scripts/windows/apktool.bat,将apktool.jarapktool_2.4.1.jar放在同一目录,并且配置环境变量

二、编写带签名的demo

(1)功能介绍
用户名与注册码匹配则显示“注册成功”,否则显示“注册失败”(用户名的翻转等于注册码则代表匹配)
破解安卓程序的helloworld_第1张图片
破解安卓程序的helloworld_第2张图片
(2)主要代码


//MainActivity.java

package com.example.mi.crackme;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


public class MainActivity extends AppCompatActivity {

    private Button btn;
    private TextView tv;
    private EditText etUserName;
    private EditText etSN;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn = (Button)findViewById(R.id.button);
        tv = (TextView) findViewById(R.id.textView);
        etUserName = (EditText)findViewById(R.id.etUserName);
        etSN = (EditText)findViewById(R.id.etSN);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String userName = etUserName.getText().toString();
                String sn = etSN.getText().toString();
                if(checkSN(userName,sn))
                    tv.setText("注册成功!");
                else
                    tv.setText("注册失败!");
            }
        });
    }

    private boolean checkSN(String userName, String sn) {
        if(userName==null || userName.length()==0)
            return false;
        if(sn==null || sn.length()==0)
            return false;
        //注册码sn等于userName反过来
        if(userName.length()!=sn.length())
            return false;
        int len = userName.length();
        for(int i=0;i


    


    

    

    

(3)签名
破解安卓程序的helloworld_第3张图片
得到签名的app
破解安卓程序的helloworld_第4张图片

三、反编译代码、修改逻辑、重新打包

(1)基本步骤

//1.对签名的app进行反编译,得到反编译的代码放在文件夹test中
apktool d ./app-release.apk -o test
//2.分析test中smali代码,并且修改逻辑
//3.对修改好的test代码打包新的app(未签名)
apktool b test -o new.apk
//4.用签名工具对new.apk进行签名

(2)对smali代码分析
//对MainActivity$1.smali代码分析有:
破解安卓程序的helloworld_第5张图片
破解安卓程序的helloworld_第6张图片
//进一步分析疑似中文字符有:
在https://tool.chinaz.com/tools/unicode.aspx 中进行字符转换有:
破解安卓程序的helloworld_第7张图片
破解安卓程序的helloworld_第8张图片
因此,找到破解的突破口,修改代码如下:
破解安卓程序的helloworld_第9张图片
附录: 代码相关资料下载Apktools破解安卓程序

你可能感兴趣的:(游戏安全)