1. 程式人生 > >【WIN32編程】利用匯編寫cs1.6輔助

【WIN32編程】利用匯編寫cs1.6輔助

都是 base can fmb 處理機 mes ... win32編程 play

這篇文章本來在2018.5.1號就寫完發圈子去了,這兩天跟朋友在網吧打單擊才想起來,就順便把內容發上去把

作者:admin-神風

  1. CE找到功能的地址

CS1.6下載地址:https://pan.baidu.com/s/1zaW6FmbZg50WV3EKX_IqHw 密碼: srcs

CE下載地址:https://pan.baidu.com/s/1_tVrikxFx2PAHhmlhWVfFQ 密碼: dsn9


打開遊戲,並利用CE打開遊戲進程

這裏我們以人物金錢和子彈為例,找到人物基址



查找金錢

進入遊戲後,我們發現金錢數量為800

技術分享圖片

這時候我們在CE中搜索800

技術分享圖片

找到141個數據

我們買點子彈

再搜索剩下的錢

技術分享圖片

通過發現,地址為01A1B9FC上的數值是屏幕上顯示的

地址為04949DA4上的數值才是真正的金錢數量

技術分享圖片

同理,我們通過更改子彈數量,但是當我們搜索到剩余198個數據的時候,發現之後的子彈無論怎麽更改,這198個數據都隨之變動

技術分享圖片

我們這裏就靠一個個測試,但我們有個小技巧,就是看地址,發現地址很多都是連續的,我們就找一些在這198個數據中不常見的。

經過排除

技術分享圖片

選出這些地址做測試,最後得到地址為012CE474的數據是真實子彈的數據(有一個數據是用來迷惑的,更改數值後並沒有什麽卵用)

技術分享圖片

找到人物基址

因為遊戲裏的地址都會變動,比如金錢的地址,血量的地址。

都會隨著遊戲的重啟而變動

但唯一不變的,就是基址,只要通過基址,加上偏移來找金錢、血量的地址

就可以達到在其他的電腦上,也能實現功能了。



我們就通過金錢的地址來找人物的基址

技術分享圖片

首先我們右鍵地址為04949DA4的數據

技術分享圖片

點擊“找出是什麽訪問了這個地址”

會出來一個框框,可能剛開始沒數據,我們返回遊戲再買點東西

這時候出現如下數據

技術分享圖片

我們看mov ecx,[esi+000001CC]這個數據

技術分享圖片

指針基址可能是=04949BD8

同時通過紅色的數據mov ecx,[esi+000001CC],可以發現,偏移是1CC.

這時候我們用CE再去搜索這個04949BD8地址

一定要勾上Hex再搜索

技術分享圖片

發現搜索後沒有綠色的地址(CE中綠色地址代表靜態地址也就是基址)

竟然沒有基址,那咱們就繼續往下面搜

經過測試,只有057FCBF8這個地址才有數據

技術分享圖片

隨便點開一個

技術分享圖片

指針基址可能是=057FCB7C

偏移上=7C

技術分享圖片

這次發現一個綠色的地址:025069BC

我們通過CE的功能“手動添加地址”,來驗證我們的基址是不是對的

技術分享圖片

可以看到720,的確是我們的金錢數量。

到這裏,我們就完工找到人物基址了。


貼上win32編程要用到的功能的基址及偏移

金錢:

技術分享圖片

血量:

技術分享圖片

子彈前彈夾:

技術分享圖片

超市功能:

技術分享圖片

三、利用win32匯編寫出輔助

竟然已經找出了各個功能的基址及偏移,我們就用最常用的ReadProcessMemory讀取數據,並用WriteProcessMemory寫入數值。

.if    eax    == ID_TIME1
                    invoke    ReadProcessMemory,hProcess,baseaddr,addr bloodbuf,4,0
                    add bloodbuf,7Ch
                    invoke    ReadProcessMemory,hProcess,bloodbuf,addr bloodbuf,4,0
                    add bloodbuf,04h
                    invoke    ReadProcessMemory,hProcess,bloodbuf,addr bloodbuf,4,0
                    add bloodbuf,160h
                    invoke    WriteProcessMemory,hProcess,bloodbuf,addr nvblood,4,0

上述代碼就是血量基址加偏移的搜索並寫入

接著,我們就創建一個模態窗口用來做一個界面

invoke    GetModuleHandle,NULL
                    mov    hInstance,eax
                    invoke    DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL

建立模態窗口的同時要在rc資源文件的窗口屬性中定義成IDC_MODALFRAME

同時利用消息處理機制來達到功能的實現

創建完窗口後,就要找遊戲進程並打開

invoke    FindWindow,NULL,addr szCs
        .if eax
            invoke    GetWindowThreadProcessId,eax,offset pid
            invoke    OpenProcess,PROCESS_ALL_ACCESS,FALSE,pid
                .if eax
                    mov hProcess,eax

在這裏用SetTimer函數來建立一個時鐘,好鎖定我們的值不讓其他程序改變。(這裏千萬不要用死循環去鎖定數值,不然程序有可能會崩潰)

SetTimer,hWnd,ID_TIME1,100,NULL

這裏的SetTimer函數建立了一個名字為ID_TIME1,周期為0.1s100ms)的時鐘




然後在到消息處理列表添加一個處理WM_TIMER消息的程序

.if    eax    == WM_TIMER
        MOV eax,wParam
            .if    eax    == ID_TIME1
要執行的程序...
.endif
.endif

關閉窗口之後,會發送WM_CLOSE消息,同時一定要關閉時鐘

.if    eax == WM_CLOSE
    invoke    KillTimer,hWnd,ID_TIME1
invoke    EndDialog,hWnd,NULL

最後利用EndDialog結束模態窗口


下面貼上資源文件cs.rc的代碼

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include        <resource.h>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define    ICO_MAIN        0x1000    //圖標
#define    DLG_MAIN        1
#define IDB_1            1
#define IDC_MONEY        100
#define IDC_BLOOD        101
#define IDC_BULLET        102
#define IDC_SHOP        103
#define    IDC_MODALFRAME    104
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN    ICON        "Main.ico"
IDB_1        BITMAP        "Picture1.bmp"
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DLG_MAIN DIALOG 193, 180, 220, 134
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | IDC_MODALFRAME
CAPTION "CS1.6輔助 author:admin-神風"
FONT 9, "宋體"
{
 GROUPBOX "功能", -1, 55, 5, 155, 100
 AUTOCHECKBOX "修改金錢為16000", IDC_MONEY, 65, 25, 120, 15
 AUTOCHECKBOX "鎖定人物血量為255", IDC_BLOOD, 65, 45, 120, 15
 AUTOCHECKBOX "鎖定所有槍械前彈夾子彈為50", IDC_BULLET, 65, 65, 120, 15
 AUTOCHECKBOX "隨時隨地購物", IDC_SHOP, 65, 85, 120, 15
 CONTROL "", -1, "Static", SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 5, 110, 210, 1
 CTEXT "author:admin-神風 QQ:1976604307", -1,5,115,150,20
 PUSHBUTTON "退出(&X)", IDCANCEL, 165, 115, 50, 14
 CONTROL IDB_1, -1, "Static", SS_BITMAP | WS_CHILD | WS_VISIBLE, 5, 5, 80, 95

以及cs.asm的匯編程序

技術分享圖片
  1         .386
  2         .model flat, stdcall
  3         option casemap :none
  4 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  5 include        windows.inc
  6 include        user32.inc
  7 includelib    user32.lib
  8 include        kernel32.inc
  9 includelib    kernel32.lib
 10 include        gdi32.inc
 11 includelib    gdi32.lib
 12 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 13 ID_TIME1    equ    1
 14 ID_TIME2    equ    2
 15 ID_TIME3    equ    3
 16 ID_TIME4    equ    4
 17 ICO_MAIN    equ    1000h
 18 DLG_MAIN    equ    1
 19 IDB_1        equ    1
 20 IDC_MONEY    equ 100
 21 IDC_BLOOD    equ 101
 22 IDC_BULLET    equ 102
 23 IDC_SHOP    equ 103
 24 IDC_MODALFRAME    equ    104
 25 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 26         .data
 27 nvShop        db    1
 28 nvblood        REAL4 255.0
 29 nvmoney            dd    16000
 30 nvbullet        dw    50
 31 
 32         .data?
 33 hProcess    dd    ?
 34 hInstance    dd    ?
 35 hBmp1        dd    ?
 36 pid            dd    ?
 37 bloodbuf    dd    ?
 38 moneybuf    dd    ?
 39 bulletbuf    dd    ?
 40 shopbuf        dd    ?
 41 
 42 
 43 .const
 44 moneyaddr    dd    01A1B9FCh
 45 baseaddr    dd    025069BCh
 46 
 47 szCs        db Counter-Strike,0
 48 Box            db System Message,0
 49 Findsb        db Not Find !,0
 50 Opencg        db Open the Successful !,0
 51 Opensb        db Open the failure !,0
 52 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 53         .code
 54 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 55 _ProcDlgMain    proc    uses ebx edi esi hWnd,wMsg,wParam,lParam
 56 
 57         mov    eax,wMsg
 58         .if    eax == WM_CLOSE
 59             invoke    KillTimer,hWnd,ID_TIME1
 60             invoke    KillTimer,hWnd,ID_TIME2
 61             invoke    KillTimer,hWnd,ID_TIME3
 62             invoke    KillTimer,hWnd,ID_TIME4
 63             invoke    EndDialog,hWnd,NULL
 64             invoke    DeleteObject,hBmp1
 65         .elseif    eax    == WM_TIMER
 66             MOV eax,wParam
 67                 .if    eax    == ID_TIME1
 68                     invoke    ReadProcessMemory,hProcess,baseaddr,addr bloodbuf,4,0
 69                     add bloodbuf,7Ch
 70                     invoke    ReadProcessMemory,hProcess,bloodbuf,addr bloodbuf,4,0
 71                     add bloodbuf,04h
 72                     invoke    ReadProcessMemory,hProcess,bloodbuf,addr bloodbuf,4,0
 73                     add bloodbuf,160h
 74                     invoke    WriteProcessMemory,hProcess,bloodbuf,addr nvblood,4,0
 75                 .elseif    eax    == ID_TIME2
 76                     invoke    ReadProcessMemory,hProcess,baseaddr,addr moneybuf,4,0
 77                     add moneybuf,7Ch
 78                     invoke    ReadProcessMemory,hProcess,moneybuf,addr moneybuf,4,0
 79                     add moneybuf,1CCh
 80                     invoke    WriteProcessMemory,hProcess,moneybuf,addr nvmoney,4,0
 81                     invoke    WriteProcessMemory,hProcess,moneyaddr,addr nvmoney,4,0
 82                 .elseif    eax    == ID_TIME3
 83                     invoke    ReadProcessMemory,hProcess,baseaddr,addr bulletbuf,4,0
 84                     add    bulletbuf,7Ch
 85                     invoke    ReadProcessMemory,hProcess,bulletbuf,addr bulletbuf,4,0
 86                     add    bulletbuf,5D4h
 87                     invoke    ReadProcessMemory,hProcess,bulletbuf,addr bulletbuf,4,0
 88                     add    bulletbuf,0CCh
 89                     invoke    WriteProcessMemory,hProcess,bulletbuf,addr nvbullet,4,0
 90                 .elseif    eax    == ID_TIME4
 91                     invoke    ReadProcessMemory,hProcess,baseaddr,addr shopbuf,4,0
 92                     add    shopbuf,7Ch
 93                     invoke    ReadProcessMemory,hProcess,shopbuf,addr shopbuf,4,0
 94                     add shopbuf,3A8h
 95                     invoke    WriteProcessMemory,hProcess,shopbuf,addr nvShop,4,0
 96                 .endif
 97         .elseif    eax == WM_INITDIALOG
 98             invoke    LoadIcon,hInstance,ICO_MAIN
 99             invoke    SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
100             
101             invoke    LoadBitmap,hInstance,IDB_1
102             mov    hBmp1,eax
103         .elseif eax == WM_COMMAND
104             mov        eax,wParam
105             .if ax == IDCANCEL
106                 invoke    KillTimer,hWnd,ID_TIME1
107                 invoke    KillTimer,hWnd,ID_TIME2
108                 invoke    KillTimer,hWnd,ID_TIME3
109                 invoke    KillTimer,hWnd,ID_TIME4
110                 invoke    EndDialog,hWnd,NULL
111                 invoke    DeleteObject,hBmp1
112             .elseif ax == IDC_SHOP
113                 invoke    IsDlgButtonChecked,hWnd,IDC_SHOP
114                 .if    eax == BST_CHECKED
115                     invoke    SetTimer,hWnd,ID_TIME4,100,NULL
116                 .else
117                     invoke    MessageBeep,-1
118                     invoke    KillTimer,hWnd,ID_TIME4
119                 .endif
120             .elseif ax    ==    IDC_BLOOD
121                 invoke    IsDlgButtonChecked,hWnd,IDC_BLOOD
122                 .if    eax == BST_CHECKED
123                     invoke    SetTimer,hWnd,ID_TIME1,100,NULL
124                 .else
125                     invoke    MessageBeep,-1
126                     invoke    KillTimer,hWnd,ID_TIME1
127                 .endif
128             .elseif    ax    ==    IDC_MONEY
129                 invoke    IsDlgButtonChecked,hWnd,IDC_MONEY
130                 .if    eax == BST_CHECKED
131                     invoke    SetTimer,hWnd,ID_TIME2,2000,NULL
132                 .else
133                     invoke    MessageBeep,-1
134                     invoke    KillTimer,hWnd,ID_TIME2
135                 .endif
136             .elseif    ax ==    IDC_BULLET
137                 invoke    IsDlgButtonChecked,hWnd,IDC_BULLET
138                 .if    eax == BST_CHECKED
139                     invoke    SetTimer,hWnd,ID_TIME3,100,NULL
140                 .else
141                     invoke    MessageBeep,-1
142                     invoke    KillTimer,hWnd,ID_TIME3
143                 .endif
144             .endif
145         .else
146             mov        eax,FALSE
147             ret
148         .endif
149         mov    eax,TRUE
150         ret
151 _ProcDlgMain    endp
152 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
153 start:
154         invoke    FindWindow,NULL,addr szCs
155         .if eax
156             invoke    GetWindowThreadProcessId,eax,offset pid
157             invoke    OpenProcess,PROCESS_ALL_ACCESS,FALSE,pid
158                 .if eax
159                     mov hProcess,eax
160                     invoke    MessageBox,NULL,offset Opencg,offset Box,MB_OK
161                     invoke    GetModuleHandle,NULL
162                     mov    hInstance,eax
163                     invoke    DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
164                     invoke    ExitProcess,NULL
165                 .else
166                     invoke    MessageBox,NULL,offset Opensb,offset Box,MB_OK
167                 .endif
168         .else
169             invoke    MessageBox,NULL,offset Findsb,offset Box,MB_OK
170             invoke    ExitProcess,NULL
171         .endif
172 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
173 end    start
View Code

最後配上一張程序運行圖

技術分享圖片

【WIN32編程】利用匯編寫cs1.6輔助