Update: The original developer noticed my IL level hacks and made them official in the next Monochrome version (and current private beta), with a configurable and hidden blacklist. Thanks to Piotr Pawlowski (foobar2000/ex official Winamp plugin dev) for this!

The following tutorial shows the very basics of .NET hacking.

This time, a practical real world application is used: modifying IL to self-censor content that is said and received on IRC. This was done by me to help eradicate possible sources of drama in my life (thus saving myself from an early death). Plus it gives people a possible relief from my ranting.

This tutorial will go through the basics of editing a .NET executable on a IL level using code decompilation/recompilation.

First of all, acquire dnSpy. It is a excellent debugger for .NET with extra capabilities for recompilation of CLR code.

The target used is Monochrome : I am well aware its GPL, but its good for a tutorial such as this, plus where is the fun in just recompiling the app?

Secondly, load up Monochrome in dnSpy:

You can see the various namespaces in use by Monochrome, thankfully its not protected. Various .NET based protections will scramble code making it harder to debug such applications, just like Denuvo and VMProtect with native C/C++ apps.

Next will take some time, to find some code that relates to what we want: basically we want to just limit what we can say and what we can receive. I did some looking around and funnily enough there is a C# class called “InputBox” in the code…

Suspiciously, there is some methods in there that look, well, suspicious :). sendinput() looks like a dead giveaway for something, so lets find out….

Press “Start” and click “OK” to start the debugging process.

To debug a class method, simply double click on the method. You can select breakpoints by double clicking the code line in the decompile.

To check if this method is responsible, I just typed into monochrome’s inputbox “test test test”. Instantly, the breakpoint is hit and….

We found our line. Now lets try editing the code of Monochrome so that it filters out what we type according to a filter list. Right click the code listing in dnSpy and click “Edit Class (C#)”

Here we see a decompiled listing of the code in the InputBox class. From here we can do edits to the source code.

Here I added a line so we can use the regular expression namespace and classes in .NET, which could be useful for text filtering.

In the sendInput method, I did some extra code which will be appended. The code basically looks for any mention of keywords in a list that are in the entered text. If they exist, they are rejected, otherwise, the sentences are rejected. Then click “Compile” to recompile the code. You may need to clean up any code errors the recompiler picks up, which are listed in the log.

To test our code injection, we save the module by going to File -> “Save Module”.

Then we just run the debugging process again, with the patched executable to test.

As you can see, the new code is in the executable, now time to test…..

No matter how hard I try, I cannot enter anything with the word “byuu” in it. It is not registered in the log, and thus, never sent.

Next is finding the code responsible for recieving entries in the channel view, ironically there is a class called “ChannelView” with the “addline” entries.

Which seems to fit the format of the text in the main log box shown earlier. Now is just a matter of adding code to filter lines based on content.

To make the job easier, just right click the code and click “Edit Method (C#)”. This will allow editing of just the code relevant for that particular function.

From there….

Make your alterations and then click “Compile”. Don’t forget to save the module again to save your patched code changes.

One thing I wasn’t sure of, is whether dnSpy allows realtime code editing and then rerunning of recompiled code. Feel free to correct me if it can, which will make imo, a great .NET assembly editor even better.



A while back I did some work with GlideN64 to perform noise emulation entirely on the GPU.

I stopped working on it. As usual, certain groups of people said this is due to “people being mean”.

So, today, figured I relook at it and see if I could improve on the implementation as last time and see if I can optimize the current implementation.

The implementation this time around is rather simple:

  • Use one line of GLSL for the actual noise generation
  • Scale the coordinates used for the noise seeding according to N64 resolution *properly*
  • Use prime numbers to seed the PRNG more.

This results in *8* lines of GLSL compared to *183* lines of C++.

The shader is as follows:


Just from a traffic report for the month/week.

  • VBA-M is explained due to my avatars.
  • cs.rin.ru is fine, since I know there is a presence of some people who use Cemu there.
  • Yandex is probably some Russian forum, so, again, fine.
  • 4chan is, as expected.

What I don’t expect nor like is the adfly or zytpirwai links. Personally I wish those would go the heck away since I would rather they link to my blog like Reddit and cs.rin does. I wish there was a way to starve adfly links of oxygen.

Get a decent crosshair:

Read this for moar info. Seriously

Turns out it can make a massive difference. I wish I knew crosshairs were as configurable as this in games. Who knew, right?

Sorry for not shit like coding your emulators or libretro frontends, or EXE/DLL packers, or audio DSP plugins.

Well actually, I am not sorry at all. I like having a life outside programming all the time.

Yes, I buy games with the money I make from work. I am a terrible human being for not making Cemu cracks constantly so Exzap can improve his DRM so in turn it helps his money stream.

Heck, I should go back to playing Bulletstorm and CSGO even if they are deemed shit games…I heard Yooka-Laylee sucks too. Even though I bought it at launch and rebought Bulletstorm even though I did my own GFWL emulator DLL just to play the original Bulletstorm…

So I started to work on something for myself.

Thought I was being productive. Since I wanted to do something for myself and since the idea of something like this looked reasonable and nice:

Then I had a cursory look at 4chan, of all places. Which I should have never done.

Lets get some things straight here. I’ll be using Steam Survey results in my justifications:

  • MSVC2017 can compile for & target XP. Though hardly anyone uses it. Question is though why bother considering the statistics. Stats don’t lie.
  • I could go down to Windows 7, I thought Win8 was reasonable. And no one seems to use Vista anymore. Granted, Windows 7 is a reasonable userbase size.
  • Windows Vista introduced DirectX10, which is on the same feature level as OpenGL 3.3. Considering the userbase using Windows 10 and Windows 7, I wonder why the heck are people complaining about. And catering for Direct3D9/OGL 1.5 is hardly worth it at all these days, considering the absence of users still on Windows XP. And most libretro cores require OpenGL 3.3 core support anyway, making OpenGL 3.3 support mandatory.

And since it:

I hardly care if it works on others or not. Its my own software. Don’t like it, you are free to do what I did and write something else. The libretro API ain’t that hard.

This now somewhat infamous rant sums it up:

Fuck these people.





What happened:

  • Acquired a 3DS again for homebrew development.          
  • Did some work on foo_dsp_effect. GUIs for changing effect parameters are now fully non modal and accessible in two clicks or a keyboard button press. Also, the pitch effects have been rewritten to have smooth changes instead of the clunky effects in the past. This is coming in a future WIP, and I have no release date set.
  • While noticing members saying garbage about a friend of mine……noticed the following:    
  • Well, I appreciate the sentiment after about 9 years I guess. That’s a rather nice thing to say, that I can be talented if I put my whole mind to it. Definitely changes my whole perspective of what I think about byuu :). Which leaves me wondering what to think about Kakashi….

In continuing the series, here’s what I seen and done so far.

  • Finished my documentation of the Cemu Patreon DRM system in its current form. This was done in the hope of showing weaknesses and thus showing potential improvements that can be made in future. However, it seemed none of the advice was taken, so I took the next logical step and reversed engineered the serial number scheme, while doing no modifications of the executable at all. This culminated in a keyfile generator+loader which works on past and present versions of Cemu. The results of the research are on my Github as well as documented in a blog post here.
  • Finalized my Odroid+Android development setup. The Odroid XU4 looks nice in its case, I find it quite cute.
  • AVs are proven to be snakeoil. I knew this for ages from false positives with what I program, glad that its now been made public by other people that AVs can be in most cases pointless.
  • Dirt 4 is coming out. Looks rather nice, cannot wait. Absolutely loved Dirt 2, though the GFWL DRM was a pain, so a xlive.dll proxy took care of that, such as for Bulletstorm too. Questioning whether to get Bulletstorm’s remaster too.

Starting to get very annoyed with people who don’t start thinking critically for themselves, to try to work things out for themselves instead of just blindly having faith in something. Same goes for programming, don’t like something? Do it your own way. Nothing’s stopping you, nothing is too hard, skills can be learnt, etc.

I swear, each day, reddit is becoming less and less appealing as a discussion medium. At least with 4chan you know where people stand.

Just wondering whether this is potentially something or will it be another thing I have to add in myself in a unofficial patch because:

  • byuu is too fucking incompetant to have a single inkling of compression (doesn’t know math)
  • byuu is too fucking stubborn to accept patches that don’t fit his code standards.
  • byuu refuses to accept leeway on his formats (most egregious since he cannot handle anyone doing any improvements to his formats, no matter who the person is)
  • byuu refuses to use any outside libraries and refuses to acknowledge anything thats not made by him (public domain mp3/vorbis/flac decoders exist, and WavPack has a BSD licensed decoder)
  • byuu always makes false statements and thus he is too problematic to work with as a person (as shown by him claiming I false flagged him on Stormfront.)

For another list of byuu’s flaws visit here.

To be quite honest, that list I linked seems pretty consistent with my experiences so I feel somewhat vindicated.

I have no hesitation if this falls through to just maintain a patch myself for people to use as the case may be.

It seems though this to be case, since the Snes9x people are reluctant to step away with byuu on the format. Maybe I should hack bzsnes-libretro to support such a format.

Reddit in a nutshell:

Ungrateful people, always telling you how to do things, how you should code, if you should report GPL violations to people, fuck that. And why should I even care about reddit as a community? Its clear the vast majority can be just as toxic as I, and I can be just as toxic in cases.

If people don’t like how I operate, they can fuck a bear trap, sincerely. Hopefully they can get cut on it.  And no, I will not stop this blog. It is a diary, and I have every right to write how I like here. Sure, people might not appreciate it but who cares, its not their place to tell me how to do things.

Not malicious narcissism, just out of boredom. I document things how I see them, not how others think I should see them, thats how I’ve always operated. Again, don’t like it? Standard disclaimer applies.

Because I have no intentions of being anyone’s friend. It is clear that in the vast majority of cases, GPL violations are done by people that truly don’t give a fuck. Just look at the Android store. And again, thats not how I operate. I have no obligation to help anyone, only you people are saying that.