首页 养生问答 疾病百科 养生资讯 女性养生 男性养生

为什么我用show java手机版反编译出来的工程用AIDE打开会有很多错误?

发布网友 发布时间:2022-04-24 08:35

我来回答

2个回答

热心网友 时间:2023-10-09 04:12

本文详细介绍了如何反编译一个未被混淆过的Android APK,修改smali字节码后,再回编译成APK并更新签名,使之可正常安装。破译后的apk无论输入什么样的用户名和密码都可以成功进入到第二个Activity。
有时难免要反编译一个APK,修改其中的若干关键判断点,然后再回编译成一个全新的可用的apk,这完全是可实现的。若要完成上述工作,需要以下工具,杂家后面会把下载链接也附上。这些软件截止本文发布时,经过杂家确认都是最新的版本。
1.APK-Multi-Toolv1.0.11.zip 用它来反编译apk,得到smali类型的源码和资源文件。一般来讲,直接解压缩一个apk也可以看到其资源文件,但部分xml是不可阅读的,需用此工具反编译。网上流传较广的是一个经过高人汉化过的版本1.0.3,第一次使用这个工具可以用这个汉化的版本,熟悉其命令。但经过杂家测试,这个汉化的版本再回编译apk签名时已经出问题了,签不了,最终用的最新版才ok。
2.dex2jar-0.0.9.15.zip 用于将一个apk文件转换成jar类型的文件,转换之后再利用下面的jd-gui工具才能看到其java代码。上面的apk-tool固然强大,但是反编译出来是smali文件,即dalvik字节码,类似汇编语言的一种代码,直接阅读如天书一样,为此我们需要使用dex2jar + jd-gui来得到其java代码,进行阅读找到要修改的关键点。
3.jd-gui-0.3.6.windows.zip 可以打开一个jar类型的文件,看到java代码。并能将代码保存,保存后再弄到sourceinsight里就方便看了。最好使用本文所说的最新版本,使用老版本会发现一个BActivity,如果里面有内部类,则又多出一个BActivity$1.java,类似这种文件。新版本没这个问题。
4.Smali2Java.1.0.0.558.zip 用于将smali文件转成java文件,这个工具仅仅是备用。因为用上面三个工具已经能够胜任本文的要求了。
如果第一次接触反编译,不了解smali语法,可以阅读链接1 链接2
下面杂家先上一个Android APK,用来简单模拟用户登录的情况,注意只能是模拟哈。因为正式的apk很少有在本地进行判断的。此apk要求用户输入用户名和密码,如果用户名为yanzi,密码为123,则认为合法,自动跳转到第二个Activity。否则提示用户名或密码不正确。

<span style="font-family:Comic Sans MS;font-size:18px;">package org.yanzi.decomdemo.activity;

import org.yanzi.decompiledemo.R;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class LoginActivity extends Activity {

EditText loginName = null;
EditText loginPswd = null;
Button loginBtn = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
initUI();
loginBtn.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(isAllowLogin()){
Intent intent = new Intent(LoginActivity.this, SecondActivity.class);
startActivity(intent);
LoginActivity.this.finish();
}
}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.login, menu);
return true;
}
private void initUI(){
loginName = (EditText)findViewById(R.id.edit_login_name);
loginPswd = (EditText)findViewById(R.id.edit_login_pswd);
loginBtn = (Button)findViewById(R.id.btn_login);
}
private boolean isAllowLogin(){
String name = loginName.getText().toString().trim();
String pswd = loginPswd.getText().toString().trim();
if(name != null && pswd != null){
if(name.equals("") || pswd.equals("")){
Toast.makeText(this, "密码或用户名不能为空", Toast.LENGTH_SHORT).show();
return false;
}
}
if(name.equals("yanzi") && pswd.equals("123")){
return true;
}else{
Toast.makeText(getApplicationContext(), "用户名或密码不符", Toast.LENGTH_SHORT).show();
}
return false;
}

}
</span>

附上出处链接:http://blog.csdn.net/yanzi1225627/article/details/38425453

热心网友 时间:2023-10-09 04:13

需要把net.sf.jasperreports.engine.*这个包导入到这个工程中,方法如下:
  右击项目-->Build Path -->configure build path,找到Libraries标签页,在列表框底部找到“JRE System Library”这一项,选中它并单击“Remove”按钮,然后再单击“Add Library”按钮,在弹出窗口中选中“JRE System Library” --> Next -->Finish
  1.导入jar包
  2,Configure Build Path
  3,把白色的都remove
  4,Add JARs
  5,打开WebContent → Web-INF → lib ;把所有的jar选上。
  6,最后点击OK追问我用的是手机版😰

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com