#include <windows.h>
WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd )
{
MessageBox(NULL,"no virus","ERROR",MB_OK);
SwapMouseButton(1);
ExitProcess(NULL);
}
比如这段简单的代码,只有三个函数,楼主可以查一下MSDN,就知道各个函数的用法了。
00401000 push 0 ; /Style = MB_OK|MB_APPLMODAL
00401002 push 0040603C ; |Title = "ERROR"
00401007 push 00406030 ; |Text = "no virus"
0040100C push 0 ; |hOwner = NULL
0040100E call dword ptr [<&USER32.MessageBoxA>>; \MessageBoxA
00401014 push 1 ; /Swap = TRUE
00401016 call dword ptr [<&USER32.SwapMouseBut>; \SwapMouseButton
0040101C push 0 ; /ExitCode = 0
0040101E call dword ptr [<&KERNEL32.ExitProces> ; \ExitProcess
这个就是OD的反汇编代码(逆向,可没有这么简单,只为举例,所以截取了部分)。
SwapMouseButton(1); 就说这个函数个功能,是交换鼠标左右键,LZ可以在VC6下编译试验一下。
这是个布尔型的函数,所以,只要将1(T),换成0(F),就可以达到换回鼠标左右键的功能。
不知道我说的,清楚不。
在说一个吧。还有一个最简单的MessageBox函数。
有4个参数,第一个我就不说了。
现在我代码中的参数,显示出来的对话框,标题ERROR,内容no virus,显示方式只有一个选项的OK按钮。
现在你想修改,显示的模式。
就说一下修改标题好了。
00401002 push 0040603C ; |Title = "ERROR"
在内存的0040603C处,存放了ERROR的ASC码,我将这里面的ASC码修改成5个 41,之后保存文件。在测试,发现标题换掉了。成为AAAAA。
还有最后一个参数, 额,说起来不是很好说。
#define MB_OK 0x00000000L
#define MB_OKCANCEL 0x00000001L
#define MB_ABORTRETRYIGNORE 0x00000002L
#define MB_YESNOCANCEL 0x00000003L
#define MB_YESNO 0x00000004L
#define MB_RETRYCANCEL 0x00000005L
看着个吧,希望你能理解。
00401000 push 0 ; /Style = MB_OK
这句,不是PUSH 0,
你修改成 push 4h。
保存后会发现很惊奇的事情。呵呵。
好了,一个很简单的东西基本完成了。对于GUI界面的,还有更好玩的。
希望LZ能满意。
我估计你运行上述程序,会使你的鼠标左右键连续切换,有点小崩溃的。