Last active
August 29, 2015 14:00
-
-
Save sfan5/f4ff90009f991887073c to your computer and use it in GitHub Desktop.
A simple Android run-as replacement when the preinstalled one won't work (I'm looking at you Android 4.2)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include <sys/types.h> | |
#include <errno.h> | |
#include <unistd.h> | |
#include <stdarg.h> | |
#include <stdbool.h> | |
// Link this with a libselinux.so from your Android device | |
// or extract the precompiled binary like this: | |
// cat precompiled.txt | base64 -d | xz -d > run-as | |
struct pkginfo { | |
int uid; | |
bool debuggable; | |
char dataDir[99]; | |
char seinfo[99]; | |
}; | |
static inline void read_line(FILE *f, char *buf, int maxlen) | |
{ | |
int c, i = 0; | |
do { | |
c = getc(f); | |
buf[i] = c; | |
i++; | |
} while(c != '\n' && c != '\r' && !feof(f) && i < maxlen); | |
i--; | |
buf[i] = '\0'; | |
} | |
struct pkginfo get_pkginfo(const char *pkgname) | |
{ | |
struct pkginfo info; | |
FILE *f; | |
char buf[256], name[99]; | |
unsigned int d; | |
info.uid = 0; | |
info.debuggable = false; | |
info.dataDir[0] = '\0'; | |
info.seinfo[0] = '\0'; | |
f = fopen("/data/system/packages.list", "rb"); | |
if(!f) { | |
fprintf(stderr, "Failed to open packages.list: %s\n", strerror(errno)); | |
exit(1); | |
} | |
while(1) { | |
if(feof(f)) | |
goto out; | |
read_line(f, buf, 256); | |
sscanf(buf, "%s %u %u %s %s", name, &info.uid, &d, info.dataDir, info.seinfo); | |
info.debuggable = (d == 1); | |
if(name == pkgname) | |
goto out; | |
} | |
out: | |
fclose(f); | |
return info; | |
} | |
extern int selinux_android_setcontext(uid_t uid, int isSystemServer, const char *seinfo, const char *name); | |
int main(int argc, char *argv[]) | |
{ | |
struct pkginfo info; | |
if(argc < 2) { | |
fprintf(stderr, "Usage: run-as <package-name> <command> [<args>]\n\n"); | |
return 1; | |
} | |
info = get_pkginfo(argv[1]); | |
if (info.uid == 0) { | |
fprintf(stderr, "Package '%s' was not found\n", argv[1]); | |
return 1; | |
} | |
// Change our uid & gid | |
if(setresgid(info.uid,info.uid,info.uid) || setresuid(info.uid,info.uid,info.uid)) { | |
fprintf(stderr, "Failed to set uid/gid\n"); | |
return 1; | |
} | |
if (selinux_android_setcontext(info.uid, 0, info.seinfo, argv[1]) < 0) { | |
fprintf(stderr, "Failed to set SELinux security context: %s\n", strerror(errno)); | |
return 1; | |
} | |
// cd into the data directory | |
{ | |
int ret; | |
do { | |
ret = chdir(info.dataDir); | |
} while (ret < 0 && errno == EINTR); | |
if (ret < 0) { | |
fprintf(stderr, "Could not cd to package's data directory: %s\n", strerror(errno)); | |
return 1; | |
} | |
} | |
if (argc >= 3) { | |
if (execvp(argv[2], argv+2) < 0) { | |
fprintf(stderr, "exec failed for %s Error:%s\n", argv[2], strerror(errno)); | |
return -errno; | |
} | |
} | |
// Execute shell if user didn't specify a command | |
execlp("/system/bin/sh", "sh", NULL); | |
fprintf(stderr, "exec failed\n"); | |
return -errno; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment