首页
论坛
课程
招聘
ztd
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
6
回帖
26
粉丝
0

[分享]3句代码,在星际争霸屏幕上写字(详细教程,有图,附源码)

2009-1-6 20:31 27708

[分享]3句代码,在星际争霸屏幕上写字(详细教程,有图,附源码)

ztd 活跃值
1
2009-1-6 20:31
27708
我们来看看在游戏里怎么写字!
游戏版本:星际争霸1.16.0
工具:OllyDBG,VS2005

如下图:


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

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


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


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


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


第五步:运气真好,居然断到了。
1,如果断点正确(看下图1的注释),就按下图中所标的1,2,3步骤操作,之后,在OD按F9运行程序。
说明:按这三个步骤操作很重要,它可以帮你带到写屏函数那里去。因为找到写字符的内存了,我们就可以找到显示字符的函数了,因为游戏要读这段字符内存来进行显示。


第六步:离胜利不远了。
它把你带到写屏函数附近了。如下图所示,为什么要在2那里下个断再走一步?因为这还不是写屏的主函数,因为它RETN 0C,就算你用远程进程Call这个地址,程序也会出错,不会正常返回,所以我们还要往回找,看这里哪里CALL进来的,按下图的说法操作。


第七步:搞定!


第八步:通过远程调用游戏的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;
                }

[看雪官方培训]《安卓高级研修班(网课)》9月班开始招生!挑战极限、工资翻倍!

上传的附件:
最新回复 (57)
patapata
雪    币: 261
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
0
回帖
17
粉丝
0
patapata 活跃值 2009-1-6 22:01
2
0
具体讲讲call怎么找的吧。
colboy
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
11
回帖
371
粉丝
0
colboy 活跃值 2009-1-6 22:05
3
0
是呀,不然大家学不到东西~~~~
shoooo
雪    币: 200
能力值: (RANK:650 )
在线值:
发帖
99
回帖
2170
粉丝
0
shoooo 活跃值 16 2009-1-6 22:07
4
0
show me the money
ztd
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
6
回帖
26
粉丝
0
ztd 活跃值 1 2009-1-6 22:28
5
0
等有时间再写吧,先说个大概,找这个call是根据更改游戏网速时,它会在屏幕上提示你是low或high,然后用OD查找内存字符串“**low**”,因为是动态分配的内存,所以选择了这附近很大一块内存用OD的内存写入下断点,运气还不错,找到了写内存的这一句代码。然后找到这个写屏的函数起点,就OK了,因为时间问题,详细的步骤下次再说吧。
ztd
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
6
回帖
26
粉丝
0
ztd 活跃值 1 2009-1-6 22:35
6
0
顺便再给出一段星际联网时可以地图全开的代码(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");
        }
}
glassfox
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
11
回帖
69
粉丝
0
glassfox 活跃值 2009-1-7 00:27
7
0
请问楼主
0x0046DE10
是怎么找到的

不会下断啊。。。

   xor edx,edx; ---------》 这个改成 mov edx,0 可以么?
    mov ecx,buf;
    call addr;
Osris
雪    币: 174
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
23
回帖
128
粉丝
0
Osris 活跃值 2 2009-1-7 01:23
8
0
ls,1个字节的不用,难道喜欢用6个字节的?
veninson
雪    币: 215
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
26
回帖
102
粉丝
0
veninson 活跃值 2009-1-8 17:24
9
0
试了下开图,死掉了 LZ的星际是哪个版本啊?不是108?
一直不知道开图怎么找,还想做个War3开图的说
justlovemm
雪    币: 182
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
33
回帖
605
粉丝
0
justlovemm 活跃值 2009-1-8 17:54
10
0
不是不喜欢一个字节得,而是VC得内嵌汇编不认识 xor 同一个E?X。
呵呵
ztd
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
6
回帖
26
粉丝
0
ztd 活跃值 1 2009-1-8 17:58
11
0
不会死掉啊,我的是1.08的。
xbpiao
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
0
回帖
2
粉丝
0
xbpiao 活跃值 2009-1-9 09:28
12
0
关注ing

这样很好玩啊,特别是地图全开
imdemon
雪    币: 53
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
56
回帖
192
粉丝
0
imdemon 活跃值 2009-1-9 11:31
13
0
路过,顶个,学习
lixupeng
雪    币: 564
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
31
回帖
1636
粉丝
0
lixupeng 活跃值 2009-1-9 13:07
14
0
路过支持下
bk7477890
雪    币: 102
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
2
回帖
37
粉丝
0
bk7477890 活跃值 2009-1-9 14:38
15
0
很关注,请问下楼主的星际版本
ztd
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
6
回帖
26
粉丝
0
ztd 活跃值 1 2009-1-9 18:13
16
0
1.08的,不过不可以在浩方全开地图,因为浩方有反写内存之类的保护。可以局域网和单机。
dragonyee
雪    币: 208
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
0
回帖
38
粉丝
0
dragonyee 活跃值 2009-1-10 22:58
17
0
能不能把浩方的保护干掉?这样就好玩了~~
曾定国
雪    币: 191
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
8
回帖
34
粉丝
0
曾定国 活跃值 1 2009-1-10 23:19
18
0
把代码 嵌入到 星际争霸中,
ztd
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
6
回帖
26
粉丝
0
ztd 活跃值 1 2009-1-11 10:54
19
0
水平有限,还不知道要怎么才能干掉,唉。

ls的办法可以,把星际EXE直接改了保存,管它什么反作弊的都拿它没办法。

但主要还是想知道怎么样才能干掉浩方。
ylwnet
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
2
回帖
3
粉丝
0
ylwnet 活跃值 2009-1-11 15:06
20
0
收藏了..........
fnzhangyao
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
1
回帖
44
粉丝
0
fnzhangyao 活跃值 2009-1-11 21:03
21
0
经典啊。太感谢楼主了。
vcfan
雪    币: 102
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
4
回帖
36
粉丝
0
vcfan 活跃值 1 2009-1-12 15:06
22
0
俺喜欢玩1.08的。
kagayaki
雪    币: 308
活跃值: 活跃值 (31)
能力值: ( LV3,RANK:20 )
在线值:
发帖
164
回帖
1081
粉丝
0
kagayaki 活跃值 2009-1-12 23:31
23
0
收藏!!!!!!!!
ucantseeme
雪    币: 450
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
46
回帖
996
粉丝
0
ucantseeme 活跃值 2009-1-13 16:45
24
0
下个优化版
ucantseeme
雪    币: 450
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
46
回帖
996
粉丝
0
ucantseeme 活跃值 2009-1-13 16:45
25
0
108操控明显没后面几个版本好点
cntrump
雪    币: 1675
活跃值: 活跃值 (10)
能力值: ( LV12,RANK:670 )
在线值:
发帖
204
回帖
2065
粉丝
0
cntrump 活跃值 13 2009-1-13 21:55
26
0
这就是传说中的写外挂的第一步么...........
ztd
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
6
回帖
26
粉丝
0
ztd 活跃值 1 2009-1-13 23:00
27
0
写程序第一步都有Hello Word!吧?
suntiger
雪    币: 301
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
6
回帖
128
粉丝
0
suntiger 活跃值 2009-1-20 17:17
28
0
我操作到第四步,下了内存写入断点,然后再在游戏里设置后,星际主程序就死掉了,但我想内存断点设的位置应该是正确的,为什么主程序会死掉呢?
ztd
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
6
回帖
26
粉丝
0
ztd 活跃值 1 2009-1-20 18:35
29
0
换个OD版本试试。我用的是OD1.10汉化第二版。
comeon
雪    币: 314
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
9
回帖
212
粉丝
0
comeon 活跃值 2009-2-3 12:33
30
0
顶下,坐下慢慢看
solohac
雪    币: 251
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
3
回帖
35
粉丝
0
solohac 活跃值 1 2009-2-3 15:53
31
0
试过找魔兽争霸的吗?
我试了下,找不到 说话  或者 “启用秘籍” “已完成”
这些都没找到
名字倒是找到了
快雪时晴
雪    币: 326
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:170 )
在线值:
发帖
34
回帖
2278
粉丝
0
快雪时晴 活跃值 4 2009-2-3 16:15
32
0
非常棒的tut,我不玩游戏,所以没法实验了。
想看看你的完整代码
ztd
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
6
回帖
26
粉丝
0
ztd 活跃值 1 2009-2-10 22:52
33
0
附加了源码,用HOOK实现的。
安摧
雪    币: 212
活跃值: 活跃值 (10)
能力值: ( LV7,RANK:100 )
在线值:
发帖
22
回帖
348
粉丝
0
安摧 活跃值 2 2009-2-11 18:14
34
0

lz的思路很有帮助啊!
上传的附件:
suntiger
雪    币: 301
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
6
回帖
128
粉丝
0
suntiger 活跃值 2009-2-12 10:56
35
0
问题解决了,上次那个问题应该跟OD版本无关,上次我用的是OD1.10英文版,由于我游戏是全屏窗口,所以每次下了内存断点再写入的时候,在游戏中看上去是死掉了,只能用Alt+Tab键切换到OD就OK了.
吉行天下
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
0
回帖
6
粉丝
0
吉行天下 活跃值 2009-2-12 12:59
36
0
支持  楼主 看看
filly
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
10
回帖
49
粉丝
0
filly 活跃值 1 2009-2-13 11:49
37
0
很早以前 看过一篇文章,貌似美国人写的,在星际争霸中实现写屏的东东。那个讲的很简单。
LZ很强大,写的很详细 so good~
swlepus
雪    币: 134
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
35
回帖
219
粉丝
0
swlepus 活跃值 2009-2-13 14:48
38
0
shoooo me the money.
霹雳狂风
雪    币: 184
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
15
回帖
94
粉丝
0
霹雳狂风 活跃值 2009-2-17 23:46
39
0
还有几个刷钱的呀,我也想去作弊啊
lkan
雪    币: 214
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
0
回帖
15
粉丝
0
lkan 活跃值 2009-2-24 06:42
40
0
用楼主的代码实验没反应?
我按你的步骤走了一遍,1.08版本的,也找到是0046DE10,摁下快捷键什么也没有,换成0x0048CFB0游戏直接结束了?
ztd
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
6
回帖
26
粉丝
0
ztd 活跃值 1 2009-2-24 18:45
41
0
游戏开局后,才能显示字出来。否则只会听到“滴”一声,什么都没有。
capfmud
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
1
回帖
9
粉丝
0
capfmud 活跃值 2009-3-12 21:55
42
0
楼主关心一下帝国-征服者吧,
这个游戏困绕了我很长时间了.
九栋五楼
雪    币: 15
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
13
回帖
66
粉丝
0
九栋五楼 活跃值 2009-3-12 22:40
43
0
好玩`
  很好玩
yqi九九
雪    币: 202
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
0
回帖
8
粉丝
0
yqi九九 活跃值 2009-3-13 11:01
44
0
楼主真强,学习了..
twtygah
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
0
回帖
1
粉丝
0
twtygah 活跃值 2009-4-17 17:03
45
0
上面很明确地告诉了你call是怎么找的,额
风清清风
雪    币: 201
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
1
回帖
5
粉丝
0
风清清风 活跃值 2009-4-20 10:55
46
0
你确信解决了?为什么我每次操作后Alt + Tab切换出来,电脑就花屏了呢,什么都做不了!
漂亮乞丐
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
0
回帖
22
粉丝
0
漂亮乞丐 活跃值 2009-4-20 15:38
47
0
深深BS一下!
lwykj
雪    币: 352
活跃值: 活跃值 (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
6
回帖
235
粉丝
0
lwykj 活跃值 2009-4-24 14:53
48
0
  还是研究帝国时代比较清爽! 毕竟是微软自己人搞的!
film
雪    币: 221
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
3
回帖
94
粉丝
0
film 活跃值 2009-4-25 22:20
49
0
厉害!如果是中文的就好了
williamsvw
雪    币: 98
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
27
回帖
84
粉丝
0
williamsvw 活跃值 1 2009-4-27 17:38
50
0
很不错,支持这种单机游戏CALL
游客
登录 | 注册 方可回帖
返回