【WIN32编程】利用汇编写cs1.6辅助

这篇文章本来在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.1s(100ms)的时钟

然后在到消息处理列表添加一个处理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

最后配上一张程序运行图

原文地址:https://www.cnblogs.com/wh4am1/p/10353751.html

时间: 2024-10-09 07:04:05

【WIN32编程】利用汇编写cs1.6辅助的相关文章

《C#网络编程高级篇之网页游戏辅助程序设计(扫描版)》

<C#网络编程高级篇之网页游戏辅助程序设计>通过编写C#网络编程语言中具有代表性的实例,向读者深入细致地讲解了如何利用C#语言进行网页游戏辅助程序设计.本书通过大量的代码引导读者一步步学习和掌握C#的网络应用编程的方法和网页游戏辅助程序的设计技术. <C#网络编程高级篇之网页游戏辅助程序设计>涉及的领域包括多线程编程技术.socket套接字编程.tcp协议编程.http协议编程.远程控制技术.木马技术.模拟键盘和鼠标技术.网页游戏辅助程序设计技术等. <C#网络编程高级篇之网

Win32编程知识积累

Win32编程预知识 Windows sdk中有命令行工具,也有编译器和连接器.可以直接使用命令行编译链接C or C++编写的windows程序.而不必使用专业开发工具. Sdk(Software Development Kit)不支持硬件驱动开发. 绝大多数Windows APIs是由函数和com接口构成的,极少数是c++类(最典型的是GDI+, one of the 2-D graphics APIs) Windows api数据类型因为历史问题而有重复和冗余. ? 常用typedefs:

Win32编程中如何处理控制台消息

这篇文章讨论如何处理所有的控制台消息. 第一步,首先要安装一个事件钩子,也就是说要建立一个回调函数.调用Win32 API,原型如下: BOOL SetConsoleCtrlHandler(PHANDLER_ROUTINE HandlerRoutine, // 回调函数BOOL Add // 表示添加还是删除): 参数HandlerRoutine是一个指向函数的指针,原型如下: BOOL WINAPI HandlerRoutine(DWORD dwCtrlType // 控制事件类型): 所有的

编程题:编写一个函数string_copy()完成strcpy()的作用,并验证。

#include<stdio.h> void string_copy(char *s1,char *s2) {   for(;*s2!='\0';s1++,s2++) *s1=*s2; *s1='\0'; } void main() { char str1[20],str2[]="I like C"; char *p1=str1,*p2=str2; string_copy(p1,p2); printf("str1:%s\t str2:%s\n",str1

编写SQL的辅助工具

原文:编写SQL的辅助工具 今天在同事的帮助下,下载了一个工具:ApexSQL edit,可能是我孤陋寡闻,不知道还有这样的好工具,它可以在我键入SQL时,帮助我提示表的名称和列名称.还可以帮助我格式化SQL语句,就像上面的SQL,如果你写的很乱,可以选择你的SQL,然后选择格式化,就排版成上面的样子.另外,它还提供了代码块(应该叫SQL块吧?). 可以到他的网站上下载试用的版本.http://www.apexsql.com/

X86平台下用汇编写&quot;HelloWorld&quot;

首先需要安装一个汇编器,我用的是Nasm,这个汇编器在Linux下安装还是很简单的. Nasm下载地址http://www.nasm.us/pub/nasm/releasebuilds/ 在下载之后对其进行解压,然后进入到其目录下,会发现有configure文件,接下来相信对于熟悉Linux的同学就知道该怎么办了. 输入./configure然会待其执行完成后,会发现在目录下生成了一个Makefile文件,这是输入make命令,就可以完成对Nasm的编译了 然后进入root,输入make ins

【编程题】编写String类的构造函数、拷贝构造函数、析构函数和赋值函数

[编程题]编写String类的构造函数.拷贝构造函数.析构函数和赋值函数 [题目]:请编写如下4个函数 1 class String 2 { 3 public: 4 String(const char *str = NULL);// 普通构造函数 5 String(const String &other); // 拷贝构造函数 6 ~ String(void); // 析构函数 7 String & operate =(const String &other);// 赋值函数 8

win32编程之俄罗斯方块

因为把目标定在了游戏上,最近在学习win32编程 经过一段时间的学习,开始进行编程实现俄罗斯方块,记录一下其中遇到的一些问题 一开始是看网上的教程学习的,但是做完一部分之后发现   会有闪屏的情况   所以又去网上搜索了一下发现要用到双缓冲. 注意:这段开始正确性有待考证! 我一开始的时候是把 drawTeris(); drawBackGround(); drawBlocked(); 都放在了WM_PAINT事件里 而且里面都用了双缓冲来绘制,结果导致后面闪屏更加频繁,后来把所有的绘制动作都交由

【Windows编程】大量病毒分析报告辅助工具编写

解决重复劳动 是否在分析单个病毒时很爽,分析N个病毒写报告很机械的情况.. 1)样本下载多个文件,这些文件写报告时要加上这些文件的MD5 2)写报告时明明是17个MD5,实际样本有18个的情况.不知道少了的一个MD5到底是谁? 3)要批量检测某一类样本,然后批量复制出来的情况. 后期加入同事的idea,把文件变成hex.txt封印起来.. 命令行版本工具截图