Register for your free account! | Forgot your password?

You last visited: Today at 14:25

  • Please register to post and access all features, it's quick, easy and FREE!

 

Custom Trading Post

Reply
 
Old   #16
 
elite*gold: 0
Join Date: Mar 2011
Posts: 358
Received Thanks: 45
Wäre es eventuell möglich für jemanden das auf Deutsch zu übersetzen, mit meinem Schulenglisch komme ich leider nicht sooo weit.. ^^



Gint0nic is offline  
Old   #17
 
elite*gold: 5
Join Date: May 2009
Posts: 1,141
Received Thanks: 70
klappt das noch??
Wäre geil wenns noch ne andere möglichkeit geben könnte die so ist und nicht so klompliziert sind ^^


hans2116 is offline  
Old   #18
 
elite*gold: 0
Join Date: Sep 2009
Posts: 91
Received Thanks: 7
Funktioniert noch und ist auch nicht kompliziert, es muss einfach die inspector.pak in den temporären ordner von gw2 kopiert werden. Damit die inspector.pak dann bei Spielstart mitgeladen wird kannst du GW2 einfach immer mit dem Tool von MegoBit starten.


Im Spiel dann einfach den Handelsposten öffnen und danach in Google Chrome als Adresse localhost:81 eingeben um auf die Oberfläche des Inspectors zuzugreifen. Dort stehen dir dann etliche Tools zu verfügung und auch eine Console in die du zb. Javascript Code eingeben kannst der dann im ingame Browser ausgeführt wird.Wenn du nun ganze Javascript Funktionen schreibst und sie einbindest, bietet dir das eine ganze Menge möglichkeiten
rommsbomms is offline  
Thanks
1 User
Old   #19
 
elite*gold: 0
Join Date: Dec 2008
Posts: 71
Received Thanks: 1
Quote:
Originally Posted by MegoBit View Post
The inspector.pak (contained in the awesomium sdk) must be placed into awesomiums working directory, typically in your temp folder starting with gw2cache-.

I've written a small tool to enable the remote debugger.
Run it to start Guild Wars 2.
Try to enter localhost:81 in Chrome.
Source:
PHP Code:
#include <iostream>
#include <vector>
#include <string>
#include <windows.h>
#include <algorithm>
#include <iterator>
#include <Psapi.h>
#include <set>

using namespace std;

enum LogLevel {
    
kLogLevel_None 0,
    
kLogLevel_Normal,
    
kLogLevel_Verbose,
};

set<wstringfindGw2() {
    
set<wstringresult;
    
HKEY hKey;
    
wstring muiCacheKeys[] = {
        
L"Software\\Microsoft\\Windows\\ShellNoRoam\\MUICache",
        
L"Software\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\Shell\\MuiCache"
    
};
    
bool success false;
    for (
int i 02i++) {
        if (
RegOpenKeyExW(HKEY_CURRENT_USERmuiCacheKeys[i].c_str(), 0KEY_READ, &hKey) == ERROR_SUCCESS) {
            
success true;
        }
    }
    if (!
success)
        return 
result;
    
int index 0;
    
wstring t L"Guild Wars 2 Game Client";
    
wchar_t path[MAX_PATH];
    
byte data[sizeof(L"Guild Wars 2 Game Client") * sizeof(wchar_t)];
    
DWORD type;
    
LSTATUS status;
    do {
        
DWORD sPath sizeof(path) * sizeof(wchar_t);
        
DWORD sData sizeof(data);
        
status RegEnumValueW(hKeyindexpath, &sPathNULL, &typedata, &sData);
        if (
status == ERROR_SUCCESS && type == REG_SZ && wstring((wchar_t*) data0sData sizeof(wchar_t) -1) == t)
            
result.insert(wstring(path0sPath));
        
index++;
    } while (
status != ERROR_NO_MORE_ITEMS);
    
RegCloseKey(hKey);
    return 
result;
}

int main(int argcchar **argv) {
////////////////////////////////////////////////////////////////////
//  Change this if you want:                                      //
    
int port 81;
    
LogLevel log_level kLogLevel_Normal;
//                                                                //
////////////////////////////////////////////////////////////////////
    
PROCESS_INFORMATION processInfo;
    
int pid;
    
set<wstringpaths findGw2();
    
cout << "start Guild Wars 2" << endl;
    
bool success false;
    for (
set<wstring>::iterator i paths.begin(); != paths.end(); i++) {
        
STARTUPINFOW info;
        
ZeroMemory(&infosizeof(info));
        if (
CreateProcessW((*i).c_str(), NULLNULLNULLTRUE0NULLNULL, &info, &processInfo)) {
            
success true;
            break;
        }
    }
    if (!
success) {
        
cout << "Error CreateProcess(...)" << endl;
        
system("pause");
        return 
1;
    }
    
WaitForInputIdle(processInfo.hProcessINFINITE);
    
CloseHandle(processInfo.hThread);
    
pid GetProcessId(processInfo.hProcess);
    
cout << "atach debugger" << endl;
    
cout << "wait for awesomium.dll" << endl;
    if (!
DebugActiveProcess(pid)) {
        
cout << "Error DebugActiveProcess(" << pid << ")" << endl;
        
system("pause");
        return 
1;
    }
    
DEBUG_EVENT e;
    
ZeroMemory(&esizeof(e));
    const 
LPDEBUG_EVENT DebugEv = &e;

    
int dwContinueStatus DBG_EXCEPTION_NOT_HANDLED;
    
SIZE_T c;
    
char backup;
    
PVOID breakPoint NULL;
    const 
char debugBreak 0xCC;
    
bool done false;
    do {
        
dwContinueStatus DBG_EXCEPTION_NOT_HANDLED;
        
ZeroMemory(DebugEvsizeof(DebugEv));

        
// Wait for a debugging event to occur. The second parameter indicates
        // that the function does not return until a debugging event occurs. 
        
WaitForDebugEvent(DebugEvINFINITE);

        
// Process the debugging event code. 
        
switch (DebugEv->dwDebugEventCode) {
        case 
EXCEPTION_DEBUG_EVENT:
            if (
breakPoint && DebugEv->u.Exception.ExceptionRecord.ExceptionAddress == breakPoint) {
                
cout << "reached debugbreak" << endl;
                
// restore backup instruction
                
WriteProcessMemory(processInfo.hProcessbreakPoint, &backupsizeof(backup), &c);
                
FlushInstructionCache(processInfo.hProcessbreakPointsizeof(backup));
                
processInfo.hThread OpenThread(THREAD_GET_CONTEXT THREAD_SET_CONTEXT THREAD_SUSPEND_RESUMEfalseDebugEv->dwThreadId);
                
CONTEXT context;
                
ZeroMemory(&contextsizeof(context));
                
context.ContextFlags CONTEXT_FULL;
                
GetThreadContext(processInfo.hThread, &context);
                
context.Eip--; // -1 to execute the backup instruction
                
cout << "patch log_level <-- " << log_level << endl;
                
WriteProcessMemory(processInfo.hProcess, (PVOIDcontext.Eax, &log_levelsizeof(log_level), &c);
                
cout << "patch port <-- " << port << endl;
                
WriteProcessMemory(processInfo.hProcess, (PVOID) (context.Eax sizeof(int)), &portsizeof(port), &c);
                
SetThreadContext(processInfo.hThread, &context);
                
CloseHandle(processInfo.hThread);
                
dwContinueStatus DBG_CONTINUE;
                
done true;
            }
            break;
        case 
EXIT_PROCESS_DEBUG_EVENT:
            return 
1;

        case 
LOAD_DLL_DEBUG_EVENT:
            
char name[MAX_PATH];
            
int ptr;
            
ptr 0;
            
ReadProcessMemory(processInfo.hProcessDebugEv->u.LoadDll.lpImageName, &ptrsizeof(ptr), &c);
            
ReadProcessMemory(processInfo.hProcess, (void*) ptrnamesizeof(name), &c);
            if (
DebugEv->u.LoadDll.fUnicode) {
                
wstring f;
                
wstring((wchar_t*) name);
                
wstring t;
                
L"awesomium.dll";

                if (
f.length() > t.length() && f.substr(f.length() - t.length(), t.length()) == t) {
                    
cout << "awesomium.dll loaded" << endl;
                    
cout << "insert debugbreak at Awesomium::WebCore::Initialize(Awesomium::WebConfig)" << endl;
                    
breakPoint = (PVOID) ((unsignedDebugEv->u.LoadDll.lpBaseOfDll 0x43D80);
                    
ReadProcessMemory(processInfo.hProcessbreakPoint, &backupsizeof(backup), &c);
                    
WriteProcessMemory(processInfo.hProcessbreakPoint, &debugBreaksizeof(debugBreak), &c);
                }
            }
            break;
        }

        
// Resume executing the thread that reported the debugging event.
        
for (int i 0&& (!ContinueDebugEvent(DebugEv->dwProcessId,
            
DebugEv->dwThreadId,
            
dwContinueStatus)); i++){
        };
    } while (!
done);
    
cout << "detach debugger" << endl;
    if (!
DebugActiveProcessStop(pid)) {
        
cout << "Error DebugActiveProcessStop(" << pid << ")" << endl;
        
system("pause");
        return 
1;
    }
    
CloseHandle(processInfo.hProcess);
    
cout << "try to enter localhost:" << port << " in Chrome" << endl;
    
Sleep(5000);
    return 
0;

Do you think you could explain how this tool works?


Kaspar Nagarian is offline  
Old   #20
 
elite*gold: 0
Join Date: Apr 2009
Posts: 793
Received Thanks: 365
Quote:
Originally Posted by Kaspar Nagarian View Post
Do you think you could explain how this tool works?
The code explains everything...
Xereon is offline  
Old   #21
 
elite*gold: 0
Join Date: Feb 2013
Posts: 640
Received Thanks: 221
do you think that would be bannable?

And I would pay 50gold for it if its done for non programmers (plugin or programm or such) =)
comets is offline  
Old   #22
 
elite*gold: 0
Join Date: Sep 2009
Posts: 91
Received Thanks: 7
Exclamation

MegoBit´s Tool doesnt work anymore after the recent Patch btw
rommsbomms is offline  
Old   #23
 
elite*gold: 0
Join Date: Mar 2009
Posts: 29
Received Thanks: 2
Hey xereon, do you have any updates on what's going on with gw2ca? It has been awefully quiet around the project. End except on ''that one site I can't seem to type in here'' (GR) I can't seem to find any info , is there another place where you guys are hanging out?


tyb51 is offline  
Reply



« Previous Thread | Next Thread »

Similar Threads
Beta-Max Online ~ 120 CAP ~ D13 ~ Custom Events ~ Custom Quests ~ Custom Areas
Fantastic Server. If reliablility is what you want then Beta-Max is for you. Unique PVP Battles - Pets - Items - Quests - Jobs - Wonga and so much...
6 Replies - SRO PServer Advertising



All times are GMT +2. The time now is 14:25.


Powered by vBulletin®
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy
Copyright ©2017 elitepvpers All Rights Reserved.