Performs advanced targeted transformations on method instructions which obfuscate control flow and make compiler constructs hard to infer and decompile. Rummage will never insert unnecessary branches (which can slow down code), but instead reorders code blocks and replaces instruction sequences with equivalents. In many cases Rummage eliminates redundancy and local variables.
for (int i = 0; i < count; i++)
object arg_01_0 = 0;
object expr_01 = arg_01_0;
if (expr_01 >= count)
arg_01_0 = expr_01 + 1;
Normally the decompiler would have been able to deduce the for loop structure, but after Rummage it fails to do so, and also chooses the wrong type for the locals (so its output wouldn't compile). Moreover, the obfuscated IL has no locals at all (the i got eliminated completely):
|Before (IL)||After (IL)|
.locals init (
 int32 i
Observe that while the decompiled code looks longer than the original, the actual underlying IL code was significantly shortened by Rummage.