为无源码的数据批量处理软件添加功能
一
软件简介
二
需求
三
思路
四
具体步骤
int HookIAT(char* szModuleName,char* szFuncName,int NewFuncAddress)
{
if (szModuleName == NULL || szFuncName == NULL || NewFuncAddress == NULL)
{
return -1;
}
int ImageBase = (int)GetModuleHandle(NULL);
PIMAGE_DOS_HEADER pDosHeader;
PIMAGE_NT_HEADERS pNtHeader;
//此处暂时不考虑64位的情况,所以直接定义32位的选项头
PIMAGE_OPTIONAL_HEADER32 pOptionalHeader;
pDosHeader = (PIMAGE_DOS_HEADER)ImageBase;
if (pDosHeader->e_magic != 0x5A4D) {
return -1;
}
//获取NT头
pNtHeader = (PIMAGE_NT_HEADERS)(pDosHeader->e_lfanew + ImageBase);
if (pNtHeader->Signature != 0x00004550) {
return -1;
}
//获取选项头
pOptionalHeader = &pNtHeader->OptionalHeader;
IMAGE_DATA_DIRECTORY DataDirectoryImport = pOptionalHeader->DataDirectory[1];
//获取导入表地址
PIMAGE_IMPORT_DESCRIPTOR pImportDirectory = (PIMAGE_IMPORT_DESCRIPTOR)(DataDirectoryImport.VirtualAddress + ImageBase);
//获取需要hook的函数所在的模块对应的模块句柄
HMODULE hModule = GetModuleHandle(szModuleName);
if (hModule == NULL)
{
return -1;
}
//获取原函数的位置
int pFunc = (int)GetProcAddress(hModule, szFuncName);
if (pFunc == NULL)
{
return -1;
}
while (pImportDirectory->OriginalFirstThunk != 0)
{
char* szDllName = (char*)(pImportDirectory->Name + ImageBase);
if (!strcmp(szDllName, szModuleName))
{
DWORD* pAddress = (DWORD*)(pImportDirectory->FirstThunk + ImageBase);
while (*pAddress != 0)
{
if (*pAddress == pFunc)
{
DWORD OldProtect = 0;
//修改内存属性,使其可写
VirtualProtect(pAddress, 0x1000, PAGE_EXECUTE_READWRITE, &OldProtect);
*pAddress = (DWORD)NewFuncAddress;
//改回内存属性,防止兼容性问题
VirtualProtect(pAddress, 0x1000, OldProtect, &OldProtect);
break;
}
pAddress++;
}
break;
}
pImportDirectory++;
}
return 0;
}
//记录过程函数是否已经被修改
BOOL IsModify = FALSE;
BOOL WINAPI MyGetMessageA(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax)
{
if (!IsModify)
{
char* szWindowNames[3] = {
"全能字符串批量替换机7.0 无限制版(替换/查找/抽取/改名)", //Chinese(S)
"つ匡ゅンい猔種称", //Chinese(T)
"Super Replacer(Replace/Find/extract/rename)" //English
};
HWND hWnd = NULL;
bool IsMyWindow = false;
//查找窗口
for (int i = 0; hWnd == NULL && i < 3; i++)
{
hWnd = ::FindWindow(NULL, szWindowNames[i]);
}
if (hWnd != NULL)
{
DWORD ProcessId = 0;
//判断窗口是否属于本进程
if (GetWindowThreadProcessId(hWnd, &ProcessId) != 0)
{
DWORD MyProcessId = GetCurrentProcessId();
if (MyProcessId == ProcessId)
{
IsMyWindow = true;
}
}
}
if (IsMyWindow)
{
g_Wnd = hWnd;
//判断窗口字符集
BOOL nRet = IsWindowUnicode(hWnd);
//修改窗口过程函数
if (nRet)
{
g_OldWindowProc = (PFN)SetWindowLongW(hWnd, GWL_WNDPROC, (int)WindowProc);
}
else
{
g_OldWindowProc = (PFN)SetWindowLongA(hWnd, GWL_WNDPROC, (int)WindowProc);
}
IsModify = TRUE;
}
}
//调用原先被hook的函数
return GetMessageA(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax);
}
#define ID_LISTCTRL 1012
//旧的窗口过程函数
PFN g_OldWindowProc = NULL;
//记录过程函数是否已经被修改
BOOL IsModify = FALSE;
HWND g_Wnd;
int g_nClickedColumn;
CListCtrl* g_pListCtrl;
bool IsReverseOrder = false;
int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
CListCtrl* pListCtrl = g_pListCtrl;
CString strItem1 = pListCtrl->GetItemText(lParam1, g_nClickedColumn);
CString strItem2 = pListCtrl->GetItemText(lParam2, g_nClickedColumn);
int nItem1 = StrToInt(strItem1);
int nItem2 = StrToInt(strItem2);
int ret = nItem2 - nItem1;
if (!IsReverseOrder)
{
ret = 0 - ret;
}
return ret;
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (uMsg == WM_NOTIFY)
{
NMHDR* pNMHDR = (NMHDR*)lParam;
if (pNMHDR->code == LVN_COLUMNCLICK)
{
NMLISTVIEW* pNMLV = (NMLISTVIEW*)pNMHDR;
if (pNMLV->hdr.idFrom == ID_LISTCTRL) // 检查控件ID,确保是你要处理的列表控件
{
HWND hListCtrl = ::GetDlgItem(g_Wnd, ID_LISTCTRL);
CListCtrl* pListCtrl = reinterpret_cast<CListCtrl*>(CListCtrl::FromHandle(hListCtrl));
g_pListCtrl = pListCtrl;
g_nClickedColumn = pNMLV->iSubItem;
if (g_nClickedColumn == 2)
{
//将每一项进行排序
pListCtrl->SortItemsEx(CompareFunc, (LPARAM)pListCtrl);
//再次点击的话,就将顺序颠倒
IsReverseOrder = !IsReverseOrder;
}
return TRUE;
}
}
}
return g_OldWindowProc(hwnd, uMsg, wParam, lParam);
}
五
总结

看雪ID:UltraTC
https://bbs.kanxue.com/user-home-980660.htm

# 往期推荐
1、移动应用安全与风控——应用分析常用工具
2、Nep CTF password:rc4和换表base64算法分析
3、摘除MiniFilter回调的正确姿势
4、bpf在android逆向中的辅助效果
5、NDK集成OLLVM模块流程记录
6、【NKCTF】babyHeap-Off by one&Tcache Attack


球分享

球点赞

球在看

点击阅读原文查看更多
# 软件教程
# 每一项
# 将原
# 就将
# 看雪
# 考虑到
# 对其
# 这个问题
# 很难
# 还没有
# 也不
# 并将
# 句柄
# 是在
# 就会
# 自己的
# 为其
# 加载
# 为无源码的数据批量处理软件添加功能
# 出现了
# 的是
# 判断是否
相关文章:
【众享花】众享花app下载借款开通最新指南
提供数据和软件代码的国际期刊一览, 各种数据可得性政策一览!
推荐热门短剧《盛夏芬德拉》1-102集(合集/完整版/大结局)
App免Root加载Xposed插件工具Xpatch源码解析(二)
雁知语 · 案例精选 | 为短剧产业系上“法律安全带”
爱不释手,短 中 长三线控盘副图指标源码!
读赢波经APP安装方式
通达信副图指标源码
1月2日热门短剧上线推荐!
床指南APP 9.7 版本重磅更新!全文检索功能让临床决策更高效
热门短剧《幸得相遇离婚时》完整版1-96集(后续/大结局)
扫烟盒二维码赚钱秘籍大公开!多款热门软件助你轻松开启绿色收益!
出行福利:交通银行APP乘车享5折1元封顶优惠!
震惊!这些性价比高的geo优化软件源码部署之选,你知道吗?
热播短剧《原来你也是假千金》完整版1-88集(合集/大合集)
上头到离谱!这3部高质量短剧的剧情太抓人,第一部《攻略苗疆少主》甜度爆表,第二部《我的九尾狐老公追红温了》封神一次看爽!
室内设计资料分享:书籍、插件、图库…限时领取!
VSCode必装插件清单:这10款让你效率翻倍,告别选择困难!
『热门』达芬奇插件:好莱坞顶级电影胶片色彩、颗粒、光晕、*模拟效果 Genesis v1.2.2 MAC(13432)
魔兽世界插件更新软件,桃乐豆推出收费服务,绿钻6.8,紫钻9.8,免费用户服务部分缩减
软件公司的咨询顾问和售前顾问怎么区分
一梦软件库h5端软件资源下载主题系统源码搭建 网页源码
这些修图app真的太好用了/妙图AI
iOS14 桌面APP插件来了,目前内测中可体验
2026开年第一天!中国银行APP崩了……
一款用了就停不下来的足球app
【软件插件】PS插件——Ps全套插件一键安装包安装教程
免费!最新豆包生图去水印插件,抓紧收藏!
国家反诈中心APP上新啦——两大反诈新功能!
【含文档+PPT+源码】基于Spring+Vue的拾光印记婚纱影楼管理系统
短剧《我真的只是个兽医》完整版
热门短剧《月染青川》完整版1-65集/大结局/合集 图片
2025顶级全新PR插件合集!一键安装上万款刚需插件!
国家医保平台app下载
钢结构CAD制图插件合集,375个分项软件,效率提高100%
VSCode 必装50款插件,编码效率翻倍
【好课福利】200集Excel插件视频课重磅上线!老学员仅1元购买!
Blender插件-三维人物角色动作自动绑定 Auto-Rig Pro v3.76.29+Quick Rig V1.26.46
短剧《司命》完整版
10月28日高质量短剧推荐!
【软件】重磅!Adobe又推出了新软件?能把Ps/Ai/Ae当插件用!
安卓、苹果*软件,免费、高清追剧爽翻天!你想要的这里都有!
短剧《重回高考前,我扶摇而上》完整版
iOS APP可执行文件的组成
“橘汁”上架AppStore!4K画质、支持缓存/投屏/弹幕!
超好看!热门短剧丨大结局《你曾是我的亿万星辰》全集在线看
厉害!进博会交通App今上线!集地图、资讯等于一体,助你迅速抵达“四叶草”
今天又秒空!茅台官方APP多轮补货均售罄…网友:抢不到,但绝对是黄牛的噩梦
爆款预定!精品短剧《元宇宙·恋语》象山开机
2026年,这些APP拉新推广平台让我月入过·万:新手地推实战指南,适合新手的平台
相关栏目:
【
网络营销44070 】
【
网络推广122852 】
【
网络优化116010 】
【
网址导航102054 】
【
网络技术82194 】
【
网络资讯43554 】