第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

我想用WriteProcessMemory去修改計(jì)算器程序的運(yùn)作?該怎么辦?

我想用WriteProcessMemory去修改計(jì)算器程序的運(yùn)作?該怎么辦?

用VB編了一個(gè)很簡(jiǎn)單的計(jì)算器,比如2+2=4,請(qǐng)問(wèn)用API的WriteProcessMemory怎么去修改內(nèi)核,使得2+2=3或者5?????
查看完整描述

2 回答

?
慕虎7371278

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊

可以這樣嗎?

把每次算出來(lái)的 都進(jìn)行 減1,或加上1

查看完整回答
反對(duì) 回復(fù) 2023-02-15
?
慕姐4208626

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個(gè)贊

在編寫(xiě)不使用圖形界面(或使用簡(jiǎn)單的圖形界面)的32 位Windows應(yīng)用程序時(shí),使用匯編語(yǔ)言會(huì)使程序簡(jiǎn)單、快捷,并且這類程序生成的可執(zhí)行文件比較小(一般不超過(guò)10K),執(zhí)行速度快,無(wú)需安裝即可運(yùn)行。在Windows環(huán)境中,匯編語(yǔ)言的編程方式與C語(yǔ)言類似,要調(diào)用Windows API。在匯編語(yǔ)言中調(diào)用API函數(shù)使用call 指令,并且函數(shù)的參數(shù)使用Push指令先入堆棧,這步工作在masm32v6中可以由invoke 宏指令自動(dòng)完成。函數(shù)的返回值由eax寄存器返回。

例如MessageBox函數(shù)的聲明如下:

int MessageBox(HWND h1 , LPCTSTR lp1 , LPCTSTR lp2 , UINT u1 );

則其匯編調(diào)用如下:

invoke MessageBox,h1,lp1,lp2,u1

其中參數(shù)入棧、檢查等工作,由invoke宏指令自動(dòng)完成。

一個(gè)簡(jiǎn)單的Win 32程序如下:

.386

.model flat, stdcall ;使用32位平坦存儲(chǔ)模式

option casemap :none ;區(qū)分大小寫(xiě)字母

include \MASM32\INCLUDE\windows.inc

include \MASM32\INCLUDE\kernel32.inc

includelib \MASM32\LIB\kernel32.lib

.code

start:

invoke ExitProcess,0

end start

以上程序與一個(gè)DOS下的匯編程序類似,其中語(yǔ)句“invoke ExitProcess,0”相當(dāng)于DOS下的 int 20H或mov ah,04cH/int 21h,即結(jié)束程序并返回。這個(gè)框架程序并沒(méi)有完成什么具體的功能,程序運(yùn)行后馬上返回,并在其運(yùn)行期間不生成窗口。

實(shí)現(xiàn)內(nèi)存修改器

對(duì)上述程序添加語(yǔ)句,就可以使其成為一個(gè)真正能用的內(nèi)存修改器。以修改Windows附件中計(jì)算器程序?yàn)槔?,如要修改?jì)算器程序虛擬內(nèi)存地址40b181H的值為1234H(在運(yùn)行修改器程序進(jìn)行修改前,應(yīng)先運(yùn)行計(jì)算器程序)。

首先為程序添加一個(gè)數(shù)據(jù)段。在 .code 前加上以下語(yǔ)句:

.data

ProcessId dd ? ;進(jìn)程ID

windowname db “計(jì)算器”,0 ;窗口程序名

writeaddr dd 40b181H ;寫(xiě)入的地址

writedate dd 1234H ;寫(xiě)入的數(shù)據(jù)

然后在start: 后添加以下語(yǔ)句:

invoke FindWindow,NULL,addr windowname

invoke GetWindowThreadProcessId,eax,addr 

ProcessId

invoke OpenProcess,PROCESS_ALL_ACCESS, FALSE, ProcessId

invoke WriteProcessMemory,eax,writeaddr, 

addr writedate, 4, 0

invoke ExitProcess,0

在上述代碼中,首先使用 FindWindow 函數(shù)取得目標(biāo)窗口的句柄,其中addr windowname是目標(biāo)窗口名稱(字符串)在內(nèi)存中的開(kāi)始地址,字符串以0結(jié)束。窗口句柄由eax返回。如果eax=0表示函數(shù)出錯(cuò),其他值表示取得的目標(biāo)窗口句柄。使用GetWindowThreadProcessId 函數(shù),通過(guò)窗口句柄eax取得進(jìn)程標(biāo)識(shí)符ProcessId。同樣,如果函數(shù)返回eax=0表示函數(shù)出錯(cuò),其他值表示成功取得ProcessId。利用OpenProcess 函數(shù),從進(jìn)程標(biāo)識(shí)符ProcessId得到計(jì)算器程序的進(jìn)程句柄。其中PROCESS_ALL_ACCESS表示擁有所有權(quán)限,參數(shù)FALSE是固定的。同樣,句柄由eax返回,如果eax=0表示函數(shù)出錯(cuò),其他值表示取得目標(biāo)進(jìn)程句柄。

然后用WriteProcessMemory 函數(shù)修改內(nèi)存,調(diào)用方法如下:

invoke WriteProcessMemory,eax,writeaddr, addr writedate, 4, 0

其參數(shù)的含義如下:

●eax:從OpenProcess 函數(shù)中取得的目標(biāo)進(jìn)程的句柄;

●writeaddr :計(jì)算器程序的虛擬內(nèi)存中將要被修改的地址;

●addr writedate :將要寫(xiě)入上述地址的數(shù)據(jù)開(kāi)始的地址;

●4 :希望寫(xiě)入addr writedate地址的字節(jié)數(shù);

●0 :函數(shù)執(zhí)行返回后,寫(xiě)入目標(biāo)地址的實(shí)際字節(jié)數(shù),能被用來(lái)確認(rèn)函數(shù)實(shí)際的執(zhí)行情況,這里用0填入。

該函數(shù)返回eax,如果eax=0表示函數(shù)出錯(cuò)。

最后調(diào)用ExitProcess函數(shù)結(jié)束程序,返回0值給操作系統(tǒng)。

編輯好上述代碼存盤(pán)后,用masm32v6中的編譯、連接命令生成執(zhí)行文件。該執(zhí)行文件可以在Windows 95/98/Me中執(zhí)行,并完成內(nèi)存修改。由于Windows NT的內(nèi)存管理方式與Windows 98等不同,所以在Windows NT中該程序可以執(zhí)行,但不能修改內(nèi)存。

編譯:

ML /c /coff 文件名.asm

連接:

LINK /SUBSYSTEM:WINDOWS 文件名.obj

內(nèi)存修改器的改進(jìn)

上述程序雖然可以執(zhí)行,但是缺乏交互性和通用性,這可以從以下兩個(gè)方面進(jìn)行改進(jìn)。

1.改進(jìn)程序執(zhí)行后無(wú)論是否修改了內(nèi)存或者產(chǎn)生了其他錯(cuò)誤,都沒(méi)有任何提示的問(wèn)題。要增強(qiáng)交互性,可對(duì)每個(gè)函數(shù)執(zhí)行后返回的eax值作檢查,若eax=0,則產(chǎn)生對(duì)話框向用戶提示錯(cuò)誤,并返回操作系統(tǒng)。

為了能產(chǎn)生出錯(cuò)提示,在數(shù)據(jù)段增加以下定義:

text1 db “提示!”,0 ;對(duì)話框的標(biāo)題

text2 db “目標(biāo)程序未運(yùn)行!“,0

text3 db “不能獲得目標(biāo)進(jìn)程句柄!”,0

text4 db “不能打開(kāi)目標(biāo)進(jìn)程!”,0

text5 db “未能修改目標(biāo)內(nèi)存!”,0

text6 db “命令格式:程序名 窗口名 欲修改地址 新值”,0

使用MessageBox函數(shù)彈出對(duì)話框,向用戶提示出錯(cuò)信息:

invoke FindWindow,NULL,windowname

.if eax==0 

invoke MessageBox,NULL,addr text2,addr text1,MB_OK

invoke ExitProcess,1

.endif

2.改進(jìn)缺乏通用性的問(wèn)題。以上修改器程序若要修改另外一個(gè)窗口程序的內(nèi)存,則需對(duì)源程序數(shù)據(jù)段中的windowname、writeaddr、writedate進(jìn)行修改,重新賦予初值,以適應(yīng)另一窗口程序,然后重新編譯、連接才能實(shí)現(xiàn)。如果內(nèi)存修改器帶有參數(shù),就可提高程序的通用性。格式如下:

執(zhí)行程序名 參數(shù)1 參數(shù)2 參數(shù)3

執(zhí)行程序名 窗口程序名 要修改的地址 新值

要獲得命令行參數(shù),可以在數(shù)據(jù)段定義一個(gè)變量,用來(lái)存放命令行參數(shù)在虛擬內(nèi)存中存放的開(kāi)始地址。在代碼段的開(kāi)始(start:標(biāo)識(shí)符后)插入以下語(yǔ)句獲得命令行參數(shù)的首址。

invoke GetCommandLine

mov CommandLine, eax

獲得命令行參數(shù)首址后,對(duì)命令行參數(shù)進(jìn)行分析,分離出參數(shù)1、參數(shù)2、參數(shù)3,然后將分離出的參數(shù)送到數(shù)據(jù)段的相應(yīng)變量中即可。

 


查看完整回答
反對(duì) 回復(fù) 2023-02-15
  • 2 回答
  • 0 關(guān)注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)