操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    indows的掃雷是Windows系統上的經典游戲,考驗的是手速、邏輯推理、反應力。Windows8之前,掃雷還是掃雷,到了Windows10,Windows引入Windowsstore之后,掃雷游戲實際上變成了掃瓢蟲,游戲規則沒變,只是界面更加炫酷了。另外還加入了其他的模式。可玩性更強。對于老玩家,還是喜歡經典的簡單的玩法,對于將掃雷和關卡相結合的模式不是太感冒。以下我還是以Windows10的掃瓢蟲為例介紹教程。

    1、安裝

    Windows10默認沒有安裝掃雷,需要我們自己從Windows的應用市場下載,開始-Windowsstore-搜索minesweeper,選擇第一個,點擊獲取,安裝提示操作即可。等到下載并安裝完成。

    2、初級教程

    掃雷目標:在最短的時間內翻開所有空方塊,避免地雷方塊。翻開所有空方塊為勝,觸發地雷則失敗。

    掃雷玩法:方塊內的數字代表了該方塊周圍的地雷數量。使用該信息可以推斷臨近方塊哪些是可以翻開的安全方塊,哪些是雷。

    計數器顯示未標記仍隱藏的地雷數量,定時器顯示掃雷的用時。

    基本操作:左鍵單擊——翻轉方塊

    右鍵單擊——標記旗子

    右鍵雙擊——標記問好

    左鍵雙擊、中鍵單擊、左右鍵同時單擊——批量翻轉

    形式一:數字1 在對角位,數字1對應的方塊肯定是類,右擊標記小旗子。

    形式二:雙數字1型,因為兩個數字1邊上肯亞有一個雷,所以第三個方塊肯定不是雷,可以放心翻開。

    形式三:1-2-1型。1對應的方格肯定是雷,2 對應的不是雷。因為數字2旁邊三塊方塊的雷的分布只能是雷雷空、空雷雷、雷空雷,其中只有雷空雷滿足數字1旁邊一顆雷的要求。

    形式四:形如下,可以很容易推導出數字邊上的肯定都是雷

    熟悉了以上的幾種形式并結合游戲的規則,合理進行邏輯推導,就可以解決百分之九十九的初級(簡單)和中級(中等)掃雷問題了。

    3、高級教程

    如下面的盤局,基本無雷可掃,如何突破?

    我們注意到如下的這塊數字區域,數字3右邊三塊方塊有兩顆雷,數字2右邊有一顆。數字3右邊從上至下雷的分布只有為雷雷空或者雷空雷時,才能既滿足數字3又滿足數字2,所以數字3右側最上方的肯定是雷,而數字2右側最下方的不是雷。這里突破之后,就可以推出其他的了。

    4、終極奧義:如下圖,基本能掃的雷都出來了就剩下了5個雷了,分布在所示區域內,其中1號為肯定不是雷,是數字5。其他的5顆雷的分布又多種形式且均能滿足要求,

    或者如下圖,一開始就懵逼,

    這個時候該怎么辦呢?這個時候就需要拿出掃雷的終極奧義進行破解了。

    終極奧義

    掃雷游戲相信很多人都從小玩過,在那個電腦游戲并不多的時代,掃雷成為玩的熱度蠻高的一款游戲之一,然而就在有一次,接觸到了一次不尋常的掃雷過程,使得后來我也有了這個沖動,也來做一次。通過動態調試,逆向和C來寫一個掃雷輔助工具從而提高逆向與編碼技能。

    動態調試(分析)

    首先進行掃雷程序的動態調試(分析):

    打開OD(ollydebug工具),把掃雷拖放到OD中,F9運行;ctrl+G輸入要跟隨的表達式,輸入rand,點擊【確定】,跳轉到該函數調用處,F2設置斷點,此次是想通過API rand函數來找尋突破口。在掃雷窗口的雷區中任意點擊一個位置(圖片中出現2的位置),再點擊還原(【笑臉】按鈕-

    ?),如下圖:



    此時OD會在剛設置的rand處的斷點斷下來,如下圖:


    通過找到隨機函數rand,下面進行棧回溯,回到上級函數中,來找到push(壓入棧)的參數,也就是說隨機生成函數(rand)是隨機生成的高,寬,雷數。點擊K(調用堆棧),彈出K調用堆棧窗口,查看堆棧窗口信息,找到返回地址,雙擊K調用堆棧窗口中的返回地址,返回到上一層,此過程稱為棧回溯。仔細觀察下圖的堆棧信息010036D2(返回地址)。




    單步F8,觀察寄存器,數據窗口和堆棧窗口變化,dword ptr ss:[esp+0x4]或dword ptr ds:[XXX]數據窗口跟蹤數值(000DFC44值是09),如下圖:


    返回到上層函數后,分析這里面的指令,得知剛才隨機rand生成的寬(09),如下圖,注意觀察地址010036C7。


    首先從這個函數返回的結果著手分析eax,單步后,可以看到往堆棧中(地址010036D2)壓入了一個數字09,如下圖:


    通過以上分析,基本可以猜測得到周邊的隨機函數rand生成是高,雷數。可以試著改變掃雷設置(自定義雷區),如下圖,來準確定位rand函數及傳參,點擊【確定】,再點擊【還原(笑臉-

    ?)】按鈕。



    觀察OD,如下圖:


    發現push 0C(000DFC84值為0C),可以確定這個rand函數push 0C就是雷區的高度。同時在內存區域也能明確看到一個大致的雷區圖形,通過以上方法,大致可以猜測0x80就是雷。或者與IDA共同分析,通過靜態分析,可以更直觀的看到程序邏輯。得到如下數據:基地址,雷數等信息,如下圖:




    以上代碼大概意思是先設置了全局寬0x09,高0x0C,雷數0x0A的變量,通過判斷兩層循環,隨機生成了寬和高。得地圖基地址:0x01005340。通過分析下圖得知無雷是0x0F,有雷是0x8F,墻壁是0x10。




    通過寬,高的地址,打印出掃雷區域和雷數,并可以更直觀的區分邊墻,雷。

    下面開始要想如何標記雷了,通過假設WinProc(通過棧回溯到消息回調函數)中看到有關GetDC函數,大致猜測會用到Bitblt,在OD中ctrl+g輸入要跟隨的表達式,錄入“BitBlt”,按F2設置斷點,點擊掃雷區域任意一個位置,OD會斷在BitBlt位置。

    在BitBlt中還有一個BitBlt函數,初步判斷覺得是用雙緩沖方式繪圖,

    BitBlt(hDestDC,//目的DC XDest, // 目的x坐標 YDest, // 目的y坐標 10, // 10, // 重繪區域的高和寬 hSrcDC, // 源DC 0, 0, SRCCOPY);// 指定操作方式計算雷的坐標(點擊第一個掃雷的方塊,查看坐標),需要注意邊墻,如下圖:




    減去邊墻的值:

    -0x04=0x0C(12)-0x10(16)

    0x27=0x37(55)-0x10(16)

    得到坐標公式:x(XDest:12)=1*0x10(16)-0x04(4),y(YDest:55)=1*0x10(16)+0x27(39)。

    代碼編寫

    通過以上大致的分析,可進行代碼的編寫了,





    成果



    輸入3landmine位置,獲取出landmine(10墻壁,8Flandmine,0F無雷)



    輸入2自動掃雷,標記雷并開出地圖



    通過這個小項目,首先加強了對軟件的一種逆向思維,如:看到這一種面板,大概猜到是用數組來實現的,其次雷的布局是隨機生成的,然后通過動態調試可以了解實現方法(開發者的一種實現思路),可找到關鍵的基地址,幾種狀態(無雷,有雷,墻壁),最后編碼階段可以理解內存的操作,幾個重要的API,FindWindow獲取句柄,OpenProcess打開句柄,ReadProcessMemory讀取內存信息,PostMessage異步消息模式,CloseHandle關閉句柄。其中有一些分析有誤或不到位的地方還請拍磚。多逆向,分析代碼有很多幫助,不僅可以拓寬自己編程與測試的思維及水平,還能發現,開發及利用程序中的漏洞或給程序打補丁等。希望小伙伴們在這條任重而道遠的路上加油,互勉。

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有