Fixing saevions deobfuscator is relatively easy to do, adding to it a piece of cake. If you can fix it, you should be entitled to a ‘deob’, spoonfeeding should be kept to a minimum.
That said, deobs are a great way of learning the client, if you are willing to put in the effort. I recall when waffendennis’ site was the only place to obtain one (if you had no idea how to do it yourself), a setup like that would be good nowadays, though with extra features.
total deobfuscation is almost impossible, we all know that, however it may be possible to gain an extremely readable client source.
opaque predicates are still able to be removed using saevions method.
exception tracing can be removed using using saevion’s method, though using a better regex
irrational shifting is easy to fix
the logical not in equality tests is also easy to fix, however it should be done in a method similar to that of the arithmetic obfuscation
arithmetic obfuscation seems easy to remove (i say probably because i havent done it). one would construct an abstract syntax tree traverse it in a manner as to standardise the operations (eg, constants go on the right) and simplify where appropriate
definition ordering is another method of obfuscation that i have noticed, this could be reversed by splitting bytecode into groups that represent a line of code, or after the source code has been produced
if statement inversion exists throughout the client. whether this is for an optimisation or an obfuscation technique is arguable, though when decompiled the nested ifs are somewhat hard to read. this might be fixed by constructing a control flow graph and negating the conditional branches
dummy arguments might be removed (if you wish to have a readable source, obviously not in a live client). this might be achieved by tracing the use of the argument through the method, or seeing values passed to the method as the argument regularly fall in or out of the allowable range, or both methods, or more… there are many ways
class fracturing is somewhat difficult, you might lump everything into one class, or you might identify methods and group them (though you might as well make a renamer while you are at it)
i dont know for a fact, but it looks a little suspicious, some methods appear as though they may have once been instance methods, if this is the case, it would be relatively straightforward to revert this
renaming would be a nice feature to have, though it would be assumed that whomever wrote it knows what they are talking about; so many “pioneers” have created mnemonics for classes that are often misleading or just bad
i am almost certain that i have missed something, feel free to add or correct me. perhaps there should be another thread for discussion of reversing obfuscation?