C#钩子程序如何Hook读取第三方界面中DataGridList中数据呢

gaoranaa 2023-09-19 18:13:35

求大佬救命,找了全网也没找到相关的代码,该如何Hook读取第三方界面中列表的数据呢

...全文
成就一亿技术人!
拼手气红包 15.00元
755 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
清晨曦月 2023-10-25
  • 打赏
  • 举报
回复

其实如果是.NET程序咋的都好说,完全可以修改它的程序,让他加载你的DLL或者干脆改它的代码,让他把数据写到一个临时文件里,然后监听这个文件?或者直接搞大发点,需要的功能直接在它程序里写……

清晨曦月 2023-10-25
  • 打赏
  • 举报
回复

HOOK应该是可行的,如果对方也是.NET的程序,直接注入.NET写的DLL就可以。如果不是,给它加载一个C++的DLL,DLL里面让对方加载运行时也可以,但是这样似乎没有什么优势,因为可能没法直接操作那个控件,可以去看看WINDOWS消息列表,看看有没有对应消息,发送消息能不能获取内容。

至于说注入之后读内存啥的可能也行,太费劲了。

至于说用OCR的方式,绝大多数情况需要训练自定义数据,我就正训练一个PPOCR的1700字的,电脑配置不咋地,数据集总共七八万的图片,要一个半月!

小白工作室 2023-09-20
  • 打赏
  • 举报
回复

要在C#钩子程序中Hook读取第三方界面中DataGridList中的数据,可以使用Windows消息钩子来监视目标应用程序的消息流,并在收到相关消息时获取DataGridList中的数据。

首先,需要使用SetWindowsHookEx函数来安装一个钩子,以便监视目标应用程序的消息。可以使用WH_GETMESSAGE或WH_CALLWNDPROC作为钩子类型,具体根据需要选择。

然后,在钩子函数中,可以通过检查消息类型来确定目标应用程序是否正在读取DataGridList中的数据。可以使用WM_GETTEXT消息或WM_GETTEXTLENGTH消息来获取DataGridList的文本内容。

以下是一个简单的示例代码,展示了如何在C#钩子程序中Hook读取第三方界面中DataGridList中的数据:

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;

class Program
{
private delegate IntPtr HookProc(int nCode, IntPtr wParam, IntPtr lParam);
private static IntPtr hookId = IntPtr.Zero;

private const int WH_CALLWNDPROC = 4;
private const int WM_GETTEXT = 0x000D;
private const int WM_GETTEXTLENGTH = 0x000E;

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hMod, uint dwThreadId);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool UnhookWindowsHookEx(IntPtr hhk);

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr GetModuleHandle(string lpModuleName);

private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
    if (nCode >= 0 && wParam == (IntPtr)WM_GETTEXT)
    {
        int textLength = (int)CallNextHookEx(hookId, nCode, wParam, lParam);
        StringBuilder sb = new StringBuilder(textLength + 1);
        SendMessage((int)((CWPSTRUCT)Marshal.PtrToStructure(lParam, typeof(CWPSTRUCT))).hwnd, WM_GETTEXT, sb.Capacity, sb);
        string text = sb.ToString();

        // 在这里处理获取到的DataGridList的数据
        Console.WriteLine("DataGridList中的数据:" + text);
    }

    return CallNextHookEx(hookId, nCode, wParam, lParam);
}

[StructLayout(LayoutKind.Sequential)]
private struct CWPSTRUCT
{
    public IntPtr lParam;
    public IntPtr wParam;
    public int message;
    public IntPtr hwnd;
}

static void Main(string[] args)
{
    Process targetProcess = Process.GetProcessesByName("目标应用程序")[0];
    IntPtr targetWindowHandle = targetProcess.MainWindowHandle;

    hookId = SetWindowsHookEx(WH_CALLWNDPROC, HookCallback, GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), (uint)targetProcess.Id);

    // 等待钩子程序运行
    Console.ReadKey();

    UnhookWindowsHookEx(hookId);
}

}

小白工作室 2023-09-20
  • 打赏
  • 举报
回复

要读取第三方界面中列表的数据,你可以使用以下步骤:

确定第三方界面中列表的元素定位方式。你可以使用浏览器的开发者工具来检查元素的属性和结构,通常使用CSS选择器或XPath来定位元素。

使用Hook技术来获取第三方界面中列表的元素。具体的实现方式取决于你使用的编程语言和框架。以下是一些常见的Hook技术:

Selenium:Selenium是一个用于自动化浏览器的工具,可以使用它来模拟用户操作并获取网页元素。你可以使用Selenium的API来定位和获取第三方界面中列表的元素。

BeautifulSoup:BeautifulSoup是一个用于解析HTML和XML文档的Python库,可以使用它来提取第三方界面中列表的数据。你可以使用它的find_all()方法来查找所有符合条件的元素。

Puppeteer:Puppeteer是一个用于控制Chrome或Chromium浏览器的Node.js库,可以使用它来模拟用户操作并获取网页元素。你可以使用Puppeteer的API来定位和获取第三方界面中列表的元素。

根据需要进行数据提取和处理。一旦你成功获取了第三方界面中列表的元素,你可以根据元素的结构和属性来提取所需的数据。你可以使用元素的文本内容、属性值或子元素等来获取数据。

请注意,读取第三方界面中列表的数据可能涉及到跨域请求、登录验证、动态加载等问题,你可能需要相应的技术来处理这些问题。此外,你还需要遵守相关网站的使用条款和隐私政策,确保你的行为是合法和合规的。

gaoranaa 2023-09-20
  • 举报
回复
@小白工作室 你看懂我的提问了吗?
  • 打赏
  • 举报
回复 1
都是用c++ hook吧

110,961

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧