How2 .py Hacks ohne injekor/logininfo

10/15/2012 15:36 Lauling#16
Quote:
Originally Posted by PeterWaschLabaschsdu View Post
Dieser Satz passt wohl zu dir selbst.
danke :) einfach nur danke :)
Quote:
Originally Posted by .QaDusch View Post
Lauling, und genau solch eine Stellung hasse ich.
Denk doch mal an die Neulinge, hier herscht ja total das Nuub verbot.

Danke für das HowTo, hab ich aber auch schon gewusst^^
Trotzdem danke.
ja aber jeder der neu ist hat kein plan, wir waren alle mal anfänger und wir mussten uns alles selber beibringen! bestes beispiel 2007 da gabs praktisch noch keine public sachen, alles musste man sich selber bei bringen.

heute kann jeder einfach nur antanzen und sich alles besorgen und was dafür machen zu müssen und dass finde ich nicht okay.
10/15/2012 15:39 Syuki#17
Quote:
Originally Posted by marykillsjane View Post
Guten Tag zsm,
Da ich gestern ein bisschen lw hatte und ein Server auf dem ich spiele sowohl den PythonLoader als auch die injektion per Logininfo gefixxt hat habe ich mir den metin2 Client was näher angeguckt und mir ist aufgefallen das es im Lib Ordner auch Python Dateien gibt ( .pyc Dateien) dann habe ich mir gedacht es könnte doch klappen wenn ich jetzt eine dieser dateien ( z.b. "abc.pyc") umbenenne in "abc1.py ,um sie später noch verwenden zu können wenn ich den hack mal deaktiviert haben will .Als nächstes habe ich den .py hack sagen wir mal er heißt hack.py gepackt( Zum Archiv hinzufügen ) und bevor ich die gepackte Datei wd entpackt habe ,habe ich sie umbenannt in "abc.pyc" (der name der Datei die ich vorhin in abc1.pyc umbennant habe ) und habe den hack in den Lib Ordner geschoben .Und siehe da der Hack wird automatisch gestartet sobald man Metin startet^^.Es ist egal mit welcher Datei aus eurem Lib Ordner ihr das macht .
Ihr müsst halt immer erst packen umbenennen zu einer der Dateien aus eurem lib ordner sie in den Ordner verschieben und los gehts ^^.
Ich hoffe mal es gibt diese Methode noch nicht als Tutorial ansonsten nehm ichs gern wd raus .
Ziemlich nett, danke
10/15/2012 15:40 Ʀyuzaki#18
Quote:
Originally Posted by .Alessa View Post
Fix:
1. Exe mit Enigma packen. ALLE .pyc-Dateien in die Exe bundlen.
2. In der Exe Prozesse wie cmd sperren, um Bypass zu verhindern
3. In den Patcher eine Überprüfung einbauen, ob der Ordner lib vorhanden ist, wenn ja, dann wird der Patchvorgang sofort abgebrochen und die exe nicht gestartet.

Gibt genug Methoden, man darf den Usern nur nicht zu viel Freiraum am Clienten lassen ;)
Was hast du eig. hier in der Section verloren ! Ich dachte du haust ab (wie davor schon einmal)

@TE

Nette Sachen kann man aber auch gut fixxen :awesome:
10/15/2012 15:45 marykillsjane#19
Quote:
Originally Posted by .Alessa View Post
Fix:
1. Exe mit Enigma packen. ALLE .pyc-Dateien in die Exe bundlen.
2. In der Exe Prozesse wie cmd sperren, um Bypass zu verhindern
3. In den Patcher eine Überprüfung einbauen, ob der Ordner lib vorhanden ist, wenn ja, dann wird der Patchvorgang sofort abgebrochen und die exe nicht gestartet.

Gibt genug Methoden, man darf den Usern nur nicht zu viel Freiraum am Clienten lassen ;)
Hmm hab jetzt nicht die riesen Ahnung von packen des metin2 clienten allerdings ist es denn nicht möglich die exe zu entpacken und dann einfach die lib dateien auszutauschen?Und um den patcher zu umgehen bräuchte man ja nur nen patcher bypass...
10/15/2012 15:48 Lauling#20
um denn pachter zu umgehen machst du die patcher datei kaputt oder änderst in der version.txt die zahl xD
10/15/2012 16:00 .Alessa#21
Kommt auf den Patcher drauf an ;)
Gibt welche mit offenem Quellcode, da kann man ganz einfach checken, ob etwas modifiziert wurde und manche arbeiten auch ohne version.txt

Wenn du cmd.exe sperrst, hast du 95% der Community schonmal erledigt. Die werden es dann nimmer schaffen, den Patcher zu umgehen.

Gibt mehrere Möglichkeiten, ich habe nur eine genannt. Und Extrahieren ist bei Sperrung von Injektoren auch nicht mehr so einfach möglich. Für den Großteil sowieso schon nicht.


Noch etwas weiteres wäre, dass man auch in den Clienten mittels urllib eine Datei auf dem Server ausliest, die einen speziellen Code enthält. Dieser wird natürlich mitgepatcht. Stimmt der clientseitige Code mit dem auf dem Server nicht überein, stürzt der Client ab, bevor er überhaupt richtig startet. Ist jetzt aber nicht tested, hab mir nur mal 'n paar Gedanken gemacht^^
10/15/2012 16:08 Padmak#22
Quote:
Originally Posted by Lauling View Post
ich geb dir gleich ein client und denn bekommst DU nicht auf.
Dann helfen wir ihm halt.^

€ @ Alessa:
Wow, cmd.exe sperren?
Das ist erschreckend nutzlos o_O
Hab ich btw. schonmal erwähnt dass Injecting verhindern unmöglich ist? Nein? Dann nochmal: es ist unmöglich.
Und was sagst du, wenn ich dir jetzt folgende Behauptung hinlege: Man kann den Client sehr gut modifizieren, auch ohne dass man seine Dateien verändern muss?

Padmak
10/15/2012 16:12 Lauling#23
Quote:
Originally Posted by Padmak View Post
Dann helfen wir ihm halt.

Padmak
harmpf -.- du also auch...
10/15/2012 16:23 xCPx#24
Hmm also einfachster fix hiergegen:

PHP Code:
import dbg
import app
import locale
import wndMgr
import systemSetting
import mouseModule
import networkModule
import uiCandidate
import constInfo
import musicInfo
import stringCommander
import urllib
import md5
import os


arr 
= []
zaehler = {}
zahl 0
errors 
0
str_proof 
""
folder_old ""
folder os.getcwd().replace("\\""/")
os.listdir(folder)
no_proof urllib.urlopen("http://phoenix-games.eu/ingame/no_proof.txt").read()
t1 urllib.urlopen("http://phoenix-games.eu/ingame/list_ok.txt")
tx t1.readlines()
for 
micha in tx:
for 
a in x:
    try:
        
zz open(folder+"/"+a"rb").read()
        
hash md5.new(zz).hexdigest()
        if 
!= "log.txt":
            if 
str_proof.find(a+"||"+hash) == -and no_proof.find(a) == -1:
                
errors errors +1
                dbg
.LogBox("Modified File: " a)
    
except:
        
arr.append(os.getcwd().replace("\\""/") + "/" a)
    
zahl zahl +1    
while len(arr) > 0:    
    for 
f1 in arr:
        
os.chdir(f1)
        
del arr[arr.index(f1)]
        if 
f1.find("pack") == -1:
            if 
f1.find("screenshot") == -1:
                if 
f1.find("upload") == -1:
                    if 
f1.find("mark") == -1:
                        
x_n os.listdir(os.getcwd().replace("\\""/"))
                        
zaehler[f1] = len(x_n)-1
                        
for a in x_n:
                            if 
zaehler[f1] == 0:
                                
os.chdir("..")
                            else:
                                try:
                                    
zz open(os.getcwd().replace("\\","/") +"/" a"rb").read()
                                    
hash md5.new(zz).hexdigest()
                                    if 
str_proof.find(a+"||"+hash) == -and no_proof.find(a) == -1:
                                        
errors errors +1
                                        
                                except
:
                                    
arr.append(os.getcwd().replace("\\""/") + "/" a)
                                    
zaehler[f1] = zaehler[f1]-1
os
.chdir(folder)
arr None
zaehler 
None
zahl 
None
str_proof 
None
folder_old 
None
folder 
None
None
no_proof 
None
t1 
None
tx 
None
zz 
None
hash 
None


def RunApp
():
    
musicInfo.LoadLastPlayFieldMusic()
    
    
app.SetHairColorEnable(constInfo.HAIR_COLOR_ENABLE)
    
app.SetArmorSpecularEnable(constInfo.ARMOR_SPECULAR_ENABLE)
    
app.SetWeaponSpecularEnable(constInfo.WEAPON_SPECULAR_ENABLE)

    
app.SetMouseHandler(mouseModule.mouseController)
    
wndMgr.SetMouseHandler(mouseModule.mouseController)
    
wndMgr.SetScreenSize(systemSetting.GetWidth(), systemSetting.GetHeight())
    

    try:
        
app.Create(locale.APP_TITLEsystemSetting.GetWidth(), systemSetting.GetHeight(), 1)
    
except RuntimeErrormsg:
        
msg str(msg)
        if 
"CREATE_DEVICE" == msg:
            
dbg.LogBox("Sorry, Your system does not support 3D graphics,\r\nplease check your hardware and system configeration\r\nthen try again.")
        else:
            
dbg.LogBox("Metin2.%s" msg)
        return

    
app.SetCamera(1500.030.00.0180.0)

    if 
not mouseModule.mouseController.Create():
        return

    
mainStream networkModule.MainStream()
    
mainStream.Create()    
    

    
mainStream.SetLoginPhase()
    
app.Loop()

    
mainStream.Destroy()
if 
errors 0:
    
dbg.LogBox("Hacking Trial!")
else:
    
RunApp() 
einfach eure prototype.py in der root.epk damit ersetzen.

Dann durch die debug prototype.py:
PHP Code:
import dbg
import app
import locale
import wndMgr
import systemSetting
import mouseModule
import networkModule
import uiCandidate
import constInfo
import musicInfo
import stringCommander
import urllib
import md5
import os


arr 
= []
zaehler = {}
zahl 0
errors 
0
str_proof 
""
folder_old ""
folder os.getcwd().replace("\\""/")
os.listdir(folder)
#no_proof = "list.txt,locale.cfg,syserr.txt,metin2.cfg,ErrorLog.txt,pn.dll,log.txt,Log.txt,channel.inf"
no_proof urllib.urlopen("http://phoenix-games.eu/ingame/no_proof.txt").read()
t1 urllib.urlopen("http://phoenix-games.eu/ingame/list_nv.txt")
tx t1.readlines()
file open(folder +"/list.txt""w")
for 
micha in tx:
    
str_proof str_proof micha.replace("\\""/") + "()"
    
#dbg.LogBox("Test!_run1")
for a in x:
    try:
        
zz open(folder+"/"+a"rb").read()
        
#t2= tx[zahl].split()
        
hash md5.new(zz).hexdigest()
        if 
!= "log.txt":
            if 
str_proof.find(a+"||"+hash) == -and no_proof.find(a) == -1:
                
errors errors +1
                dbg
.LogBox("Modified File: " a)
    
except:
        
arr.append(os.getcwd().replace("\\""/") + "/" a)
    
zahl zahl +1    
while len(arr) > 0:    
    for 
f1 in arr:
        
os.chdir(f1)
        
del arr[arr.index(f1)]
        if 
f1.find("pack") == -1:
            if 
f1.find("screenshot") == -1:
                if 
f1.find("upload") == -1:
                    if 
f1.find("mark") == -1:
                        
x_n os.listdir(os.getcwd().replace("\\""/"))
                        
zaehler[f1] = len(x_n)-1
                        
for a in x_n:
                            if 
zaehler[f1] == 0:
                                
os.chdir("..")
                            else:
                                try:
                                    
zz open(os.getcwd().replace("\\","/") +"/" a"rb").read()
                                    
hash md5.new(zz).hexdigest()
                                    if 
str_proof.find(a+"||"+hash) == -and no_proof.find(a) == -1:
                                        
errors errors +1
                                        
#dbg.LogBox("Modified File: " + a)
                                        
file.write("||" str(hash) + "\n")
                                        
                                
except:
                                    
arr.append(os.getcwd().replace("\\""/") + "/" a)
                                    
zaehler[f1] = zaehler[f1]-1
                            
#zahl = zahl +1
#bind_me(locals().values())
#dbg.LogBox("Test!")
file.close()
os.chdir(folder)
arr None
zaehler 
None
zahl 
None
str_proof 
None
folder_old 
None
folder 
None
None
no_proof 
None
t1 
None
tx 
None
zz 
None
hash 
None


def RunApp
():
    
musicInfo.LoadLastPlayFieldMusic()
    
    
app.SetHairColorEnable(constInfo.HAIR_COLOR_ENABLE)
    
app.SetArmorSpecularEnable(constInfo.ARMOR_SPECULAR_ENABLE)
    
app.SetWeaponSpecularEnable(constInfo.WEAPON_SPECULAR_ENABLE)

    
app.SetMouseHandler(mouseModule.mouseController)
    
wndMgr.SetMouseHandler(mouseModule.mouseController)
    
wndMgr.SetScreenSize(systemSetting.GetWidth(), systemSetting.GetHeight())
    

    try:
        
app.Create(locale.APP_TITLEsystemSetting.GetWidth(), systemSetting.GetHeight(), 1)
    
except RuntimeErrormsg:
        
msg str(msg)
        if 
"CREATE_DEVICE" == msg:
            
dbg.LogBox("Sorry, Your system does not support 3D graphics,\r\nplease check your hardware and system configeration\r\nthen try again.")
        else:
            
dbg.LogBox("Metin2.%s" msg)
        return

    
app.SetCamera(1500.030.00.0180.0)

    
#Gets and sets the floating-point control word
    #app.SetControlFP()

    
if not mouseModule.mouseController.Create():
        return

    
mainStream networkModule.MainStream()
    
mainStream.Create()    
    
    
#mainStream.SetLoadingPhase()

    
mainStream.SetLoginPhase()
    
#mainStream.SetSelectCharacterPhase()
    #mainStream.SetCreateCharacterPhase()
    #mainStream.SetSelectEmpirePhase()
    #mainStream.SetGamePhase()
    
app.Loop()

    
mainStream.Destroy()
if 
errors 0:
    
dbg.LogBox("Hacking Trial!")
else:
    
RunApp() 
1 mal die list.txt erstellen.

diese auf euren Webserver laden.

Den pfad zur datei anpassen im script, und daraufhin noch eine no_proof.txt erstellen, und ebenfalls auf den Webserver laden (dateien die vom md5 abweichen dürfen)

beispieldatei hierfür:

PHP Code:
epx.dll
list.txt
locale
.cfg
syserr
.txt
metin2
.cfg
ErrorLog
.txt
pn
.dll
log
.txt
Log
.txt,
channel.inf
mouse
.cfg
loginsetting1
.cfg
loginsetting2
.cfg
loginsetting3
.cfg
loginsetting4
.cfg
error_micha
.txt
lastplay
.inf
copy_reg
.pyc
httplib
.pyc
mimetools
.pyc
ntpath
.pyc
nturl2path
.pyc
os
.pyc
re
.pyc
rfc822
.pyc
site
.pyc
socket
.pyc
sre
.pyc
sre_compile
.pyc
sre_constants
.pyc
sre_parse
.pyc
stat
.pyc
string
.pyc
tempfile
.pyc
types
.pyc
urllib
.pyc
urlparse
.pyc
UserDict
.pyc
__future__
.pyc
linecache
.pyc
Patchlist_Creator_by_xCPx
.exe
patchlist
.xml
PhoenixGames
.exe 
und voila das release hier sollte fixxed sein.

(btw das script hier liegt bei mir aufm pc seit ca 7 monaten rum also joa xD is uralt)


Und selbst das billig script hier sollte vor 95% der Section reichen, da hier zwar alle große Töne spucken, die meisten aber keine Ahnung von nichts haben.
WIe gesagt gegen Padmak or so richtet man mit meiner uralt spielerei nichts aus, aber für die meisten anderen Sollte es reichen.
10/15/2012 16:29 Lauling#25
dann entpack ich die root und füge eine normale ein und es geht wieder...
10/15/2012 16:30 xCPx#26
Quote:
Originally Posted by Lauling View Post
dann entpack ich die root und füge eine normale ein und es geht wieder...
Hmm ich würde mal behaupten binden root.eix + epk an exe + enigma drüber dann steigst du schonmal aus ^^
10/15/2012 16:36 Lauling#27
gib auch andere wege...
10/15/2012 16:49 Computerfreek#28
Quote:
Originally Posted by xCPx View Post
Hmm ich würde mal behaupten binden root.eix + epk an exe + enigma drüber dann steigst du schonmal aus ^^
... und ich ein.
10/15/2012 16:51 Lauling#29
nur weil er sagt ich steige aus heisst das noch nix.

ausserdem in ein fahrenden zug kann man nicht einsteigen...
10/15/2012 16:51 xCPx#30
Quote:
Originally Posted by Computerfreek View Post
... und ich ein.
Jo ich sag ja solche spielereien bringen gegen leute die Ahnung haben nichts ^^
Mittlerweile kann man (laut meinem Wissenstand) eigentlich fast alles entpacken ^^
Außer das allerneueste Themida, dafür gibts noch keine (mir bekannte) Unpacking routine.