标签: hook

processDatamap_beforeStart Hook - 获取 TYPO3 中的实际 UID

我正在使用

processDatamap_beforeStart(DataHandler $dataHandler)

钩。在一个函数中,我想使用新创建的模块中的实际 Uid,但我只得到类似 NEW58106331753043.15119885 的东西。我知道有一个用于其他钩子的函数,例如substNEWwithIDs[$id]但我没有$id 是否有办法获取实际新创建的 Uid?

php hook typo3

0
推荐指数
1
解决办法
309
查看次数

Win32,如何用C++挂钩编译程序中的函数?

以此为例(在Ollydbg调试器中查看) 在此输入图像描述

第一个PUSH EBP指令是void*f(int32_t n)的开始(idk它返回的内容,只是猜测void*),我知道输入参数n在堆栈中,并且EBP + 8是指向那个变量,我猜它就像int*n =(int*)(uint32_t(EBP)+ 0x08);/*假设EBP是void*和sizeof(EBP)== sizeof(uint32_t)== sizeof(void*)并且+8数学在c ++ uint32_t和x86程序集中相同..*/

我想制作一个钩子,它将检查n是否大于7或小于0,如果是,则将其更改为1.使用ollydbg,直接编写汇编代码,我可以:修补第一个MOV EBP,对JMP的ESP指令SHORT到它后面的INT3指令(我需要7个字节),然后将(未使用的)INT3更改为MOV EBP,ESP JMP LONG 0068BCCD,其中0068BCCD是文件末尾未使用的0x000000000000的 在此输入图像描述

,然后在0068BCCD,我可以编写汇编代码来检查EBP + 8指向的int,并在必要时修改它:

PUSHAD
CMP DWORD PTR SS:[EBP+8],7
JA SHORT Error
CMP DWORD PTR SS:[EBP+8],0
JL SHORT Error
JMP SHORT Finished
Error:
PUSHAD
PUSH OFFSET TheString
CALL Onlink-x86.App::Output
ADD ESP,4
POPAD
MOV DWORD PTR SS:[EBP+8],1
Finished:
POPAD
JMP LONG 00447493
TheString:
"Warning: label assertion failed, but (pretending its 1 and) trying to ignore.."+0x00
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

哪个(如果我没有搞砸)基本上相当于

void FilterIntAtEBP_8(){
int i=*(int*)(uint32_t(EBP)+8);
if(i>7 || i<0){
Output("Warning: …
Run Code Online (Sandbox Code Playgroud)

c++ windows debugging assembly hook

-1
推荐指数
1
解决办法
2176
查看次数

WM_MOUSEMOVE GET_X_LPARAM AND GET_Y_LPARAM 抓错坐标

LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode == HC_ACTION)
    {
        if (wParam == WM_MOUSEMOVE)
        {
            cout << "X : " << GET_X_LPARAM(lParam) << " Y: " << GET_Y_LPARAM(lParam) << "\n";
        }
    }
    return CallNextHookEx(hMSHook, nCode, wParam, lParam);
}

    int _tmain() {
        HMODULE hInstance = GetModuleHandle(NULL);
        hMSHook = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, hInstance, NULL);

        MSG Msg;

        while (GetMessage(&Msg, NULL, 0, 0)) { DispatchMessage(&Msg); }
        ::ReleaseDC(0, dc);

        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

结果 = 总是返回错误的坐标,

示例 = X = -1844,Y = 79, …

c++ hook winapi mousemove

-1
推荐指数
1
解决办法
662
查看次数

如何通过另一个程序访问一个程序的内存变量?可能挂钩

这是第一个名为hooktry.cpp的程序

 #include <iostream>
 #include<stdio.h>
 using namespace std;

class c1{
int c=2;

public:

int * printadd()
{
    int *p=&c;
    printf("the address of c is %d\n",p);
    return p;

}
void printv()
{
    printf("the value is ===%d\n",c);
}



};

int main(int argc, const char * argv[]) {

int *p;
c1 mem;
char c;
p=mem.printadd();
mem.printv();
*p=12;
scanf("%c",&c);
mem.printv();
return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:c的地址是1606416304
,值是=== 2

同时运行另一个代码hooktry2.cpp

#include <iostream>
using namespace std;



int main(int argc, const char * argv[]) {
// insert code here...
int …
Run Code Online (Sandbox Code Playgroud)

c++ hook

-2
推荐指数
1
解决办法
157
查看次数

WinAPI在记事本中挂钩CreateFileW

我制作了一个DLL,它应该CreateFileW从记事本挂钩,但它崩溃了.经过调试后我发现它导致了HookedCreateFile函数第一行的堆栈溢出:

截图

(它说它导致地址异常错误......)

异常点处的callstack:

调用堆栈?

我的代码:

typedef HANDLE(WINAPI * CreateFileFn)(
    LPCWSTR lpFileName,
    DWORD dwDesiredAccess,
    DWORD dwShareMode,
    LPSECURITY_ATTRIBUTES lpSecurityAttributes,
    DWORD dwCreationDisposition,
    DWORD dwFlagsAndAttributes,
    HANDLE hTemplateFile);

CreateFileFn oCreateFile = (CreateFileFn)GetProcAddress(GetModuleHandleA("kernel32.dll"), "CreateFileW");

HANDLE WINAPI HookedCreateFile(
    LPCWSTR lpFileName,
    DWORD dwDesiredAccess,
    DWORD dwShareMode,
    LPSECURITY_ATTRIBUTES lpSecurityAttributes,
    DWORD dwCreationDisposition,
    DWORD dwFlagsAndAttributes,
    HANDLE hTemplateFile)
{
    //std::cout << "Hello!" << std::endl;

    return oCreateFile(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
}
Run Code Online (Sandbox Code Playgroud)

我使用DetourFunction的是Microsoft Detours:

DetourFunction((PBYTE)oCreateFile, (PBYTE)HookedCreateFile);
Run Code Online (Sandbox Code Playgroud)

c++ stack-overflow hook winapi detours

-2
推荐指数
1
解决办法
133
查看次数

错误C2297:'*':非法,右操作数的类型为'BYTE*'

为什么在此行上出现此错误?

*(BYTE*)(dwAddr + 5) = 0xC3;
Run Code Online (Sandbox Code Playgroud)

Main.cpp(34):错误C2297:'*':非法,右操作数的类型为'BYTE*'

void PushRetHook(DWORD dwAddr, LPVOID dwNew, int size)
{
    DWORD OldProt;
    VirtualProtect((void*)dwAddr, size, PAGE_EXECUTE_READWRITE, &OldProt);
    memset((void*)(dwAddr), 0x90, size);
    *(BYTE*)dwAddr = 0x68;
    *(DWORD*)(dwAddr + 1) = (DWORD)dwNew
    *(BYTE*)(dwAddr + 5) = 0xC3;
    VirtualProtect((void*)(dwAddr), size, OldProt, &OldProt);
}
Run Code Online (Sandbox Code Playgroud)

c c++ windows assembly hook

-3
推荐指数
1
解决办法
1821
查看次数

IMAGE_DOS_HEADER挂钩

我正在阅读Windows Hooking和Win32可执行文件的内部(https://en.wikipedia.org/wiki/Hooking#Windows),并看到了这段代码:

PIMAGE_DOS_HEADER pImgDosHeaders = (PIMAGE_DOS_HEADER)module;
PIMAGE_NT_HEADERS pImgNTHeaders = (PIMAGE_NT_HEADERS)((LPBYTE)pImgDosHeaders + pImgDosHeaders->e_lfanew);
PIMAGE_IMPORT_DESCRIPTOR pImgImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)((LPBYTE)pImgDosHeaders + pImgNTHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);

for (IMAGE_IMPORT_DESCRIPTOR *iid = pImgImportDesc; iid->Name != NULL; iid++)
Run Code Online (Sandbox Code Playgroud)

我的C有点生疏,我可能需要刷新(指针总是让我困惑),但我认为这样做的方法是创建一个IMAGE_IMPORT_DESCRIPTOR名为的指针iid.iid指向an IMAGE_IMPORT_DESCRIPTOR,并设置为等于名为的对象pImgImportDesc.所以,在看pImgImportDesc的Name财产,如果没有设置它会去下一个?所以基本上,它正在寻找最后一个?

还有任何书籍或视频的建议,以了解更多关于这样的真正低级别的事情?阅读代码让我感到困惑.

c++ hook winapi

-3
推荐指数
1
解决办法
400
查看次数

需要对此Delphi代码进行一些解释

我有这个代码,需要对这些问题进行一些解释:

  • 首次使用"ShellExecHookXample"部分之后的"_TLB"是什么?

  • 我应该如何在Delphi 7中使用此代码并制作独立的exe文件?(我不知道放置代码并调用其方法的适当位置.因为它似乎是一个单元或什么?)

  • 如果可能请为我描述代码.

提前致谢.

windows delphi api hook shellexecute

-4
推荐指数
1
解决办法
314
查看次数

标签 统计

hook ×8

c++ ×6

winapi ×3

windows ×3

assembly ×2

api ×1

c ×1

debugging ×1

delphi ×1

detours ×1

mousemove ×1

php ×1

shellexecute ×1

stack-overflow ×1

typo3 ×1