Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Find CBaseEntity GetChangeAccessorPathInfo 1

ASecurity

Find and identify the CBaseEntity_GetChangeAccessorPathInfo_1 virtual function in CS2 binary using IDA Pro MCP. Use this skill when reverse engineering CS2 server.dll or libserver.so to locate the second GetChangeAccessorPathInfo override by scanning CBaseEntity vtable slots near the known CBaseEntity_GetChangeAccessorPathInfo_2 slot for an implementation identical to CBaseEntity_GetChangeAccessorPathInfo_2. Trigger: CBaseEntity_GetChangeAccessorPathInfo_1

3 stars
0 votes
0 copies
0 views
Added 9/27/2026
research

Works with

mcp

Security Analysis

A100/100

Scanned 9/27/2026

Install to Claude Code

$npx -y skills add mrc4tt/CS2_VibeSignatures --skill find-CBaseEntity_GetChangeAccessorPathInfo_1 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Find CBaseEntity GetChangeAccessorPathInfo 1?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Find CBaseEntity GetChangeAccessorPathInfo 1
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/mrc4tt-find-cbaseentity-getchangeaccessorpathinfo-1/badge)](https://www.skillsdirectory.com/skills/mrc4tt-find-cbaseentity-getchangeaccessorpathinfo-1)

More formats (shields.io, HTML) on the badges page.

Download with Pro
Files
SKILL.md
---
name: find-CBaseEntity_GetChangeAccessorPathInfo_1
description: |
  Find and identify the CBaseEntity_GetChangeAccessorPathInfo_1 virtual function in CS2 binary using IDA Pro MCP.
  Use this skill when reverse engineering CS2 server.dll or libserver.so to locate the second
  GetChangeAccessorPathInfo override by scanning CBaseEntity vtable slots near the known
  CBaseEntity_GetChangeAccessorPathInfo_2 slot for an implementation identical to CBaseEntity_GetChangeAccessorPathInfo_2.
  Trigger: CBaseEntity_GetChangeAccessorPathInfo_1
disable-model-invocation: true
---

# Find CBaseEntity_GetChangeAccessorPathInfo_1

Locate `CBaseEntity_GetChangeAccessorPathInfo_1` vfunc in CS2 `server.dll` or `libserver.so` using IDA Pro MCP tools.

## Background

`CBaseEntity` overrides two separate `CEntityInstance` interface methods, `GetChangeAccessorPathInfo_1` and
`GetChangeAccessorPathInfo_2`, with **byte-for-byte identical implementations** (both simply forward to the same
internal lazy-init helper at the same member offset). Because the source bodies are identical, the compiler may
fold both vtable slots onto the exact same function address, or it may still emit two separate but structurally
identical functions. `CBaseEntity_GetChangeAccessorPathInfo_2` is already resolved (it inherits its vtable slot
from `CEntityInstance_GetChangeAccessorPathInfo_2`); `CBaseEntity_GetChangeAccessorPathInfo_1` occupies a
**different** slot within +/-2 entries of it in the same `CBaseEntity` vtable.

## Method

### 1. Load CBaseEntity_GetChangeAccessorPathInfo_2 from YAML

**ALWAYS** Use SKILL `/get-func-from-yaml` with `func_name=CBaseEntity_GetChangeAccessorPathInfo_2`.

If the skill returns an error, **STOP** and report to user.

Otherwise, extract:
- `func_va` (the reference implementation address)
- `vfunc_index`
- `vfunc_offset`
- `vtable_name` (should be `CBaseEntity`)

### 2. Load CBaseEntity VTable from YAML

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

If the skill returns an error, **STOP** and report to user.

Otherwise, extract:
- `vtable_numvfunc`
- `vtable_entries`

### 3. Enumerate Candidate Slots

Compute the scan window around the known slot:

- `window_start = max(0, CBaseEntity_GetChangeAccessorPathInfo_2.vfunc_index - 2)`
- `window_end = min(vtable_numvfunc - 1, CBaseEntity_GetChangeAccessorPathInfo_2.vfunc_index + 2)`

For every index `i` in `[window_start, window_end]` **except** `CBaseEntity_GetChangeAccessorPathInfo_2.vfunc_index`
itself, read the candidate function address `vtable_entries[i]`.

### 4. Check for Identical-Address Folding First

Compilers (MSVC `/OPT:ICF`, GCC/Clang identical code folding) commonly merge functions with byte-identical bodies
into a single implementation, so multiple vtable slots end up pointing at the **same address**.

For each candidate index `i`:
- If `vtable_entries[i] == CBaseEntity_GetChangeAccessorPathInfo_2.func_va`, this slot is folded onto the same
  implementation and is an immediate match. Record `i` as `target_vfunc_index` and stop scanning further.

### 5. Otherwise, Decompile and Compare Candidates

If no candidate address matched directly, decompile the reference function and every remaining candidate:

```text
mcp__ida-pro-mcp__decompile addr="<CBaseEntity_GetChangeAccessorPathInfo_2_func_va>"
mcp__ida-pro-mcp__decompile addr="<candidate_func_addr>"
```

#### Windows (`server.dll`)

The reference implementation is a one-line forwarder:

```c
__int64 __fastcall CBaseEntity_GetChangeAccessorPathInfo_2(__int64 a1)
{
  return sub_180184630(a1 + 56);
}
```

A matching candidate must be **structurally identical**:
1. Takes a single `(__int64 a1)` argument (this only)
2. Directly tail-calls the exact same helper address as the reference (e.g. `sub_180184630`)
3. Passes the exact same constant offset argument (`a1 + 56`)
4. Returns the helper's result unchanged

#### Linux (`libserver.so`)

The reference implementation is a lazy-init pattern:

```c
__int64 __fastcall CBaseEntity_GetChangeAccessorPathInfo_2(__int64 a1)
{
  __int64 result;
  ...
  result = *(_QWORD *)(a1 + 64);
  if ( !result )
  {
    result = operator new(384);
    ...
    *(_QWORD *)(a1 + 64) = result;
  }
  return result;
}
```

A matching candidate must:
1. Read/write the exact same member offset as the reference (`a1 + 64`)
2. Allocate the exact same size via `operator new` (`384`)
3. Initialize the same set of fixed fields at the same relative offsets (`+56`, `+24`, `+40`, `+48`, `+96` .. `+352`, etc.)
4. Return the same lazily-initialized pointer

### 6. Confirm the Match

Among the scanned candidates (excluding the known `_2` slot), exactly one should match either by identical address
(Step 4) or by identical decompiled structure (Step 5). That candidate is `CBaseEntity_GetChangeAccessorPathInfo_1`.

If zero or more than one candidate match, **STOP** and report to user.

### 7. Write IDA Analysis Output as YAML

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

Required parameters:
- `func_name`: `CBaseEntity_GetChangeAccessorPathInfo_1`
- `func_addr`: `<matched_func_addr>`
- `func_sig`: `None`
- `vfunc_sig`: `None`

VTable parameters:
- `vtable_name`: `CBaseEntity`
- `vfunc_offset`: `<target_vfunc_index * 8>` in hex
- `vfunc_index`: `<target_vfunc_index>`

## Function Characteristics

- **Purpose**: Lazily creates/returns the change-accessor path-info object for this entity; implementation is
  identical to `CBaseEntity_GetChangeAccessorPathInfo_2`, distinguished only by its vtable slot
- **Binary**: `server.dll` / `libserver.so`
- **Parameters**: `(this)` only
- **Return value**: Pointer to the lazily-allocated path accessor object stored at a fixed member offset

## Discovery Strategy

1. Reuse the existing `CBaseEntity_GetChangeAccessorPathInfo_2` YAML to obtain the reference address and known slot
2. Reuse the existing `CBaseEntity_vtable` YAML to scan the +/-2 neighboring slots
3. Prefer an identical-address (ICF-folded) match; fall back to structural decompile comparison
4. Generate a stable `func_sig` from the resolved candidate body

This is robust because:
- The two overrides are guaranteed byte-identical in source, so either the compiler folds them to one address or
  their decompiled structure will be indistinguishable except for the vtable slot
- Scanning a narrow +/-2 window avoids false positives from unrelated vtable entries
- The final YAML stores both the resolved function signature and the precise vtable metadata

## Output YAML Format

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

Attribution

mrc4ttmrc4tt
View sourceMore from mrc4tt →
SSkills DirectorySkills Directory

Know which skills are safe — weekly.

Best new skills + every skill we flagged as malicious. From the team that scanned 103,619.

Join free

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 (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Know which skills are safe — weekly.

Best new skills + every skill we flagged as malicious. From the team that scanned 103,619.

Join free

Related Skills

Competitor Analysis

This skill provides comprehensive analysis of competitor SEO and GEO strategies, revealing what's working in your market and identifying opportunities to outperform the competition.

1823 votes

Deep Research

Universal deep research agent team. 13-agent pipeline for rigorous academic research on any topic. 8 modes: full research, quick brief, paper review, lit-review, fact-check, three-way literature scan, Socratic guided research dialogue, and systematic review with optional meta-analysis. Covers research question formulation, Socratic mentoring, methodology design, systematic literature search, source verification, cross-source synthesis, risk of bias assessment, meta-analysis, APA 7.0 report co...

494352 votes

Paperclip Distill

Use when an operation issue is a Paperclip cursor-window, distill, or backfill — `operationType: "distill"` or `"backfill"` and the body references a Paperclip source bundle for a project or root issue. Turn raw Paperclip activity into a wiki-insightful project page, decisions log, and history note. This skill exists specifically to replace the stiff, datestamp-heavy templated output that the deterministic distiller produces.

813271 votes

Academic Pipeline

Orchestrator for the full academic research pipeline: research -> write -> integrity check -> review -> revise -> re-review -> re-revise -> final integrity check -> finalize. Coordinates deep-research, academic-paper, and academic-paper-reviewer into a seamless 10-stage workflow with mandatory, coverage-bounded integrity checks, two-stage peer review, and auditable quality-assurance artifacts. Triggers on: academic pipeline, research to paper, full paper workflow, paper pipeline, end-to-end p...

494351 votes

Exa Search

Semantic search, similar content discovery, and structured research using Exa API

304951 votes
View all in research →