随着智能手机的普及,功能越来越强大。程序也越来多和复杂化。研究一下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. Tcl之Intro

    Tool command language, a widely used scripting tool that was deveoped for controlling and extending ...

  2. Failed to read artifact descriptor--maven问题总结(能力工场)

    在开发的过程中,作为新手,经常遇到Maven下载依赖的时候,"Failed to read artifact descriptor for xxx:jar"的错误 对于这种非业务相 ...

  3. 配置IIS Express 7.5以允许外部访问

    默认配置文件位于:[我的文档]\IISExpress\config\applicationhost.config修改站点地址如:<binding protocol="http" ...

  4. GPIO 配置之ODR, BSRR, BRR 详解

    STM32 GPIO 配置之ODR, BSRR, BRR 详解 用stm32 的配置GPIO 来控制LED 显示状态,可用ODR,BSRR,BRR 直接来控制引脚输出状态. ODR寄存器可读可写:既能 ...

  5. MEF(Managed Extensibility Framework)依赖注入学习

    MSDN官方资料,并且微软还提供了SimpleCalculator sample学习样例 http://msdn.microsoft.com/en-us/library/dd460648(v=vs.1 ...

  6. Python字典 (dictionary)

    字典dict,是Python唯一的标准mapping类型,也是内置在Python解释器中的. mapping object把一个可哈希的值(hashable value)映射到一个任意的object上 ...

  7. class-dump-z下载地址

    支持MAC.Linux.Win和iOS各个版本 http://download.csdn.net/detail/yukang1989/8414567

  8. HDU 4667 Building Fence

    题意: 给n个圆和m个三角形,且保证互不相交,用一个篱笆把他们围起来,求最短的周长是多少. 做法:--水过... 把一个圆均匀的切割成500个点,然后求凸包. 注意:求完凸包,在求周长的时候记得要把圆 ...

  9. C# Devexpress学习--LabelControl

    A LabelControl can display an image (regular or animated GIF file). Different images can be provided ...

  10. Apache服务器配置默认首页文件名和网站路径

    默认首页的配置: 第一种:直接修改apache服务器的配置文件./conf/httpd.conf中的DirectoryIndex,如:(项目web以index.php为首页) <IfModule ...