110,961
社区成员
求大佬救命,找了全网也没找到相关的代码,该如何Hook读取第三方界面中列表的数据呢
其实如果是.NET程序咋的都好说,完全可以修改它的程序,让他加载你的DLL或者干脆改它的代码,让他把数据写到一个临时文件里,然后监听这个文件?或者直接搞大发点,需要的功能直接在它程序里写……
HOOK应该是可行的,如果对方也是.NET的程序,直接注入.NET写的DLL就可以。如果不是,给它加载一个C++的DLL,DLL里面让对方加载运行时也可以,但是这样似乎没有什么优势,因为可能没法直接操作那个控件,可以去看看WINDOWS消息列表,看看有没有对应消息,发送消息能不能获取内容。
至于说注入之后读内存啥的可能也行,太费劲了。
至于说用OCR的方式,绝大多数情况需要训练自定义数据,我就正训练一个PPOCR的1700字的,电脑配置不咋地,数据集总共七八万的图片,要一个半月!
要在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);
}
}
要读取第三方界面中列表的数据,你可以使用以下步骤:
确定第三方界面中列表的元素定位方式。你可以使用浏览器的开发者工具来检查元素的属性和结构,通常使用CSS选择器或XPath来定位元素。
使用Hook技术来获取第三方界面中列表的元素。具体的实现方式取决于你使用的编程语言和框架。以下是一些常见的Hook技术:
Selenium:Selenium是一个用于自动化浏览器的工具,可以使用它来模拟用户操作并获取网页元素。你可以使用Selenium的API来定位和获取第三方界面中列表的元素。
BeautifulSoup:BeautifulSoup是一个用于解析HTML和XML文档的Python库,可以使用它来提取第三方界面中列表的数据。你可以使用它的find_all()方法来查找所有符合条件的元素。
Puppeteer:Puppeteer是一个用于控制Chrome或Chromium浏览器的Node.js库,可以使用它来模拟用户操作并获取网页元素。你可以使用Puppeteer的API来定位和获取第三方界面中列表的元素。
根据需要进行数据提取和处理。一旦你成功获取了第三方界面中列表的元素,你可以根据元素的结构和属性来提取所需的数据。你可以使用元素的文本内容、属性值或子元素等来获取数据。
请注意,读取第三方界面中列表的数据可能涉及到跨域请求、登录验证、动态加载等问题,你可能需要相应的技术来处理这些问题。此外,你还需要遵守相关网站的使用条款和隐私政策,确保你的行为是合法和合规的。