首页
社区
课程
招聘
[下载]2012年11月DNF"外挂"
发表于: 2012-11-6 13:33 30072

[下载]2012年11月DNF"外挂"

2012-11-6 13:33
30072
本文写给想自己写DNF外挂却苦于技术拙劣的盆友。
说起外挂,很多人觉得挺神秘,很多新手想入门,也没找到合适的突破口。再加上网上的资料显示现在的外挂都是ABCDE语言编写,最简单的E语言也不是很好学,所以大部分人总是望而却步。外挂教程肯定首选“郁金香”系列,尽管很贵,但用心淘总能找到盗版滴。他从驱动保护讲起,很详细,适合入门。缺点是太详细了,看完最快也得1个月。要是边看边练习得小半年时间。
这里我为了鼓励新手,能短期内有所成就,特意选择DNF这款比较流行的游戏介绍,让大家意识到大部分游戏外挂的本质是一样的。
外挂其实就干了2件事,模拟键盘鼠标操作,修改内存。模拟键盘鼠标可以制作挂机类外挂,用这个方法我也做过扫雷秒杀和连连看秒杀。这个没啥意义,外挂主要还是在于修改内存。这个功能碉堡了,最低级的是修改所有单机游戏数据,我是拿war3的全图功能练习的。推广到网游就是能修改本地运算的各种数据,DNF本地运算的数据巨多(咋知道呢,在副本中拔掉网线,这个图里的怪你还是能打,他也掉血,你也能用技能),所以这里以DNF为例。
外挂通用工具首选OD,最基本功能下断点,之后扩展功能无数,缺点就是功能太多,对于不想深入研究外挂的我们没什么用。所以我这里介绍的外挂开发主要用CE。
CE也是无比强大的工具,简单粗暴。最牛逼之处在于写脚本,还so easy。
上面全是废话,下面正式介绍CE开发DNF外挂方法。
1.确定你的操作系统,win7X64的盆友可以直接使用,XP的盆友需要先下载XP过tp驱动,开发之前先加载驱动。上游戏,打开CE附加DNF。
2.我默认你对于CE熟悉,会搜索数据,这个不难,百度一下2小时以内搞定。搜索你人物的当前生命值,有两个绿的,一个黑的,两个基址哪个都行,黑色的是生命上限。如下图:

先来个开胃小菜,我无意中发现的。那个生命上限的值可以随意修改,在副本中,当你把它改为小于当前生命时,你的当前生命会变为100%,目测这是一个比例关系,举个例子,你现在有1000血,上限2000,当你把2000改为1500时,你的生命会变成2000*(1000/1500),不懂没关系,告诉你个结果,当你把它改为1时,你会瞬间满血!这个同样适用于蓝(MP)。MP上限的地址是HP上限地址+4。
知道了这个,CE有个邪恶的功能,可以锁定内存数据。对,是不是你也想到了!把MP,HP上限这两个地址里的值锁定为1,是不是无限血无限蓝!当然,这个后果就是小三,但锁定功能有个锁定间隔,在设置里,你还可以这样:设置成10000ms,即每10秒一次满血满蓝,时间间隔越大越稳定,目测1min一次满血满蓝就不太会检测了。如下图:

有些时候是被群怪秒的,想在关键时刻加血怎么办?别急,CE还有个功能(简直就是多啦A梦啊,要啥有啥)--快捷键。右键选择设置个热键-比如F1,就实现了游戏时按F1回满血,是不是很像某款外挂了!
以上这些可以在仓库完成。找到生命上限地址,并设置好锁定间隔和热键,操作熟练1min时间就可以初始化完成。

上面是个小插曲,如果你认为CE能做的只有这些,那你就得问问元方怎么看了。有些图你就是无限生命也过不去,没有伤害啊!我玩游戏的准则是“无挂不游戏”,没有时装的我怎么过英雄图领主塔呢?就在上周我做好驱动之后,用OD追了一个怪打我掉血的CALL,就有发现了一个更加邪恶的功能。
追call的过程我就不罗嗦了,相信你们也不关心,因为我也不太掌握~结果就是这几行代码,可重要了:
00D125ED - 6a 00                   - push 00
00D125EF - 57                         - push edi
00D125F0 - 53                         - push ebx
00D125F1 - 8b ce                     - mov ecx,esi
00D125F3 - ff d2                      - call edx


他们在DNF的位置会变,但是CE有特征码搜索,这个不是事。从今天上午更新来看这几行地址没变。
这个call的执行是在你打怪,怪打你,你回血(装备,技能,物品,副本里的回血符),怪回血时,也就是贯穿整个地下城!
最后一行代码call edx的栈顶是目标的当前真实生命,简言之,执行call edx之前如果栈顶值为0,执行之后不是你死就是秒怪!
下面要做的就是区分你死还是怪死。方法就是你打怪和怪回血(即怪生命值发生变化时)时edx的值和你生命值变化时edx的值不同,所以判定若你打怪则将栈顶值改为0,怪打你则栈顶值你看着办。
我实验了几张图,bug如下:
每张图怪物当前血值都是同几个基址,所以清完一张图后,进入下一张图,会初始化这些地址为新的怪物血值,但这时你将其设为0,进图一瞬间秒全图怪,实现全图秒怪,但掉不掉线不说,当这张图是boss房时,boss死了游戏有其他操作比如死亡慢动作关闭房间门等,你就会卡在FB门外进不去,游戏崩溃。
解决:boss房先关闭作弊脚本,进去之后等怪初始化完毕,再开启。
中国特色告诉我们:秒怪主义在中国是行不通的。
让我们再改进算法,既然怪物血值我们随意修改,那我们不一次打死他,让它更新血值时再减去1000,作为玩家我们的体验就是一枪下去boss血比以前多掉1000,就像高强武器无视防御打了1000滴血,从此20+武器弱爆了。目测这种算法比较稳定,当这个“附加伤害”值“比较合理”时,游戏客户端是判定不出来滴。
再介绍一种算法,来源于我以前用的另一款外挂:弱怪。就是初始化怪物血量时就可以让怪的血少点,设为固定1W或当前值-5000等等,之后正常打,王图就是简单图。这个也算稳定,只要过图时间不算太快。
对于怪打我我们可以设定我们自己的血值,这个我不说你们应该已经懂了,神马假无敌(显示受伤动作,伤害值,但不掉血)都可以实现。

上面一大堆分析快餐玩家可以无视,我们直接来说说怎么实现她!
3.点击CE的“内存浏览”,找到我给的那段代码,选中push 00那一句,点“工具”--“自动汇编”,如图:

再点弹出“自动汇编”里的“模版”--“作弊表框架代码”,之后再点“模版”--“代码注入”,确定(一定要选中push 00)。
至此,脚本框架搭建成功。
简单介绍一下这个脚本编辑框,我也不是很熟,只说说常用的。


[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048) //2kb should be enough
label(returnhere)
label(originalcode)
label(exit)

0060C6A0:
jmp newmem
nop
returnhere:

newmem: //this is allocated memory, you have read,write,execute access
//place your code here


originalcode:
add [esp+4],50
push ebp
mov ebp,esp
mov eax,[ebp+10]

exit:
jmp returnhere

 
 
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
0060C6A0:
push ebp
mov ebp,esp
mov eax,[ebp+10]
//Alt: db 55 8B EC 8B 45 10


上面是我写的简易的回血功能。

0060C6A0:    是从DNF进程开始跳转到这个咱自己编写的脚本的地址,也就是push 00那一句的地址,运行脚本后,如果你再打开内存浏览去看这一地址就会发现push 00变成了 jmp XXXXX
newmem:      这个是在DNF进程内分配的一块内存,大小由
alloc(newmem,2048) //2kb should be enough  这句决定,2048足够了。我们要写的代码就可以写在冒号后面。但是执行我们写的代码之前,要先执行
originalcode:   这个。这个是原来的DNF代码,我们要替换他,可以在这里直接修改,执行这几句之后才执行newmem:后面的。

好了,我们的目的是挨打时加血。0060C6A0这个地址是我们挨打是ebx里的值(在call ebx下断点,挨打后停住看寄存器值,这些CE就可以做到,不需要开OD,当然,OD会更专业更方便一些),找到0060C6A0,游戏执行到这里时,你看esp里的值,(肯定不是你挨打后的当前血值,因为执行call ebx后将下一行代码地址入栈了,应该是这个call执行后的返回地址),把他+4去查它里面的值,即[esp+4]的值使我们挨打后的血值,我们可选择mov [esp+4],xxx来设定我们的血值维持某一值恒定不变,(以防检测最好恒定为不是生命上限),当然,我这里选择的是
add [esp+4],xxx 就是增加当前生命,效果就像是“格挡伤害”或“挨打回血”。
就这么简单!
加完这一局我们点“文件”---“分配到当前作弊表”,再设置个热键,就像某款外挂的F2无敌一样。
是不是很有成就感。
ps:我特意点了一级HP恢复技能,这样副本里无时无刻不在调用这一函数,你可以一直回血,这个功能这个很稳定,我刷到29级没掉线一次。
这个脚本还可以动态修改,特别方便。之后在CE主界面点“保存”可以把脚本保存起来,下次进CE点“打开”就可以载入了。

我们打怪时ebx里的值是0246C9C4,在该地址写入
mov [esp+4],0   即可实现秒怪。进副本之前开启是全屏秒怪(异界和塔可以尝试,不推荐,我刷T掉了,当然,这个很安全,1小时后又是一条好汉),副本中开启可以单独秒怪,如果深渊怪太难打可以临时开启一下。

就这么多了,至于3S,加速,修改属性,修改技能我还没有研究,也不想深入下去了,我只是在这里扔个转头,你们自己研究玉去吧。

可能你觉得CE终归略显低端,不像是在“写挂”,而只是用工具过,到底还是用别人的东西。
我也尝试了C++编写,但我智商拙计呀,混编不太好,只做了个最简单的“加血”那个功能的实现,还只能输入0-255之间的数值。我给出关键代码,大家剩下的自己开发就行了,只要心细就不太难,程序我放在附件里,和CE脚本(CE点打开直接就能用)一起打包。

        HWND hwnd = ::FindWindow(NULL,"地下城与勇士");
	
	if (!hwnd)
	{
		MessageBox("请先运行游戏!");
		return;
	}

	DWORD processid;
	::GetWindowThreadProcessId(hwnd,&processid);
	HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS,false,processid);

这是个万能开头,新建个mfc,在onbutton里直接敲就行,接下来远程分配内存
::ReadProcessMemory(handle,(LPCVOID)0x0060C6A0,(LPVOID)&m_char,6,NULL);
//这句保存原来的代码,以便可以恢复,m_char是类成员变量
LPVOID newaddr=VirtualAllocEx(handle,NULL,0x256,MEM_COMMIT |                      MEM_RESERVE,PAGE_EXECUTE_READWRITE);
//这句远程分配DNF内存
m_newmem=newaddr;
//m_newmem是类成员变量,保存申请的内存地址,以便释放
 char ch[4]={0x83,0x44,0x24,0x04........};
//自己的汇编代码,值得注意的是e9(jmp)后面的数值需要有个转换公式(目标地址-e9的地址-5),不会的网上搜一搜吧,
::WriteProcessMemory(handle,(LPVOID)0x0060C6A0,(LPVOID)&m_char,6,NULL);
//这句是恢复DNF原来代码,也可用于修改申请内存区域代码,第二个参数是要修改的地址,第三个参数是要写入的值,第四个参数写入几个字节
VirtualFreeEx(handle,m_newmem,NULL,0x256);
//这句用于释放申请的DNF内存(目测是不是放都一样,可以防止内存侧漏)

有了以上函数可以说只要你会写汇编代码,就能实现各种功能。
当然,还有个远程注入call函数,各位请自行开发吧。

[课程]Android-CTF解题方法汇总!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (65)
雪    币: 4580
活跃值: (992)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
不错对DNF不了解的可以了解下
2012-11-6 14:35
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
支持。。。。。。。。。。。。。。。。
2012-11-6 22:25
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
DNF有驱动保护要怎么过呢
2012-11-6 23:11
0
雪    币: 223
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不错报错研究一下
2012-11-6 23:23
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
3Q楼主,需要这样的技术文章!
2012-11-11 17:35
0
雪    币: 207
活跃值: (39)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
很棒的教材~
2012-11-11 17:55
0
雪    币: 18
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
MARK一下。有时间慢慢看。
2012-11-11 19:54
0
雪    币: 46
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
楼主分享的不错啊,正好适合入门。简单粗暴。。
2012-11-12 09:13
0
雪    币: 330
活跃值: (83)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
标记一下马上要用
2012-11-12 14:35
0
雪    币: 25
活跃值: (477)
能力值: (RANK:20 )
在线值:
发帖
回帖
粉丝
11
晕 单机游戏这么整,还能玩吗  那不得十天满级?
2012-11-12 14:59
0
雪    币: 7265
活跃值: (5088)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
这个是和尚的啊,你是和尚?
上传的附件:
2012-11-12 15:23
0
雪    币: 64
活跃值: (60)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
13
[QUOTE=lononan;1117120]这个是和尚的啊,你是和尚?
[/QUOTE]

当然不是,我在帖子里说了驱动是网上找的过期的,自己修改了下上传的。
2012-11-12 15:35
0
雪    币: 18
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
感谢楼主分享。我现在对外挂有了初步的认识,对汇编学习起来也更有兴趣了,汇编真是相当强大啊。
2012-11-12 17:21
0
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
学习了,感谢分享,外挂也很厉害
2012-11-14 20:39
0
雪    币: 3
活跃值: (132)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
感谢楼主  最近正在研究汇编  学习了
2012-11-14 21:13
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
汇编写出来就是不一样,LZ求搞基!
2012-11-15 16:49
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
顶下楼主,技术可以的样子!
2012-11-15 23:59
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
2楼的头像, 亮了~
2012-11-16 12:40
0
雪    币: 50
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
楼主 加个QQ 8900780
有事请教!
2012-11-16 12:53
0
雪    币: 107
活跃值: (326)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
很不错的分享啊......
2012-11-16 13:15
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
楼主的文章真不错,图文并茂。 新手也看的懂 哈哈
2012-11-16 21:37
0
雪    币: 500
活跃值: (865)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
感谢lz分享
2012-11-17 08:07
0
雪    币: 500
活跃值: (865)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
请教一下,dnf的代码被VM了吗,lz怎么分析的,还有血值是不是加密过的,能直接修改么
2012-11-17 10:16
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
讲的很生动,详细啊!!!!!!

希望楼主继续!!!
2012-11-17 10:33
0
游客
登录 | 注册 方可回帖
返回
//