OldSchoolHack

Register / Login English

NonSDK Project


icon NonSDK Project #1

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
Tagchen,

heute habe ich angefangen wieder eine ESP Version meines CSS Hacks zu machen. Da ich nicht das SDK benutzen, muss ich alle Funktionen von Hand nachbauen. Vorteil dadran ist, dass man für kleinere Hacks auf das SDK verzichten kann und dadurch die DLL sehr klein gehalten wird.

Hier schonmal mein Anfang:

CPP Code:
  1. typedef void* (*CreateInterfaceFn)(const char *pName, int *pReturnCode);
  2.  
  3. CreateInterfaceFn CaptureFactory(char *FactoryModuleName)
  4. {
  5. CreateInterfaceFn ret = NULL;
  6.  
  7. while(!ret)
  8. {
  9. HMODULE FactoryModule = GetModuleHandleA(FactoryModuleName);
  10.  
  11. if(FactoryModule)
  12. ret = reinterpret_cast<CreateInterfaceFn>(GetProcAddress(FactoryModule,"CreateInterface"));
  13.  
  14. Sleep(10);
  15. }
  16.  
  17. return ret;
  18. }
  19.  
  20. void *CaptureInterface(CreateInterfaceFn Fn, char *InterfaceName)
  21. {
  22. unsigned long *ret = NULL;
  23.  
  24. while(!ret)
  25. {
  26. ret = reinterpret_cast<unsigned long*>(Fn(InterfaceName,NULL));
  27. Sleep(10);
  28. }
  29.  
  30. return ret;
  31. }
  32.  
  33. DWORD cEntList = *(DWORD*)CaptureInterface(CaptureFactory("client.dll"),"VClientEntityList003");
  34. DWORD cEngine = *(DWORD*)CaptureInterface(CaptureFactory("engine.dll"),"VEngineClient013");
  35.  
  36. int GetLocalPlayer()
  37. {
  38. int ret = 0;
  39. _asm
  40. {
  41. MOV ECX, DWORD PTR DS:[cEngine]
  42. MOV EAX, DWORD PTR DS:[ECX]
  43. CALL DWORD PTR DS:[EAX+0x30]
  44. MOV ret, EAX
  45. }
  46. return ret;
  47. }
  48.  
  49. CBaseEntity *GetEntityByIndex(int index)
  50. {
  51. CBaseEntity *ret = null;
  52. _asm
  53. {
  54. MOV ECX, DWORD PTR DS:[cEntList]
  55. MOV EAX, DWORD PTR DS:[ECX]
  56. PUSH index
  57. CALL DWORD PTR DS:[EAX+0xC]
  58. MOV ret, EAX
  59. }
  60. if(ret == null)
  61. return null;
  62. _asm
  63. {
  64. MOV EDX, DWORD PTR DS:[ret]
  65. MOV ECX, EAX
  66. CALL DWORD PTR DS:[EDX+0x1C]
  67. MOV ret, EAX
  68. }
  69. return ret;
  70. }
  71.  
  72. CBaseEntity *GetLocalEntity()
  73. {
  74. return GetEntityByIndex(GetLocalPlayer());
  75. }
  76.  
  77. int GetMaxEntities()
  78. {
  79. int ret = 0;
  80. _asm
  81. {
  82. MOV ECX, DWORD PTR DS:[cEntList]
  83. MOV EAX, DWORD PTR DS:[ECX+0x24]
  84. MOV ret, EAX
  85. }
  86. return ret;
  87. }

Wer will, darf gern was beisteuern. Visiblechecks und so fehlen zB noch.

greetz KN4CK3R

__________________

Hallo
icon #2

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
Update:

CPP Code:
  1. const char *GetBaseEntityClassName(CBaseEntity *entity)
  2. {
  3. DWORD add = ((DWORD)entity)+0x8;
  4. const char *ret;
  5. _asm
  6. {
  7. MOV ESI, entity
  8. LEA EDI, DWORD PTR DS:[ESI+0x8]
  9. MOV EAX, DWORD PTR DS:[EDI]
  10. MOV ECX, EDI
  11. CALL DWORD PTR DS:[EAX+0x8]
  12. MOV EAX, DWORD PTR DS:[EAX+0x8]
  13. MOV ret, EAX
  14. }
  15. return ret;
  16. }
  17.  
  18. bool GetPlayerInfo(int index, player_info_t *pInfo)
  19. {
  20. bool ret = false;
  21. _asm
  22. {
  23. MOV ECX, DWORD PTR DS:[cEngine]
  24. MOV EAX, DWORD PTR DS:[ECX]
  25. PUSH pInfo
  26. PUSH index
  27. CALL DWORD PTR DS:[EAX+0x20]
  28. MOV ret, AL
  29. }
  30. return ret;
  31. }
  32.  
  33. bool GetBaseEntityIsDormant(CBaseEntity *entity)
  34. {
  35. bool ret = false;
  36. _asm
  37. {
  38. MOV ECX, entity
  39. LEA EAX, DWORD PTR DS:[ECX+0x8]
  40. MOV EAX, DWORD PTR DS:[EAX]
  41. CALL DWORD PTR DS:[EAX+0x20]
  42. MOV ret, AL
  43. }
  44. return ret;
  45. }

greetz KN4CK3R

__________________

Hallo
icon #3

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
und das nächste Update:

CPP Code:
  1. Vector GetBaseEntityEyePosition(CBaseEntity *entity)
  2. {
  3. Vector *eye = (Vector*)((DWORD)entity+0xE0);
  4. return *GetBaseEntityOrigin(entity)+*eye;
  5. }
  6.  
  7. float *GetWorldToScreenMatrix()
  8. {
  9. float *ret;
  10. _asm
  11. {
  12. MOV ECX, cEngine
  13. MOV EAX, DWORD PTR DS:[ECX]
  14. CALL DWORD PTR DS[EAX+0x90]
  15. MOV ret, EAX
  16. }
  17. return ret;
  18. }
  19.  
  20. bool GetVisible(Vector &start, Vector &end)
  21. {
  22. trace_t tr;
  23. Ray_t ray;
  24. ray.Init(start,end);
  25. __asm
  26. {
  27. MOV ECX, cEngineTrace
  28. MOV EAX, DWORD PTR DS:[ECX]
  29. LEA EDX, tr
  30. PUSH EDX
  31. PUSH 0
  32. //PUSH 0x4602400B
  33. PUSH 0x4600400B
  34. LEA EDX, ray
  35. PUSH EDX
  36. CALL DWORD PTR DS:[EAX+0x10]
  37. }
  38. return (tr.fraction > 0.97f);
  39. }

greetz KN4CK3R

__________________

Hallo
icon #4

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
Update für GetBaseEntityOrigin, die alte Version hatte nen Bug:

CPP Code:
  1. Vector *GetBaseEntityOrigin(CBaseEntity *entity)
  2. {
  3. Vector *ret;
  4. _asm
  5. {
  6. MOV ECX, entity
  7. MOV EAX, DWORD PTR DS:[ECX]
  8. CALL DWORD PTR DS:[EAX+0x24]
  9. MOV ret, EAX
  10. }
  11. return ret;
  12. }
  13.  
  14. Vector *GetBaseEntityViewAngle(CBaseEntity *entity)
  15. {
  16. Vector *ret;
  17. _asm
  18. {
  19. MOV ECX, entity
  20. MOV EAX, DWORD PTR DS:[ECX]
  21. CALL DWORD PTR DS:[EAX+0x28]
  22. MOV ret, EAX
  23. }
  24. return ret;
  25. }

greetz KN4CK3R

__________________

Hallo
icon #5

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
weitergehts

CPP Code:
  1. int GetBaseEntityIndex(CBaseEntity *entity) //k
  2. {
  3. return *(int*)((DWORD)entity+IndexOffset);
  4. }
  5.  
  6. char GetBaseEntityLifeState(CBaseEntity *entity) //k
  7. {
  8. return *(char*)((DWORD)entity+LifeStateOffset);
  9. }
  10.  
  11. int GetBaseEntityHealth(CBaseEntity *entity) //k
  12. {
  13. return *(int*)((DWORD)entity+HealthOffset);
  14. }
  15.  
  16. int GetBaseEntityFlags(CBaseEntity *entity) //k
  17. {
  18. return *(int*)((DWORD)entity+FlagsOffset);
  19. }
  20.  
  21. int GetBaseEntityTeamNum(CBaseEntity *entity) //k
  22. {
  23. return *(int*)((DWORD)entity+TeamNumOffset);
  24. }
  25.  
  26. bool IsConnected()
  27. {
  28. bool ret = false;
  29. _asm
  30. {
  31. MOV ECX, DWORD PTR DS:[cEngine]
  32. MOV EAX, DWORD PTR DS:[ECX]
  33. CALL DWORD PTR DS:[EAX+0x6C]
  34. MOV ret, AL
  35. }
  36. return ret;
  37. }

greetz KN4CK3R

__________________

Hallo
icon #6

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
und hier noch was schönes. Die RadarPLayer Klasse:

CPP Code:
  1. class cRadarPlayer
  2. {
  3. public:
  4. int valid;
  5. char unknown0[12];
  6. char name[32];
  7. int team;
  8. int health;
  9. Vector origin;
  10. Vector viewangles;
  11. };
  12.  
  13. cRadarPlayer *GetRadarPlayerByIndex(int index)
  14. {
  15. cRadarPlayer *ret = null;
  16. _asm
  17. {
  18. MOV ECX, DWORD PTR DS:[cRadarPlayerArray]
  19. MOV EAX, index
  20. LEA EAX, DWORD PTR DS:[EAX+EAX*0x4]
  21. SHL EAX, 6
  22. LEA EAX, DWORD PTR DS:[EAX+ECX+0x28]
  23. MOV ret, EAX
  24. }
  25. return ret;
  26. }

Wie man allerdings an die cRadarPlayerArray Adresse kommt, lass ich euch selbst herausfinden, die Aktion hat mich grad 2 Stunden gekostet.

greetz KN4CK3R

__________________

Hallo
icon #7

Join Date: Aug 2010

Posts: 4

Nett. Gibt fürs Radar auch eine Usermessage "UpdateRadar", wo du den ganzen Kram auslesen kannst. Achja und wirf mal einen Blick in die mapoverview.h:

CPP Code:
  1.  
  2. typedef struct MapPlayer_s {
  3. int index; // player's index
  4. int userid; // user ID on server
  5. int icon; // players texture icon ID
  6. Color color; // players team color
  7. char name[MAX_PLAYER_NAME_LENGTH];
  8. int team; // N,T,CT
  9. int health; // 0..100, 7 bit
  10. Vector position; // current x,y pos
  11. QAngle angle; // view origin 0..360
  12. Vector2D trail[MAX_TRAIL_LENGTH]; // save 1 footstep each second for 1 minute
  13. } MapPlayer_t;
  14.  

Aber warum willst du ohne SDK arbeiten ? Ob die Dll jetzt 50kb oder 250kb groß ist, ist doch egal, oder ? Könntest dir auch einfach alle benötigten Classes / Structs zusammensuchen, das ganze SDK braucht ja nun wirklich keiner.

Aber abgesehen davon, klasse Lerneffekt.

Folgender Code ist redundant:
CPP Code:
  1. cRadarPlayer *ret = null;
  2. MOV ret, EAX
  3. return ret;

Da der Wert aus dem EAX-Register in deinem Fall automatisch returned wird.
icon #8

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
danke, aber die Header Dateien kenne ich natürlich, allerdings stehe ich mit den UserMessages im Moment etwas auf Kriegsfuß, da ein DispatchUserMessage Hook irgendwelchen Mist zutage fördert, der nicht stimmen kann.

greetz KN4CK3R

__________________

Hallo
icon #9

Join Date: Aug 2010

Posts: 4

Quote from KN4CK3R
danke, aber die Header Dateien kenne ich natürlich
Warum benutzt du die Struct dann nicht ? Durch dein class padding sieht es so aus, als ob du es selbst reversed hast. Wozu dann die Mühe ?
icon #10

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
Freude am Reversen

greetz KN4CK3R

__________________

Hallo
icon #11

Join Date: Aug 2011

Posts: 2

That's the same thing I was trying to do, but with slightly difference.
For example i don't take the VEngineClient via CreateInterface but simply I put directly the address of the pointer.

A lil question is needed, how did you take the various function offset? Because I've hw bp the localplayer address and then Im moved into the second call of 0x68. One problem, 0x68 it's not correct.

icon #12

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
just have a look in OllyDbg.
There is something like this:

ASM Code:
  1. mov eax, classPoint //like engine class
  2. call [eax + 0x123] //0x123 is your needed functionpointer

greetz KN4CK3R

__________________

Hallo
icon #13

Join Date: Aug 2011

Posts: 2

Not something like this?

TEXT Code:
  1.  
  2. MOV ECX,DWORD PTR DS:[Classpoint]
  3. MOV EDX,DWORD PTR DS:[ECX]
  4. MOV EAX,DWORD PTR DS:[EDX+123]
  5. CALL EAX
  6.  


TEXT Code:
  1.  
  2. MOV ECX,DWORD PTR DS:[Classpoint]
  3. MOV EDX,DWORD PTR DS:[ECX+123]
  4. CALL EDX
  5.  
icon #14

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
whatever, 123 is the offset

greetz KN4CK3R

__________________

Hallo