1 2
5 6
Editor, Active player (297)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
mudlord wrote:
http://crackmes.us/read.py?id=574
Windows EXE. Meh, I'll pass. In any case, nice job finding an executable packer that I do not have an extractor program for. EDIT: Also, you have apparently used a bignum library. Which may well mean that your password hash system may be impossible to crack. For future reference, does it count if one just edits the program to accept any password?
Joined: 3/30/2007
Posts: 44
In any case, nice job finding an executable packer that I do not have an extractor program for.
Actually, its my own executable packer. :) Current weakness is no DLL support but I do intend of fixing that.
EDIT: Also, you have apparently used a bignum library. Which may well mean that your password hash system may be impossible to crack.
Wrong. It does have flaws. I intentionally used a low bitsize to make bignums factorizable. ;) The intent, as one person did before, is a full cryptographic break (which means description of algorithm + keygen). Patching ain't allowed.
Joined: 3/30/2007
Posts: 44
Since no one here solved it, someone else did: http://hepl3r.0777.ir/Tuts/KeygeningMudlordsKGNME1.rar Requires experience in ASM.
Emulator Coder
Joined: 3/9/2004
Posts: 4588
Location: In his lab studying psychology to find new ways to torture TASers and forumers
Designing C++ functions to write/save to any storage mechanism (Plus overview of different kinds of function pointer/object techniques).
Warning: Opinions expressed by Nach or others in this post do not necessarily reflect the views, opinions, or position of Nach himself on the matter(s) being discussed therein.
Banned User
Joined: 3/10/2004
Posts: 7698
Location: Finland
One C++11 feature that I'm really liking is variadic templates. They make many things much easier and type-safe. I have actually got to use them in actual production code, which is nice. Basically what variadic templates allow is to create functions (or classes) that take any amount of parameters. The difference with C functions (which use the "..." operator as parameter) is that the amount of parameters is determined at compile time, and you can implement full type checking (so that if any of the parameters is of an unsupported type, you will get a compile error rather than the program crashing when run, giving garbage as result, or even, in the best case scenarios, getting a runtime error.) This allows for quite many things that might be immediately obvious. For example, let's assume that you have a class that takes an integral template parameter (a typical example would be an array class of some sorts, but it doesn't have to be exactly that). That is, something like:
Language: cpp

template<typename Value_t, unsigned kSize> class MyClass { // something here };
Now, wouldn't it be nice if you were able to write a member function for that class that takes exactly kSize parameters of type Value_t? Since both are known at compile time, that ought to be theoretically possible. C++98, however, provides no tools to achieve this. However, with variadic templates you can. You can do it eg. like this:
Language: cpp

template<typename Value_t, unsigned kSize> class MyClass { public: template<typename... Parameters> void foo(const Parameters&... parameters) { static_assert(sizeof...(Parameters) == kSize, "Wrong amount of parameters"); // handle 'parameters' here } };
Now if you have, for example, an object of type "MyClass<int, 5>", then you can call its 'foo()' function only with exactly 5 values, or else you get a compile-time error. (The nice thing about this is that other possibilities are also available. For example suppose you want the function to take at most kSize parameters rather than exactly that amount. It's easy enough to change the '==' check to a '<=' one. Likewise you could check that there's at least one parameter, and so on.) "But wait", you will be asking (or probably not, unless you are really into C++), "that doesn't actually check that the types of the parameters is right, only that their amount is." That's where the "handle 'parameters' here" comes into play. There are actually many ways in which the parameter pack can be handled. There's no direct way of just writing a loop that goes through the parameters, but there are several other options. You can handle then recursively, like this:
Language: cpp

void handleParameters() {} template<typename... Rest> void handleParameters(const Value_t& parameter, const Rest&... rest) { // handle 'parameter' here handleParameters(rest...); }
You can then make a "handleParameters(parameters);" call from inside the 'foo()' function. The type checking is done because if there's no function to handle one of the types, you'll get a compiler error. A nice thing about this is that you can actually support several different types of parameters, even if they are incompatible. To do this, you can make the above function take a templatized type as its first parameter, and then have overloads of a 'handleParameter()' function for each supported type, which the function above calls. You can write an overload for each supported type. If copying the parameters is expected to be efficient, or if efficiency is a complete non-issue, then there's a simpler trick that can be used to handle those parameters. And that's by creating an array like this:
Language: cpp

template<typename... Parameters> void foo(const Parameters&... parameters) { static_assert(sizeof...(Parameters) == kSize, "Wrong amount of parameters"); Value_t buffer[] = { parameters... }; // Now we can traverse 'buffer' here }
The parameter pack expansion is surprisingly complex. It is, in fact, possible to write code like this:
Language: cpp

template<typename... Coordinates> void foo(const Coordinates&... coordinates) { Node* nodes[] = { createNode(this, coordinates, 1, 0)... }; // ... }
(where 'createNode()' is simply a regular function that takes some regular parameters.) What happens here is that the entire subexpression is expanded for every parameter (and effectively separated by parameter-commas.)
arflech
He/Him
Joined: 5/3/2008
Posts: 1120
mudlord wrote:
Since no one here solved it, someone else did: http://hepl3r.0777.ir/Tuts/KeygeningMudlordsKGNME1.rar Requires experience in ASM.
I can't download it.
i imgur com/QiCaaH8 png
Editor, Skilled player (1536)
Joined: 7/9/2010
Posts: 1319
I'm getting a bit more experienced with programming. So I wrote a simple Arkanoid smiliar game. Note: This was done almost half a year ago. http://www.youtube.com/watch?v=zlBUc1bSzeU Here's the scoure code: https://docs.google.com/file/d/0Bzbs4SiuHTyWN2FrdDZTV0FveEk/edit I had some trouble with programming an array for the blocks. I didn't got it to work with an array, the ball passes through the blocks and nothing happened. Also the code can be written to run faster in some places. Anyway I'm quite happy with my first game.
Favorite animal: STOCK Gt(ROSA)26Sortm1.1(rtTA,EGFP)Nagy Grm7Tg(SMN2)89Ahmb Smn1tm1Msd Tg(SMN2*delta7)4299Ahmb Tg(tetO-SMN2,-luc)#aAhmb/J YouTube Twitch
1 2
5 6