【WIN32编程】利用汇编写cs1.6辅助
这篇文章本来在2018.5.1号就写完发圈子去了,这两天跟朋友在网吧打单击才想起来,就顺便把内容发上去把
作者:admin-神风
用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,,
add bloodbuf,7Ch
invoke ReadProcessMemory,hProcess,bloodbuf,addr bloodbuf,,
add bloodbuf,04h
invoke ReadProcessMemory,hProcess,bloodbuf,addr bloodbuf,,
add bloodbuf,160h
invoke WriteProcessMemory,hProcess,bloodbuf,addr nvblood,,
上述代码就是血量基址加偏移的搜索并写入
接着,我们就创建一个模态窗口用来做一个界面
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,,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
#define IDB_1
#define IDC_MONEY
#define IDC_BLOOD
#define IDC_BULLET
#define IDC_SHOP
#define IDC_MODALFRAME
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN ICON "Main.ico"
IDB_1 BITMAP "Picture1.bmp"
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DLG_MAIN DIALOG , , ,
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | IDC_MODALFRAME
CAPTION "CS1.6辅助 author:admin-神风"
FONT , "宋体"
{
GROUPBOX "功能", -, , , ,
AUTOCHECKBOX "修改金钱为16000", IDC_MONEY, , , ,
AUTOCHECKBOX "锁定人物血量为255", IDC_BLOOD, , , ,
AUTOCHECKBOX "锁定所有枪械前弹夹子弹为50", IDC_BULLET, , , ,
AUTOCHECKBOX "随时随地购物", IDC_SHOP, , , ,
CONTROL "", -, "Static", SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, , , ,
CTEXT "author:admin-神风 QQ:1976604307", -,,,,
PUSHBUTTON "退出(&X)", IDCANCEL, , , ,
CONTROL IDB_1, -, "Static", SS_BITMAP | WS_CHILD | WS_VISIBLE, , , ,
以及cs.asm的汇编程序
.
.model flat, stdcall
option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include gdi32.inc
includelib gdi32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ID_TIME1 equ
ID_TIME2 equ
ID_TIME3 equ
ID_TIME4 equ
ICO_MAIN equ 1000h
DLG_MAIN equ
IDB_1 equ
IDC_MONEY equ
IDC_BLOOD equ
IDC_BULLET equ
IDC_SHOP equ
IDC_MODALFRAME equ
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
nvShop db
nvblood REAL4 .
nvmoney dd
nvbullet dw .data?
hProcess dd ?
hInstance dd ?
hBmp1 dd ?
pid dd ?
bloodbuf dd ?
moneybuf dd ?
bulletbuf dd ?
shopbuf dd ? .const
moneyaddr dd 01A1B9FCh
baseaddr dd 025069BCh szCs db 'Counter-Strike',
Box db 'System Message',
Findsb db 'Not Find !',
Opencg db 'Open the Successful !',
Opensb db 'Open the failure !',
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam mov eax,wMsg
.if eax == WM_CLOSE
invoke KillTimer,hWnd,ID_TIME1
invoke KillTimer,hWnd,ID_TIME2
invoke KillTimer,hWnd,ID_TIME3
invoke KillTimer,hWnd,ID_TIME4
invoke EndDialog,hWnd,NULL
invoke DeleteObject,hBmp1
.elseif eax == WM_TIMER
MOV eax,wParam
.if eax == ID_TIME1
invoke ReadProcessMemory,hProcess,baseaddr,addr bloodbuf,,
add bloodbuf,7Ch
invoke ReadProcessMemory,hProcess,bloodbuf,addr bloodbuf,,
add bloodbuf,04h
invoke ReadProcessMemory,hProcess,bloodbuf,addr bloodbuf,,
add bloodbuf,160h
invoke WriteProcessMemory,hProcess,bloodbuf,addr nvblood,,
.elseif eax == ID_TIME2
invoke ReadProcessMemory,hProcess,baseaddr,addr moneybuf,,
add moneybuf,7Ch
invoke ReadProcessMemory,hProcess,moneybuf,addr moneybuf,,
add moneybuf,1CCh
invoke WriteProcessMemory,hProcess,moneybuf,addr nvmoney,,
invoke WriteProcessMemory,hProcess,moneyaddr,addr nvmoney,,
.elseif eax == ID_TIME3
invoke ReadProcessMemory,hProcess,baseaddr,addr bulletbuf,,
add bulletbuf,7Ch
invoke ReadProcessMemory,hProcess,bulletbuf,addr bulletbuf,,
add bulletbuf,5D4h
invoke ReadProcessMemory,hProcess,bulletbuf,addr bulletbuf,,
add bulletbuf,0CCh
invoke WriteProcessMemory,hProcess,bulletbuf,addr nvbullet,,
.elseif eax == ID_TIME4
invoke ReadProcessMemory,hProcess,baseaddr,addr shopbuf,,
add shopbuf,7Ch
invoke ReadProcessMemory,hProcess,shopbuf,addr shopbuf,,
add shopbuf,3A8h
invoke WriteProcessMemory,hProcess,shopbuf,addr nvShop,,
.endif
.elseif eax == WM_INITDIALOG
invoke LoadIcon,hInstance,ICO_MAIN
invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax invoke LoadBitmap,hInstance,IDB_1
mov hBmp1,eax
.elseif eax == WM_COMMAND
mov eax,wParam
.if ax == IDCANCEL
invoke KillTimer,hWnd,ID_TIME1
invoke KillTimer,hWnd,ID_TIME2
invoke KillTimer,hWnd,ID_TIME3
invoke KillTimer,hWnd,ID_TIME4
invoke EndDialog,hWnd,NULL
invoke DeleteObject,hBmp1
.elseif ax == IDC_SHOP
invoke IsDlgButtonChecked,hWnd,IDC_SHOP
.if eax == BST_CHECKED
invoke SetTimer,hWnd,ID_TIME4,,NULL
.else
invoke MessageBeep,-
invoke KillTimer,hWnd,ID_TIME4
.endif
.elseif ax == IDC_BLOOD
invoke IsDlgButtonChecked,hWnd,IDC_BLOOD
.if eax == BST_CHECKED
invoke SetTimer,hWnd,ID_TIME1,,NULL
.else
invoke MessageBeep,-
invoke KillTimer,hWnd,ID_TIME1
.endif
.elseif ax == IDC_MONEY
invoke IsDlgButtonChecked,hWnd,IDC_MONEY
.if eax == BST_CHECKED
invoke SetTimer,hWnd,ID_TIME2,,NULL
.else
invoke MessageBeep,-
invoke KillTimer,hWnd,ID_TIME2
.endif
.elseif ax == IDC_BULLET
invoke IsDlgButtonChecked,hWnd,IDC_BULLET
.if eax == BST_CHECKED
invoke SetTimer,hWnd,ID_TIME3,,NULL
.else
invoke MessageBeep,-
invoke KillTimer,hWnd,ID_TIME3
.endif
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlgMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
invoke FindWindow,NULL,addr szCs
.if eax
invoke GetWindowThreadProcessId,eax,offset pid
invoke OpenProcess,PROCESS_ALL_ACCESS,FALSE,pid
.if eax
mov hProcess,eax
invoke MessageBox,NULL,offset Opencg,offset Box,MB_OK
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
invoke ExitProcess,NULL
.else
invoke MessageBox,NULL,offset Opensb,offset Box,MB_OK
.endif
.else
invoke MessageBox,NULL,offset Findsb,offset Box,MB_OK
invoke ExitProcess,NULL
.endif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
最后配上一张程序运行图
【WIN32编程】利用汇编写cs1.6辅助的更多相关文章
- Win32编程之静态库编写与使用.动态链接库的编写与使用
Win32编程之静态库编写与使用.动态链接库的编写与使用 一丶什么是静态库.什么是动态链接库. 静态库其实就是解决模块开发的一种解决方案.在以前.我们写代码的时候.每个人都可以独立写一个项目.但是现在 ...
- win32编程简介
win32编程简介 复习Win32整理下知识. 为什么学习win32? 我们要编写windos程序.都离不开API. 也就是我们所说的win32程序. 所以学好win32是你能不能再windows下编 ...
- C#编程利器之二:结构与枚举(Structure and enumeration)【转】
C#编程利器之二:结构与枚举(Structure and enumeration) 在上一篇文章中,介绍了类如何封装程序中的对象.而实际中,出了类可以封装对象外,结构和枚举也可以封装一些对象,本文将着 ...
- 编写SQL的辅助工具
原文:编写SQL的辅助工具 今天在同事的帮助下,下载了一个工具:ApexSQL edit,可能是我孤陋寡闻,不知道还有这样的好工具,它可以在我键入SQL时,帮助我提示表的名称和列名称.还可以帮助我格式 ...
- MFC控件编程进度条编写
MFC控件编程进度条编写 一丶进度条编程需要用到的方法 进度条MFC已经帮我们封装好类了. 叫做 CProgressCtrl 进度条编程也很简单. 封装的方法也就那个那几个. GetPos() 获 ...
- 【Windows编程】大量病毒分析报告辅助工具编写
解决重复劳动 是否在分析单个病毒时很爽,分析N个病毒写报告很机械的情况.. 1)样本下载多个文件,这些文件写报告时要加上这些文件的MD5 2)写报告时明明是17个MD5,实际样本有18个的情况.不知道 ...
- 逆向知识之CS1.6辅助/外挂专题.1.实现CS1.6主武器副武器无限子弹
逆向知识之CS辅助/外挂专题.1.实现CS主武器副武器无限子弹 PS: 相信大家CS1.6这类的FPS应该玩过.现在我们通过外挂手法.讲解逆向的本质.以及应用. 关于CS1.6的下载.网络百度下载即可 ...
- Win32编程API 基础篇 -- 1.入门指南 根据英文教程翻译
入门指南 本教程是关于什么的 本教程的目的是向你介绍使用win32 API编写程序的基础知识(和通用的写法).使用的语言是C,但大多数C++编译器也能成功编译,事实上,教程中的绝大多数内容都适用于任何 ...
- 5-9 c语言之【初识win32编程】
---恢复内容开始--- 今天学习了win32的相关知识,首先win32是指是指可以在32位或以上Windows系统中运行的程序,我学习的主要利用c/c++语言编写的win32程序, 首先在win32 ...
随机推荐
- 嵌入式linux系统中,lsusb出现unable to initialize libusb: -99 解决办法 【转】
转自:http://cpbest.blog.163.com/blog/static/41241519201111575726966/ libusb是linux系统中,提供给用户空间访问usb设备的AP ...
- UART中的硬件流控RTS与CTS DTR DSR DTE设备和DCE设备【转】
中低端路由器上使用disp interface 查看相应串口状态信息,其中DCD.DTR.DSR.RTS及CTS等五个状态指示分别代表什么意思? DCD ( Data Carrier Detect 数 ...
- ES系列十七、logback+ELK日志搭建
一.ELK应用场景 在复杂的企业应用服务群中,记录日志方式多种多样,并且不易归档以及提供日志监控的机制.无论是开发人员还是运维人员都无法准确的定位服务.服务器上面出现的种种问题,也没有高效搜索日志内容 ...
- Python3学习笔记11-循环语句
条件判断使用if,需要加上冒号,当条件判断为True时,执行if下的代码块,为false就什么也不做 只要var1不是0,非空字符串,非空list等,就判断为True.否则为False var1 = ...
- JS禁止鼠标右键、禁止全选、复制、粘贴的方法(所谓的防盗功能)
简述:一个防君子不防小人的鸡肋的功能,针对小白还行. 代码如下: <script> //都能支持 document.oncontextmenu = function (e) { retur ...
- XmlDocument根据节点的属性值获取节点
string targetParm = string.Format("STUDENTS/STUDENT[@NO='{0}']", targetValue);//生成目标获取节点的参 ...
- tomcat jsp页面乱码解决
浏览器接收服务器响应的中文参数: JSP页面中告诉浏览器使用什么编码: <%@ page language="java" contentType="text/htm ...
- Java快速学习笔记01
这一波快速学习主要是应付校招笔面试用,功利性质不可避免. 学习网址: http://www.runoob.com/java/java-tutorial.html 执行命令解析: 以上我们使用了两个命令 ...
- 解读使用Daisy-chain(菊花链)方式筛选一定范围内素数的代码
go version go1.11 windows/amd64 本文为解读 参考链接1 中的 菊花链 一节 的示例程序,此程序和 参考链接2 中代码有些类似:前者有范围,后者是无限循环.清楚了 参考链 ...
- Oracle ____Undo
什么是回滚和撤销 update emp set sal=4000 where empno=7788 语句执行过程 1 检查empno=7788记录是否在buffer cache ,如果不存在,则读取到 ...