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

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

本文详细介绍了如何反编译一个未被混淆过的Android APK,修改smali字节码后,再回编译成APK并更新签名,使之可正常安装。破译后的apk无论输入什么样的用户名和密码都可以成功进入到第二个Activity。

有时难免要反编译一个APK,修改其中的若干关键判断点,然后再回编译成一个全新的可用的apk,这完全是可实现的。若要完成上述工作,需要以下工具,杂家后面会把下载链接也附上。这些软件截止本文发布时,经过杂家确认都是最新的版本。

1APK-Multi-Toolv1011zip 用它来反编译apk,得到smali类型的源码和资源文件。一般来讲,直接解压缩一个apk也可以看到其资源文件,但部分xml是不可阅读的,需用此工具反编译。网上流传较广的是一个经过高人汉化过的版本103,第一次使用这个工具可以用这个汉化的版本,熟悉其命令。但经过杂家测试,这个汉化的版本再回编译apk签名时已经出问题了,签不了,最终用的最新版才ok。

2dex2jar-00915zip 用于将一个apk文件转换成jar类型的文件,转换之后再利用下面的jd-gui工具才能看到其java代码。上面的apk-tool固然强大,但是反编译出来是smali文件,即dalvik字节码,类似汇编语言的一种代码,直接阅读如天书一样,为此我们需要使用dex2jar + jd-gui来得到其java代码,进行阅读找到要修改的关键点。

3jd-gui-036windowszip 可以打开一个jar类型的文件,看到java代码。并能将代码保存,保存后再弄到sourceinsight里就方便看了。最好使用本文所说的最新版本,使用老版本会发现一个BActivity,如果里面有内部类,则又多出一个BActivity$1java,类似这种文件。新版本没这个问题。

4Smali2Java100558zip 用于将smali文件转成java文件,这个工具仅仅是备用。因为用上面三个工具已经能够胜任本文的要求了。

如果第一次接触反编译,不了解smali语法,可以阅读链接1 链接2

下面杂家先上一个Android APK,用来简单模拟用户登录的情况,注意只能是模拟哈。因为正式的apk很少有在本地进行判断的。此apk要求用户输入用户名和密码,如果用户名为yanzi,密码为123,则认为合法,自动跳转到第二个Activity。否则提示用户名或密码不正确。

<span style="font-family:Comic Sans MS;font-size:18px;">package orgyanzidecomdemoactivity;

import orgyanzidecompiledemoR;

import androidappActivity;

import androidcontentIntent;

import androidosBundle;

import androidviewMenu;

import androidviewView;

import androidwidgetButton;

import androidwidgetEditText;

import androidwidgetToast;

public class LoginActivity extends Activity {

EditText loginName = null;

EditText loginPswd = null;

Button loginBtn = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

setContentView(Rlayoutactivity_login);

initUI();

loginBtnsetOnClickListener(new ViewOnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

if(isAllowLogin()){

Intent intent = new Intent(LoginActivitythis, SecondActivityclass);

startActivity(intent);

LoginActivitythisfinish();

}

}

});

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present

getMenuInflater()inflate(Rmenulogin, menu);

return true;

}

private void initUI(){

loginName = (EditText)findViewById(Ridedit_login_name);

loginPswd = (EditText)findViewById(Ridedit_login_pswd);

loginBtn = (Button)findViewById(Ridbtn_login);

}

private boolean isAllowLogin(){

String name = loginNamegetText()toString()trim();

String pswd = loginPswdgetText()toString()trim();

if(name != null && pswd != null){

if(nameequals("") || pswdequals("")){

ToastmakeText(this, "密码或用户名不能为空", ToastLENGTH_SHORT)show();

return false;

}

}

if(nameequals("yanzi") && pswdequals("123")){

return true;

}else{

ToastmakeText(getApplicationContext(), "用户名或密码不符", ToastLENGTH_SHORT)show();

}

return false;

}

}

</span>

附上出处链接:http://blogcsdnnet/yanzi1225627/article/details/38425453

以下是在手机上写代码的步骤(以安卓手机为例):

1、在百度上搜索AIDE程序并下载安装好;

2、打开程序默认进入的JAVA源代码编写界面。系统自动给出了一段JAVA “hello world”源代码。点击右上角的播放器按钮即可编译运行。如果源代码有误编译器会提示错误地方,还是比较人性化的。成功编译则可以看到屏幕上打印出“hello world”两个单词;

3、根据自己需要可以选择编写其他代码就可以了;

以上是在手机上编写代码的步骤,感兴趣的可以试试!

1首先新建一个文件夹,如c:\\myWorkspace

2然后在myWorkspace中再新建一个文件夹,名为你的项目名

3如myProject,然后把你的源代码放到myProject中。

那么现在有文件目录如下

c:\myWorkspace\myProject\src

c:\myWorkspace\myProject\bin

c:\myWorkspace\myProject\build

等等。

4如果你导入的源代码原本就是一个工程,那么2和3可以省略,直接把工程放到myWorkspace下

如c:\myWorkspace\SomeProject

5打开myeclipse 选择工作空间(workspace)为myWorkspace

6点击导航栏 "File"->"New"->"Java Project"

7选择"create project from existing source",并点击"Browse"

8到C盘下选择myProject

9"Project Name" 必须填写与你的工程文件夹名一致。如myProject

10 点击"Finish"完成

build放的应该是编译后的class文件

db放的应该是数据库现相关的文件

res放的是其他资源

src放的是java源文件

欢迎分享,转载请注明来源:表白网

原文地址:https://h5.hunlipic.com/biaobai/2882283.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2024-01-18
下一篇2024-01-18

发表评论

登录后才能评论

评论列表(0条)

    保存