Crack的思想解决程序开发问题
kongfoo/2006.5.26
单位某领导的亲属在某评选活动中作为候选人,在网上接受投票,
该领导发动我们投票,鉴于竞争对手(某些老师)发动学生投票,
该领导要求我们几个人各投100多次,遂写一网上投票机,但投完
之后网页弹一个对话框,“谢谢投票”云云,由于需要自动定时
投票,而这框却阻塞了进程,要去掉。网上搜一下解决方法是钩
函数。于是拿出OD,运行,bp MessageBoxA和bp MessageBoxW,
让它弹出对话框,意外地没断下来。得用其它办法。弹出对话框
后OD中F12暂停,看看堆栈,发现返回user32的地址,去下断。
几次返回之后就发现目标:
77D3B126 E8 23000000 CALL user32.SoftModalMessageBox
这方法对于弹出对话框函数的定位是比较有效的。
解决使用WebBrowser控件弹出对话框问题的答案也很自然浮出水面:
将SoftModalMessageBox函数开头的代码改为retn 4就OK了。
代码很简单:
var SMMB:Pointer;
MBI:TMemoryBasicInformation;
begin
SMMB:=GetProcAddress(GetModuleHandle('user32.dll'),'SoftModalMessageBox');
VirtualQuery(SMMB,MBI,SizeOf(MBI));
VirtualProtect(SMMB,1024,PAGE_EXECUTE_READWRITE,@MBI);
asm //patch
mov eax,SMMB
mov byte ptr [eax],$C2
mov byte ptr [eax+1],4
mov byte ptr [eax+2],0
end;
环境:Windows xp sp2, delphi 7。
手中握着Crack这把利刃,软件开发中当如虎添翼,轻车熟路了。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!