`
ggggnuirgw
  • 浏览: 97983 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android 签名工厂

 
阅读更多

随手写的一个签名程序,Linux内核监听(监听文件夹内文件的变化),只要将你的文件后缀改成unsigned.apk放入到监听的目录即可快速签名。

希望对需要天天签名而烦恼的人有用哈。

 

 http://weibo.com/myzoooo

 

#include <unistd.h>
#include <sys/inotify.h>
#include <stdio.h>
#include <string.h>

#define MAX_BUF_SIZE 1024
#define CHECK_PATH "/home/ffly/Desktop"

int check_name(char *apk_name);
int sign_apk(char *apk_name,char *apk_path);

int check_dir(char *path)
{
    int fd, wd;
    int len, index;
    char buffer[MAX_BUF_SIZE];
    struct inotify_event *event;
    fd = inotify_init();
    if(fd < 0){
        printf("Failed to initialize inotify.\n");
        return 1;
    }
    wd = inotify_add_watch(fd, path,IN_CLOSE_WRITE | IN_MOVED_TO);
    if(wd < 0){
        printf("Can't add watch for %s", path);
        return 1;
    }
    while(len = read(fd, buffer, MAX_BUF_SIZE)){
        index = 0;
        while(index < len){
            event = (struct inotify_event *)(buffer+index);
            if(event->wd != wd)
                continue;
            if((event -> mask & IN_CLOSE_WRITE) || (event -> mask & IN_MOVED_TO)){
		int boolean;
		char pathbuff[512];
		boolean = check_name(event->name);
		sprintf(pathbuff,"%s/%s",CHECK_PATH,event->name);
		if(boolean){
			sign_apk(event->name,pathbuff);
		}
	    }
            index += sizeof(struct inotify_event)+event->len;
        }
    }
    return 0;
}

int check_name(char *apk_name){
	int len,fix_len,idx,j,count;
	char a,b;
	char fix[] = "unsigned.apk";
	len = strlen(apk_name);
	fix_len = strlen(fix);
	count =0;
	if(len<=fix_len)
		return 0;
	for(idx = len-fix_len,j = 0;idx<len;idx++,j++){

		a = apk_name[idx];
		b = fix[j];
		if(a == b){
			count++;
		}else{
			count =0;
			j=0;
		}
		 if(count == fix_len)
 	               return 1;
	}
	return 0;
}

int sign_apk(char *apk_name,char *apk_path){
	pid_t child_id;
	child_id  = fork();
	char new_path_buf[512];
	sprintf(new_path_buf,"%s-signed.apk",apk_path);
	printf("signed fileName:%s\n",apk_name);

	if(child_id==0){
		execl("/usr/bin/jarsigner","jarsigner","-storepass","ffly20110811","-keystore","/home/ffly/bin/lib/signapk_key/ffly.keystore","-signedjar",new_path_buf,apk_path,"ffly.keystore",(char *)0);
	}
	
	return 0;
}

int main(){
	check_dir(CHECK_PATH);
	return 0;
}
0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics