Tutorial [iOS] Chams source

Artemfoxeasypeasy

2/3 Games Approved
Original poster
May 27, 2019
15
688
78
Россия
Hello everyone, this is the source of the chams for ios.

Objective-C:
#include <OpenGLES/ES2/gl.h>
#include <OpenGLES/ES2/glext.h>

void (*_glDrawElements)(GLenum mode, GLsizei count, GLenum type, const void *indices);
GLint (*_glGetUniformLocation)(GLuint program,const GLchar *name);

GLint $glGetUniformLocation(GLuint program,const GLchar *name)
{
NSLog(@"%s",name);
return _glGetUniformLocation(program,name);

}

//disable metal framework for unity
%hook NSBundle
+ (id)bundleWithPath:(NSString *)fullPath
{
if ([fullPath isEqual:@"/System/Library/Frameworks/Metal.framework"])
{
NSLog(@"distable metal framework");
return NULL;
}

return %orig(fullPath);
}

%end

#define _DRAW_RGB_ 29,0,28

void $glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices) {
_glDrawElements(mode, count, type, indices);

if (mode != GL_TRIANGLES || count < 1000) return;{

GLint currProgram;
glGetIntegerv(GL_CURRENT_PROGRAM, &currProgram);

GLint id = _glGetUniformLocation(currProgram, "_Color4"); // _Color4 is shader name
if (id == -1) return;

// draw elements on 2d screen coordinates level
glDepthRangef(1, 0.5);

// enable and write rgb into frame buffer
glColorMask(_DRAW_RGB_, 0);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);

// draw chams on elements
_glDrawElements(mode, count, type, indices);

// now cleaning up

glDepthRangef(0.5, 1);

glColorMask(1, 1, 1, 1);
glDisable(GL_BLEND);
}
}

%ctor {
// Wallhack
MSHookFunction((void*)MSFindSymbol(0, "_glDrawElements"), (void *)$glDrawElements, (void **)&_glDrawElements);
MSHookFunction((void*)MSFindSymbol(0, "_glGetUniformLocation"), (void *)$glGetUniformLocation, (void **)&_glGetUniformLocation);
}
 

uppo002

Rookie
Dec 14, 2021
3
3
1
19
Thai
#include <OpenGLES/ES2/gl.h>
#include <OpenGLES/ES2/glext.h>

void (*_glDrawElements)(GLenum mode, GLsizei count, GLenum type, const void *indices);
GLint (*_glGetUniformLocation)(GLuint program,const GLchar *name);

GLint $glGetUniformLocation(GLuint program,const GLchar *name)
{
NSLog(@"%s",name);
return _glGetUniformLocation(program,name);

}

//disable metal framework for unity
%hook NSBundle
+ (id)bundleWithPath:(NSString *)fullPath
{
if ([fullPath isEqual:@"/System/Library/Frameworks/Metal.framework"])
{
NSLog(@"distable metal framework");
return NULL;
}

return %orig(fullPath);
}

%end

#define _DRAW_RGB_ 29,0,28

void $glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices) {
_glDrawElements(mode, count, type, indices);

if (mode != GL_TRIANGLES || count < 1000) return;{

GLint currProgram;
glGetIntegerv(GL_CURRENT_PROGRAM, &currProgram);

GLint id = _glGetUniformLocation(currProgram, "_Color4"); // _Color4 is shader name
if (id == -1) return;

// draw elements on 2d screen coordinates level
glDepthRangef(1, 0.5);

// enable and write rgb into frame buffer
glColorMask(_DRAW_RGB_, 0);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);

// draw chams on elements
_glDrawElements(mode, count, type, indices);

// now cleaning up

glDepthRangef(0.5, 1);

glColorMask(1, 1, 1, 1);
glDisable(GL_BLEND);
}
}

%ctor {
// Wallhack
MSHookFunction((void*)MSFindSymbol(0, "_glDrawElements"), (void *)$glDrawElements, (void **)&_glDrawElements);
MSHookFunction((void*)MSFindSymbol(0, "_glGetUniformLocation"), (void *)$glGetUniformLocation, (void **)&_glGetUniformLocation);
}
 

·҉ dollaz·҉. .

Approved iModder
Approved iModder
Mar 26, 2021
159
1,796
193
Somewhere
#include <OpenGLES/ES2/gl.h>
#include <OpenGLES/ES2/glext.h>

void (*_glDrawElements)(GLenum mode, GLsizei count, GLenum type, const void *indices);
GLint (*_glGetUniformLocation)(GLuint program,const GLchar *name);

GLint $glGetUniformLocation(GLuint program,const GLchar *name)
{
NSLog(@"%s",name);
return _glGetUniformLocation(program,name);

}

//disable metal framework for unity
%hook NSBundle
+ (id)bundleWithPath:(NSString *)fullPath
{
if ([fullPath isEqual:@"/System/Library/Frameworks/Metal.framework"])
{
NSLog(@"distable metal framework");
return NULL;
}

return %orig(fullPath);
}

%end

#define _DRAW_RGB_ 29,0,28

void $glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices) {
_glDrawElements(mode, count, type, indices);

if (mode != GL_TRIANGLES || count < 1000) return;{

GLint currProgram;
glGetIntegerv(GL_CURRENT_PROGRAM, &currProgram);

GLint id = _glGetUniformLocation(currProgram, "_Color4"); // _Color4 is shader name
if (id == -1) return;

// draw elements on 2d screen coordinates level
glDepthRangef(1, 0.5);

// enable and write rgb into frame buffer
glColorMask(_DRAW_RGB_, 0);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);

// draw chams on elements
_glDrawElements(mode, count, type, indices);

// now cleaning up

glDepthRangef(0.5, 1);

glColorMask(1, 1, 1, 1);
glDisable(GL_BLEND);
}
}

%ctor {
// Wallhack
MSHookFunction((void*)MSFindSymbol(0, "_glDrawElements"), (void *)$glDrawElements, (void **)&_glDrawElements);
MSHookFunction((void*)MSFindSymbol(0, "_glGetUniformLocation"), (void *)$glGetUniformLocation, (void **)&_glGetUniformLocation);
}
Why did you put the post's code in a response?
 
  • Like
Reactions: cannylin

uppo002

Rookie
Dec 14, 2021
3
3
1
19
Thai
#include <OpenGLES/ES2/gl.h>
#include <OpenGLES/ES2/glext.h>

void (*_glDrawElements)(GLenum mode, GLsizei count, GLenum type, const void *indices);
GLint (*_glGetUniformLocation)(GLuint program,const GLchar *name);

GLint $glGetUniformLocation(GLuint program,const GLchar *name)
{
NSLog(@"%s",name);
return _glGetUniformLocation(program,name);

}

//disable metal framework for unity
%hook NSBundle
+ (id)bundleWithPath:(NSString *)fullPath
{
if ([fullPath isEqual:@"/System/Library/Frameworks/Metal.framework"])
{
NSLog(@"distable metal framework");
return NULL;
}

return %orig(fullPath);
}

%end

#define _DRAW_RGB_ 29,0,28

void $glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices) {
_glDrawElements(mode, count, type, indices);

if (mode != GL_TRIANGLES || count < 1000) return;{

GLint currProgram;
glGetIntegerv(GL_CURRENT_PROGRAM, &currProgram);

GLint id = _glGetUniformLocation(currProgram, "_Color4"); // _Color4 is shader name
if (id == -1) return;

// draw elements on 2d screen coordinates level
glDepthRangef(1, 0.5);

// enable and write rgb into frame buffer
glColorMask(_DRAW_RGB_, 0);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);

// draw chams on elements
_glDrawElements(mode, count, type, indices);

// now cleaning up

glDepthRangef(0.5, 1);

glColorMask(1, 1, 1, 1);
glDisable(GL_BLEND);
}
}

%ctor {
// Wallhack
MSHookFunction((void*)MSFindSymbol(0, "_glDrawElements"), (void *)$glDrawElements, (void **)&_glDrawElements);
MSHookFunction((void*)MSFindSymbol(0, "_glGetUniformLocation"), (void *)$glGetUniformLocation, (void **)&_glGetUniformLocation);
}
 

uppo002

Rookie
Dec 14, 2021
3
3
1
19
Thai
#include <OpenGLES/ES2/gl.h>
#include <OpenGLES/ES2/glext.h>

void (*_glDrawElements)(GLenum mode, GLsizei count, GLenum type, const void *indices);
GLint (*_glGetUniformLocation)(GLuint program,const GLchar *name);

GLint $glGetUniformLocation(GLuint program,const GLchar *name)
{
NSLog(@"%s",name);
return _glGetUniformLocation(program,name);

}

//disable metal framework for unity
%hook NSBundle
+ (id)bundleWithPath:(NSString *)fullPath
{
if ([fullPath isEqual:@"/System/Library/Frameworks/Metal.framework"])
{
NSLog(@"distable metal framework");
return NULL;
}

return %orig(fullPath);
}

%end

#define _DRAW_RGB_ 29,0,28

void $glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices) {
_glDrawElements(mode, count, type, indices);

if (mode != GL_TRIANGLES || count < 1000) return;{

GLint currProgram;
glGetIntegerv(GL_CURRENT_PROGRAM, &currProgram);

GLint id = _glGetUniformLocation(currProgram, "_Color4"); // _Color4 is shader name
if (id == -1) return;

// draw elements on 2d screen coordinates level
glDepthRangef(1, 0.5);

// enable and write rgb into frame buffer
glColorMask(_DRAW_RGB_, 0);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);

// draw chams on elements
_glDrawElements(mode, count, type, indices);

// now cleaning up

glDepthRangef(0.5, 1);

glColorMask(1, 1, 1, 1);
glDisable(GL_BLEND);
}
}

%ctor {
// Wallhack
MSHookFunction((void*)MSFindSymbol(0, "_glDrawElements"), (void *)$glDrawElements, (void **)&_glDrawElements);
MSHookFunction((void*)MSFindSymbol(0, "_glGetUniformLocation"), (void *)$glGetUniformLocation, (void **)&_glGetUniformLocation);
}
 
  • Like
Reactions: khoitatmodgame