ceshare is a lua extension that, in the background, connects to a website (by default cheatengine.org, but you're free to implement your own database...) and querries information about the currently opened process Information about the process is gained from initially doing a md5sum of the first 4096 bytes of the process and the processname. (this allows for version specific data, as the peheader also has information like section sizes which often change on different builds) If that still ends up being ambiguous(the server tells you), do a md5sum of the whole file, or give an md5 sum of a modulename list that the server tells you to check instead. (e.g in case of unchanged game.exe but different game.dll) If still ambiguous, let the user pick from a list once a correct build has been found, (or there is version independant data based on the processname ) show the user some options. Like loading a table, or just open a browser window with information about using CE on it. (Or even executing a cheat directly from that window, e.g luascript) Each entry should have a kind of rating (symbolized using 5 stars) and perhaps comments as well People should be able to add their own data and tables to the database, if they have a CE username and password They can decide to have their entry editable by everyone, or only those in an specific access list. database schema: CheatList id: integer owneruserid: integer lastEditorUserID: integer lastEditorIP: integer lastEditTime: integer description: text public: bool - Editable by everyone, else editable only by the owner and by people in the accesslist processnamemd5: binary(16) (index) versionIndependant: bool --if set, only the processname matters isRequest: bool --if set this is a request. In that case, rating(or just ratingcount) is used to determine if other people want it as well, and there will be no cheatData ratingtotal: integer ratingcount: integer -ratingtotal/ratingcount = stars headermd5: binary(16) (index) fullfilehashmd5: binary(16) - if set, and there are multiple results, use this secondarymodulename: string -- if set, use this. (before fullfilehash) secondaryfullfilehashmd5: binary(16) LuaScriptToCheckForMatch: string/blob --only for very trusted members, let the user execute this lua script. If it returns true, it's valid datatype: integer - 0=table, 1=URL, 2=Lua script History Historyid: integer; Id: integer edittime: integer olddescription: integer olddatatype: integer olddata: BLOB oldlastEditorUserID: integer; oldlastEditorIP: integer Reports: -reportid: integer cheatid: integer; commentid: integer -can be null if cheat report explenation: text Ratings --keep track of what the users have rated (rating is only possible when logged in) -id: integer -userid: integer rated: integer Comments: -commentid: integer -cheatid: integer userid: integer comment: text commentDateTime: dateTime --time of the comment AccessList: -id: integer -userid: integer CheatData -id: integer data: BLOB Sessions -sessionid: binary(16) ip: integer userid: integer lastUpdate: integer --if longer than 1 hour delete this entry LoginFloodProtect ip: integer lastloginattempt: integer php api: QueryProcessCheats(processnamemd5, headermd5) Returns all entries matching this process and header, or only process if versionIndependant is true format: (xml) description description ... If multiple results, the lua script will have to check fullfilehash and secondarymodulename to filter out entries that do not match Then show the results to the user QueryProcessRequests(processnamemd5, headermd5) Same as QueryProcessCheats, but for requests GetCheatData(id) Returns the type and data Login(username, password) On success, returns a sessionid you can use for things that require a login (sessionid is only valid for the IP used to login) Logout(sessionid): Expires the session PublishCheat() ModifyCheat() PublishRequest() ReportCheat(cheatid, reason) --no need to login ReportComment(commentid, reason) GetComments(id, startcount, maxcount): Returns the comments CheckForUpdate() Returns the current version GetLatestVersion() Returns the updated files urltofileurltofile