arm平台编译adb

来源:互联网 发布:算法C 第四版 pdf 编辑:程序博客网 时间:2024/05/22 02:23

参考github:https://github.com/bonnyfone/adb-arm

        本来的目的是在arm平台编译以后能够使用adb shell获取shell权限,然后就可以避开其他权限无法执行su的问题。

最开始,先修改了android源码中的su.c,将root和shell权限验证部分注释掉,编译出来还是不行,在setgid和setuid的时候会产生错误,这个错误折腾了我两天也没搞定,只能另找办法了。

突然想到adb是有shell权限的,可以自己编译adb为动态库,通过jni方式给android应用调用,这样在已经root的手机上就能有root权限了(没有root的平台就需要再研究一下如何root),目前这个方法还未验证。

提供adb编译的方法(这个方法只是编译可执行文件adb,可以在这个基础上修改为动态库方式,这个方式比较简单,就不在这里说明了):

编译版本是:android-4.4.4_r2.0.1

源码的下载需要梯子……

脚本文件:

#         CONFIG# -------------------------# Branch to checkout from Android source code repobranch=android-4.4.4_r2.0.1# Makefile to use (will be automatically copied into system/core/adb)makefile=makefile.sample# DOWNLOAD necessary files# -------------------------echo "\n>> >>> ADB for ARM <<< \n"echo "\n>> Downloading necessay files ($branch branch)\n"mkdir android-adbcd android-adbmkdir systemcd systemgit clone -b $branch https://android.googlesource.com/platform/system/coregit clone -b $branch https://android.googlesource.com/platform/system/extrascd ..mkdir externalcd externalgit clone -b $branch https://android.googlesource.com/platform/external/zlibgit clone -b $branch https://android.googlesource.com/platform/external/opensslgit clone -b $branch https://android.googlesource.com/platform/external/libselinuxcd ..# MAKE# -------------------------echo "\n>> Copying makefile into system/core/adb...\n"cp ../$makefile system/core/adb/makefile -fcd system/core/adb/echo "\n>> Make... \n"make cleanmakeecho "\n>> Copying adb back into current dir...\n"cp adb ../../../../echo "\n>> FINISH!\n"

makefile.example文件:

# ADB makefile# ------------#TODO change TOOLCHAIN variable to your toolchain path #TOOLCHAIN= /opt/poky/1.5/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-TOOLCHAIN = /home/linux/bin/android-toolchain/bin/arm-linux-androideabi-CC = $(TOOLCHAIN)gccLD = $(TOOLCHAIN)gccCXX = $(CC)SRCS += adb.cSRCS += fdevent.cSRCS += adb_client.cSRCS += commandline.cSRCS += console.cSRCS += file_sync_client.cSRCS += get_my_path_linux.cSRCS += services.cSRCS += sockets.cSRCS += transport.cSRCS += transport_local.cSRCS += transport_usb.cSRCS += usb_linux.cSRCS += usb_vendors.cSRCS += adb_auth_host.c VPATH += ../libcutilsSRCS += list.cSRCS += socket_inaddr_any_server.cSRCS += socket_local_client.cSRCS += socket_local_server.cSRCS += socket_loopback_client.cSRCS += socket_loopback_server.cSRCS += socket_network_client.cSRCS += load_file.c VPATH += ../libzipfileSRCS += centraldir.cSRCS += zipfile.c VPATH += ../../../external/zlib/srcSRCS += adler32.cSRCS += compress.cSRCS += crc32.cSRCS += deflate.cSRCS += infback.cSRCS += inffast.cSRCS += inflate.cSRCS += inftrees.cSRCS += trees.cSRCS += uncompr.cSRCS += zutil.cCPPFLAGS += -DADB_HOST=1CPPFLAGS += -DHAVE_FORKEXEC=1CPPFLAGS += -DHAVE_SYMLINKSCPPFLAGS += -DHAVE_TERMIO_HCPPFLAGS += -DHAVE_SYS_SOCKET_HCPPFLAGS += -D_GNU_SOURCECPPFLAGS += -D_XOPEN_SOURCECPPFLAGS += -std=c++11 CPPFLAGS += -I.CPPFLAGS += -I../includeCPPFLAGS += -I../../../external/zlibCPPFLAGS += -I../../../external/openssl/includeCPPFLAGS += -I../base/include CFLAGS += -O2 -g -Wall -Wno-unused-parameterLIBS = -lcrypto -pthread -fPIE -pie#LIBS += -lrtOBJS = $(SRCS:.c=.o)all: adbadb: $(OBJS)$(LD) -o $@ $(LDFLAGS) $(OBJS) $(LIBS)clean:rm -rf $(OBJS)
TOOLCHAIN是本地的ndk工具链,是从r9中抽取出来的。

可以手动下载脚本中的源代码,然后直接把makefile放在~/system/core/adb/下面,执行make就能产生adb文件,验证没有问题。动态库还没来得及编译。