Author: Not specified Language: text
Description: Not specified Timestamp: 2013-06-12 10:42:05 +0000
View raw paste Reply
  1. #include <stdio.h>
  2. #include <stdint.h>
  3.  
  4. static inline uint32_t check(uint8_t A, uint8_t B, uint8_t C, uint8_t D)
  5. {
  6.         uint32_t ret;
  7.  
  8.         asm volatile (
  9.                 "movzbl %3, %%eax;"
  10.                 "movzbl %2, %%ecx;"
  11.                 "imul   %%eax,%%ecx;"
  12.                 "movzbl %1, %%eax;"
  13.                 "add    %%eax,%%ecx;"
  14.                 "sar    $0x1f,%%ecx;"
  15.                 "shr    $0x18,%%ecx;"
  16.                 "mov    %%cl,%%dl;"
  17.                 "mov    %%dl,-0x1(%%rsp);"
  18.                 "movzbl %3, %%eax;"
  19.                 "movzbl %2, %%ecx;"
  20.                 "imul   %%eax,%%ecx;"
  21.                 "movsbl -0x1(%%rsp),%%eax;"
  22.                 "mov    %%eax,%%esi;"
  23.                 "add    %%ecx,%%esi;"
  24.                 "movzbl %1, %%ecx;"
  25.                 "add    %%ecx,%%esi;"
  26.                 "sub    %%eax,%%esi;"
  27.                 "mov    %%sil,%%dl;"
  28.                 "movsbl %%dl,%%eax;"
  29.                 "mov    %%eax,%%ecx;"
  30.                 "sar    $0x1f,%%ecx;"
  31.                 "shr    $0x18,%%ecx;"
  32.                 "mov    %%eax,%%esi;"
  33.                 "add    %%ecx,%%esi;"
  34.                 "and    $0xffffff00,%%esi;"
  35.                 "sub    %%esi,%%eax;"
  36.                 "mov    %%al,%%dl;"
  37.                 "mov    %%dl,-0x2(%%rsp);"
  38.  
  39.                 "movzbl %1, %%eax;"
  40.                 "movzbl %2, %%ecx;"
  41.                 "movzbl %3, %%esi;"
  42.  
  43.                 "add    %%esi,%%ecx;"
  44.                 "xor    %%ecx,%%eax;"
  45.                 "movzbl %4, %%ecx;"
  46.  
  47.                 "xor    %%ecx,%%eax;"
  48.                 "mov    %%al,%%dl;"
  49.                 "mov    %%dl,-0x3(%%rsp);"
  50.                 "movsbl -0x2(%%rsp),%%eax;"
  51.                 "cmp    $0x2f,%%eax;"
  52.                 "sete   %%dl;"
  53.                 "and    $0x1,%%dl;"
  54.                 "movzbl %%dl,%%eax;"
  55.                 "movsbl -0x3(%%rsp),%%ecx;"
  56.                 "cmp    $0x5b,%%ecx;"
  57.                 "sete   %%dl;"
  58.                 "and    $0x1,%%dl;"
  59.                 "movzbl %%dl,%%ecx;"
  60.                 "and    %%ecx,%%eax;"
  61.                 "mov    %%eax, %0"
  62.                 : "=r" (ret)
  63.                 : "r" (A), "r" (B), "r" (C), "r" (D)
  64.                 : "%eax", "%ecx", "%esi", "%edx"
  65.                 );
  66.  
  67.                 return ret;
  68. }
  69.  
  70. int main(int argc, char *argv[])
  71. {
  72.         /*
  73.                 A    B    C    D
  74.            0x?? 0x?? 0xC0 0xDE
  75.  
  76.            C and D fixed
  77.         */
  78.  
  79.         uint16_t A = 0x00;
  80.         uint16_t B = 0x00;
  81.         uint8_t C = 0xC0;
  82.         uint8_t D = 0xDE;
  83.  
  84.         for(; A <= 0xFF; A++)
  85.         {
  86.                 B = 0x00;
  87.                 for(; B <= 0xFF; B++)
  88.                 {
  89.                         if(check(A, B, C, D) != 0)
  90.                         {
  91.                                 printf("Possible value: %02X %02X %02X %02X\n", A, B, C, D);
  92.                         }
  93.                 }
  94.         }
  95. }
  96.  
View raw paste Reply