Nov 22, 2008

The Art of the Reverse Engineering

Although I have been really keen on technologies, more precisely all the naughty programming behind any software, I have never tried to reverse engineer, or crack, a program. It's not because of my ethics: just cracking other people's software have never interested me.

But yesterday, I downloaded a trial version of a small Windows application, and it said I can only execute it only a certain number of times. Oh boy, that really got me curious: I have seen a number of "trywares" which allows you to use them for a certain period, but not for certain number of executions. I always thought time-limited software can easily check current time against first install time, or something similar to that, to determine whether the trial period is expired or not. But to make software with limited number of executions, it should keep the execution count somewhere, I figured. And the information should not be easily visible. Otherwise, anyone can easily delete or modify the information to unlock the full featureset. So, I decided to find out what smart things this program is doing with the info. (By the way, I won't reveal the name of application here since I don't want promote anyone to crack this program, which is not just illegal, but also making the creator unhappy, or out of business)

First, I kept executing and exiting the program, and it really stopped working after the specified numbers! OMG!

Second, I tried to look for any new file, which was written during my crazy launch-and-kill session. I was not able to find any suspicious files.

Third, I tried to find some registry entries which the software might have written There were some registry entries associated with this application, but didn't see anything that can be deciphered as a count number.

So, I was stuck, but i was still curious. And I'm always a curiosity-driven programmer. I like to find out answer when it can be found with logical thinking. That's when I finally decided to reverse engineer the application. And after 4-hour wrestling training with disassemblers, I was managed to find the answer I was looking for, how to store the count in a secure manner, and I was not really looking for, all the thousands of valid licence keys the creator encrypted and embedded in the executable file. And again, I'm not gonna disclose any license key here because that was not my intention.

Through this reverse engineering, I learned these things:
  • how to set usage limit on sharewares, which might become useful if I ever decide to release a shareware utility.
  • embedding valid licence keys as encrypted string might not be a really good idea, but I'm not sure if there is any better way without using Internet validation.
  • reverse engineering is pretty darn easy if you know how to read all the low-level programming languages.
And thanks god! Bill C-61 has not been passed yet. I heard this kind of activity is also copyright breach under that bill, which is one of the biggest jokes I have ever heard of. Although I don't think I would do it again, this kind of practice should not be illegalized when the intention is purely on learning.

Hmmm, but I'm not sure if what I heard from other people is really valid because often people without legal education tend to overreact. Maybe I should start to read the bill to figure out what exactly the bill wants to achieve. Oh, did I tell you I also have a LL.B degree?

Nov 19, 2008

You Suck

I respect people's honesty. And my definition of honesty is speaking up the truth in a super straight manner even if it's brutally harsh to someone. I'm kinda known for being bluntly honest, especially at the school I'm teaching game programming students.

I always say good things about other good teachers, and don't hesitate to bitch about other horrible teachers. And as I always say, one good thing about working at the Art Institute of Vancouver is they don't have any contract term or condition which prevents me from commenting on other instructors' competencies. Woohoo, my mouth is not zipped here. How wonderful is it?

But teachers are not someone I want to talk about here: actually it's about students, well certain students. I have some students who, in my brutally honest opinion, won't be able to get a job in this industry in million years, if not trillion years. I always want to tell them the truth so that they can switch to a right career for them before wasting 10 to 20 thousand dollars of money as well as 2 years of lifetime at this school.

But here is one funny thing. Most people are not really good at accepting criticism. I'm no exception, either: It takes time for me to accept criticism unless I ask for their criticisms first. Knowing that, I don't really tell them "You Suck Superly Duperly" unless they ask my opinion on their bright future in this industry. So how often do you think they come to me and ask? NEVER... never from those suckers. Only students with at least decent, thus employable, skills ask me to evaluate himself. I believe their intention is to get better and better. Then why those suckers never try to get my "invaluable" opinion? This is my theory... I think they already know they suck, but they don't wanna accept it, so they just avoid, or deny, it. You know when people are afraid of something, they tend to fall into the realm of ultimate freesbee...... I mean, ultimate denial...

But you know what? If you don't accept it, you won't get better... you won't be out of it forever...

I'm always ready to give you my two cents. Just ask me a simple question: "Do you think I can get a job in the gaming industry?"

Nov 11, 2008

I Am Blind Renderer

Okay.  Since it's my first post, I figured it would make the most sense to explain why I picked up the name, Blind Renderer.

Sadly, it's my identity.

First, I'm a renderer, which is another name of graphics programmer(in the gaming industry), but for some reason, I like to be called as a renderer than graphics programmer.  So there goes the first(or second) bit.

Second, I am really blind.... Well sorta... I'm actually colour blind.  People do ask me which colour I cannot see.  Sorry, but I can see all the colours.  Actually I have a mild form of colour blindness, which is called Anormalous Trichromacy, I believe.  Accordnig to Wikipedia:

Anomalous trichromacy is a common type of inherited color vision deficiency, occurring when one of the three cone pigments is altered in its spectral sensitivity. This results in an impairment, rather than loss, of trichromacy (normal three-dimensional color vision).
  • Protanomaly is a mild color vision defect in which an altered spectral sensitivity of red retinal receptors (closer to green receptor response) results in poor red-green hue discrimination. It is hereditary, sex-linked, and present in 1% of all males. It is often passed from mother to child.
  • Deuteranomaly, caused by a similar shift in the green retinal receptors, is by far the most common type of color vision deficiency, mildly affecting red-green hue discrimination in 5% of all males. It is hereditary and sex-linked.
  • Tritanomaly is a rare, hereditary color vision deficiency affecting blue-yellow hue discrimination.

When I say, "I'm colour blind.  And I'm a renderer", people thinks I am lying because they think colour blinds cannot do the work.  But as I said above, I am not complete colour blind, so I can do my job (and I love this job) although having weaker colour sense is a bit unfortunate.  And trust me, I have even seen a colour-blind environment artist lead who's kicking ass in his job. (well minus texture works)

So long story short, I'm a colour blind and a renderer, which makes me Blind Renderer.  Such a cool nickname, eh?