本文详细介绍了如何反编译一个未被混淆过的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首先新建一个文件夹,如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源文件
Iava Iava是由艾华通联软件有限公司于2008年3月推出的虚拟机平台,是非智能手机的智能化解决方案。
Iava平台由Iava虚拟机(Iava Virtual Machine)和Iava 应用编程接口(Application Programming Interface、简称API)构成。Iava 应用编程接口为Iava应用提供了一个独立于操作系统的标准接口,可分为基本部分和GUI。在PC上安装了IavaIDE和Ivm后就可以进行Iava应用的开发。[编辑本段]Iava平台--概述
Iava是一个运行在操作系统之上的虚拟机平台。通过在普通手机里装入一个虚拟平台(Iava“艾华”平台),使之免费升级为准智能手机,从而通过平台上的各种应用与服务,为手机厂、SP、我们产生收益,形成共赢。Iava平台的第一个应用产品(游戏模拟器)2007年已投入商用,全年装机量达到近700万台,目前国内一线品牌占有率超过80%。[编辑本段]Iava平台--特点与优势
1、完备的安全性保证:
由于IAVA平台采用安全的虚拟机技术,即在物理CPU上模拟设计另一个CPU,应用程序不能直接访问读写操作系统,可以避免死机、返修等恶性错误。
2、多级认证功能:
类似诺基亚最新的操作系统所采用的认证技术,IAVA平台拥有二级认证,未经认证的程序不能调用打电话、发短信及删除系统文件等函数。保证杜绝病毒及恶意程序的攻击破坏。
3、执行效率高:
支持汇编语句,执行效率是JAVA的3-20倍。
4、开发容易、平台稳定:
采用C语言开发程序;IAVA程序可以直接编译为本地程序内置ROM中,也可打包作为下载后安装;Iava平台使用的是Lvc语言,其前身Lava语言从03年起累计已经内置于800多万台文曲星电子辞典、学习机中,已经非常成熟稳定。与标准C有很高的兼容度。支持标准C的大部分库函数,并结合Iava系统其它函数构成了丰富的Iava函数库。
5、跨平台兼容性好:
每种应用程序只需6个版本即可兼容80%以上的机型。即分辨率及输入方式相同的机型程序通用。
6、市场前景广阔:
为价位在千元左右手机提供智能软件平台,解决普通手机无法下载更新软件与服务,升级为“智能”手机。
Iava平台--开发工具
1、IavaIDE:
是艾华公司提供的Iava应用程序PC端开发平台。IavaIDE基于 Visual C++ 60 建立, 所以开发者首先必须安装Vc。该平台用WIN32实现了Iava提供给应用程序的所有API,使应用程序能直接在Vc上进行开发和调试。
2、Iava虚拟机:
PC端安装虚拟机后,把Vc下生产的可执行程序可直接转换为Iava虚拟机运行程序。IavaIDE提供了一套脚本可以将源代码编译,打包为Iava程序,用户只要打开IavaIDE目录下的makefilebat就可以转换为Iava虚拟机运行程序。转换后在工程目录下生成一个lav文件。此lav文件就可以在手机上运行的Iava程序
3、应用程序发布:
编译生成的lav 可在 PC端IavaSimulator下测试,没问题后即可放到手机上发布了。
4、Iava GUI:
Iava平台带有GUI,但允许用户选择是否使用Iava GUI库。
欢迎分享,转载请注明来源:表白网
评论列表(0条)