Android逆向工程工具

Android上的编程主要有两种,一种是使用Adroid SDK(Software Development Kit),用Java开发;一种是使用Android NDK(Native Development Kit),用C/C++开发,因为Android内核是基于Linux Kernel的,用C/C++是最便捷的方式但相对复杂。这里针对的是Java开发的方式。

Adroid上的Java虚拟机Dalvik虚拟机和经典java运作模式大致相同,但Dalvik虚拟机是为Adroid系统优化定制过的。

标准的Java开发流程中,编译时用Java JDK(Java Development Kit)编译Java源码文件到.class文件即Java字节码文件(多个.class文件可以打包成.jar文件,仅仅是打包),标准Java虚拟机中运行的是.class字节码。
而Adroid上的Java编译流程中同样需要先编译到.class文件,但还需要Android SDK中的dx工具将.class文件转换成.dex文件(在Dalvik虚拟机中执行的是dex字节码),然后用Android SDK中的打包工具aapt将.dex文件、资源文件、manifest.xml打包成程序包.apk文件,.apk文件就是可以被发布的最终程序。

Mobile移动平台开发中,有种所谓的Native Application原生程序,这是相对Web开发中的Hyrid Application而言的,前面所述的Android上的两种编程方式都可以算作Android平台上的Native Application,iOS平台的Native开发使用Object-C开发、不过现在又要改用Swift语言。
因为移动平台越来越多样复杂,所以前端/客户端Web开发越来越复杂,但通过一个Native Container来提供一个各个平台功能的统一接口是一种趋势,于是就有Hybrid Application模式。Web开发中的Hyrid Application,是指在客户端,用客户机(Android or iOS)上的浏览器,比如iOS中的UIWebView、Android中的WebView作为运行载体,Hyrid Application本身用Html5、CSS、Javascript编写,可用Cordova包装成Native程序存取运行平台的功能、可以一套代码多个移动平台运行,相比于每个平台一套Native Application的开发方式大大减少工作量,但缺点是性能较差,PhoneGap是Cordova的一个变种被Javascript库ExtJS所使用。
https://en.wikipedia.org/wiki/Apache_Cordova#Design_and_rationale

Apache Cordova (formerly PhoneGap) is a mobile application development framework originally created by Nitobi. Adobe Systems purchased Nitobi in 2011, rebranded it as PhoneGap, and later released an open source version of the software called Apache Cordova.[3] Apache Cordova enables software programmers to build applications for mobile devices using CSS3, HTML5, and JavaScript instead of relying on platform-specific APIs like those in Android, iOS, or Windows Phone.[4] It enables wrapping up of CSS, HTML, and JavaScript code depending upon the platform of the device. It extends the features of HTML and JavaScript to work with the device. The resulting applications are hybrid, meaning that they are neither truly native mobile application (because all layout rendering is done via Web views instead of the platform‘s native UI framework) nor purely Web-based (because they are not just Web apps, but are packaged as apps for distribution and have access to native device APIs). Mixing native and hybrid code snippets has been possible since version 1.9.
......
The core of Apache Cordova applications use CSS3 and HTML5 for their rendering and JavaScript for their logic. HTML5 provides access to underlying hardware such as the accelerometer, camera, and GPS. However, browsers‘ support for HTML5-based device access is not consistent across mobile browsers, particularly older versions of Android. To overcome these limitations, Apache Cordova embeds the HTML5 code inside a native WebView on the device, using a foreign function interface to access the native resources of it.[26]

Apache Cordova can be extended with native plug-ins, allowing developers to add more functionalities that can be called from JavaScript, making it communicate directly between the native layer and the HTML5 page. These plugins allow access to the device‘s accelerometer, camera, compass, file system, microphone, and more.

However, the use of Web-based technologies leads some Apache Cordova applications to run slower than native applications with similar functionality.[27] Adobe Systems warns that applications may be rejected by Apple for being too slow or not feeling "native" enough (having appearance and functionality consistent with what users have come to expect on the platform). This can be an issue for some Apache Cordova applications.[28][29]

React前端库的Native功能与Cordova类似,也是提供一个运行平台与应用app之间的功能缓冲层。
https://facebook.github.io/react-native/

1. APKTool
反编译android上的app文件apk到smali代码。apktool反编译.apk文件后会有个smali目录和目录中.smali结尾的文件。
apktool的installation guid:https://ibotpeaches.github.io/Apktool/install/

smali和dex很容易混淆,因为dalvik虚拟机运行的是dex字节码,从.apk文件加载到dalvik虚拟机再运行的流程中,是没有smali代码存在的位置的,而.smali文件和.dex文件可以互相转换,之所以如此,是因为.dex字节码是不容易阅读的,而转换成smali语法的代码则容易阅读的多,也容易修改,修改完.smali后可以再转换成.dex字节码,再用aapt工具重新打包、再重新签名,那么一个经过纂改的.apk文件就完工了,但是前提是得有原先.apk文件的签名密钥,不过对于有些厂商来说,他们的.apk文件的签名密钥可以买到。。。
https://www.quora.com/What-is-smali-in-Android

Smali/Baksmali is an assembler/disassembler for the dex format used by dalvik, Android‘s Java VM implementation. The names "Smali" and "Baksmali" are the Icelandic冰岛语 equivalents of "assembler" and "disassembler" respectively.

https://stackoverflow.com/questions/30837450/what-is-smali-code-android

When you create an application code, the apk file contains a .dex file, which contains binary Dalvik bytecode. This is the format that the platform actually understands. However, it‘s not easy to read or modify binary code, so there are tools out there to convert to and from a human readable representation. The most common human readable format is known as Smali.

But the platform doesn‘t know anything about smali, it‘s just a tool to make it easier to work with the bytecode.

2. Signapk.jar
signapk.jar是android sdk自带的工具,用Android自带的signapk.jar + .x509.pem + .pk8签名应用程序。这是一年多前写的总结,现在找不到了目录了,晕,得重新找。

3. dex2jar
可以将.dex文件反编译成.jar文件,然后.jar文件就可以用jd-jui查看,jd-jui本身可以查看标准java编译成的.jar文件。
https://github.com/pxb1988/dex2jar

4. jd-jui
jd-jui本身可以查看标准java编译成的.jar文件。
http://jd.benow.ca/

5. apkpure.com
是不是烦透了android上的应用程序下载安装都得经过应用商店,那就试试在apkpure.com上查找下载,我自己亲自验证过,apkpure.com可以安全下载apk文件,apk都是经过校验的,没有被替换过,因为我用apk作者或厂商的公开的签名密钥对apkpure.com上下载的apk校验过,是无误的。
不过缺点是,程序自动升级一般得经过应用商店,apkpure.com上下载的apk安装后升级可能要自己手动。

时间: 2025-01-04 00:01:58

Android逆向工程工具的相关文章

Android逆向工程工具 - 3

<Android逆向工程工具 - 1 https://www.cnblogs.com/cuihengchaliao/p/6661871.html>提到经过修改重新打包的apk文件,需要再重新签名才能安装. 再重新签名时,如果是正规途径的修改,原来版本的签名证书可以使用:但如果是不正规途径的apk包修改,重新签名时原来开发者的证书是不可用的,这时修改者一般会用工具自己生成公钥.私钥对和证书,对修改的apk包进行重新签名,但是因为证书和原版的证书不一样,安装时是无法覆盖原版的,同时原版开发者也会自

Android逆向工程工具Dare的使用方法(Mac OS X中)

其实这篇日志很简单,争取用两句话说完.Dare这个工具是宾州大学计算机系发布的apk逆向工程工具.可以将Android系统中使用的apk文件反编译为Java Class文件.目前支持Linux和Mac OS X中使用,在Mac中的使用方法尤其简单,在这个页面:http://siis.cse.psu.edu/dare/downloads.html 提供可执行文件的下载,下载解压之后在终端中进入其目录,输入: bash dare -d apkoutput WeChat_462.apk 上面是以最新的

Android 逆向工程 实践篇

Android逆向工程 实践篇 上篇给大家介绍的是基础+小Demo实践. 如果没有看过的同学可以进去看看.(逆向工程 初篇) 本篇主要给大家介绍如何反编译后修改源码, 并打包运行在手机上. 先介绍下本篇文章用到的工具和资源. 1: Android Killer 1.3.1.0 (工具) 2: crackme.apk 还没有破解之前会提示随意输入用户名密码会提示下面的信息. 下面我们来打开apk, 看看源码是怎么回事. 我先用工具(Android Killer) 打开creckme.apk 这个是

Android逆向工程-破解 哈皮妹-萝莉

转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/18797493 前言 新的一年新的开始,除了继续我的原有课题之外,我还打算研究下Android逆向工程的一些东西,主要包括反编译.Smali.APK打包.签名.反逆向和移动安全等.这篇就是新课题的第一篇文章,不过要牺牲下哈皮妹-萝莉这款应用了.通过对哈皮妹-萝莉的破解,让我更加深刻直观地认识到,Android的安全性是一个多么大的问题,如果我们的应用没有采用特殊手段去阻止破解

推荐10款最常用的Android开发工具

推荐10款最常用的Android开发工具 我们使用各种语言进行开发时,总是会用到各种各样的开发工具.有些开发工具是开发人员的必备品,有些则是为了提高开发效率而用.Android开发同样也会用到多种开发工具,供开发人员设计.创建.测试和发布程序时使用.下面向大家推荐十款常用的Android开发工具. 1.Eclipse w/ADT 虽然Eclipse并非唯一可用于开发Android应用的Java开发环境,但它是目前最欢迎的工具,有很大程度上是因为它的成本很低(免费),但最主要的原因还是它与其他An

Android自动化测试工具实现简述

前言 自动化测试在产品开发和测试中都有着非常重要的作用.在产品开发阶段,可靠又重复性地运行以确保没有引进回归问题:在产品测试阶段,可以节省人力成本和时间成本,并能保证更大范围的覆盖.Android自动化测试工具同样可以节省不少人力和时间成本,对其研究和实现对于提高测试效率具有一定的意义.目前市面上也有不少Android自动化测试工具,本人在现有工具的基础上,加上自己的理解和实践向大家介绍自动化测试工具的原理和实现. 了解自动化测试的一定对Robotium并不陌生,Robotium是一款国外的An

10个不可错过的Android 开发工具

今天麦子学院android开发老师给大家介绍android开发人员必须的10个android开发工具: 1.Eclipse ADT Eclipse ADT 是 Eclipse 平台下用来开发 Android 应用程序的插件.   2.The SDK and AVD Manager 该工具包含很多重要的功能,包括管理不同的 Android SDK 版本(构建目标),你知道的 Android 的版本众多,API上有些兼容性问题.另外该工具还用于管理 Android 虚拟设备配置 (AVD) ,用来配

21.Android 时间工具DateUtil

21.Android 时间工具DateUtil Android 时间工具DateUtil String 转换 Date long 转换 String long 去除 时分秒 计算时间差 24小时制转12小时制 Date 转换 String DateUtil全部源码 String 转换 Date /** * String 转换 Date * * @param str * @param format * @return */ public static Date string2Date(String

Android开发实践:Android交叉编译工具链的使用

前面2篇文章分别介绍了Android NDK编译的命令行参数,以及如何在任意目录使用Android.mk来编译本地c/c++代码,Andriod.mk和ndk-build只不过是Android官方提供了一套封装过的Android交叉编译环境而已,其实,你可以不用它,而直接通过传统的Makefile文件来编译你的c/c++代码的,本文即介绍如何直接通过传统的Makefile文件来编译可用于Android平台的库文件. 经常搞嵌入式开发的朋友对于交叉编译环境应该并不陌生,说白了,就是一组运行在x86