3.90 star(s) 39 Votes

Big Daddy

Member
Jul 17, 2017
404
929
I don't spoon-feed, just go online and learn about Lambdas in Python. I will say this, don't bother with parenthesis. Habit from other languages, so I can give that hint.

No idea. There are essentially “five” kinds of protection currently in the game. An anti-tamper, which overwrites files and is illegal in the US (considered sabotage, has already gone to court and been ruled on), password, a call-home, and the requirement of an actual external pack to even have the resources to use in-game (which is downloaded via password, so it'll always need leaking), and finally, a “patron build”.

Yeah, someone did a bad job with their own cracking to try to remove the current DRM. Just wait until someone releases a two-file update to it to properly handle it. (I'm trying to teach, not spoon-feed, so don't ask me.)

Edit: I can't believe this needs to be said, but it should be obvious based on this kind of destructive DRM that you should crack it by *not* running the game until you've decompiled all files and gone through it all. Keep backups, if you must. Or use a snapshot-VM. *shrug*
To clarify my question here: I am familiar with lambdas in python, but have only mainly used them in the context of map and reduce. My question is what advantage a lambda would have over using a standard function overwrite in this context. As you mentioned, a fairly trivial crack can be made by including the proper text file and overwriting the password check. However, this approach still has is flaws, in that you still need to pull the external package from the developer's website with the password for each update (simply bypassing the password does not give you access to the external package). Currently the code to the external package can be brute forced, but this could easily be changed and therefore isn't a reliable method of pulling the package.

Would a lambda function achieve anything substantially different here?

As for the extras menu, inputting the password and pulling the external package does nothing for this, and therefore would likely require the extras_patch to be leaked to unlock. It looks like the extras_patch isn't just a simple key, but actually contains some of the pertinent content to make it work, but I could be mistaken on this.
 

kurailxix

Member
Modder
Oct 21, 2018
171
635
As for the extras menu, inputting the password and pulling the external package does nothing for this, and therefore would likely require the extras_patch to be leaked to unlock. It looks like the extras_patch isn't just a simple key, but actually contains some of the pertinent content to make it work, but I could be mistaken on this.
So theres a extras menu, which has options like scene gallery, CG gallery, staff room or whatever
but with the crack it was crashing before even giving options
normally its fine till you try and open a gallery and get a requires extras patch message

and yeah the extras patch has code, its not a key
if you mess with variables and tell the game you have the patch
it crashes when you try and access a gallery
 

BupoTiling03-Retired

Well-Known Member
Modder
Jul 21, 2018
1,341
1,892
To clarify my question here: I am familiar with lambdas in python, but have only mainly used them in the context of map and reduce. My question is what advantage a lambda would have over using a standard function overwrite in this context. As you mentioned, a fairly trivial crack can be made by including the proper text file and overwriting the password check. However, this approach still has is flaws, in that you still need to pull the external package from the developer's website with the password for each update (simply bypassing the password does not give you access to the external package). Currently the code to the external package can be brute forced, but this could easily be changed and therefore isn't a reliable method of pulling the package.

Would a lambda function achieve anything substantially different here?

As for the extras menu, inputting the password and pulling the external package does nothing for this, and therefore would likely require the extras_patch to be leaked to unlock. It looks like the extras_patch isn't just a simple key, but actually contains some of the pertinent content to make it work, but I could be mistaken on this.
The lambda I used is just a simple one-line replacement for a pre-existing function. Overwrite, keeps files simple, makes it much easier to maintain cracks. When I said text file, I wasn't talking about a Ren'Py or Python script, the text file is literally a .txt to take a different bool path. ;) The password only enables use and a little more, you still need the Extra's Pack.
So theres a extras menu, which has options like scene gallery, CG gallery, staff room or whatever
but with the crack it was crashing before even giving options
normally its fine till you try and open a gallery and get a requires extras patch message

and yeah the extras patch has code, its not a key
if you mess with variables and tell the game you have the patch
it crashes when you try and access a gallery
That's a different, incomplete crack, by someone else.
 

Big Daddy

Member
Jul 17, 2017
404
929
The lambda I used is just a simple one-line replacement for a pre-existing function. Overwrite, keeps files simple, makes it much easier to maintain cracks. When I said text file, I wasn't talking about a Ren'Py or Python script, the text file is literally a .txt to take a different bool path. ;) The password only enables use and a little more, you still need the Extra's Pack.

That's a different, incomplete crack, by someone else.
For those curious, I believe what BupoTiling is referring to by using a lambda function here, is this:
Code:
function_to_overwrite = lambda: True
This sets the overwritten function to always return true, and is equivalent to using a standard def function declaration to overwrite a function:
Code:
def function_to_overwrite (): return True
Both are viable ways of doing this, but note that the lambda style according to the PEP 8 style guide for Python code. Just stick to using def to overwrite a function in this case.

As for the crack, as BupoTiling described, the password protection and anti-tamper can be bypassed in a fairly succinct manner. Here's a crack for achieving that while also enabling dev mode and console, and includes the external scripts. Just extract it in the main folder (where the game's .exe is).

Thanks to the work of Gnadudu and kurailxix for providing their cracks and providing context regarding what the code is doing, and BupoTiling for providing an outline of a simpler bypass.

Note: this crack will not unlock the extras menu, as the extras menu isn't tied to the password protection. The extras menu is it's own file, and thus would need to be leaked separately from the game to unlock those features.
 
Apr 29, 2021
8
14
A gentle reminder the dev is good enough to make a public version of the game, with no omissions. It's just an update behind the current release. So if you are willing to be patient, there is no need to perform convoluted manoeuvres applying cracks.

Good luck to the devs earning a living making enjoyable content. Cracking efforts are a testament to their product.

I acknowledge the thrill in breaking the code, if I had your skills I'd use them assisting the likes of bellingcat. Hone your skills the world has need of your services :)

Have fun people.
 

BupoTiling03-Retired

Well-Known Member
Modder
Jul 21, 2018
1,341
1,892
Code:
def function_to_overwrite (): return True
Both are viable ways of doing this, but note that the lambda style according to the PEP 8 style guide for Python code. Just stick to using def to overwrite a function in this case.

As for the crack, as BupoTiling described, the password protection and anti-tamper can be bypassed in a fairly succinct manner. Here's a crack for achieving that while also enabling dev mode and console, and includes the external scripts. Just extract it in the main folder (where the game's .exe is).

Thanks to the work of Gnadudu and kurailxix for providing their cracks and providing context regarding what the code is doing, and BupoTiling for providing an outline of a simpler bypass.

Note: this crack will not unlock the extras menu, as the extras menu isn't tied to the password protection. The extras menu is it's own file, and thus would need to be leaked separately from the game to unlock those features.
Edit: Missed one paragraph, correcting:Try again. :) You can't redefine a function with the same name, so you can either define a new one and simply assign the old one to it (more than one line) or you can one-line lambda it, cleaner, easier to read. Just because one shitty language assumes something as bad practice does not mean it is. There's an entire planet of languages that disagree. Also, Extra's is tied to passwords, requiring one to work (although a simple bypass works). Edit: You should pay more attention to init order and look at what the author has done. ;) Edit: In fact, they're bending Ren'Py rules (-999 to 999).
Game discussion thread
Anti-DRM programming thread
Barely. Truly, barely. :p
 
Last edited:

BupoTiling03-Retired

Well-Known Member
Modder
Jul 21, 2018
1,341
1,892
A gentle reminder the dev is good enough to make a public version of the game, with no omissions. It's just an update behind the current release. So if you are willing to be patient, there is no need to perform convoluted manoeuvres applying cracks.

Good luck to the devs earning a living making enjoyable content. Cracking efforts are a testament to their product.
Cracking isn't always a testament to products in a positive manner, it can definitely be negative. :) I've seen some horrible, buggy DRMs in my life. The solution I gave someone wasn't convoluted at all, very clean. It's an open-thread, so you've got newcomers. All good, more than learn, stronger cracking scene.
 

Big Daddy

Member
Jul 17, 2017
404
929
Edit: Missed one paragraph, correcting:Try again. :) You can't redefine a function with the same name, so you can either define a new one and simply assign the old one to it (more than one line) or you can one-line lambda it, cleaner, easier to read. Just because one shitty language assumes something as bad practice does not mean it is. There's an entire planet of languages that disagree. Also, Extra's is tied to passwords, requiring one to work (although a simple bypass works). Edit: You should pay more attention to init order and look at what the author has done. ;) Edit: In fact, they're bending Ren'Py rules (-999 to 999).

Barely. Truly, barely. :p
"So you can either define a new one and simply assign the old one to it (more than one line)"
Yes, and this achieves the goal of overwriting the function, and in this case it is done in one line. You can run the patch to confirm this. So once again I ask, is there something functionally different that a lambda would do for you here? Did I misunderstand your interpretation?

"one shitty language" - This is the language we are programming in, and reflects how python uses lambdas. I understand how other languages view things differently, but they also implement lambdas differently (I wouldn't consider Python a true functional language, though the framework exists if you want to use it in that way, and it is moving more and more in that direction). The style guideline is sensible here.

Another note: One liners /= readable/clean/maintainable code. Pursuing one liners purely for their one sake is almost always a bad idea (and this is coming from a guy who has been harangued for abusing ternaries), but if you are the only one maintaining your code base, prioritize as you want. In cases where one liners lead to cleaner, more maintainable code, use them, but I'm not convinced of that here frankly.

"Extra's is tied to passwords" - yep but wanted to emphasize to folks that this bypass would not in itself enable extras, the extras patch is still required

" You should pay more attention to init order and look at what the author has done. ;) Edit: In fact, they're bending Ren'Py rules (-999 to 999). " - I'm very aware of what the author has done with Init orders, hence why I also had to bend the rules in my patch.
 

BupoTiling03-Retired

Well-Known Member
Modder
Jul 21, 2018
1,341
1,892
"So you can either define a new one and simply assign the old one to it (more than one line)"
Yes, and this achieves the goal of overwriting the function, and in this case it is done in one line. You can run the patch to confirm this. So once again I ask, is there something functionally different that a lambda would do for you here? Did I misunderstand your interpretation?

"one shitty language" - This is the language we are programming in, and reflects how python uses lambdas. I understand how other languages view things differently, but they also implement lambdas differently (I wouldn't consider Python a true functional language, though the framework exists if you want to use it in that way, and it is moving more and more in that direction). The style guideline is sensible here.

Another note: One liners /= readable/clean/maintainable code. Pursuing one liners purely for their one sake is almost always a bad idea (and this is coming from a guy who has been harangued for abusing ternaries), but if you are the only one maintaining your code base, prioritize as you want. In cases where one liners lead to cleaner, more maintainable code, use them, but I'm not convinced of that here frankly.

"Extra's is tied to passwords" - yep but wanted to emphasize to folks that this bypass would not in itself enable extras, the extras patch is still required

" You should pay more attention to init order and look at what the author has done. ;) Edit: In fact, they're bending Ren'Py rules (-999 to 999). " - I'm very aware of what the author has done with Init orders, hence why I also had to bend the rules in my patch.
Python is a shitty language for a ton of reasons. Ridding of lambdas in this context is a style vs functionality issue and functionality should always come first, but that'd be getting very off-topic here. In the case of overwriting certain functions in this game, the function returns a simple bool, True or False. A one-liner lambda keeps it clean, instead of defining a new function and then assigning the old name to a new define (some DRMs list all functions and try to piss all over if functions are simply added). I've gotten into the habit of using lambda overrides because it keeps things short, clean, and less messy functionally. As far as the init stuff, I'd have gone with a higher init seeing as how the author is leaving -999-999 behind using inits above even 65535.
 

Big Daddy

Member
Jul 17, 2017
404
929
Python is a shitty language for a ton of reasons. Ridding of lambdas in this context is a style vs functionality issue and functionality should always come first, but that'd be getting very off-topic here. In the case of overwriting certain functions in this game, the function returns a simple bool, True or False. A one-liner lambda keeps it clean, instead of defining a new function and then assigning the old name to a new define (some DRMs list all functions and try to piss all over if functions are simply added). I've gotten into the habit of using lambda overrides because it keeps things short, clean, and less messy functionally. As far as the init stuff, I'd have gone with a higher init seeing as how the author is leaving -999-999 behind using inits above even 65535.
What is your precise lambda code here? My understanding is that the interpreter handles both the lines I shared pretty much identically, relegating it to a purely style issue. Both of the lines I shared define a new function (using a standard def or a lambda) and overwrite the namespace of the old function. I'm assuming that you are using lambdas in a different context. Other languages may handle lambda overrides differently, but I don't think that distinction exists in this case.

As for the inits, I generally agree here, but I wanted to try to stay as close to spec as possible for now, and when not possible only go as far as needed. The dev could make the choice to increase these inits in the future, but that's an easy change to adjust for.
 

Raminita

Only in madness, do you find beautiful death
Moderator
GFX Designer
Donor
Jun 11, 2017
1,474
36,364
All posts talking about lambdas:

Please refrain from unnecessary unrelated discussions derailing the thread to off-topic. Harsher warnings/thread bans may occur if not complying with the general thread rules. So keep it on-topic, thank You!
 
  • Angry
Reactions: RedAISkye

BOBJevent

Active Member
Feb 23, 2020
526
653
The way I see it is as follows. If you want to create an adult porn game you are basically playing a numbers game for supporters, the more exposure you get on sites such as F95zone the more chances you have of people supporting your creation. That said if a dev doesn't offer a public version to entice supporters, I believe they are shooting themselves in the proverbial foot.
 

clowns234

Engaged Member
Game Developer
May 2, 2021
3,090
4,843
The way I see it is as follows. If you want to create an adult porn game you are basically playing a numbers game for supporters, the more exposure you get on sites such as F95zone the more chances you have of people supporting your creation. That said if a dev doesn't offer a public version to entice supporters, I believe they are shooting themselves in the proverbial foot.
This Dev does offer a public version (it's the one I play). As for supporters, he seems to be doing quite well with that, as his numbers continue to grow.
 

BOBJevent

Active Member
Feb 23, 2020
526
653
This Dev does offer a public version (it's the one I play). As for supporters, he seems to be doing quite well with that, as his numbers continue to grow.
Yes I'm aware of that, I was just making a statement on previous comments that were pointing toward dev stopping the public versions due to events happening on previous pages.
 

clowns234

Engaged Member
Game Developer
May 2, 2021
3,090
4,843
Yes I'm aware of that, I was just making a statement on previous comments that were pointing toward dev stopping the public versions due to events happening on previous pages.
Ok. Thanks for the clarification.
 
Aug 30, 2022
56
142
You know, I've been reading this thread for some time. Password this, notmycupoftea that. And here I am, just to say that
You don't have permission to view the spoiler content. Log in or register now.
This moment and the art are smoking hot. Kinda simple thing, but man, the "she never done something like that even for me" moment is stirling something inside one endeed. I love these thing. Keep up the good work.
 

Aereon1104

Well-Known Member
May 12, 2019
1,204
1,427
You know, I've been reading this thread for some time. Password this, notmycupoftea that. And here I am, just to say that
You don't have permission to view the spoiler content. Log in or register now.
This moment and the art are smoking hot. Kinda simple thing, but man, the "she never done something like that even for me" moment is stirling something inside one endeed. I love these thing. Keep up the good work.
Yeah, when your girl is doing things she has never do for you, you know you are royally fucked
 
3.90 star(s) 39 Votes