You didn't learn that when Cuchaz started making a sail-able ships mod, or extending the height limit to y = ±8 million?
@Cuchaz, is there anything we (that is; other coders) can do to help bring Enigma to completion faster, or should we just wait for you to finish it and then help out with deobfuscating stuff? *secretly desperate to sail ships on finite oceans*
Rollback Post to RevisionRollBack
I believe in the Invisible Pink Unicorn, bless her Invisible Pinkness.
@Cuchaz, is there anything we (that is; other coders) can do to help bring Enigma to completion faster, or should we just wait for you to finish it and then help out with deobfuscating stuff? *secretly desperate to sail ships on finite oceans*
Sure! If you want to help out, checkout the Enigma source. Run the program, try to deobfuscate some bytecode. Pay attention to what works well and what doesn't. If you find any bugs, you can try to fix them. If something doesn't work well, you can come up with a way to improve it. I don't have much of a todo list right now, that's actually the process I'm using.
The only thing on my todo list right now is to get method inheritance/override detection working correctly so that renaming one method has the correct effects on other methods related by inheritance.
Other than that, the sky's the limit. I'd say the tool is almost feature-complete. I should probably start thinking about a beta test soon.
I'll have a play tomorrow if I get the chance. If it's almost feature complete, then there probably isn't that much I'll be able to help out with... At the very least I'll sign my name up for helping deobfuscate though. If I get anywhere with Enigma then hooray for the universe, and if I don't achieve anything at all then so be it :'(
Rollback Post to RevisionRollBack
I believe in the Invisible Pink Unicorn, bless her Invisible Pinkness.
I'll have a play tomorrow if I get the chance. If it's almost feature complete, then there probably isn't that much I'll be able to help out with... At the very least I'll sign my name up for helping deobfuscate though. If I get anywhere with Enigma then hooray for the universe, and if I don't achieve anything at all then so be it :'(
Actually, I take it back. I'm about to completely rewrite the source code identifier recognition system. So you probably don't want to mess any of the code for a bit unless it's cosmetic GUI stuff.
I'll let everyone know when I'm done. This is going to be a pretty big rewrite. I found a much better tool to implement this feature! =D
Big update tonight. I got lots of shiny new features working related to code browsing. Now you can select an identifier in the source code and instantly jump to its declaration in whatever class that may be. There's also a back button so you can go back to whatever class file you were looking at before.
And best of all, you can now browse by method overrides in the inheritance hierarchy. Since Enigma knows about method overrides now, it will rename methods in an inheritance hierarchy correctly.
I think I just need to add call graph searches and we should be good to go for the beta!
Big update tonight. I got lots of shiny new features working related to code browsing. Now you can select an identifier in the source code and instantly jump to its declaration in whatever class that may be. There's also a back button so you can go back to whatever class file you were looking at before.
Nice! The number 1 feature when deobfuscating something like Minecraft, where the devs (or the compiler) are insistent on putting utterly everything in it's own method with so many damn private/protected properties... Man I feel a rant coming on... damn... must restrain... myself...
Anyway... on a different and totally off topic note, @Cuchaz, is it bad that my favorite language is Visual Basic?
Rollback Post to RevisionRollBack
I believe in the Invisible Pink Unicorn, bless her Invisible Pinkness.
Nice! The number 1 feature when deobfuscating something like Minecraft, where the devs (or the compiler) are insistent on putting utterly everything in it's own method with so many damn private/protected properties... Man I feel a rant coming on... damn... must restrain... myself...
Having good code browsing tools is a big priority for me in a tool like this.
Having good code browsing tools is a big priority for me in a tool like this.
Only if it's VB6. VB.net is actually a real language. From what I remember, it's functionally equivalent to C# which is actually a damn fine language.
Mmm, C# is like visual basic with syntax that I find quite similar to Java's. It's more that a heap of people seem to think that experienced coders should die on the inside when they use VB.net (I'm currently using 2012 version or something). My own motto is something like;
Coding is coding, languages are proxies, it's not possible to make a functional program faster than you can do it in VB.
I was just wondering which side of the mentality you were on (I have somewhat of a hypothesis that coders with more mathsy-computer-science background tend to not give as much of a damn about language than good 'ol application coders, just that without some kind of ballpark statistics it's really just speculation).
Rollback Post to RevisionRollBack
I believe in the Invisible Pink Unicorn, bless her Invisible Pinkness.
Mmm, C# is like visual basic with syntax that I find quite similar to Java's. It's more that a heap of people seem to think that experienced coders should die on the inside when they use VB.net (I'm currently using 2012 version or something). My own motto is something like;
Coding is coding, languages are proxies, it's not possible to make a functional program faster than you can do it in VB.
I was just wondering which side of the mentality you were on (I have somewhat of a hypothesis that coders with more mathsy-computer-science background tend to not give as much of a damn about language than good 'ol application coders, just that without some kind of ballpark statistics it's really just speculation).
Personally, my preference is for languages that use symbols to describe the syntax. I just find it easier to read. The thing that annoys me most about VB-based languages is that all the syntax is described using reserved words. And sometimes they let you drop the () for function calls. Ignoring cosmetic differences, VB.net is basically equivalent to C#, which itself is only subtly different from Java. You can do all the same stuff in VB.net, but the syntax is just more verbose.
In other news, I got call graph searches working for methods. I'll add support for fields hopefully soon.
Personally, my preference is for languages that use symbols to describe the syntax. I just find it easier to read. The thing that annoys me most about VB-based languages is that all the syntax is described using reserved words. And sometimes they let you drop the () for function calls. Ignoring cosmetic differences, VB.net is basically equivalent to C#, which itself is only subtly different from Java. You can do all the same stuff in VB.net, but the syntax is just more verbose.
Hmmm, definitely personal preference (I'm 100% opposite). But yeah, all .net languages use exactly the same .net libraries which are basically the same as the native Java libraries, so in the end; C# is VB with Java syntax, and Java is C# that can run on different platforms. At a lower level, they are all IL/JIT languages, which makes them pretty much exactly the same to begin with.
Rollback Post to RevisionRollBack
I believe in the Invisible Pink Unicorn, bless her Invisible Pinkness.
I just finished call graph searches for fields (in addition to methods) and added proper support for constructors. There might still be a few rough edges and bugs, but I'd say Enigma is feature complete now.
Hopefully I'll have some time tomorrow to bootstrap a Mercurial repo for 1.7.10 mappings and then I can let you guys have at it.
Are the MCP mappings off-limits? It would be nice to have some portability.
Interesting question... I know the whole mappings are off limits, but since I'm not entirely sure how MCP are actually able to license their mappings in the first place, I have no idea what degree of similarity would be allowed between the enigma mappings and the MCP mappings... Cuuuuuchaz we neeeed you!
Worst case for portability, you can always just "re-deobfuscate" your target code using the different mappings anyway, and I'm sure it wouldn't be thaaaat hard to automate this in some way (*cough* gradle)
Rollback Post to RevisionRollBack
I believe in the Invisible Pink Unicorn, bless her Invisible Pinkness.
Are the MCP mappings off-limits? It would be nice to have some portability.
The MCP mappings are released under a restrictive license that prohibits other projects from using the mappings. I've tried to negotiate with the MCP project maintainers (eg Searge), but they don't return my messages in any timely manner. I'm sure they're just too busy.
Minecraft always speaks the language of obfuscated classes, so we should still be portable.
Interesting question... I know the whole mappings are off limits, but since I'm not entirely sure how MCP are actually able to license their mappings in the first place, I have no idea what degree of similarity would be allowed between the enigma mappings and the MCP mappings... Cuuuuuchaz we neeeed you!
Worst case for portability, you can always just "re-deobfuscate" your target code using the different mappings anyway, and I'm sure it wouldn't be thaaaat hard to automate this in some way (*cough* gradle)
They don't hold a patent on deobfuscating Minecraft code, just a copyright on their mappings. As long as our mappings are distinguishable from theirs and it's obvious that we didn't just copy them, we should be fine.
Would also be nice to have 1.6.4 mappings to deobfuscate some old mods so one can try to port them if no source is available.
That's a really cool idea. There's nothing stopping people from using Enigma to deobfuscate Minecraft 1.6.4 or other mods. I'm going to focus my efforts on 1.7.10 or 1.8.x though.
Just run the jar file (i.e. java -jar theJar.jar) and hopefully the UI should be pretty self-explanatory. I'll eventually write up a wiki article with some kind of howto for using Enigma, but for now you guys are on your own. =P
Before you dive into deobfuscating anything, please make sure you are coordinating your efforts with other deobfuscators. I've made a Mercurial repo to host mappings for Minecraft jars here: https://bitbucket.org/cuchaz/minecraft-mappings
I tried to find a way to make the repo writable by anyone, but there doesn't seem to be an option for that. I suppose that could be a security issue. If you want to push to the repo, just send me a request with your BitBucket account name, and I'll give you write access. The goal is to let anyone contribute mappings if they want to.
Before you start a deobfuscating session, make sure you've pulled the latest mappings from the repo. When you're done, merge your changes back into the repo. The file format I've chosen for the mappings is a human-readable line-by-line text format, so hopefully Mercurial will be a useful tool for synchronizing the mappings. We'll see how this works. =)
The mappings are released under a Creative Commons Attribution-ShareAlike 4.0 International license. It basically means you can use the mappings for anything you want. If you distribute copies of the mappings (modified or unmodified), then you have to use the same license. That should be pretty permissive so people can use these mappings for just about anything they want. Just be sure to abide by the terms of the Minecraft EULA.
I should eventually update the OP, but I'm tired. I'll do it later. =P
You didn't learn that when Cuchaz started making a sail-able ships mod, or extending the height limit to y = ±8 million?
@Cuchaz, is there anything we (that is; other coders) can do to help bring Enigma to completion faster, or should we just wait for you to finish it and then help out with deobfuscating stuff? *secretly desperate to sail ships on finite oceans*
I believe in the Invisible Pink Unicorn, bless her Invisible Pinkness.
Sure! If you want to help out, checkout the Enigma source. Run the program, try to deobfuscate some bytecode. Pay attention to what works well and what doesn't. If you find any bugs, you can try to fix them. If something doesn't work well, you can come up with a way to improve it. I don't have much of a todo list right now, that's actually the process I'm using.
The only thing on my todo list right now is to get method inheritance/override detection working correctly so that renaming one method has the correct effects on other methods related by inheritance.
Other than that, the sky's the limit. I'd say the tool is almost feature-complete. I should probably start thinking about a beta test soon.
I'll have a play tomorrow if I get the chance. If it's almost feature complete, then there probably isn't that much I'll be able to help out with... At the very least I'll sign my name up for helping deobfuscate though. If I get anywhere with Enigma then hooray for the universe, and if I don't achieve anything at all then so be it :'(
I believe in the Invisible Pink Unicorn, bless her Invisible Pinkness.
Actually, I take it back. I'm about to completely rewrite the source code identifier recognition system. So you probably don't want to mess any of the code for a bit unless it's cosmetic GUI stuff.
I'll let everyone know when I'm done. This is going to be a pretty big rewrite. I found a much better tool to implement this feature! =D
I believe in the Invisible Pink Unicorn, bless her Invisible Pinkness.
Hey hey!! What are you doing in that corner? Stop that deobfuscating!
- The Cubic Chunks Mod is back! Be a part of it's rebirth and Development.
-- Robinton's Mods: [ Mirror ] for some of his Mods incl Cubic Chunks Mod, due to DropBox broken links.
- Dungeon Generator for the Open Cubic Chunks Mod
- QuickSAVE-QuickLOAD for the Open Cubic Chunks Mod
EDIT: that was my 1000th post! =D
And best of all, you can now browse by method overrides in the inheritance hierarchy. Since Enigma knows about method overrides now, it will rename methods in an inheritance hierarchy correctly.
I think I just need to add call graph searches and we should be good to go for the beta!
Nice! The number 1 feature when deobfuscating something like Minecraft, where the devs (or the compiler) are insistent on putting utterly everything in it's own method with so many damn private/protected properties... Man I feel a rant coming on... damn... must restrain... myself...
Anyway... on a different and totally off topic note, @Cuchaz, is it bad that my favorite language is Visual Basic?
I believe in the Invisible Pink Unicorn, bless her Invisible Pinkness.
Having good code browsing tools is a big priority for me in a tool like this.
Only if it's VB6. VB.net is actually a real language. From what I remember, it's functionally equivalent to C# which is actually a damn fine language.
Mmm, C# is like visual basic with syntax that I find quite similar to Java's. It's more that a heap of people seem to think that experienced coders should die on the inside when they use VB.net (I'm currently using 2012 version or something). My own motto is something like;
Coding is coding, languages are proxies, it's not possible to make a functional program faster than you can do it in VB.
I was just wondering which side of the mentality you were on (I have somewhat of a hypothesis that coders with more mathsy-computer-science background tend to not give as much of a damn about language than good 'ol application coders, just that without some kind of ballpark statistics it's really just speculation).
I believe in the Invisible Pink Unicorn, bless her Invisible Pinkness.
Personally, my preference is for languages that use symbols to describe the syntax. I just find it easier to read. The thing that annoys me most about VB-based languages is that all the syntax is described using reserved words. And sometimes they let you drop the () for function calls. Ignoring cosmetic differences, VB.net is basically equivalent to C#, which itself is only subtly different from Java. You can do all the same stuff in VB.net, but the syntax is just more verbose.
In other news, I got call graph searches working for methods. I'll add support for fields hopefully soon.
Hmmm, definitely personal preference (I'm 100% opposite). But yeah, all .net languages use exactly the same .net libraries which are basically the same as the native Java libraries, so in the end; C# is VB with Java syntax, and Java is C# that can run on different platforms. At a lower level, they are all IL/JIT languages, which makes them pretty much exactly the same to begin with.
I believe in the Invisible Pink Unicorn, bless her Invisible Pinkness.
I just finished call graph searches for fields (in addition to methods) and added proper support for constructors. There might still be a few rough edges and bugs, but I'd say Enigma is feature complete now.
Hopefully I'll have some time tomorrow to bootstrap a Mercurial repo for 1.7.10 mappings and then I can let you guys have at it.
Interesting question... I know the whole mappings are off limits, but since I'm not entirely sure how MCP are actually able to license their mappings in the first place, I have no idea what degree of similarity would be allowed between the enigma mappings and the MCP mappings... Cuuuuuchaz we neeeed you!
Worst case for portability, you can always just "re-deobfuscate" your target code using the different mappings anyway, and I'm sure it wouldn't be thaaaat hard to automate this in some way (*cough* gradle)
I believe in the Invisible Pink Unicorn, bless her Invisible Pinkness.
The MCP mappings are released under a restrictive license that prohibits other projects from using the mappings. I've tried to negotiate with the MCP project maintainers (eg Searge), but they don't return my messages in any timely manner. I'm sure they're just too busy.
Minecraft always speaks the language of obfuscated classes, so we should still be portable.
They don't hold a patent on deobfuscating Minecraft code, just a copyright on their mappings. As long as our mappings are distinguishable from theirs and it's obvious that we didn't just copy them, we should be fine.
That's a really cool idea. There's nothing stopping people from using Enigma to deobfuscate Minecraft 1.6.4 or other mods. I'm going to focus my efforts on 1.7.10 or 1.8.x though.
You can download the standalone jar file here:
https://bitbucket.org/cuchaz/enigma/downloads
Just run the jar file (i.e. java -jar theJar.jar) and hopefully the UI should be pretty self-explanatory. I'll eventually write up a wiki article with some kind of howto for using Enigma, but for now you guys are on your own. =P
If you run into any problems using Enigma (and there will be bugs - this is a beta), create an issue on the issue tracker:
https://bitbucket.org/cuchaz/enigma/issues?status=new&status=open
Before you dive into deobfuscating anything, please make sure you are coordinating your efforts with other deobfuscators. I've made a Mercurial repo to host mappings for Minecraft jars here:
https://bitbucket.org/cuchaz/minecraft-mappings
I tried to find a way to make the repo writable by anyone, but there doesn't seem to be an option for that. I suppose that could be a security issue. If you want to push to the repo, just send me a request with your BitBucket account name, and I'll give you write access. The goal is to let anyone contribute mappings if they want to.
Before you start a deobfuscating session, make sure you've pulled the latest mappings from the repo. When you're done, merge your changes back into the repo. The file format I've chosen for the mappings is a human-readable line-by-line text format, so hopefully Mercurial will be a useful tool for synchronizing the mappings. We'll see how this works. =)
The mappings are released under a Creative Commons Attribution-ShareAlike 4.0 International license. It basically means you can use the mappings for anything you want. If you distribute copies of the mappings (modified or unmodified), then you have to use the same license. That should be pretty permissive so people can use these mappings for just about anything they want. Just be sure to abide by the terms of the Minecraft EULA.
I should eventually update the OP, but I'm tired. I'll do it later. =P
Happy deobfuscating!
I will have a look tomorrow, I should have a few hours free in the afternoon to start experimentationing!
I believe in the Invisible Pink Unicorn, bless her Invisible Pinkness.
Lol. I'll probably take a while for word to get around. Have fun experimentationing. Let me know if you run into any issues.