游戏封包反跟踪(NP)为了不让用户轻易将反跟踪程序去消,其实现的往往是采用某种动态算法,并与游戏服务器相通信。
我们如果想去消游戏封包反跟踪(NP)程序的反跟踪,那么必须对反跟踪代码的行为进行分析,找出算法后,我们就可以仿照它的行为而实施我们的模拟反跟踪。
反跟踪 NP 一旦去消,我们又可以用HOOK原理来实施我们对封包信息的截获工作了。当然纯粹为了跟踪封包,我们其实并不需要去对付反跟踪,因为我们还有很多其他途径来实施封包的跟踪,而在这些途径中有些原理本身就是无法被反跟踪的。
如何查找反跟踪程序,其实十分的简单,我们知道在进行判断之前,被判断的内存数据必须会被读取,因此我们只要给被分析代码所在的内存下一个读断点就行,然后用运行跟踪即可找到反跟踪代码段。
目前遇到一个NP的难题,一旦跳过NP就无法认证
不跳NP时正常连接为:
C -> S 02 58 //发送连接请求
S -> C 02 27 +16位KEY //接收16位随机密匙
C -> S 02 28 +16位根据KEY算出的结果 //发送16位密匙计算结果
S -> C 02 59 01 //服务器确认后返回标记,开始正常登陆
但如果跳过NP后:
C -> S 02 58 //发送连接请求
S -> C 02 27 +16位KEY //接收16位随机密匙
只到了这里客户端就不返回计算结果了,估计是检测不到NP运行所以就不返回结果
我推算有两种情况:
1)加密算法是单独的,不与NP挂钩,那么只需要搞点判断位,或模拟NP运行就行
2)加密算法作为NP一个模块,内嵌在NP,这样的话只能跟踪NP获得加密算法了
==================================================================================================
What is nProtect?
nProtect is a new concept web-based anti-hacking & anti-virus utility tool designed to protect PC terminals from being infected by viruses or hacking tools.
It helps to ensure that all information entered into the PC terminals during web access will not fall into the hands of hackers.
By deploying nProtect on their websites, financial institutions offering e-services, portals and e-commerce sites can increase the security level for the end-users when they perform electronic transactions
How does nProtect work?
nProtect is a server based solution and is automatically activated at the launch of any web page that requires the necessary protection.
nProtect is loaded onto the PC’s memory, so end-users do not need to install any application to enjoy the security protection. Once nProtect is activated, it offers the terminal real-time protection against hacking tools and viruses. Here’s how it works.
1) nProtect auto-launches when the user logs-in
2) The web browser checks and auto-installs the security module in the users?PC (new users/ outdated version)
3) Scans for hacking tools and viruses
4) Inform users about the security status
5) Attempts to remove hacking tools and viruses, if any
6) Resides in the main memory to block hacking tools from intruding until the PC or nProtect is closed.
--------------------------------------------------------------------------------------------------
How to implement the Data Encryption Standard (DES)
A step by step tutorial
Version 1.2
The Data Encryption Standard (DES) algorithm, adopted by the U.S.
government in 1977, is a block cipher that transforms 64-bit data blocks
under a 56-bit secret key, by means of permutation and substitution. It
is officially described in FIPS PUB 46. The DES algorithm is used for
many applications within the government and in the private sector.
This is a tutorial designed to be clear and compact, and to provide a
newcomer to the DES with all the necessary information to implement it
himself, without having to track down printed works or wade through C
source code. I welcome any comments.
Matthew Fischer <[EMAIL="mfischer@heinous.isca.uiowa.edu"]mfischer@heinous.isca.uiowa.edu[/EMAIL]>
Here's how to do it, step by step:
1 Process the key.
1.1 Get a 64-bit key from the user. (Every 8th bit is considered a
parity bit. For a key to have correct parity, each byte should contain
an odd number of "1" bits.)
1.2 Calculate the key schedule.
1.2.1 Perform the following permutation on the 64-bit key. (The parity
bits are discarded, reducing the key to 56 bits. Bit 1 of the permuted
block is bit 57 of the original key, bit 2 is bit 49, and so on with bit
56 being bit 4 of the original key.)
Permuted Choice 1 (PC-1)
57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4
1.2.2 Split the permuted key into two halves. The first 28 bits are
called C[0] and the last 28 bits are called D[0].
1.2.3 Calculate the 16 subkeys. Start with i = 1.
1.2.3.1 Perform one or two circular left shifts on both C[i-1] and
D[i-1] to get C[i] and D[i], respectively. The number of shifts per
iteration are given in the table below.
Iteration # 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Left Shifts 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1
1.2.3.2 Permute the concatenation C[i]D[i] as indicated below. This
will yield K[i], which is 48 bits long.
Permuted Choice 2 (PC-2)
14 17 11 24 1 5
3 28 15 6 21 10
23 19 12 4 26 8
16 7 27 20 13 2
41 52 31 37 47 55
30 40 51 45 33 48
44 49 39 56 34 53
46 42 50 36 29 32
1.2.3.3 Loop back to 1.2.3.1 until K[16] has been calculated.
2 Process a 64-bit data block.
2.1 Get a 64-bit data block. If the block is shorter than 64 bits, it
should be padded as appropriate for the application.
2.2 Perform the following permutation on the data block.
Initial Permutation (IP)
58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7
2.3 Split the block into two halves. The first 32 bits are called L[0],
and the last 32 bits are called R[0].
2.4 Apply the 16 subkeys to the data block. Start with i = 1.
2.4.1 Expand the 32-bit R[i-1] into 48 bits according to the
bit-selection function below.
Expansion (E)
32 1 2 3 4 5
4 5 6 7 8 9
8 9 10 11 12 13
12 13 14 15 16 17
16 17 18 19 20 21
20 21 22 23 24 25
24 25 26 27 28 29
28 29 30 31 32 1
2.4.2 Exclusive-or E(R[i-1]) with K[i].
2.4.3 Break E(R[i-1]) xor K[i] into eight 6-bit blocks. Bits 1-6 are
B[1], bits 7-12 are B[2], and so on with bits 43-48 being B[8].
2.4.4 Substitute the values found in the S-boxes for all B[j]. Start
with j = 1. All values in the S-boxes should be considered 4 bits wide.
2.4.4.1 Take the 1st and 6th bits of B[j] together as a 2-bit value
(call it m) indicating the row in S[j] to look in for the substitution.
2.4.4.2 Take the 2nd through 5th bits of B[j] together as a 4-bit
value (call it n) indicating the column in S[j] to find the substitution.
2.4.4.3 Replace B[j] with S[j][m][n].
Substitution Box 1 (S[1])
14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
S[2]
15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
S[3]
10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
S[4]
7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
S[5]
2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6
4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
S[6]
12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
S[7]
4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
S[8]
13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11
2.4.4.4 Loop back to 2.4.4.1 until all 8 blocks have been replaced.
2.4.5 Permute the concatenation of B[1] through B[8] as indicated below.
Permutation P
16 7 20 21
29 12 28 17
1 15 23 26
5 18 31 10
2 8 24 14
32 27 3 9
19 13 30 6
22 11 4 25
2.4.6 Exclusive-or the resulting value with L[i-1]. Thus, all together,
your R[i] = L[i-1] xor P(S[1](B[1])...S[8](B[8])), where B[j] is a 6-bit
block of E(R[i-1]) xor K[i]. (The function for R[i] is written as, R[i] =
L[i-1] xor f(R[i-1], K[i]).)
2.4.7 L[i] = R[i-1].
2.4.8 Loop back to 2.4.1 until K[16] has been applied.
2.5 Perform the following permutation on the block R[16]L[16].
Final Permutation (IP**-1)
40 8 48 16 56 24 64 32
39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30
37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28
35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26
33 1 41 9 49 17 57 25
This has been a description of how to use the DES algorithm to encrypt
one 64-bit block. To decrypt, use the same process, but just use the keys
K[i] in reverse order. That is, instead of applying K[1] for the first
iteration, apply K[16], and then K[15] for the second, on down to K[1].
Summaries:
Key schedule:
C[0]D[0] = PC1(key)
for 1 <= i <= 16
C[i] = LS[i](C[i-1])
D[i] = LS[i](D[i-1])
K[i] = PC2(C[i]D[i])
Encipherment:
L[0]R[0] = IP(plain block)
for 1 <= i <= 16
L[i] = R[i-1]
R[i] = L[i-1] xor f(R[i-1], K[i])
cipher block = FP(R[16]L[16])
Decipherment:
R[16]L[16] = IP(cipher block)
for 1 <= i <= 16
R[i-1] = L[i]
L[i-1] = R[i] xor f(L[i], K[i])
plain block = FP(L[0]R[0])
To encrypt or decrypt more than 64 bits there are four official modes
(defined in FIPS PUB 81). One is to go through the above-described
process for each block in succession. This is called Electronic Codebook
(ECB) mode. A stronger method is to exclusive-or each plaintext block
with the preceding ciphertext block prior to encryption. (The first
block is exclusive-or'ed with a secret 64-bit initialization vector
(IV).) This is called Cipher Block Chaining (CBC) mode. The other two
modes are Output Feedback (OFB) and Cipher Feedback (CFB).
When it comes to padding the data block, there are several options. One
is to simply append zeros. Two suggested by FIPS PUB 81 are, if the data
is binary data, fill up the block with bits that are the opposite of the
last bit of data, or, if the data is ASCII data, fill up the block with
random bytes and put the ASCII character for the number of pad bytes in
the last byte of the block. Another technique is to pad the block with
random bytes and in the last 3 bits store the original number of data bytes.
The DES algorithm can also be used to calculate checksums up to 64 bits
long (see FIPS PUB 113). If the number of data bits to be checksummed is
not a multiple of 64, the last data block should be padded with zeros. If
the data is ASCII data, the first bit of each byte should be set to 0.
The data is then encrypted in CBC mode with IV = 0. The leftmost n bits
(where 16 <= n <= 64, and n is a multiple of 8) of the final ciphertext
block are an n-bit checksum
--------------------------------------------------------------------------------------------------
[GMS] Hacking 101 [Bypassing, addresses, pointers]
Announcements
=============
irc.fukt.us #maplestory
/server -m irc.fukt.us -j #maplestory
Remember that IRC is not the same as the forum. You may not be treated too kindly.
- I will no longer be giving support in this thread. Most questions are now repeats. Before asking a question please try searching the forum or reading through the pages of this thread.
- The correct DBK32 file has now be uploaded.
- Thank Diddle for the alternate download location on MPC.
- I have changed my AIM and MSN settings to disallow people who aren't on my buddy list from contacting me. So please don't add me to your MSN or PM me on the forum either.
Introduction
============
Other stickies you should note.
- [GMS] v0.21 - Hack Values (http://www.mpcforum.com/showthread.php?t=130102)
- [GMS] Tutorial - All 4 VAC Hacks (http://www.mpcforum.com/showthread.php?t=129710)
There is an HTML verision of this tutorial available. (http://www.uber-l33t.net/ian/tutorial.html).
This probably won't be as updated as this thread, though.
definately not updated recently. dont use it
My goals.
I am hoping this clears up many questions and issues. I will try and be as descriptive as humanly possible. If you have anything to add, please PM me or IM me.
You can get all the files needed in one zip.
In this tutorial, all files needed are separate downloads. If you would like all downloads in one compressed archive, you can download them from (http://www.megaupload.com/?d=QONMUIAN).
Replace the DOTs with the appropriate symbol. MPC censors the website. This tutorial does not cover the filenames used in that archive. So you'll have to figure that out for yourself. It should be pretty obvious though. Thanks to Rache for the contribution.
Common Problems
===============
If you can only use godmode and nothing else [one register change],
then you need the modified DBK32 file.
If your computer reboots when you start MapleStory with CheatEngine
then try using Abyss webserver and checking over your hosts file / rev 566 server files.
If DupeX ListOffset value doesn't increase
then there is someone on the map, or you don't have the modified DBK32 file.
More to come...
contribute by replying...
The Bypass
==========
What it does. This method of bypassing GameGuard emulates a GameGuard server on your own computer. That means instead of MapleStory looking fofr the GameGuard server on it's own website, it will read and update from your own computer. SunBeam put it best when he wrote in his thread (http://www.mpcforum.com/showthread.php?t=129496):
Quote:
Originally Posted by SunBeamThis method of "defeating" GameGuard came to life in 2001-2002. The first game ever having this protection was and still is - MU Online. The ideea of making a server that would "update" GameGuard with old files was commonly used at that time. People simply updated the tutorial and used it on other games that received GameGuard's "blessing". Which brings us to these days.
GameGuard uses a module that determines speed of transfer and checks if updates for any of its modules are available. If yes, the update begins, the modules are re-initialised, then launched and the game starts.
Formerly, the tutorial stated that in order to achieve server emulation, one needed to know what GameGuard "tells" the server. In simpler terms, where does GameGuard update from and what is the server's structure. Using a simple firewall, one can find the site, but can't determine the server directory from which GameGuard updates. For that I think I've heard something about a program called Ethereal which caught packets upon send. But it seems, GameGuard's packets are also encrypted nowadays.
Files you will need.
====================
To start an emulation server you will need the following. An HTTPD (Web Server), the GameGuard Server Files (rev 566), and a modified host file. These files are hosted in various places, but for your convienience and security, I will provite my own sources.
a) You will first need to choose a web server. I have heard Abyss works fine, but I specifically use Apache with no problems. You can download Abyss Web Server from their website (http://www.aprelium.com/downloads/).
You can download Apache HTTP Server from their website (http://httpd.apache.org/download.cgi).
On that page there are many links. Scroll to where it says "Apache HTTP Server 2.0.55 is also available" and click "Win32 Binary (MSI Installer): apache_2.0.55-win32-x86-no_ssl.msi"
b) The GameGuard revision 566 server files can be download either (http://diddle.mpcforum.com/MapleStory/GameGuard_Rev566_Server_Files.zip),
or from Katana (http://katana.moonfruit.com/) (In the 'Hack Downloads' section)
c) The modified host file is also available at Katana,. You can also grab it (http://diddle.mpcforum.com/MapleStory/Modified_Hosts_File.zip).
Getting started installing.
===========================
This tutorial, due to my lack of knowlege, only will explain how to install Apache. I'm sorry for the inconvenience. Moving on, once you have downloaded the Apache installer, run the file and go through the prompts. It is a standard installer file, and will ask you to confirm the license aggreement and (if you selected custom installation) ask you to choose a install location. It will ask you if you would like to install it as a service on port 80, or as an executable on port 8080. You must install it as a service for this to work. Once you get to the server configuration step, it will ask you for the server name, network name, and email address.
a) If you are not on a router, skip to step 1b. If you are, you will need to visit http://www.whatismyip.com and copy your IP address down. Paste it into the server and network (first two) boxes of the Apache installer prompt. Skip to step c.
b) (If you are not on a router,) put 127.0.0.1 into the server name box and localhost into the network name box.
c) You may put any valid email address into the third box. (ex: [EMAIL="admin@uber-l33t.net"]admin@uber-l33t.net[/EMAIL], [EMAIL="mpcuser@hotmail.com"]mpcuser@hotmail.com[/EMAIL], etc.)
Extracting the GameGuard Server files.
======================================
You must pay careful attention to this step.
a) Navigate to My Computer and click Drive C, Program Files, Apache Group, Apache2, then htdocs.
b1) Create a folder named nProtect
b2) Open nProtect folder. Create a folder named GameGuard
b3) Open GameGuard folder. Create a folder named RealServer
c) Open RealServer folder. Open the zip file containing the Revision 566 GameGuard Server files.
d) Extract all files into RealServer.
Overwriting your hosts file.
============================
a) Navigate to My Computer. Click Drive C, Windows, system32, drivers, then etc.
b) Open the zip containing the modified hosts file.
c) Extract the file into the etc folder, overwriting the old file.
d) Right click hosts, click Properties. Make sure Read-Only is ticked. Click OK.
Intermission.
=============
You have now successfully installed a emulation server for MapleStory. Pat yourself on the back and let's move on to the next step! Now that you have the server installed you need a program that will allow you to control a program's memory changes. PrevX Home seems to work fine for this. Why do we need this? Well the nProtect Game Monitor obviously tries to change MapleStory to hind the process. With this, we can allow or deny some of it's actions.
Files you will need.
====================
For this obviously you only need PrevX Home. Again, this is available on Katana, but you can also get it (http://diddle.mpcforum.com/MapleStory/PrevX_Home.zip)
Configuring the software.
=========================
Extract the installer and run it. It should be fairly simple. Just click through the prompts. When it asks you to restart, do so. Wait for your computer to boot back up, if PrevX does not open automatically, open it. It will ask if you want to check for updates, or it will say it has found updates. Do not let it update. Now for the configuration.
a) In the bottom left hand corner of Prevx it says "Protection Setting." Click the arrow and set it to Off as displayed in this image. (http://diddle.mpcforum.com/MapleStory/ScreenShots/prevx1.jpg)
b) Next, on the top of PrevX you should see the tabs labeled "Status," "Security Settings," "Event History," etc. Click Security Settings as illustrated here. (http://diddle.mpcforum.com/MapleStory/ScreenShots/prevx2.jpg)
c) Now in the list there should be many settings. If you look there should be one that says "Windows Memory." Next to it, there isa small plus symbol. Click it. (http://diddle.mpcforum.com/MapleStory/ScreenShots/prevx3.jpg)
d) There are four dots. One of them is white, the rest are gray. Click the second gray dot to turn it white. This will change the Windows Memory settings in Prevx from "off" to "query." Meaning from now on it will ask you what you want PrevX to do when a program tries to change another's memory.Now you are finished. Remember, when you restart your computer, it will always ask whether you want it to update. Don't let it. Click NO, then OK.
Cheat for fun, Cheat for life.
==============================
Now that everything is set up, you could technically start MapleStory. But we don't have anything to edit MapleStory's memory with right now, do we? Visit the lovely http://www.cheatengine.org/ and click Download and then Cheat Engine 5.2. If the download is not available, get it (http://diddle.mpcforum.com/MapleStory/CheatEngine_5_2.zip) After downloading and extracting the installer file, run it. It as well is pretty straight forward. Choose an install location and you're off. If it asks you to restart your computer, please do so.
Configuring your Cheat Engine.
This step should be followed carefully. If you tick something you aren't supposed to, bad things could happen.
a) Launch Cheat Engine. It will ask you a few questions for the first launch. Click through them. You'll notice the CE logo in the top right corner; under it there is a setting button. Click it. (http://diddle.mpcforum.com/MapleStory/ScreenShots/ceconfig0.jpg)
b) There are six tabs at the top of the Cheat Engine settings. Make sure each one of them looks as displayed in the images bellow.
General Settings: (http://diddle.mpcforum.com/MapleStory/ScreenShots/ceconfig1.jpg)
Scan Settings: (http://diddle.mpcforum.com/MapleStory/ScreenShots/ceconfig2.jpg)
File Associations: (http://diddle.mpcforum.com/MapleStory/ScreenShots/ceconfig3.jpg)
Code Finder: (http://diddle.mpcforum.com/MapleStory/ScreenShots/ceconfig4.jpg)
Assembler: (http://diddle.mpcforum.com/MapleStory/ScreenShots/ceconfig5.jpg)
Extra: (http://diddle.mpcforum.com/MapleStory/ScreenShots/ceconfig6.jpg)
Note: It is important in this last tab that you not click "Stealthmode (usermode)" as described in DragonBroly's tutorial. It is not needed and can conflict with kernalmode in some unappealing ways. [eg: restart your computer when closing MapleStory]
c) Click OK on the settings dialog. You are all done configuring Cheat Engine!
Final preparations.
===================
Before launching MapleStory for your first hacking experience, theres one more thing you need to do. Deleting the GameGuard directory in your MapleStory installation isn't necessary but it can help assure that GameGuard will force itself to update.
a) Open My Computer. Click Drive C, Program Files, Wizet, then MapleStory.
b) Select the GameGuard directory, right click it and then hit Delete.
You're finished!
If you'd like to test everything out before you go hunting for pointers and addresses, you can start all the programs now if they aren't already started. If Apache was installed as a service, there should be a feather with a green arrow on it in your task bar (bottom right hand corner of your screen) (http://diddle.mpcforum.com/MapleStory/ScreenShots/apache-service.jpg). If PrevX is started and configured correctly there should be a green star (without a red X through it) in your taskbar. Al lthat leaves to open is Cheat Engine.Starting MapleStory with CheatEngine.
a) Launch Cheat Engine. Then launch MapleStory.
b1) Click the computer button on the top left hand corner of Cheat Engine. (http://diddle.mpcforum.com/MapleStory/ScreenShots/startmaple1.jpg)
b2) Scroll down and select MapleStory.exe. Click OK. (http://diddle.mpcforum.com/MapleStory/ScreenShots/startmaple2.jpg)
c) A PrevX Home popup should come up. Click in the following order. (http://diddle.mpcforum.com/MapleStory/ScreenShots/startmaple3.jpg)
Allow.
Deny.
Allow.
MapleStory should now start regularly. Another PrevX popup will come up within one to two minutes. You can dragit off to the side. Do not close, allow, or deny it until you close MapleStory.
Using CheatEngine
=================
1) Addresses
============
Today, class we will be learning about addresses. Please take your seats and remember not to pass notes or whisper, or you will be send to the principal's office. Thank you.
So let's think of some scenarios here. You're a newbie to hacking. You go into the thread named '[OMS] .21 Addresses' Seems good, yes? To your horror, though, it shows just that, only addresses. You have no idea what to do with them, much less what Tick ZF means. Well, I am your shepard! I will guide you lost sheep to the ultimate hacking experience!
Most of the time when a thread just gives you an address and the words "Tick ZF" or "EAX 1," it means you are changing the addresses registers. This is done through the Memory View and is explained bellow.
Changing Registers
a) In Cheat Engine click the Memory View button. (You should have familiarized yourself with the program by now. I won't be providing screenshots for this section unless it is requested a lot)
b) Hit Ctrl+G (Goto Address)
c) Type the address that was given to you or you read about. Click Ok.
d) An address should now be highlighted on the top of the list. Right click that and select 'Change registers at this location.'
e) Depending on what it said in the thread will determine what you do here. If it tells you to Tick ZF, or says ZF=0, Tick the ZF box once. It's simple. If it says EAX 1, tick the EAX box, and type 1 into the space next to it. We'll do some more complicated things later.
MapleStory Global 0.21 Addresses
Unlimited Jump: Allows you to jump continuously one after another. You must hold down a directional key, unless you have the second address. It's simple to find and I won't give it out unless it is told by someone else first. 5ee77a (ZF 0)
Full Godmode: Protects you from melee, magic, and object damage. You must be damage first before it is activated on each map you enter. 5b66c2 (ZF 0)
Melee Godmode: There are two addresses for this. One protects you from objects and monster damage. 5C0E03 (ZF 0) And the other only protects your from objects. 5C0E5F (ZF 0)
Super Tubi: Tubi is a nickname for looting items much faster than normal. This address apparently loots faster than Tubi, making it Super Tubi! (Credits to TKC for finding this) 4697f8 (ZF 1) Note, if ZF 0 was only one ZF box, then ZF 1 must be two.
Fast Attack Speed: Careful. This one will disconnect you. It obviously increases your attacking speed. Set EAX to 0 or lower. 424422 (EAX <= 0)
Attack Speed (500/250): Sets your attack speed to double the normal. 4239d3 (EAX 1)
Clientsided Darksight: Makes players on the map look as though they have darksight. Note, clientsided means that it only affects what YOU see on your MapleStory client. 5b67c1 (ZF 0)
Clientsided Invisibility: Makes players on the map seem invisible. Their character disappears, leaving only their name. Again, this is only viewable by you. Others will not be able to see the same results. 5b67d3 (ZF 0)
2) Pointers
===========
Class, things are progressing nicely, lets keep it this way Susie, don't throw that paper airplane!
As stated in Dark Byte's thread on the Cheat Engine Forum (http://forum.cheatengine.org/viewtopic.php?t=79)
Quote:
Originally Posted by Dark BytePointers are 4 byte values that hold the the address of a memorylocation instead of a normal value.
That address is used by the game to find out where to store and look for it's data. E.g: 10 bytes after the pointer to the start of the player data is health, 14 bytes after the start of the player data is armor, 18 bytes after the player is ammo etc.When you read a thread and it just says "50000a + C," or "Address: 50000a, Offset: C" that is a pointer. Pointers are not manipulated in the Memory Viewer as registers are. They are dealt with in the main Cheat Engine window. So close the memory viewer now if it is open.
a) Click 'Add Address Manually.' (Opposite the Memory View button)
b) Do not type any addresses in the Address box, instead, click "Pointer."
c) The words "This pointer points to: ??????" should come up. Bellow that, there are two boxes. One says "Address of pointer," the other says "Offset (Hex)." Type the address in the first, and the offset (if "50000a + C" if your pointer, "C" is your offset) in the second. Note: This pointer points to: ????? shoulod have changed.
d) Click ok. An address should have popped up in your cheat table. Now if the thread said to "Freeze @ 0," that would mean you need to change the value of the pointer to 0, and then click the freeze box. If you double click the address in the Value column, you can change it that way. On the far left, there is a column labeled Freeze. If you tick the box, it will freeze the value so it does not change.
MapleStory Global 0.21 Pointers
Unlimited Attack: MapleStory prevents you from attacking in one posistion over 100 timesi n a row. This will disable that limit.
6C60F4 + D60 (Freeze @ 0)
Anti-breath: When you attack, you cannot equip an item or change channels for a few seconds. Same goes for when you get hit by a monster or object. This disables that.
6C60F4 + 230 (Freeze @ 0)
NOTE: The following are not pointers, they are just manually added addresses to the Cheat Table. You can add them by simply typing the address (without clicking pointer) and then changing the Type of Byte if necessary.
Tubi: This address will allow you to pick up items without the normal delay you get.
6C91A8 (1 byte) Freeze @ 0
Let's take it nice and easy now. You may be wondering where all the vacs are. Well I've put them in another section of course. Gosh, silly.
3) Vacuums
==========
Vacuum hacks in theory will take all the monsters on the map and move them to a desired location. Depending on the type of vacuum you use, dpeends on where they are moved to exactly.
With the 'wall' vacuum, you are changing the wall boundries of the map so that the mosnters will spawn to one point, while this works to an extent, if you change channel, you will be sucked to that point as well. Pointers are used for this vacuum.
With 'DupeX' vacuum, depending on the flavor you want, normal or monster, either all the monsters will be vacuumed to your posistion and follow you, or they will stay stationary. A auto-assemble injection code is used for this vacuum followed by a few register changes.
With a client sided 'EAX' vacuum, you and all monsters and NPCs will automatically be sucked to the point you input. Other players will not see you move from where you origionally were. This vacuum uses Hexadecimal converted X and Y coordinated inserted into the EAX register of an address.
With a server sided 'EAX' vacuum, you can specify a Y axis to be sucked to, along with all monsters and NPCs. Once there, you can walk anwhere on the Y axis, including on the air. When you jump, though, you will fall until you hit a surface, and then by sucked back to the Y axis. A noticable different between this and the clientsided version is that the other players will see you i nthe posistion you are really in. To use this vacuum, the same is done for client sided, except it uses different addresses. Optionally, you can use the X axis too, but some like to use a DupeX or Wall with this vacuum, so they can move still.
So now that you have all the information on these wonderful hacks, choose one you'd like to test drive.
MapleStory Global 0.21 Vacuums
a) Wall
=======
Add the following addresses manually to your Cheat Table.
Left Wall: 6C5794 (address) + 4 (offset);
Right Wall: 6C5794 (address) + C (offset);
Top Wall: 6C5794 (address) + 8 (offset);
Bottom Wall: 6C5794 (address) + 10 (offset);
X Coordinate: 6C6130 (address) + 564 (offset);
Y Coordinate: 6C6130 (address) + 568 (offset);
Your X and Y coordinates are the posistion of your character on the map. (OMG you're algebra class paid off?) The left, right, top and bottom walls are the boundries of the map.
To use this vacuum, move to a posistion you would like to suck the mosnters to. Generally, you must be in an area where the mosnters will not get stuck on the platforms when they are sucked. That means no platforms can be above or bellow you. It has to be somewhat of an empty area. Usually the far left and right are good wall vacuum locations.
When you have found an area, look at your X and Y coordinates. Double click your left wall value and change it to your X coordinate. Do the same for your right wall value. For your top and bottom all values, change them to your Y coordinate.
If you do not want to be sucked in with the rest of the monsters, do not change channel. To have all the mosnters spawn in your new vacuum area, you need to go through the map and kill everything. From then on, the monster will spawn within the new designated boundries.
==================================================================================================
Source of security hole:
INCA nProtect Gameguard
Methods of propagation: http://eng.nprotect.com/partner.htm
Vulnerable Operating Systems:
Windows 2000
Windows XP
Windows 2003
Non-Vulnerable Operating Systems:
Windows 9x
Vulnerability:
nProtect Gameguard is an application bundled with multiplayer games which
hides the game application process, monitors the entire memory range,
terminates applications defined by the game vendor and INCA to be cheats,
blocks certain calls to DirectX functions, and auto-updates itself.
To achieve some of these ends the program uses a kernel driver by the name
of nppt9x.vxd (Windows9x) and npptnt2.sys (Windows NT).
Due to the nature of Windows 9x design, the vulnerability we are about to
discuss has no bearing. A malicious individual could achieve the same ends
on Windows 9x without the need of the npptnt2.vxd driver.
This kernel mode driver allows any process to access it, and it modifies the
I/O permission mask for the calling process to allow unrestricted I/O in
user mode. The design of modern operating systems does not generally allow
for any I/O access from user mode code for system stability and security.
The driver uses undocumented kernel function Ke386SetIoAccessMap and
Ke386IoSetAccessProcess to achieve this; the driver is very similar to the
PortTalk sample available at http://www.beyondlogic.org/porttalk/porttalk.htm.
Allowing a process unrestricted I/O access has the following risks:
1. If the process behaves unexpectedly (for example, a stack corruption
returning to arbitrary code), I/O instructions could be issued, leading to
potential problems with the system, bad data, etc.
2. A malicious process could elevate its privilege level on the system by
using direct hardware access to read / write the hard disk, program the DMA
controller, etc., or it could damage the system by resetting CMOS,
formatting the hard drive, etc.
The driver is installed as a system service. Even when Gameguard and the
multiplayer game(s) are closed, the driver continues running. The driver is
accessible under a non-admin account and is activated every boot. It does
not uninstall when the application is removed and in fact will not even
uninstall if selected in Device Manager and told to uninstall. The driver
must be deleted manually, and the registry must be edited to remove the
remaining reference.
It is true that even with this vulnerabilty the user must still be tricked
into running a malicious application that exploits it. However, in South
Korea, where the Gameguard service is widely used, net cafes have become
part of the social fabric. These machines are ripe fruit for damage.
At the more challenging level, one could use this hardware access to turn
the PC into a zombie. One could datamine information (bypassing NTFS
permissions), commit DDoS attacks, or escalate privileges on the system, by
putting the IDE controller into PIO mode, searching the disk for the system
DLLs, and replacing them with code altered to grant admin privilege. The
possibilities at this level of hardware access are nearly endless.
The nProtect Gameguard program is very rare here in North America, despite
the impressive partner list of INCA. It would be premature, however, to
presume that the installed base for this exploit is tiny. Just two of the
games on the INCA partner list - Lineage I and Lineage II - have a total of
four million active subscribers worldwide. This is not including the users
who have cancelled their accounts with a game service that uses Gameguard,
or future buyers who will purchase a game service that uses Gameguard.
Reproduction and Proof of Concept:
See attached NPPTNT2Access.cpp for proof of concept attack.
See http://www.lineage2.com/pds/pds_ts_client.html to download the Lineage
II PTS client, which is bundled with Gameguard. Please make sure to run the
lineageii.exe in order to patch up to the newest version. The driver is not
initially installed until the first login to the game world. In order to
install the driver without having an active subscription, please add the
following registry keys, which are standard for a non-PnP or NT4-style
driver, and reboot.
--------------------------------------------------------------------------------------------------
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NPPTNT2]
"Type"=dword:00000001
"Start"=dword:00000001
"ErrorControl"=dword:00000001
"ImagePath"=hex(2):5c,00,3f,00,3f,00,5c,00,43,00,3a,00,5c,00,57,00,49,00,4e,
00,\
44,00,4f,00,57,00,53,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,\
00,5c,00,6e,00,70,00,70,00,74,00,4e,00,54,00,32,00,2e,00,73,00,79,00,73,00,\
00,00
"DisplayName"="NPPTNT2"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NPPTNT2\Security]
"Security"=hex:01,00,14,80,90,00,00,00,9c,00,00,00,14,00,00,00,30,00,00,00,0
2,\
00,1c,00,01,00,00,00,02,80,14,00,ff,01,0f,00,01,01,00,00,00,00,00,01,00,00,\
00,00,02,00,60,00,04,00,00,00,00,00,14,00,fd,01,02,00,01,01,00,00,00,00,00,\
05,12,00,00,00,00,00,18,00,ff,01,0f,00,01,02,00,00,00,00,00,05,20,00,00,00,\
20,02,00,00,00,00,14,00,8d,01,02,00,01,01,00,00,00,00,00,05,0b,00,00,00,00,\
00,18,00,fd,01,02,00,01,02,00,00,00,00,00,05,20,00,00,00,23,02,00,00,01,01,\
00,00,00,00,00,05,12,00,00,00,01,01,00,00,00,00,00,05,12,00,00,00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NPPTNT2\Enum]
"0"="Root\\LEGACY_NPPTNT2\\0000"
"Count"=dword:00000001
"NextInstance"=dword:00000001
Solutions/Fixes:
nProtectRemover.cpp source has been provided to allow the creation of a
self-removal tool.
It is important to note the following:
Under an admin account, Gameguard will automatically replace any deleted
piece of itself upon the launching of the game application. Under a
non-admin account, the game application will not even function without the
driver in place. The user is forced, by fears of being compromised or by
the simple fact that the game will not run, not to play at all. The
alternative is for the user to exercise extreme caution in the applications
he or she chooses to run. Virus scanners will not detect or warn a user in
advance. In light of these issues, the burden upon the user is very high.
References: http://eng.nprotect.com/nprotect_gameguard.htm http://eng.nprotect.com/index.html http://www.inca.co.kr/ http://eng.nprotect.com/partner.htm http://www.mmogchart.com/ http://www.beyondlogic.org/porttalk/porttalk.htm http://www.lineage2.com/pds/pds_ts_client.html
--------------------------------------------------------------------------------------------------
Credit:
The North American Lineage II Community.
-NPPTNT2Access.cpp
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows
headers
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <winioctl.h>
#include <conio.h>
int main(int argc, char* argv[])
{
bool bCall = true;
// check args - if there is an arg and it is 0, don't call the IO control.
if (argc > 1 && 0 == strcmp(argv[1], "0"))
{
bCall = false;
}
puts("Opening \\\\.\\NPPTNT2\r");
HANDLE hFile = CreateFile("\\\\.\\NPPTNT2", 0, 0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
if (hFile != INVALID_HANDLE_VALUE)
{
if (bCall)
{
puts("Calling DeviceIoControl\r");
DWORD dwRet = 0;
// Take this line out and the _inp will give you an AV
DeviceIoControl(hFile, 0x958A2568, 0, 0, 0, 0, &dwRet, 0);
}
puts("About to _inp(0x378)\r");
__try
{
_inp(0x378);
}
__except(1)
{
puts("Failed reading port\r");
return 0;
}
puts("Success reading port\r");
-nProtectRemover.cpp
//nProtectRemover, delete the security threat nProtect from your system.
//Coded by MugiMugi
//I dont take any responsibility if this harm your system, but I higly doubt
it will.
#include <windows.h>
#include <winsvc.h>
#include <winbase.h>
#include <string>
#include <iostream>
bool StopService(LPCTSTR pszInternalName);
bool ServiceRemove(LPCTSTR pszInternalName);
int main(int, char**) {
std::string tmp;
std::cout << "This app will remove nProtect from your system, do you want
to continue type YES with big letters?\n:> ";
std::cin >> tmp;
if (tmp!="YES")
return 0;
std::cout << "Removing nProtect" << std::endl;
//Stoping npptnt2 service
if (!StopService("npptnt2"))
{
std::cout << "Unable to stop device npptnt2" << std::endl;
return 0;
}
//deleting npptnt2 service
if (!ServiceRemove("npptnt2"))
{
std::cout << "Unable to delete device npptnt2" << std::endl;
return 0;
}
//Deleting the registry stuff
RegDeleteKey(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\\NPPTNT
2\\Security");
RegDeleteKey(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\\NPPTNT
2\\Enum");
RegDeleteKey(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\\NPPTNT
2");
//Deleting npptnt2.sys and nppt9x.vxd
char buffer[MAX_PATH];
GetSystemDirectory(buffer,MAX_PATH);
std::string base(buffer);
std::string filename = base + "\\npptnt2.sys";
DeleteFile(filename.c_str());
filename = base + "\\nppt9x.vxd";
DeleteFile(filename.c_str());
//Bye bye
return 0;
}
// Stop service
bool StopService(LPCTSTR pszInternalName) {
SC_HANDLE hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
if (NULL == hSCM)
return false;
SC_HANDLE hService = OpenService(hSCM, pszInternalName, SERVICE_STOP);
if (NULL == hService)
{
CloseServiceHandle(hSCM);
return false;
}
SERVICE_STATUS ss;
bool bSuccess = ControlService(hService, SERVICE_CONTROL_STOP, &ss);
CloseServiceHandle(hService);
CloseServiceHandle(hSCM);
return bSuccess;
}