Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Welcome to our site

Take a moment to join our board

All Activity

This stream auto-updates     

  1. Yesterday
  2. Spirited

    JE to JMP

    JE is a jump equals operation. In other words, it'll only jump to a new address if a condition is met. By contrast, JMP has no comparison condition; it'll just jump. If you replace a JE instruction with a JMP instruction, it means whatever check the code was doing there will no longer run for that code path. It can be used for ignoring simple client checks without detouring the entire function.
  3. Last week
  4. Luda

    JE to JMP

    what does changing from JE to JMP do?
  5. Spirited

    JE to JMP

    Entry points in general are addresses where a program starts, or less conventionally where a function/subroutine starts in assembly. Hard to say what these ones do without knowing what program he's referencing.
  6. Luda

    JE to JMP

    what do these entry points do actually?
  7. Earlier
  8. Oh shit, I'm so tired xD I still want to make my CQ server in C++

    1. Show previous comments  2 more
    2. Spirited

      Spirited

      If you wanna do cross-platform, I'd strongly recommend Qt. C++ is tricky to do cross-platform on your own. Even if you use GCC between Linux and Windows, they compile C++ differently due to bugs. Qt doesn't seem to have that problem often though, if you use their classes that is. Personally, I wouldn't work in Win32 anymore. It adds more complexity and doesn't really make sense for new apps these days. Microsoft themselves say this when describing Win32: "In general, .NET programming in C# is less complex, less error-prone, and has a more modern object-oriented API than Win32 or MFC. In most cases, its performance is more than adequate." Just things to keep in mind.

    3. Vendramini

      Vendramini

      Thanks for the tips. Tho, I couldn't manage to install QT on VS2019 :/ but I'll try again later.

    4. Spirited

      Spirited

      I wouldn't use Visual Studio 2019 for anything cross platform. The IDE itself isn't cross platform. I'd either use Visual Studio Code or Qt Creator. Here's an article that talks about both of them that may help: https://www.kdab.com/using-visual-studio-code-for-writing-qt-applications/

  9. Spirited

    JE to JMP

    I usually use C++ for things like this. Lower level Windows APIs are all in C/C++, so you'll have much finer control of memory and processes on Windows from C++. For example, if you wanted to create a new process in a suspended state and then modify its memory, you could use CreateProcess with a creation flag (CREATE_SUSPENDED). You don't have that option from C# ProcessStartInfo class. You can always use C# and use PInvokes, but I don't think it's an appropriate use for the language. Plus, if you want to inject a library as well, it means you'd be using two separate languages at that point (or trying to inject the .NET runtime which is extremely painful). Those are my two cents on the topic.
  10. Mugaru

    JE to JMP

    Alright! Thanks for the answer. i have to check if its a short or not, for the first 2 i know for sure, 3rd i would have to check. I have to do it in memory since the data is loaded after the executable is running. could C# be the language to do this in?
  11. Diab

    JE to JMP

    That can be achieved by editing the instruction bytes at run-time. There are two types of JE/JZ which are Near and Short jumps and the main difference is short jumps only jump a distance of a byte while near can jump a distance up to 4 bytes. You will need to identify which it is because the new bytes representing the JMP instruction will vary based on the jump distance, if the distance is a short then the new byte should be 0xEB while the near jump will be 0xE9 , keep in mind that a near JE instruction code is 2 bytes long while the near JMP code is 1 byte long so you will need to keep that in mind.
  12. Mugaru

    JE to JMP

    Hi guys, I would like to know how to change the following EntryPoints at run-time 00544B9B JE to JMP 00577D19 JE to JMP 0060C9C8 JE to JMP Found those entrypoints with OllyDBG, but they are only there when the software is running. Since i can not change them and save the Executable i would have to inject something to change the JE to JMP. Anybody that can help me a little bit so i know where to start and if it's even possible. Thanks in Advance.
  13. Spirited

    Comet - Open Source Conquer Online Server

    Yey!! I'm so glad. Let me know if you have any questions.
  14. Vendramini

    Comet - Open Source Conquer Online Server

    Okay, so I'm starting World Conquer v4 with this XD * Forked
  15. Vendramini

    Simple database Migration manager

    Okay dokey. I'll update it on the next revision.
  16. Spirited

    Simple database Migration manager

    I was going to add the same. That naming convention is no longer recommended unless surrounding code already follows that naming convention. Generally, you want to learn and follow the guidelines of a language so that any project you go to with that language is consistent and easy to read and contribute towards.
  17. CptSky

    Simple database Migration manager

    Hungarian notation is no longer recommended in modern codebases. Outside of old C/C++ codebases or APIs (like WinAPI), it is less and less common to prefix the variables with some kind of type. Personally, I'd strongly suggest you not to get use to it (and even less to introduce it in other languages).
  18. Vendramini

    Simple database Migration manager

    I'm working on the improvements hehehe but since I'm working for two companies now, development of my own things became slow. I'm working on doing something like this for my company, but it's for SQLServer. I'll convert be converting it to MySQL soon. Also for naming conventions I like how it was done in C++, sometimes I mistakenly invert somethings but I try to do it correctly love sz, psz, n, dw, qw, etc. And thanks for the feedback.
  19. W1cked

    Simple database Migration manager

    Nice! I would also add that migration systems generally come with Up/Down changes. If a migration fails, I would expect the next migration to not run and all other changes be reverted. The reason being is that if I build a table called Users, then a table called Characters that has a foreign key, if Users table fails to execute properly I would expect it to revert all changes and stop all remaining changes. In this case, Characters table would fail to be created due to the foreign key. I like the idea of this as it requires raw queries over some sort of abstract migration system. If I have all of the sql written, it makes it easier if the current migration system becomes abandoned or perhaps a better one is released (I like options.)
  20. Spirited

    Simple database Migration manager

    Looks good. I think someone mentioned naming conventions on the other board. Here're the naming guidelines I follow for dotnet. Outside of naming conversations, I prefer nice interfaces for parameterized queries over database ORMs. Maybe I've worked in Go for too long though. I can see a system like this doing really well for plain MySQL.
  21. Vendramini

    Simple database Migration manager

    Hello! Today I've got a few free minutes at my work and coded something that I noticed that I need long time ago! There's room for improvements of course but this will be good for those who often updates their game database and also need to keep track of the changes. The script is simple and I'll be updating here as I upgrade my code on my server. using System; using System.IO; using MySql.Data.MySqlClient; namespace FtwCore.Database.Migrations { public sealed class MigrationManager { private string m_szConnectionString; private string m_szMirationsPath; public MigrationManager(string host, string user, string pass, string data, int port) { m_szMirationsPath = Environment.CurrentDirectory + "\\migrations\\"; m_szConnectionString = $"Server={host};Port={port};Database={data};Uid={user};Password={pass};charset=utf8;"; } public string LastExcepttion { get; private set; } public void Migrate() { if (!Directory.Exists(m_szMirationsPath)) Directory.CreateDirectory(m_szMirationsPath); string[] files = Directory.GetFiles(m_szMirationsPath); foreach (var file in files) { FileInfo info = new FileInfo(file); if (info.Extension != ".sql") { Console.WriteLine([email protected]"Skip migration file {info.Name} not sql"); continue; } if (Path.GetFileNameWithoutExtension(file).Length < 16) { Console.WriteLine([email protected]"Skip migration file {info.Name} name length less than 16"); continue; } string szYear = info.Name.Substring(0, 4); string szMonth = info.Name.Substring(4, 2); string szDay = info.Name.Substring(6, 2); string szHours = info.Name.Substring(8, 2); string szMinutes = info.Name.Substring(10, 2); string szSeconds = info.Name.Substring(12, 2); if (!int.TryParse(szYear, out int year) || !int.TryParse(szMonth, out int month) || !int.TryParse(szDay, out int day) || !int.TryParse(szHours, out int hour) || !int.TryParse(szMinutes, out int minute) || !int.TryParse(szSeconds, out int second) || !DateTime.TryParse($"{year}-{month}-{day} {hour}:{minute}:{second}", out DateTime dtFullTime)) { Console.WriteLine([email protected]"Skip migration file {info.Name} invalid date stamp yyyyMMddHHmmss"); continue; } string fileName = Path.GetFileName(file); if (HasExecuted(fileName)) { continue; } if (!Execute(fileName)) { Console.WriteLine([email protected]"Error on executing migration for file {info.Name}! Error: {LastExcepttion}"); continue; } ExecuteInsert($"INSERT INTO `migrations` (`file`, `execute_time`) VALUES ('{fileName}', '{DateTime.Now:yyyy-MM-dd HH:mm:ss}')"); } } public bool Execute(string fileName) { if (!fileName.ToLower().EndsWith(".sql")) fileName += ".sql"; try { using (MySqlConnection conn = new MySqlConnection(m_szConnectionString)) { conn.Open(); MySqlScript script = new MySqlScript(conn, File.ReadAllText($"{m_szMirationsPath}{fileName}")); script.Execute(); conn.Close(); } return true; } catch (MySqlException ex) { LastExcepttion = ex.Message; return false; } } public bool HasExecuted(string fileName) { string query = "SELECT id FROM migrations WHERE `file`[email protected] LIMIT 1"; try { using (MySqlConnection conn = new MySqlConnection(m_szConnectionString)) { using (MySqlCommand command = new MySqlCommand(query, conn)) { conn.Open(); command.Prepare(); command.Parameters.AddWithValue("@file", fileName); bool result = command.ExecuteReader().HasRows; conn.Close(); return result; } } } catch (MySqlException ex) { LastExcepttion = ex.Message; return false; } } public int ExecuteInsert(string szQuery) { try { int result = -1; using (MySqlConnection conn = new MySqlConnection(m_szConnectionString)) { using (MySqlCommand command = new MySqlCommand(szQuery, conn)) { conn.Open(); result = command.ExecuteNonQuery(); conn.Close(); } } return result; } catch (MySqlException ex) { LastExcepttion = ex.Message; return -1; } } public bool TestConnection() { try { using (MySqlConnection conn = new MySqlConnection(m_szConnectionString)) { conn.Open(); conn.Close(); } return true; } catch (MySqlException ex) { LastExcepttion = ex.Message; return false; } } } } How to use: Create a 'migrations' folder on your executable path Put all your SQL Scripts in files inside of it Files must have yyyyMMddHHmmss as the first 14 characters Files must have from 16 to 128 characters Before loading your mysql data just create a new instance of the MigrationManager and call .Migrate() method Done! Then, anything that you code on your test database, save the final code on a SQL file, name it 20200129183000 WhateverYouWant.sql and put in your production migrations folder! If the code hasn't been executed, your server will execute and you can keep track of the updates. Ey! I'm sending your first migration sql file so you can test it! Good luck. PS: don't forget to change the namespace! 20200129182100_MyVeryFirstMigration.sql
  22. Spirited

    Conquer Online Floor Editor

    Introduction This command-line tool allows you to edit the floor cells of Conquer Online data maps (DMaps). Each floor cell contains a flag on if players are blocked from stepping on the cell, what the surface feedback effect is when stepping on the cell, and what the elevation the cell is on. Similar to the Portal Editor, this tool can be compiled using the golang compiler for Windows, Mac, or Linux. I wrote this tool at work during our end-of-sprint game time, so it's a bit rushed. If you have any problems using it, let me know. Just fyi though, it's a command-line tool, so you must use it from a command prompt window. Picture Downloads See my portfolio website for download links and source code.
  23. Mugaru

    Conquer Facebook Client

    Alright :-). Small update from here. Got my Login server working until the Packet decryption. I'm using the Cryptographer from the Comet project in another project. What it returns is; Without Encryption/Decryption turned on: [LoginServer] Unknown packet type: -26867 With Encryption/Decryption turned on: [LoginServer] Unknown packet type: 11147 But i expect something like packet 1051 (since that is the login packet of CrazyTao if i'm right). I tried the keys from comet aswell as the keys that are in some EUDemons server that has been written by someone. If i'm right, and understand whats happening here, the keys in the source code are not right to decrypt those packets. Is there any way to find out which keys are needed? Is this a XOR encryption TQ was using those years?
  24. I remember getting the interface down to show the product of breeding the two horses in the client. Not accurately since we don't have the real breeding algorithm, but good enough. I'd have to look back and see what I did (I can't remember off the top of my head). What I'd like to do with this project is generate breeding formulas for any desired outcome.
  25. I still have interest in this, but I also can't make the interface match the colors correctly when you insert both steeds in the interface.
  26. Mugaru

    Conquer Facebook Client

    Yea, i found them myself already! Made it work until it says that it couldn't connect to the server (Client version 9027). My idea was to write a server in C# myself, just for the fun and to better understand how all those Technics work. My skills are to low to run a fully working server though and since i miss the game CrazyTao, i really liked the idea to create something myself, my problem now is that i think its too hard for me if i look at my C# skills though, haha
  27. Vendramini

    Conquer Facebook Client

    I have CrazyTao binary server files but I never bothered about asking which version does it run. And my antivirus says that there are virus in it, like in most TQ Binaries out there. My PC is down now and I can't access it now, but if you wish I can get the files for you later.
  28. Mugaru

    Conquer Facebook Client

    Little update. I found a server online which won't close my client immediately after login. Down here is wat i found out with WireShark to follow the stream of connections. UPDATE: All the strings are HEX strings as far as i can see now. So i guess, my output is not right to go any further? // KEYS? After 4 requests, they are a little bit different. (Normally it is, one complete string... but i cut them in pieces because the first piece is always the same..) 28f53597 f27d129f 28f53597 5507129f 28f53597 0347129f (The route of the string is as written below) Server > Client // Packets?! They are the same for about 4 requests login tries. 14f50d97484461eb188d4eebb4b9ca7710a586c3961dfa3519192c8e8f1994394ba4150d5ff313050139cf24d5755abf1105e6a3 > Client > Server 2c8d51efb4b9ca7704a586c32cd182cf08bd3e1b13977456c6a2b5d5db6abbabc29fae4b94192ad77005e6a30cb1e2af681d1efb > Server < Client Those 2 strings will be returned after i try to login with username: test and password: test As you can see i posted the routes of the strings behind it. Hope someone understands what i've written there 😛..
  1. Load more activity
×

Important Information

By using this site, you agree to our Terms of Use.