问题解决包括三个步骤:
1. 先打造出一个可执行的 exe 文件.
2. 增加菜单.
3. 增加菜单响应.
先说第一步.
1. 找一个正常的 exe,比如第一题的 keygen.exe,用 winhex 截取 PE 头.
2. 用 winhex 将 PE 头,_text,_data,_rdata 连接成一个 PE 文件.
3. 用 Stud_PE 修改打造出的 PE 文件: 主要有 1. PE 目录表项 2. 各 Section 属性 3. 入口点
等等. 调整后就可以正常执行了.
现在开始第二步.
1. 先用 VC 编辑出需要的菜单资源,导出. 再用 reshack 编辑第一步得出的 exe, 导入菜单项.
2. 用 Stud_PE 编辑 exe, 再次导入菜单项,并把菜单项名字改成"PEDIY.COM",删除 reshack
增加的那个菜单项 (很奇怪 reshack 增加的那个不行,显示不出; 但是如果不用 reshack 先
增加一个,Stud_Pe 就没法增加).
3. 现在运行,可以看到菜单正常显示了.
继续最后一步,思路是:
将原窗口消息处理函数里这段代码的 call ds:DefWindowProcA
.text:004012EC push [ebp+arg_C]
.text:004012EF push [ebp+arg_8]
.text:004012F2 push [ebp+arg_4]
.text:004012F5 push [ebp+arg_0]
.text:004012F8 call ds:DefWindowProcA
.text:004012FE jmp short locret_401354
改成调用增加的一个函数,函数代码如下:
LRESULT CALLBACK MyWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
if ( message == WM_COMMAND && wParam == 0x68)
{
MessageBox(NULL,"看雪论坛.珠海金山2007逆向分析挑战赛\r\nhttp://www.pediy.com","pediy",0x40);
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
步骤是:
1. 将上述代码编译,将编译后的指令 写到 exe .text 的一个空白区里.
2. 将字符串也写到 .text 空白区里.
3. 用 LordPe 增加 MessageBoxA
4. 调整偏移值.
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)