android逆向入门及工具下载

本文所用到的工具下载:

链接:http://pan.baidu.com/s/1i3uw4NN 密码:8hz5

最近在研究如何逆向android的app,于是就有了这篇android逆向入门的总结回馈互联网。

由于Android的.apk文件实际上就是一个zip文件,修改文件后缀后直接可以打开,效果如下图所示:

里面包含了的文件有:

META-INF:这个文件夹是用于保存签名文件,确保包的完整性的

res:apk所要用的资源文件,都是原封不动地保存,我们可以直接提取出来,做汉化时就可以直接阅读string文件然后进行修改

AndroidManifest.xml:编译过后的一个配置文件,用于声明程序中所包含的activity,service以及程序所具有的能力,也就是权限。

resources.arsc:编译过后的一个资源说明文件

classes.dex:重点来了,我们编写的Android程序,在源程序里的所有.java的文件,最终都编译到这样1个.dex文件当中,在Android手机上的dalvik虚拟机上执行。

下面开始讲解如何破解一个app程序的各种信息。

1、逆向.xml文件

由于apk包里的xml文件我们直接用记事本打开还是有一些乱码,所以需要我们还原才能更好的看出。

这里需要用到AXMLPrinter2.jar 工具

具体的则是打开命令行 我们以AndroidManifest.xml为例,输入如下命令:

java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt

有兴趣的也可以写成一个.bat的脚本,方便执行。

执行前的AndroidManifest.xml文件:

执行反编译之后:

<?xml version="1.0" encoding="utf-8"?>
<manifest
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:versionCode="322"
	android:versionName="ver 3.2.2"
	package="com.eoeandroid.wallpapers.christmas"
	>
	<application
		android:label="@7F040000"
		android:icon="@7F020004"
		>
		<activity
			android:label="@7F040001"
			android:name=".Main"
			>
			<intent-filter
				>
				<action
					android:name="android.intent.action.MAIN"
					>
				</action>
				<category
					android:name="android.intent.category.LAUNCHER"
					>
				</category>
			</intent-filter>
		</activity>
		<service
			android:name=".service.SyncDeviceInfosService"
			>
		</service>
		<meta-data
			android:name="com.mobclix.APPLICATION_ID"
			android:value="30c0e2bb-a878-43cb-830b-a39fcae33b0c"
			>
		</meta-data>
	</application>
	<uses-sdk
		android:minSdkVersion="3"
		>
	</uses-sdk>
	<uses-permission
		android:name="android.permission.INTERNET"
		>
	</uses-permission>
	<uses-permission
		android:name="android.permission.SET_WALLPAPER"
		>
	</uses-permission>
	<uses-permission
		android:name="android.permission.WRITE_EXTERNAL_STORAGE"
		>
	</uses-permission>
	<uses-permission
		android:name="android.permission.ACCESS_NETWORK_STATE"
		>
	</uses-permission>
	<uses-permission
		android:name="android.permission.READ_PHONE_STATE"
		>
	</uses-permission>
	<uses-permission
		android:name="android.permission.ACCESS_NETWORK_STATE"
		>
	</uses-permission>
</manifest>

基本能还原的跟源程序大致相同。

2、classes.dex的逆向

关于classes.dex的逆向,需要掌握两种方法。

第一种是将classes.dex反编译成smali格式的文件,然后查看smali基本可以看出程序是如何执行的。

第二种是将classes.dex用dex2jar反编译成.jar格式的文件,再使用jd-gui来查看jar包里面java源代码。

首先介绍第一种方法。这种方法的工具非常多,网上一搜就能搜到。我使用的是一个名叫DiPiPiApk的逆向工具。程序的界面如图所示:

输入dex文件路径或者app路径,再选择smali输出路径,就可以反编译出smali程序代码。

这个程序因为有界面所以比较好用,但是这个程序的作者没有再更新版本了,所以刚开始入门用这个玩玩还行,真要继续做的话,还得换工具。

可以用baksmali.jar这个工具,国外一个对Android研究的很深入的大牛做的。

执行代码

java -jar baksmali.jar -o classout/ classes.dex

将classes.dex能逆向成一个文件夹。

点开其中一个文件 我们继续来看:

这个代码和java源程序已经很像了,关于如何读懂smali程序,就需要更进一步的研究和学习了。

我们上一步已经将classes.dex反编译成了.smali文件,在偿试把它编译成classes.dex吧:

这里会用到smali.jar工具。

输入如下命令:

java -jar smali.jar classout/ -o classes.dex.

我们可以将新生成的classes.dex塞入ApkInstaller.apk里覆盖原来的classes.dex文件,这样我们的apk还是一样能用的。

但是某些apk程序在修改后会出现明明安装了但是无法使用,显示程序未安装。这是因为程序修改了,但是签名没有修改的缘故,使用AndroidResEdit可以为软件重新签名。这里就不再细说了,可以上网查找相关教程。

下面介绍第二种方法。

首先要下载两个工具:dex2jar和JD-GUI。

前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。

首先将apk文件,将后缀改为zip,解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的;

解压下载的dex2jar,将classes.dex复制到dex2jar.bat所在目录。在命令行下定位到dex2jar.bat所在目录

运行:

dex2jar.bat    classes.dex

生成:

classes.dex.dex2jar.jar

生成jar文件的截图如下:

运行JD-GUI(jd-gui.exe),打开上面生成的jar包,即可看到源代码了。

时间: 2024-08-01 10:46:56

android逆向入门及工具下载的相关文章

Android开发工具下载

     在网上看到有关Android开发的常用工具下载,对于国内不能愉快FQ的程序员来说,应该很有帮助.      链接地址在此:http://www.androiddevtools.cn/                    -------------------------首页预览----------------- AndroidDevTools简介 Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的Android

Android逆向从未如此简单

哈,又标题党了..不过我一定竭尽所能,写一篇最亲民的入门文章. 本文仅供学习交流之用,切勿用于非法用途,读者若运用所学知识,进行非法任何商业目的或者非法牟利,一切责任由操作者自行承担,与本人无关.希望读者仅仅从了解原理,保护自身APP尽量减少危害出发来阅读本文. 本文发布自wing的地方酒馆,转载请注明出处. 本文以一个最简单的例子,来教给大家Android逆向入门的一些知识.所以首先我们需要准备一个APK,做的简单一些,就是一个EditText,已经一个按钮,模拟验证注册码. 当验证码填写正确

Android SDK eclipse开发工具全套离线下载

Android Tool sAndroid SDK在线更新镜像服务器 下载地址: http://www.bcoder.cn/?p=640 中国科学院开源协会镜像站地址: IPV4/IPV6: http://mirrors.opencas.cn 端口:80 IPV4/IPV6: http://mirrors.opencas.org 端口:80 IPV4/IPV6: http://mirrors.opencas.ac.cn 端口:80 上海GDG镜像服务器地址: http://sdk.gdgshan

Xamarin.Forms教程Android SDK工具下载安装

Xamarin.Form的Android SDK工具下载安装 本节将讲解如何下载Xamarin.Form的Android SDK工具,并使用其中的工具管理Android SDK,如何创建模拟器等内容. Xamarin.Form下载Android SDK 下载Android SDK具体的步骤如下. (1)打开浏览器,在地址栏中输入Android SDK官网地址http://developer.android.com/sdk/installing/ index.html,打开官网首页. (2)选项D

Android基础入门教程——8.3.1 三个绘图工具类详解

Android基础入门教程--8.3.1 三个绘图工具类详解 标签(空格分隔): Android基础入门教程 本节引言: 上两小节我们学习了Drawable以及Bitmap,都是加载好图片的,而本节我们要学习的绘图相关的 一些API,他们分别是Canvas(画布),Paint(画笔),Path(路径)!本节非常重要,同时也是我们 自定义View的基础哦~好的,话不多说开始本节内容~ 官方API文档:Canvas:Paint:Path: 1.相关方法详解 1)Paint(画笔): 就是画笔,用于设

2015年最新Android基础入门教程目录(完结版)

2015年最新Android基础入门教程目录(完结版) 标签(空格分隔): Android基础入门教程 前言: 关于<2015年最新Android基础入门教程目录>终于在今天落下了帷幕,全套教程 共148节已编写完毕,附上目录,关于教程的由来,笔者的情况和自学心得,资源分享 以及一些疑问等可戳:<2015最新Android基础入门教程>完结散花~ 下面是本系列教程的完整目录: 第一章:环境搭建与开发相关(已完结 10/10) Android基础入门教程--1.1 背景相关与系统架构

《2015最新Android基础入门教程》完结散花~

<2015最新Android基础入门教程>完结散花~ 标签(空格分隔): 反思小结 引言: 从六月底就开始编写这套教程,历时将近五个多月,今天终于写完了,全套教程正文部分148篇, 十大章,从基本UI控件到四大组件,Intent,Fragment,事件处理,数据存储,网络编程,绘图与动画, 多媒体,系统服务等都进行了详细的讲解!代码都是都是在Android Studio上进行编写的,全文 采用Markdown,行文结构清晰,还结合了实际开发中一些常见的问题进行了剖析-由于个人能力的局限, 虽然

Android基础入门教程——8.3.16 Canvas API详解(Part 1)

Android基础入门教程--8.3.16 Canvas API详解(Part 1) 标签(空格分隔): Android基础入门教程 本节引言: 前面我们花了13小节详细地讲解了Android中Paint类大部分常用的API,本节开始我们来讲解 Canvas(画板)的一些常用API,我们在Android基础入门教程--8.3.1 三个绘图工具类详解 中已经列出了我们可供调用的一些方法,我们分下类: drawXxx方法族:以一定的坐标值在当前画图区域画图,另外图层会叠加, 即后面绘画的图层会覆盖前

Android基础入门教程——8.3.11 Paint API之—— ColorFilter(颜色过滤器)(3-3)

Android基础入门教程--8.3.11 Paint API之-- ColorFilter(颜色过滤器)(3-3) 标签(空格分隔): Android基础入门教程 本节引言: 嗯,本来说好今天不写的,还是写吧,毕竟难得空闲哈~,本节给大家带来的是 ColorFilter的第三个子类:PorterDuffColorFilter,看到PorterDuff大家一定不会 陌生吧,假如你看过前面的 Android基础入门教程--8.3.5 Paint API之-- Xfermode与PorterDuff