日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

案例教程—200行python实现杀手级连连看外挂程序

發布時間:2023/12/16 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 案例教程—200行python实现杀手级连连看外挂程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

歡迎關注天善智能,我們是專注于商業智能BI,人工智能AI,大數據分析與挖掘領域的垂直社區,學習,問答、求職一站式搞定!

對商業智能BI、大數據分析挖掘、機器學習,python,R等數據領域感興趣的同學加微信:tsaiedu,并注明消息來源,邀請你進入數據愛好者交流群,數據愛好者們都在這兒。

作者:三級狗 長不帥的程序猿小哥哥 Python愛好者社區專欄作者,授權發布,未經容許,禁止轉載,謝謝。知乎ID:三級狗出處:https://www.zhihu.com/question/275611095/answer/407984155


python寫的連連看外掛,圖二時間間隔設置成了0,效果有點嚇人。用的是簡單的opencv圖像識別結合連連看的算法,如果關注度足夠,我會回來補上具體的實現思路和源碼地址。(開源了已經)希望不會接到騰訊爸爸的律師函?

先手動來條華麗的分割線

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

這剛剛有了知乎賬號不到兩周還,第一次在知乎回答,不到兩天的時間,快破800的點贊,440的收藏,130的關注,66的感謝,還有100多條五花八門的評論著實是嚇到我了。剛刷到這個問題的時候就覺得小豬佩奇都能贊到3k+,那我是不是也可以?就嘗試性的發了這個外掛出來,看來沖擊力實在不小,都有人私信問我是不是騙子了,嚇得我趕緊回來補上約定好的實現思路和源碼連接。承蒙大家厚愛,現在我來好好回答一下這個問題。

源碼

源碼連接:先點這里,然后點star

這個小外掛用python2寫出來有將近半年了,掛到github上的版本我想用python3重構,當時只寫了個開頭后來不了了之了。這篇回答發出來,關注度如此之高,這才想起來我的github上掛的是半喇項目,尷尬我的今天趁下班時間趕緊寫完了python3的版本,并且把思路代碼都理了理。如果覺得還不錯就給個star,畢竟還年輕,虛榮心比較強,謝謝!

需要使勁敲黑板強調一下的是:Github上的項目里帶了一個連連看的游戲,那個外掛就是用來破解這個游戲的,如果想破解QQ的連連看,就把config.py里的配置改成QQ連連看對應的配置,但配置是多少我本人不做提供。如果你自己搞出來了,建議你自己偷著樂就好了,不要大肆宣揚,如果你一定要張牙舞爪的到處顯擺... 我確實也沒啥脾氣,畢竟我自己也正在這樣做。

實現思路

下面的內容,伸手黨可以不用看了,畢竟大家更感興趣的,肯定是上面那個鏈接。

項目一共350行左右的源碼,注釋150行,是的,實現起來比你想象的簡單的多。接下來我用我的方式講解一下這個外掛是怎么實現的,盡可能簡潔,讓絕大部分人都能聽懂。

首先,我們先想想人類是怎么玩連連看這個游戲的?

游戲開始,縱覽全局,一眼掃到能夠相連的兩個相同的圖片,就用鼠標去點,先點第一個,再點第二個,隨著“撕拉”一道閃電兩個方塊隨即爆炸,爽的不要不要,以此類推直到游戲結束,通過以上的操作可以細化出這樣幾個點來:

圖片要相同。這個我們人類可以一眼分辨出來

兩個點可以連通。很多人玩到現在也不是很清楚怎樣能連,怎樣不能,反正看了就知道,具體是啥硬性規則也并不是特別清楚。

點擊,鼠標一個一個的點,如果剛點過的兩個圖片相同并且可以連通,就是“撕拉”一道閃電讓你爽一下。

回到問題,人類是這樣玩的?那機類能不能也這么玩?

答案是肯定的,計算機運算速度那么快,如果能想辦法讓他用和人類一樣的思路去操作,那我們豈不是能輕易享受到“撕拉撕拉”的快感?而唯一需要我們做的,就是躺好,讓她自己動。哦它!錯別字!

想到這問題就清晰一些了,我們想讓電腦按照我們的方式去執行和我們一樣的操作,借助CPU發熱的淫威,達到我們人類難以企及的速度,就是醬紫。那么計算機怎么像我們一樣思考和操作呢?回到上面分析出的三點:

它要能認出屏幕上相同的圖片。

它要知道某倆圖片能不能相連。

它要能像人一樣去對著屏幕啪啪啪....地點擊。

就像把大象裝進冰箱一樣,讓電腦代替人腦,需要的也就是這么簡單的三步。

第一步:它要能認出屏幕上相同的圖片。

程序它如何能認識屏幕中的游戲中的一個一個的小方塊呢?你肯定想到了圖像識別,屏幕中間一個個的小方塊是很有規律的,也有明顯并且規律性的色值的梯度變化,通過一些圖像識別的算法一定可以讓程序認出屏幕上的小方塊來。沒錯,但這樣做很麻煩,這里我一定要跟在座的提一下:無論是產品設計還是編碼實現,一定要遵循一個核心原則:大道至簡!什么叫大道至簡?意思就是復雜的我也不會。

那簡單的怎么做?首先,找到游戲窗體的位置(windows API),然后從屏幕上截張圖(PIL),游戲窗體頂點的橫縱坐標各加上一個數字,就找到了游戲區域(圖中綠框),然后,通過圖像切片的方式,從點C開始,分別以方塊寬度為高度為步長,把圖像切割成n個小塊,然后再比較這些圖片是否相等,一樣的就用同樣的數字標識,空白就用0,就這樣簡單粗暴地完成了第一步。

至于我怎么知道方塊的寬度高度,還有從頂點到游戲區域的距離?這個我是截圖拿PS看的,不然還拿尺子量么。。。

第二步:判斷兩張圖是否能夠相連

圖像轉化成數據了,數據改怎么進行處理?

這里就得扯一下連連看的算法了,它的算法和它的規則關聯度很大,它的規則是和拐點相關的:兩個方塊的通路上,最多可以有兩個拐點,如果用兩個拐點還連不上,那他們就不能連通。落實在算法上其實很好寫也:兩個點能否直連是很好判斷的,只需要判斷兩點之間的通路上是不是都為0就可以。那么兩點通過一個拐點連通的情況,就是其中一點到拐點,再從拐點到另一點兩個直連的判斷。那么兩個拐點的情況,就是一個點到拐點的直連+一個拐點到另一點的單拐點的情況進行判斷。這樣寫下來,幾乎全是嵌套調用,最后全部都集中在直線的校驗上。

第三步:如果能夠相連,模擬鼠標點擊屏幕

第二部判斷出的兩個點可以相連,那需要程序點擊一下兩個點就可以,通過剛才的判斷兩個點的坐標是可以知道的,那只需要再向兩個坐標發送鼠標點擊的時間就可以。這里通過python win32的API就可以實現模擬,貼心的答主已經在源碼開頭附上pywin32下載鏈接了。

最后,重復以上步驟

電腦會以驚人的速度向你反饋“撕拉撕拉”的快感。這里請允許我再裝個逼,上面的視頻2我搞錯了,是時間間隔0.01秒的情況,真實的0間隔效果是醬紫的:

一些閑蛋

接下來就是一些閑扯的內容了,是我的一些看法和討論,可能沒什么技術含量和價值,不喜勿噴。

說好的圖像識別呢?

相信很多人看了思路和源碼一定很失望,根本沒有什么高端的算法和邏輯,說好的圖像識別,也就是用了一下opencv的函數比較了一下圖像是否相等。當然,外掛確實實現了還很吊炸天。理想狀態下當然是通過圖像識別找出相同的圖片然后分析計算然后執行自動消除的操作。但是不那么做的理由我在上面也說過了,我確實不會....-_-||

程序中可改進的地方還有很多

1、這個外掛程序的局限性比較大,從我上面的分析就可以知道很多都是基于固定坐標來算的,那其實只要騰訊爸爸把這個游戲做的支持縮放,這個外掛也就跪了。但是騰訊沒有,自打我有記憶以來,這游戲怕是有15年沒更新了,600*800的像素在我同事的外星人上顯示地像個幼兒版本。可能是看不上這一天兩萬人的用戶量吧,還是開發新版本的歡樂斗地主更掙錢。

2、如果速度設置的較慢,讓別人先贏了,將是一件比較尷尬的事情,別人贏了你再點擊屏幕已經無效了,但是程序繼續運行仍然會讓鼠標在對應的位置點來點去。你還沒法移動它去停止程序,你鼠標還沒挪走呢,就又給你挪到其他位置了。此處應該設置個中斷機智,能夠隨時停止程序的。

3、我在程序中使用的是opencv+numpy進行的圖片讀取,切片,還有圖片是否相等的校驗。后來同事給我提供了一種思路:1、PIL本身就可以進行圖片切片,2、operater.eq()可以校驗兩個對象是否一致,用來校驗切片出來的圖像是完全可以的。 這樣的話根本就不需要opencv和numpy,什么圖像識別,根本不需要的,如果那么做,代碼量還可以比現在更精簡。

關于外掛

關于外掛有很多中辦法實現,我說幾種主流的,大家評論里也已經多得五花八門了,

1、其中很大一部分,也是絕大多是外掛的主流做法,就是直接在本機改內存。你的游戲運行在我這里,代碼就得加載到我的內存里運行,那么內存里的數據再抽象,總有高手能給它鼓搗出來。就比如說這個連連看,我也可以通過讀取內存的手段直接拿到它方塊布局的數據,直接把這個數據全改成0,那立馬就贏了。但這樣做很麻煩,這里我一定要跟在座的提一下:無論是產品設計還是編碼實現,一定要遵循一個核心原則:大道至簡!什么叫大道至簡?意思就是復雜的我真的不會。。。

有一些游戲數據必須要在本地進行處理的,很容易遇到這種外掛,比如地下城與勇士無限刷圖啦,更比如吃雞,就說吃雞,這樣的第一人稱射擊游戲,打一槍子彈中沒中,不可能放到服務器去判斷,一是判斷不過來,二是受網絡的影響實時性根本達不到要求。所以你一槍子彈打出去中沒中,一定是放在本地進行計算的,既然是在本地內存里,一旦防范不到位那就有人能給你改,我們所謂的“飛天遁地鎖血金身”什么的。像LOL就不多存在這樣類型的外掛,一方面肯定是反外掛投入的力度大,另一方面就是因為你的操作全部都是由服務器來進行計算并反饋的,不存在太多本地數據篡改的風險。

2、另一種外掛,不在本機改內存,而是通過網絡去騙數據,常見于數據協議被黑客竊取或破解,那他就可以按照協議格式發偽造的數據,來騙服務器。這種外掛我見過的比如GTA5 online版本,當時答主的舍友花50塊買的外掛,頭上一個勁兒的往出冒錢,外掛弄出的錢,退出后重新登錄會消失,但是如果這些錢用來買了資產,那資產就實打實的是你的了??瓷先ヒ彩呛芩?#xff0c;感覺那外掛應該是了竊取某個加錢的接口,然后發模擬數據一個勁兒的刷。

3、再有,就是我的這種外掛,用程序來模擬用戶的某些操作,類似于按鍵精靈的意思,得益于計算機優秀的運算速度,往往能達到人類不可能達到的水平。除了我這個連連看,還有之前微信跳一跳的外掛也是如此。而這種外掛也很難防范,有些時候程序無法判斷操作是來源于用戶還是代碼。

關于攻防

我是這個外掛的作者,所以也想說說關于如何防范這個外掛,以下來說說我替鵝廠想的一些法子來阻止我這個外掛。

1、最行之有效:窗體縮放。如果這個游戲的窗體可以縮放,那我這個外掛基本上算是廢了,除非你每次玩的時候都能縮成固定的大小,并且每次保證都一樣。如果真的修改地支持窗體的縮放了,那我的外掛就不得不通過真正的圖像識別來搞了。當然,那樣會很麻煩....我不會。

2、檢測時間間隔,如果每次間隔都一樣,則視為外掛。這屬于比較蠢的辦法之一,你是不知道python中生成個隨機數有多簡單,隨便弄個0.5~2秒隨機,那家伙比真人還真!

3、通過驅動級別的檢測,看是否有鼠標輸入。這個原理很簡單,實現起來很難。讓程序的代碼深入驅動底層去檢測,如果沒有捕獲到鼠標點擊,但是程序卻收到了鼠標事件,說明這次點擊時程序模擬的,直接過濾掉。但是這樣做的代價很大,驅動底層的windwos編程帶來的可能是巨大的兼容性難題,XP、win7、win10很有可能不一樣。與其這樣,干嘛還在每天2W用戶量的連連看上面較勁,投入人力物力去開發歡樂斗地主不是更好么。

當然,鵝廠是完全有這樣的能力和技術手段的。答主曾經遇到過一個windows鍵盤監聽器,用C++鉤子實現的全局鍵盤監聽,可以監聽一切用戶輸入。但騰訊QQ的登錄框的密碼,則是完全兼聽不到的,這說明騰訊在此處做了比鉤子更加底層的安全處理,也就是驅動級別的處理。題外話:銀行官網登錄時讓下載的安全控件也可以提供這種級別的保護的,四大行只有一個會被鉤子監聽到按鍵輸入,是哪一個我就不說了,曾經提交過反饋,不知現在處理了沒有。

這個外掛其他語言能不能做

可以!答案是一定可以,這其中用到的技術沒有一個是非python干不了了,只能說用其他語言,可能代碼量多少的問題,比如我python用了200行有效代碼,可能go需要300行? C++400行? java2000行? 大概這個行情吧。

哦,當然不是任何語言都可以,html和css就不行。

關于代碼中不給針對QQ連連看的數據

外掛這種東西一定會多多少少損害到其他公司的商業利益,雖然鵝廠還輪不到我來考慮人家的商業利益,但是我仍然不希望外掛的配置代碼從我手中散播出去。代碼的開源一是為了交流和學習,二是為了Github上多多的star(不要臉到我自己都怕)。我也不扯什么倫理道德,我能做的,就只是管好自己。作為原作者也希望大家都能夠做到:不要在公開場合散布有關破解QQ游戲連連看的配置信息,不要將此代碼用于任何商業用途。

還有就是答主內心比較脆弱,以上言論 有何不妥歡迎隨時交流探討,但是謝絕辱罵。

洋洋灑灑墨跡完,已經深夜了,祝大家好夢,就這樣。

總結

以上是生活随笔為你收集整理的案例教程—200行python实现杀手级连连看外挂程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。