Skip to content
Back to skills

215 Name Skill 5fd3e9a7

ASecurity

Find and identify the CBaseEntity_Use virtual function in CS2 binary using IDA Pro MCP. Use this skill when reverse engineering CS2 server.dll or libserver.so to locate the Use function. CBaseEntity_Use is a virtual function on CBaseEntity, resolved via vtable offset found in the function that references both "Radio.YouTakeThePoint" and "#Cstrike_TitlesTXT_Game_afk_bomb_drop". Trigger: CBaseEntity_Use, Use

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 11, 2026
data

Works with

  • mcp

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned October 11, 2026

npx -y skills add tools-only/X-Skills --skill 215-name-skill_5fd3e9a7 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 215 Name Skill 5fd3e9a7?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 215 Name Skill 5fd3e9a7
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-215-name-skill-5fd3e9a7/badge)](https://www.skillsdirectory.com/skills/tools-only-215-name-skill-5fd3e9a7)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: find-CBaseEntity_Use
description: |
  Find and identify the CBaseEntity_Use virtual function in CS2 binary using IDA Pro MCP.
  Use this skill when reverse engineering CS2 server.dll or libserver.so to locate the Use function.
  CBaseEntity_Use is a virtual function on CBaseEntity, resolved via vtable offset found in the function
  that references both "Radio.YouTakeThePoint" and "#Cstrike_TitlesTXT_Game_afk_bomb_drop".
  Trigger: CBaseEntity_Use, Use
disable-model-invocation: true
---

# Find CBaseEntity_Use

Locate the `CBaseEntity_Use` virtual function in CS2 server binary using IDA Pro MCP tools.

## Overview

`CBaseEntity_Use` is a virtual function on `CBaseEntity`. It is identified by finding the function that references both `Radio.YouTakeThePoint` and `#Cstrike_TitlesTXT_Game_afk_bomb_drop`, then locating the vtable call at the bottom of that function.

## Prerequisites

- `CBaseEntity` vtable must already be identified (vtable YAML must exist)

If missing, run `/write-vtable-as-yaml` with `class_name=CBaseEntity` first.

## Method

### 1. Search for Signature Strings

Use `find_regex` to search for both strings:

```
mcp__ida-pro-mcp__find_regex(pattern="Radio\\.YouTakeThePoint")
mcp__ida-pro-mcp__find_regex(pattern="#Cstrike_TitlesTXT_Game_afk_bomb_drop")
```

### 2. Find Cross-References and Identify Common Function

Use `xrefs_to` on both string addresses:

```
mcp__ida-pro-mcp__xrefs_to(addrs="<string_addr_1>")
mcp__ida-pro-mcp__xrefs_to(addrs="<string_addr_2>")
```

Find the function that appears in both xref results. This is the containing function (the AFK bomb drop / player use handler).

### 3. Decompile and Locate CBaseEntity_Use Call

Decompile the common function and look for the following code pattern near the bottom:

Windows binary:
```c
  if ( v74 && ((*(__int64 (__fastcall **)(_QWORD *))(*v17 + <USE_OFFSET_WIN>))(v17) & 4) != 0 )
  {
    v28 = sub_XXXXXXXX(a1);
    *(_QWORD *)&v70 = sub_XXXXXXXX(a1);
    v71 = 0LL;
LABEL_117:
    v66 = *v17;
    *((_QWORD *)&v70 + 1) = v28;
    (*(void (__fastcall **)(_QWORD *, __int128 *))(v66 + <USE_OFFSET_WIN>))(v17, &v70); // CBaseEntity_Use
  }
```

Linux binary:
```c
  if ( v74 && ((*(__int64 (__fastcall **)(_QWORD *))(*v17 + <USE_OFFSET_LIN>))(v17) & 4) != 0 )
  {
    v28 = sub_XXXXXXXX(a1);
    *(_QWORD *)&v70 = sub_XXXXXXXX(a1);
    v71 = 0LL;
LABEL_117:
    v66 = *v17;
    *((_QWORD *)&v70 + 1) = v28;
    (*(void (__fastcall **)(_QWORD *, __int128 *))(v66 + <USE_OFFSET_LIN>))(v17, &v70); // CBaseEntity_Use
  }
```

Key identification:
- The vtable call at `LABEL_117` is `CBaseEntity_Use`
- Record the vtable offset from the call instruction (e.g. `1152` = `0x480`)
- Calculate vtable index: offset / 8

### 4. Generate VFunc-Offset Signature

**ALWAYS** Use SKILL `/generate-signature-for-vfuncoffset` to generate a robust and unique signature for `CBaseEntity_Use`.

Use the instruction address of the `(*(v66 + <USE_OFFSET>))(v17, &v70)` call as the target instruction, and the vtable offset as the expected vfunc offset.

### 5. Get CBaseEntity VTable Info and Resolve Address

**ALWAYS** Use SKILL `/get-vtable-from-yaml` with `class_name=CBaseEntity`.

If the skill returns an error, stop and report to user.
Otherwise, use `vtable_entries` to look up the entry at the calculated vtable index from step 3. The address at that index is `CBaseEntity_Use`.

### 6. Rename CBaseEntity_Use

Verify the function name at the resolved address. If not already renamed:

```
mcp__ida-pro-mcp__rename(batch={"func": {"addr": "<resolved_addr>", "name": "CBaseEntity_Use"}})
```

### 7. Write IDA Analysis Output as YAML

**ALWAYS** Use SKILL `/write-vfunc-as-yaml` to write the analysis results.

Required parameters:
- `func_name`: `CBaseEntity_Use`
- `func_addr`: The resolved function address from step 5
- `func_sig`: `None` (function body is too small for a unique signature)
- `vfunc_sig`: The validated signature from step 4

VTable parameters:
- `vtable_name`: `CBaseEntity`
- `vfunc_offset`: The offset from step 3
- `vfunc_index`: The index from step 3

## Function Characteristics

- **VTable Class**: `CBaseEntity`
- **Parameters**: `(CBaseEntity* this, CBaseEntity* activator, CBaseEntity* caller, USE_TYPE useType)`
- **Purpose**: Called when an entity is "used" (e.g. player pressing +use on a door, button, or other interactive entity)
- **Identified via**: The function containing both `Radio.YouTakeThePoint` and `#Cstrike_TitlesTXT_Game_afk_bomb_drop` strings

The containing function also references:
- `weapon_c4` - C4 bomb detection
- `CCSPlayer_ItemServices_DropPlayerWeapon` - Dropping the bomb
- `Radio.YouTakeThePoint` / `#Cstrike_TitlesTXT_Game_afk_bomb_drop` - AFK bomb drop notification

## VTable Information

- **VTable Name**: `CBaseEntity`
- **VTable Mangled Name**:
  - Windows: `??_7CBaseEntity@@6B@`
  - Linux: `_ZTV11CBaseEntity`
- **VTable Offset**: `0x480` (Windows) — may change with game updates
- **VTable Index**: `144` (Windows) — may change with game updates

## Output YAML Format

The output YAML filename depends on the platform:
- `server.dll` -> `CBaseEntity_Use.windows.yaml`
- `libserver.so` / `libserver.so` -> `CBaseEntity_Use.linux.yaml`

## Troubleshooting

**If CBaseEntity vtable YAML not found:**
- Run `/write-vtable-as-yaml` with `class_name=CBaseEntity` first

**If the vtable offset differs from expected:**
- The vtable layout may have changed in a game update
- Look for the vtable call at `LABEL_117` near the bottom of the containing function
- The pattern is: check flags with `& 4`, then call through vtable with `(v17, &v70)` arguments

Files in this skill

  • README.md865 B
  • skill.md5.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.