Skip to content

hClientDLL not found after 25th anniversary update #5

@8dcc

Description

@8dcc

After the update of 17/10/2023, the cheat cannot inject with the following error message:

hl-cheat: Injected.
hl-cheat: globals_init: Can't find hClientDLL
hl-cheat: load: Error loading globals, aborting

This is of course caused by:

hl-cheat/src/globals.c

Lines 43 to 53 in c6f9e38

hw = dlopen("hw.so", RTLD_LAZY | RTLD_NOLOAD);
if (!hw) {
ERR("Can't open hw.so");
return false;
}
h_client = (void**)dlsym(hw, "hClientDLL");
if (!h_client) {
ERR("Can't find hClientDLL");
return false;
}

If we look at the output of readelf (Thanks to @UnkwUsr) and we compare the old vs. new hw.so files, we see:

$ readelf -a hw.so.new | grep hClientDLL
  1434: 007fe6a8     4 OBJECT  LOCAL  DEFAULT   24 hClientDLL
$ readelf -a hw.so.prev | grep hClientDLL
001aec9d  00004801 R_386_32          0081b4a0   hClientDLL
001aed2f  00004801 R_386_32          0081b4a0   hClientDLL
...
001b07b5  00004801 R_386_32          0081b4a0   hClientDLL
0020cf1e  00004801 R_386_32          0081b4a0   hClientDLL
    72: 0081b4a0     4 OBJECT  GLOBAL DEFAULT   22 hClientDLL
  1392: 0081b4a0     4 OBJECT  GLOBAL DEFAULT   22 hClientDLL

I am not sure if the problem is caused by this GLOBAL to LOCAL change, but the disassembly of ClientDLL_Init was pretty similar in both .so files:

rizin

Note
IDA couldn't successfully disassembly the new or the old functions, so I used rizin instead, which worked perfectly.

Since Counter-Strike 1.6 is broken as well, and I imagine it will get fixed in a couple of days, I am going to wait until everything is stable before spending more time into this.

Metadata

Metadata

Assignees

No one assigned

    Labels

    help wantedExtra attention is needed

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions