LocalOS 0 1 1 版发布 内附本程序源码及Java版网游找CALL示例源码

本文档展示了一个使用LocalOS的Java外挂开发示例,包括读取进程内存、模拟游戏行为如吃血、加蓝、施放魔法。提供了完整的源码,适合初学者了解外挂开发。
摘要由CSDN通过智能技术生成
                 


  俗话说隔行如隔山,感觉上是一回事,自己动手又是另一回事.这两天回家就帮亲戚家孩子做外挂,本以为很简单,结果泡广海逛看雪的,研究了三个半晚上才在今天接近凌晨时大体弄好.万幸自己一直在混软件这碗饭,并没真正的隔行,最多是"一座山上两座峰,搭个吊桥就能通"罢了.

  前两天博文中提过一次,这次帮亲戚做外挂为了省事没做封包的(事实上没写过外挂,也不敢写封包的),只是利用程序自身CALL指令在模拟事件, 写的"内挂"罢了.个人以为,写这类东西主要难在脱壳和过防护,过去便一马平川,真正开发时的问题反而很少.

  大前天写过一个Java的汇编混合类库,刚才写外挂时顺便给它添了点东西,又根据广海的找CALL入门示例延伸出一个Java版的实现,现发布于此博客,欢迎有兴趣者帮忙继续完善类库.

——————————————————————————————————————————————————————

愚以为,Java做外挂开发有优点如下:

  1、隐蔽性高:由于标准Java程序在运行时仅会显示主线程,也就是Java或者Javaw,开发商将很难据此判断外挂进程的使用状态(想查标题和窗体类名识别?1秒能随机换N个);而对于特征码识别,Java的解释型特点令class完全能够做到动态随机构建,完全可以自动变更特征码,让屏蔽软件防不胜防。也就是说,大多数针对exe文件的监测方法,并不能很好的对Java通用,Java外挂将有较高的隐蔽性。当然,也许你会说厂商可以干脆停止所有Java进程。是的,可与此同时,这也意味着厂商的开发人员承认了自己的无能——由于识别不出犯人,只好见人就杀。如果偏巧赶上个用永中office之类Java软件工作的主,结果没保存就被游戏强断了(或者开着Java进不去游戏,一样会有人抗议),便有热闹可看^^另外相关人等大可以在背后写信鼓动Sun或者IBM对厂商提出交涉(有炒作的价值,他们不一定不管哦~),再不然借机把相关资料和截图发往各大Java社区,不用咱们动手,他们的游戏就会被疯狂修改,甚至连源码都被发上网来……  

  2、先天适合注入操作:我们都知道JNI不光能调用本地接口,也能让本地程序动态调用指定Java类及相关函数,而对于其他语言来说,这是较难实现的;只要善于利用这点,我们便可以令实现了JNI接口的DLL文件充当发报器,而让Java平台充当中间件,最大限度的扩展功能,并以此为基础提供便利的进程间通信。

  3、跨平台:我们心理都很清楚,Java并没有真正意义上的跨平台,Java本身即是一个平台,只不过针对不同的操作系统有不同的版本罢了。但是,只要对于用户体验而言,Java是在跨平台,便已经足够了。如果那天你开发的网游在其他系统出了新版,你同样可以在不改变原有外挂UI及外部接口的情况下追过去,而且是游戏敢做到什么系统,你就敢追到什么系统。还有一点,对于完全脱机版的封包外挂而言,Java能让你的用户在绝大多数时候,绝大多数系统中,坚持挂机不动摇……

  4、开发封包类外挂便利:Java提供的网络通讯功能是非常强大的,并且有大量第三方组件支持,对于脱机的封包外挂而言,Java实现远比C/C++实现简单,另外跨平台在第三点已经强调了。

  5、开发周期短,适合团队协作:Java先天具有适合商业开发的基因,团队协作开发对于熟悉Java者也只是小菜一碟罢了。Java代码的可读性相较C/C++或者Delphi而言要更好些,调试也更简单,有助于你的外挂早日上市。

缺憾:
  不知道。(对于Java所有缺点,鄙人认为都有方案解决,所以暂时没想到缺点:))


关于找Call部分,直接转载自广海社区,发帖人为[gao6621],原文地址: http://ghoffice.com/bbs/read-htm-tid-50497-keyword-%B3%AC%BC%B6.html

************************************转载开始************************************

首先说明,这个教程以一个找CALL的练习程序为例子。之所以不拿游戏,因为游戏找CALL时间长了,不适合做教程,而且本练习涵盖参数。我将说明为什么这么调用,为什么这么写!

好的。偶们好的,偶们这节课需要用到的程序为【wygailf】制作的一个找CALL测试程序。首先感谢他!


 

这个就是我们用到的程序,OK,打开他并且用OD附加进程!


 
并使其进入“运行”状态

好的,下面我没开始找CALL,首先说明一下,CTRL+F9这个是“运行到返回”。为什么要按这个按钮?----就我的理解,假设把程序比做很多层的一个盒子,而CALL就是我们要从盒子里拿出来的东西。

那么,如果我们想拿出来CALL,怎么办?当然是打开盒子,取出盒子,再打开盒子,取出盒子.....而这个CTRL+F9就是这个打开盒子到取出盒子的过程。运行到返回,顾名思义,就是运行到RET(返回)截止。

而这个RET也正是跳出本层的一个关键点。每一个RET都有可能是一层。所以这样也就解释了为什么有的时候按三下CTRL+F9和四下CTRL+F9的原因了。



好,说的就这些。下面LET'S GO!



我们首先下断点bp send。


 
然后回车。如果不确定自己是否成功的下了断点。可以在OD中按ALT+B来查看

 

好的,这个就是我们下的断点了。始终就是断点有效,也可以暂停断点。选择一个断点,敲空格。这个断点就变成了“禁用”。这样就算暂停了断点。OK这里不再赘述,我们开始。


==============================================================================================================


首先,我们来个HP药水试试!


 
在这里选择吃药。然后OD会断下!

 

这里是程序断下的地方,我们可以看到下方有如下注释:

 

SEND来自.....说明这里是send函数被断开的地方。


继续,CTRL+F9我每一步都会记录下来,一点一点给新手解释为什么!

 

上图是我按下第一次CTRL+F9之后转到的RET。这里再顺便说一句。看到这里的RET 10了没有。这里是RET 10就是有4个参数的RET,一个参数占4个字节。那么按照这么说来应该是 RET 16才对啊。其实这里的10是16进制的10,那么16=10(16进制)=4x4所以这里是RET 10。好,下面说正题:看到上面的CALL了没有。CALLWS2_32....当你看到这个的时候,你就可以毫不犹豫的再次按下CTRL+F9了,说明你现在还在系统的范围内。还没有进入到程序。为什么系统跟程序不一样?因为程序是依托在WINDOWS平台运行的。那么如果程序要干什么事情,就要跟WINDOWS打声招呼。也就是SEND函数!程序跟系统说,我要做动作了,系统说批准,程序说我要喝药,系统说批准,程序说我去哪里喝药,系统说CALL!好的,这里的CALL就是我们需要的CALL了。:-)

 

第二次CTRL+F9,这里的CALL还是差不多,还在系统层内。我们继续!

 

OK,以上是第三次按CTRL+F9所看到的信息。

看到这里了吗,已经是程序层了。也就说这里很有可能就是我们需要的CALL了。OK。我们来测试一下,我们来看这一段

 

lewei2000提醒:以下几点解释有误,初学者略过,楼主还需深化汇编知识

看第一行:mov dword ptr fs:[eax],edx-------这里的意思是:将指针赋值到dword,后面
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值