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

 

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

做者:admin-神風windows

  1. CE找到功能的地址

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

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


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

這裏咱們以人物金錢和子彈爲例,找到人物基址spa



查找金錢3d

進入遊戲後,咱們發現金錢數量爲800指針

這時候咱們在CE中搜索800code

 

找到141個數據orm

咱們買點子彈

再搜索剩下的錢

經過發現,地址爲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編程要用到的功能的基址及偏移

金錢:

血量:

  

子彈前彈夾:

超市功能:

 

 

3、利用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

 

最後配上一張程序運行圖

相關文章
相關標籤/搜索