日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

WinXP下 扫雷程序逆向分析 --扫雷辅助(一)

發布時間:2024/4/19 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WinXP下 扫雷程序逆向分析 --扫雷辅助(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

逐步走向逆向的坑 , 慢慢的鍛煉 也算是一種興趣愛好吧

突然起興 , (及時行樂) 就想著嘗試分析一下掃雷
這次就用 winxp自帶的掃雷試試

查殼

使用peid 直接拖進去

可以看到 是使用VC 編寫 而且 是 debug 版本
(M$ 還是比較厚道)

OD分析

直接拖進 OD
API 編程的逆向優勢在于 調用的 api 函數 是直接可以查找到符號的
除非自己編寫實現同樣功能的代碼
所以其實 API 程序比 DOS程序好分析多了

hint:
慢慢發現 著手分析一個程序的時候思路很重要 , 不然看著冰涼的匯編 也無法下手
這次主要的目的是 實現一個近似于一件掃雷的功能 , 那么雷的分布 固然很重要
每次的雷的位置 又是隨機的 所以這樣 假想 使用了 Rand 這個 api, 這個API 就成了要點
二話不說 先下斷

bp rand //或者使用插件進行下斷

這里 OD 已經自動的幫我們下了斷點


一路跑 , 就執行到了這里

這個 idiv 是除法, 關鍵怎么除的有點懵 , 果斷百度之
>

 字節操作:16位被除數在AX,8位除數為源操作數,結果的8位商在AL中,8位余數在AH中。表示為
   (AL)<-(AX)/(SRC) 的商
   (AH)<-(AX)/(SRC) 的余數
  字操作:32位被除數放在DX,AX中。其中DX為高位字,16位除數為源操作數,結果的16位端在AX中,16位余數在DX中。表示為
  (AX)<-(DX,AX)/(SRC) 的商
  (DX)<-(DX,AX)/(SRC) 的余數
  雙字操作:64位被除數在EDX,EAX中,其中EDX為高位雙字,32位除數為源操作數,結果的32位商在EAX中,32位余數在EDX中,表示為
  (EAX)<-(EDX,EAX)/(SRC) 的商
  (EDX)<-(EDX,EAX)/(SRC) 的余數。

IDIV 之于 DIV 是帶符號的除法, 其他相同
這樣一看 這個意圖 就很明顯了

EAX = (EDX,EAX) % 9 這里就是得到 0~8 的隨機數!

隨后 賦值給eax 作為返回值, ret 返回.

這里把 長 寬(9*9)壓棧保存
之后 esi+1 (eax 得到的是0~8) , 為了描述行(列)數 , 這里把它加一
然后下面又是一次 call winmine.01003940 (就是上面的隨機函數 , 地址眼熟)
這里不贅述 , 就是即系生成一個隨機的 行(列)值(0~8) , 之后加一

下面我門回到 程序領空 這里可以看到 esi 和 ecx 分別保存著我們的

(x,y)且(1~9 , 1~9)

shl 邏輯左移指令
這里比較重要, 就相當于把 ecx的值 乘以 0x20 (32D)

這句 ecx + esi + 0x1005340 就是比較重要了, 這個 0x1005340 就是雷區的基地址
ecx 已經 左移5位 esi 沒有 所以 ,他們加起來就是
ecx * 0x20 + esi + 0x1005340

然后這里 與 0x80 進行 test (與)
1000 0000 如果首位不是 0 就 jnz 了



這里再把 eax左移5位
eax * 0x20 + esi + 0x1005340
注意 : 剛剛的 ecx 是由 eax inc 之后得到的 所以 這里 有 ecx - eax == 0x20

lea (Load effect address)
其實這點沒懂 為啥編譯出來一個 lea 還多請賜教
直接一樣 ds:[eax+esi+0*1005340]就好啊
or 就把數據的 最高位 置 1
(這里就是置雷!!!)

這里有 dec
* [0x01005330] == 9 // 每過一個大循環就減一
* [0x01005338] == 9
當 其減到0 之后 說明初始化結束!(藏雷完畢!)

尚不完善, 夜深睡覺, 待續

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的WinXP下 扫雷程序逆向分析 --扫雷辅助(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

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