-->
当前位置:首页 > DayDayUp > 正文内容

桌面应用的数据抓取思路

Luz3年前 (2022-04-02)DayDayUp4560

今天有朋友想从软件内抓取信息(抓取软件的查询结果),简单描述一下我的想法

一、直接对接上级数据库

按照他的描述,从软件里查询到数据以后放到自己的数据库里,显然软件后端是存在数据库的,如果有机会可以从对端数据库里拉取数据

优点:方便快捷,对端有的数据己方也有,对端的修改己方也可以第一时间知道

缺点:对端服务可以由于保密性需要而不开放数据库

image.png


二、模拟API调用

对端服务如果提供查询API则可以直接通过API调用获取数据,若不提供API可以尝试抓包分析或逆向客户端程序分析

优点:相对快捷,直接接收接口的返回,数据处理方便

缺点:若对端服务不提供API则分析过程较繁琐,如果抓包发现接口的请求不是HTTP协议或是加密的,免不了要逆向客户端获取加解密逻辑或加解码逻辑

image.png


三、API HOOK

inline HOOK,编写fake code让fake code执行时直接call 对应API 并接收其返回,通过操作fake code达到控制整个客户端程序执行的目的

优点:相对四来说节省大量时间,中间自定义项多,可以加入自己的数据处理,相对二来说,只需要找到API在程序中的入口点与参数,不需要知道其运作机制

缺点:纯逆向工程


四、模拟操作

windows提供了相应的API针对窗口程序进行操作的,如SendMessage可以用来模拟对文本框的键盘输入,按钮的点击等


DLL命令名返回值类型公开备注
SendMessageA整数型
将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而函数PostMessage不同,将一个消息寄送到一个线程的消息队列后立即返回。
DLL库文件名
user32.dll
在DLL库中对应命令名
SendMessageA
参数名类型传址数组备注
hWnd整数型

其窗口程序将接收消息的窗口的句柄。
Msg整数型

指定被发送的消息。
wParam整数型

指定附加的消息特定信息。
lParam整数型

指定附加的消息特定信息。

当输入操作完成后,使用GetWindowText等API获取程序窗体返回结果



优点:实现难度较小,基本上只要获取对象的句柄正确都可以成功,数据可能需处理

缺点:效率低,每一次查询都是模拟对客户端软件的一次操作


按键精灵什么的,也属于这种方法


发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。