最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

記逆向小白的第一次vbsedit 9爆破及內(nèi)存補(bǔ)丁制作過(guò)程

 更新時(shí)間:2021年04月21日 14:44:06   作者:patanka  
這篇文章主要介紹了記逆向小白的第一次vbsedit 9爆破及內(nèi)存補(bǔ)丁制作過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

作為一個(gè)搞破解、逆向的小白,第一發(fā)文,請(qǐng)各位大神多指教。

近期需要批量處理一些word和excel文檔,開(kāi)始一直用word的宏,但是發(fā)給同事用的時(shí)候同事老是不會(huì)啊。后來(lái)就想寫(xiě)一些VBS的腳本,讓他們直接雙擊運(yùn)行就好了??墒菍?xiě)VBS腳本也需要調(diào)試的呀,沒(méi)有合適的工具很惱火的。于是上網(wǎng)找到了VBSEdit這么個(gè)工具,可是非注冊(cè)版每次調(diào)試都會(huì)彈出一個(gè)提示框,等好多秒,找破解版要么版本太老,要么就是夾帶私貨的。于是就想自己動(dòng)手試一下好了。

下載了x64dbg,啟動(dòng),打開(kāi)vbsedit.exe。點(diǎn)擊Start Debugging 的按鈕,彈出了注冊(cè)對(duì)話框。

有點(diǎn)懵。不知從何入手。于是就各種搜啊搜啊,最后決定從找對(duì)話框開(kāi)始,搜索跨模塊調(diào)用,輸入“dialog”,出現(xiàn)了五個(gè)相關(guān)的調(diào)用:

于是在第一項(xiàng)處下斷點(diǎn),重新跟到這里后發(fā)現(xiàn)是從1401087B4這一行運(yùn)行來(lái)的,于是在這一行下斷點(diǎn)。

再次跟進(jìn)來(lái),停下后在右下角的棧區(qū)會(huì)看到對(duì)這個(gè)的調(diào)用來(lái)自vbsedit.00000000140107C8E,再轉(zhuǎn)到這個(gè)調(diào)用點(diǎn)。

然后在從這個(gè)調(diào)用點(diǎn)往后追溯,就這樣追溯幾次調(diào)用后就會(huì)找到一個(gè)貌似調(diào)用注冊(cè)對(duì)話的地方:

就這個(gè)Call <vbsedit.#所有對(duì)話框>調(diào)用(當(dāng)然后面的注釋都是我跟的時(shí)候自己加的),先試試NOP掉它。

再次運(yùn)行,注冊(cè)對(duì)話框不彈了。再試了試其他功能,一切正常。成功!

同樣的方法,可以把單步調(diào)試等彈注冊(cè)對(duì)話框的地方都找到,同樣nop掉。啟動(dòng)的注冊(cè)對(duì)話框有一個(gè)JNE的判斷,改成JE就好了。

然后就是修補(bǔ)文件,另存了exe。再次運(yùn)行打了補(bǔ)丁的文件,結(jié)果一閃而過(guò),程序運(yùn)行不了啦。

原來(lái)這程序有自校驗(yàn),一個(gè)字節(jié)都不能改,改了就不能正常運(yùn)行。要么是沒(méi)法正常退出,要么是沒(méi)有語(yǔ)法高亮,總之各種不正常。

怎么辦呢?繼續(xù)破自校驗(yàn)? 算了,對(duì)我這個(gè)小白來(lái)說(shuō)這個(gè)難度有點(diǎn)太大了。

考慮到用x64dbg打開(kāi)直接在內(nèi)存修改后可以正常運(yùn)行,應(yīng)該說(shuō)找的爆破位置還是對(duì)的,所以如果打個(gè)內(nèi)存補(bǔ)丁應(yīng)該是可行的。

內(nèi)存補(bǔ)丁怎么弄呢?沒(méi)整過(guò)耶,于是又是搜啊搜啊,找到了用Dll劫持注入打補(bǔ)丁的方法。

試了試常用的version.dll,發(fā)現(xiàn)這個(gè)dll是可以利用的。接下來(lái)就是需要自己寫(xiě)一個(gè)version.dll用來(lái)劫持并打內(nèi)存補(bǔ)丁啦。

祭出了AheadLib這個(gè)工具,選擇簡(jiǎn)單的直接轉(zhuǎn)發(fā)函數(shù),生成了version.cpp。

然后在入口函數(shù)里加上自己打補(bǔ)丁的代碼就好了,代碼如下:(小白水平,勿噴)

#include <Windows.h>
#include <stdio.h>
 
// 導(dǎo)出函數(shù)
#pragma comment(linker, "/EXPORT:GetFileVersionInfoA=c:\\windows\\system32\\version.dll.GetFileVersionInfoA,@1")
#pragma comment(linker, "/EXPORT:GetFileVersionInfoByHandle=c:\\windows\\system32\\version.dll.GetFileVersionInfoByHandle,@2")
#pragma comment(linker, "/EXPORT:GetFileVersionInfoExA=c:\\windows\\system32\\version.dll.GetFileVersionInfoExA,@3")
#pragma comment(linker, "/EXPORT:GetFileVersionInfoExW=c:\\windows\\system32\\version.dll.GetFileVersionInfoExW,@4")
#pragma comment(linker, "/EXPORT:GetFileVersionInfoSizeA=c:\\windows\\system32\\version.dll.GetFileVersionInfoSizeA,@5")
#pragma comment(linker, "/EXPORT:GetFileVersionInfoSizeExA=c:\\windows\\system32\\version.dll.GetFileVersionInfoSizeExA,@6")
#pragma comment(linker, "/EXPORT:GetFileVersionInfoSizeExW=c:\\windows\\system32\\version.dll.GetFileVersionInfoSizeExW,@7")
#pragma comment(linker, "/EXPORT:GetFileVersionInfoSizeW=c:\\windows\\system32\\version.dll.GetFileVersionInfoSizeW,@8")
#pragma comment(linker, "/EXPORT:GetFileVersionInfoW=c:\\windows\\system32\\version.dll.GetFileVersionInfoW,@9")
#pragma comment(linker, "/EXPORT:VerFindFileA=c:\\windows\\system32\\version.dll.VerFindFileA,@10")
#pragma comment(linker, "/EXPORT:VerFindFileW=c:\\windows\\system32\\version.dll.VerFindFileW,@11")
#pragma comment(linker, "/EXPORT:VerInstallFileA=c:\\windows\\system32\\version.dll.VerInstallFileA,@12")
#pragma comment(linker, "/EXPORT:VerInstallFileW=c:\\windows\\system32\\version.dll.VerInstallFileW,@13")
#pragma comment(linker, "/EXPORT:VerLanguageNameA=c:\\windows\\system32\\version.dll.VerLanguageNameA,@14")
#pragma comment(linker, "/EXPORT:VerLanguageNameW=c:\\windows\\system32\\version.dll.VerLanguageNameW,@15")
#pragma comment(linker, "/EXPORT:VerQueryValueA=c:\\windows\\system32\\version.dll.VerQueryValueA,@16")
#pragma comment(linker, "/EXPORT:VerQueryValueW=c:\\windows\\system32\\version.dll.VerQueryValueW,@17")
 
 
//宏 Debug("format string",arg1,arg2,...)
//用于Debug調(diào)試信息輸出,用法同 printf
#ifdef _DEBUG
#define Debug(...) DllPrintf(__VA_ARGS__) 
#else
#define Debug(...) 
#endif
 
int DllPrintf(char *fmt,...)
{
	//dll調(diào)試時(shí)打開(kāi)控制臺(tái)窗口顯示調(diào)試信息
	//用法同printf
 
	va_list argptr;
	va_start(argptr,fmt);
	char buffer[512] ={0};
	int cnt = vsprintf_s(buffer,fmt,argptr);
	va_end(argptr);
 
	static HANDLE ghConsole = INVALID_HANDLE_VALUE;
	if(INVALID_HANDLE_VALUE == ghConsole)
	{
		AllocConsole();
		ghConsole = GetStdHandle(STD_OUTPUT_HANDLE);
	}
	DWORD dw;
	WriteConsole(ghConsole ,buffer,(DWORD)strlen(buffer),&dw,NULL);
	return cnt;
}
 
void Patch(void)
{
	DWORD dwProcessId;
	dwProcessId = GetCurrentProcessId();
 
	HANDLE hProcess;
	hProcess = OpenProcess(PROCESS_ALL_ACCESS,false,dwProcessId);
	if(hProcess == 0){
		Debug("open process error \n");
	}else
	{
		Debug("the hProcess is : %x\n",(INT)hProcess);
	}
 
	LPVOID lpAddressStart,lpAddressDebug,lpAddressDebugStep;
 
	lpAddressStart=(LPVOID)0x000000014009147F;//啟動(dòng)注冊(cè)框的爆破地址
	lpAddressDebug=(LPVOID)0x00000001400E3ED7;//debug對(duì)話框的爆破地址
	lpAddressDebugStep=(LPVOID)0x00000001400DA343;//debug step over對(duì)話框的爆破地址
 
	char je=0x74;//je指令
	SIZE_T dwNumberOfBytesRead;
	dwNumberOfBytesRead=0;
 
	if(WriteProcessMemory(hProcess,lpAddressStart,&je,sizeof(je),&dwNumberOfBytesRead))
	{
		Debug("%d byte writed,start dialog patch ok!\n ",dwNumberOfBytesRead);
	}else
	{
		Debug("read error:%d \n", GetLastError());
 
	}
 
 
	unsigned char temp[5]={0x90,0x90,0x90,0x90,0x90};
 
	if(WriteProcessMemory(hProcess,lpAddressDebug,&temp,sizeof(temp),&dwNumberOfBytesRead))
	{
		Debug("%d byte writed,debug dialog patch ok!",dwNumberOfBytesRead);
	}else
	{
		Debug("read error:%d \n", GetLastError());
 
	}
 
 
	if(WriteProcessMemory(hProcess,lpAddressDebugStep,&temp,sizeof(temp),&dwNumberOfBytesRead))
	{
		Debug("%d byte writed,debug step over dialog patch ok!",dwNumberOfBytesRead);
	}else
	{
		Debug("read error:%d \n", GetLastError());
 
	}
 
	CloseHandle(hProcess);
}
 
// 入口函數(shù)
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)
{
	if (dwReason == DLL_PROCESS_ATTACH)
	{
		DisableThreadLibraryCalls(hModule);
 
		Patch();
 
	}
	else if (dwReason == DLL_PROCESS_DETACH)
	{
	}
 
	return TRUE;
}

代碼很簡(jiǎn)單,有個(gè)地方我犯過(guò)錯(cuò)誤,這里記錄一下:

導(dǎo)出函數(shù)的#pragma comment(linker, "/EXPORT:GetFileVersionInfoA=c:\\windows\\system32\\version.dll.GetFileVersionInfoA,@1") 其中 c:\\windows\\system32\\version.dll這個(gè)地方,這是用于64位程序的,所以是這個(gè)路徑。也可以寫(xiě)成改名后的dll文件名,比如你把原version.dll文件改成了oldversion.dll,那么就寫(xiě)成#pragma comment(linker, "/EXPORT:GetFileVersionInfoA=oldversion.dll.GetFileVersionInfoA,@1") 就可以了。不過(guò)這樣你需要把oldversion.dll 同樣拷貝到vbsedit.exe的同目錄。如果是我的寫(xiě)法就只需要把生成的version.dll拷貝到vbsedit.exe程序目錄就行了。

另外dll在控制臺(tái)輸出調(diào)試信息的方法我也是找了好久,開(kāi)始一直用MessageBox,很痛苦的。

爆破地址只能適用于vbsedit 9.1226版本。

生成的version.dll拷貝到VBSEdit.exe的同目錄即可。

再次運(yùn)行,這次沒(méi)有了注冊(cè)提示框。打開(kāi)幾個(gè)vbs文件,試了試編輯、調(diào)試等功能,測(cè)試一切正常,成功!

總結(jié):破解逆向好像也沒(méi)那么難,呵呵! 我也行 ^_^

到此這篇關(guān)于記逆向小白的第一次vbsedit 9爆破及內(nèi)存補(bǔ)丁制作的文章就介紹到這了,更多相關(guān)vbsedit 9爆破及內(nèi)存補(bǔ)丁內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實(shí)現(xiàn)二叉樹(shù)非遞歸遍歷方法實(shí)例總結(jié)

    C++實(shí)現(xiàn)二叉樹(shù)非遞歸遍歷方法實(shí)例總結(jié)

    這篇文章主要介紹了C++實(shí)現(xiàn)二叉樹(shù)非遞歸遍歷方法實(shí)例總結(jié),是算法設(shè)計(jì)中比較經(jīng)典的一個(gè)遍歷算法,需要的朋友可以參考下
    2014-08-08
  • C++制作《游戲內(nèi)存外掛》詳解

    C++制作《游戲內(nèi)存外掛》詳解

    這篇文章主要介紹了C++制作《游戲內(nèi)存外掛》詳解,文中通過(guò)示例代碼和圖片介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Conan中的C/C++的依賴管理

    Conan中的C/C++的依賴管理

    C/C++與Java、Python都有庫(kù)依賴問(wèn)題,但是C/C++語(yǔ)言沒(méi)有自帶的包管理機(jī)制,也許是因?yàn)镃/C++更多的應(yīng)用于系統(tǒng)程序領(lǐng)域,Java、Python更多用于應(yīng)用程序領(lǐng)域,對(duì)快速開(kāi)發(fā)和部署要求更高,今天通過(guò)本文給大家介紹Conan中的C/C++的依賴管理,感興趣的朋友一起看看吧
    2023-01-01
  • Qt?Qml實(shí)現(xiàn)毛玻璃效果

    Qt?Qml實(shí)現(xiàn)毛玻璃效果

    毛玻璃效果是一種常見(jiàn)的?UI?設(shè)計(jì)風(fēng)格,它通過(guò)模糊背景并添加透明度和噪聲效果,使界面元素看起來(lái)像是半透明的磨砂玻璃,下面我們來(lái)看看如何使用Qml實(shí)現(xiàn)毛玻璃效果吧
    2025-01-01
  • C++實(shí)現(xiàn)LeetCode(150.計(jì)算逆波蘭表達(dá)式)

    C++實(shí)現(xiàn)LeetCode(150.計(jì)算逆波蘭表達(dá)式)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(150.計(jì)算逆波蘭表達(dá)式),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C?語(yǔ)言中布爾值的用法實(shí)戰(zhàn)案例

    C?語(yǔ)言中布爾值的用法實(shí)戰(zhàn)案例

    這篇文章主要為大家介紹了C語(yǔ)言中布爾值的用法實(shí)戰(zhàn)案例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • VC外部符號(hào)錯(cuò)誤_main,_WinMain@16,__beginthreadex解決方法

    VC外部符號(hào)錯(cuò)誤_main,_WinMain@16,__beginthreadex解決方法

    這篇文章主要介紹了VC外部符號(hào)錯(cuò)誤_main,_WinMain@16,__beginthreadex解決方法,實(shí)例分析了比較典型的錯(cuò)誤及對(duì)應(yīng)的解決方法,需要的朋友可以參考下
    2015-05-05
  • C語(yǔ)言可變長(zhǎng)的參數(shù)列表詳解

    C語(yǔ)言可變長(zhǎng)的參數(shù)列表詳解

    這篇文章主要為大家介紹了C語(yǔ)言可變長(zhǎng)的參數(shù)列表,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • C++將二叉樹(shù)轉(zhuǎn)為雙向鏈表及判斷兩個(gè)鏈表是否相交

    C++將二叉樹(shù)轉(zhuǎn)為雙向鏈表及判斷兩個(gè)鏈表是否相交

    這篇文章主要介紹了C++將二叉樹(shù)轉(zhuǎn)為雙向鏈表及判斷兩個(gè)鏈表是否相交的方法,文中還給出了求兩個(gè)鏈表相交的第一個(gè)節(jié)點(diǎn)列的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2016-02-02
  • C++實(shí)現(xiàn)哈夫曼樹(shù)簡(jiǎn)單創(chuàng)建與遍歷的方法

    C++實(shí)現(xiàn)哈夫曼樹(shù)簡(jiǎn)單創(chuàng)建與遍歷的方法

    這篇文章主要介紹了C++實(shí)現(xiàn)哈夫曼樹(shù)簡(jiǎn)單創(chuàng)建與遍歷的方法,對(duì)于C++算法的學(xué)習(xí)來(lái)說(shuō)不失為一個(gè)很好的借鑒實(shí)例,需要的朋友可以參考下
    2014-07-07

最新評(píng)論

新乐市| 凤冈县| 龙口市| 冀州市| 措美县| 龙江县| 清徐县| 曲阳县| 克拉玛依市| 揭东县| 宝兴县| 渭源县| 永兴县| 枣庄市| 绥芬河市| 岳西县| 馆陶县| 和顺县| 淳化县| 长武县| 芜湖市| 屏边| 兴海县| 册亨县| 井冈山市| 绥化市| 宜良县| 普兰店市| 屏边| 凤台县| 花莲县| 盐津县| 肃宁县| 潮安县| 高雄县| 福鼎市| 外汇| 义马市| 尉犁县| 襄汾县| 汝州市|