mfc程序反編譯
『壹』 怎樣知道一個EXE文件是用什麼語言編寫的怎樣寫的
通過看它和什麼庫鏈接可以猜測出用過哪些語言。
比如 Java 語言寫的程序一般不會不與 Java 運行時的 DLL 鏈接(名字好像叫jre.dll),Objective-C 和 Swift 語言寫的程序往往是和objc運行時鏈接的。
C語言鏈接的DLL包括Unix/BSD/Linux系統上的 libc、libxnet 等,和 Windows 上的 Kernel.dll 等。C++也是如此,但鏈接的包括有 libstdcxx,和 Windows 上的 mfc*.dll。
至於是怎樣寫的,就要通過反編譯來看了。
『貳』 有關於Visual Studio 2005 EXE程序反編譯成可用代碼的問題~!~
你應該選擇使用靜態庫啊。動態庫你要運行必須連相關的dll一起拷貝到別人電腦上去!
還有一些特別的情況,雖然是針對VC2005的,但是對VC6也有參考價值。
前面一些是我在網上找的,後面的有些是我自己現添加的,希望對你有幫助!
報錯"由於應用程序配置不正確,應用程序未能啟動.重新安裝應用程序可能會糾正這個問題"
//------------------------------------------------------
這個問題主要出現在XP環境下運行由Visual C++2003/2005編譯的MFC程序時
問題現象是XP運行此類程序時,報錯"由於應用程序配置不正確,應用程序未能啟動.重新安裝應用程序可能會糾正這個問題"
這個問題似乎許多人遇見過.在CSDN和微軟社區裡面都有人提到.但是沒有完整的解決方案
這個問題的解決一共會遇見2個子問題
最早出現這個錯誤我和許多人認為的一樣
認為是缺乏DLL庫文件導致.但是在測試機復制了DLL甚至安裝了.net framework 2.0以後
都無法解決問題,最後確認不是由缺乏DLL所致
因為程序是純win32的應用程,非託管代碼,所以也無需.net framework
Visual C++2003/2005默認的MFC程序是使用動態MFC庫(Use MFC in a Shared DLL)來鏈接的
而動態MFC庫使用的是Multi-threaded DLL (/MD)
由於XP對於PE文件格式監測更加嚴格.
就會導致部分使用多線程DLL的可執行文件在調用的時候出錯
修改項目屬性的編譯開關
Project->Property->configuration Properties->C/C++->Code Generation->Runtime Library
修改成Multi-threaded (/MT)
修改了Runtime類型以後
需要將MFC的編譯類型也改成靜態庫
Project->Property->configuration Properties->General->Use of MFC
修改成Use MFC in a Static Library
一部分情況下在這步就能解決問題
另外一部分情況會遇見如下情況
編譯器報錯
CODE:
nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) already defined in libcpmt.lib(newaop.obj)
[Copy to clipboard]
產生這個問題的原因是庫依賴關系
在Project->Property->configuration Properties->Linker->Command Line
加入編譯開關/verbose:lib可以顯示詳細的庫鏈接順序
CODE:
------ Build started: Project: PerfMonDemo, Configuration: Release Win32 ------
Linking...
Searching libraries
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\pdh.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\DelayImp.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcpmt.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib\nafxcw.lib:
nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) already defined in libcpmt.lib(newaop.obj)
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcmt.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\kernel32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\user32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\gdi32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\msimg32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\comdlg32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\winspool.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\advapi32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\shell32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\comctl32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\shlwapi.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\uuid.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oledlg.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\ole32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oleaut32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\urlmon.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\OLDNAMES.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib\atls.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\ws2_32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\mswsock.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oleacc.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\pdh.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\DelayImp.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcpmt.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib\nafxcw.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcmt.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\kernel32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\user32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\gdi32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\msimg32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\comdlg32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\winspool.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\advapi32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\shell32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\comctl32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\shlwapi.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\uuid.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oledlg.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\ole32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oleaut32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\urlmon.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\OLDNAMES.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib\atls.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\ws2_32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\mswsock.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oleacc.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\pdh.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\DelayImp.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcpmt.lib:
Finished searching libraries
Searching libraries
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\pdh.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\DelayImp.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcpmt.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib\nafxcw.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcmt.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\kernel32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\user32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\gdi32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\msimg32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\comdlg32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\winspool.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\advapi32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\shell32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\comctl32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\shlwapi.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\uuid.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oledlg.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\ole32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oleaut32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\urlmon.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\OLDNAMES.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib\atls.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\ws2_32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\mswsock.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oleacc.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\pdh.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\DelayImp.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcpmt.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib\nafxcw.lib:
Finished searching libraries
.\Release/PerfMonDemo.exe : fatal error LNK1169: one or more multiply defined symbols found
Build log was saved at "file://d:\Dev\Performance Monitor\Release\BuildLog.htm"
PerfMonDemo - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
[Copy to clipboard]
我們發現在libcpmt.lib聲明過的operator new在nafxcw.lib中再次定義
解決方法如下
Project->Property->configuration Properties->Linker->Input->Additional Dependencies
加入
nafxcw.lib
libcpmt.lib
Project->Property->configuration Properties->Linker->Input->Ignore Specific Library
加入
nafxcw.lib
libcpmt.lib
這樣鏈接程序就不會先按照默認順序來連接這兩個庫文件
而是在最後在加入對他們的引用.這樣就避免了這個問題
下面是一張可能發生沖突的列表
若要使用此運行時庫 請忽略這些庫
單線程 (libc.lib) libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
多線程 (libcmt.lib) libc.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
使用 DLL 的多線程 (msvcrt.lib) libc.lib、libcmt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
調試單線程 (libcd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcmtd.lib、msvcrtd.lib
調試多線程 (libcmtd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、msvcrtd.lib
使用 DLL 的調試多線程 (msvcrtd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib
//本人曾經對上面的方法進行測試,修改後可能出現XX無法解析的情況,請大家使用MSDN查找該函數,並且找到該函數對應的lib庫文件。將其添加到附加依賴項或者是用#pragma comment(lib,"xxx.lib")將其添加到代碼中!
『叄』 MFC下如何關閉外部程序,例如關閉一個以notepad.exe D:\\text.txt打開的進程
STARTUPINFOsi;
PROCESS_INFORMATIONpi;
LPTSTRszCmdline=_tcsp(TEXT("notepad.exeD:\text.txt"));
ZeroMemory(&si,sizeof(si));
si.cb=sizeof(si);
ZeroMemory(&pi,sizeof(pi));
//Startthechildprocess.
if(!CreateProcess(NULL,//Nomolename(usecommandline)
szCmdline,//Commandline
NULL,//Processhandlenotinheritable
NULL,//Threadhandlenotinheritable
FALSE,//SethandleinheritancetoFALSE
0,//Nocreationflags
NULL,//Useparent'senvironmentblock
NULL,//Useparent'sstartingdirectory
&si,//PointertoSTARTUPINFOstructure
&pi)//PointertoPROCESS_INFORMATIONstructure
)
{
printf("CreateProcessfailed(%d). ",GetLastError());
return;
}
//Waituntilchildprocessexits.
WaitForSingleObject(pi.hProcess,INFINITE);
//這里就是關閉
//Closeprocessandthreadhandles.
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
後,子進程就與父進程徹底脫離關系了,在Windows下進程之間的關系比較弱,不僅沒有父進程收割子進程退出狀態這一回事,甚至連getppid這樣的API也沒有。這又導致了兩個現象,
1)Windows下不用當心Linux下的僵死進程問題。
2.)當失去句柄僅僅知道進程ID時,Windows下甚至無法判斷此進程是否就是原有進程,(用OpenProcess打開的句柄無法判定是否就是原來的進程)假如此進程已經結束,也無法獲取到進程的退出狀態。(在Windows下獲取進程退出狀態必須得保留進程的句柄,然後調用GetExitCodeProcess)
3.現在一般的游戲都已經不允許直接運行了,這點的目的很簡單,加大別人用反編譯軟體調試游戲主程序的難度。按照CreateProcess的默認參數的直接創建原游戲主程序時,會碰到一個問題,及當發生原程序發生缺少動態庫等情況時,原有系統彈出的提示對話框會被調用CreateProcess的進程吞掉,使得這類錯誤被掩蓋,因為此時CreateProcess返回值實際是成功的。這時候,將CreateProcess的參數Process Creation Flags設為CREATE_DEFAULT_ERROR_MODE就可以讓原有的提示窗口彈出來。
4. Process Creation Flags設為CREATE_SUSPENDED時,可以將欲創建進程掛起,這時想對新進程幹啥都行,甚至可以嘗試更改其代碼段以影響程序運行,(但是大部分帶監控的殺毒軟體會有警告)。然後用ResumeThread API去讓原進程的主線程運行起來。
5.CreateProcess創建的進程句柄實際代表的是一個Windows核心對象,適用於Windows核心對象的操作都可以對進程句柄進行,(核心對象的概念請參考《WIndows核心編程》,其中包括WaitForSingleObject等同步API。
『肆』 如何修改exe程序
你好,很高興為你解答問題,希望我下面的回答對你有所幫助。
修改程序的版本可以使用資源修改器做到,常用的有Rescope,HackResource等等。這些軟體我可提供給你。如果自己不太會使用的話我可不知道您是不是學編程的。由於我的編程經驗有限,我知道程序發行時的版本是在編寫軟體時在version裡面直接聲明的,實際也就是寫進去的。這就是為什麼windows XP過後可以是windows7而不是windows YP的原因。如果使用函數實現,那麼其版本號命名一定有規律,而你發現幾個軟體的版本更新之後命名是有規律的呢?
以上說的修改方法,需要你擁有程序的源代碼。沒有程序的源代碼,只能用黑客資源修改器等軟體來修改。不知道您是否明白了。
而你的要求似乎是寫一個非常簡單的資源修改器,只需要修改程序版本即可。這個我也不是太清楚,因為我的MFC才剛剛起步,你可以到編程論壇求助看看。以幫你修改。
希望對你有所幫助
建議好的話請採納吧!
『伍』 c++代碼反編譯
進入.Net之後,VC可以用來開發本地的win32程序,還有託管的.Net程序
其中win32程序,比如mfc程序,使用傳統C++語言,是直接編譯為機器指令的,最多反匯編到匯編代碼
但是.net程序,使用微軟為.net平台擴展的C++/CLI語言(.net 1.1時代有一種託管C++語言,是微軟的早期作品,因為穩定性欠佳,已被C++/CLI取代),編譯之後的是.net平台的IL語言,因為IL匯編語言較傳統匯編指令遠為「高級」,通過簡單的反匯編器就可以得到幾乎一摸一樣的源代碼,樓主實際看到的是這種.net程序,這才是通過Reflector能夠看到的反匯編代碼
『陸』 如何看MFC程序代碼
反編譯,反編譯為c++代碼
『柒』 怎麼查看dll文件啊 我菜鳥!不是菜鳥知道的趕緊進來~!
DLL文件(Dynamic Linkable Library 即動態鏈接庫文件),是一種不能單獨運行的文件,它允許程序共享執行特殊任務所必需的代碼和其他資源
比較大的應用程序都由很多模塊組成,這些模塊分別完成相對獨立的功能,它們彼此協作來完成整個軟體系統的工作。可能存在一些模塊的功能較為通用,在構造其它軟體系統時仍會被使用。在構造軟體系統時,如果將所有模塊的源代碼都靜態編譯到整個應用程序 EXE 文件中,會產生一些問題:一個缺點是增加了應用程序的大小,它會佔用更多的磁碟空間,程序運行時也會消耗較大的內存空間,造成系統資源的浪費;另一個缺點是,在編寫大的 EXE 程序時,在每次修改重建時都必須調整編譯所有源代碼,增加了編譯過程的復雜性,也不利於階段性的單元測試。
Windows 系統平台上提供了一種完全不同的較有效的編程和運行環境,你可以將獨立的程序模塊創建為較小的 DLL 文件,並可對它們單獨編譯和測試。在運行時,只有當 EXE 程序確實要調用這些 DLL 模塊的情況下,系統才會將它們裝載到內存空間中。這種方式不僅減少了 EXE 文件的大小和對內存空間的需求,而且使這些 DLL 模塊可以同時被多個應用程序使用。Windows 自己就將一些主要的系統功能以 DLL 模塊的形式實現。
一般來說,DLL 是一種磁碟文件,以.dll、.DRV、.FON、.SYS 和許多以 .EXE 為擴展名的系統文件都可以是 DLL。它由全局數據、服務函數和資源組成,在運行時被系統載入到調用進程的虛擬空間中,成為調用進程的一部分。如果與其它 DLL 之間沒有沖突,該文件通常映射到進程虛擬空間的同一地址上。DLL 模塊中包含各種導出函數,用於向外界提供服務。DLL 可以有自己的數據段,但沒有自己的堆棧,使用與調用它的應用程序相同的堆棧模式;一個 DLL 在內存中只有一個實例;DLL 實現了代碼封裝性;DLL 的編制與具體的編程語言及編譯器無關。
在 Win32 環境中,每個進程都復制了自己的讀/寫全局變數。如果想要與其它進程共享內存,必須使用內存映射文件或者聲明一個共享數據段。DLL 模塊需要的堆棧內存都是從運行進程的堆棧中分配出來的。Windows 在載入 DLL 模塊時將進程函數調用與 DLL 文件的導出函數相匹配。Windows 操作系統對 DLL 的操作僅僅是把 DLL 映射到需要它的進程的虛擬地址空間里去。DLL 函數中的代碼所創建的任何對象(包括變數)都歸調用它的線程或進程所有。
調用方式:
1、靜態調用方式:由編譯系統完成對 DLL 的載入和應用程序結束時 DLL 卸載的編碼(如還有其它程序使用該 DLL,則 Windows 對 DLL 的應用記錄減1,直到所有相關程序都結束對該 DLL 的使用時才釋放它,簡單實用,但不夠靈活,只能滿足一般要求。
隱式的調用:需要把產生動態連接庫時產生的 .LIB 文件加入到應用程序的工程中,想使用 DLL 中的函數時,只須說明一下。隱式調用不需要調用 LoadLibrary() 和 FreeLibrary()。程序員在建立一個 DLL 文件時,鏈接程序會自動生成一個與之對應的 LIB 導入文件。該文件包含了每一個 DLL 導出函數的符號名和可選的標識號,但是並不含有實際的代碼。LIB 文件作為 DLL 的替代文件被編譯到應用程序項目中。
當程序員通過靜態鏈接方式編譯生成應用程序時,應用程序中的調用函數與 LIB 文件中導出符號相匹配,這些符號或標識號進入到生成的 EXE 文件中。LIB 文件中也包含了對應的 DL L文件名(但不是完全的路徑名),鏈接程序將其存儲在 EXE 文件內部。
當應用程序運行過程中需要載入 DLL 文件時,Windows 根據這些信息發現並載入 DLL,然後通過符號名或標識號實現對 DLL 函數的動態鏈接。所有被應用程序調用的 DLL 文件都會在應用程序 EXE文件載入時被載入在到內存中。可執行程序鏈接到一個包含 DLL 輸出函數信息的輸入庫文件(.LIB文件)。操作系統在載入使用可執行程序時載入 DLL。可執行程序直接通過函數名調用 DLL 的輸出函數,調用方法和程序內部其 它的函數是一樣的。
2、動態調用方式:是由編程者用 API 函數載入和卸載 DLL 來達到調用 DLL 的目的,使用上較復雜,但能更加有效地使用內存,是編制大型應用程序時的重要方式。
顯式的調用:
是指在應用程序中用 LoadLibrary 或 MFC 提供的 AfxLoadLibrary 顯式的將自己所做的動態連接庫調進來,動態連接庫的文件名即是上面兩個函數的參數,再用 GetProcAddress() 獲取想要引入的函
『捌』 怎麼看軟體用什麼語言編寫的
現在的軟體有的不純是用一種語言編寫,可以用spy++,vc6自帶的,然後用它判斷,如果類名是thunder,則為vb程序,為t開頭,一般是delphi程序,有afx的,一般為mfc程序,比較正常的,則為win32程序,用c或32位匯編編寫
想簡單的判斷,可以用查殼軟體,peid等,一般你可以去下載破解工具包即可
『玖』 如何查看exe文件是用什麼語言寫的
一般沒有辦法可以保證獲取EXE文件是什麼語言寫的,只是對於編譯後沒有進行任何處理的EXE文件,可以去看它是否符合常見的DELPHI、VB、VC++等編譯器的規律,然後猜測其是什麼語言編寫的。
對於高級語言的反編譯,理論上就是不可能的,除非是對於PHP、FOXPRO這些偽編譯系統。雖然EXE都可以反匯編,但是真正想反匯編之後做個什麼大的手足,是非常非常困難的。
用名為PEiD的這個軟體把這個,exe查一下,如果它沒有加殼的話,就可以看出是用什麼語言寫的,如果它加了殼,要把它脫殼以後,才能看得出是用什麼語言寫的。
從一些細節,例如需要那些DLL庫,需要的其它配置,有無配置文件。 當然,還有更鳥的辦法——反編譯! Foxpro、VFP、Delphi都可以。PB、VB都有特定的文件;BCB可以用某個軟體打開,雖然看不道源代碼,但足以判斷,另外的大概是VC了。至於C和匯編,WIN9X下無圖標。
(9)mfc程序反編譯擴展閱讀:
通過看它和什麼庫鏈接可以猜測出用過哪些語言。比如Java語言寫的程序一般不會不與Java運行時的DLL鏈接(名字好像叫jre.dll),Objective-C 和Swift語言寫的程序往往是和objc運行時鏈接的。
C語言鏈接的DLL包括Unix/BSD/Linux系統上的libc、libxnet等,和Windows上的Kernel.dll等。C++也是如此,但鏈接的包括有libstdcxx,和Windows上的 mfc*.dll。
雖說幾乎任何高級語言編譯的exe文件都可以通過反編譯的方法獲得源代碼,但到目前為止,還沒有一種反編譯的方法可以獲得百分百完整、准確的源代碼。
而學過編程的都知道,源程序中有時候哪怕錯一個字元,運行結果都有可能完全出人預料。因此反編譯獲得的源代碼,重新編譯為exe文件後,要麼就是無法運行,要麼就是面目全非了。
『拾』 怎麼在沒有源代碼的情況下修改一個軟體用的MFC。反編譯還是有別的辦法
不用反編譯,用鉤子函數就可以。windows系統打補丁就是用這種技術。大概是設計一個新的dll庫文件掛在原來的程序上,實現一些功能的替換