如何打造一款游戏外挂 (3)

例如下面这样的连连看,当你用CE观察内存时,会发现它的数据奇妙在于这是一个二维数组,在内存中不同牌有不同数值,此处参考网上lgx大佬给出的方案。

13

想要自动消除连连看,肯定需要先模拟鼠标的操作,介绍一个API,它可以模拟鼠标操作,但不会移动我们的物理鼠标(虚无点击?)。

LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam); 其中Msg为WM_LBUTTONDOWN,WM_LBUTTONUP,表示对鼠标的软件模拟操作(虽然兼容性和安全性不如硬件模拟的mouse_event,但不改变移动鼠标指针)

除此之外,对一个二维数组寻找可以消除的两幅牌,可以使用BFS算法实现。

void clearapair() { //找到可消去的两个点并点击 POINT p1, p2; int x1, y1, x2, y2; for (y1=0; y1<11; y1++) for (x1=0; x1<19; x1++) { if (!chessdata[y1][x1]) continue; for (y2=0; y2<11; y2++) for (x2=0; x2<19; x2++) if (chessdata[y2][x2] && (chessdata[y1][x1]==chessdata[y2][x2]) && (x1!=x2 || y1!=y2) ) { p1.x=x1; p1.y=y1; p2.x=x2; p2.y=y2; readchess(); if (llk_bfs(y1, x1, y2, x2) != -1) { click2p(p1, p2); return; } } } } 四. 网络游戏修改

这个是我从小学四年级开始玩的游戏,因为时间很长没有登录,这里累积了很多经验,在领取之前我们可以先观察一下。

14

抓到了一条表单。

14

初步分析,经验数据不是直接明文规定的,而是从了其他数值代替,并且获取经验这一类型也是有其他数字代替,这里初步猜测为age。

14

好吧,可能种类太多,抓不出来相同的Age。

但是我换了一种方式,对宠物使用了两次经验包,抓下来的两次包,都是叫fcode1f3....的这个包。

其中Age类型也是一样。

14

14

现在过了几分钟,我们把第三个包也使用掉。

14

囊达? 难道,这个Age真的是...(小声bb)

还是不确定,让我们用爬虫来模拟这次表单吧,刷爆(封号)!!!

测试N次过后...

21

成功啦!!!

需要注意的是,这个游戏服务器以及几年没更新了,上一条公告还是十年前的。

如果你要使用爬虫来模拟使用道具,非常关键的一个信息就是cookie,这是确认你登录的账号的判断信息。

下面贴出代码(我的cookie肯定要删除掉啦)

import java.util.ArrayList; import java.util.List; import org.apache.http.Header; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ResponseHandler; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.BasicResponseHandler; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; public class Renren { private static String renRenLoginURL = "http://resourcemop.l.imop.com/res/fc/fcde1f39034b164a0d5fe7e455b0c32e"; private HttpResponse response; private CloseableHttpClient httpclient = HttpClients.createDefault(); private boolean login() { HttpGet httpGet = new HttpGet(renRenLoginURL); httpGet.setHeader("Accept-Ranges", "bytes"); httpGet.setHeader("Age", "74342"); httpGet.setHeader("Cache-Control", ""); httpGet.setHeader("Content-Length", "3266"); httpGet.setHeader("Content-Type", "text/plain"); httpGet.setHeader("Date", "Thu, 23 May 2019 08:41:58 GMT"); httpGet.setHeader("Expires", "Sun, 20 May 2029 08:41:58 GMT"); httpGet.setHeader("Last-Modified", "Wed, 22 May 2019 08:13:20 GMT"); httpGet.setHeader("Server", "Apache"); httpGet.setHeader("Via", "1.0 Static1.lzr.squid1:80 (squid/2.6.STABLE7)"); httpGet.setHeader("X-Cache", "HIT from Static1.lzr.squid1"); httpGet.setHeader("Referer", "http://s34.l.imop.com/"); httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"); try { response = httpclient.execute(httpGet); } catch (Exception e) { e.printStackTrace(); return false; } finally { httpGet.abort(); } return true; } public static void main(String[] args) { Renren renRen = new Renren(); renRen.login(); } }

这个其实是两年前写的人人网爬虫,改了改表单数据就可以用啦。

篇幅有限,所以暂时就写这么多。之后可能会继续更新其他的修改教程,steam挂卡这个我是一定要写的。

敲代码是热爱,敲到世界充满爱! 撤退!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpysgw.html