Log in

View Full Version : Cracking XXXXXXXX module


LOPAN
July 31st, 2011, 21:25
I'm not sure if this is a newbie question. But, at the risk of posting it at the advanced forum and have it moved here, I'm posting it here.

I haven't found any material on XXXXXXXXXXXX, so I was wondering if someone here has some knowledge on this subject.

The problem is that there lot of referencing to the serial number you entered along the program, when you have already waded through lots and lots of serial calculation, then comes more and more, I think many of these are somewhat bogus. But it is too overwhelming for a human being to analyze all of it.

Any help would be appreciated. Thanks.

Woodmann
August 1st, 2011, 21:07
Ugggggggggg...........

Wrong question Clyde.
You will have to wade through it.

Now rethink what it is you need besides a crack and ask again.
And dont use target specific names unless YOU want to pay the lawyers.

And start a new thread. This one will be deleted in 24 hours.

Woodmann

LOPAN
August 1st, 2011, 21:43
I am not asking for a "crack" of any kind. The protection of this software is complex for my actual reversing skills. So, I was wondering if someone around here got some papers on reversing this as I have found none.

I would like to learn how to proceed on a situation like this. But I will have to put this aside, as this seems to be the largest community and I couldn't find help.

Thanks anyway.

Aimless
August 2nd, 2011, 04:18
Hello LOPAN,

First of all, I see that you are registered on Feb 2010. A YEAR ago. Minimum. At least by now, you should know that it is imperative on this board, to tell us what you have done about it.

Yes, it is appreciated that you have gone so far as to find out that serial number is being called 'n' times, but we need code, snippets, tools and your thoughts on this process.

Having said that, let this not be a discouragement to you. Reversing is not a skill easily acquired, and if you keep on giving up, just because you did not get an answer, or you felt dissed, pretty soon you'll run out of steam. Don't give up.

Now, to your problem:

The best thing here, is to think like a programmer. You see, the serial number verification takes (assume so) around 20 or so lines (in whatever language the programmer deems fit). Now, IF the serial number verification has to be called EVERYTIME a menu item is selected (an example, that is), this means, for EVERY MENU ITEM, the programmer will have to include 20 or so lines.

Programmers are not taught to code that way. Instead they will follow BEST PRACTICES, and enter the serial number verification in a function. This function, may be invoked a ZILLION times from THOUSANDS of places in the program. But the verification function itself, is just one.

Here is an example:

Print()
{
... blah blah lots of lines;
Serialverify(xxx.xxx);
...blah blah lots of lines;
}

ShowPrettyGraphics()
{
... blah blah lots of lines;
Serialverify(xxx.xxx);
...blah blah lots of lines;
}

ConnectForUpdate()
{
... blah blah lots of lines;
Serialverify(xxx.xxx);
...blah blah lots of lines;
}

HaveSex() // whatever !
{
... blah blah lots of lines;
Serialverify(xxx.xxx);
...blah blah lots of lines;
}

The point here is, trying to correct the jmp/jnz/jz/flags for EACH of the function, will make you old before your time. Instead, the attack point is not:

Print(),
ShowPrettyGraphics()
ConnectForUpdate()
HaveSex()

Instead, the correct way is to open the function:

Serialverify(xxx.xxx);
and ensure that it returns 1/0 per the response required!

This ensures that EVEN if you have missed out another zillion routines where the verification is called, the routine itself will always pass that its registered.

The idea is, don't try and crack all instances of where this routine is called. Instead, delve INSIDE the verification routine, and return what is expected.

Of course, some programmers are aware so they will try to:

1. Hide this function (some apps do it VERY well)
2. Make junk calls to make you give up in frustration
3. Sometimes, very rarely, but it happens, that the programmer creates 2-3 such routines: Serialverify(xxx,xxx), Serialverify_1(xxx,xxx) and Serialverify_2(xxx,xxx). In this case, he randomly allocates the verification routines to different functions. So, if you have patched the serial verification routine and it still does not work, assume that there is another check that you need to patch. And while this seems like too much work, patching 3 functions is better than patching a zillion.

If, however, this is NOT what the software is doing, then you need to tell us WHAT you are seeing (see? that is why we ask that you tell us your problem specifically)

Best of luck with your cracking. I'd also suggest IDA 6.1 and MyNav python plugin as a first lookover solution. Helps you tone down the noise. It actually acts as a very rough coverage profiler.

Finally, learn to rephrase the questions in a more specific manner. That'll get you a lot of responses, rather than angry outbursts. (I mean, if you think Woody was tough, you're lucky you didn't get JMI !!! ) :O

Let us know how it goes. We *would* really like to help you.

Have Phun

Woodmann
August 2nd, 2011, 22:10
Ahhhhh...........

One of my main people has saved you.
Take all of his words to heart. I am not here to be a prick,
just kick you in the ass and get you on the right track.

We're cool. Drop it and continue on with your target.

Woodmann

LOPAN
August 4th, 2011, 21:12
I wasn't expecting such an attentive answer, thanks Aimless.

That seems to be exactly what the protection is doing, calling the serial verification from a lot of places, there is also a couple or routines that check the serial in different ways (in different modules, using LUA scripting).

1. Hide this function (some apps do it VERY well)
Yes, I went through hell to find the serial manipulation.

2. Make junk calls to make you give up in frustration
There seems to be some bogus code too.

3. Sometimes, very rarely, but it happens, that the programmer creates 2-3 such routines: Serialverify(xxx,xxx), Serialverify_1(xxx,xxx) and Serialverify_2(xxx,xxx). In this case, he randomly allocates the verification routines to different functions. So, if you have patched the serial verification routine and it still does not work, assume that there is another check that you need to patch. And while this seems like too much work, patching 3 functions is better than patching a zillion.

I'm not sure if the other functions are just bogus or they actually participate in the serial calculation process, like this:

Serialverify_1(xxx,xxx) -> return some expected code 1, call Serialverify_2(xxx,xxx)

Serialverify_2(xxx,xxx) -> if it is expected code 1, proceed and call Serialverify_3(xxx,xxx) with expected code 2

Serialverify_3(xxx,xxx) -> if it is expected code 2, proceed and so on...

ps.: between each Serialverify calls, there is a lot of BS.


And I don't mind being dissed at all, it's part of life Woodmann can dis anyone he wants to here, he is the owner of this joint.

Thanks guys

Woodmann
August 4th, 2011, 22:32
Howdy,

No disrespect meant at all.

I want people who believe I am wrong to give
them the kick in the ass, to be motivated to
prove me wrong.

I want you to be the best you can be.

Woodmann

Oh ya, as for the other stuff.........
Where did that shit go?

LOPAN
August 5th, 2011, 20:19
Hey, no offense taken.

On the contrary, you got a nice resourceful community which I (and many) have learnt much from. We have to thank you.

It's just I'm working on this tough protection, which so far, is more different and complex than everything I've seen. Much more professional.

I'll keep working on this and report back later as I've learnt more from the protection behavior.

By the way, a new version of Olly just came out these days

Thanks