Android NDK Get IMSI from C code

Although not really “native”, but works well by parsing a command line call instead - credit goes to “Alex P.” for the answer in http://stackoverflow.com/questions/14813875/how-to-get-imsi-number-in-android-using-command-line - thanks for the command.


char cmd_res_line[256];
char total_cmd_res[25600];


//WARNING! NO HANDLING FOR VERY_LONG COMMAND READS YET
char* exec_get_out(char* cmd) {

    FILE* pipe = popen(cmd, "r");

    if (!pipe) 
      return NULL;

    total_cmd_res[0] = 0;

    while(!feof(pipe)) {
        if(fgets(cmd_res_line, 256, pipe) != NULL)
	  {
	    //TODO: add handling for long command reads...
	    strcat(total_cmd_res,cmd_res_line);
	  }
    }
    pclose(pipe);
    return total_cmd_res;
}

...

char imsi[16];
imsi[15]=0;
char* res = exec_get_out("service call iphonesubinfo 3");  
if (strlen(res)>210) {
	imsi[0] = res[75];
	imsi[1] = res[77];
	imsi[2] = res[79];
	imsi[3] = res[81];
	imsi[4] = res[136];
	imsi[5] = res[138];
	imsi[6] = res[140];
	imsi[7] = res[142];
	imsi[8] = res[144];
	imsi[9] = res[146];
	imsi[10] = res[148];
	imsi[11] = res[150];
	imsi[12] = res[205];
	imsi[13] = res[207];
	imsi[14] = res[209];
	printf("imsi: %s len %d\r\n",imsi,strlen(imsi));
}


blog comments powered by Disqus

This ClearEvo.com blog is powered by Debian GNU/Linux, running lighttpd, generated using jekyll on Ubuntu.

Subscribe for new updates