From 2d60a59a8ad195dd0af8f90c8d5b74a69ce7f4fa Mon Sep 17 00:00:00 2001 From: Charles McGarvey Date: Thu, 3 Apr 2003 12:00:00 -0700 Subject: [PATCH 1/1] The Cheat 1.0b1 --- AppController.h | 69 ++ AppController.m | 912 +++++++++++++++++++ English.lproj/InfoPlist.strings | Bin 0 -> 540 bytes English.lproj/MainMenu.nib/classes.nib | 25 + English.lproj/MainMenu.nib/info.nib | 23 + English.lproj/MainMenu.nib/keyedobjects.nib | Bin 0 -> 26124 bytes English.lproj/MainMenu.nib/objects.nib | Bin 0 -> 14816 bytes English.lproj/MainMenu~.nib/classes.nib | 25 + English.lproj/MainMenu~.nib/info.nib | 23 + English.lproj/MainMenu~.nib/keyedobjects.nib | Bin 0 -> 26156 bytes English.lproj/MainMenu~.nib/objects.nib | Bin 0 -> 14818 bytes Read Me.txt | 50 + The Cheat.pbproj/chaz.pbxuser | 480 ++++++++++ The Cheat.pbproj/project.pbxproj | 450 +++++++++ The_Cheat_Prefix.h | 7 + main.m | 17 + 16 files changed, 2081 insertions(+) create mode 100644 AppController.h create mode 100644 AppController.m create mode 100644 English.lproj/InfoPlist.strings create mode 100644 English.lproj/MainMenu.nib/classes.nib create mode 100644 English.lproj/MainMenu.nib/info.nib create mode 100644 English.lproj/MainMenu.nib/keyedobjects.nib create mode 100644 English.lproj/MainMenu.nib/objects.nib create mode 100644 English.lproj/MainMenu~.nib/classes.nib create mode 100644 English.lproj/MainMenu~.nib/info.nib create mode 100644 English.lproj/MainMenu~.nib/keyedobjects.nib create mode 100644 English.lproj/MainMenu~.nib/objects.nib create mode 100644 Read Me.txt create mode 100644 The Cheat.pbproj/chaz.pbxuser create mode 100644 The Cheat.pbproj/project.pbxproj create mode 100644 The_Cheat_Prefix.h create mode 100644 main.m diff --git a/AppController.h b/AppController.h new file mode 100644 index 0000000..7917887 --- /dev/null +++ b/AppController.h @@ -0,0 +1,69 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: AppController.h +// Created: Wed Aug 13 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + + +// constants +enum +{ + TYPE_STRING, TYPE_INTEGER, TYPE_FLOAT +}; + +enum +{ + SIZE_8_BIT, SIZE_16_BIT, SIZE_32_BIT, SIZE_64_BIT +}; + + +@interface AppController : NSObject +{ + BOOL cheating; + + NSArray *processList; + + NSMutableArray *addressList; + BOOL searching; + + IBOutlet id window; + IBOutlet id processPopup; + IBOutlet id searchTextField; + IBOutlet id changeTextField; + IBOutlet id searchButton; + IBOutlet id changeButton; + IBOutlet id typePopup; + IBOutlet id sizePopup; + IBOutlet id statusText; + IBOutlet id statusBar; + IBOutlet id addressTable; +} + +- (void)reset; + +- (void)firstSearch:(id)nothing; +- (void)search:(id)nothing; + +- (void)change; + +- (void)updateProcessPopup; +- (void)updateTypePopup; +- (void)updateSizePopup; +- (void)updateSearchButton; +- (void)updateChangeButton; +- (void)updateStatusText; + +- (void)rebuildProcessList; + +- (IBAction)processPopup:(id)sender; +- (IBAction)typePopup:(id)sender; +- (IBAction)searchButton:(id)sender; +- (IBAction)changeButton:(id)sender; + +@end \ No newline at end of file diff --git a/AppController.m b/AppController.m new file mode 100644 index 0000000..d5de59e --- /dev/null +++ b/AppController.m @@ -0,0 +1,912 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: AppController.m +// Created: Wed Aug 13 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import "AppController.h" + +#include +#include + + +// defines +#define PID_SELECTED [[[processList objectAtIndex:[processPopup indexOfSelectedItem]] objectForKey:@"NSApplicationProcessIdentifier"] intValue] +#define TYPE_SELECTED [typePopup indexOfSelectedItem] +#define SIZE_SELECTED [sizePopup indexOfSelectedItem] + + +@implementation AppController + +- (id)init +{ + if ( self = [super init] ) + { + + } + + return self; +} + +- (void)awakeFromNib +{ + NSNotificationCenter *nc = [[NSWorkspace sharedWorkspace] notificationCenter]; + + [self rebuildProcessList]; + [self updateProcessPopup]; + [self updateTypePopup]; + [self updateSizePopup]; + [self updateChangeButton]; + [self updateStatusText]; + + [nc addObserver:self selector:@selector(processListChanged:) name:@"NSWorkspaceDidLaunchApplicationNotification" object:nil]; + [nc addObserver:self selector:@selector(processListChanged:) name:@"NSWorkspaceDidTerminateApplicationNotification" object:nil]; + + [self reset]; +} + + +- (void)reset +{ + if ( cheating ) + { + cheating = NO; + + [addressList release], addressList = nil; + + // update the interface + [typePopup setEnabled:YES]; + [sizePopup setEnabled:YES]; + [searchTextField setStringValue:@""]; + [changeTextField setStringValue:@""]; + [addressTable reloadData]; + } +} + + +- (void)firstSearch:(id)nothing +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + pid_t pid = (pid_t)PID_SELECTED; + vm_map_t task; + + kern_return_t result; + + vm_address_t address = 0x0; + vm_size_t size = 0; + vm_region_basic_info_data_t info; + mach_msg_type_number_t infoCnt = 8; + mach_port_t object_name = 0; + + char unsigned *data; + vm_size_t dataCnt; + + char unsigned *string8bit = (char unsigned *)[[searchTextField stringValue] lossyCString]; + long unsigned stringSize = strlen( string8bit ); + char integer8bit = (char)[searchTextField intValue]; + short integer16bit = (short)[searchTextField intValue]; + long integer32bit = (long)[searchTextField intValue]; + long long integer64bit = (long long)[searchTextField intValue]; + float float32bit = (float)[searchTextField floatValue]; + double float64bit = (double)[searchTextField doubleValue]; + + BOOL done = NO; + + if ( (result = task_for_pid( current_task(), pid, &task)) != KERN_SUCCESS ) + { + NSLog( @"task_for_pid returned error: %i", result ); + return; + } + + addressList = [[NSMutableArray alloc] init]; + + while ( !done ) + { + if ( (result = vm_region( task, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name )) != KERN_SUCCESS ) + { + if ( result != KERN_INVALID_ADDRESS ) + { + NSLog( @"vm_region returned error: %i", result ); + } + + done = YES; + } + + //NSLog( @"address: %X, size: %i", address, size ); + + if ( (info.protection & VM_PROT_READ) && ((info.protection & VM_PROT_WRITE) >> 1) ) + { + data = (char unsigned *)malloc( size ); + dataCnt = size; + + if ( (result = vm_read_overwrite( task, address, size, (vm_address_t)data, &dataCnt )) != KERN_SUCCESS && result != KERN_PROTECTION_FAILURE ) + { + NSLog( @"vm_read_overwrite returned error: %i", result ); + free( data ); + done = YES; + } + + if ( result == KERN_SUCCESS ) + { + long unsigned i, max = (long unsigned)dataCnt; + + //NSLog( @"data: %X, size: %i", (vm_address_t)data, dataCnt ); + + switch ( TYPE_SELECTED ) + { + case TYPE_STRING: + switch ( SIZE_SELECTED ) + { + case SIZE_8_BIT: + { + long unsigned maxString = max - stringSize; + + for ( i = 0; i < maxString; i += sizeof(char unsigned) ) + { + if ( strncmp( string8bit, data+i, stringSize ) == 0 ) + { + [addressList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; + } + } + } + break; + } + break; + + case TYPE_INTEGER: + switch ( SIZE_SELECTED ) + { + case SIZE_8_BIT: + { + for ( i = 0; i < max; i += sizeof(char) ) + { + if ( integer8bit == *((char *)(data+i)) ) + { + [addressList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; + } + } + } + break; + + case SIZE_16_BIT: + { + for ( i = 0; i < max; i += sizeof(short) ) + { + if ( integer16bit == *((short *)(data+i)) ) + { + [addressList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; + } + } + } + break; + + case SIZE_32_BIT: + { + for ( i = 0; i < max; i += sizeof(long) ) + { + if ( integer32bit == *((long *)(data+i)) ) + { + [addressList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; + } + } + } + break; + + case SIZE_64_BIT: + { + for ( i = 0; i < max; i += sizeof(long long) ) + { + if ( integer64bit == *((long long *)(data+i)) ) + { + [addressList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; + } + } + } + break; + } + break; + + case TYPE_FLOAT: + switch ( SIZE_SELECTED+2 ) + { + case SIZE_32_BIT: + { + for ( i = 0; i < max; i += sizeof(float) ) + { + if ( float32bit == *((float *)(data+i)) ) + { + [addressList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; + } + } + } + break; + + case SIZE_64_BIT: + { + for ( i = 0; i < max; i += sizeof(double) ) + { + if ( float64bit == *((double *)(data+i)) ) + { + [addressList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; + } + } + } + break; + } + break; + } + } + + free( data ); + } + + address += size; + } + + searching = NO; + + // update the interface + [statusBar stopAnimation:self]; + [self updateProcessPopup]; + [self updateSearchButton]; + [self updateTypePopup]; + [self updateSizePopup]; + [self updateChangeButton]; + [self updateStatusText]; + [addressTable reloadData]; + + [pool release]; +} + +- (void)search:(id)nothing +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + pid_t pid = (pid_t)PID_SELECTED; + vm_map_t task; + + kern_return_t result; + + vm_address_t address = 0x0; + vm_size_t size = 0; + vm_region_basic_info_data_t info; + mach_msg_type_number_t infoCnt = 8; + mach_port_t object_name = 0; + + char unsigned *data; + vm_size_t dataCnt; + + char unsigned *string8bit = (char unsigned *)[[searchTextField stringValue] lossyCString]; + long unsigned stringSize = strlen( string8bit ); + char integer8bit = (char)[searchTextField intValue]; + short integer16bit = (short)[searchTextField intValue]; + long integer32bit = (long)[searchTextField intValue]; + long long integer64bit = (long long)[searchTextField intValue]; + float float32bit = (float)[searchTextField floatValue]; + double float64bit = (double)[searchTextField doubleValue]; + + long unsigned j, max = [addressList count]; + + NSMutableArray *newList = [[NSMutableArray alloc] init]; + + if ( (result = task_for_pid( current_task(), pid, &task)) != KERN_SUCCESS ) + { + NSLog( @"task_for_pid returned error: %i", result ); + return; + } + + for ( j = 0; j < max; j++ ) + { + long unsigned item = [[addressList objectAtIndex:j] unsignedLongValue]; + + address = (vm_address_t)item; + + if ( (result = vm_region( task, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name )) != KERN_SUCCESS ) + { + if ( result != KERN_INVALID_ADDRESS ) + { + NSLog( @"vm_region returned error: %i", result ); + } + + break; + } + + //NSLog( @"address: %X, size: %i", address, size ); + + if ( (info.protection & VM_PROT_READ) && ((info.protection & VM_PROT_WRITE) >> 1) ) + { + data = (char unsigned *)malloc( size ); + dataCnt = size; + + if ( (result = vm_read_overwrite( task, address, size, (vm_address_t)data, &dataCnt )) != KERN_SUCCESS && result != KERN_PROTECTION_FAILURE ) + { + NSLog( @"vm_read_overwrite returned error: %i", result ); + free( data ); + break; + } + + if ( result == KERN_SUCCESS ) + { + long unsigned i = item - (long unsigned)address; + + if ( i < (long unsigned)dataCnt ) + { + //NSLog( @"data: %X, size: %i", (vm_address_t)data, dataCnt ); + + switch ( TYPE_SELECTED ) + { + case TYPE_STRING: + switch ( SIZE_SELECTED ) + { + case SIZE_8_BIT: + { + if ( strncmp( string8bit, data+i, stringSize ) == 0 ) + { + [newList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; + } + } + break; + } + break; + + case TYPE_INTEGER: + switch ( SIZE_SELECTED ) + { + case SIZE_8_BIT: + { + if ( integer8bit == *((char *)(data+i)) ) + { + [newList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; + } + } + break; + + case SIZE_16_BIT: + { + if ( integer16bit == *((short *)(data+i)) ) + { + [newList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; + } + } + break; + + case SIZE_32_BIT: + { + if ( integer32bit == *((long *)(data+i)) ) + { + [newList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; + } + } + break; + + case SIZE_64_BIT: + { + if ( integer64bit == *((long long *)(data+i)) ) + { + [newList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; + } + } + break; + } + break; + + case TYPE_FLOAT: + switch ( SIZE_SELECTED+2 ) + { + case SIZE_32_BIT: + { + if ( float32bit == *((float *)(data+i)) ) + { + [newList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; + } + } + break; + + case SIZE_64_BIT: + { + if ( float64bit == *((double *)(data+i)) ) + { + [newList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; + } + } + break; + } + break; + } + } + } + + free( data ); + } + } + + [addressList release]; + addressList = newList; + + searching = NO; + + // update the interface + [statusBar stopAnimation:self]; + [self updateProcessPopup]; + [self updateSearchButton]; + [self updateTypePopup]; + [self updateSizePopup]; + [self updateChangeButton]; + [self updateStatusText]; + [addressTable reloadData]; + + [pool release]; +} + + +- (void)change +{ + pid_t pid = (pid_t)PID_SELECTED; + vm_map_t task; + + kern_return_t result; + + char unsigned *string8bit = (char unsigned *)[[changeTextField stringValue] lossyCString]; + long unsigned stringSize = strlen( string8bit ); + char integer8bit = (char)[changeTextField intValue]; + short integer16bit = (short)[changeTextField intValue]; + long integer32bit = (long)[changeTextField intValue]; + long long integer64bit = (long long)[changeTextField intValue]; + float float32bit = (float)[changeTextField floatValue]; + double float64bit = (double)[changeTextField doubleValue]; + + NSEnumerator *enumerator = [addressTable selectedRowEnumerator]; + NSNumber *row; + + if ( (result = task_for_pid( current_task(), pid, &task)) != KERN_SUCCESS ) + { + NSLog( @"task_for_pid returned error: %i", result ); + return; + } + + while ( row = [enumerator nextObject] ) + { + long unsigned item = [[addressList objectAtIndex:[row intValue]] unsignedLongValue]; + + //NSLog( @"address: %X", item ); + + switch ( TYPE_SELECTED ) + { + case TYPE_STRING: + switch ( SIZE_SELECTED ) + { + case SIZE_8_BIT: + { + result = vm_write( task, (vm_address_t)item, (vm_offset_t)string8bit, (mach_msg_type_number_t)stringSize ); + } + break; + } + break; + + case TYPE_INTEGER: + switch ( SIZE_SELECTED ) + { + case SIZE_8_BIT: + { + result = vm_write( task, (vm_address_t)item, (vm_offset_t)(&integer8bit), sizeof(char) ); + } + break; + + case SIZE_16_BIT: + { + result = vm_write( task, (vm_address_t)item, (vm_offset_t)(&integer16bit), sizeof(short) ); + } + break; + + case SIZE_32_BIT: + { + result = vm_write( task, (vm_address_t)item, (vm_offset_t)(&integer32bit), sizeof(long) ); + } + break; + + case SIZE_64_BIT: + { + result = vm_write( task, (vm_address_t)item, (vm_offset_t)(&integer64bit), sizeof(long long) ); + } + break; + } + break; + + case TYPE_FLOAT: + switch ( SIZE_SELECTED+2 ) + { + case SIZE_32_BIT: + { + result = vm_write( task, (vm_address_t)item, (vm_offset_t)(&float32bit), sizeof(float) ); + } + break; + + case SIZE_64_BIT: + { + result = vm_write( task, (vm_address_t)item, (vm_offset_t)(&float64bit), sizeof(double) ); + } + break; + } + break; + } + } +} + + +- (void)updateProcessPopup +{ + if ( searching ) + { + [processPopup setEnabled:NO]; + } + else + { + [processPopup setEnabled:YES]; + } +} + +- (void)updateTypePopup +{ + if ( cheating || searching ) + { + [typePopup setEnabled:NO]; + } + else + { + int selected = [typePopup indexOfSelectedItem]; + + [typePopup setEnabled:YES]; + + [typePopup removeAllItems]; + + [typePopup addItemWithTitle:@"String"]; + [typePopup addItemWithTitle:@"Integer"]; + [typePopup addItemWithTitle:@"Float"]; + + [typePopup selectItemAtIndex:selected]; + } +} + +- (void)updateSizePopup +{ + if ( cheating || searching ) + { + [sizePopup setEnabled:NO]; + } + else + { + [sizePopup setEnabled:YES]; + + [sizePopup removeAllItems]; + + switch ( TYPE_SELECTED ) + { + case TYPE_STRING: + [sizePopup addItemWithTitle:@" 8-bit"]; + break; + + case TYPE_INTEGER: + [sizePopup addItemWithTitle:@" 8-bit"]; + [sizePopup addItemWithTitle:@"16-bit"]; + [sizePopup addItemWithTitle:@"32-bit"]; + [sizePopup addItemWithTitle:@"64-bit"]; + break; + + case TYPE_FLOAT: + [sizePopup addItemWithTitle:@"32-bit"]; + [sizePopup addItemWithTitle:@"64-bit"]; + break; + } + } +} + +- (void)updateSearchButton +{ + if ( searching ) + { + [searchTextField setEnabled:NO]; + [searchButton setEnabled:NO]; + } + else + { + [searchTextField setEnabled:YES]; + [searchButton setEnabled:YES]; + } +} + +- (void)updateChangeButton +{ + if ( [addressTable selectedRow] == -1 || searching ) + { + [changeTextField setEnabled:NO]; + [changeButton setEnabled:NO]; + } + else + { + [changeTextField setEnabled:YES]; + [changeButton setEnabled:YES]; + } +} + +- (void)updateStatusText +{ + if ( searching ) + { + [statusText setStringValue:@"Searching..."]; + } + else if ( !cheating ) + { + [statusText setStringValue:[NSString stringWithFormat:@"PID: %i", PID_SELECTED]]; + } + else // cheating + { + [statusText setStringValue:[NSString stringWithFormat:@"Found: %i", [addressList count]]]; + } + + [statusText display]; +} + + +- (void)processListChanged:(NSNotification *)note +{ + if ( cheating && [[note name] isEqualToString:@"NSWorkspaceDidTerminateApplicationNotification"] ) + { + int pid = PID_SELECTED; + int other = [[[note userInfo] objectForKey:@"NSApplicationProcessIdentifier"] intValue]; + + // check to make sure the program we were cheating wasn't the one that quit + if ( pid == other ) + { + // it was, so let's take care of it + NSBeginAlertSheet( @"", @"OK", nil, nil, window, nil, nil, nil, 0, @"The application that was being cheated has quit." ); + + [self reset]; + } + } + + [self rebuildProcessList]; + [self updateProcessPopup]; + [self updateStatusText]; +} + + +- (void)rebuildProcessList +{ + NSString *selected = [[processPopup titleOfSelectedItem] retain]; + int i, max; + + [processList release]; + processList = [[[NSWorkspace sharedWorkspace] launchedApplications] retain]; + + max = [processList count]; + + [processPopup setImagePosition:NSImageOverlaps]; + + [processPopup removeAllItems]; + + for ( i = 0; i < max; i++ ) + { + NSString *name = [[processList objectAtIndex:i] objectForKey:@"NSApplicationName"]; + NSString *path = [[processList objectAtIndex:i] objectForKey:@"NSApplicationPath"]; + + NSImage *image = [[NSWorkspace sharedWorkspace] iconForFile:path]; + + [processPopup addItemWithTitle:name]; + + [image setScalesWhenResized:YES]; + [image setSize:NSMakeSize( 16.0, 16.0 )]; + + [[processPopup itemAtIndex:i] setImage:image]; + + if ( [selected isEqualToString:[processPopup itemTitleAtIndex:i]] ) + { + [processPopup selectItemAtIndex:i]; + } + } + + [selected release]; +} + + +- (void)dealloc +{ + [self reset]; + + [[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self]; + + [processList release]; + + [super dealloc]; +} + + +- (IBAction)processPopup:(id)sender +{ + [self reset]; + + [self updateStatusText]; +} + +- (IBAction)typePopup:(id)sender +{ + [self updateSizePopup]; +} + +- (IBAction)searchButton:(id)sender +{ + if ( [[searchTextField stringValue] isEqualToString:@""] ) + { + NSBeep(); + return; + } + + searching = YES; + + // update the interface + [statusBar startAnimation:self]; + [self updateProcessPopup]; + [self updateSearchButton]; + [self updateTypePopup]; + [self updateSizePopup]; + [self updateChangeButton]; + [self updateStatusText]; + + if ( !cheating ) + { + cheating = YES; + + [NSThread detachNewThreadSelector:@selector(firstSearch:) toTarget:self withObject:nil]; + } + else + { + [NSThread detachNewThreadSelector:@selector(search:) toTarget:self withObject:nil]; + } +/* + { + pid_t pid = (pid_t)PID_SELECTED; + vm_map_t task; + + kern_return_t result; + //int waitStatus; + + addressList = [[NSMutableArray alloc] init]; + + result = task_for_pid( current_task(), pid, &task ); + + if ( result == KERN_SUCCESS ) + NSLog( @"KERN_SUCCESS" ); + else if ( result == KERN_INVALID_ADDRESS ) + NSLog( @"KERN_INVALID_ADDRESS" ); + else if ( result == KERN_INVALID_ARGUMENT ) + NSLog( @"KERN_INVALID_ARGUMENT" ); + else if ( result == KERN_PROTECTION_FAILURE ) + NSLog( @"KERN_PROTECTION_FAILURE" ); + else if ( result == KERN_NO_SPACE ) + NSLog( @"KERN_NO_SPACE" ); + + if ( ptrace( PT_ATTACH, pid, 0, 0 ) != -1 ) + { + if ( waitpid( pid, &waitStatus, WUNTRACED ) == pid ) + { + if ( WIFSTOPPED(waitStatus) ) + { + NSLog( @"process stopped" ); + } + else + { + NSLog( @"process didn't stop" ); + } + + { + vm_address_t address = 0x1b000; + vm_size_t size = 0; + vm_region_basic_info_data_t info; + mach_msg_type_number_t infoCnt = 8; + mach_port_t object_name = 0; + + BOOL canRead, canWrite, canExecute; + + char unsigned *data; + vm_size_t dataCnt; + + NSLog( @"pid: %i, task: %i", pid, task ); + + result = vm_region( task, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name ); + + NSLog( @"info count: %i", (int)infoCnt ); + + if ( result == KERN_SUCCESS ) + NSLog( @"KERN_SUCCESS" ); + else if ( result == KERN_INVALID_ADDRESS ) + NSLog( @"KERN_INVALID_ADDRESS" ); + else if ( result == KERN_INVALID_ARGUMENT ) + NSLog( @"KERN_INVALID_ARGUMENT" ); + else if ( result == KERN_PROTECTION_FAILURE ) + NSLog( @"KERN_PROTECTION_FAILURE" ); + else if ( result == KERN_NO_SPACE ) + NSLog( @"KERN_NO_SPACE" ); + + NSLog( @"address: %X, size: %i", address, size ); + + canRead = info.protection & VM_PROT_READ; + canWrite = (info.protection & VM_PROT_WRITE) >> 1; + canExecute = (info.protection & VM_PROT_EXECUTE) >> 2; + + if ( canRead ) + NSLog( @"can read" ); + if ( canWrite ) + NSLog( @"can write" ); + if ( canExecute ) + NSLog( @"can execute" ); + + data = (char unsigned *)malloc( size ); + dataCnt = size; + + result = vm_read_overwrite( task, address, size, (vm_address_t)data, &dataCnt ); + + if ( result == KERN_SUCCESS ) + NSLog( @"KERN_SUCCESS" ); + else if ( result == KERN_INVALID_ADDRESS ) + NSLog( @"KERN_INVALID_ADDRESS" ); + else if ( result == KERN_INVALID_ARGUMENT ) + NSLog( @"KERN_INVALID_ARGUMENT" ); + else if ( result == KERN_PROTECTION_FAILURE ) + NSLog( @"KERN_PROTECTION_FAILURE" ); + else if ( result == KERN_NO_SPACE ) + NSLog( @"KERN_NO_SPACE" ); + + NSLog( @"data: %X, size: %i", (vm_address_t)data, dataCnt ); + + free( data ); + } + } + else + { + NSLog( @"waitpid() failed" ); + } + + ptrace( PT_DETACH, pid, 0, 0 ); + } + else + { + NSLog( @"ptrace() failed" ); + } + }*/ +} + +- (IBAction)changeButton:(id)sender +{ + [self change]; +} + + +- (int)numberOfRowsInTableView:(NSTableView *)table +{ + if ( cheating && !searching ) + return [addressList count]; + + return 0; +} + +- (id)tableView:(NSTableView *)table objectValueForTableColumn:(NSTableColumn *)column row:(int)row +{ + return [NSString stringWithFormat:@"%X", [[addressList objectAtIndex:row] unsignedLongValue]]; +} + +- (void)tableView:(NSTableView *) setObjectValue:(id)object forTableColumn:(NSTableColumn *)column row:(int)row +{ + return; +} + +- (void)tableViewSelectionDidChange:(NSNotification *)note +{ + [self updateChangeButton]; +} + + +@end \ No newline at end of file diff --git a/English.lproj/InfoPlist.strings b/English.lproj/InfoPlist.strings new file mode 100644 index 0000000000000000000000000000000000000000..623ed62fc4292f784fddc9938b8582dcaadcb0fb GIT binary patch literal 540 zcmbu6OACTf5QWdWUm-0edM=|)LJz1G8SSmqqS8c>}~wv6k|*(?%EhT9G?}iBdALBG3W@zC%s{aa9MyPnD6~!af_8P0tdKqn^4t!d}7i zHKG3=wAA4(Yo@h1IR-ttl+`Zy&!rxtB-0%JTaim9L0zQqOV7_eEHzMG*8(h_*Jn!h z+VcM?71TLwaKN8jZ^%BmV@*`l)iTvJ-du>r+(Mr?G47wA3MXmcpQqjdHLY6G literal 0 HcmV?d00001 diff --git a/English.lproj/MainMenu.nib/classes.nib b/English.lproj/MainMenu.nib/classes.nib new file mode 100644 index 0000000..e08ceca --- /dev/null +++ b/English.lproj/MainMenu.nib/classes.nib @@ -0,0 +1,25 @@ +{ + IBClasses = ( + { + ACTIONS = {changeButton = id; processPopup = id; searchButton = id; typePopup = id; }; + CLASS = AppController; + LANGUAGE = ObjC; + OUTLETS = { + addressTable = id; + changeButton = id; + changeTextField = id; + processPopup = id; + searchButton = id; + searchTextField = id; + sizePopup = id; + statusBar = id; + statusText = id; + typePopup = id; + window = id; + }; + SUPERCLASS = NSObject; + }, + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/English.lproj/MainMenu.nib/info.nib b/English.lproj/MainMenu.nib/info.nib new file mode 100644 index 0000000..6ea9806 --- /dev/null +++ b/English.lproj/MainMenu.nib/info.nib @@ -0,0 +1,23 @@ + + + + + IBDocumentLocation + 88 78 356 240 0 0 1280 1002 + IBEditorPositions + + 29 + 122 595 201 44 0 0 1280 1002 + + IBFramework Version + 291.0 + IBOpenObjects + + 29 + 348 + 410 + + IBSystem Version + 6L60 + + diff --git a/English.lproj/MainMenu.nib/keyedobjects.nib b/English.lproj/MainMenu.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..3d050c817d3440bc28605d39766239ac17092f2f GIT binary patch literal 26124 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 literal 0 HcmV?d00001 diff --git a/English.lproj/MainMenu~.nib/classes.nib b/English.lproj/MainMenu~.nib/classes.nib new file mode 100644 index 0000000..e08ceca --- /dev/null +++ b/English.lproj/MainMenu~.nib/classes.nib @@ -0,0 +1,25 @@ +{ + IBClasses = ( + { + ACTIONS = {changeButton = id; processPopup = id; searchButton = id; typePopup = id; }; + CLASS = AppController; + LANGUAGE = ObjC; + OUTLETS = { + addressTable = id; + changeButton = id; + changeTextField = id; + processPopup = id; + searchButton = id; + searchTextField = id; + sizePopup = id; + statusBar = id; + statusText = id; + typePopup = id; + window = id; + }; + SUPERCLASS = NSObject; + }, + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/English.lproj/MainMenu~.nib/info.nib b/English.lproj/MainMenu~.nib/info.nib new file mode 100644 index 0000000..6ea9806 --- /dev/null +++ b/English.lproj/MainMenu~.nib/info.nib @@ -0,0 +1,23 @@ + + + + + IBDocumentLocation + 88 78 356 240 0 0 1280 1002 + IBEditorPositions + + 29 + 122 595 201 44 0 0 1280 1002 + + IBFramework Version + 291.0 + IBOpenObjects + + 29 + 348 + 410 + + IBSystem Version + 6L60 + + diff --git a/English.lproj/MainMenu~.nib/keyedobjects.nib b/English.lproj/MainMenu~.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..026ec00f89de79efef60b9d94332ef9db162ace0 GIT binary patch literal 26156 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 literal 0 HcmV?d00001 diff --git a/English.lproj/MainMenu~.nib/objects.nib b/English.lproj/MainMenu~.nib/objects.nib new file mode 100644 index 0000000000000000000000000000000000000000..5b9086e1f68f90078970beed897f7cd88497ce76 GIT binary patch literal 14818 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 literal 0 HcmV?d00001 diff --git a/Read Me.txt b/Read Me.txt new file mode 100644 index 0000000..98588ea --- /dev/null +++ b/Read Me.txt @@ -0,0 +1,50 @@ + +The Cheat 1.0b +by Chaz McGarvey + + +WHAT THE CHEAT IS: + +The Cheat is a small, easy-to-use utility that grants you the ability to ultimately "cheat" another application at runtime. The most obvious use is for games. With the help of The Cheat, you can instantly replenish your life, raise your score, give yourself more time, or almost anything else you might need done in a game you are stuck at. + + +HOW DO YOU USE THE CHEAT: + +First, select the program you want to cheat from the list of processes. Then choose the type and size of the variable you want to change using the popup menus. Since The Cheat will have no idea which variable you want to change or where it is, you're going to have to search for it before you can change it. Enter the current value of the variable you want to change in the search text field and push "Search." The Cheat will report what it found. If there are multiple hits, you should search for the variable again after it has changed in the game. Ideally, you would keep searching until there was only one possible location for the variable to be, and then you would change it. If you have searched a million times but there are still more than one results, you can still change the variables one by one or all at the same time if you want (just select the variables from the list on the right). Be careful when doing this if there are very many hits because of the obvious possibility that you might change something that ought not have been changed. If you are searching for a variable and it keeps reporting 0 hits, you may have chosen the wrong type of variable of the game might have incorporated some type of anti-cheat features. Usually even those can be cheated with enough patience, however. + + +HOW DOES THE CHEAT WORK: + +The basic ideas of which The Cheat is based on are not new. There have been many utilities for all of the major platforms that work the same as The Cheat. But it has been hard to find a good "cheater" for Mac OS X until I wrote The Cheat, though I know of at least one other similar utility which only supports integers. This little gem uses "undocumented" BSD-level functions to bypass the protected memory system Mac OS X uses in order to mess around with the memory of other programs. A game's variables (amount of life, time left, strength, special abilities, etc.) are somewhere in its own section of memory. It's simply a matter of finding where a certain variable is stored and changing it to whatever we want. + + +ANYTHING ELSE YOU SHOULD KNOW: + +The Cheat is currently beta software. It is _not_ optimized (it's not running as fast as it could), and I can't even guarantee that it works. I would like The Cheat to be the best it can be, though, so if you have any suggestions or bug fixes or success stories or funny jokes, please send them to me. That's the only way The Cheat will be able to improve. As for the future, The Cheat will be optimized by 1.0, and I hope to have as many bugs squashed as possible. I think I'll even include a decent Read Me and hopefully I'll have an icon. + + +VERSION HISTORY: + +1.0b1 (9/4/03) - First public version. + + +CONTACT ME: + +Chaz McGarvey + +Email: chaz@brokenzipper.com +iChat: ChazMP + +http://www.brokenzipper.com/ + + +IF YOU ARE FEELING CHARITABLE: + +I will probably take donations if you feel I'm worth it. Rest assured, it will be put to good use on a programming book or something. School is keeping me busy, but a little light reading on the side never killed anyone. + +Also, I need an icon if any of you happen to be Photoshop gurus. I have no idea what it should look like, so good luck if you want to help me in that area. I would also be ecstatic if any of you could translate The Cheat (and I suppose the final Read Me) into additional languages, as I quite am languistically challenged. + + +LEGAL STUFF: + +Basically, don't sue me if you think my software broke something of yours because I need to finish school and that would just not be cool. Oh yeah, and The Cheat is copyrighted material, which means I own it and you can't steal it. But it's free, so I don't know why anybody would do that. Anyway, have a nice day. diff --git a/The Cheat.pbproj/chaz.pbxuser b/The Cheat.pbproj/chaz.pbxuser new file mode 100644 index 0000000..60ee588 --- /dev/null +++ b/The Cheat.pbproj/chaz.pbxuser @@ -0,0 +1,480 @@ +// !$*UTF8*$! +{ + 29B97313FDCFA39411CA2CEA = { + activeBuildStyle = 4A9504CCFFE6A4B311CA0CBA; + activeExecutable = 6E31BC0D04EB164300A80003; + activeTarget = 29B97326FDCFA39411CA2CEA; + addToTargets = ( + 29B97326FDCFA39411CA2CEA, + ); + codeSenseManager = 6EAFEFEF05D0CAEA00C357EF; + executables = ( + 6E31BC0D04EB164300A80003, + ); + perUserDictionary = { + PBXPerProjectTemplateStateSaveDate = 97569444; + PBXPrepackagedSmartGroups_v2 = ( + { + PBXTransientLocationAtTop = bottom; + absolutePathToBundle = ""; + activationKey = OldTargetSmartGroup; + clz = PBXTargetSmartGroup; + description = "Displays all targets of the project."; + globalID = 1C37FABC04509CD000000102; + name = Targets; + preferences = { + image = Targets; + }; + }, + { + PBXTransientLocationAtTop = bottom; + absolutePathToBundle = ""; + clz = PBXTargetSmartGroup2; + description = "Displays all targets of the project as well as nested build phases."; + globalID = 1C37FBAC04509CD000000102; + name = Targets; + preferences = { + image = Targets; + }; + }, + { + PBXTransientLocationAtTop = bottom; + absolutePathToBundle = ""; + clz = PBXExecutablesSmartGroup; + description = "Displays all executables of the project."; + globalID = 1C37FAAC04509CD000000102; + name = Executables; + preferences = { + image = Executable; + }; + }, + { + " PBXTransientLocationAtTop " = bottom; + absolutePathToBundle = ""; + clz = PBXErrorsWarningsSmartGroup; + description = "Displays files with errors or warnings."; + globalID = 1C08E77C0454961000C914BD; + name = "Errors and Warnings"; + preferences = { + fnmatch = ""; + image = WarningsErrors; + recursive = 1; + regex = ""; + root = ""; + }; + }, + { + PBXTransientLocationAtTop = bottom; + absolutePathToBundle = ""; + clz = PBXFilenameSmartGroup; + description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter."; + globalID = 1CC0EA4004350EF90044410B; + name = "Implementation Files"; + preferences = { + canSave = 1; + fnmatch = ""; + image = SmartFolder; + isLeaf = 0; + recursive = 1; + regex = "?*\\.[mcMC]"; + root = ""; + }; + }, + { + PBXTransientLocationAtTop = bottom; + absolutePathToBundle = ""; + clz = PBXFilenameSmartGroup; + description = "This group displays Interface Builder NIB Files."; + globalID = 1CC0EA4004350EF90041110B; + name = "NIB Files"; + preferences = { + canSave = 1; + fnmatch = "*.nib"; + image = SmartFolder; + isLeaf = 0; + recursive = 1; + regex = ""; + root = ""; + }; + }, + { + PBXTransientLocationAtTop = no; + absolutePathToBundle = ""; + clz = PBXFindSmartGroup; + description = "Displays Find Results."; + globalID = 1C37FABC05509CD000000102; + name = "Find Results"; + preferences = { + image = spyglass; + }; + }, + { + PBXTransientLocationAtTop = no; + absolutePathToBundle = ""; + clz = PBXBookmarksSmartGroup; + description = "Displays Project Bookmarks."; + globalID = 1C37FABC05539CD112110102; + name = Bookmarks; + preferences = { + image = Bookmarks; + }; + }, + { + PBXTransientLocationAtTop = bottom; + absolutePathToBundle = ""; + clz = XCSCMSmartGroup; + description = "Displays files with interesting SCM status."; + globalID = E2644B35053B69B200211256; + name = SCM; + preferences = { + image = PBXRepository; + isLeaf = 0; + }; + }, + { + PBXTransientLocationAtTop = bottom; + absolutePathToBundle = ""; + clz = PBXSymbolsSmartGroup; + description = "Displays all symbols for the project."; + globalID = 1C37FABC04509CD000100104; + name = "Project Symbols"; + preferences = { + image = ProjectSymbols; + isLeaf = 1; + }; + }, + { + PBXTransientLocationAtTop = bottom; + absolutePathToBundle = ""; + clz = PBXFilenameSmartGroup; + description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter."; + globalID = PBXTemplateMarker; + name = "Simple Filter SmartGroup"; + preferences = { + canSave = 1; + fnmatch = "*.nib"; + image = SmartFolder; + isLeaf = 0; + recursive = 1; + regex = ""; + root = ""; + }; + }, + { + PBXTransientLocationAtTop = bottom; + absolutePathToBundle = ""; + clz = PBXFilenameSmartGroup; + description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter."; + globalID = PBXTemplateMarker; + name = "Simple Regular Expression SmartGroup"; + preferences = { + canSave = 1; + fnmatch = ""; + image = SmartFolder; + isLeaf = 0; + recursive = 1; + regex = "?*\\.[mcMC]"; + root = ""; + }; + }, + ); + "PBXTemplateGeometry-F5F68CF101725D4C0D7A8F4C" = { + Frame = "{{0, 0}, {1280, 873}}"; + PBXProjectWorkspaceModule_GeometryKey_Rev15 = { + }; + RubberWindowFrame = "0 87 1280 915 0 0 1280 1002 "; + }; + PBXWorkspaceContents = ( + { + PBXProjectWorkspaceModule_StateKey_Rev39 = { + PBXProjectWorkspaceModule_DEGV_Geometry = { + _collapsingFrameDimension = 0; + _indexOfCollapsedView = 0; + _percentageOfCollapsedView = 0; + isCollapsed = yes; + sizes = ( + "{{0, 0}, {1280, 127}}", + "{{0, 127}, {1280, 746}}", + ); + }; + PBXProjectWorkspaceModule_DataSourceSelectionKey_Rev6 = { + BoundsStr = "{{0, 0}, {1265, 110}}"; + Rows = ( + 0, + ); + VisibleRectStr = "{{0, 0}, {1265, 110}}"; + }; + PBXProjectWorkspaceModule_EditorOpen = true; + PBXProjectWorkspaceModule_EmbeddedNavigatorGroup = { + PBXSplitModuleInNavigatorKey = { + Split0 = { + bookmark = 6EAFF00605D0D29D00C357EF; + history = ( + 6EAFEFFD05D0CB9B00C357EF, + ); + }; + SplitCount = 1; + }; + }; + PBXProjectWorkspaceModule_GeometryKey_Rev15 = { + GroupTreeCollapsed = yes; + PBXProjectWorkspaceModule_SGTM_Geometry = { + _collapsingFrameDimension = 182; + _indexOfCollapsedView = 0; + _percentageOfCollapsedView = 0.1421875; + sizes = ( + "{{0, 0}, {1280, 873}}", + ); + }; + }; + PBXProjectWorkspaceModule_OldDetailFrame = "{{0, 0}, {1280, 127}}"; + PBXProjectWorkspaceModule_OldEditorFrame = "{{0, 127}, {1280, 746}}"; + PBXProjectWorkspaceModule_OldSuperviewFrame = "{{0, 0}, {1280, 873}}"; + PBXProjectWorkspaceModule_SGTM = { + PBXBottomSmartGroupGIDs = ( + 1C37FBAC04509CD000000102, + 1C37FAAC04509CD000000102, + 1C08E77C0454961000C914BD, + 1CC0EA4004350EF90044410B, + 1CC0EA4004350EF90041110B, + 1C37FABC05509CD000000102, + 1C37FABC05539CD112110102, + E2644B35053B69B200211256, + 1C37FABC04509CD000100104, + ); + PBXSmartGroupTreeModuleColumnData = { + PBXSmartGroupTreeModuleColumnWidthsKey = ( + 165, + ); + PBXSmartGroupTreeModuleColumnsKey_v4 = ( + MainColumn, + ); + }; + PBXSmartGroupTreeModuleOutlineStateKey_v7 = { + PBXSmartGroupTreeModuleOutlineStateExpansionKey = ( + 29B97314FDCFA39411CA2CEA, + 080E96DDFE201D6D7F000001, + 29B97315FDCFA39411CA2CEA, + ); + PBXSmartGroupTreeModuleOutlineStateSelectionKey = ( + ( + 3, + 1, + 0, + ), + ); + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey = "{{0, 0}, {165, 855}}"; + }; + PBXTopSmartGroupGIDs = ( + ); + }; + }; + }, + ); + "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXBuildResultsModule" = { + }; + "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXClassBrowserModule" = { + OptionsSetName = "Hierarchy, all classes"; + }; + "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXDebugCLIModule" = { + }; + "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXProjectFindModule" = { + }; + "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXProjectWorkspaceModule" = { + PBXProjectWorkspaceModule_StateKey_Rev39 = { + PBXProjectWorkspaceModule_DataSourceSelectionKey_Rev6 = { + BoundsStr = "{{0, 0}, {1083, 856}}"; + Rows = ( + 0, + ); + VisibleRectStr = "{{0, 0}, {1083, 856}}"; + }; + PBXProjectWorkspaceModule_EditorOpen = false; + PBXProjectWorkspaceModule_EmbeddedNavigatorGroup = { + PBXSplitModuleInNavigatorKey = { + SplitCount = 1; + }; + }; + PBXProjectWorkspaceModule_GeometryKey_Rev15 = { + PBXProjectWorkspaceModule_SGTM_Geometry = { + _collapsingFrameDimension = 0; + _indexOfCollapsedView = 0; + _percentageOfCollapsedView = 0; + sizes = ( + "{{0, 0}, {182, 873}}", + "{{182, 0}, {1098, 873}}", + ); + }; + }; + PBXProjectWorkspaceModule_OldDetailFrame = "{{0, 0}, {1098, 873}}"; + PBXProjectWorkspaceModule_OldEditorFrame = "{{0, 0}, {750, 480}}"; + PBXProjectWorkspaceModule_OldSuperviewFrame = "{{182, 0}, {1098, 873}}"; + PBXProjectWorkspaceModule_SGTM = { + PBXBottomSmartGroupGIDs = ( + 1C37FBAC04509CD000000102, + 1C37FAAC04509CD000000102, + 1C08E77C0454961000C914BD, + 1CC0EA4004350EF90044410B, + 1CC0EA4004350EF90041110B, + 1C37FABC05509CD000000102, + 1C37FABC05539CD112110102, + E2644B35053B69B200211256, + 1C37FABC04509CD000100104, + ); + PBXSmartGroupTreeModuleColumnData = { + PBXSmartGroupTreeModuleColumnWidthsKey = ( + 165, + ); + PBXSmartGroupTreeModuleColumnsKey_v4 = ( + MainColumn, + ); + }; + PBXSmartGroupTreeModuleOutlineStateKey_v7 = { + PBXSmartGroupTreeModuleOutlineStateExpansionKey = ( + ); + PBXSmartGroupTreeModuleOutlineStateSelectionKey = ( + ( + 0, + ), + ); + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey = "{{0, 0}, {165, 855}}"; + }; + PBXTopSmartGroupGIDs = ( + ); + }; + }; + }; + PBXWorkspaceGeometries = ( + { + Frame = "{{0, 0}, {1280, 873}}"; + PBXProjectWorkspaceModule_GeometryKey_Rev15 = { + }; + RubberWindowFrame = "0 87 1280 915 0 0 1280 1002 "; + }, + ); + "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXBuildResultsModule" = { + Frame = "{{0, 0}, {480, 217}}"; + PBXModuleWindowStatusBarHidden = YES; + RubberWindowFrame = "400 592 480 238 0 0 1280 1002 "; + }; + "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXClassBrowserModule" = { + ClassesFrame = "{{0, 0}, {408, 96}}"; + ClassesTreeTableConfiguration = ( + PBXClassNameColumnIdentifier, + 208, + PBXClassBookColumnIdentifier, + 22, + ); + Frame = "{{0, 0}, {655, 476}}"; + MembersFrame = "{{0, 96}, {408, 404}}"; + MembersTreeTableConfiguration = ( + PBXMemberTypeIconColumnIdentifier, + 22, + PBXMemberNameColumnIdentifier, + 216, + PBXMemberTypeColumnIdentifier, + 133, + PBXMemberBookColumnIdentifier, + 22, + ); + RubberWindowFrame = "312 452 655 518 0 0 1280 1002 "; + }; + "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXDebugCLIModule" = { + Frame = "{{0, 0}, {400, 201}}"; + PBXModuleWindowStatusBarHidden = YES; + RubberWindowFrame = "50 974 400 222 0 0 1280 1002 "; + }; + "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXProjectFindModule" = { + Frame = "{{0, 0}, {614, 100}}"; + RubberWindowFrame = "333 720 614 142 0 0 1280 1002 "; + }; + "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXProjectWorkspaceModule" = { + Frame = "{{0, 0}, {1280, 873}}"; + PBXProjectWorkspaceModule_GeometryKey_Rev15 = { + }; + RubberWindowFrame = "0 87 1280 915 0 0 1280 1002 "; + }; + PBXWorkspaceStateSaveDate = 97569444; + }; + perUserProjectItems = { + 6EAFEFFD05D0CB9B00C357EF = 6EAFEFFD05D0CB9B00C357EF; + 6EAFF00605D0D29D00C357EF = 6EAFF00605D0D29D00C357EF; + }; + sourceControlManager = 6EAFEFEE05D0CAEA00C357EF; + userBuildSettings = { + }; + }; + 29B97326FDCFA39411CA2CEA = { + activeExec = 0; + executables = ( + 6E31BC0D04EB164300A80003, + ); + }; + 6E31BC0D04EB164300A80003 = { + activeArgIndex = 2147483647; + activeArgIndices = ( + ); + argumentStrings = ( + ); + configStateDict = { + }; + debuggerPlugin = GDBDebugging; + dylibVariantSuffix = ""; + enableDebugStr = 1; + environmentEntries = ( + ); + isa = PBXExecutable; + name = "The Cheat"; + shlibInfoDictList = ( + ); + sourceDirectories = ( + ); + }; + 6E31BC0F04EB1BEF00A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1235, 14592}}"; + sepNavSelRange = "{18650, 0}"; + sepNavVisRect = "{{0, 12541}, {1235, 714}}"; + }; + }; + 6EAFEFEE05D0CAEA00C357EF = { + isa = PBXSourceControlManager; + scmConfiguration = { + }; + scmType = scm.cvs; + }; + 6EAFEFEF05D0CAEA00C357EF = { + indexTemplatePath = ""; + isa = PBXCodeSenseManager; + usesDefaults = 1; + wantsCodeCompletion = 1; + wantsCodeCompletionAutoPopup = 0; + wantsCodeCompletionAutoSuggestions = 0; + wantsCodeCompletionCaseSensitivity = 1; + wantsCodeCompletionOnlyMatchingItems = 1; + wantsCodeCompletionParametersIncluded = 1; + wantsCodeCompletionPlaceholdersInserted = 1; + wantsCodeCompletionTabCompletes = 1; + wantsIndex = 1; + }; + 6EAFEFFD05D0CB9B00C357EF = { + fRef = 6E31BC0F04EB1BEF00A80003; + isa = PBXTextBookmark; + name = "AppController.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1022; + vrLoc = 0; + }; + 6EAFF00605D0D29D00C357EF = { + fRef = 6E31BC0F04EB1BEF00A80003; + isa = PBXTextBookmark; + name = "AppController.m: 804"; + rLen = 0; + rLoc = 18650; + rType = 0; + vrLen = 1350; + vrLoc = 18122; + }; +} diff --git a/The Cheat.pbproj/project.pbxproj b/The Cheat.pbproj/project.pbxproj new file mode 100644 index 0000000..bd26a92 --- /dev/null +++ b/The Cheat.pbproj/project.pbxproj @@ -0,0 +1,450 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 39; + objects = { + 080E96DCFE201CFB7F000001 = { + fileRef = 29B97318FDCFA39411CA2CEA; + isa = PBXBuildFile; + settings = { + }; + }; + 080E96DDFE201D6D7F000001 = { + children = ( + 6E31BC0E04EB1BEF00A80003, + 6E31BC0F04EB1BEF00A80003, + ); + isa = PBXGroup; + name = Classes; + refType = 4; + sourceTree = ""; + }; + 089C165CFE840E0CC02AAC07 = { + children = ( + 089C165DFE840E0CC02AAC07, + ); + isa = PBXVariantGroup; + name = InfoPlist.strings; + refType = 4; + sourceTree = ""; + }; + 089C165DFE840E0CC02AAC07 = { + fileEncoding = 10; + isa = PBXFileReference; + lastKnownFileType = text.plist.strings; + name = English; + path = English.lproj/InfoPlist.strings; + refType = 4; + sourceTree = ""; + }; + 089C165EFE840E0CC02AAC07 = { + fileRef = 089C165CFE840E0CC02AAC07; + isa = PBXBuildFile; + settings = { + }; + }; +//080 +//081 +//082 +//083 +//084 +//100 +//101 +//102 +//103 +//104 + 1058C7A0FEA54F0111CA2CBB = { + children = ( + 1058C7A1FEA54F0111CA2CBB, + ); + isa = PBXGroup; + name = "Linked Frameworks"; + refType = 4; + sourceTree = ""; + }; + 1058C7A1FEA54F0111CA2CBB = { + fallbackIsa = PBXFileReference; + isa = PBXFrameworkReference; + lastKnownFileType = wrapper.framework; + name = Cocoa.framework; + path = /System/Library/Frameworks/Cocoa.framework; + refType = 0; + sourceTree = ""; + }; + 1058C7A2FEA54F0111CA2CBB = { + children = ( + 29B97325FDCFA39411CA2CEA, + 29B97324FDCFA39411CA2CEA, + ); + isa = PBXGroup; + name = "Other Frameworks"; + refType = 4; + sourceTree = ""; + }; + 1058C7A3FEA54F0111CA2CBB = { + fileRef = 1058C7A1FEA54F0111CA2CBB; + isa = PBXBuildFile; + settings = { + }; + }; +//100 +//101 +//102 +//103 +//104 +//170 +//171 +//172 +//173 +//174 + 17587328FF379C6511CA2CBB = { + explicitFileType = wrapper.application; + fallbackIsa = PBXFileReference; + isa = PBXApplicationReference; + path = "The Cheat.app"; + refType = 3; + sourceTree = BUILT_PRODUCTS_DIR; + }; +//170 +//171 +//172 +//173 +//174 +//190 +//191 +//192 +//193 +//194 + 19C28FACFE9D520D11CA2CBB = { + children = ( + 17587328FF379C6511CA2CBB, + ); + isa = PBXGroup; + name = Products; + refType = 4; + sourceTree = ""; + }; +//190 +//191 +//192 +//193 +//194 +//290 +//291 +//292 +//293 +//294 + 29B97313FDCFA39411CA2CEA = { + buildSettings = { + }; + buildStyles = ( + 4A9504CCFFE6A4B311CA0CBA, + 4A9504CDFFE6A4B311CA0CBA, + ); + hasScannedForEncodings = 1; + isa = PBXProject; + mainGroup = 29B97314FDCFA39411CA2CEA; + projectDirPath = ""; + targets = ( + 29B97326FDCFA39411CA2CEA, + ); + }; + 29B97314FDCFA39411CA2CEA = { + children = ( + 080E96DDFE201D6D7F000001, + 29B97315FDCFA39411CA2CEA, + 29B97317FDCFA39411CA2CEA, + 29B97323FDCFA39411CA2CEA, + 19C28FACFE9D520D11CA2CBB, + ); + isa = PBXGroup; + name = "The Cheat"; + path = ""; + refType = 4; + sourceTree = ""; + }; + 29B97315FDCFA39411CA2CEA = { + children = ( + 32CA4F630368D1EE00C91783, + 29B97316FDCFA39411CA2CEA, + ); + isa = PBXGroup; + name = "Other Sources"; + path = ""; + refType = 4; + sourceTree = ""; + }; + 29B97316FDCFA39411CA2CEA = { + fileEncoding = 30; + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.objc; + path = main.m; + refType = 4; + sourceTree = ""; + }; + 29B97317FDCFA39411CA2CEA = { + children = ( + 29B97318FDCFA39411CA2CEA, + 089C165CFE840E0CC02AAC07, + ); + isa = PBXGroup; + name = Resources; + path = ""; + refType = 4; + sourceTree = ""; + }; + 29B97318FDCFA39411CA2CEA = { + children = ( + 29B97319FDCFA39411CA2CEA, + ); + isa = PBXVariantGroup; + name = MainMenu.nib; + path = ""; + refType = 4; + sourceTree = ""; + }; + 29B97319FDCFA39411CA2CEA = { + isa = PBXFileReference; + lastKnownFileType = wrapper.nib; + name = English; + path = English.lproj/MainMenu.nib; + refType = 4; + sourceTree = ""; + }; + 29B97323FDCFA39411CA2CEA = { + children = ( + 1058C7A0FEA54F0111CA2CBB, + 1058C7A2FEA54F0111CA2CBB, + ); + isa = PBXGroup; + name = Frameworks; + path = ""; + refType = 4; + sourceTree = ""; + }; + 29B97324FDCFA39411CA2CEA = { + fallbackIsa = PBXFileReference; + isa = PBXFrameworkReference; + lastKnownFileType = wrapper.framework; + name = AppKit.framework; + path = /System/Library/Frameworks/AppKit.framework; + refType = 0; + sourceTree = ""; + }; + 29B97325FDCFA39411CA2CEA = { + fallbackIsa = PBXFileReference; + isa = PBXFrameworkReference; + lastKnownFileType = wrapper.framework; + name = Foundation.framework; + path = /System/Library/Frameworks/Foundation.framework; + refType = 0; + sourceTree = ""; + }; + 29B97326FDCFA39411CA2CEA = { + buildPhases = ( + 29B97327FDCFA39411CA2CEA, + 29B97328FDCFA39411CA2CEA, + 29B9732BFDCFA39411CA2CEA, + 29B9732DFDCFA39411CA2CEA, + ); + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ""; + HEADER_SEARCH_PATHS = ""; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ""; + OTHER_CFLAGS = "-std=c99"; + OTHER_LDFLAGS = ""; + PRECOMPILE_PREFIX_HEADER = YES; + PREFIX_HEADER = The_Cheat_Prefix.h; + PRODUCT_NAME = "The Cheat"; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; + WRAPPER_EXTENSION = app; + }; + dependencies = ( + ); + isa = PBXApplicationTarget; + name = "The Cheat"; + productInstallPath = "$(HOME)/Applications"; + productName = "The Cheat"; + productReference = 17587328FF379C6511CA2CBB; + productSettingsXML = " + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + The Cheat + CFBundleGetInfoString + The Cheat 1.0b1 + CFBundleIconFile + icon.icns + CFBundleIdentifier + com.brokenzipper.TheCheat + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + The Cheat + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0b1 + CFBundleSignature + ThCh + CFBundleVersion + 1.0b1 + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + +"; + }; + 29B97327FDCFA39411CA2CEA = { + buildActionMask = 2147483647; + files = ( + 32CA4F650368D2AA00C91783, + 6E31BC1004EB1BEF00A80003, + ); + isa = PBXHeadersBuildPhase; + runOnlyForDeploymentPostprocessing = 0; + }; + 29B97328FDCFA39411CA2CEA = { + buildActionMask = 2147483647; + files = ( + 080E96DCFE201CFB7F000001, + 089C165EFE840E0CC02AAC07, + ); + isa = PBXResourcesBuildPhase; + runOnlyForDeploymentPostprocessing = 0; + }; + 29B9732BFDCFA39411CA2CEA = { + buildActionMask = 2147483647; + files = ( + 29B9732CFDCFA39411CA2CEA, + 6E31BC1104EB1BEF00A80003, + ); + isa = PBXSourcesBuildPhase; + runOnlyForDeploymentPostprocessing = 0; + }; + 29B9732CFDCFA39411CA2CEA = { + fileRef = 29B97316FDCFA39411CA2CEA; + isa = PBXBuildFile; + settings = { + ATTRIBUTES = ( + ); + }; + }; + 29B9732DFDCFA39411CA2CEA = { + buildActionMask = 2147483647; + files = ( + 1058C7A3FEA54F0111CA2CBB, + ); + isa = PBXFrameworksBuildPhase; + runOnlyForDeploymentPostprocessing = 0; + }; +//290 +//291 +//292 +//293 +//294 +//320 +//321 +//322 +//323 +//324 + 32CA4F630368D1EE00C91783 = { + fileEncoding = 4; + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + path = The_Cheat_Prefix.h; + refType = 4; + sourceTree = ""; + }; + 32CA4F650368D2AA00C91783 = { + fileRef = 32CA4F630368D1EE00C91783; + isa = PBXBuildFile; + settings = { + }; + }; +//320 +//321 +//322 +//323 +//324 +//4A0 +//4A1 +//4A2 +//4A3 +//4A4 + 4A9504CCFFE6A4B311CA0CBA = { + buildRules = ( + ); + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + OPTIMIZATION_CFLAGS = "-O0"; + ZERO_LINK = YES; + }; + isa = PBXBuildStyle; + name = Development; + }; + 4A9504CDFFE6A4B311CA0CBA = { + buildRules = ( + ); + buildSettings = { + COPY_PHASE_STRIP = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + ZERO_LINK = NO; + }; + isa = PBXBuildStyle; + name = Deployment; + }; +//4A0 +//4A1 +//4A2 +//4A3 +//4A4 +//6E0 +//6E1 +//6E2 +//6E3 +//6E4 + 6E31BC0E04EB1BEF00A80003 = { + fileEncoding = 4; + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + path = AppController.h; + refType = 4; + sourceTree = ""; + }; + 6E31BC0F04EB1BEF00A80003 = { + fileEncoding = 4; + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.objc; + path = AppController.m; + refType = 4; + sourceTree = ""; + }; + 6E31BC1004EB1BEF00A80003 = { + fileRef = 6E31BC0E04EB1BEF00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E31BC1104EB1BEF00A80003 = { + fileRef = 6E31BC0F04EB1BEF00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + }; + rootObject = 29B97313FDCFA39411CA2CEA; +} diff --git a/The_Cheat_Prefix.h b/The_Cheat_Prefix.h new file mode 100644 index 0000000..0d0c539 --- /dev/null +++ b/The_Cheat_Prefix.h @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'The Cheat' target in the 'The Cheat' project +// + +#ifdef __OBJC__ + #import +#endif diff --git a/main.m b/main.m new file mode 100644 index 0000000..0fcbed4 --- /dev/null +++ b/main.m @@ -0,0 +1,17 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: «PROJECTNAME» +// +// File: «FILENAME» +// Created: «DATE» +// +// Copyright: «YEAR» «FULLUSERNAME». All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + + +int main( int argc, const char *argv[] ) +{ + return NSApplicationMain(argc, argv); +} \ No newline at end of file -- 2.43.0