FreeCalypso > hg > freecalypso-reveng
diff atsc.c @ 65:3890c2672fe0
atsc hack written
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sun, 02 Feb 2014 08:45:56 +0000 |
parents | |
children | 39f2ccd06b57 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atsc.c Sun Feb 02 08:45:56 2014 +0000 @@ -0,0 +1,58 @@ +/* + * It is known that some GSM devices have undocumented AT commands for + * changing the IMEI. There is no standard syntax for such an AT command + * (by the "proper rules" one is not supposed to exist at all), and instead + * there seem to be several different ad hoc syntaxes. This source file, + * found on a Chinese site, implements one of these numerous ad hoc + * IMEI-changing AT commands: + * + * ftp://ftp.ifctf.org/pub/GSM/TI_src/ati_sc.c + * + * Notice that this particular incarnation of the "set IMEI" AT command + * is called AT@SC; there just happens to be an identically-named AT@SC + * command on Openmoko's GSM modems. Might it perchance be the same + * IMEI changing command? + * + * This program constructs what should be a valid input to the decoding + * logic in the ati_sc.c source above, for the purpose of testing whether + * or not such a command would indeed effect an IMEI change on a GTA02 modem. + */ + +#include <stdio.h> +#include <ctype.h> +#include <string.h> +#include <strings.h> +#include <stdlib.h> + +static char hexdigits[] = "0123456789abcdef"; + +main(argc, argv) + char **argv; +{ + char hexout[16]; + unsigned n1, n2, cksum; + int i, c; + + if (argc != 2) { +usage: fprintf(stderr, "usage: %s 15-IMEI-digits\n", argv[0]); + exit(1); + } + if (strlen(argv[1]) != 15) + goto usage; + n1 = n2 = 0; + for (i = 0; i < 15; i++) { + c = argv[1][i]; + if (!isdigit(c)) + goto usage; + c -= '0'; + hexout[i] = hexdigits[c ^ 5]; + if (i < 7) + n1 = n1 * 10 + c; + else + n2 = n2 * 10 + c; + } + hexout[15] = '\0'; + cksum = (n1 + n2) % 1973; + printf("AT@SC=%s%04u\n", hexout, cksum); + exit(0); +}