
Originally Posted by
Shelwien
http://.../
sub_405AC0() is the main encoding function,
sub_401C50() is the model init function.
(dbg.log after encoding contains the actually compressed bytes -
the filtering result can be observed).
I only decompiled the source, but didn't really look at the
algorithm (maybe toffer would).
But overall it seems far from efficient - especially its rangecoder
with 31-bit registers and extra shifts (seems like Schindler's original
or a simple derivative).
Though I don't know what does Christian thinks about it and from my point of view its a questionable ethics here, anyway, Shelwien, nicely done!
I've made a couple of tests on enwik8 at 5 level.
Code:
CCM v1.30c = 71.709
deCCM_v0 = 211.416
deccm_v0_sub_405AC0 = 211.621
deCCM_v1 = 202.411
Obviously, decompiled version almost 3 times slower. More exactly speaking 2.82 times. All output files are identical.
This fact and some other things bring some questions from me. Sorry if I dumb here 
1.) Why decompiled versions are too much slower than originals? I remember that some time ago one dude called Z0MbiE ripped NRV engine from UPX and it was too slow too.
2.) I don't completely understand how its implemented. Decompiled ccm.exe is almost identical to original - there are only 3 differences in it. Two of them are in the header and last one is just changed imported DLL name. Original version imports KERNEL32.dll and decompiled one imports 1.dll. So what is that 1.dll file ? Where it comes from and what does it contain ?