The following is the full set of questions used in the atom impact study. Raw source code is available here.


Question 1

Obfuscated (program A, filename a.c):

#include <stdio.h>
void F1(int V1, char *V2, int V3) {
  printf("a: %d %s %d\n", V1, V2, V3);
  int V4 = V1 / V3 + V3;
  char *V5 = V2-- - V1;
  int V6 = (int)V2 / (int)V2;
  printf("b: %d %s %d\n", V4, V5, V6);
}
int V7;
int main() {
  for (; V7["ab"]; F1('a' - 'a', V7++ + "zy", 'z' / 'z'))
    ;
  printf("c\n");
}

Transformed (program B, filename b.c):

#include <stdio.h>

void F1(int V1, char *V2, int V3) {
  printf("a: %d %s %d\n", V1, V2, V3);
  int V4 = (V1 / V3) + V3;
  char *V5 = V2 - V1;
  V2 = V2 - 1;
  int V6 = (int)V2 / (int)V2;
  printf("b: %d %s %d\n", V4, V5, V6);
}
int V7;
int main() {
  for (; "ab"[V7] != 0;) {
    F1(97 - 97, V7 + "zy", 122 / 122);
    V7 = V7 + 1;
  }
  printf("c\n");
}

Question 2

Obfuscated (program C, filename c.c):

#include <stdio.h>

void F1(int V1, int V2, int V3, int V4) {
  while ((V2 = ++V1) < 4)
    for (V3 = 0; printf("a: %d %d %d %d\n", V1, V2, V3, V4),
        V3 < V2 ? V3 = V3 * 8 + V2 % 8, V2 /= 8, V4 = V3 == V2 | V3 / 8 == V2,
        1 : (V1 - ++V4 || (printf("b: %d\n", V1), 2)) && V1 % V4;)
      ;
}

int main() {
  F1(1, 0, 0, 0);
  printf("c\n");
}

Transformed (program D, filename d.c):

#include <stdio.h>

void F1(int V1, int V2, int V3, int V4) {
  V1 = V1 + 1;
  V2 = V1;
  while (V2 < 4) {
    V3 = 0;

    printf("a: %d %d %d %d\n", V1, V2, V3, V4);
    int V9;
    if (V3 < V2) {
      V3 = (V3 * 8) + (V2 % 8);
      V2 /= 8;
      V4 = (V3 == V2) | ((V3 / 8) == V2);
      V9 = 1;
    } else {
      V4 = V4 + 1;
      if ((V1 - V4) != 0) {
        V9 = V1 % V4;
      } else {
        printf("b: %d\n", V1);
        V9 = 2 && (V1 % V4);
      }
    }

    for (; V9;) {
      printf("c: %d %d %d %d\n", V1, V2, V3, V4);
      if (V3 < V2) {
        V3 = (V3 * 8) + (V2 % 8);
        V2 /= 8;
        V4 = (V3 == V2) | ((V3 / 8) == V2);
        V9 = 1;
      } else {
        V4 = V4 + 1;
        if ((V1 - V4) != 0) {
          V9 = V1 % V4;
        } else {
          printf("d: %d\n", V1);
          V9 = 2 && (V1 % V4);
        }
      }
    }

    V1 = V1 + 1;
    V2 = V1;
  }
}

int main() {
  F1(1, 0, 0, 0);
  printf("e\n");
}


Question 3

Obfuscated (program E, filename e.c):

#include <stdio.h>

double V4;
int V5;

int F1(int V1, int V2, int V3) {
  printf("a: %d %d %d %f\n", V1, V2, V3, V4);
  return printf(
      "b: %c\n",
      (V1-- + 1 && V1 + 4 && F1(V1, -1, V1), V1 && V2)
          ? (F1(-1, ++V2, V3),
             ((V5 = (int)(V4 = (int)(V2 + 1) /
                               (1 - (int)V3 * 2 - (int)V3 * (int)V3),
                          V4 * V4 >= 1 && ((2 % 3) / 4 - 2 + (V4 / 2)) < 1),
               printf("c: %d %d %d %f %d\n", V1, V2, V3, V4, V5), V5)["ab"]))
          : 'c');
}

int main() {
  F1(-1, -2, 0);
  printf("d\n");
}

Transformed (program F, filename f.c):

#include <math.h>
#include <stdio.h>
double V4;

int F1(int V1, int V2, int V3) {
  int V5 = V1;
  char V6;

  printf("a: %d %d %d %f\n", V1, V2, V3, V4);

  V1 = V1 - 1;
  if (V5 + 1 != 0 && V5 + 4 != 0) {
    F1(V1, -1, V1);
  }

  if (V1 && V2) {
    V2 = V2 + 1;
    F1(-1, V2, V3);
    V4 = trunc((int)(V2 + 1) / (1 - ((int)V3 * 2) - ((int)V3 * (int)V3)));
    int V7 =
        ((V4 * V4) >= 1) && ((((int)trunc((2 % 3) / 4) - 2) + (V4 / 2)) < 1);
    printf("c: %d %d %d %f %d\n", V1, V2, V3, V4, V7);
    V6 = "ab"[V7];
  } else {
    V6 = 'c';
  }

  return printf("b: %c\n", V6);
}

int main() {
  F1(-1, -2, 0);
  printf("d\n");
}

Question 4

Obfuscated (program G, filename g.c):

#include <stdio.h>

int F1(int V1, int V2) {
  int V3, V4;

  printf("a: %d %d\n", V1, V2);

  for (V3 = V4 = 1; V3* V3 <= V1 ? V4 = V1 % V3 ? V4 : V3 : V2 + 1
                    ? V4 < 2 ? V1 && F1(V2, 0) : F1(V4, V2),
      printf("b: %d\n", V2 ? 10 : 32 << !V1),
      V1 -= V4 * !!V1 : (F1(V4, V1 / V4), 0);) {
    printf("c: %d %d\n", V1, V4);
    V3++;
  }

  return 0;
}

int main() {
  F1(1, 0);
  printf("d\n");
}

Transformed (program H, filename h.c):

#include <stdio.h>

int F1(int V1, int V2) {
  int V3, V4;

  printf("a: %d %d\n", V1, V2);

  V4 = 1;
  V3 = V4;

  int V5;

  if (V3 * V3 <= V1) {
    if (V1 % V3 != 0) {
      V4 = V4;
      V5 = V4;
    } else {
      V4 = V3;
      V5 = V4;
    }
  } else {
    if (V2 + 1 != 0) {
      if (V4 < 2) {
        if (V1 != 0) {
          F1(V2, 0);
        }
      } else {
        F1(V4, V2);
      }
      if (V2 != 0) {
        printf("1: %d\n", 10);
      } else {
        printf("2: %d\n", 32 << !V1);
      }
      V1 -= V4 * !!V1;
      V5 = V1;
    } else {
      F1(V4, V1 / V4);
      V5 = 0;
    }
  }

  for (; V5 != 0;) {
    printf("b: %d %d\n", V1, V4);
    V3++;

    if (V3 * V3 <= V1) {
      if (V1 % V3 != 0) {
        V4 = V4;
        V5 = V4;
      } else {
        V4 = V3;
        V5 = V4;
      }
    } else {
      if (V2 + 1 != 0) {
        if (V4 < 2) {
          if (V1 != 0) {
            F1(V2, 0);
          }
        } else {
          F1(V4, V2);
        }
        if (V2 != 0) {
          printf("3: %d\n", 10);
        } else {
          printf("4: %d\n", 32 << !V1);
        }
        V1 -= V4 * !!V1;
        V5 = V1;
      } else {
        F1(V4, V1 / V4);
        V5 = 0;
      }
    }
  }

  return 0;
}

int main() {
  F1(1, 0);
  printf("d\n");
}