77范文网 - 专业文章范例文档资料分享平台

郁金香VC++初级和中级篇, 最全的手记及琢字翻译(8)

来源:网络收集 时间:2019-04-01 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

call eax } //end asm }

上节课找出了技能CALL,本节课是要编写代码来调用.上节课我们找到的CALL后,返回上级调用,就发现了一堆的CASE. [attachment=580]

这里的基址很好找了.但是这个是鼠标的CALL,键盘是另外一个CALL,这里的基址就相对难了一些,慢慢向上找,返回上一级CALL继续找,想找出来比较复杂

下面是老师记录的汇编代码段,也可以查找特征码方便以后更新. 0057FF6E |. /74 31 JE SHORT Client.0057FFA1 0057FF70 |. |83F8 0B CMP EAX,0B

0057FF73 |. |0F85 AA200000 JNZ Client.00582023

0057FF79 |. |8B0D 90C54401 MOV ECX,DWORD PTR DS:[144C590] ; Case B of switch 0057FF67 0057FF7F |. |8B45 10 MOV EAX,DWORD PTR SS:[EBP+10] 0057FF82 |. |50 PUSH EAX

0057FF83 |. |8B89 4C020000 MOV ECX,DWORD PTR DS:[ECX+24C] 0057FF89 |. |E8 124C0900 CALL Client.00614BA0

0057FF8E |. |8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C] 0057FF91 |. |64:890D 00000>MOV DWORD PTR FS:[0],ECX 0057FF98 |. |5F POP EDI 0057FF99 |. |5E POP ESI 0057FF9A |. |5B POP EBX 0057FF9B |. |8BE5 MOV ESP,EBP 0057FF9D |. |5D POP EBP 0057FF9E |. |C2 0C00 RETN 0C

0057FFA1 |> \\8B45 10 MOV EAX,DWORD PTR SS:[EBP+10] ; Case 4 of switch 0057FF67 0057FFA4 |. 8B9481 D80300>MOV EDX,DWORD PTR DS:[ECX+EAX*4+3D8] 0057FFAB |. 85D2 TEST EDX,EDX

0057FFAD |. 0F84 70200000 JE Client.00582023

0057FFB3 |. 8B15 90C54401 MOV EDX,DWORD PTR DS:[144C590] ; 0

0057FFB9 |. 50 PUSH EAX ; 数组下标0..9

0057FFBA |. 8B8A 3C020000 MOV ECX,DWORD PTR DS:[EDX+23C] ; ecx=[[144c590]+23c] 0057FFC0 |. E8 4B460600 CALL Client.005E4610 ; F1-F10 鼠标 0057FFC5 |. 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C] 0057FFC8 |. 64:890D 00000>MOV DWORD PTR FS:[0],ECX 0057FFCF |. 5F POP EDI 0057FFD0 |. 5E POP ESI 0057FFD1 |. 5B POP EBX 0057FFD2 |. 8BE5 MOV ESP,EBP 0057FFD4 |. 5D POP EBP 0057FFD5 |. C2 0C00 RETN 0C

0057FFD8 |> 83FA 01 CMP EDX,1 ; Switch (cases 0..59) 0057FFDB |. 75 23 JNZ SHORT Client.00580000

0057FFDD |. A1 90C54401 MOV EAX,DWORD PTR DS:[144C590] ; Case 1 of switch 0057FFD8 0057FFE2 |. 8B88 18030000 MOV ECX,DWORD PTR DS:[EAX+318] 0057FFE8 |. E8 D3E80600 CALL Client.005EE8C0

0057FFED |. 8B48 40 MOV ECX,DWORD PTR DS:[EAX+40]

关于特征码,主要是记录一些汇编命令,不要记录CALL地址一类的数据,因为这类地址会随着游戏的更新而变化. 然后编写代码在VC里调用,代码已经在教案中.最后在游戏中测试一下,OK了??

[中级篇总结]:课程中分两部分,一个是反汇编游戏找CALL,另一部分是编写VC代码,找游戏我感觉还是比较熟悉的,但是VC代码实在是不好弄,尤其MFC的用法比DELPHI的控件难多了,要不是为了以后学驱动的时候打点基础,我还真是不想学VC了. 3.1.1、喊话功能 a、找喊话内容地址 b、分析出关键CALL c、测试关键CALL 喊话内容地址: 扫描类型

喊话内容地址:065EF354:字串 按下回车后:

0055bd8f,0055bd9d,0055bdfa,0055bd91,0055bda0,0055bda7 005ae1b0:lea edi,[edx+13c] 往上找上层CALL 代码注入器代码 mov esi,0DA38FD8 mov edx,[esi] push 0d push 0d

36

push 3ed mov ecx,esi call [edx+4]

学到进阶篇了,内容以找CALL为主.本节课是要找喊话的内容,我们的突破点是先在聊天窗口输入一段文字,在CE里扫描这段喊话内容,类型是文本型.经过几次搜索,发现了两个地址,其中一个是显示的内容,一个是真正喊话的内容.我们来查找一下访问.

先来到 005aF1B0 lea,dword ptr[edx+13c] 这里,按下回车就被断下来了,为了找到关键CALL,我们再来下bp WSASend ,如果先在SEND处被断下来,那么就说明我们找过了,再向前找找其它的地址.

那么我们再来找0055BD8f这个地址,这里是在发送封包的前面,也就是我们需要查找的地址 [attachment=582]

我们在CE里写好文字,按照汇编代码在注入器里测试一下,哎没反映,又找一下其它的地址,但是还是不太像?又换了另外一个地址005AE19E,还是不行,返回上一层,又回到最开始的地址,再测试一下终于实现了喊话的功能. 下面是本节课的记录内容: ASCII \

00435CF1 |. F3:AB REP STOS DWORD PTR ES:[EDI] 00435CF3 |. 8B0D 34F14401 MOV ECX,DWORD PTR DS:[144F134] 00435CF9 |. AA STOS BYTE PTR ES:[EDI]

00435CFA |. 8991 10020000 MOV DWORD PTR DS:[ECX+210],EDX 00435D00 |. A1 34F14401 MOV EAX,DWORD PTR DS:[144F134] 00435D05 |. 8990 0C020000 MOV DWORD PTR DS:[EAX+20C],EDX 00435D0B |. 8B0D 34F14401 MOV ECX,DWORD PTR DS:[144F134] 00435D11 |. 8991 14020000 MOV DWORD PTR DS:[ECX+214],EDX 00435D17 |. A1 34F14401 MOV EAX,DWORD PTR DS:[144F134] 00435D1C |. 8990 18020000 MOV DWORD PTR DS:[EAX+218],EDX 00435D22 |. 8B0D 34F14401 MOV ECX,DWORD PTR DS:[144F134] 00435D28 |. 8991 1C030000 MOV DWORD PTR DS:[ECX+31C],EDX 00435D2E |. A1 34F14401 MOV EAX,DWORD PTR DS:[144F134] 00435D33 |. 8990 08020000 MOV DWORD PTR DS:[EAX+208],EDX 00435D39 |. 8B0D 90044701 MOV ECX,DWORD PTR DS:[1470490] 00435D3F |> 8B76 48 MOV ESI,DWORD PTR DS:[ESI+48] 00435D42 |. 8B7D 10 MOV EDI,DWORD PTR SS:[EBP+10] 00435D45 |. 8B5D 0C MOV EBX,DWORD PTR SS:[EBP+C] 00435D48 |. 3BF2 CMP ESI,EDX

00435D4A |. 74 16 JE SHORT Client.00435D62

00435D4C |. 8B16 MOV EDX,DWORD PTR DS:[ESI] ; esi=[5A11200+127*4] 00435D4E |. 57 PUSH EDI ; 0d=13=回车键 00435D4F |. 53 PUSH EBX ; 0d=13=回车键 00435D50 |. 68 ED030000 PUSH 3ED

00435D55 |. 8BCE MOV ECX,ESI ; [5A11200+127*4]

00435D57 |. FF52 04 CALL DWORD PTR DS:[EDX+4] ; [[[5A11200+127*4]] +4] 00435D5A |. 8B0D 90044701 MOV ECX,DWORD PTR DS:[1470490] 3.1.2、喊话功能VC++实现

a、分析喊话CALL参数基址+偏移 b、V++代码实现 Esi=0x5A1169C; ECX=0x5A1169C; lea 指令 取地址指令:

mov eax,[144F134]

如:lea edi,[eax+13c] 相当于 edi=eax+0x13c;

repne scas定位[edi]指向字串,al里边值,计数在ECX里边(not ECX)-1 dc [144F134]+13c //dc 以ASCII的形式来显示内存数据

MOV EDX,DWORD PTR DS:[ESI] ; esi=[5A11200+127*4]

00435D4E |. 57 PUSH EDI ; 0d=13=回车键 00435D4F |. 53 PUSH EBX ; 0d=13=回车键 00435D50 |. 68 ED030000 PUSH 3ED

00435D55 |. 8BCE MOV ECX,ESI ; [5A11200+127*4]

00435D57 |. FF52 04 CALL DWORD PTR DS:[EDX+4] ; [[[5A11200+127*4]] +4] 00435D5A |. 8B0D 90044701 MOV ECX,DWORD PTR DS:[1470490] //喊话CALL

void talk(c*****t char* text)//text=\{

_asm { mov al,al mov al,al }

char *s;//[144F134]+13c; int *p;

37

p=(int*)(0x144F134); s=(char*)(*p+0x13c);

memcpy(s,text,strlen(text)); _asm

{mov esi,0x5A1169C mov esi,[esi] mov edx,[esi] push 0x0d push 0x0d push 0x3ed mov ecx,esi call [edx+4] } }

上节课已经找到游戏喊话CALL了,那么这次我们就要编写自己的代码来实现自动喊话,另外还要找一下CALL中参数的来源.先来到00435D57这个地址,我们需要查找ESI的来源,用CE搜索一下就发现了一个绿色基址05A1169C,除了这个基址还有其它的偏移地址,跟了一下偏移发现很难找,所以我们就直接用这个基址了.除了这个CALL的参数之外,还有一个参数就是我们发话的地址,通过CE再查找几次喊话的内容,找到后我们打开OD,来到0055BD91这个地址,发现了对于字符串的操作代码 [attachment=583]

老师在这里对这几条汇编语句进行了详细的讲解,比如REPNE SCAS 这条汇编语句是取字符串长度 / LEA指令是取地址等等,已记录在教案中了.那么字符串的地址就是[144F134]+13c,接下来编写喊话代码,编写好后测试了一下发现出错了,经过查找发现了是汇编代码的问题,最终代码如下: //喊话CALL

void talk(c*****t char* text)//喊话内容text { _asm {

mov al,al mov al,al }

//定义指针指向喊话地址[144F134]+13c; char *s; int *p;

p=(int*)(0x144F134); s=(char*)(*p+0x13c);

memcpy(s,text,strlen(text));//将喊话内容写到喊话地址 _asm

{//将上节课的喊话汇编代码集成到函数中 mov esi,0x5A1169C mov esi,[esi] mov edx,[esi] push 0x0d push 0x0d push 0x3ed mov ecx,esi call [edx+4] } }

3.2.1、走路相关数据分析(为分析走路/寻路CALL做准备) a、查找当前角色坐标(xhy)

b、查找目的地坐标(xhy)偏移+基址 c、找出相关CALL

d、push 压栈的另一种 写法 假设:

存在一个目的地 的坐标

1、浮点数(float) 可以带小数点(4字节) X坐标=61

走路CALL 内部:

004574B6: mov [0146cF78],eax //X坐标 00450250: mov [esi],eax //X坐标 {

push 2 push y push h push x

mov ecx,??? call 457420 }

38

push ??? esp=esp-4

/// 关键CALL 457420 小结:

1、找目的地坐标X

2、通过目的地坐标X 回溯出 走路CALL 00457420

游戏中走路是很关键的,这节课就是要找出走路CALL,大部分游戏中坐标植有浮点数.我们要找的是目地地坐标,当我们用鼠标点中一个要走到的地址的时候,游戏中就会有这个地址的数值,我们可以先找到当前的坐标,走一下到地方后再搜索一下当前的坐标.如果要找目地坐标的话那么就点一个远的地址,然后看这些个找到的坐标值哪个像目地坐标.当然人的在移动的过程当中我们也可以通过改变其值来更改目地坐标.当找到目地坐标地址后,我们在CE里下写入访问,就是004574B6 mov [0146cf78],eax,我们返回上一层看,就找到了关键CALL. 但这里的参数有点特别,不是直接PUSH的,而是通过MOV将要压入的值传到寄存器里的. 0045E6E6 |. 8B86 781F0000 MOV EAX,DWORD PTR DS:[ESI+1F78]

0045E6EC |. 6A 02 PUSH 2 ; push 2 //第一个压栈 0045E6EE |. 8B8E 7C1F0000 MOV ECX,DWORD PTR DS:[ESI+1F7C]

0045E6F4 |. 83EC 0C SUB ESP,0C ; esp=esp-0c 分配3个参数堆栈空间 0045E6F7 |. 8BD4 MOV EDX,ESP

0045E6F9 |. 8902 MOV DWORD PTR DS:[EDX],EAX ; push [esi+1F78] //x0045E6FB |. 8B86 801F0000 MOV EAX,DWORD PTR DS:[ESI+1F80]

0045E701 |. 894A 04 MOV DWORD PTR DS:[EDX+4],ECX ; push [esi+1F7c] //h0045E704 |. 8BCE MOV ECX,ESI

0045E706 |. 8942 08 MOV DWORD PTR DS:[EDX+8],EAX ; push [esi+1F80]//y0045E709 |. E8 128DFFFF CALL Client.00457420 ; walkroad esi=065E9958 更新 走路CALL地址为:CALL 00457D60 3.2.2、走路功能CALL及相关分析 a、分析走路状态开关 b、测试走路CALL

c、确定功能CALL及参数 push 2 push y push h push x

mov ecx,??? call ???

////////////////1111111111 mov ecx,065FEC8C push 2 sub esp,0c mov edx,esp

mov edi,0C2C6B7B9

mov [ecx+1F78],edi //x mov [edx],edi mov edi,0C3B3F7F1 mov [ecx+1F7c],edi mov [edx+4],edi mov edi,45045400 mov [ecx+1f80],edi mov [edx+8],edi CALL 00457D60

///////////////////22222222222

对esi+1F78内存地址 下写入断点 以找其它走路相关CALL mov ebx,065FEC8C mov ecx,0

mov [ebx+0d8c],ecx

MOV DWORD PTR DS:[EBX+0D88],ECX MOV DWORD PTR DS:[EBX+200],ECX MOV DWORD PTR DS:[EBX+1FC],ECX MOV BYTE PTR DS:[EBX+245],0 MOV BYTE PTR DS:[EBX+2D10],0 MOV WORD PTR DS:[EBX+1664],0 MOV BYTE PTR DS:[EBX+0F8],0 MOV EDX,DWORD PTR DS:[EBX] push 0 push esi push 3f2 mov ecx,ebx call [edx+4]

//////////////////////////////////

第四个压栈 [esp]=eax 第三个压栈 第二个压栈 39

ecx= 065FEC8C ecx+1F78 // xhy +1F78+4 //1f7c=h + 1f78+8 //1f80=y ecx+14DC //x +14DC+4//14e0=h +14DC+8//14e4=y

////////////////////////////////////333333333333 lea eax,xhy

push esi //现在的坐标地址 push eax //前往地址 mov ecx,065FEC8C CALL 0045F480 ////////////

///////////////////////////////////////44444444444 CALL 004E5BF0 //可能是走路CALL

PUSH 144ED20 //鼠标所在 坐标1024*768

//////////////////////////////////////////////////////////////

上节课找出的走路CALL这节课要进行测试,我们还是照着游戏中写座标的代码来进行编写,确定一下坐标是如何调用的,这段代码还真是比较多.试了一次没反应,又试一次还没反应.(教案测试代码第一段)

所以我们对ESI+1F78这里下写入断点看看,我们又来到另一段汇编中,一直找到头部,但是下断马上被断了,所以不行,那么回来再看看,测试一下,又错了.(教案测试代码第二段)

我们再到这个CALL的上一级看一下,再测试,还是不太像(教案代码三) 再继续向前找,还有一个比较像的,(教案代码四)

本节课一共是58分,却没有找到真正的走路CALL.我说明热血江湖的走路确实不好搞,而且老师也很有耐心找.可惜老师讲课没有备课,最终也没找到走路CALL,不想看过程而只想知道结果的本课跳过直接看下节课好了. 3.2.3、对找到的几个疑是CALL进行测试 a、分析出疑是CALL相关参数 b、对找到的CALL进行逐一测试 c、确定真正的走路CALL ////////////////1111111111 mov ecx,065FEC8C push 2 sub esp,0c mov edx,esp

mov edi,0C2C6B7B9

mov [ecx+1F78],edi //x mov [edx],edi mov edi,0C3B3F7F1 mov [ecx+1F7c],edi mov [edx+4],edi mov edi,45045400 mov [ecx+1f80],edi mov [edx+8],edi CALL 00457D60

///////////////////22222222222

对esi+1F78内存地址 下写入断点 以找其它走路相关CALL mov ebx,065FEC8C mov ecx,0

mov [ebx+0d8c],ecx

MOV DWORD PTR DS:[EBX+0D88],ECX MOV DWORD PTR DS:[EBX+200],ECX MOV DWORD PTR DS:[EBX+1FC],ECX MOV BYTE PTR DS:[EBX+245],0 MOV BYTE PTR DS:[EBX+2D10],0 MOV WORD PTR DS:[EBX+1664],0 MOV BYTE PTR DS:[EBX+0F8],0 MOV EDX,DWORD PTR DS:[EBX] push 0 push esi push 3f2 mov ecx,ebx call [edx+4]

////////////////////////////////// ecx= 065FEC8C

ecx+1F78 // xhy //源地址坐标 +1F78+4 //1f7c=h

40

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库郁金香VC++初级和中级篇, 最全的手记及琢字翻译(8)在线全文阅读。

郁金香VC++初级和中级篇, 最全的手记及琢字翻译(8).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/561020.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: