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


  • Content Count

  • Joined

  • Last visited

  • Days Won


W1cked last won the day on January 31

W1cked had the most liked content!

Community Reputation

6 Neutral

About W1cked

  • Rank


  • Country
    United States
  • Languages

Recent Profile Visitors

283 profile views
  1. 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.)
  2. W1cked

    SRP6 for higher clients

    Did you run into issues porting Spirited's implementation? It's a pretty well documented source.
  3. W1cked

    File Manager - Encrypt/Decrypt Files

    Trying to decrypt itemtype.dat with 2537. I believe it's the same one in the Client Downloads thread.
  4. W1cked

    File Manager - Encrypt/Decrypt Files

    Does 5017 use something different? I've actually tried using it on multiple different client options and keep getting weird results. I've tried on 5017 and 5615. It's just creating a text file with other non-readable characters.
  5. W1cked

    [Go] Xor Encryption Issues

    I think what I may have done is copied the functions and rewrote it to match your Comet source, because the code comments don’t look like something I would write. I’m not that detailed. I think really the only thing I did differently was GenerateKeys, and swapped Encrypt/Decrypt to use one key instead of two. Hope you don’t mind me using it. I can’t fully test it til I get back to my PC but it looks like that did the trick!
  6. W1cked

    C# Server Application with Win32

    IMO, if you're worried about performance you should separate the GUI from the server all together. Something like RPC to get server stats/details on a by-need-basis only. This way you're not utilizing resources for the GUI even when you're not even utilizing it.
  7. W1cked

    [Go] Xor Encryption Issues

    So it appears that Comet suffers from the same affliction, which I forgot is where I referenced this cipher, not Chimera. I'm looking in the EO source now though.
  8. W1cked

    [Go] Xor Encryption Issues

    Interesting, 65536 is where it fails. (65536 >> 8 ) + 0x100 would be 512, so 512 is where it's running out of range.
  9. I've noticed that after being logged in for quite some time that my Xor encrypt function runs out of range. I have tried to debug this for hours now and can't figure it out. It appears that @Spirited's source uses two keys, where I am trying to use one key. I can't figure it out, and I only noticed it now because I left my client running all day and came back to realize that my encrypt function didn't work as expected. It appears to happen around the 2730th time the encrypt function runs. I've attached the code to the playground so you can what I mean. https://play.golang.org/p/HfnKFeqnVh_Z I know it has something to do with with line: dst[i] = dst[i] ^ c.dKey[(c.encrypt>>8)+0x100] More specifically, I know it has something to do with adding 256 (0x100) I'm just not sure why. Below is the same thing on the playground, I've attached it here for archival purposes. package main import ( "encoding/binary" "fmt" ) func main() { x := NewXor() nonEnc := []byte{24, 0, 241, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,} for i := 0; i < 3000; i++ { fmt.Println(i) enc := make([]byte, 24) x.Encrypt(enc, nonEnc) } } // DefaultKey for the Conquer Online game client. Used for interoperability with the game client. var DefaultKey = []byte{0x9D, 0x0F, 0xFA, 0x13, 0x62, 0x79, 0x5C, 0x6D} //Xor cipher used for encrypting/decrypting client/server stream. //dKey is the default key that will be used until the player requests //that the game key (gKey) be initialized using accountId and token. //thereafter, the gKey will be used for encrypting/decrypting. type Xor struct { decrypt, encrypt uint32 dKey [0x200]byte gKey [0x200]byte gameInit bool } // NewCipher assumes the input key is correct (that the length of the key is // 8 bytes) and returns a new instance of the cipher after generating the // initial keystream. func NewXor() *Xor { c := new(Xor) key := DefaultKey for i := 0; i < 0x100; i++ { c.dKey[i] = key[0] c.dKey[i+0x100] = key[4] key[0] = (key[1]+byte(key[0]*key[2]))*key[0] + key[3] key[4] = (key[5]-byte(key[4]*key[6]))*key[4] + key[7] } return c } // GenerateKeys uses the token and identity of the client (in this project, // the 64-bit token buffer from MsgConnect if it were supported by the client // patch) as the key for altering the keystream. func (c *Xor) GenerateKeys(accountId uint32, token uint32) { temp1 := uint32(((token + accountId) ^ 0x4321) ^ token) sqr := uint32(temp1 * temp1) tmp1 := make([]byte, 4) tmp2 := make([]byte, 4) binary.LittleEndian.PutUint32(tmp1, temp1) binary.LittleEndian.PutUint32(tmp2, sqr) for i := 0; i < 0x100; i++ { c.gKey[i] = c.dKey[i] ^ tmp1[i%4] c.gKey[i+0x100] = c.dKey[i + 0x100] ^ tmp2[i%4] } c.gameInit = true c.encrypt = 0 } // Encrypt sets dst with the result of XORing src with the key stream. Dst and // src may be the same slice, but otherwise should not overlap. Decrypt uses // the encryption counter (encrypt). func (c *Xor) Encrypt(dst, src []byte) { for i, v := range src { dst[i] = v ^ 0xAB dst[i] = dst[i]>>4 | dst[i]<<4 dst[i] = dst[i] ^ c.dKey[byte(c.encrypt&0xff)] dst[i] = dst[i] ^ c.dKey[(c.encrypt>>8)+0x100] c.encrypt++ } } // Decrypt sets dst with the result of XORing src with the keystream. Dst and // src may be the same slice, but otherwise should not overlap. Decrypt uses // the decryption counter (decrypt). func (c *Xor) Decrypt(dst, src []byte) { if c.gameInit == false { for i, v := range src { dst[i] = v ^ 0xAB dst[i] = dst[i]>>4 | dst[i]<<4 dst[i] = dst[i] ^ c.dKey[byte(c.decrypt&0xff)] dst[i] = dst[i] ^ c.dKey[(c.decrypt>>8)+0x100] c.decrypt++ } return } for i, v := range src { dst[i] = (byte)(v ^ 0xAB) dst[i] = (byte)(dst[i]>>4 | dst[i]<<4) dst[i] = (byte)(dst[i] ^ c.gKey[c.decrypt&0xff]) dst[i] = (byte)(dst[i] ^ c.gKey[(c.decrypt>>8)+0x100]) c.decrypt++ } } //BlockSize is here to satisfy the cipher.Block interface. It is unimplemented func (c *Xor) BlockSize() int { panic("Xor BlockSize should never be called. Implemented to fulfill interface.") }
  10. W1cked

    Hello world - Zen

    I'm still working on my server, but progress has slowed down because of time constraints. However, I have learned a lot from it. One of the best places to get (already discovered) information is Spirited's Wiki. You can find a lot of the packet structures there that will get you started. Welcome to the club!
  11. W1cked

    Conquer Map Editor/Creator

    The closest thing I have is a command line dmap reader that I built in Go. I had to have the dmap system in my source for validation anyway, but creating it for command line wasn't that much more difficult. A visual editor on the other hand, like @Spirited said, would probably take a lot of work. I'm actually happy that Ultimation didn't share it, but that's just my opinion.
  12. If the servers are shut down, that usually means the patch servers will likely be taken down too. So in that case, whatever you have on the disc will be what you are stuck with. This is the case with almost all modern games.
  13. W1cked

    Hello world

    @Spirited Don't worry, my Go code can't be much better. I think we're all pretty critical of ourselves when we look back. I've never looked at my code from 6 months prior and thought "Wow, what a good job." I'm not really sure why I want a Data Analytics, Finance is really where I would like to apply my software skills. Like trading platforms, brokers, or banks. @Omicron @Twelve I'm pretty interested in it, always have been. I've just now been able to find time to actually do something. I hope to have something released soon in 5017 patch. I'm hoping to maybe fix some potential unclean (or what I view as unclean) habits in some sources. My first order of business, in my 5017 server I scraped the idea of switch statements for packet handling. I've created a router, something like a simple http router if you have ever used Go. So instead of having abnormally large switch statements for handling packets, at initialization you specify what "process" goes to the uint16. c.Router.Add(NewRoute().Name(packets.MsgAccountType).Process(MsgAccountProcess)) In my opinion, this makes the code base far more manageable and readable. The router uses a map[uint16]*Route, and the Route contains some information including what process to run for that packet. Since it uses a map, finding the Route happens in constant time (which isn't TOO big of a deal, but it still helps.) I'm hoping to also use something like this for handling some sub actions of packets, like MsgAction.
  14. W1cked

    Packet [1052] Game

    @Spirited that’s what i’ve been using. I’m having to go through sources to find out the sequences. I have the ciphers working (i think) but what i’m struggling with now is that the game crashes when i send the ANSWER_OK packet. I’m guessing that it has something to do with the cipher. I’m trying to debug a couple of sources to figure out what i’m doing different.
  15. W1cked

    Packet [1052] Game

    I am an overly confident programmer who makes simple binary mistakes, and refuses to acknowledge that it could have possibly been me who messed up. This has caused me a great deal of time wasted. I was using the wrong method of the binary littlendian package.

Important Information

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