随着智能手机的普及,功能越来越强大。程序也越来多和复杂化。研究一下android系统的逆向工程也是挺有意思的。 
目前android逆向工程还处于初级阶段。表现在于: 
1.没有完整的动态调试程序。目前由于android系统的bionic并不完全支持POSIX,导致现有编译的gdb不支持多线程无符号调试。(我实验了一下,的确多线程问题比较多,当然,gdb本身也有问题)。所以对于NDK逆向工程比较麻烦,以静态分析为主。 
2.手机本身种类较多,而且android版本繁多,更新较快,增加了逆向的难度。 
但是android系统自身也有好处: 
1.手机系统的简化工作让分析也随着简化。 
2.公开源代码 大不了我修改系统API编译系统来进行API hook。谁也拦不住。(android不支持LD_Library API hook). 
以上谈到的都是arm c,一般用于NDK中的逆向工程。那么对于才用Dalvik虚拟机中的dex程序,逆向就完全没有难度。目前最好的逆向工具是baksmali。综合工具是apktools,甚至于支持动态调试。 
  
如果以前你接触过windows的逆向工程,那么对于android的逆向难度不大。首先谈谈最简单的dex程序逆向。 
  
第一种 dex程序其实就是java。google为了避免版权问题采用的一种技巧。java的逆向工程不用说,已经很成熟了。在java中大规模采用的混淆手段目前在android dex程序中采用得很少,也就是说,dex程序基本就是裸体,任人观赏。smali代码看看你就懂得。很简单,比如我自己写了ultraedit的高亮函数宏,很方便查找smali的函数。用Jgraph写个小程序画出函数内部流程。你懂的。 
  
第二种 就是NDK中的so文件的逆向,正如我前面说的。动态调试比较困难,理论上呢可以自己完全定制系统来实现动态调试,但是,的确没这么多精力。(如果你有时间和精力,可以完全定制一个系统实现兼容GDB的android内核)。那么就是以业界著名的IDA来静态分析。IDA最新版本支持率QEMU的代码段调试。希望将来我们能用上~~~ 那么IDA分析so 文件,根据我的经验,5.4以后的版本才对arm thumb指令处理较好。所以,请注意版本问题。一下就是对elf文件和arm code的理解和分析了。这个以后再说吧。 
  
以上是我对android 逆向工程的一点小小体会和理解,不乏很多错误,请谅解。希望能抛砖引玉。喜欢的朋友可以看看。 
  
BTW:以前写过一点android的汉化逆向之类的,随着时代的进步,工具是越来越多。逆向也越来越方便。但是,google已经开始了加密代码的工作,在market.android.com发布程序时候就能看到。需要紧跟时代啊。55,没钱买iphone来研究它的objectc arm代码了。

android程序逆向工程的更多相关文章

  1. 【定有惊喜】android程序员如何做自己的API接口?php与android的良好交互(附环境搭建),让前端数据动起来~

    一.写在前面 web开发有前端和后端之分,其实android还是有前端和后端之分.android开发就相当于手机app的前端,一般都是php+android或者jsp+android开发.androi ...

  2. 正在运行的android程序,按home键之后退回到桌面,在次点击程序图标避免再次重新启动程序解决办法

    正在运行的android程序,按home键之后退回到桌面,在次点击程序图标避免再次重新启动程序解决办法 例如:一个android程序包含两个Activity,分别为MainActivity和Other ...

  3. 怎么让我们自己开发的Android程序设为默认启动

    怎么让我们自己开发的Android程序设为默认启动呢?其实很简单,只要在AndroidManifest.xml文件中配置一下首次启动的那个Activity即要. <activity        ...

  4. Android程序crash处理

    Android程序crash处理 时间 2014-11-24 13:45:37  CSDN博客 原文  http://blog.csdn.net/allen315410/article/details ...

  5. 【Bugly干货分享】手把手教你逆向分析 Android 程序

    很多人写文章,喜欢把什么行业现状啊,研究现状啊什么的写了一大通,感觉好像在写毕业论文似的,我这不废话,先直接上几个图,感受一下. 第一张图是在把代码注入到地图里面,启动首页的时候弹出个浮窗,下载网络的 ...

  6. android开发------第一个android程序

    好吧,现在我们就一起来写第一个android程序,看它带给了我们什么.sdk的使用和虚拟机的创建我就不说了.项目创建过程先略过,不太重要. 那第一个程序我们能学到什么知识呢?一起看吧.^-^ 在IDE ...

  7. 小米手机(HM1SW)高通开发android程序全过程

    小米手机(HM1SW)开发android程序全过程 修改历史: 2016年5月9日  --------  整理文档 a.增加了手机基本信息. b.增加360手机助手连接说明 2016年2月26日  - ...

  8. 使用Monitor调试Unity3D Android程序日志输出(非DDMS和ADB)

    使用Monitor调试Unity3D Android程序日志输出(非DDMS和ADB) http://www.cnblogs.com/mrkelly/p/4015245.html 以往调试Androi ...

  9. 使用Visual Studio 2015开发Android 程序

    环境配置: 操作系统:win 7 64位 IDE:Visual Studio 2015 SDK:installer_r24.3.3-windows 安装前提: 编辑hosts文件(在附件可下载)因为安 ...

随机推荐

  1. Mac OS10.9 下python开发环境(eclipse)以及自然语言包NLTK的安装与注意

    折腾了大半天,终于把mbp上python自然语言开发环境搭建好了. 第一步,安装JDK1.7 for mac MacOS10.9是自带python2.7.5的,够用,具体的可以打开终端输入python ...

  2. MVC linq To SQL更新数据库操作

    首先在视图中提交数据,使用Html.BeginForm() @using(Html.BeginForm()) { @Html.EditorForModel() //编辑模板.控制器中传过来的数据 &l ...

  3. 深入理解HBase Memstore

    2013/08/09 转发自http://www.cnblogs.com/shitouer/archive/2013/02/05/configuring-hbase-memstore-what-you ...

  4. 预定义宏_GNUC_ _MSC_VER

    一.预定义__GNUC__宏 1 __GNUC__ 是gcc编译器编译代码时预定义的一个宏.需要针对gcc编写代码时, 可以使用该宏进行条件编译. 2 __GNUC__ 的值表示gcc的版本.需要针对 ...

  5. Django中如何使用django-celery完成异步任务2(转)

    原文链接: http://www.weiguda.com/blog/74/ 在上一篇博文中, 我们介绍了如何在开发环境中使用Celery. 接下来我们介绍一下如何在部署环境使用Celery. 1. 简 ...

  6. CSS3每日一练之选择器-结构性伪类选择器

    <!DOCTYPE HTML> <html> <head> <meta charset="gb2312"> <title> ...

  7. POJ 1584 A Round Peg in a Ground Hole(判断凸多边形,点到线段距离,点在多边形内)

    A Round Peg in a Ground Hole Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4438   Acc ...

  8. 野火STM32 Flash&sd卡模拟U盘

    在USB库文件mass_mal.c中添加对flash和sd读写的函数,USB库调用这些函数从而实现模拟U盘的功能 //mass_mal.c /* Includes ------------------ ...

  9. USB设备不能用。提示Windows 无法启动这个硬件设备。 (代码 19)

    USB,由于其配置信息(注册表中的)不完整或已损坏, Windows 无法启动这个硬件设备. (代码 19) 原因:提示Windows 无法启动这个硬件设备. (代码 19) 处理解决方法: 1) r ...

  10. win2008 64位 + oracle11G 64位 IIS7.5 配置WEBSERVICE

    第一个错误: 安装过程依旧是那样简单,但在配好IIS站点,准备连接数据库的时候出错了,以下是错误提示:System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更 ...