设为首页收藏本站

八达网

 找回密码
 注册
查看: 323|回复: 15
打印 上一主题 下一主题

在看雪看到个帖子..转过来...3句代码,在星际争霸屏幕上写字

[复制链接]

21

主题

0

好友

3万

积分

大和

牛奶浪人★淏

战队
[B.D]=
种族
Protoss
跳转到指定楼层
1
发表于 2009-2-13 17:13 |只看该作者 |正序浏览
本帖最后由 =C.R=LanBinG 于 2009-2-13 17:19 编辑

标 题: 【分享】3句代码,在星际争霸屏幕上写字(详细教程,有图,附源码)
作 者: ztd
时 间: 2009-01-06,20:31
链 接: http://bbs.pediy.com/showthread.php?t=80016

我们来看看在游戏里怎么写字!
游戏版本:星际争霸1.16.0
工具:OllyDBG,VS2005
如下图:
1.jpg

找CALL思路:游戏里写完字后,它应该会在内存里留下字符的痕迹,我们就从这个思路开始找写屏的函数。

第一步:先让游戏自已写几个字!运行游戏,选择局网IPX,和电脑对手。开始游戏后选择设置网速(玩星际的不用说怎么设置了吧?),完了它会出现以下字符:
2.jpg

第二步:在内存里找关键字,按下图所示,找到为止。
1,按图所示,在OD里先从D 00400000开始,回车。
2,按Ctrl+B输入关键字,再确认,如果没找到,再从1步骤开始(找不到再从D 00500000,D 00600000)。
3.jpg

第三步:找到后用你的大脑分析,怎么下断。
可以看得出,这是个动态分配的字符串,但是也有规律,每间隔N行就是一串。
4.jpg

第四步:找到规律后,我们试试在最后一次显示的字符串下面,选择一大片空白区下个"内存写入断点",看看能不能找到是哪个程序在写字符?下完断点后,在OD里按F9运行,再切换回游戏设置网速,让游戏自已再写一遍字。
5.jpg

第五步:运气真好,居然断到了。
1,如果断点正确(看下图1的注释),就按下图中所标的1,2,3步骤操作,之后,在OD按F9运行程序。
说明:按这三个步骤操作很重要,它可以帮你带到写屏函数那里去。因为找到写字符的内存了,我们就可以找到显示字符的函数了,因为游戏要读这段字符内存来进行显示。
6.jpg
第六步:离胜利不远了。
它把你带到写屏函数附近了。如下图所示,为什么要在2那里下个断再走一步?因为这还不是写屏的主函数,因为它RETN 0C,就算你用远程进程Call这个地址,程序也会出错,不会正常返回,所以我们还要往回找,看这里哪里CALL进来的,按下图的说法操作。
7.jpg

第七步:搞定!
8.jpg

第八步:通过远程调用游戏的CALL,来实现游戏写屏:
这一步骤就不详说了,VS2005,我用的是全局钩子。你们爱怎么就怎么的,反正关键代码是:
if(X键按下)
{
DWORD addr = 0x0048CFB0;//这个地址就是我们刚才找到的写屏主函数的起点(星际1.16版本)。
char *buf = "Hello Word!";
__asm
{
  xor eax,eax;
  mov edi,buf;
  call addr;
}
}

星际每个版本都可能这个地址有变化,但是步骤都差不多。下面是1.08版本的:
    DWORD addr = 0x0046DE10;//(星际1.08版本的)
    char *buf = "Hello Word!";
    __asm
    {
      xor edx,edx;
      mov ecx,buf;
      call addr;
    }

137

主题

4

好友

5万

积分

管理员

有MM和我打星际么?

Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

战队
=A.G=
联赛ID
OopsJr
种族
Protoss

2008年度八达十大杰出青年 2009年度八达十大杰出青年

16
发表于 2009-2-13 19:34 |只看该作者
略微懂了点

回复

使用道具 举报

0

主题

0

好友

10万

积分

黑暗执政官

15
发表于 2009-2-13 18:37 |只看该作者
回复

使用道具 举报

13

主题

0

好友

2209

积分

坦克

14
发表于 2009-2-13 18:36 |只看该作者
顺便再给出一段星际联网时可以地图全开的代码(1.08版本):

//16进制字符串转数字并写入指定地址
void write_ma(DWORD addr,char *ma)
{
  __asm
  {
    PUSH EAX;
    PUSH EBX;
    PUSH ECX;
    PUSH EDX;
    PUSH ESI;
    MOV DL,16;
    MOV EBX,DWORD PTR DS:[ma];
    MOV ESI,addr;
    CALL Write;
    POP ESI;
    POP EDX;
    POP ECX;
    POP EBX;
    POP EAX;
    JMP OVER;
  Write:
    XOR EAX,EAX;
    XOR ECX,ECX;
    CALL GetAnsi;
    MUL DL;
    MOV CL,AL;
    INC EBX;
    CALL GetAnsi;
    OR AL,CL;
    MOV BYTE PTR DS:[ESI],AL;
    INC EBX;
    INC ESI;
    MOV AL,BYTE PTR DS:[EBX];
    CMP AL,0;
    JNZ Write;
    RET;
  GetAnsi:
    MOV AL,BYTE PTR DS:[EBX];
    CMP AL,57;
    JA ZiMu;
    SUB AL,48;
  L1:
    RET;
  ZiMu:
    SUB AL,55;
    JMP L1;
  OVER:
  }
}

//按F12地图全开
==============================================
  if(VK_F12 == wParam && 1 == ((lParam>>30) & 1))
  {
//游戏屏幕上显示“Open Map”
    DWORD addr = 0x0046DE10;
    char *buf = "Open Map";
    __asm
    {
      xor edx,edx;
      mov ecx,buf;
      call addr;
    }
//开地图的代码
    write_ma(0x00404BA8,"7500");
    write_ma(0x00410C81,"BDFFFFFFFF");
    write_ma(0x00414046,"7400");
    write_ma(0x0046EA70,"909090909090");
    write_ma(0x0046EA7D,"EB29");
    write_ma(0x0046EA98,"7500");
    write_ma(0x0046F7EE,"310578A16500850500A86500750AFF0D90A6650090909090");
    write_ma(0x0046F815,"7400");
    write_ma(0x0046FA6B,"310578A16500850500A86500750AFF0D90A6650090909090");
    write_ma(0x0046FA92,"7400");
    write_ma(0x00470F2B,"7400");
    write_ma(0x00470F43,"EB04");
    write_ma(0x00470F4B,"EB09");
    write_ma(0x00471067,"7400");
    write_ma(0x0047107F,"EB04");
    write_ma(0x00471087,"EB09");
    write_ma(0x004C9541,"0F8400000000");
  }
}
回复

使用道具 举报

1442

主题

8

好友

7万

积分

仲裁者

luaTeRran

2012年度八达十大水友

13
发表于 2009-2-13 18:15 |只看该作者
和金山游侠那些一个道理


回复

使用道具 举报

21

主题

0

好友

3万

积分

大和

牛奶浪人★淏

战队
[B.D]=
种族
Protoss
12
发表于 2009-2-13 18:14 |只看该作者
看雪人气怎么样了现在
Aphrodite 发表于 2009-2-13 18:06


一般。。。
回复

使用道具 举报

321

主题

2

好友

5万

积分

光明执政官

拉票小王子

11
发表于 2009-2-13 18:11 |只看该作者
在看天书
回复

使用道具 举报

6

主题

0

好友

2万

积分

大和

10
发表于 2009-2-13 18:08 |只看该作者
没明白啥意思
回复

使用道具 举报

0

主题

0

好友

7万

积分

仲裁者

9
发表于 2009-2-13 18:06 |只看该作者
看雪人气怎么样了现在
回复

使用道具 举报

0

主题

1

好友

1万

积分

航母

8
发表于 2009-2-13 18:04 |只看该作者
用这个遇见作弊的可以刷屏骂啊
回复

使用道具 举报

91

主题

4

好友

5万

积分

光明执政官

7
发表于 2009-2-13 17:22 |只看该作者
Are you watching closely?
Look closer,never show anyone.
They'll beg you, and they'll flatter you for the secret, but as soon as you give it up, you'll be nothing to them.
You understand? Nothing.
The secret impresses no one. The trick you use it for is everything.

回复

使用道具 举报

35

主题

5

好友

5万

积分

光明执政官

粗人

6
发表于 2009-2-13 17:18 |只看该作者
@#¥%!
回复

使用道具 举报

10

主题

0

好友

8115

积分

大象

5
发表于 2009-2-13 17:17 |只看该作者
看的懂个球.!
回复

使用道具 举报

21

主题

0

好友

3万

积分

大和

牛奶浪人★淏

战队
[B.D]=
种族
Protoss
4
发表于 2009-2-13 17:15 |只看该作者
在编辑 不要着急..
回复

使用道具 举报

56

主题

5

好友

17万

积分

黑暗执政官

~解梦虫族~

2008年度八达十大水友 2009年度八达十大杰出青年

3
发表于 2009-2-13 17:14 |只看该作者
...完全看不懂
处女默默飘,对你们微笑一下,(*^__^*) 嘻嘻……O(∩_∩)O...哈哈...
回复

使用道具 举报

21

主题

0

好友

1万

积分

航母

2
发表于 2009-2-13 17:14 |只看该作者
图?????
我真的懂,你不是喜新厌旧。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

手机版|Archiver|八达网    

GMT+8, 2026-3-13 09:40

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部