Android系统添加自己写的工具
在android系统的源码有很多工具的源码。存放路径如下
- android/system底层文件系统库、应用及组件,linux自带的
- android/externalandroid使用的一些开源的模组
- android/frameworks/base/cmds一些android重要命令:am、app_proce等
实际上这些工具都是小应用。调试串口接电脑,开启控制台可以使用这些工具。如果USB连电脑,用adb调试工具,输入adbshell指令进入控制台 。
- dumpsys:能dump系统服务的各种状态。
- dumpstatus:android的相关信息,内核,进程,相关信息的主要实现地方
- top:CPU使用
- pm:包管理(packagemanager)
- am:活动管理activitymanager
- tinyalsa:音频调试,有tinycap、tinymix、tinyplay
- settings:更改SettingsProvider数据库的值
- logcat:系统日志
- monkey:测试工具
- svc:控制电源、数据流量、wifi、usb、以太网的开关状态
- wm:查看设置屏幕的分辨率、密度
- screencap:截屏
- screenrecord:录屏
目标设备的system/bin和system/xbin有android添加的一些工具和linux自带的工具,这些工具可能是java、c、c++或shell指令写的。上面提到的几个工具都挺好玩的,具体使用方法可以输入参数--help查看帮助或者网上搜索。
这里介绍如何自己用c或者c++编写一个工具并且在android编译的时候加入到系统当中
一编写一个测试ioctl接口的小工具
创建文件夹frameworks/base/cmds/dytest
1.创建Android.mk文件
LOCAL_PATH:=$(callmy-dir) include$(CLEAR_VARS) LOCAL_SRC_FILES:=\ test.c\ LOCAL_SHARED_LIBRARIES:=\ libcutils\ liblog\ LOCAL_LDLIBS:=-llog LOCAL_MODULE:=dytest LOCAL_MODULE_TAGS:=optional include$(BUILD_EXECUTABLE)
2.创建test.h
#include#include #include #ifndefIO_BASIC_H_ #defineIO_BASIC_H_ #defineRD_UNIT_SIZE1024 #defineWR_UNIT_SIZE1024 #defineRDWR_UNIT_SIZE1024 #defineS_IRWXU00700 #defineS_IRUSR00400 #defineS_IWUSR00200 #defineS_IXUSR00100 #defineS_IRWXG00070 #defineS_IRGRP00040 #defineS_IWGRP00020 #defineS_IXGRP00010 #defineS_IRWXO00007 #defineS_IROTH00004 #defineS_IWOTH00002 #defineS_IXOTH00001 #defineSI4754_CMDMAGIC0X81 #defineusrdatatypeunsignedlong enumFM_CMD_TYPE{ FM_START=_IOWR(SI4754_CMDMAGIC,1,unsignedlong), FM_STOP, FM_SEEKUP, FM_SEEKDOWN, FM_SETFREQ, FM_SETVOL, FM_GETFREQ, FM_GETVOL, FM_TEST }; /* ============================================================================ Name:IO_Operation.c Author:DongYi Version: ============================================================================ */ //以O_RDWR|O_CREAT|O_TRUNC,S_IWUSR|S_IRUSR|S_IWGRP|S_IRGRP|S_IROTH权限打开文件 intopen_file(constchar*filename); //以O_RDWR|O_CREAT|O_TRUNC,S_IWUSR|S_IRUSR|S_IWGRP|S_IRGRP|S_IROTH权限打开文件 intopen_file_create(constchar*filename); //以O_RDONLY,S_IWUSR|S_IRUSR|S_IWGRP|S_IRGRP|S_IROTH权限打开文件
3.创建test.c
#include#include #include #include #include #include #include #include #include"test.h" unsignedlongqndData; constchar*filename="/dev/fmsi4754"; intopen_file(constchar*filename){ returnopen_file_create(filename); } intopen_file_create(constchar*filename){ intfd;//文件描述符 fd=open(filename,O_RDWR|O_CREAT|O_TRUNC, S_IWUSR|S_IRUSR|S_IWGRP|S_IRGRP|S_IROTH); if(fd==-1){ printf("\nopen_file:文件操作失败"); return-1; } printf("\nopen_file:文件操作成功"); returnfd; } intmain(void){ intfp; intret; charbuf[1024]={0}; longlen; puts("~~~~~~~~~~test.c测试程序LinuxI/O操作~~~~~~~~~~~~\n\n");/*printsLinuxI/O操作*/ //for(len=64000;len>0;len--); sleep(1); fp=open_file_create(filename); if(fp<0){ printf("open_file:faild!\n"); return-1; }else{ printf("open_file:success!\n"); } qndData=0x12345678; do{ ret=ioctl(fp,FM_START,&qndData); printf("ioctl_file:qndData:0x%x\n",qndData); if(ret<0){ printf("ioctl_file:faild!\n"); close(fp); return-1; }else{ printf("ioctl_file:success\n"); } }while(qndData==0x12345678);//开机 return1; }
代码和编译规则文件准备好了,输入mmm frameworks/base/cmds/dytest/编译。烧录就可使用。
这个工具还可以使用arm-linux-androideabi-gcc工具编译
arm-linux-androideabi-gcc-odytest--sysroot=/home/android/SambShare/dyT3-v1.0/android/prebuilts/ndk/current/platforms/android-18/arch-arm/test.c
用这个方式编译的话就要把dytest工具push到android系统,然后修改权限。当然你也可以用android.mk文件拷贝dytest到system/bin目录下。
二添加android权限后门工具seustub
这个工具是在网上下载的,不方便公布代码,实际使用socket实现在控制台输入指令。
获取seustub压缩包后解压seustub放置在external/文件夹
1.external/seustub/下创建Android.mk
includeexternal/seustub/seustub/Android.mk includeexternal/seustub/seustubtest/Android.mk
2.创建external/seustub/seustub/Android.mk
LOCAL_PATH:=$(callmy-dir) include$(CLEAR_VARS) LOCAL_SRC_FILES:=\ seustub.cpp\ util.cpp\ LOCAL_SHARED_LIBRARIES:=\ libcutils\ liblog\ LOCAL_LDLIBS:=-llog LOCAL_MODULE:=seustub LOCAL_MODULE_TAGS:=optional include$(BUILD_EXECUTABLE)
3.创建external/seustub/seustubtest/Android.mk
LOCAL_PATH:=$(callmy-dir) include$(CLEAR_VARS) LOCAL_SRC_FILES:=\ seustubtest.cpp\ ../seustub/util.cpp\ LOCAL_SHARED_LIBRARIES:=\ libcutils\ liblog\ LOCAL_LDLIBS:=-llog LOCAL_MODULE:=seustubtest LOCAL_MODULE_TAGS:=optional include$(BUILD_EXECUTABLE)
4.init.rc中添加启动服务
serviceseustub/system/bin/seustub classmain
最后输入mmmandroid/external/seustub编译
使用方法是seustubtest+指令+参数,例seustubtestchmod777/dev/si4754
公司的JAVA应用需要临时的root权限,还需要获取返回值判断指令的成功。因此删除seustubtest部分,为seustub添加了供上层调用的JNI接口,并且指令的返回结果输出到文件中。不做详细介绍。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接