• 【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.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

    最后配上一张程序运行图

  • 相关阅读:
    Python之位移操作符所带来的困惑
    SR采用PubSubHubbub协议实时接收GReaderSharedItems更新
    如何找到正在热传的微博客图片?
    手持设备:懒人的互联网音乐智能同步/播放器
    七十二般变化解得了三灾?
    如何测量Google Reader用户的分享活跃度
    基于Google Reader发展起来的个性化推荐系统之三大问题
    Python检测Windows剩余磁盘空间
    Python 内部类,内部类调用外部类属性,方法
    禁止IE页面自动跳转到EDGE浏览器的方法
  • 原文地址:https://www.cnblogs.com/wh4am1/p/10353751.html
Copyright © 2020-2023  润新知