当前位置:  编程技术>移动开发
本页文章导读:
    ▪获取root权限及破译原理分析        获取root权限及破解原理分析   2012-03-18 17:58:45|  分类: android |字号 订阅 现在Android系统的root破解基本上成为大家的必备技能!网上也有很多中一键破解的软件,使root破解越来越容.........
    ▪ 从资源库中读取数据 并播发        从资源库中读取数据 并播放-(void)Eduqu{     NSError *err=nil;     NSString *str=[NSStringstringWithFormat:@"http://127.0.0.1/audio/upload/%d.aif",I];     NSURL *fileUrl=[NSURL URLWithString:str];     NSData *data=[NSData .........
    ▪ 闲来无事,分析一下子淘宝千牛客户端       闲来无事,分析一下淘宝千牛客户端 <?xml version="1.0" encoding="UTF-8"?><manifest android:versionCode="32" android:versionName="1.3.1" package="com.taobao.qianniu"  xmlns:android="http://schemas.android.com/apk/res/android.........

[1]获取root权限及破译原理分析
    来源: 互联网  发布时间: 2014-02-18
获取root权限及破解原理分析
 

2012-03-18 17:58:45|  分类: android |字号 订阅

现在Android系统的root破解基本上成为大家的必备技能!网上也有很多中一键破解的软件,使root破解越来越容易。但是你思考过root破解的原理吗?root破解的本质是什么呢?难道是利用了Linux kernal的漏洞吗?本文将简单对root的破解原理进行分析。

网上很多root教程所使用的都是rageagainstthecage程序,今天下载了rageagainstthecage.c源程序看了一下,大致理解了获取root权限的基本过程和原理。
首先简单解释一下什么是root过的手机(Android系统),所谓root过的手机就是我们可以以root的权限运行各种程序,进而完全控制系统。
因为官方系统基于安全原因,默认程序的运行都是以非root用户运行的,包括adbd进程。adbd进程是手机中运行的一个守护进程,他负责解释并运行PC传送过来的命令,
该进程由init进程创建,但是创建后自身通过调用setuid()系统调用设置运行的用户为shell用户。所以我们在手机中执行ps命令看到的adbd进程都是以shell用户身份运行的。
获取root权限的关键是想办法让adbd进程重新以root身份运行,这样通过电脑传送过来的命令也就能够以root身份运行了。
众所周知,Android系统用的是linux的内核,在linux中,对于用户最大允许运行的进程数有限制,所以rageagainstthecage程序在运行后先结束当前的adbd进程,
然后init进程会重新启动新的adbd进程。但是rageagainstthecage程序同时会创建大量的子进程,这些子进程默认都是shell用户身份,从而使得shell用户拥有的进程数达到最大值,这就使得新启动的adbd进程调用setuid()系统调用失败,因为shell用户的进程数已满,adbd无法把自己运行的用户设置为shell用户,从而保持在刚创建时的root用户身份中运行。
这时候我们在电脑中执行adb shell命令时发现已经进入root shell了。
从上面的分析我们可以知道:要能够root成功必须满足两点:
1、系统必须已经设置每个用户允许运行的最大进程数(官方的Android2.1、2.2好像都已经设置,2.3的不是很清楚)。
2、必须要在新启动的adbd进程调用setuid()系统调用前创建足够多的进程数。但是因为系统进程调度的随机性,并不能保证每一次都能满足这个要求,这也就是为什么网上说多试几次就会成功。
执行完rageagainstthecage程序后其实已经获得了root权限,但是每次这么做非常麻烦,所以还应该设置一些永久性的东西,主要是上传几个程序到系统并设置相应权限,这几个程序分别是:
su--使得非root用户能够以root身份运行程序。
busybox--系统工具包,包含很多的系统使用工具。
SuperUser.apk--授权管理软件包,为需要root身份运行的程序授权。

网上下的一键root包其实也就是把上面的工作制作成脚本让它自动执行罢了。

 

网上有一篇文章已经对root破解的基本原理进行了简单介绍,大家可以先参考一下《》,本文只能说对root原理进行了方向性的描述,但是在一些具体的方面没有描述清楚。本文将会对其进行一些必要的扩展和补充。

     如果你进行过程序开发,在root过的手机上面获得root权限的代码如下:

   1: Process process = Runtime.getRuntime().exec("su");
   2: DataOutputStream os = new DataOutputStream(process.getOutputStream());
   3: ......
   4: os.writeBytes("exit\n");
   5: os.flush();

     从上面代码我们可以看到首先要运行su程序,其实root的秘密都在su程序中,《》中讲到Android系统默认的su程序只能root和shell可以用运行su,这个是安全的。如果把这个限制拿掉,就是root破解了!

     下面我们仔细分析一下程序是怎样获得root权限的,如果对Linux的su命令熟悉的朋友可能知道su程序都设置SUID位,我们查看一下我的手机(已经root破解)上的su权限设置,

      我们发现su的所有者和所有组都是root,是其实是busybox的软链接,我们查看busybox的属性发现,其设置了SUID和SGID,并且所有者和所有组都是root。SUID和SGID的作用是什么呢?如果你不太清楚,请参考《Linux进程的实际用户ID和有效用户ID》,这样运行busybox的普通用户,busybox运行过程中获得的是root的有效用户。su程序则是把自己启动一个新的程序,并把自己权限提升至root(我们前面提到su其实就是busybox,运行期它的权限是root,当然也有权限来提升自己的权限)。

     再强调一下不光root手机上su需要设置SUID,所有的Linux系统上的su程序都需要设置SUID位。请参考一下UC服务器的su的权限情况:

     我们发现su也设置了SUID位,这样普通用户也可以运行su程序,su程序会验证root密码,如果正确su程序可以把用户权限提高的root(因为其设置SUID位,运行期是root权限,这样其有权限提升自己的权限)。

     这样我们就可以看出其实Android系统的破解的根本原理就是替换掉系统中的su程序,因为系统中的默认su程序需要验证实际用户权限(只有root和shell用户才有权运行系统默认的su程序,其他用户运行都会返回错误)。而破解后的su将不检查实际用户权限,这样普通的用户也将可以运行su程序,也可以通过su程序将自己的权限提升。

     到这里大家对root破解不感到神秘了吧。root破解没有利用什么Linux内核漏洞(Linux内核不可能有这么大的漏洞存在),可以理解成root破解就是在你系统中植入“木马su”,说它是“木马”一点儿都不为过,假如恶意程序在系统中运行也可以通过su来提升自己的权限的这样的结果将会是灾难性的。所以一般情况下root过手机都会有一个SuperUser应用程序来让用户管理允许谁获得root权限,也算是给系统加了一层保险吧!

 

Android的应用程序入口肯定是Java程序。应用程序的启动者是由系统临时根据Androidmanifest.xml中定义的权限而创建的临时用户。而不像linux那样是使用登陆者的身份启动,从而使得进程具有登陆者的所有权限。这也是Android的安全机制之一。新的权限机制也带来新的问题,Android给应用程序的权限是按功能来分,java虽然可以访问文件系统。但由于应用程序本身是临时用户启动,这个临时用户权限十分有限。因此诞生了<越狱/root机器>这样的产物其实root机器不是真正能让你的应用程序具有root权限。它原理就跟linux下的像sudo这样的命令。在系统的bin目录下放个su程序并属主是root并有suid权限。则通过su执行的命令都具有Android root权限。
Su的源代码网上也有,有兴趣的同学去google下。
当然使用临时用户权限想把su拷贝的/system/bin目录并改属性并不是一件容易的事情。这里用到2个工具跟2个命令。工具就是busybox。不熟悉的同学可以去网上google下。这个太有名了我就不多说了。把busybox拷贝到你有权限访问的目录然后给他赋予4755权限,你就可以用它做很多事了。当然busybox只能不能提升权限,真正提升权限的是ratc这个程序,这个程序中一键root包里面可以找到,作用是rooting在adb的shell。
网上介绍Ratc的文章不多,它是rage against the cage 的缩写。是真正的提升权限的破解程序。虽然我没看过源代码,但估计是利用adb源代码部分内容来实现的,原理估计跟模拟器使用adb shell登陆可以获得root shell差不多。(因为它运行需要adb连接才会成功)。使用busybox前先运行ratc,这样运行busybox的UID将是0,也就是root。首先把system目录改成可读性的:busybox mount -o remount,rw /system,当然你还不能改下面的文件,因为system下文件的所有者都不是你。但你可以偷梁换柱把system下的目录给换掉。使用命令Busybox mount -t tmpfs none /system/xbin,呵呵这下xbin目录你随便写了。
将su跟busybox弄过去cp /data/data/xxx/su /system/xbin。然后赋权限chmod 4755 /system/xbin/su。/然后使目录生效busybox --install -s /system/xbin,
别忘善后busybox mount -o remount,ro /system去掉system可写。这样只是临时的,只能用su跟busybox能执行一些原来系统没有权限执行的命令而已。当系统重启后/system/xbin又变为原来的文件。真正要改系统的话需要自己写内核代码(相当于windows的驱动程序)。内核文件拥有所有权限。使用busybox命令insmod /data/data/xxx/xxx.ko装载内核文件,你想干嘛就可以干嘛了。
当然我们不是搞破解的没必要去改别人的机器,我们只是想让自己应用程序具有root权限而已。所以临时的su就可以了。我们用c++写一个可执行文件。使用socket可以跟java的程序通讯。然后将需要使用root权限才能执行的代码放在c++程序里,然后java程序中创建新的su进程,将c++程序带全路径作为参数1。启动后就可以通过socket调用c++函数去执行你想干的事了。
最后程序执行完了别忘了善后busybox umount /system/xbin。
最后说说要注意的事情,如果机器已经拥有Android root权限的话就不需要做这些事情了,但root过的机器都有装有个权限管理的程序。会弹出对话框。但这个程序管理能力有限,如果不想让他弹出的话。也许可以通过改su文件名来解决。有兴趣的同学不妨试试。

SuperOneClick 获取 Root 权限的原理

转贴自:http://blog.csdn.net/liwei_cmg/article/details/6313944

一、前言

经过笔者自己测试与分析,得出结论:所以Android手机获取Root权限,最直观
最有效,最简便的就是SuperOneClick方法!
与i9000基带版本的什么JPE,JPD,JP8等等,没有关系
与i9000Android软件版本的什么2.0,2.1,2.2等等,没有关系
与具体的什么Android手机也没有关系
管你是三星的,还是MOTO的,还是HTC……

到底与什么有关呢,我理解是Linux的内核版本!当然普通用户根本不必关心!
后续的文章会提到有关破解Root的底层概念,当然也超出普通用户的理解范围。

这里,我只想介绍一下SuperOneClick获取Root权限的简单原理!

二、提示

有关Root权限的获取方法可参考
《Android应用.三星i9000系列(3).无需刷机轻松获取Root权限》
本系列文章:http://blog.csdn.net/liwei_cmg/category/241839.aspx
三、原理简介

我们已经知道adb(Android Debug Bridge)这个概念,不管是Moto的,还是Samsung
的,Android手机通过USB连接电脑后,安装好驱动,在设备管理器里都会看到Android
Composite ADB Interface这样的东东。SuperOneClick就是调用的adb这样的接口。
同样豌豆荚,91手机助手这样的软件也是使用了adb。

关于Android手机USB连接电脑的相关内容,可参考:
《Android应用.三星i9000系列(1).版本选择与USB连接电脑》

四、SuperOneClick提取Root权限的基本步骤

F:/Own/Phone/Samsung/Tools/SuperOneClick 的目录下所有文件

2010/10/16  22:04           577,335 adb.exe
2010/10/18  11:27           339,885 adblinux
2010/10/18  11:26           171,656 adbmac
2010/10/16  22:04            96,256 AdbWinApi.dll
2010/10/16  22:04            60,928 AdbWinUsbApi.dll
2010/10/16  23:29         1,062,992 busybox
2010/10/16  22:04             5,392 rageagainstthecage  //步骤一
2010/10/16  22:04            24,120 sqlite3
2010/10/16  22:04            26,264 su                  //步骤二
2010/11/04  21:21           379,392 SuperOneClick.exe
2010/10/16  22:04           196,521 Superuser.apk       //步骤三

手机USB调试方法连接好电脑后,在电脑上运行SuperOneClick.exe,在弹出的
界面上,点击Root按钮,便开始了Root权限提取的自动操作!

其实它的步骤是这样的:

步骤一:将rageagainstthecage文件存放在手机/data/local/tmp下,并执行
——————————————————————————–

1) 将文件放在/data/local/tmp下,其他目录无法执行。命令如下:
F:/Own/Phone/Samsung/Tools/SuperOneClick>adb push rageagainstthecage /data/local/tmp

2) 使用adb shell,修改rageagainstthecage文件权限
F:/Own/Phone/Samsung/Tools/SuperOneClick>adb shell
$ cd /data/local/tmp
cd /data/local/tmp
$ chmod 777 rageagainstthecage

3) 使用adb shell,运行rageagainstthecage
$ ./rageagainstthecage

[*] CVE-2010-EASY Android local root exploit (C) 2010 by 743C

[*] checking NPROC limit …
[+] RLIMIT_NPROC={2410, 2410}
[*] Searching for adb …
[+] Found adb as PID 19374
[*] Spawning children. Dont type anything and wait for reset!
[*]
[*] If you like what we are doing you can send us PayPal money to
[*] 7-4-3-C@web.de so we can compensate time, effort and HW costs.
[*] If you are a company and feel like you profit from our work,
[*] we also accept donations > 1000 USD!
[*]
[*] adb connection will be reset. restart adb server on desktop and re-login.
$

此时退出shell,再次使用adb shell,会发现提示符为#,已经在电脑Shell
上获取了Root权限。如果不是#,重复执行(./rageagainstthecage),
直到提示#。

F:/Own/Phone/Samsung/Tools/SuperOneClick>adb shell
#

步骤二:将/system修改为可读写,把su复制到/system/bin/
——————————————————————————–

1)上步骤一成功出现的#号提示符下,修改/system
# mount -o remount rw /system
#

2)另开一个命令行窗口,复制su至/system/bin
F:/Own/Phone/Samsung/Tools/SuperOneClick>adb push su /system/bin

su这个文件的功能,便是实现:普通用户至root超级用户的权限切换!

步骤三:将授权管理的标准Android软件包(Superuser.apk)复制到手机并安装
——————————————————————————–

这个过程很简单,不再赘述,就是adb push与adb install。授权管理其实
就是管理哪些程序能够使用su。也就意味着对超级用户权限的使用进行管理。

步骤四:重启手机
——————————————————————————–

其实就是重启测试一下。

 

五、总结
在提取Root权限过程中,只有两个重要的文件:

rageagainstthecage
su

rageagainstthecage负责直接破解获取Root权限,然后才能修改/system/。
su如果只放在/data/local/tmp目录下,是没有权限运行的。

$ ls -l su
ls -l su
-rwxrwxrwx shell    shell       26264 2010-10-16 22:04 su
$ ./su
./su
Permission denied
$

所以需要把su放在/system/bin目录下。以供以后的手机应用程序使用!
至于rageagainstthecage,su的运行原理,就不是本文现在讨论的问题了。

This entry was written by sense, posted on August 5, 2011 at 20:43, filed under Android and tagged Android. Bookmark the permalink. Follow any comments here with the RSS feed for this post. Post a comment or leave a trackback: Trackback URL.
? [转贴] ubuntu下调试android手机,并进入手机shell终端
 

android 手机/平板大行其道的今天,获得 root 权限成了大家关注的话题。

据我所知,需要获得 root 权限的嵌入式操作系统,只有 ios 和 android。其中 ios 称为越狱,随着 ios 的发布,有众多高手开发了相应的傻瓜越狱工具。但是 android 应用非常广泛,却没有统一的技术支持,所以只能由用户自己进行权限破解。因为 android 的内核是 linux,而 linux 中 root 拥有至高无上的权限,所以一时间获取 root 权限也成了很多非 linuxer 关注的话题。
一键获取 android root 权限: Unviersal Androod (不适用所有机型)

为什么要获得 root 权限呢?

其实日常应用并不需要 root 权限,但是由于一些 android 的限制,我们必须拥有 root 权限才能:

  • 下载收费软件
  • 修改系统文件
  • 替换 hosts 文件
  • 截图
  • 等等 …

连截图都要 root 权限……(记得 ios 是 home+power 吧?)

消歧

使用 adb 连接到设备获得的 root 权限并不是 设备所拥有的 root。

也就是说,连接设备成功后,我们对设备的系统具有了 root 权限,而设备系统自身并没有 root 权限。例如您在 market 看到 need rooted device 字样,那就是意味着您的设备系统也具有 root 权限。通常来说,root 指设备自身可以执行 su 并获得 root 权限。

原理

adb ( android debug bridge ) 链接设备,并使用具有 root 权限的 adb 修改/替换设备 su 文件,从而具有 root 权限。

前期准备
  • 访问 http://developer.android.com/sdk/index.html (need proxy),获取 adb 工具(需要下载 sdk,windows 还需额外下载 usb 驱动);
  • 开启您的 android 设备,并执行如下操作: settings — application — development, 勾选usb debugging;

  • 创建 DE>/etc/udev/rules.d/51-android.rules 文件,内容如下:DE>

ubuntu:

1
2
DE>SUBSYSTEM==&amp;amp;amp;quot;usb&amp;amp;amp;quot;, SYSFS{idVendor}==&amp;amp;amp;quot;0bb4&amp;amp;amp;quot;,             MODE=&amp;amp;amp;quot;0666&amp;amp;amp;quot;DE>
DE>SUBSYSTEM==&amp;amp;amp;quot;usb_device&amp;amp;amp;quot;, SYSFS{idVendor}==&amp;amp;amp;quot;0bb4&amp;amp;amp;quot;,             MODE=&amp;amp;amp;quot;0666&amp;amp;amp;quot;DE>

arch:

1
2
3
DE>SUBSYSTEM==”usb”, SYSFS{idVendor}==”0bb4″, MODE=”0666″DE>
DE>SUBSYSTEM==”usb”,ATTR{idVendor}==”0bb4″,ATTR{idProduct}==”0c02″,SYMLINK+=”android_adb”DE>
DE>SUBSYSTEM==”usb”,ATTR{idVendor}==”0bb4″,ATTR{idProduct}==”0c01″,SYMLINK+=”android_fastboot”DE>

其中 USB Vendor IDs 可以在 这里 查到。

更改文件权限:

1
DE>chmodDE> DE>a+rx DE>DE>/etc/udev/rulesDE>DE>.dDE>DE>/50-androidDE>DE>.rulesDE>

重新加载 udev 规则:

1
DE>udevadm control –reload-rulesDE>
  • 下载越狱软件包,并把 su 拷贝到 adb/tools 内 开始~

    插入 usb 数据线,然后打开终端,进入 adb/tools 目录,执行

    1
    DE>adb devicesDE>

    Android adb devices显示 ????????????    no permissions怎么办?

    Windows:运行adb root

    Linux:
    adb kill-server
    sudo adb root

    此时显示为:

    List of devices attached 0123456789ABCDEF    device

    成功列出已连接的设备后,执行

    1
    2
    3
    4
    5
    6
    7
    DE>adb shell DE>DE>mvDE> DE>/system/xbin/suDE> DE>/system/xbin/osuDE>      DE># 备份原 su 文件DE>
    DE>adb push DE>DE>suDE> DE>/system/xbinDE>      DE># 把 adb/tools 的 su 文件 推送到 android设备 /system/xbinDE>
    DE>adb shell DE>DE>rmDE> DE>/system/bin/suDE>      DE># 移除其他的 su 文件DE>
    DE>adb shell DE>DE>lnDE> DE>-s DE>DE>/system/xbin/suDE> DE>/system/bin/suDE>      DE># 软链 suDE>
    DE>adb shell DE>DE>chmodDE> DE>6755 DE>DE>/system/xbin/suDE>       DE># 变更权限DE>
    DE>adb shell DE>DE>syncDE>      DE># 同步所有缓存中的文件DE>
    DE>adb shell reboot      DE>DE># 重启 android 设备DE>

    (您需要根据您的设备和设置变更执行的路径)

    等待设备重启完成后,可以在 adb shell 模式输入:su(回车),会出现su: access granted, courtesy of www.magicandroidapps.com #等提示,代表成功了。

    现在您可以使用root explorer,蓝牙上网,截图,martket enabler等工具啦~

    为什么我不需要 root

    网上超多的 root 教程会让你惊奇的发现,ROOT好简单哦。但是看到新手一拿到手机就马上刷ROOT,然后再问:取了ROOT有什么用?
    我们不能完全责怪用户,因为很多教程都没有强调刷ROOT可能导致的严重后果,会危及到你手上设备的安全性。实际上,很多用户根本不需要ROOT权限!

    在开始之前,请先问你自己以下2个问题:
    1.你有几次细读过菜市场里下载的软件或者游戏的使用协议?
    2. 你有几次看了软件使用协议中的权限要求(full internet, gps location, read contacts等等)后会问“嗯,为什么这个游戏需要这些权限呢?”
    你是不是还是照安装不误呢?

    事实是,绝大多数的用户根本不会理会 程序所 请求 的这些权限,他们会照安装不误。

    虽然 market 已经通知了用户软件所需的权限,但这远远不够。 因为用户还是不知道这些权限和安全有什么关系。有些软件也许没有什么恶意,但设计的却极其的烂。因为开发者也是人,也会犯错。有时,程序员会选择一个他们认为安全的协议,但实际上却是很危险的。又或者有些恶意软件,可以让别人远程清空你的手机,或者将你手机里的信息传送回指定服务器后再清空你的手机(也许已经有这样的软件了)。我以上所说的这些例子表明,即便是非ROOT权限的程序都有可能很危险,何况那些获得ROOT权限的程序呢?

    其实,有些功能其实完全不应该需要ROOT权限的。很多用户取得ROOT权限只是为了添加一些自己的主题,为了一些小众的需求而已。

    老实的说,看到越来越多的ANDROID新手认为不ROOT就不能正常工作,让我感到很沮丧。(via)

    参考资料

    http://developer.android.com/guide/developing/device.html

    http://www.kunli.info/2009/08/22/archlinux-android-adb-recognize-device/

    http://henryh.cn/blog/android_cupcake_root.html

    http://bbs.hiapk.com/thread-652917-1-1.html

     https://www.deleak.com/blog/2010/12/17/android-root-on-linux/


  •     
    [2] 从资源库中读取数据 并播发
        来源: 互联网  发布时间: 2014-02-18
    从资源库中读取数据 并播放

    -(void)Eduqu{

        NSError *err=nil;

        NSString *str=[NSStringstringWithFormat:@"http://127.0.0.1/audio/upload/%d.aif",I];

        NSURL *fileUrl=[NSURL URLWithString:str];

        NSData *data=[NSData dataWithContentsOfURL:fileUrl];

        //设定后台播放

        [[AVAudioSessionsharedInstance]setCategory:AVAudioSessionCategoryPlaybackerror:&err];

        //设定激活状态

        [[AVAudioSession sharedInstance]setActive:YES error:&err];

        //播放

        player=[[AVAudioPlayer alloc]initWithData:data error:&err];

        

        [player play];


    }


        
    [3] 闲来无事,分析一下子淘宝千牛客户端
        来源: 互联网  发布时间: 2014-02-18
    闲来无事,分析一下淘宝千牛客户端
    <?xml version="1.0" encoding="UTF-8"?>
    <manifest android:versionCode="32" android:versionName="1.3.1" package="com.taobao.qianniu"
      xmlns:android="http://schemas.android.com/apk/res/android">
        <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="7" />
        <uses-permission android:name="android.permission.CAMERA" />
        <uses-permission android:name="android.permission.VIBRATE" />
        <uses-permission android:name="android.permission.FLASHLIGHT" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <uses-permission android:name="android.permission.RESTART_PACKAGES" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.REORDER_TASKS" />
        <uses-permission android:name="android.permission.WAKE_LOCK" />
        <uses-permission android:name="android.permission.READ_LOGS" />
        <application android:theme="@android:style/Theme.Light.NoTitleBar" android:label="@string/app_name" android:icon="@drawable/jdy_logo" android:name=".App" android:allowBackup="false">
            <meta-data android:name="LOG_LEVEL" android:value="2" />
            <activity android:theme="@android:style/Theme.Light.NoTitleBar" android:name=".activity.LoginActivity" android:launchMode="singleTop" android:screenOrientation="portrait" android:alwaysRetainTaskState="true" android:windowSoftInputMode="stateHidden|adjustResize">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity android:name=".activity.MainActivity" android:exported="true" android:launchMode="singleTask" android:screenOrientation="portrait" android:alwaysRetainTaskState="true">
                <intent-filter>
                    <action android:name="android.intent.action.VIEW" />
                    <category android:name="android.intent.category.DEFAULT" />
                    <category android:name="android.intent.category.BROWSABLE" />
                    <data android:scheme="tbsellerplatform" />
                </intent-filter>
            </activity>
            <activity android:name=".activity.MessageCenterActivity" android:exported="false" android:launchMode="singleTop" android:screenOrientation="portrait" android:windowSoftInputMode="adjustResize" />
            <activity android:name=".activity.AuthorizeActivity" android:exported="false" android:launchMode="singleTop" android:screenOrientation="portrait" android:allowTaskReparenting="true" />
            <activity android:name=".activity.settings.AccountSettingsActivity" android:screenOrientation="portrait" />
            <activity android:name=".activity.settings.FAQActivity" android:screenOrientation="portrait" />
            <activity android:name=".activity.settings.AboutUsActivity" android:screenOrientation="portrait" />
            <activity android:name=".activity.settings.MsgCategorySettingActivity" android:screenOrientation="portrait" />
            <activity android:name=".activity.settings.SubscriptionActivity" android:screenOrientation="portrait" />
            <activity android:name=".activity.settings.HelpSettingsActivity" android:screenOrientation="portrait" android:windowSoftInputMode="adjustResize" />
            <activity android:name=".activity.settings.MsgAttentionSettingsActivity" android:screenOrientation="portrait" />
            <activity android:name=".activity.settings.SecurityActivity" android:screenOrientation="portrait" />
            <activity android:name=".activity.PluginDetailActivity" android:screenOrientation="portrait" />
            <activity android:name=".activity.PictureViewerActivity" android:exported="false" android:screenOrientation="portrait" />
            <activity android:theme="@style/activity_dialog" android:label="@string/choose_file" android:name="com.taobao.qianniu.view.common.FileChooseActivity" android:exported="false" android:screenOrientation="portrait" />
            <activity android:name=".activity.LiangziChartActivity" android:exported="false" android:screenOrientation="landscape" />
            <activity android:name=".activity.LiangziMainActivity" android:exported="false" android:screenOrientation="portrait" />
            <activity android:name=".activity.WapItemDetailActivity" android:exported="false" android:screenOrientation="portrait" />
            <activity android:name="com.taobao.qianniu.ww.activity.WWShortcutWordMainActivity" android:screenOrientation="portrait" android:windowSoftInputMode="adjustResize" />
            <activity android:name="com.taobao.qianniu.ww.activity.WWShortcutWordOperateActivity" android:screenOrientation="portrait" android:windowSoftInputMode="adjustResize" />
            <activity android:name=".ww.activity.WWSearchContactActivity" android:screenOrientation="portrait" android:windowSoftInputMode="adjustResize" />
            <activity android:name=".ww.activity.WWSettingsActivity" android:screenOrientation="portrait" />
            <activity android:name=".ww.activity.WWChatActivity" android:launchMode="singleTop" android:screenOrientation="portrait" android:windowSoftInputMode="stateHidden|adjustResize" />
            <activity android:name=".ww.activity.WWContactProfileActivity" android:screenOrientation="portrait" />
            <activity android:name=".ww.activity.WWReplySettingActivity" android:screenOrientation="portrait" android:windowSoftInputMode="adjustResize" />
            <activity android:name="com.taobao.qianniu.ww.activity.WWContactRateActivity" android:screenOrientation="portrait" />
            <activity android:name=".activity.H5ContainerActivity" android:exported="false" android:launchMode="singleTop" android:screenOrientation="portrait" android:allowTaskReparenting="true" android:windowSoftInputMode="adjustResize" />
            <activity android:name="com.taobao.qianniu.activity.AlipayWebviewActivity" android:exported="false" android:launchMode="singleTop" android:screenOrientation="portrait" android:windowSoftInputMode="adjustResize" />
            <activity android:name="com.taobao.qianniu.activity.H5UIActivity" android:exported="false" android:launchMode="singleTop" android:screenOrientation="portrait" android:windowSoftInputMode="adjustResize" />
            <activity android:name=".activity.SimpleAutoLoginWebviewActivity" android:exported="false" android:screenOrientation="portrait" />
            <activity android:name=".activity.settings.SubAccountListActivity" android:exported="false" android:screenOrientation="portrait" />
            <activity android:theme="@android:style/Theme.Translucent.NoTitleBar" android:name=".activity.SDKDelegateActivity" android:exported="false" android:excludeFromRecents="true" android:launchMode="singleTop" />
            <activity android:theme="@style/no_title_trans" android:name=".activity.ScavengerActivity" android:exported="false" android:clearTaskOnLaunch="true" android:excludeFromRecents="true" android:noHistory="true" />
            <activity android:theme="@android:style/Theme.Translucent.NoTitleBar" android:name=".activity.DialogActivity" android:exported="false" android:launchMode="singleTop" android:screenOrientation="portrait" android:allowTaskReparenting="true" />
            <activity android:theme="@android:style/Theme.Translucent.NoTitleBar" android:name=".activity.LockPatternActivity" android:exported="false" android:launchMode="singleTop" android:screenOrientation="portrait" android:windowSoftInputMode="stateAlwaysHidden" />
            <activity android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:name="com.google.zxing.client.android.CaptureActivity" android:exported="false" android:windowSoftInputMode="stateAlwaysHidden">
                <intent-filter>
                    <action android:name="com.taobao.qianniu.barcode.scanner.SCAN" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </activity>
            <service android:name="com.alibaba.mobileim.inet.service.InetIOService" android:exported="false" />
            <service android:label="@string/core_service" android:name=".app.MessageService" />
            <receiver android:name=".app.ConnectivityChangeReceiver">
                <intent-filter>
                    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                </intent-filter>
            </receiver>
            <receiver android:name="com.taobao.top.android.comm.SDKDelegateReceiver">
                <intent-filter>
                    <action android:name="com.taobao.top.android.broadcast.event" />
                    <data android:scheme="tbsellerplatform" />
                </intent-filter>
            </receiver>
            <provider android:name=".app.JdyContentProvider" android:authorities="com.taobao.qianniu.provider" />
        </application>
    </manifest>

    先看AndroidManifest文件,来看看他有些什么内容?
    <service android:name="com.alibaba.mobileim.inet.service.InetIOService" android:exported="false" />
    阿里的im服务,我猜测就是旺旺,淘宝开发平台里开放出来的旺旺api,只有一些统计功能,没有聊天功能。
    研究一下这个im服务应该可能了解旺旺的聊天服务。

    <receiver android:name="com.taobao.top.android.comm.SDKDelegateReceiver">
    这个receiver 收听什么消息呢? 也可以好好观察一下。
    1 楼 sawadari_k 昨天  
    楼主。。。为什么我总觉得你的这篇文章没有写完。。。
    2 楼 lostheart 昨天  
    ITEYE没落了,首页全是标题党。有价值的文章是越来越少。
    3 楼 zhou405680603 22 小时前  
    这也叫分析,不就是apktool一下...这也能上首页...伤不起啊
    4 楼 tianxiaozz 21 小时前  
    这也好意思叫分析。。。。。。。。。。。。。。
    5 楼 white_crucifix 18 小时前  
    中国好分析
    6 楼 easymove 14 小时前  
    抱歉各位,让大家扫兴了,才刚刚开始写博文,以后我会努力写点实质性的内容.

        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3