vsol

 avatar
unknown
c_cpp
2 years ago
9.4 kB
99
Indexable

void FUN_80439b40(int param_1,byte *param_2,undefined *param_3,uint param_4)

{
  uint *puVar1;
  int iVar2;
  uint *puVar3;
  uint *puVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  
  iVar2 = *(int *)(param_1 + 0x34);
  puVar3 = (uint *)(param_1 + 0x2c);
  iVar6 = *(int *)(param_1 + 0xc0);
  for (uVar5 = 0; uVar5 < param_4 >> 3; uVar5 = uVar5 + 1) {
    uVar11 = (uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[3] |
             (uint)param_2[2] << 8;
    uVar9 = (uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[7] |
            (uint)param_2[6] << 8;
    if ((iVar2 == 1) && (iVar6 != 0)) {
      uVar11 = uVar11 ^ *puVar3;
      uVar9 = uVar9 ^ *(uint *)(param_1 + 0x30);
    }
    uVar7 = (uVar11 >> 4 ^ uVar9) & DAT_80439ea8;
    uVar12 = uVar7 ^ uVar9;
    uVar13 = uVar7 << 4 ^ uVar11;
    uVar7 = (uVar13 >> 0x10 ^ uVar12) & 0xffff;
    uVar12 = uVar7 ^ uVar12;
    uVar13 = uVar7 << 0x10 ^ uVar13;
    uVar7 = (uVar13 ^ uVar12 >> 2) & DAT_80439eac;
    uVar13 = uVar7 ^ uVar13;
    uVar12 = uVar7 << 2 ^ uVar12;
    uVar7 = (uVar12 >> 8 ^ uVar13) & DAT_80439eb0;
    uVar13 = uVar7 ^ uVar13;
    uVar12 = uVar12 ^ uVar7 << 8;
    uVar7 = uVar12 << 1 | uVar12 >> 0x1f;
    uVar12 = (uVar13 ^ uVar7) & DAT_80439eb4;
    uVar13 = uVar12 ^ uVar13;
    uVar12 = uVar12 ^ uVar7;
    uVar7 = uVar13 << 1 | uVar13 >> 0x1f;
    iVar8 = 0;
    puVar4 = (uint *)(param_1 + 0x38);
    do {
      uVar13 = *puVar4 ^ (uVar12 << 0x1c | uVar12 >> 4);
      uVar10 = uVar12 ^ puVar4[1];
      uVar7 = uVar7 ^ (*(uint *)(PTR_DAT_80439eb8 + (uVar13 & 0x3f) * 4) |
                       *(uint *)(PTR_DAT_80439ebc + (uVar10 >> 8 & 0x3f) * 4) |
                       *(uint *)(PTR_DAT_80439ec0 + (uVar10 & 0x3f) * 4) |
                       *(uint *)(PTR_DAT_80439ec4 + (uVar10 >> 0x10 & 0x3f) * 4) |
                       *(uint *)(PTR_PTR_DAT_80439ec8 + (uVar10 >> 0x18 & 0x3f) * 4) |
                       *(uint *)(PTR_DAT_80439ecc + (uVar13 >> 8 & 0x3f) * 4) |
                       *(uint *)(PTR_DAT_80439ed0 + (uVar13 >> 0x10 & 0x3f) * 4) |
                      *(uint *)(PTR_DAT_80439ed4 + (uVar13 >> 0x18 & 0x3f) * 4));
      uVar13 = (uVar7 << 0x1c | uVar7 >> 4) ^ puVar4[2];
      puVar1 = puVar4 + 3;
      puVar4 = puVar4 + 4;
      uVar10 = *puVar1 ^ uVar7;
      iVar8 = iVar8 + 1;
      uVar12 = uVar12 ^ (*(uint *)(PTR_DAT_80439eb8 + (uVar13 & 0x3f) * 4) |
                         *(uint *)(PTR_DAT_80439ebc + (uVar10 >> 8 & 0x3f) * 4) |
                         *(uint *)(PTR_DAT_80439ec0 + (uVar10 & 0x3f) * 4) |
                         *(uint *)(PTR_DAT_80439ec4 + (uVar10 >> 0x10 & 0x3f) * 4) |
                         *(uint *)(PTR_PTR_DAT_80439ec8 + (uVar10 >> 0x18 & 0x3f) * 4) |
                         *(uint *)(PTR_DAT_80439ecc + (uVar13 >> 8 & 0x3f) * 4) |
                         *(uint *)(PTR_DAT_80439ed0 + (uVar13 >> 0x10 & 0x3f) * 4) |
                        *(uint *)(PTR_DAT_80439ed4 + (uVar13 >> 0x18 & 0x3f) * 4));
    } while (iVar8 != 8);
    uVar12 = uVar12 << 0x1f | uVar12 >> 1;
    uVar13 = (uVar7 ^ uVar12) & DAT_80439eb4;
    uVar7 = uVar13 ^ uVar7;
    uVar13 = uVar13 ^ uVar12;
    uVar12 = uVar7 << 0x1f | uVar7 >> 1;
    uVar7 = (uVar12 >> 8 ^ uVar13) & DAT_80439eb0;
    uVar13 = uVar7 ^ uVar13;
    uVar12 = uVar7 << 8 ^ uVar12;
    uVar7 = (uVar12 >> 2 ^ uVar13) & DAT_80439eac;
    uVar13 = uVar7 ^ uVar13;
    uVar12 = uVar7 << 2 ^ uVar12;
    uVar7 = (uVar12 ^ uVar13 >> 0x10) & 0xffff;
    uVar12 = uVar12 ^ uVar7;
    uVar13 = uVar7 << 0x10 ^ uVar13;
    uVar7 = (uVar12 ^ uVar13 >> 4) & DAT_80439ea8;
    uVar12 = uVar12 ^ uVar7;
    uVar13 = uVar7 << 4 ^ uVar13;
    if (iVar2 == 1) {
      if (iVar6 == 0) {
        uVar7 = *puVar3;
        *puVar3 = uVar11;
        uVar13 = uVar13 ^ uVar7;
        uVar12 = uVar12 ^ *(uint *)(param_1 + 0x30);
      }
      else {
        *puVar3 = uVar13;
        uVar9 = uVar12;
      }
      *(uint *)(param_1 + 0x30) = uVar9;
    }
    param_2 = param_2 + 8;
    param_3[3] = (char)uVar13;
    *param_3 = (char)(uVar13 >> 0x18);
    param_3[2] = (char)(uVar13 >> 8);
    param_3[1] = (char)(uVar13 >> 0x10);
    param_3[4] = (char)(uVar12 >> 0x18);
    param_3[6] = (char)(uVar12 >> 8);
    param_3[5] = (char)(uVar12 >> 0x10);
    param_3[7] = (char)uVar12;
    param_3 = param_3 + 8;
  }
  return;
}




void FUN_8043a1c8(undefined4 vs_key_hex,undefined4 exit_mac)

{
    undefined *puVar1;
    int *piVar2;
    undefined *puVar3;
    int iVar4;
    undefined *puVar5;
    code *UNRECOVERED_JUMPTABLE;
    char local_180 [8];
    char local_178 [8];
    char local_170 [8];
    char local_168 [8];
    undefined4 local_160;
    undefined auStack_15c [32];
    undefined auStack_13c [96];
    undefined auStack_dc [36];
    undefined4 local_b8;
    undefined4 local_b4;
    undefined4 local_b0;
    undefined4 local_ac;
    undefined4 local_a8;
    uint local_1c;
    char *local_18;

    puVar5 = memcpy;
    memcpy(auStack_13c,vs_key_hex,0x60);
    local_160 = 0x38;
    (*(code *)puVar5)(auStack_15c,0x23,7);
    (*DAT_8043a320)(auStack_dc);
    local_a8 = 0;
    local_1c = 0;
    (*DAT_8043a324)(auStack_dc,&local_160);
    puVar1 = 0x26;
    puVar5 = 0x00;
    local_b0 = local_b8;
    piVar2 = 0x40;
    puVar3 = 0x00;
    do {
        iVar4 = *piVar2;
        local_18 = local_180;
        piVar2 = piVar2 + 1;
        *puVar3 = auStack_13c[iVar4];
        puVar3 = puVar3 + 1;
    } while (((uint)piVar2 ^ (uint)puVar1) != 0);
    local_ac = local_b4;
    FUN_80439b40(auStack_dc,0x00,PTR_DAT_8043a338,24);
    (*DAT_8043a33c)(local_18,local_170,PTR_DAT_8043a338);
    local_a8 = 1;
    local_1c = (uint)piVar2 ^ (uint)puVar1;
    (*DAT_8043a324)(auStack_dc,&local_160);
    (*DAT_8043a340)(auStack_dc,PTR_DAT_8043a344);
    puVar1 = 0x00;
    local_b0 = local_b8;
    piVar2 = 0x26;
    do {
        iVar4 = *piVar2;
        piVar2 = piVar2 + 1;
        *puVar5 = auStack_13c[iVar4];
        puVar5 = puVar5 + 1;
    } while (piVar2 != (int *)puVar1);
    local_ac = local_b4;
    FUN_80439b40(auStack_dc,0x00,PTR_DAT_8043a338,24);
    (*DAT_8043a33c)(local_178,local_168,PTR_DAT_8043a338);
    puVar5 = memcpy;
    iVar4 = 0;
    do {
        if (local_178[iVar4] != local_180[iVar4]) break;
        iVar4 = iVar4 + 1;
    } while (iVar4 != 6);
    iVar4 = 0;
    do {
        if (PTR_DAT_8043a34c[iVar4] != local_170[iVar4]) goto LAB_8043a2f4;
        iVar4 = iVar4 + 1;
    } while (iVar4 != 8);
    iVar4 = 0;
    do {
        if (PTR_DAT_8043a34c[iVar4] != local_168[iVar4]) break;
        iVar4 = iVar4 + 1;
    } while (iVar4 != 8);
LAB_8043a2f4:
    memcpy(exit_mac,local_180,6);
    (*(code *)puVar5)(PTR_DAT_8043a350,local_170,8);
    /* WARNING: Could not recover jumptable at 0x8043a314. Too many branches */
    /* WARNING: Treating indirect jump as call */
    (*UNRECOVERED_JUMPTABLE)();
    return;
}


void FUN_80439868(void)

{
    char cVar1;
    undefined *puVar2;
    int iVar3;
    char *pcVar4;
    code *UNRECOVERED_JUMPTABLE;
    undefined elan_mac_address [8];
    undefined key_mac_address [8];
    undefined auStack_218 [12];
    undefined auStack_20c [96];
    char local_1ac [192];
    char acStack_ec [4];
    undefined auStack_e8 [220];

    puVar2 = PTR_thunk_FUN_80122588_80439964;
    pcVar4 = local_1ac;
    (*(code *)PTR_thunk_FUN_80122588_80439964)(pcVar4,0, 193);
    (*(code *)puVar2)(auStack_e8,0,0xd2);
    (*DAT_80439968)(0xc01d,auStack_e8);
    (*DAT_80439970)(pcVar4,PTR_DAT_8043996c,auStack_e8);
    iVar3 = (*DAT_80439974)(pcVar4);
    if (iVar3 == 192) { //lenght check
        //check if all bytes are hex (I guess)
        do {
            cVar1 = *pcVar4;
            if (((9 < (byte)(cVar1 - 0x30U)) && (0x19 < (byte)(cVar1 + 0x9fU))) &&
                (0x19 < (byte)(cVar1 + 0xbfU))) goto LAB_804398d6;
            pcVar4 = pcVar4 + 1;
        } while (pcVar4 != acStack_ec);
        
        (*DAT_8043998c)(local_1ac,auStack_20c); // convert ascii to hex
        puVar2 = PTR_thunk_FUN_80122588_80439964;
        FUN_8043a1c8(auStack_20c,key_mac_address); //convert VS_KEY to mac address
        (*(code *)puVar2)(auStack_e8,0,0x20);
        (*(code *)puVar2)(auStack_218,0,0xc);
        (*DAT_80439968)(0xc001,elan_mac_address); //Get ELAN MAC ADDRESS???
        // iVar3 = (*DAT_80439994)(elan_mac_address); //check MAC
        // if (iVar3 == 0) { //mac check
            iVar3 = FUN_80439f14(elan_mac_address,key_mac_address,6); //Compare 
            if (iVar3 == 0) {
                // (*DAT_8043997c)(PTR_s_Software_encryption_check_is_fai_80439988);
                printf("Software encryption check is fail!");
            } else {
                // (*DAT_8043997c)(PTR_s_Software_encryption_check_is_suc_80439980);
                printf("Software encryption check is succeed!");
            }
        // } else {
            // //(*DAT_8043997c)(PTR_s_Software_encryption_check_is_suc_80439980);
            // printf("Software encryption check is succeed!");
        // }
    } else {
LAB_804398d6:
        printf("Software_encryption_key_is_not_set");
        // (*DAT_8043997c)(PTR_s_Software_encryption_key_is_not_s_80439978);
    }
    /* WARNING: Could not recover jumptable at 0x80439916. Too many branches */
    /* WARNING: Treating indirect jump as call */
    (*UNRECOVERED_JUMPTABLE)();
    return;
}
Editor is loading...