日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

win32asm写的红警98修改器

發布時間:2023/12/18 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 win32asm写的红警98修改器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

from http://zerray.com/

?

前段時間寫的,感覺比較完善了。能鎖定金錢,電量和用電量,并能增加建造速度。并可以工作在win98和winxp兩種平臺上。

.386
.model flat, stdcall
option casemap: none

include /masm32/include/windows.inc
include /masm32/include/kernel32.inc
include /masm32/include/user32.inc
include /masm32/include/shell32.inc
includelib /masm32/lib/kernel32.lib
includelib /masm32/lib/user32.lib
includelib /masm32/lib/shell32.lib

WinMain proto :DWORD, :DWORD, :DWORD, :DWORD
KeyProc proto :DWORD, :DWORD, :DWORD
GetOsVersion proto

WM_SHELLNOTIFY equ WM_USER + 5
IDI_TRAY equ 0
RaIcon equ 10000
TimerID equ 1
ButtonID1 equ 1
ButtonID2 equ 2
ButtonID3 equ 3
ButtonID4 equ 4
HotKeyID1 equ 0ABC1h
HotKeyID2 equ 0ABC2h
HotKeyID3 equ 0ABC3h
HotKeyID4 equ 0ABC4h

.const
??? AppMutex db 'racheatmutex', 0
??? AlreadyRun db 'RA cheater is already running!', 0
??? AppName db 'RA cheater', 0
??? ClassName db 'racheaterclass', 0
??? TargetTitle db 'Red Alert', 0
??? ButtonClass db 'Button', 0
??? Button1 db 'lock money(Alt+1)', 0
??? Button2 db 'lock used power(Alt+2)', 0
??? Button3 db 'lock power(Alt+3)', 0
??? Button4 db 'speed up(Alt+4)', 0
??? Value1 dd 30000
??? Value2 dd 0
??? Value3 dd 500
??? Value4 dd 0F0h

.data
??? flag1 db 0
??? flag2 db 0
??? flag3 db 0
??? pid dd 0
??? hd dd 0

.data?
??? inst HINSTANCE ?
??? cmd LPSTR ?
??? note NOTIFYICONDATA <?>
??? ico dd ?
??? OsVer dd ?
??? hHook dd ?
??? Addr1 dd ?
??? Addr2 dd ?
??? Addr3 dd ?
??? Addr4 dd ?
??? hwnd HWND ?

.code
start:
??? invoke CreateMutex, NULL, FALSE, addr AppMutex
??? invoke GetLastError
??? .IF eax == ERROR_ALREADY_EXISTS
??????? invoke MessageBox, NULL, addr AlreadyRun, addr AppName, MB_OK or MB_ICONWARNING
??????? invoke ExitProcess, 0
??? .ENDIF
??? invoke GetOsVersion ; 判斷系統類型
??? mov OsVer, eax
??? .IF OsVer == VER_PLATFORM_WIN32_NT ; 根據系統類型賦不同的地址,也許在你的機器上和我的不一樣,FPE搜一下就知道了。
??????? mov Addr1, 0A431D17h
??????? mov Addr2, 0A431D67h
??????? mov Addr3, 0A431D63h
??????? mov Addr4, 0A431D53h
??? .ELSE
??????? mov Addr1, 01C31D17h
??????? mov Addr2, 01C31D67h
??????? mov Addr3, 01C31D63h
??????? mov Addr4, 0A431D53h
??? .ENDIF
??? invoke GetModuleHandle, NULL


??? mov inst, eax
??? invoke GetCommandLine
??? mov cmd, eax
??? invoke WinMain, inst, NULL, cmd, SW_MINIMIZE
??? invoke ExitProcess, eax

WinMain proc hInst:HINSTANCE, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:DWORD
??? LOCAL wc:WNDCLASSEX
??? LOCAL msg:MSG

??? mov wc.cbSize, SIZEOF WNDCLASSEX
??? mov wc.style, CS_HREDRAW or CS_VREDRAW
??? mov wc.lpfnWndProc, OFFSET WndProc
??? mov wc.cbClsExtra, NULL
??? mov wc.cbWndExtra, NULL
??? push hInst
??? pop wc.hInstance
??? mov wc.hbrBackground, COLOR_WINDOW
??? mov wc.lpszMenuName, NULL
??? mov wc.lpszClassName, OFFSET ClassName
??? invoke LoadIcon, hInst, RaIcon
??? mov wc.hIcon, eax
??? mov wc.hIconSm, eax
??? mov ico, eax
??? invoke LoadCursor, NULL, IDC_ARROW
??? mov wc.hCursor, eax
??? invoke RegisterClassEx, addr wc
??? invoke CreateWindowEx, NULL,/
?????????? addr ClassName,/
?????????? addr AppName,/
?????????? WS_OVERLAPPEDWINDOW and not WS_MAXIMIZEBOX and not WS_SIZEBOX,/
?????????? CW_USEDEFAULT,/
?????????? CW_USEDEFAULT,/
?????????? 200,/
?????????? 225,/
?????????? NULL,/
?????????? NULL,/
?????????? hInst,/
?????????? NULL
??? mov hwnd, eax
??? invoke ShowWindow, hwnd, CmdShow
??? invoke UpdateWindow, hwnd

??? .WHILE TRUE
??????? invoke GetMessage, addr msg, NULL, 0, 0
??????? .BREAK .IF (!eax)
??????? invoke TranslateMessage, addr msg
??????? invoke DispatchMessage, addr msg
??? .ENDW
??? mov eax, msg.wParam
??? ret
WinMain endp

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
??? .IF uMsg == WM_CREATE
??????? invoke SetTimer, hWnd, TimerID, 500, NULL
??????? .IF OsVer == VER_PLATFORM_WIN32_NT
??????????? invoke RegisterHotKey, hWnd, HotKeyID1, MOD_ALT, VK_1
??????????? invoke RegisterHotKey, hWnd, HotKeyID2, MOD_ALT, VK_2
??????????? invoke RegisterHotKey, hWnd, HotKeyID3, MOD_ALT, VK_3
??????????? invoke RegisterHotKey, hWnd, HotKeyID4, MOD_ALT, VK_4
??????? .ELSE ; 由于win98下注冊的快捷鍵進游戲后就失效了,只好用鉤子實現快捷鍵。
??????????? invoke SetWindowsHookEx, WH_JOURNALRECORD, addr KeyProc, inst, NULL
??????????? mov hHook, eax
??????? .ENDIF
??????? invoke CreateWindowEx, NULL, addr ButtonClass, addr Button1,/
?????????????? BS_PUSHBUTTON or WS_VISIBLE or WS_CHILD, 0, 0, 195, 50,/
?????????????? hWnd, ButtonID1, inst, NULL
??????? invoke CreateWindowEx, NULL, addr ButtonClass, addr Button2,/
?????????????? BS_PUSHBUTTON or WS_VISIBLE or WS_CHILD, 0, 50, 195, 50,/
?????????????? hWnd, ButtonID2, inst, NULL
??????? invoke CreateWindowEx, NULL, addr ButtonClass, addr Button3,/
?????????????? BS_PUSHBUTTON or WS_VISIBLE or WS_CHILD, 0, 100, 195, 50,/
?????????????? hWnd, ButtonID3, inst, NULL
??????? invoke CreateWindowEx, NULL, addr ButtonClass, addr Button4,/
?????????????? BS_PUSHBUTTON or WS_VISIBLE or WS_CHILD, 0, 150, 195, 50,/
?????????????? hWnd, ButtonID4, inst, NULL
??? .ELSEIF uMsg == WM_SIZE
??????? .IF wParam == SIZE_MINIMIZED
??????????? mov note.cbSize, SIZEOF NOTIFYICONDATA
??????????? push hWnd
??????????? pop note.hwnd
??????????? mov note.uID, IDI_TRAY
??????????? mov note.uFlags, NIF_ICON or NIF_MESSAGE or NIF_TIP
??????????? mov note.uCallbackMessage, WM_SHELLNOTIFY
??????????? push ico
??????????? pop note.hIcon
??????????? invoke lstrcpy, addr note.szTip, addr AppName
??????????? invoke ShowWindow, hWnd, SW_HIDE
??????????? invoke Shell_NotifyIcon, NIM_ADD, addr note
??????? .ENDIF
??? .ELSEIF uMsg == WM_SHELLNOTIFY
??????? .IF wParam == IDI_TRAY
??????????? .IF lParam == WM_LBUTTONDOWN
??????????????? invoke Shell_NotifyIcon, NIM_DELETE, addr note
??????????????? invoke ShowWindow, hWnd, SW_RESTORE
??????????????? invoke SetForegroundWindow, hWnd
??????????? .ENDIF
??????? .ENDIF
??? .ELSEIF uMsg == WM_TIMER
??????? .IF hd == 0
??????????? invoke FindWindow, 0, addr TargetTitle
??????????? .IF eax != 0
??????????????? invoke GetWindowThreadProcessId, eax, addr pid
??????????????? invoke OpenProcess, PROCESS_ALL_ACCESS, FALSE, pid
??????????????? mov hd, eax
??????????? .ENDIF
??????? .ENDIF
??????? .IF flag1 == 1
??????????? invoke WriteProcessMemory, hd, Addr1, addr Value1, SIZEOF Value1, NULL
??????????? .IF eax == 0
??????????????? mov hd, 0
??????????? .ENDIF
??????? .ENDIF
??????? .IF flag2 == 1
??????????? invoke WriteProcessMemory, hd, Addr2, addr Value2, SIZEOF Value2, NULL
??????????? .IF !eax
??????????????? mov hd, 0
??????????? .ENDIF
??????? .ENDIF
??????? .IF flag3 == 1
??????????? invoke WriteProcessMemory, hd, Addr3, addr Value3, SIZEOF Value3, NULL
??????????? .IF !eax
??????????????? mov hd, 0
??????????? .ENDIF
??????? .ENDIF
??? .ELSEIF uMsg == WM_COMMAND
??????? mov eax, wParam
??????? .IF ax == ButtonID1
??????????? xor flag1, 1
??????? .ELSEIF ax == ButtonID2
??????????? xor flag2, 1
??????? .ELSEIF ax == ButtonID3
??????????? xor flag3, 1
??????? .ELSEIF ax == ButtonID4
??????????? .IF hd
??????????????? mov edx, Addr4
??????????????? invoke WriteProcessMemory, hd, edx, addr Value4, SIZEOF Value4, NULL
??????????????? add edx, 4
??????????????? invoke WriteProcessMemory, hd, edx, addr Value4, SIZEOF Value4, NULL
??????????????? add edx, 4
??????????????? invoke WriteProcessMemory, hd, edx, addr Value4, SIZEOF Value4, NULL
??????????????? add edx, 4
??????????????? invoke WriteProcessMemory, hd, edx, addr Value4, SIZEOF Value4, NULL
??????????? .ENDIF
??????? .ENDIF
??? .ELSEIF uMsg == WM_HOTKEY
??????? .IF wParam == HotKeyID1
??????????? xor flag1, 1
??????? .ELSEIF wParam == HotKeyID2
??????????? xor flag2, 1
??????? .ELSEIF wParam == HotKeyID3
??????????? xor flag3, 1
??????? .ELSEIF
??????????? .IF hd
??????????????? mov edx, Addr4
??????????????? invoke WriteProcessMemory, hd, edx, addr Value4, SIZEOF Value4, NULL
??????????????? add edx, 4
??????????????? invoke WriteProcessMemory, hd, edx, addr Value4, SIZEOF Value4, NULL
??????????????? add edx, 4
??????????????? invoke WriteProcessMemory, hd, edx, addr Value4, SIZEOF Value4, NULL
??????????????? add edx, 4
??????????????? invoke WriteProcessMemory, hd, edx, addr Value4, SIZEOF Value4, NULL
??????????? .ENDIF
??????? .ENDIF
??? .ELSEIF uMsg == WM_SYSKEYDOWN
??????? .IF lParam == VK_1
??????????? xor flag1, 1
??????? .ELSEIF lParam == VK_2
??????????? xor flag2, 1
??????? .ELSEIF lParam == VK_3
??????????? xor flag3, 1
??????? .ENDIF
??? .ELSEIF uMsg == WM_DESTROY
??????? .IF OsVer == VER_PLATFORM_WIN32_NT
??????????? invoke UnregisterHotKey, hWnd, HotKeyID1
??????????? invoke UnregisterHotKey, hWnd, HotKeyID2
??????????? invoke UnregisterHotKey, hWnd, HotKeyID3
??????? .ELSE
??????????? invoke UnhookWindowsHookEx, hHook
??????? .ENDIF
??????? invoke PostQuitMessage, NULL
??? .ELSE
??????? invoke DefWindowProc, hWnd, uMsg, wParam, lParam
??????? ret
??? .ENDIF
??? xor eax, eax
??? ret
WndProc endp

KeyProc proc nCode: DWORD, wParam: WPARAM, lParam: LPARAM
??? .IF nCode == HC_ACTION
??????? mov edx, lParam
??????? assume edx: PTR EVENTMSG
??????? .IF [edx].message == WM_SYSKEYDOWN
??????????? mov eax, [edx].paramL
??????????? .IF al == VK_1
??????????????? invoke PostMessage, hwnd, WM_SYSKEYDOWN, NULL, VK_1
??????????? .ELSEIF al == VK_2
??????????????? invoke PostMessage, hwnd, WM_SYSKEYDOWN, NULL, VK_2
??????????? .ELSEIF al == VK_3
??????????????? invoke PostMessage, hwnd, WM_SYSKEYDOWN, NULL, VK_3
??????????? .ENDIF
??????? .ENDIF
??? .ENDIF
??? invoke CallNextHookEx, hHook, nCode, wParam, lParam
??? ret
KeyProc endp

GetOsVersion proc
??? LOCAL ovi:OSVERSIONINFO
??? mov ovi.dwOSVersionInfoSize, SIZEOF OSVERSIONINFO
??? invoke GetVersionEx, addr ovi
??? mov eax, ovi.dwPlatformId
??? ret
GetOsVersion endp

end start

由于紅警98中金錢等信息的地址在每次載入時都是固定的,所以這個程序可以得逞,要是換紅警2,就得用另一種方法了。

總結

以上是生活随笔為你收集整理的win32asm写的红警98修改器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。