布局代码
逻辑代码
package com.barray.helloandroid;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText etUsername = findViewById(R.id.et_username);
EditText etPassword = findViewById(R.id.et_password);
Button btnLogin = findViewById(R.id.btn_login);
btnLogin.setOnClickListener(view -> {
login(etUsername,etPassword);
});
}
private void login(EditText etUsername,EditText etPassword){
String username = etUsername.getText().toString().trim();
String password = etPassword.getText().toString().trim();
Toast.makeText(MainActivity.this,
"登录成功!!!n用户名:" + username + "n密码:" + password, Toast.LENGTH_SHORT).show();
}
}
生成签名
keytool -genkeypair -alias crazyit -keyalg RSA -validity 400 -keystore crazyit.jks 上面命令各选项说明如下: -genkeypair:指定生成数字签名; -alias:指定生成数字签名的别名; -keyalg:指定生成数字签名的算法。使用RSA算法。 -validity:指定生成数字签名的有效期,单位天 -keystore:指定生成数字签名的存储路径。
查看签名信息
keytool -list -v -keystore jks文件的路径 -storepass 密码反编译apk包
工具apktool下载
https://ibotpeaches.github.io/Apktool/install/
具体用法参照
https://ibotpeaches.github.io/Apktool/documentation/
反编译:
java -jar apktool_2.6.0.jar d app-release.apk
编译打包
// 打包生成的文件并没有签名,需要签名 java -jar apktool_2.6.0.jar b app-release -o unsign_new_app.apk
给未签名的应用签名
jarsigner –verbose –keystore new_hello.jks –signedjar new_app.apk unsign_new_app.apk new_hello -verbose 输出签名详细信息 -keystore 指定密钥对的存储路径 -signedjar 后面三个参数分别是 签名后的APK包 未签名的APK包 和 密钥对的别名修改smali文件
把 登录成功 修改成 我修改了登录
// 修改前
const-string v1, "u767bu5f55u6210u529f!!!nu7528u6237u540duff1a"
// 修改后
const-string v1, "u6211u4feeu6539u4e86u767bu5f55u000du000a!!!nu7528u6237u540duff1a"
将dex文件变成可读jar文件
工具dex2jar下载
https://github.com/pxb1988/dex2jar
解压dex2jar.zip解压需要反编译的apk文件,将dex文件复制到dex2jar的解压文件夹下运行
d2j-dex2jar.bat classes.dex // 执行后生成了classes-dex2jar.jar dex2jar classes.dex -> .classes-dex2jar.jar打开jar文件
工具jadx-gui下载
https://github.com/skylot/jadx
反编译后的代码
public class MainActivity extends AppCompatActivity {
private void login(EditText editText, EditText editText2) {
String trim = editText.getText().toString().trim();
String trim2 = editText2.getText().toString().trim();
Toast.makeText(this, "登录成功!!!n用户名:" + trim + "n密码:" + trim2, 0).show();
}
public void lambda$onCreate$0$MainActivity(EditText editText, EditText editText2, View view) {
login(editText, editText2);
}
@Override // androidx.appcompat.app.AppCompatActivity, androidx.fragment.app.FragmentActivity, androidx.activity.ComponentActivity, androidx.core.app.ComponentActivity, android.app.Activity
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.activity_main);
final EditText editText = (EditText) findViewById(R.id.et_username);
final EditText editText2 = (EditText) findViewById(R.id.et_password);
((Button) findViewById(R.id.btn_login)).setOnClickListener(new View.OnClickListener() { // from class: com.barray.helloandroid._$$Lambda$MainActivity$LrykRW0rIDejJ4zylinkgM_Yd5g
@Override // android.view.View.OnClickListener
public final void onClick(View view) {
MainActivity.this.lambda$onCreate$0$MainActivity(editText, editText2, view);
}
});
}
}
反编译之资源包



