随着智能手机的普及,功能越来越强大。程序也越来多和复杂化。研究一下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. effective c++:virtual函数在构造函数和析构函数中的注意事项

    如不使用自动生成函数要明确拒绝 对于一个类,如果你没有声明,c++会自动生成一个构造函数,一个析构函数,一个copy构造函数和一个copy assignment操作符. class Empty { p ...

  2. Bluebird-Core API (三)

    Promise.join Promise.join( Promise<any>|any values..., function handler ) – -> Promise For ...

  3. POP3&SMTP&IMAP

    [POP3&SMTP&IMAP] IMAP是什么? IMAP,即Internet Message Access Protocol(互联网邮件访问协议),您可以通过这种协议从邮件服务器上 ...

  4. OperateParticleWithCodes

    [OperateParticleWithCodes] Listing 6-6 shows how you might configure an emitter’s scale property. Th ...

  5. 如何通过写一个chrome扩展启动本地程序

    @(编程) [toc] 本文介绍如何利用Chrome 的插件, 从我们的一个网站中启动一个我们的本地程序.本文的环境是windows10,本文的例子是通过点击网页上的一个button,调用本地的wor ...

  6. OSPF虚链路配置.示例1

      在OSPF 网络中,区域0为骨干区域,其它的为非骨干区域,非骨干区域必须与骨干区域直接相连. 根据拓扑图可看到区域1与骨干区域0直接相连而区域2与骨干区域没有直接相连,这种情况下我们可以创建一条虚 ...

  7. HDU 2859 Phalanx (dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2859 给你一个n*n的矩阵,问你最大的对称度是多少(左下右上为对称线) dp[i][j]表示i行j列元 ...

  8. 利用一些码农Trick去搞一搞G和T的单词

    根据自然语言处理中的Zipf统计定律,在自然语言的语料库里,一个单词出现的频率与它在频率表里的排名成反比.因此,我们有理由认为,可以根据这个频率表进行一下排序,以及purning.由于精力有限,没有足 ...

  9. maven3实战之maven使用入门(使用archetype生成项目骨架)

    maven3实战之maven使用入门(使用archetype生成项目骨架) ---------- maven提供了archetype以帮助我们快速勾勒出项目骨架.以Hello World为例,我们使用 ...

  10. Eclipse 和 NetBeans 快捷键即其他常用功能比较

    按: 自己用 Eclipse, 常用的也就这些功能, 在用 NetBeans 时, 有些不顺手, 因此列表如下. Eclipse和NetBeans常用快捷键对比:  功能  Eclipse     N ...