0

I have a Lenovo Thinkpad that only allows certain hardware to be installed. If there is a piece of hardware connected that is not on the whitelist, BIOS will tell you to remove it and restart. Otherwise the machine will not boot. Now I want to install an unauthorized wifi+bluetooth module, so I need to get rid of that whitelist.

I've been following this guide up to the point where the author suggests the use of the IDA pro software, which I don't want to buy just for this one hack.

Instead, I have dabbled around a bit with the extracted body in Ghidra, and managed to get to locate the hex code for the "Unauthorized network card detected ..." and to find out that the string is part of some entity called "DAT_000104d0", and the only place that entity is referenced is the following function:

void FUN_00010ec4(undefined8 param_1,undefined *param_2,undefined8 param_3,undefined8 param_4)

{
   if (param_2 == (undefined *)0x0) {
     param_2 = &DAT_00010ec0;
  }
  (**(code **)(DAT_00011040 + 0x170))(0x200,param_1,param_2,param_3,&DAT_000104d0,param_4);
  return;
}

That function in turn gets called from here:

longlong entry(undefined8 param_1,longlong param_2)

{
  longlong lVar1;
  undefined8 local_res18;
  undefined8 *local_res20;
  undefined local_18 [24];

  FUN_00010f08(param_1,param_2);
  lVar1 = (**(code **)(DAT_00011040 + 0x140))(&LAB_00010480,0,&DAT_00011058);
  if (-1 < lVar1) {
    lVar1 = (**(code **)(DAT_00011040 + 0x140))(&LAB_00010410,0,&DAT_00011070);
    if (-1 < lVar1) {
      lVar1 = (**(code **)(DAT_00011040 + 0x140))(&DAT_000103f0,0,&DAT_00011078);
      if (-1 < lVar1) {
        lVar1 = (**(code **)(DAT_00011040 + 0x140))(&LAB_00010460,0);
        if (-1 < lVar1) {
          DAT_00011060 = *local_res20;
          local_res18 = 0;
          _DAT_00011068 = &LAB_00010b54;
          (**(code **)(DAT_00011040 + 0x80))(&local_res18,&DAT_000103d0,0,&DAT_00011068);
          DAT_00011028 = local_res18;
          FUN_00010ec4(0x10,FUN_00010cf8,0,local_18);
          lVar1 = 0;
        }
      }
    }
  }
  return lVar1;
}

Any idea on how I should proceed, hopefully without messing up the whole thing?

  • It may help to start explaining what the problem is you are having that you are trying to solve. In all my years in IT, I never had to resort to something that seems like coding in order to boot. – LPChip May 27 at 21:12
  • 1
    It seems this would be a better fit at Stack Overflow due to the nature of the underline problem. It's either going to require you to modify the firmware to NOOP an assembly instruction or compile the decompiled. The assembly problem could be asked at Stack Overflow with a little effort on your part. How you decompile the code and then recompile it, without the proper tools, is a little more difficult (since how you accomplish the decompile would be out of scope at SO). – Ramhound May 27 at 21:20
  • @LPChip: I tried to make the question a bit clearer. – BraveSentry May 28 at 7:07
  • 1
    @Ramhound: I'll try posting the question to SO too, thank you. – BraveSentry May 28 at 7:09
  • I sincerely wish you luck with this question. I've run into it on multiple laptop's. (HP) I didn't want to get involved with modifying and flashing the bios. – Tim_Stewart May 29 at 19:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.