zoukankan      html  css  js  c++  java
  • android逆向入门及工具下载

    本文所用到的工具下载:

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

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

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

    image

    里面包含了的文件有:

    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文件:

    image

    执行反编译之后:

    <?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的逆向工具。程序的界面如图所示:

    image

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

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

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

    执行代码

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

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

    image

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

    image

    这个代码和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包,即可看到源代码了。

  • 相关阅读:
    先装Net Framework 后 装 IIS的处理办法
    post请求和get请求的区别
    再说重写IHttpHandler,实现前后端分离
    自定义VS的ItemTemplates 实现任意文件结构
    自动生成 Lambda查询和排序,从些查询列表so easy
    sql表分区
    关于Window Server2008 服务器上无法播放音频文件的解决方案
    Visifire Chart相关属性详解
    SQL Server数据库定时自动备份
    在SQL中 给字符串补0方法
  • 原文地址:https://www.cnblogs.com/study-development/p/4102681.html
Copyright © 2011-2022 走看看