
So, welcome to my presentation. As you can see, the title is Unity Games and Questionable Games. I'm very proud of that title, mostly because it rhymes. And we all know if something rhymes, then the contents has to be true. Maybe with my great rhyming skiff, if hacking doesn't work out, maybe I can sell something on Soundcloud. I don't know. Uh but let's let's take a look at the first picture here. So the picture you see here is just the normal Minecraft uh the Minecraft that we all know. So this game still plays the same, works the same. However, you notice that the visual element of this game is slightly different. That's because this game has
been modded to only visually look different, meaning a texture pack has been added. Now you're wondering, what does the default Minecraft look like? Here's a very bland example of what default Minecraft looks like. And as before, it's still the same game. It still plays the same. It's only the visual element that has changed here. And let's look at the last mod. So here once again with the other two slides, this is still the same game. The same mod has been added with just a different texture pack. Um, but now this changes how the game is played, right? So, we ask ourselves, this is a very close space between what is the difference between game hacking and game
modding, seeing as they're so close. H, I do believe the difference between those two is the intent. Um, you're probably wondering, who is this guy standing in front of you and who is he wearing? So, let's let's get that out of the way. That image, that's not one of the three musketeers. That's actually me at some point in time. Uh, so my name is Adrien uh or Adrian in the African's name. I have an alias that nobody calls me by, but that's fine. And to keep it brief, uh, I'm a silly guy. I write blogs. I like making tools, and I do like sharing what I make. Uh, but yeah, that's that's an old picture of me. I think back then,
my greatest enemy used to be a haircut. Now with all my piercings, I think my greatest enemy is a piercing. uh as with all my peer things is a magnet but yeah continuing who is this talk for so I wanted to showcase a talk that is kind of for everybody a talk that's not just for um be beginners hackers or exclusive this exclusively this group uh rather I want everybody to to see how accessible the field really is um if you look at the top right screenshot uh I'm going to make an example of something uh I myself was new with at the time. But if you go from one shell to another shell and then
the only difference between those it says the one says root and the one does not, that's that's kind of confusing. You you struggle to understand the impact of that when you're new to the field. And that's why I wanted to showcase game hacking because with game hacking, you immediately see the effect of your change. You immediately see you change this piece of code, therefore the game runs like this. It runs a bit differently. Uh, so I kind of want to showcase the accessibility of this, right? We also have that other confusing slide there, which looks like the grocery list got corrupted, but whatever. I still don't know what's going on there. So, where did this all start? This all
started with a YouTube video recommendation that I got, and it was a YouTube video by John Hammond. I made sure to include his his pretty face while he was not blinking or making a weird face, so we can all see how beautiful he is. But uh his YouTube title was unity hacking with the inspire. And the reason why this video stood out to me as I thought it was interesting that he used a tool called deinspire. So deinspire is a tool that I use on my everyday engagements, right? And for some reason I thought game hacking had to be a completely different domain. Games were coded in languages nobody knew. Games were game hacking software.
it didn't quite frankly exist. And this this is the mindset I had. So seeing him use D inspire kind of humanized this a bit for me. It I kind of made the realization that um game hacking is games are just another process running on your computer. It's just made in another coding language. Uh however obscure the documentation for it exists. And with every hacking tool such as DNS spy follows a victim. And this is my mucking victim. So, the game's name is Muk. Uh, it's like Minecraft, but a lot worse, right? The premise is the same. You have a rock and then you use a rock to hit a better rock. Then you use the better rock to
hit an even better rock until you have the best rock. And us gamers find this amazing. Uh the one difference is uh with mock they've added a coin value there. So you can use coins to open up chests and with these chests you then get additional stats. So this is a game that I used to play with my friends and upon one of the times launching the games uh I kind of realized something with that John Ammons video at the back of my mind. I realized when I launched the game, the game said it was made in Unity. And then I thought back of John Ammon's video. In his video, he mentioned the tool usage
densy. I know what Dinsspire is. I've used the Inspire uh without any prior game hacking knowledge. This is just a common tool for hacking in general. So, I decided that I wanted to see what could I do on this, right? Uh but before we go into too much detail, let's fix one buzz word we all keep hearing the inspire. What is the inspire? So the inspire the version I'm using is a fork from the the latest maintained fork from the inspire and what it does is essentially it takes all the uh net and unity assemblies and it decompiles it right uh in English that means it just takes theexe dld and then takes that inhumal inhuman
readable format to something that we can read something that's like C# code. Um, but what makes DNSY really great, why I do enjoy it, is not only does it decompile the game, but it makes it possible so that you can actually edit the game. You can edit the game files and then recompile it. So, you can already see the changes we're going to make. Uh, I also included the light and dark themes there. I thought it was just funny that on the official repository read me they only had those three bullet points and they felt that they needed to add the light and dark themes there out of all the three things they could have
chosen from this vast tool. So using DNFI it's as simply as going through your Steam folder searching for the game mug and eventually you would get to a place where you see assembly- car.dll and that is the file you want. So you open up that file in D inspire. DNSPY does it magics and then it decompiles the game for us, right? And from that we now have classes. Classes are the green things over there like the achievement display, achievement manager. If you're color blind, it's the black and white things over there. Little little joke. So before before we continue on into looking at code and understanding that stuff uh let's first to understand why we're able to see the code in this game.
In this case the game was made in mono. Uh the alternative being IL2 CPP and that's just essentially another variant of how the game could have been made. They would have added a few extra steps and layers to this. uh so meaning we had to use something like CPP dumper so we can go from C++ code to C code but in our case for mono games we just go directly to the C# code which is great so on on the the basic usage of of D inspire it's as simply as opening up one of those classes I mentioned there at the start uh and then you would get something like this and within those classes you would get the methods and on
these methods it's quite Quite frankly, it's free reign. You can change what you want to change and just recompile the game, right? Although I don't think this code is going to run, but I think it look funny. So, another thing to note with the inspire is there might be some errors when you try to recompile the game. And the reason for that is you're not seeing the code one for one as the Inspy made it rather as the developer made it rather you're seeing the Inspire's best interpretation of what it thinks is going on. Uh that and also the .NET compiler you're not compiling it as a normal .NET application anymore. uh there's a lot of factors to play at play
and so for that reason uh there are small few a few small errors there and I think if you look for long enough you might see some foreshadowing of what's about to come on top of that so looking through the classes this this was now my new adventure this is what I wanted to do I wanted to now look through the classes I have no uh gaming hacking experience, no methodology, no mindset for that, but I decided I'm going to use my normal hacker mindset and just go based off of that. Um, so one of the things is of course jumping really high. As you can see here, uh, I don't think you have to play the game to
understand that you're not supposed to jump to this level, right? Usually jumping is the greater change in the vertical position. In our case, the horizontal position is quite insane. Even then the vertical position is a bit excessive. Um but nonetheless I I added a few funny classes because remember we are decompiling a developer game and we're at the developers mercy of how we chose to make this game and I just found it funny that he had two classes called gun and haha yes very close to each other which made me feel a bit uncomfortable. And of course we have the test center deleters law. I just thought it's funny that the developer didn't delete that
law. So with with that meth methodology, the hacker methodology I do have, the first few things I want to do is I want to make life a bit easier. So going through dinsspire, going through the code, uh I then found the stamina and hunger bars. So the stamina bars responsible for allowing you to run. If you have no stamina, you can't run. And then if you have no hunger, then you cannot regenerate your stamina bar. So any sensible man would say, "Okay, let's just remove the the game logic needed to actually call this and just make the game not be dependent on stamina logic, but not around these parts." I use what I call my secret
technique. We're just adding a lot of zeros to numbers. So now my stamina bar, which was previously 100, is now 10 billion. And same with the the hunger bar. It's now 10 quadrillion. I can't even count that, right? But anyway, so we're moving on to this theme of me looking through the code. What else can we find? And one of the things I did want to change is I don't want to die in this game, not in real life. So the original values of that you see before you is that says -10 but that used to be zero meaning that if your HP reaches zero you die. So that's the death logic right there. So what I did
is I changed it to -10 meaning that if your HP reaches -10 you die. However you can't die because your HP bar can never go below zero. So we we've made a condition that can never be met. So, of course, I I made this change, recompiled the code, played the game, everything went well, except for the fact that I've made a mistake. Turns out uh this class was for the hitable class. And for some reason, everything's death logic is in that, the trees, the monsters, except the players. So I did the inverse of what I wanted to do. Now everything in the game can't die except me. So eventually I realized this mistake and I reverted it back. Changed these
back to zero and then made the players logic negative 10 and now I can't die. Now world has been restored. Although I must say it's it's it's very scary if you attack a boss, he's dead but he's not and he keeps chasing you. Uh, another funny thing is I couldn't uh find the the base movement speed for the player when running on the ground, but I did find the movement speed for running on water. And I used my secret technique on that one as well. So now I run really fast on water and then on any other terrain I run the normal speed. So it's kind of just this weird thing of you're at the developers mercy of how he
decided to make this game. I did eventually find the base movement speed and change that, you know, but you get a few fun mistakes out of this. Another thing that the hacker inside of me, the hacker mindset wants is to maybe get an exploit. I wanted to see maybe can I get some form of remote code execution? Can I do anything like that? Unfortunately for me, uh this Unity game used all Unity's Unity and Steam's default uh means and technologies of managing player lobbies, managing sessions. Uh so they didn't try and reinvent the wheel on networking like Call of Duty did with Robchains. So I did however find the script alert one equivalent uh of this which is being able to type
in color in the in the text chat which is very boring but this is all I had but once again moving on looking through the code another thing I wanted to change was I don't want to buy a sword so that I can do a lot of damage rather I just want to do a lot of damage regardless of what I'm holding so Using my secret technique, I've now made the distance uh I needed to be to a target to hit it. I I made that 10 trillion. Meaning that now if something is across the map, I can hit that something. And then of course following that was the damage multiplier. So I made the damage multiplier
of a similar small number. And now I could oneshot everything on the map wherever I am whenever I want to. And the next GIF, this blurry GIF, I'll let it loop for a bit. Uh, but that kind of is what's happening here. So, in the distance, you can't see I'm eating cows. You can't see. Uh, no, not because it's blurry. The cows are just very far, promise. Um, but I'm one-shotting the cows from very far. And then I'm starting one of the boss fights and I'm hitting the boss with a rock. And the rock is the weakest thing in the game that you just pick up. One shot dead. So this is this was very fun to do this.
And then once again, so we've kind of talked about the the hacker mindset of uh let's let's go specifically after specific things. uh let's also see you know are there any vulnerabilities any other exploits we can try and then another piece of that is also just look around and see what you can find so what I could find was the steam achievement manager so this was the code and logic responsible for giving you your you your achievements on steam uh for example we have the win easy achievement if you play the game on easy mode and you finish it you have the achievement same with the speedrunner achievement if If you finish the game within less than 8 days, then you get
the achievement. So, what can we do with this information? Well, knowing the speedr runners logic, maybe we can extend the amount of days needed, you know, to be more lenient. Maybe we can make it that a day never passes by until I found this one. This is the achievement you get when you start the game. So when you start the game and you launch it for the first time, it gives you that achievement. And I'll let the the next slide sit for a bit on what I did. So what I did is I moved all the achievements underneath the game start achievement, meaning that if the game started, I would then be given all the
achievements. Um, you can also see there's the time and date. Uh, so I I don't think I can defend myself on this one on being legit because you have to finish the game on easy mode, normal mode, and hard mode. And yet I did that at the exact same same date and time. So yeah, that's a tough one to defend myself from. But nonetheless, moving on. So the big part, the gold, the coins, the gold. This is um this is the big thing that we all want. We want to be rich, right? So, this is the screenshot from the previous GIF I showed you of hitting the boss in the top left. That's this screenshot. That's the amount of
loot that dropped when I killed that boss. So, the 18,000 is not a lot until I tell you that the boss was supposed to give me 25 gold when I killed it. And then I was also supposed to get one ancient core and I got 69 ancient cores. So this is this is this was me changing the loot multiplier. Once again, secret technique, a lot of zeros to numbers and really not a lot of coding at this point, but it's working out really great. But there was a problem with this. So up until everything, everything up until now, I could join players games, players could join my games, and all my changes would persist. In their games, I would
run really far, jump really high, one-shot people from afar. All of this persisted, which was great, except for the loot multiplier. So when I joined their games, jump high, kill the monsters, only get the default amount of gold. I did not get the multiplied amount of gold uh that I set that I wanted. So then I thought I'm kind of stuck at this point. I have to do something different now. So the way that this game works just on on connecting to each other is it's more similar to peer-to-peer meaning you and your friends host the game and everybody joins that friend rather than then being Muk owns its central server. we all connect to that and it checks the logic
and for god forbid if anybody cheats you know it can check check for that. So what I decided to do was I was first okay it was nice using DNSPY but then I thought if I could use DNSPY which is another normal tool I use every now and again what other normal hacking tools could I use and one of those tools was Freda. So what I did in Freda is I just injected the Freda agent into the process and then from there we can make a few changes and patch stuff live. So how did I do this? So we have the get money method. The get money method is inside the inventory UI and this essentially just sets your gold
value to zero when the game starts. Right? But we're kind of in a way cheating now cuz in this is going to make it make our job in Freda a bit easier because we now know the method responsible for uh assigning the the money value. Right. So from this I made a Freda script to first find that value and then after we have that value change that value. Uh and that's what I did here. I I went and I found the inventory UI, the get method and then from there it finds the zero value and now we have six nines. Can hear you laughing adults. No. Anyway, so this was a a cool thing. There was this was a nice thing to do.
This worked really well. And then I thought, okay, so far I've been only using my tooling, the tooling I know, the tooling I'm comfortable with. And I decided maybe I should have a look at tooling uh that's more game specific tools that I have not used anymore. And cheat engine is one of these tools. And cheat engine is a great tool. I'm a fanboy of this tool. We should change the name to legit engine instead of cheat engine. Um so essentially what you do in cheat engine is you attach to the memory process of the game this case mock and then from there we can monitor all the values of the memory addresses inside the game right so I'll now further
explain why cheat engine is really good at what it's doing but first the layout I add 11 coins and then I drop down one coin in one coin until I had eight coins. And then I looked in cheat engine and I searched for all the memory addresses that had the value of eight that's related to the game muk. And once you did that scan and you finish that scan, you go and pick up one more coin. Now you have nine coins. And now you scan again. Except you don't scan for the value of eight. You now scan for the value of nine. And now we come to the cool part of this why why cheat engine is so good at
searching for things is it now only scanned for the values of nine where it previously was eight. So instead of having this long list of memory addresses and having to guess which one is the right one and not crashing your computer. Now we can just use cheat engine and keep track uh of the memory addresses the prior memory address to the new one. Keep going on like that. Then eventually you would find this picking up coin coins picking up coins until you have 11 coins. And now you only have three memory addresses with the current value 11 but previously had the value of eight. And the next part is fairly simple. If you look at the the bottom half is you
just go into you just take that memory address and you change the value of 11 to 1 million or in my case 1 million and one because I misclicked and put the zeros in the middle of the 11. But on the UI side you might still see the same value. All you have to do is just drop the coin or interact with the coin in some way and then that would update in the game's UI side. uh but that's not too important because the value there is changed. But in doing in doing this I kind of realize there's a there's a problem. So if we go back and and we make the the same example.
If we say we have 30 coins and we find those memory addresses for all the 30 coins. But now let's say we do something different. We do something else other than picking up the coin. What if we drop a coin? What if we split the coins in half in our inventory? Now suddenly the memory addresses at the top left become the memory addresses in the top in in the bottom right. So as you can see the values changed from 30 to the values being nonsensical. And I just thought okay this this is interesting in my mind. I thought you know I found the wallet I found the bank and how is the bank moving and through this I wanted to to see
what's happening. I wanted to understand why this is happening. So another nice thing about cheat engine is you can also look at what reads and writes to the memory address. And I'll give us a quick 101 so that everybody's with me because I'm going to say a lot of alphabet alphabetical characters in succession random succession but essentially how the flow works of assembly is you start at the very right the arrow and then the arrow goes into the a and then what does that into mean? So that's when you look at the very last part, the very left part. So for example, if the very left part part is a plus, then the arrow plus is into the A.
So if you go to the lower examples, we have ECX goes into edX. ECX is plusing into edX. We know that because the last one on the line there is add. So if ECX was one and EDX was two, after this edX's value should be three. So on the next line we're starting out there with edx being three and now edx is going into eax. What is it doing? Because it's move that means it's equaling to. So now edx is equal to e x. So 3 is equal to e x. Right? So just a mini thing on that so that we can look on this. So here this is kind of when I realized how I
was scanning for the memory address. I was not looking for the coin total rather I was looking at the coin total exclusively when additions are made. So with that context you can assume that edx going into ECX uh has to be most likely amounts picked up is going into some form of a wallet. And then at the red there at the bottom once again for the color blind the black and white I enjoy that joke. Um, we can see that the final wallet is then moving to racks with an offset. Uh, we we can just leave that for now, but that's most likely the the reason why the memory addresses keep changing and moving around, right? So, what can we do
on this in cheat engine, we can actually edit this as well. So what I did uh if you look at the the new me with the long uh uncommented line just below that is add and then ECX and then 2710. So how does that read? 2710 is 10,000. 10,000 goes into ECX. But what was ECX before? What was 10,000 before this? 10,000 before this was EDX which was the amount picked up. So now I've changed the amount picked up and I've replaced it with now 10,000 goes into your wallet. So instead of amount picked up going into your wallet, it's now always going to be 10,000s being added to your wallet wallet regardless of the amount
you picked up. And that's kind of what this screenshot is is on the left side we have 10,31 coins, right? We dropped one coin. Now we have 10,030. We have our code running in the middle and then on the right side we pick up the coin but as you can see it doesn't turn back into 10,031 it now adds 10,000 instead of the one. So this is just another cool way of doing it. And then I thought what if I did the inverse of this right because the way I search for it in memory is not the total but the total when additions are made. So what if I search for the memory when additions are
made when I when coins are dropped and that's kind of what I did for this one. Uh so when I found the memory address for the deductions all I did was deactivate that memory address meaning that it's never being called. That memory address of subtracting that instruction will never be called. So on the left side we have 20,05 coins. Opening up a chest for 25 gold. And then when that chest is open, you can see that the amount has not changed. It's still 20,05. So this is this is one of my fun parts. I call this the the story time. So how I would reveal this to my friends is I would not be subtle. I would not
explicitly tell them I'm hacking, but I would not be subtle at all. And I wait for them to figure it out. And that's what I call fun. So, we all joined the game. I asked one of my friends if somebody can bring me a rock, I would pay them some coins for it. They obly thought this this is a amazing deal to have. And honestly, shame on them. They should have saw it coming. So, I asked for one rock, a worthless rock, and I'll give you some coins. One agreed, and he gave me the rock. So, for context, you're supposed to get around 25 gold a day, and usually we would only play around 8 days.
So, the amount that I dropped them was so large that the game's UI couldn't keep up. It essentially caused the buffer overflow of the screen, which is funny. Uh, so just one a funny story there. on that side and now we come to the slide that has no audio but I can hear the slide so we have to we we talked about getting money getting gains now we have to think okay where what's ethical what on what we did so I set myself a few rules right and the rules are simple just who are you affecting are you affecting yourself and then somewhat your friends which you're really close with maybe a gray area with the friends, but if you're
affecting yourself, that's perfectly fine. But if you join somebody else's game, even if it is out of good intent, like you wish to give them money in the game, you're still altering the way they experience the game. So in that in that part, I'd say that's not too ethical, right? And the coin values in this game are completely worthless, right? Those you cannot buy those coin values with actual real money. But what if you could, right? What if you could buy those coins? You can buy a bundle 20 rand and you get one coin or whatever. In that case, if I increased the coin count as I did, then I would not regard that as too ethical because
now we were affecting the developers. So just something to consider when you are hacking games, you have to use a safe playground. And then we go come to the unknown cheats community. And this is just a game making community similar to a forum where everybody shares what they do, how they do it, and so on. But let's keep this at the back of our mind and look at the next game. So this game is called Liars Bar. At the time it was a really big game. So for this game, what I did is I did what I only knew how to do with a muk game. So I kind of repeated it. uh in in a sense
I became a one-trick pony. So what I did with Cheat Engine is it's a Russian roulette game, meaning you only have six lives at most. So what I did with Cheat Engine is just kept ticking it down to zero. So my live count will always be zero and never increase. So that's one of the things I did. Uh another thing I did was as you can see on the left side, uh that is my friend's uh screenshot of his game. He has two wins and one loss and he is the lowest rank in the game. And on the right side is my game. I have zero wins and one loss and I am the highest rank in the game.
So that's just something I did in D inspire to increase the notoriety you get, the level up points you get. I just flipped the win and loss over and then used a few secret techniques there. But now we come back to the cheat engine part. Uh not the cheat engine part, the unknown cheats community part. So with the previous slide, that's that's all I could do. That's that's all I did do. But also felt I don't want to do the same thing over, right? There's no real growth in that. That's quite literally a onetrick pony. So I looked at unknown cheats just to see what other people are trying just to get more ideas. And I saw
there was this one guy that injected a DL which is essentially similar to the the Freda stuff we did going back looking at the code getting those code values back to us and then presenting them in the way that we wanted presented. Uh and what he did essentially is he had so yeah sorry he had a yeah his DLL made it possible so that you can see the other players cards and you can also change your cards on demand. So, this is a good idea. And then eventually I decided to try that. And then we get to something I did not think of at all, which is the pig just stretching his head there. And that's because he used
Unity's free cam to achieve that. It's quite a primitive way to do it, but I mean, ain't no rest for the wicked, I guess. So with that keep So let's just keep the the Unity free cam in mind because we have a better slide coming up and that's a story time slide. So for this game in Liarsb obviously I had a 100% win rate and not being subtle. So I guess everybody's guessed everybody's cards right 100% of the time. And eventually the friends caught horn and like okay that's funny and we played the game normally. However our one friend when you put down a card your card can be true or false. So you play on or you call and my friend friend
made himself a tal without realizing it. If he put a card down and I guessed the card wrong he would play the usual normal mind games of Russian roulette say oh maybe you should play it maybe don't. But if he put a card down and I guessed it right. He said, "I must turn off my cheats." And for some reason, he didn't see that. He could not understand that. And our whole table utilized this technique of listening to is he going to tell us to stop using cheats or is he just going to play the game normally? And through that, we could guess what his cards were all the time. It was actually so bad we eventually had to
tell him like, "You're giving yourself away." So the next game that called for my expertise was supermarket together. This is a game that you just manage a supermarket which I am the proud CEO of. So going back to the pig stretching its head on that Unity free cam I kind of made a real realization that in hacking you might have things on a website like cross-ite scripting and that you know borderline exists on all websites. However, there are some things that that website depending on the framework that website is specifically inherently vulnerable to that others are not. And I kind of thought, you know, what's Unity's version of this? Obviously, a lot of game hacking has been going on,
but what more Unity specific game hacking is there? And that's when I found uh Unity Explorer, which is a Unity uh yeah, which is a Unity DL you can inject into a game. And I found Melon Loader, which you can use to inject the DL into the game. And it's actually very picky because it has to be a mono game. It has to be this. But nonetheless, let's talk about the how um unity explorer works. So with the previous get money example from muk, right? What we did in Freda is we found the get money value and then we returned that value to us in a way we wanted it to be returned and then we
change that value. Right? So we can also make this our own DL and then inject that have it do that. But what's nice about having games being made in Unity is Unity games will always follow a certain structure. Unity games are always made at a certain way. All Unity games will always have their objects listed following Unity standards. So you kind of get the idea that it's a framework that they have to adhere to. So instead of going into supermarket together and then finding apples and then finding that and we can just skip that and kind of just use what Unity already gave us, you know, because we already have that structure. And that's exactly what I did. So I open up the
game. You're probably wondering where's the supermarket? That's not important right now. This is important. So at the side of the supermarket, there is a room called the cool room. And the cool room is a DLC you can buy with real money. And one of my friends bought the DLC. So obviously he went into the cool room and got the nice skins and stuff. And I thought, hey, I'm going to go in as well. Ah, invisible wall. I thought that's not right. I'm I'm a cool guy. I should be I should be allowed to go into the cool room. Uh, so I aim to set that right. So with Unity Explorer highlighting all the Unity specific objects to me, it's as simple
as removing all the collisions and then falling through the floor because you've removed all the collisions. And then after you respawn, you remove all the collisions only for the cool room, right? And when you do that, it looks something like this. So you can just walk into the cool room now. And then when you go back in and you turn it back on, you have now full access to the DLC. I later looked at the code and I saw that the DLC actually gets loaded into your game whether you own it or not. So yeah, uh quick brief story time here. So on this one, what I did is one of my friends was an absolute machine on the
tills asset to the company for a supermarket. He cared about shareholder value, but what he could not figure out is he would buy more stock than we would sell stock in a day. So we make an massive net loss. So, I kind of used the same thing of taking the tablet, which was made for buying stock, putting that outside the map, and if anybody wanted the tablet, they'd contact me and bring it and then bring it back to me, and I'd take it back. And why that's funny is we actually played the game like that. But, nonetheless, we we get to the final part here. So, for this, this is a guy uh Hypen, I
think his name is Ross. He made a sensecon challenge which is senses internal hackathon and it's essentially a unity game CTF. There are two flags in the blog that I read and then there's two unknown flags which aren't explicitly mentioned and then a little Easter egg. So I decided I'm going to do this, you know, this final CTF just as a wrap-up. So with this 15 arcades, one coin per arcade, you have eight coins. Obviously, you don't have enough coins to buy every arcade for the flag to be displayed. So, we once again we did the cheat engine method of just deactivating the memory address, meaning no deductions no longer happen. Onto the next one, uh the no red door.
So, this is similar to supermarket together. You have to be inside the building and uh the door has to be removed. So I remove the door, remove collisions and then dunzo flag. Looking around the code, one of the methods name was flag. That one was fairly fast. And then we had this one which was another hidden flag. You had to stand still in front of the phone for 6 seconds and after that the flag would be displayed. And for the last one there was a konami code. So essentially had to press a few things in succession and the end of end of that result would be something some Easter egg. Uh it did not work for me.
So what I did is I just nuked all of those commands and said if I press B, show me the Easter egg. And that's what the Easter egg looked like. So this this challenge is still up if anybody do wishes to try it. Um, I also have my contents of my blog there. So, if you do wish to, you know, revisit a thing or two, then that's always there for you. But, nonetheless, are there any questions? Oh, there's applause.
What is
Um these steam achievements did they persist or was it reversed? They persisted.
However, I did get So I I said that every achievement I'm I put literally put every achievement I'm supposed to get and then when I read the script, some of my achievements are now locked. So I don't think I can get any more achievements. So I have no idea what's going on there that that side but yes they did persist. >> How's it? >> Yeah, good talk. I just want to know what advice would you give to indie game developers? What can they implement into their game to prevent these kinds of um >> changes? So, one of one of it one of the things you can do is make the game in IL2 CPP instead of mono. That just adds
an extra layer to it. Um, but in in general, my explor exploration of all these Unity games, it's it's tough to manage it because there's no anti-che, there's no central server if it is an online played game to, you know, verify the logic of the game. I myself I'm not too familiar in in what makes a game more secure. All I can tell you is rather the things that make game hacking harder for me. But yeah, I can't directly answer your question there. >> Um, so I I just quickly want to ask, do you know whether this generalizes to other game engines like Unreal because you mentioned Unity a lot. So yeah, so most of this talk is Unity specific. So
if you use Unity Explorer on Unreal, you're most likely not going to get something back. Um, but some of these things would work for Unreal games, right? So the memory patching and things like that. It's just only with the the larger games, you know, have to consider is there anti-che? What do I have to do? You know, those things also not getting yourself banned. So yeah, does that answer your question? >> Yes, it does. Thank you so much. >> Cool.
Cool. I think that's all the Oh, >> uh, make it >> your friends still play Unity games with you now. >> Sometimes they are two of the victims I mentioned in my story times, but >> So now they know to look that it's not a Unity game before they play with you. Yeah, it's a a lot of convincing has to happen if they want to play with me. So, I've done that myself. But yeah, thank you guys.