日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android之反编译

發布時間:2023/12/9 Android 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android之反编译 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

反編譯

創建安卓項目,并編寫示例代碼,編譯打包

  • 布局代碼
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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"android:paddingStart="15dp"android:paddingEnd="15dp"android:orientation="vertical"android:gravity="center"tools:context=".MainActivity"><EditTextandroid:hint="請輸入用戶名"android:id="@+id/et_username"android:layout_width="match_parent"android:layout_height="wrap_content" /><EditTextandroid:hint="請輸入密碼"android:id="@+id/et_password"android:layout_width="match_parent"android:layout_height="wrap_content" /><Buttonandroid:id="@+id/btn_login"android:layout_marginTop="30dp"android:text="登錄"android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout>
  • 邏輯代碼
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 {@Overrideprotected 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, "\u767b\u5f55\u6210\u529f!!!\n\u7528\u6237\u540d\uff1a" // 修改后const-string v1, "\u6211\u4fee\u6539\u4e86\u767b\u5f55\u000d\u000a!!!\n\u7528\u6237\u540d\uff1a"

將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
反編譯后的代碼

/* loaded from: classes-dex2jar.jar:com/barray/helloandroid/MainActivity.class */ 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 /* synthetic */ void lambda$onCreate$0$MainActivity(EditText editText, EditText editText2, View view) {login(editText, editText2);}/* JADX INFO: Access modifiers changed from: protected */@Override // androidx.appcompat.app.AppCompatActivity, androidx.fragment.app.FragmentActivity, androidx.activity.ComponentActivity, androidx.core.app.ComponentActivity, android.app.Activitypublic 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.OnClickListenerpublic final void onClick(View view) {MainActivity.this.lambda$onCreate$0$MainActivity(editText, editText2, view);}});} }

反編譯之資源包

總結

以上是生活随笔為你收集整理的Android之反编译的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。