systemprocess root?system占用CPU过高

seosqwseo3周前 (04-16)测评日记13

一、Android应用获取Root权限

Android获取Root权限!

在项目的过程中,有可能会要实现类似360优化**、安卓优化**的软件搬家、静默安装等需要root权限的功能,或者类似SET_PREFERRED_APPLICATIONS、MOVE_PACKAGE等需要系统的权限,必须要有系统签名。咱们拿软件搬家来当例子(通过获取系统权限,而不是弹出系统的应用管理界面来搬家):实现方式: 1、想办法获取系统权限,但是这个一般办不到,因为不同厂家出厂的手机系统签名都不一样(可以看看我很早的时候提的问题: android系统权限SET_PREFERRED_APPLICATIONS怎么获取) 2、在已经root过得手机,获取root权限(有root权限就可以为所欲为啦,嘿嘿)第一种办法暂时不考虑,想了解的童鞋可以googleAndroid如何获取系统权限。我们说说第二种办法,在已经root过得手机上获取root权限,简单 Java代码 Processprocess=Runtime.getRuntime().exec("su");执行这一句,superuser.apk就会弹出授权对话框。但是这样做就可以了吗.....肯定没这么简单啦!当执行需要系统权限的*作时,系统还是回去检查应用程序是否拥有该权限。所以我们要想办法绕过过系统检查权限这道关卡!至于办法可以参考下以下两篇博客: 1、android应用搬家的实现 2、如何在Android中启动java程序大概思路是:通过app_process命令启动Java程序(想了解app_process更多资料,请自行google),可是app_process命令需要root权限才能执行,所以要配合上面所讲的su命令啦。这么做是可以实现绕过系统检查权限的大门,但是每次执行的时候都要先请求下root权限(那种弹框和toast会让用户感觉到很不安)不要忘了咱们的标题:android应用程序永久获取root权限方法。永久获取root权限,就是获取过一次root权限后,以后再也不需要去请求root权限实际上,像一些软件管家:安卓优化**、360优化**,都是这么做的(不信你可以试试其软件搬家功能,即使你的手机解除root,它们还是具有root权限)原理可以看下以下链接:安卓应用程序永久获取Root权限的方法(**该文章需要money,明天我再上传该文档,一时找不到了.......)大概思路:自己编译一个类似su的可执行程序(以下以main为代号),在main中调用app_process命令,然后在第一次获取root权限的时候将其push到/system/**n/目录下,再chmod 4755可执行程序,修改其访问权限,使执行该命令的进程能够暂时获得root权限(4755也请google下吧Linux文件权限)。以后咱们要是需要root权限的话就调用mian命令,不用去调用su来请求root权限啦至于为什么要这么做:也是为了让root授权的对话框和toast不在显示插一句,想要知道su和superuser.apk的关系,请点开下面的链接 android superuser.apk管理root权限原理分析综上:我们所做的就是绕过su命令,用我们自己编写的可执行程序main开实现su的功能。自己编译可执行程序main的时候,需要注意一点,请参考su源码,我在这一步就卡了很久,大概意思: main的uid是继承的父类的uid,而且它有root权限,但是在main中执行system(cmd),(这里的cmd调用app_process来启动实现了软件搬家的java程序),假如system()是通过sh命令来实现,但在main中开启的sh的uid也是继承main的uid,也就是应用程序的uid,但是这个uid并没有权限执行相关root命令;所以需要先将main的uid设置为root,为了使sh的uid也为root,从而使sh能够执行需要root权限的app_process命令关键代码在你的main方法中加入 C代码 intuid=0; intgid=0; if(setgid(gid)||setuid(uid)) returnpermissionDenied(); [cpp]view plaincopy#includestdio.h#includeunistd.h intmain(intargc,char**argv){ if(setgid(0)||setuid(0)) fprintf(stderr,"su:permissiondenied\n"); else{ char*args[argc+1]; args[0]="sh"; args[argc]=NULL; inti; for(i=1;iargc;i++) argsi=argv;/i execv("/system/**n/sh",args);}}可以参考su的源码(su的源码会在我上传的压缩包中)大概思路就是这样。 PS:在我上传的压缩包中有我自己写的demo,实现的是软件搬家的功能,*作很简单: 1、安装Movepkgdemo.apk,并执行 2、点击 install com.zl.hw按钮来安装一个helloword android程序, 3、点击 get root按钮,来第一次获取root权限, 4、点击第三个按钮,来移动helloword程序 PPS: 1、编译可执行程序main(注意main只是个代号,在Movepkgdemo中是放在Movepkgdemo项目的/res/ raw/目录下的zlsu文件) 2、将main.c文件成可执行文件会需要linux编译环境,你可以自己在linux上编译,也可以在windows下来编译 windows方法:使用cygwin来进行NDK开发(搭建该环境可能需要话费比较多时间,主要是要**cygwin) cygwin环境配置文档也在上传的压缩包中,虽说花了打功夫,但是搭建好NDK环境,以后也能方便咱做NDK开发。 NDK环境搭建需要cygwin在安装的时候安装必需的一些项目(请查看以下链接): Cygwin安装后总结一下总体思路: 1、在java代码中实现需要root权限的功能,并提供一个包含入口函数main的类 2、通过app_process命令来启动1中的java模块,但是app_process需要root权限,所以看第3步 3、通过在第一次获取root权限的时候,向/system/**n/注入自写的类似su的二进制可执行程序 main,并且和su的访问权限也一样(chmod 4755)(main功能和su一样,唯一不一样就是去除了su中与superuser.apk交互的代码),即main命令执行app_process命令,这样可以做到:一旦拥有root权限,以后再也不需要去请求root权限

二、system占用CPU过高***怎么回事

以win7系统为例,右键点击“开始菜单”,在搜索框中输入“计算机管理”并将其打开。依次展服务和应用程序——>“服务”选项。在界面右侧找到“superfetch”选项,并双击Superfetch服务,把服务的“启动类型”由“自动”改为“手动”,然后点击确定,重启电脑即可。

于是分析system进程的stack,发现acpi.sys这个文件的context switch异常的高,有几十万的文境切换,怪不得cpu这么慢,原来都被他占用掉了。

于是用process explorer把这个线程suspend之后,果然cpu负荷一下子降到了5%,interrupts和DPCs都相应的降了下来。system idle process成功到达95%以上。

例如

用 system("color 0A");其中color后面的0是背景色代号,A是前景色代号。

各颜色代码:0=黑色 1=蓝色 2=绿色 3=湖蓝色 4=红色 5=紫色 6=黄色 7=白色 8=灰色 9=亮蓝色 A=亮绿色 B=亮湖蓝色 C=亮红色 D=亮紫色 E=亮黄色 F=亮白色。(注意:Microsoft Visual C++6.0支持system)颜色属性由两个十六进制数字指定--第一个对应于背景,第二个对应于前景。

三、Android应用程序怎样获取root权限

Android应用程序获取root权限,前提时设备必须已经破解过,能够执行su命令之后,就可以使用String apkRoot="chmod 777"+getPackageCodePath(); RootCommand(apkRoot);方式来给应用程序赋予足够的root权限,代码如下:

一、建一个方法:代码如下:

package cn.ycmoon.utility;

import java.io.DataOutputStream;

import android.app.Activity;

import android.util.Log;

public class SystemManager extends Activity

{

/**

*应用程序运行命令获取 Root权限,设备必须已破解(获得ROOT权限)

*@param command命令:String apkRoot="chmod 777"+getPackageCodePath(); RootCommand(apkRoot);

*@return应用程序是/否获取Root权限

*/

public static boolean RootCommand(String command)

{

Process process= null;

DataOutputStream os= null;

try

{

process= Runtime.getRuntime().exec("su");

os= new DataOutputStream(process.getOutputStream());

os.writeBytes(command+"\n");

os.writeBytes("exit\n");

os.flush();

process.waitFor();

} catch(Exception e)

{

Log.d("*** DEBUG***","ROOT REE"+ e.getMessage());

return false;

} finally

{

try

{

if(os!= null)

{

os.close();

}

process.destroy();

} catch(Exception e)

{

}

}

Log.d("*** DEBUG***","Root SUC");

return true;

}

}

二、在应用程序的MainActivity方法中:

public class MainActivity extends Activity

{

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

String apkRoot="chmod 777"+getPackageCodePath();

SystemManager.RootCommand(apkRoot);

}

}

相关文章

创维电视86英寸144Hz质量怎么样

创维电视86英寸144Hz质量怎么样

很多小伙伴在关注创维电视86英寸144Hz怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来看看吧。...

创维(Skyworth)75A375英寸价格多少钱

创维(Skyworth)75A375英寸价格多少钱

很多小伙伴在关注创维(Skyworth)75A375英寸怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起...

SONY索尼(SONY)KD-55X80K55英寸全面屏4K超高清安卓智能网络液晶平板电视使用心得反馈

SONY索尼(SONY)KD-55X80K55英寸全面屏4K超高清安卓智能网络液晶平板电视使用心得反馈

很多小伙伴在关注SONY索尼(SONY)KD-55X80K55英寸全面屏4K超高清安卓智能网络液晶平板电视怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和...

小米电视EA6565英寸测评怎么样

小米电视EA6565英寸测评怎么样

很多小伙伴在关注小米电视EA6565英寸怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来看看吧。...

海信电视ULEDX价格是多少

海信电视ULEDX价格是多少

很多小伙伴在关注海信电视ULEDX怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来看看吧。...

TCL电视65T8E好不好

TCL电视65T8E好不好

很多小伙伴在关注TCL电视65T8E怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来看看吧。...