吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4087|回复: 31
收起左侧

[原创] 数据库修复解密大师预览版功能补全思路

[复制链接]
darksied 发表于 2024-1-15 17:54
本帖最后由 darksied 于 2024-1-15 19:04 编辑

论坛中有:数据库修复解密大师Sql Extractor V10.96下载 地址是:https://www.52pojie.cn/forum.php?mod=viewthread&tid=1855884&highlight=%CA%FD%BE%DD%BF%E2%D0%DE%B8%B4%BD%E2%C3%DC%B4%F3%CA%A6
预览版仅提供的数据预览功能,不支持数据复制,数据导出等功能(程序中没有该部分代码)。
image.png
因为程序是MFC开发的,采用读取数据列表方式读取数据,然后自己编写导出功能(仅提供思路)。
1.采用spy++获取窗口句柄及类名
image.png
可以看到数据列表为类名SysListView32
2.编写程序获取列表中数据。关键代码如下:
//1、首先获取窗口句柄
        HWND MMEWindow = FindWindow(NULL, L"数据库修复取证大师Sql Extractor[预览版] V10.96");

        HWND MMEListView1 = FindWindowEx(MMEWindow, NULL, L"AfxFrameOrView80su", L"");
        //2、通过父窗口句柄获取SysListView32控件的句柄
        HWND MMEListView = FindWindowEx(MMEListView1, NULL, L"SysListView32", L"");
        //3、获取SysListView32控件pid
        DWORD MMEListViewPid;
        GetWindowThreadProcessId(MMEListView, &MMEListViewPid);
        //4、打开进程,返回进程句柄
        HANDLE MMEListViewProcess = OpenProcess(PROCESS_ALL_ACCESS, false, MMEListViewPid);
        //5、获取表格总的数量
        int count = (int)SendMessage(MMEListView, LVM_GETITEMCOUNT, 0, 0); //使用int count = ListView_GetItemCount(hwnd);效果相同
        cout << "当前列表总的元素数量:" << count << endl;
        //6、获取当前选中行中的元素
        TCHAR Object[512], EffectFile[512];//需要用宽字符类型数组来存储读取到的数据
        //int selected = ListView_GetNextItem(MMEListView, -1, LVNI_SELECTED); //获取当前被选中的行号
        //GetSpecifyItemString(MMEListViewProcess, MMEListView, selected, 0, Object, sizeof(Object));//获取SysListView32列表中的第0列元素
        //GetSpecifyItemString(MMEListViewProcess, MMEListView, selected, 1, EffectFile, sizeof(EffectFile));//获取SysListView32列表中的第1列元素
        //std::wcout << "当前选中元素:" << Object << ": " << EffectFile << endl;
        //7、将列表中的所有内容遍历一遍
        for (int i = 1; i < count; ++i) { //从第1行开始,第0行元素的Effect File太长
                GetSpecifyItemString(MMEListViewProcess, MMEListView, i, 0, Object, sizeof(Object));
                GetSpecifyItemString(MMEListViewProcess, MMEListView, i, 1, EffectFile, sizeof(EffectFile));
                std::wcout << i << " Object:" << Object << " " << "Effect File:" << EffectFile << endl;
        }
image.png

这样通过外挂方式实现了功能补全。

免费评分

参与人数 4威望 +1 吾爱币 +23 热心值 +4 收起 理由
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
抱薪风雪雾 + 1 + 1 谢谢@Thanks!
h07799486 + 1 + 1 谢谢@Thanks!
zyastc521 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

jyjjf 发表于 2024-1-15 18:30
dork 发表于 2024-1-15 18:16
提供另外一思路,直接截图OCR识别,试过,结果也可以。

只是数据量少的可以
 楼主| darksied 发表于 2024-1-15 21:59
lianquke 发表于 2024-1-15 21:25
那样代码量快赶上重写一个了

预览版程序核心是:
1:对损坏的数据库进行修复,可以直接看到所有修复后的数据内容,无阉割。
2:对病毒加密的数据库的解析与修复,解析算法已经放进去了,大家可以测试,把所有表,触发器,存储过程,都会解析显示出来。
3:针对数据库的检测功能,损坏率损坏程度都可以看到。
其他的都是附加的。
dork 发表于 2024-1-15 18:16
提供另外一思路,直接截图OCR识别,试过,结果也可以。
 楼主| darksied 发表于 2024-1-15 18:49
dork 发表于 2024-1-15 18:16
提供另外一思路,直接截图OCR识别,试过,结果也可以。

这个其实左侧的树形结构也能读取,这样最终能够实现完全补全预览版功能。就是代码工作量比较大,需要考虑分页等各种情况
ly433055 发表于 2024-1-15 20:33
感谢,学习了
CQGaxm 发表于 2024-1-15 20:44
感谢分享,学习学习
怜渠客 发表于 2024-1-15 21:25
darksied 发表于 2024-1-15 18:49
这个其实左侧的树形结构也能读取,这样最终能够实现完全补全预览版功能。就是代码工作量比较大,需要考虑 ...

那样代码量快赶上重写一个了
zhuyuanmao 发表于 2024-1-15 22:08
感谢分享。。
刘洪1964 发表于 2024-1-15 22:31

感谢,学习了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 07:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表