├── .gitattributes ├── .gitignore ├── Or0Pack ├── CProcessingPE.cpp ├── CProcessingPE.h ├── Or0Pack.cpp ├── Or0Pack.h ├── Or0Pack.rc ├── Or0Pack.vcxproj ├── Or0Pack.vcxproj.filters ├── dllmain.cpp ├── framework.h ├── pch.cpp ├── pch.h └── resource.h ├── Or0packBase.cpp ├── Or0packBase.h ├── Or0packBase.rc ├── Or0packBase.sln ├── Or0packBase.vcxproj ├── Or0packBase.vcxproj.filters ├── Or0packBaseDlg.cpp ├── Or0packBaseDlg.h ├── Stub ├── Stub.cpp ├── Stub.h ├── Stub.vcxproj ├── Stub.vcxproj.filters ├── dllmain.cpp ├── framework.h ├── pch.cpp └── pch.h ├── framework.h ├── pch.cpp ├── pch.h ├── res ├── Or0packBase.ico └── Or0packBase.rc2 ├── resource.h └── targetver.h /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Ww][Ii][Nn]32/ 27 | [Aa][Rr][Mm]/ 28 | [Aa][Rr][Mm]64/ 29 | bld/ 30 | [Bb]in/ 31 | [Oo]bj/ 32 | [Oo]ut/ 33 | [Ll]og/ 34 | [Ll]ogs/ 35 | 36 | # Visual Studio 2015/2017 cache/options directory 37 | .vs/ 38 | # Uncomment if you have tasks that create the project's static files in wwwroot 39 | #wwwroot/ 40 | 41 | # Visual Studio 2017 auto generated files 42 | Generated\ Files/ 43 | 44 | # MSTest test Results 45 | [Tt]est[Rr]esult*/ 46 | [Bb]uild[Ll]og.* 47 | 48 | # NUnit 49 | *.VisualState.xml 50 | TestResult.xml 51 | nunit-*.xml 52 | 53 | # Build Results of an ATL Project 54 | [Dd]ebugPS/ 55 | [Rr]eleasePS/ 56 | dlldata.c 57 | 58 | # Benchmark Results 59 | BenchmarkDotNet.Artifacts/ 60 | 61 | # .NET Core 62 | project.lock.json 63 | project.fragment.lock.json 64 | artifacts/ 65 | 66 | # ASP.NET Scaffolding 67 | ScaffoldingReadMe.txt 68 | 69 | # StyleCop 70 | StyleCopReport.xml 71 | 72 | # Files built by Visual Studio 73 | *_i.c 74 | *_p.c 75 | *_h.h 76 | *.ilk 77 | *.meta 78 | *.obj 79 | *.iobj 80 | *.pch 81 | *.pdb 82 | *.ipdb 83 | *.pgc 84 | *.pgd 85 | *.rsp 86 | *.sbr 87 | *.tlb 88 | *.tli 89 | *.tlh 90 | *.tmp 91 | *.tmp_proj 92 | *_wpftmp.csproj 93 | *.log 94 | *.vspscc 95 | *.vssscc 96 | .builds 97 | *.pidb 98 | *.svclog 99 | *.scc 100 | 101 | # Chutzpah Test files 102 | _Chutzpah* 103 | 104 | # Visual C++ cache files 105 | ipch/ 106 | *.aps 107 | *.ncb 108 | *.opendb 109 | *.opensdf 110 | *.sdf 111 | *.cachefile 112 | *.VC.db 113 | *.VC.VC.opendb 114 | 115 | # Visual Studio profiler 116 | *.psess 117 | *.vsp 118 | *.vspx 119 | *.sap 120 | 121 | # Visual Studio Trace Files 122 | *.e2e 123 | 124 | # TFS 2012 Local Workspace 125 | $tf/ 126 | 127 | # Guidance Automation Toolkit 128 | *.gpState 129 | 130 | # ReSharper is a .NET coding add-in 131 | _ReSharper*/ 132 | *.[Rr]e[Ss]harper 133 | *.DotSettings.user 134 | 135 | # TeamCity is a build add-in 136 | _TeamCity* 137 | 138 | # DotCover is a Code Coverage Tool 139 | *.dotCover 140 | 141 | # AxoCover is a Code Coverage Tool 142 | .axoCover/* 143 | !.axoCover/settings.json 144 | 145 | # Coverlet is a free, cross platform Code Coverage Tool 146 | coverage*.json 147 | coverage*.xml 148 | coverage*.info 149 | 150 | # Visual Studio code coverage results 151 | *.coverage 152 | *.coveragexml 153 | 154 | # NCrunch 155 | _NCrunch_* 156 | .*crunch*.local.xml 157 | nCrunchTemp_* 158 | 159 | # MightyMoose 160 | *.mm.* 161 | AutoTest.Net/ 162 | 163 | # Web workbench (sass) 164 | .sass-cache/ 165 | 166 | # Installshield output folder 167 | [Ee]xpress/ 168 | 169 | # DocProject is a documentation generator add-in 170 | DocProject/buildhelp/ 171 | DocProject/Help/*.HxT 172 | DocProject/Help/*.HxC 173 | DocProject/Help/*.hhc 174 | DocProject/Help/*.hhk 175 | DocProject/Help/*.hhp 176 | DocProject/Help/Html2 177 | DocProject/Help/html 178 | 179 | # Click-Once directory 180 | publish/ 181 | 182 | # Publish Web Output 183 | *.[Pp]ublish.xml 184 | *.azurePubxml 185 | # Note: Comment the next line if you want to checkin your web deploy settings, 186 | # but database connection strings (with potential passwords) will be unencrypted 187 | *.pubxml 188 | *.publishproj 189 | 190 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 191 | # checkin your Azure Web App publish settings, but sensitive information contained 192 | # in these scripts will be unencrypted 193 | PublishScripts/ 194 | 195 | # NuGet Packages 196 | *.nupkg 197 | # NuGet Symbol Packages 198 | *.snupkg 199 | # The packages folder can be ignored because of Package Restore 200 | **/[Pp]ackages/* 201 | # except build/, which is used as an MSBuild target. 202 | !**/[Pp]ackages/build/ 203 | # Uncomment if necessary however generally it will be regenerated when needed 204 | #!**/[Pp]ackages/repositories.config 205 | # NuGet v3's project.json files produces more ignorable files 206 | *.nuget.props 207 | *.nuget.targets 208 | 209 | # Microsoft Azure Build Output 210 | csx/ 211 | *.build.csdef 212 | 213 | # Microsoft Azure Emulator 214 | ecf/ 215 | rcf/ 216 | 217 | # Windows Store app package directories and files 218 | AppPackages/ 219 | BundleArtifacts/ 220 | Package.StoreAssociation.xml 221 | _pkginfo.txt 222 | *.appx 223 | *.appxbundle 224 | *.appxupload 225 | 226 | # Visual Studio cache files 227 | # files ending in .cache can be ignored 228 | *.[Cc]ache 229 | # but keep track of directories ending in .cache 230 | !?*.[Cc]ache/ 231 | 232 | # Others 233 | ClientBin/ 234 | ~$* 235 | *~ 236 | *.dbmdl 237 | *.dbproj.schemaview 238 | *.jfm 239 | *.pfx 240 | *.publishsettings 241 | orleans.codegen.cs 242 | 243 | # Including strong name files can present a security risk 244 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 245 | #*.snk 246 | 247 | # Since there are multiple workflows, uncomment next line to ignore bower_components 248 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 249 | #bower_components/ 250 | 251 | # RIA/Silverlight projects 252 | Generated_Code/ 253 | 254 | # Backup & report files from converting an old project file 255 | # to a newer Visual Studio version. Backup files are not needed, 256 | # because we have git ;-) 257 | _UpgradeReport_Files/ 258 | Backup*/ 259 | UpgradeLog*.XML 260 | UpgradeLog*.htm 261 | ServiceFabricBackup/ 262 | *.rptproj.bak 263 | 264 | # SQL Server files 265 | *.mdf 266 | *.ldf 267 | *.ndf 268 | 269 | # Business Intelligence projects 270 | *.rdl.data 271 | *.bim.layout 272 | *.bim_*.settings 273 | *.rptproj.rsuser 274 | *- [Bb]ackup.rdl 275 | *- [Bb]ackup ([0-9]).rdl 276 | *- [Bb]ackup ([0-9][0-9]).rdl 277 | 278 | # Microsoft Fakes 279 | FakesAssemblies/ 280 | 281 | # GhostDoc plugin setting file 282 | *.GhostDoc.xml 283 | 284 | # Node.js Tools for Visual Studio 285 | .ntvs_analysis.dat 286 | node_modules/ 287 | 288 | # Visual Studio 6 build log 289 | *.plg 290 | 291 | # Visual Studio 6 workspace options file 292 | *.opt 293 | 294 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 295 | *.vbw 296 | 297 | # Visual Studio LightSwitch build output 298 | **/*.HTMLClient/GeneratedArtifacts 299 | **/*.DesktopClient/GeneratedArtifacts 300 | **/*.DesktopClient/ModelManifest.xml 301 | **/*.Server/GeneratedArtifacts 302 | **/*.Server/ModelManifest.xml 303 | _Pvt_Extensions 304 | 305 | # Paket dependency manager 306 | .paket/paket.exe 307 | paket-files/ 308 | 309 | # FAKE - F# Make 310 | .fake/ 311 | 312 | # CodeRush personal settings 313 | .cr/personal 314 | 315 | # Python Tools for Visual Studio (PTVS) 316 | __pycache__/ 317 | *.pyc 318 | 319 | # Cake - Uncomment if you are using it 320 | # tools/** 321 | # !tools/packages.config 322 | 323 | # Tabs Studio 324 | *.tss 325 | 326 | # Telerik's JustMock configuration file 327 | *.jmconfig 328 | 329 | # BizTalk build output 330 | *.btp.cs 331 | *.btm.cs 332 | *.odx.cs 333 | *.xsd.cs 334 | 335 | # OpenCover UI analysis results 336 | OpenCover/ 337 | 338 | # Azure Stream Analytics local run output 339 | ASALocalRun/ 340 | 341 | # MSBuild Binary and Structured Log 342 | *.binlog 343 | 344 | # NVidia Nsight GPU debugger configuration file 345 | *.nvuser 346 | 347 | # MFractors (Xamarin productivity tool) working folder 348 | .mfractor/ 349 | 350 | # Local History for Visual Studio 351 | .localhistory/ 352 | 353 | # BeatPulse healthcheck temp database 354 | healthchecksdb 355 | 356 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 357 | MigrationBackup/ 358 | 359 | # Ionide (cross platform F# VS Code tools) working folder 360 | .ionide/ 361 | 362 | # Fody - auto-generated XML schema 363 | FodyWeavers.xsd -------------------------------------------------------------------------------- /Or0Pack/CProcessingPE.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Or0kit/Or0packBase/64b9df05cf6c46b5350085302c52332784671f7d/Or0Pack/CProcessingPE.cpp -------------------------------------------------------------------------------- /Or0Pack/CProcessingPE.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Or0kit/Or0packBase/64b9df05cf6c46b5350085302c52332784671f7d/Or0Pack/CProcessingPE.h -------------------------------------------------------------------------------- /Or0Pack/Or0Pack.cpp: -------------------------------------------------------------------------------- 1 | // Or0Pack.cpp : 定义 DLL 的导出函数。 2 | // 3 | 4 | #include "pch.h" 5 | #include "framework.h" 6 | #include "Or0Pack.h" 7 | #include 8 | 9 | bool Or0Pack(LPTSTR strPath, bool bShowMsg) 10 | { 11 | CProcessingPE objProcPE; // PE处理对象 12 | PE_INFO stcPeInfo; // PE信息 13 | 14 | HANDLE hFile_In; 15 | HANDLE hFile_Out; 16 | DWORD dwFileSize; 17 | LPVOID lpFileImage; 18 | WCHAR szOutPath[MAX_PATH] = { 0 }; 19 | 20 | // 1. 生成输出文件路径 21 | LPWSTR strSuffix = PathFindExtension(strPath); // 获取文件的后缀名 22 | wcsncpy_s(szOutPath, MAX_PATH, strPath, wcslen(strPath)); // 备份目标文件路径到szOutPath 23 | PathRemoveExtension(szOutPath); // 将szOutPath中保存路径的后缀名去掉 24 | wcscat_s(szOutPath, MAX_PATH, L"_Pack"); // 在路径最后附加“_Pack” 25 | wcscat_s(szOutPath, MAX_PATH, strSuffix); // 在路径最后附加刚刚保存的后缀名 26 | 27 | // 2. 获取文件信息,并映射进内存中 28 | if (INVALID_HANDLE_VALUE == (hFile_In = CreateFile(strPath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL))) 29 | { 30 | return false; 31 | } 32 | if (INVALID_FILE_SIZE == (dwFileSize = GetFileSize(hFile_In, NULL))) 33 | { 34 | CloseHandle(hFile_In); 35 | return false; 36 | } 37 | if (!(lpFileImage = VirtualAlloc(NULL, dwFileSize * 2, MEM_COMMIT, PAGE_READWRITE))) 38 | { 39 | CloseHandle(hFile_In); 40 | return false; 41 | } 42 | DWORD dwRet; 43 | if (!ReadFile(hFile_In, lpFileImage, dwFileSize, &dwRet, NULL)) 44 | { 45 | MessageBox(0, L"2 INVALID_ViReadFile", 0, 0); 46 | CloseHandle(hFile_In); 47 | VirtualFree(lpFileImage, 0, MEM_RELEASE); 48 | return false; 49 | } 50 | 51 | // 3. 获取PE文件信息 52 | if (!objProcPE.GetPeInfo(lpFileImage, dwFileSize, &stcPeInfo)) 53 | { 54 | MessageBox(0, L"3 获取PE文件信息", 0, 0); 55 | return false; 56 | }; 57 | 58 | 59 | // 4. 获取目标文件代码段的起始结束信息 60 | // 读取第一个区段的相关信息,并将其加密(默认第一个区段为代码段) 61 | PBYTE lpStart = (PBYTE)(stcPeInfo.pSectionHeader->PointerToRawData + (DWORD)lpFileImage); 62 | PBYTE lpEnd = (PBYTE)((DWORD)lpStart + stcPeInfo.pSectionHeader->SizeOfRawData); 63 | PBYTE lpStartVA = (PBYTE)(stcPeInfo.pSectionHeader->VirtualAddress + stcPeInfo.dwImageBase); 64 | PBYTE lpEndVA = (PBYTE)((DWORD)lpStartVA + stcPeInfo.pSectionHeader->SizeOfRawData); 65 | 66 | // 5. 对文件进行预处理 67 | Pretreatment(lpStart, lpEnd, stcPeInfo); 68 | 69 | // 6. 植入Stub 70 | DWORD dwStubSize = 0; 71 | GLOBAL_PARAM stcParam = { 0 }; 72 | stcParam.bShowMessage = bShowMsg; 73 | stcParam.dwOEP = stcPeInfo.dwOEP + stcPeInfo.dwImageBase; 74 | stcParam.lpStartVA = lpStartVA; 75 | stcParam.lpEndVA = lpEndVA; 76 | dwStubSize = Implantation(lpFileImage, dwFileSize, &objProcPE, stcPeInfo, stcParam); 77 | 78 | // 7. 将处理完成后的结果写入到新文件中 79 | if (INVALID_HANDLE_VALUE != (hFile_Out = CreateFile(szOutPath, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_ALWAYS, 0, NULL))) 80 | { 81 | DWORD dwRet = 0; 82 | WriteFile(hFile_Out, lpFileImage, dwStubSize + dwFileSize, &dwRet, NULL); 83 | } 84 | 85 | // 8. 释放相关资源并返回 86 | CloseHandle(hFile_In); 87 | CloseHandle(hFile_Out); 88 | VirtualFree(lpFileImage, 0, MEM_RELEASE); 89 | return true; 90 | } 91 | 92 | void Pretreatment(PBYTE lpCodeStart, PBYTE lpCodeEnd, PE_INFO stcPeInfo) 93 | { 94 | // 1. 加密指定区域 95 | while (lpCodeStart < lpCodeEnd) 96 | { 97 | *lpCodeStart ^= 0xA1; 98 | *lpCodeStart += 0x88; 99 | lpCodeStart++; 100 | } 101 | 102 | // 2. 给第一个区段附加上可写属性 103 | PDWORD pChara = &(stcPeInfo.pSectionHeader->Characteristics); 104 | *pChara = *pChara | IMAGE_SCN_MEM_WRITE; 105 | } 106 | 107 | DWORD Implantation(LPVOID& lpFileData, DWORD dwSize, CProcessingPE* pobjPE, PE_INFO stcPeInfo, GLOBAL_PARAM stcParam) 108 | { 109 | // 1. 在资源中读取文件内容 110 | HRSRC hREC = NULL; // 资源对象 111 | HGLOBAL hREC_Handle = NULL; // 资源句柄 112 | DWORD dwStubSize = NULL; // 文件大小 113 | LPVOID lpResData = NULL; // 资源数据指针 114 | HMODULE hModule = GetModuleHandle(L"Or0Pack.dll"); 115 | if (hModule == NULL) 116 | { 117 | MessageBox(0, L"GetModuleHandle Fail!", 0, 0); 118 | return 0; 119 | } 120 | if (!(hREC = FindResource(hModule, MAKEINTRESOURCE(IDR_STUB1), L"STUB"))) return false; 121 | if (!(hREC_Handle = LoadResource(hModule, hREC))) return false; 122 | if (!(lpResData = LockResource(hREC_Handle))) return false; 123 | if (!(dwStubSize = SizeofResource(hModule, hREC))) return false; 124 | 125 | // 2. 提取Stub部分的关键信息 126 | CProcessingPE objProcPE; 127 | PE_INFO stcStubPeInfo; 128 | PBYTE lpData = new BYTE[dwStubSize]; 129 | // 2.1 将Stub复制到临时缓冲区,防止重复操作 130 | CopyMemory(lpData, lpResData, dwStubSize); 131 | // 2.2 获取Stub的PE信息 132 | objProcPE.GetPeInfo(lpData, dwStubSize, &stcStubPeInfo); 133 | // 2.3 算出代码段的相关信息(默认第一个区段为代码段) 134 | PBYTE lpText = (PBYTE)(stcStubPeInfo.pSectionHeader->PointerToRawData + (DWORD)lpData); 135 | DWORD dwTextSize = stcStubPeInfo.pSectionHeader->SizeOfRawData; 136 | 137 | // 3. 添加区段 138 | DWORD dwNewSectionSize = 0; 139 | IMAGE_SECTION_HEADER stcNewSection = { 0 }; 140 | PVOID lpNewSectionData = pobjPE->AddSection( 141 | L".A1Pass", 142 | dwTextSize, 143 | IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE | IMAGE_SCN_MEM_EXECUTE, 144 | &stcNewSection, 145 | &dwNewSectionSize 146 | ); 147 | 148 | // 4. 对Stub部分进行的重定位操作 149 | // 新的加载地址 = (新区段的起始RVA - Stub的".Text"区段的起始RVA) + 映像基址 150 | DWORD dwLoadImageAddr = (stcNewSection.VirtualAddress - stcStubPeInfo.pSectionHeader->VirtualAddress) + stcPeInfo.dwImageBase; 151 | objProcPE.FixReloc(dwLoadImageAddr); 152 | 153 | // 5. 写入配置参数 154 | // 5.1 获取Stub的导出变量地址 155 | PVOID lpPatam = objProcPE.GetExpVarAddr(L"g_stcParam"); 156 | // 5.2 保存配置信息到Stub中 157 | CopyMemory(lpPatam, &stcParam, sizeof(GLOBAL_PARAM)); 158 | 159 | // 6. 将Stub复制到新区段中 160 | CopyMemory(lpNewSectionData, lpText, dwTextSize); 161 | 162 | // 7. 计算并设置新OEP 163 | DWORD dwNewOEP = 0; 164 | // 7.1 计算新OEP 165 | DWORD dwStubOEP = stcStubPeInfo.dwOEP; 166 | DWORD dwStubTextRVA = stcStubPeInfo.pSectionHeader->VirtualAddress; 167 | DWORD dwNewSectionRVA = stcNewSection.VirtualAddress; 168 | dwNewOEP = (dwStubOEP - dwStubTextRVA) + dwNewSectionRVA; 169 | // 7.2 设置新OEP 170 | pobjPE->SetOEP(dwNewOEP); 171 | 172 | // 8. 释放资源,函数返回 173 | delete[] lpData; 174 | FreeResource(hREC_Handle); 175 | return dwNewSectionSize; 176 | } 177 | -------------------------------------------------------------------------------- /Or0Pack/Or0Pack.h: -------------------------------------------------------------------------------- 1 | // 下列 ifdef 块是创建使从 DLL 导出更简单的 2 | // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 OR0PACK_EXPORTS 3 | // 符号编译的。在使用此 DLL 的 4 | // 任何项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将 5 | // OR0PACK_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的 6 | // 符号视为是被导出的。 7 | #pragma once 8 | #include "resource.h" 9 | #include "CProcessingPE.h" 10 | #include 11 | #include 12 | #pragma comment(lib,"shlwapi.lib") 13 | 14 | #ifdef OR0PACK_EXPORTS 15 | #define OR0PACK_API __declspec(dllexport) 16 | 17 | #else 18 | #define OR0PACK_API __declspec(dllimport) 19 | #endif 20 | 21 | OR0PACK_API bool Or0Pack(LPTSTR strPath, bool bShowMsg); 22 | 23 | // 用以保存传递给Stub部分的参数 24 | typedef struct _GLOBAL_PARAM 25 | { 26 | BOOL bShowMessage; // 是否显示解密信息 27 | DWORD dwOEP; // 程序入口点 28 | PBYTE lpStartVA; // 起始虚拟地址(被异或加密区) 29 | PBYTE lpEndVA; // 结束虚拟地址(被异或加密区) 30 | }GLOBAL_PARAM, * PGLOBAL_PARAM; 31 | 32 | // 加壳时会用到的函数声明 33 | extern void Pretreatment(PBYTE lpCodeStart, PBYTE lpCodeEnd, PE_INFO stcPeInfo); // 预处理函数 34 | extern DWORD Implantation(LPVOID& lpFileData, DWORD dwSize, CProcessingPE* pobjPE, PE_INFO stcPeInfo, GLOBAL_PARAM stcParam); // Stub植入函数 -------------------------------------------------------------------------------- /Or0Pack/Or0Pack.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Or0kit/Or0packBase/64b9df05cf6c46b5350085302c52332784671f7d/Or0Pack/Or0Pack.rc -------------------------------------------------------------------------------- /Or0Pack/Or0Pack.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | Debug 14 | x64 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | 22 | 16.0 23 | Win32Proj 24 | {a5f20327-fd45-4c7f-99ea-54082b61ee46} 25 | Or0Pack 26 | 10.0 27 | 28 | 29 | 30 | DynamicLibrary 31 | true 32 | v142 33 | Unicode 34 | 35 | 36 | DynamicLibrary 37 | false 38 | v142 39 | true 40 | Unicode 41 | 42 | 43 | DynamicLibrary 44 | true 45 | v142 46 | Unicode 47 | 48 | 49 | DynamicLibrary 50 | false 51 | v142 52 | true 53 | Unicode 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | true 75 | Or0Pack 76 | 77 | 78 | false 79 | Or0Pack 80 | 81 | 82 | true 83 | Or0Pack 84 | 85 | 86 | false 87 | Or0Pack 88 | 89 | 90 | 91 | Level3 92 | true 93 | WIN32;_DEBUG;OR0PACK_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) 94 | true 95 | Use 96 | pch.h 97 | 98 | 99 | Windows 100 | true 101 | false 102 | 103 | 104 | 105 | 106 | Level3 107 | true 108 | true 109 | true 110 | WIN32;NDEBUG;OR0PACK_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) 111 | true 112 | Use 113 | pch.h 114 | 115 | 116 | Windows 117 | true 118 | true 119 | true 120 | false 121 | 122 | 123 | 124 | 125 | Level3 126 | true 127 | _DEBUG;OR0PACK_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) 128 | true 129 | Use 130 | pch.h 131 | 132 | 133 | Windows 134 | true 135 | false 136 | 137 | 138 | 139 | 140 | Level3 141 | true 142 | true 143 | true 144 | NDEBUG;OR0PACK_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) 145 | true 146 | Use 147 | pch.h 148 | 149 | 150 | Windows 151 | true 152 | true 153 | true 154 | false 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | Create 174 | Create 175 | Create 176 | Create 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | -------------------------------------------------------------------------------- /Or0Pack/Or0Pack.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | 20 | 资源文件 21 | 22 | 23 | 24 | 25 | 头文件 26 | 27 | 28 | 头文件 29 | 30 | 31 | 头文件 32 | 33 | 34 | 头文件 35 | 36 | 37 | 头文件 38 | 39 | 40 | 41 | 42 | 源文件 43 | 44 | 45 | 源文件 46 | 47 | 48 | 源文件 49 | 50 | 51 | 源文件 52 | 53 | 54 | 55 | 56 | 资源文件 57 | 58 | 59 | -------------------------------------------------------------------------------- /Or0Pack/dllmain.cpp: -------------------------------------------------------------------------------- 1 | // dllmain.cpp : 定义 DLL 应用程序的入口点。 2 | #include "pch.h" 3 | #pragma comment(linker, "/merge:.data=.text") 4 | #pragma comment(linker, "/merge:.rdata=.text") 5 | #pragma comment(linker, "/section:.text,RWE") 6 | 7 | 8 | 9 | 10 | 11 | BOOL APIENTRY DllMain( HMODULE hModule, 12 | DWORD ul_reason_for_call, 13 | LPVOID lpReserved 14 | ) 15 | { 16 | switch (ul_reason_for_call) 17 | { 18 | case DLL_PROCESS_ATTACH: 19 | case DLL_THREAD_ATTACH: 20 | case DLL_THREAD_DETACH: 21 | case DLL_PROCESS_DETACH: 22 | break; 23 | } 24 | return TRUE; 25 | } 26 | 27 | -------------------------------------------------------------------------------- /Or0Pack/framework.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的内容 4 | // Windows 头文件 5 | #include 6 | -------------------------------------------------------------------------------- /Or0Pack/pch.cpp: -------------------------------------------------------------------------------- 1 | // pch.cpp: 与预编译标头对应的源文件 2 | 3 | #include "pch.h" 4 | 5 | // 当使用预编译的头时,需要使用此源文件,编译才能成功。 6 | -------------------------------------------------------------------------------- /Or0Pack/pch.h: -------------------------------------------------------------------------------- 1 | // pch.h: 这是预编译标头文件。 2 | // 下方列出的文件仅编译一次,提高了将来生成的生成性能。 3 | // 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。 4 | // 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。 5 | // 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。 6 | 7 | #ifndef PCH_H 8 | #define PCH_H 9 | 10 | // 添加要在此处预编译的标头 11 | #include "framework.h" 12 | 13 | #endif //PCH_H 14 | -------------------------------------------------------------------------------- /Or0Pack/resource.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Or0kit/Or0packBase/64b9df05cf6c46b5350085302c52332784671f7d/Or0Pack/resource.h -------------------------------------------------------------------------------- /Or0packBase.cpp: -------------------------------------------------------------------------------- 1 |  2 | // Or0packBase.cpp: 定义应用程序的类行为。 3 | // 4 | 5 | #include "pch.h" 6 | #include "framework.h" 7 | #include "Or0packBase.h" 8 | #include "Or0packBaseDlg.h" 9 | 10 | #ifdef _DEBUG 11 | #define new DEBUG_NEW 12 | #endif 13 | 14 | 15 | // COr0packBaseApp 16 | 17 | BEGIN_MESSAGE_MAP(COr0packBaseApp, CWinApp) 18 | ON_COMMAND(ID_HELP, &CWinApp::OnHelp) 19 | END_MESSAGE_MAP() 20 | 21 | 22 | // COr0packBaseApp 构造 23 | 24 | COr0packBaseApp::COr0packBaseApp() 25 | { 26 | // TODO: 在此处添加构造代码, 27 | // 将所有重要的初始化放置在 InitInstance 中 28 | } 29 | 30 | 31 | // 唯一的 COr0packBaseApp 对象 32 | 33 | COr0packBaseApp theApp; 34 | 35 | 36 | // COr0packBaseApp 初始化 37 | 38 | BOOL COr0packBaseApp::InitInstance() 39 | { 40 | CWinApp::InitInstance(); 41 | 42 | 43 | // 创建 shell 管理器,以防对话框包含 44 | // 任何 shell 树视图控件或 shell 列表视图控件。 45 | CShellManager *pShellManager = new CShellManager; 46 | 47 | // 激活“Windows Native”视觉管理器,以便在 MFC 控件中启用主题 48 | CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows)); 49 | 50 | // 标准初始化 51 | // 如果未使用这些功能并希望减小 52 | // 最终可执行文件的大小,则应移除下列 53 | // 不需要的特定初始化例程 54 | // 更改用于存储设置的注册表项 55 | // TODO: 应适当修改该字符串, 56 | // 例如修改为公司或组织名 57 | SetRegistryKey(_T("应用程序向导生成的本地应用程序")); 58 | 59 | COr0packBaseDlg dlg; 60 | m_pMainWnd = &dlg; 61 | INT_PTR nResponse = dlg.DoModal(); 62 | if (nResponse == IDOK) 63 | { 64 | // TODO: 在此放置处理何时用 65 | // “确定”来关闭对话框的代码 66 | } 67 | else if (nResponse == IDCANCEL) 68 | { 69 | // TODO: 在此放置处理何时用 70 | // “取消”来关闭对话框的代码 71 | } 72 | else if (nResponse == -1) 73 | { 74 | TRACE(traceAppMsg, 0, "警告: 对话框创建失败,应用程序将意外终止。\n"); 75 | TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用 MFC 控件,则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n"); 76 | } 77 | 78 | // 删除上面创建的 shell 管理器。 79 | if (pShellManager != nullptr) 80 | { 81 | delete pShellManager; 82 | } 83 | 84 | #if !defined(_AFXDLL) && !defined(_AFX_NO_MFC_CONTROLS_IN_DIALOGS) 85 | ControlBarCleanUp(); 86 | #endif 87 | 88 | // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序, 89 | // 而不是启动应用程序的消息泵。 90 | return FALSE; 91 | } 92 | 93 | -------------------------------------------------------------------------------- /Or0packBase.h: -------------------------------------------------------------------------------- 1 |  2 | // Or0packBase.h: PROJECT_NAME 应用程序的主头文件 3 | // 4 | 5 | #pragma once 6 | 7 | #ifndef __AFXWIN_H__ 8 | #error "在包含此文件之前包含 'pch.h' 以生成 PCH" 9 | #endif 10 | 11 | #include "resource.h" // 主符号 12 | 13 | 14 | // COr0packBaseApp: 15 | // 有关此类的实现,请参阅 Or0packBase.cpp 16 | // 17 | 18 | class COr0packBaseApp : public CWinApp 19 | { 20 | public: 21 | COr0packBaseApp(); 22 | 23 | // 重写 24 | public: 25 | virtual BOOL InitInstance(); 26 | 27 | // 实现 28 | 29 | DECLARE_MESSAGE_MAP() 30 | }; 31 | 32 | extern COr0packBaseApp theApp; 33 | -------------------------------------------------------------------------------- /Or0packBase.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Or0kit/Or0packBase/64b9df05cf6c46b5350085302c52332784671f7d/Or0packBase.rc -------------------------------------------------------------------------------- /Or0packBase.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.32106.194 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Or0packBase", "Or0packBase.vcxproj", "{B04C6D06-2009-4882-94A6-E39DE9447B11}" 7 | EndProject 8 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Stub", "Stub\Stub.vcxproj", "{E1F48480-41D2-408D-AE57-AAE36C0AAE9C}" 9 | EndProject 10 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Or0Pack", "Or0Pack\Or0Pack.vcxproj", "{A5F20327-FD45-4C7F-99EA-54082B61EE46}" 11 | EndProject 12 | Global 13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 14 | Debug|x64 = Debug|x64 15 | Debug|x86 = Debug|x86 16 | Release|x64 = Release|x64 17 | Release|x86 = Release|x86 18 | EndGlobalSection 19 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 20 | {B04C6D06-2009-4882-94A6-E39DE9447B11}.Debug|x64.ActiveCfg = Debug|x64 21 | {B04C6D06-2009-4882-94A6-E39DE9447B11}.Debug|x64.Build.0 = Debug|x64 22 | {B04C6D06-2009-4882-94A6-E39DE9447B11}.Debug|x86.ActiveCfg = Debug|Win32 23 | {B04C6D06-2009-4882-94A6-E39DE9447B11}.Debug|x86.Build.0 = Debug|Win32 24 | {B04C6D06-2009-4882-94A6-E39DE9447B11}.Release|x64.ActiveCfg = Release|x64 25 | {B04C6D06-2009-4882-94A6-E39DE9447B11}.Release|x64.Build.0 = Release|x64 26 | {B04C6D06-2009-4882-94A6-E39DE9447B11}.Release|x86.ActiveCfg = Release|Win32 27 | {B04C6D06-2009-4882-94A6-E39DE9447B11}.Release|x86.Build.0 = Release|Win32 28 | {E1F48480-41D2-408D-AE57-AAE36C0AAE9C}.Debug|x64.ActiveCfg = Debug|x64 29 | {E1F48480-41D2-408D-AE57-AAE36C0AAE9C}.Debug|x64.Build.0 = Debug|x64 30 | {E1F48480-41D2-408D-AE57-AAE36C0AAE9C}.Debug|x86.ActiveCfg = Debug|Win32 31 | {E1F48480-41D2-408D-AE57-AAE36C0AAE9C}.Debug|x86.Build.0 = Debug|Win32 32 | {E1F48480-41D2-408D-AE57-AAE36C0AAE9C}.Release|x64.ActiveCfg = Release|x64 33 | {E1F48480-41D2-408D-AE57-AAE36C0AAE9C}.Release|x64.Build.0 = Release|x64 34 | {E1F48480-41D2-408D-AE57-AAE36C0AAE9C}.Release|x86.ActiveCfg = Release|Win32 35 | {E1F48480-41D2-408D-AE57-AAE36C0AAE9C}.Release|x86.Build.0 = Release|Win32 36 | {A5F20327-FD45-4C7F-99EA-54082B61EE46}.Debug|x64.ActiveCfg = Debug|x64 37 | {A5F20327-FD45-4C7F-99EA-54082B61EE46}.Debug|x64.Build.0 = Debug|x64 38 | {A5F20327-FD45-4C7F-99EA-54082B61EE46}.Debug|x86.ActiveCfg = Debug|Win32 39 | {A5F20327-FD45-4C7F-99EA-54082B61EE46}.Debug|x86.Build.0 = Debug|Win32 40 | {A5F20327-FD45-4C7F-99EA-54082B61EE46}.Release|x64.ActiveCfg = Release|x64 41 | {A5F20327-FD45-4C7F-99EA-54082B61EE46}.Release|x64.Build.0 = Release|x64 42 | {A5F20327-FD45-4C7F-99EA-54082B61EE46}.Release|x86.ActiveCfg = Release|Win32 43 | {A5F20327-FD45-4C7F-99EA-54082B61EE46}.Release|x86.Build.0 = Release|Win32 44 | EndGlobalSection 45 | GlobalSection(SolutionProperties) = preSolution 46 | HideSolutionNode = FALSE 47 | EndGlobalSection 48 | GlobalSection(ExtensibilityGlobals) = postSolution 49 | SolutionGuid = {08F3E2FC-FBC9-4795-A175-5D2C285B3310} 50 | EndGlobalSection 51 | EndGlobal 52 | -------------------------------------------------------------------------------- /Or0packBase.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | Debug 14 | x64 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | 22 | 16.0 23 | {B04C6D06-2009-4882-94A6-E39DE9447B11} 24 | MFCProj 25 | Or0packBase 26 | 10.0 27 | 28 | 29 | 30 | Application 31 | true 32 | v142 33 | Unicode 34 | Static 35 | 36 | 37 | Application 38 | false 39 | v142 40 | true 41 | Unicode 42 | Static 43 | 44 | 45 | Application 46 | true 47 | v142 48 | Unicode 49 | Static 50 | 51 | 52 | Application 53 | false 54 | v142 55 | true 56 | Unicode 57 | Static 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | true 79 | 80 | 81 | true 82 | 83 | 84 | false 85 | 86 | 87 | false 88 | 89 | 90 | 91 | Use 92 | Level3 93 | true 94 | WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) 95 | pch.h 96 | 97 | 98 | Windows 99 | 100 | 101 | false 102 | true 103 | _DEBUG;%(PreprocessorDefinitions) 104 | 105 | 106 | 0x0804 107 | _DEBUG;%(PreprocessorDefinitions) 108 | $(IntDir);%(AdditionalIncludeDirectories) 109 | 110 | 111 | 112 | 113 | Use 114 | Level3 115 | true 116 | _WINDOWS;_DEBUG;%(PreprocessorDefinitions) 117 | pch.h 118 | 119 | 120 | Windows 121 | 122 | 123 | false 124 | true 125 | _DEBUG;%(PreprocessorDefinitions) 126 | 127 | 128 | 0x0804 129 | _DEBUG;%(PreprocessorDefinitions) 130 | $(IntDir);%(AdditionalIncludeDirectories) 131 | 132 | 133 | 134 | 135 | Use 136 | Level3 137 | true 138 | true 139 | true 140 | WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) 141 | pch.h 142 | 143 | 144 | Windows 145 | true 146 | true 147 | 148 | 149 | false 150 | true 151 | NDEBUG;%(PreprocessorDefinitions) 152 | 153 | 154 | 0x0804 155 | NDEBUG;%(PreprocessorDefinitions) 156 | $(IntDir);%(AdditionalIncludeDirectories) 157 | 158 | 159 | 160 | 161 | Use 162 | Level3 163 | true 164 | true 165 | true 166 | _WINDOWS;NDEBUG;%(PreprocessorDefinitions) 167 | pch.h 168 | 169 | 170 | Windows 171 | true 172 | true 173 | 174 | 175 | false 176 | true 177 | NDEBUG;%(PreprocessorDefinitions) 178 | 179 | 180 | 0x0804 181 | NDEBUG;%(PreprocessorDefinitions) 182 | $(IntDir);%(AdditionalIncludeDirectories) 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | Create 198 | Create 199 | Create 200 | Create 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | -------------------------------------------------------------------------------- /Or0packBase.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | 头文件 20 | 21 | 22 | 头文件 23 | 24 | 25 | 头文件 26 | 27 | 28 | 头文件 29 | 30 | 31 | 头文件 32 | 33 | 34 | 头文件 35 | 36 | 37 | 38 | 39 | 源文件 40 | 41 | 42 | 源文件 43 | 44 | 45 | 源文件 46 | 47 | 48 | 49 | 50 | 资源文件 51 | 52 | 53 | 54 | 55 | 资源文件 56 | 57 | 58 | 59 | 60 | 资源文件 61 | 62 | 63 | -------------------------------------------------------------------------------- /Or0packBaseDlg.cpp: -------------------------------------------------------------------------------- 1 |  2 | // Or0packBaseDlg.cpp: 实现文件 3 | // 4 | 5 | #include "pch.h" 6 | #include "framework.h" 7 | #include "Or0packBase.h" 8 | #include "Or0packBaseDlg.h" 9 | #include "afxdialogex.h" 10 | 11 | #ifdef _DEBUG 12 | #define new DEBUG_NEW 13 | #endif 14 | 15 | 16 | // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 17 | 18 | class CAboutDlg : public CDialogEx 19 | { 20 | public: 21 | CAboutDlg(); 22 | 23 | // 对话框数据 24 | #ifdef AFX_DESIGN_TIME 25 | enum { IDD = IDD_ABOUTBOX }; 26 | #endif 27 | 28 | protected: 29 | virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 30 | 31 | // 实现 32 | protected: 33 | DECLARE_MESSAGE_MAP() 34 | }; 35 | 36 | CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX) 37 | { 38 | } 39 | 40 | void CAboutDlg::DoDataExchange(CDataExchange* pDX) 41 | { 42 | CDialogEx::DoDataExchange(pDX); 43 | } 44 | 45 | BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) 46 | END_MESSAGE_MAP() 47 | 48 | 49 | // COr0packBaseDlg 对话框 50 | 51 | 52 | 53 | COr0packBaseDlg::COr0packBaseDlg(CWnd* pParent /*=nullptr*/) 54 | : CDialogEx(IDD_OR0PACKBASE_DIALOG, pParent) 55 | , m_strPath(_T("")) 56 | , m_bShowMsg(FALSE) 57 | { 58 | m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 59 | } 60 | 61 | void COr0packBaseDlg::DoDataExchange(CDataExchange* pDX) 62 | { 63 | CDialogEx::DoDataExchange(pDX); 64 | DDX_Text(pDX, IDC_EDIT1, m_strPath); 65 | DDX_Check(pDX, IDC_CHECK1, m_bShowMsg); 66 | } 67 | 68 | BEGIN_MESSAGE_MAP(COr0packBaseDlg, CDialogEx) 69 | ON_WM_SYSCOMMAND() 70 | ON_WM_PAINT() 71 | ON_WM_QUERYDRAGICON() 72 | ON_BN_CLICKED(IDC_BUTTON2, &COr0packBaseDlg::OnBnClickedButton2) 73 | ON_BN_CLICKED(IDC_BUTTON1, &COr0packBaseDlg::OnBnClickedButton1) 74 | ON_BN_CLICKED(IDC_CHECK1, &COr0packBaseDlg::OnBnClickedCheck1) 75 | ON_WM_DROPFILES() 76 | END_MESSAGE_MAP() 77 | 78 | 79 | // COr0packBaseDlg 消息处理程序 80 | 81 | BOOL COr0packBaseDlg::OnInitDialog() 82 | { 83 | CDialogEx::OnInitDialog(); 84 | 85 | // 将“关于...”菜单项添加到系统菜单中。 86 | 87 | // IDM_ABOUTBOX 必须在系统命令范围内。 88 | ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); 89 | ASSERT(IDM_ABOUTBOX < 0xF000); 90 | 91 | CMenu* pSysMenu = GetSystemMenu(FALSE); 92 | if (pSysMenu != nullptr) 93 | { 94 | BOOL bNameValid; 95 | CString strAboutMenu; 96 | bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); 97 | ASSERT(bNameValid); 98 | if (!strAboutMenu.IsEmpty()) 99 | { 100 | pSysMenu->AppendMenu(MF_SEPARATOR); 101 | pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); 102 | } 103 | } 104 | 105 | // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 106 | // 执行此操作 107 | SetIcon(m_hIcon, TRUE); // 设置大图标 108 | SetIcon(m_hIcon, FALSE); // 设置小图标 109 | 110 | // TODO: 在此添加额外的初始化代码 111 | 112 | return TRUE; // 除非将焦点设置到控件,否则返回 TRUE 113 | } 114 | 115 | void COr0packBaseDlg::OnSysCommand(UINT nID, LPARAM lParam) 116 | { 117 | if ((nID & 0xFFF0) == IDM_ABOUTBOX) 118 | { 119 | CAboutDlg dlgAbout; 120 | dlgAbout.DoModal(); 121 | } 122 | else 123 | { 124 | CDialogEx::OnSysCommand(nID, lParam); 125 | } 126 | } 127 | 128 | // 如果向对话框添加最小化按钮,则需要下面的代码 129 | // 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序, 130 | // 这将由框架自动完成。 131 | 132 | void COr0packBaseDlg::OnPaint() 133 | { 134 | if (IsIconic()) 135 | { 136 | CPaintDC dc(this); // 用于绘制的设备上下文 137 | 138 | SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); 139 | 140 | // 使图标在工作区矩形中居中 141 | int cxIcon = GetSystemMetrics(SM_CXICON); 142 | int cyIcon = GetSystemMetrics(SM_CYICON); 143 | CRect rect; 144 | GetClientRect(&rect); 145 | int x = (rect.Width() - cxIcon + 1) / 2; 146 | int y = (rect.Height() - cyIcon + 1) / 2; 147 | 148 | // 绘制图标 149 | dc.DrawIcon(x, y, m_hIcon); 150 | } 151 | else 152 | { 153 | CDialogEx::OnPaint(); 154 | } 155 | } 156 | 157 | //当用户拖动最小化窗口时系统调用此函数取得光标 158 | //显示。 159 | HCURSOR COr0packBaseDlg::OnQueryDragIcon() 160 | { 161 | return static_cast(m_hIcon); 162 | } 163 | 164 | 165 | 166 | void COr0packBaseDlg::OnBnClickedButton2() 167 | { 168 | // TODO: 在此添加控件通知处理程序代码 169 | // TODO: 在此添加控件通知处理程序代码 170 | UpdateData(true); 171 | if (!Or0Pack(m_strPath.GetBuffer(), m_bShowMsg)) 172 | MessageBox(L"加密失败-_-!"); 173 | else 174 | MessageBox(L"加密成功!"); 175 | } 176 | 177 | 178 | void COr0packBaseDlg::OnBnClickedButton1() 179 | { 180 | // TODO: 在此添加控件通知处理程序代码 181 | UpdateData(true); 182 | 183 | // 1. 选择文件 184 | CFileDialog dlg( // 构造一个CFileDialog对象 185 | TRUE, // 创建文件打开对话框 186 | L"*.exe", // 缺省文件扩展名 187 | NULL, // 初始显示于文件名编辑框中的文件名 188 | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, // 对话框标志 189 | L"Executable file(*.exe)|*.exe|All(*.*)|*.*||", // 指定过滤器 190 | NULL); // 指向文件对话框对象父窗口 191 | 192 | if (dlg.DoModal() == IDCANCEL) 193 | { 194 | return; 195 | } 196 | 197 | // 2. 获取路径 198 | m_strPath = dlg.GetPathName(); 199 | 200 | UpdateData(false); 201 | } 202 | 203 | 204 | void COr0packBaseDlg::OnBnClickedCheck1() 205 | { 206 | // TODO: 在此添加控件通知处理程序代码 207 | UpdateData(true); 208 | } 209 | 210 | 211 | void COr0packBaseDlg::OnDropFiles(HDROP hDropInfo) 212 | { 213 | // TODO: 在此添加消息处理程序代码和/或调用默认值 214 | CString strPath; 215 | LPTSTR szFile; 216 | LPTSTR szSuffix; 217 | 218 | // 1. 获取拖甩文件的信息 219 | DragQueryFile(hDropInfo, 0, strPath.GetBuffer(MAX_PATH), MAX_PATH); 220 | szFile = PathFindFileName(strPath); 221 | szSuffix = PathFindExtension(szFile); 222 | 223 | // 2. 判断这是否是一个合法文件(后缀为.exe) 224 | if (_wcsicmp(szSuffix, L".exe") && 225 | _wcsicmp(szSuffix, L"")) 226 | { 227 | MessageBox(L"您选择的不是EXE文件!"); 228 | CDialogEx::OnDropFiles(hDropInfo); 229 | return; 230 | } 231 | 232 | m_strPath = strPath; 233 | UpdateData(false); 234 | 235 | CDialogEx::OnDropFiles(hDropInfo); 236 | } 237 | -------------------------------------------------------------------------------- /Or0packBaseDlg.h: -------------------------------------------------------------------------------- 1 |  2 | // Or0packBaseDlg.h: 头文件 3 | // 4 | 5 | #pragma once 6 | #define A1PACK_BASE_EXPORTS 7 | #include "./Or0Pack/Or0Pack.h" 8 | 9 | #ifdef _DEBUG 10 | #pragma comment(lib, "./Debug/Or0Pack.lib") 11 | #else 12 | #pragma comment(lib, "./Release/Or0Pack.lib") 13 | #endif 14 | 15 | // COr0packBaseDlg 对话框 16 | class COr0packBaseDlg : public CDialogEx 17 | { 18 | // 构造 19 | public: 20 | COr0packBaseDlg(CWnd* pParent = nullptr); // 标准构造函数 21 | 22 | // 对话框数据 23 | #ifdef AFX_DESIGN_TIME 24 | enum { IDD = IDD_OR0PACKBASE_DIALOG }; 25 | #endif 26 | 27 | protected: 28 | virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 29 | 30 | 31 | // 实现 32 | protected: 33 | HICON m_hIcon; 34 | 35 | // 生成的消息映射函数 36 | virtual BOOL OnInitDialog(); 37 | afx_msg void OnSysCommand(UINT nID, LPARAM lParam); 38 | afx_msg void OnPaint(); 39 | afx_msg HCURSOR OnQueryDragIcon(); 40 | DECLARE_MESSAGE_MAP() 41 | public: 42 | afx_msg void OnBnClickedButton2(); 43 | afx_msg void OnBnClickedButton1(); 44 | afx_msg void OnBnClickedCheck1(); 45 | 46 | CString m_strPath; 47 | BOOL m_bShowMsg; 48 | afx_msg void OnDropFiles(HDROP hDropInfo); 49 | }; 50 | -------------------------------------------------------------------------------- /Stub/Stub.cpp: -------------------------------------------------------------------------------- 1 | // Stub.cpp : 定义 DLL 的导出函数。 2 | // 3 | 4 | #include "pch.h" 5 | #include "framework.h" 6 | #include "Stub.h" 7 | 8 | extern __declspec(dllexport) GLOBAL_PARAM g_stcParam = { 0 }; 9 | LPGETPROCADDRESS g_funGetProcAddress = nullptr; 10 | LPLOADLIBRARYEX g_funLoadLibraryEx = nullptr; 11 | 12 | LPEXITPROCESS g_funExitProcess = nullptr; 13 | LPMESSAGEBOX g_funMessageBox = nullptr; 14 | LPGETMODULEHANDLE g_funGetModuleHandle = nullptr; 15 | LPVIRTUALPROTECT g_funVirtualProtect = nullptr; 16 | 17 | DWORD GetKernel32Base() 18 | { 19 | DWORD dwKernel32Addr = 0; 20 | __asm 21 | { 22 | push eax; 23 | mov eax, fs: [0x30] ; 24 | mov eax, [eax + 0xC]; 25 | mov eax, [eax + 0x1C]; 26 | mov eax, [eax]; 27 | mov eax, [eax + 0x8]; 28 | mov dwKernel32Addr, eax; 29 | pop eax; 30 | } 31 | return dwKernel32Addr; 32 | } 33 | 34 | // 执行成功返回函数的地址,失败返回0 35 | DWORD GetGPAFunAddr() 36 | { 37 | DWORD dwKernelBase = 0; 38 | 39 | PIMAGE_DOS_HEADER pDosHeader = NULL;//DOS头 指针 40 | PIMAGE_NT_HEADERS pNtHeader = NULL;//NT头 指针 41 | PIMAGE_EXPORT_DIRECTORY pExportDirectory = NULL;//导出表 指针 42 | 43 | PDWORD pExportAddress = NULL; 44 | PDWORD pExportName = NULL; 45 | PWORD pExportOrdinal = NULL; 46 | 47 | char szGetProcAddr[] = { 'G','e','t','P','r','o','c','A','d','d','r','e','s','s',0 }; 48 | 49 | //遍历导出表时用的索引 50 | DWORD dwCnt = 0, index = 0; 51 | dwKernelBase = GetKernel32Base(); 52 | 53 | // 遍历 Kernel32.dll 的导出表 找到 GetProcAddress 54 | pDosHeader = (PIMAGE_DOS_HEADER)dwKernelBase; 55 | pNtHeader = (PIMAGE_NT_HEADERS)((DWORD)dwKernelBase + pDosHeader->e_lfanew); 56 | pExportDirectory = (PIMAGE_EXPORT_DIRECTORY)((DWORD)dwKernelBase + pNtHeader->OptionalHeader.DataDirectory[0].VirtualAddress); 57 | 58 | pExportAddress = (PDWORD)(pExportDirectory->AddressOfFunctions + dwKernelBase); 59 | //导出函数名称表地址 60 | pExportName = (PDWORD)(pExportDirectory->AddressOfNames + dwKernelBase); 61 | //导出函数序号表地址 62 | pExportOrdinal = (PWORD)(pExportDirectory->AddressOfNameOrdinals + dwKernelBase); 63 | 64 | 65 | //由函数名查找函数地址 66 | char* pFinded = NULL, * pszGetProcAddr; 67 | // 返回函数的地址 68 | DWORD dwGetProcAddress = 0; 69 | do 70 | { 71 | pszGetProcAddr = szGetProcAddr; 72 | pFinded = (char*)((DWORD)dwKernelBase + pExportName[dwCnt]); 73 | for (; *pFinded == *pszGetProcAddr; pFinded++, pszGetProcAddr++) 74 | { 75 | if (*pszGetProcAddr == 0) 76 | { 77 | dwGetProcAddress = ((DWORD)dwKernelBase + pExportAddress[pExportOrdinal[dwCnt]]); 78 | break; 79 | } 80 | } 81 | dwCnt++; 82 | } while ((dwCnt < pExportDirectory->NumberOfNames) & (dwGetProcAddress == 0)); 83 | 84 | return dwGetProcAddress; 85 | } 86 | 87 | bool InitializationAPI() 88 | { 89 | HMODULE hModule; 90 | 91 | // 1. 初始化基础API 92 | g_funGetProcAddress = (LPGETPROCADDRESS)GetGPAFunAddr(); 93 | g_funLoadLibraryEx = (LPLOADLIBRARYEX)g_funGetProcAddress((HMODULE)GetKernel32Base(), "LoadLibraryExW"); 94 | 95 | // 2. 初始化其他API 96 | hModule = NULL; 97 | if (!(hModule = g_funLoadLibraryEx(L"kernel32.dll", NULL, NULL))) return false; 98 | g_funExitProcess = (LPEXITPROCESS)g_funGetProcAddress(hModule, "ExitProcess"); 99 | hModule = NULL; 100 | if (!(hModule = g_funLoadLibraryEx(L"user32.dll", NULL, NULL))) return false; 101 | g_funMessageBox = (LPMESSAGEBOX)g_funGetProcAddress(hModule, "MessageBoxW"); 102 | hModule = NULL; 103 | if (!(hModule = g_funLoadLibraryEx(L"kernel32.dll", NULL, NULL))) return false; 104 | g_funGetModuleHandle = (LPGETMODULEHANDLE)g_funGetProcAddress(hModule, "GetModuleHandleW"); 105 | hModule = NULL; 106 | if (!(hModule = g_funLoadLibraryEx(L"kernel32.dll", NULL, NULL))) return false; 107 | g_funVirtualProtect = (LPVIRTUALPROTECT)g_funGetProcAddress(hModule, "VirtualProtect"); 108 | 109 | return true; 110 | } 111 | 112 | void Decrypt() 113 | { 114 | // 在导出的全局变量中读取需解密区域的起始于结束VA 115 | PBYTE lpStart = g_stcParam.lpStartVA; 116 | PBYTE lpEnd = g_stcParam.lpEndVA; 117 | 118 | // 循环解密 119 | while (lpStart < lpEnd) 120 | { 121 | *lpStart -= 0x88; 122 | *lpStart ^= 0xA1; 123 | lpStart++; 124 | } 125 | } 126 | 127 | -------------------------------------------------------------------------------- /Stub/Stub.h: -------------------------------------------------------------------------------- 1 | // 下列 ifdef 块是创建使从 DLL 导出更简单的 2 | // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 STUB_EXPORTS 3 | // 符号编译的。在使用此 DLL 的 4 | // 任何项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将 5 | // STUB_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的 6 | // 符号视为是被导出的。 7 | #ifdef STUB_EXPORTS 8 | #define STUB_API "C" __declspec(dllexport) 9 | #else 10 | #define STUB_API "C" __declspec(dllimport) 11 | #endif 12 | 13 | 14 | 15 | /* 16 | * 结构体介绍 17 | * Stub部分正常执行需要一些必要的信息和参数 18 | * 根据Stub部分将要完成的功能,为其准备好运行时用到的具体数据 19 | */ 20 | 21 | 22 | typedef struct _GLOBAL_PARAM { 23 | BOOL bShowMessage; // 是否显示解密信息 24 | DWORD dwOEP; // 程序入口点 25 | PBYTE lpStartVA; // 起始虚拟地址(被加密区) 26 | PBYTE lpEndVA; // 结束虚拟地址(被加密区) 27 | }GLOBAL_PARAM, * PGLOBAL_PARAM; 28 | 29 | extern "C" __declspec(dllexport) GLOBAL_PARAM g_stcParam; 30 | 31 | 32 | // 基础API定义声明 33 | typedef DWORD(WINAPI* LPGETPROCADDRESS)(HMODULE, LPCSTR); // GetProcAddress 34 | typedef HMODULE(WINAPI* LPLOADLIBRARYEX)(LPCTSTR, HANDLE, DWORD); // LoadLibaryEx 35 | extern LPGETPROCADDRESS g_funGetProcAddress; 36 | extern LPLOADLIBRARYEX g_funLoadLibraryEx; 37 | 38 | 39 | // 其他API定义声明 40 | typedef VOID(WINAPI* LPEXITPROCESS)(UINT); // ExitProcess 41 | typedef int (WINAPI* LPMESSAGEBOX)(HWND, LPCTSTR, LPCTSTR, UINT); // MessageBox 42 | typedef HMODULE(WINAPI* LPGETMODULEHANDLE)(LPCWSTR); // GetModuleHandle 43 | typedef BOOL(WINAPI* LPVIRTUALPROTECT)(LPVOID, SIZE_T, DWORD, PDWORD); // VirtualProtect 44 | extern LPEXITPROCESS g_funExitProcess; 45 | extern LPMESSAGEBOX g_funMessageBox; 46 | extern LPGETMODULEHANDLE g_funGetModuleHandle; 47 | extern LPVIRTUALPROTECT g_funVirtualProtect; 48 | 49 | // 获取Kernel32.dll 或者Kernelbase.dll 的基址 50 | extern DWORD GetKernel32Base(); 51 | 52 | // 获取GetProcAddress的函数地址 53 | extern DWORD GetGPAFunAddr(); 54 | // 初始化各个API 55 | extern bool InitializationAPI(); 56 | // 解密函数 57 | extern void Decrypt(); -------------------------------------------------------------------------------- /Stub/Stub.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | Debug 14 | x64 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | 22 | 16.0 23 | Win32Proj 24 | {e1f48480-41d2-408d-ae57-aae36c0aae9c} 25 | Stub 26 | 10.0 27 | 28 | 29 | 30 | DynamicLibrary 31 | true 32 | v142 33 | Unicode 34 | 35 | 36 | DynamicLibrary 37 | false 38 | v142 39 | true 40 | Unicode 41 | 42 | 43 | DynamicLibrary 44 | true 45 | v142 46 | Unicode 47 | 48 | 49 | DynamicLibrary 50 | false 51 | v142 52 | true 53 | Unicode 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | true 75 | Stub 76 | 77 | 78 | false 79 | Stub 80 | 81 | 82 | true 83 | Stub 84 | 85 | 86 | false 87 | Stub 88 | 89 | 90 | 91 | Level3 92 | true 93 | WIN32;_DEBUG;STUB_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) 94 | true 95 | Use 96 | pch.h 97 | 98 | 99 | Windows 100 | true 101 | false 102 | 103 | 104 | 105 | 106 | Level3 107 | true 108 | true 109 | true 110 | WIN32;NDEBUG;STUB_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) 111 | true 112 | Use 113 | pch.h 114 | 115 | 116 | Windows 117 | true 118 | true 119 | true 120 | false 121 | 122 | 123 | 124 | 125 | Level3 126 | true 127 | _DEBUG;STUB_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) 128 | true 129 | Use 130 | pch.h 131 | 132 | 133 | Windows 134 | true 135 | false 136 | 137 | 138 | 139 | 140 | Level3 141 | true 142 | true 143 | true 144 | NDEBUG;STUB_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) 145 | true 146 | Use 147 | pch.h 148 | 149 | 150 | Windows 151 | true 152 | true 153 | true 154 | false 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | Create 166 | Create 167 | Create 168 | Create 169 | 170 | 171 | 172 | 173 | 174 | 175 | -------------------------------------------------------------------------------- /Stub/Stub.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | 头文件 20 | 21 | 22 | 头文件 23 | 24 | 25 | 头文件 26 | 27 | 28 | 29 | 30 | 源文件 31 | 32 | 33 | 源文件 34 | 35 | 36 | 源文件 37 | 38 | 39 | -------------------------------------------------------------------------------- /Stub/dllmain.cpp: -------------------------------------------------------------------------------- 1 | // dllmain.cpp : 定义 DLL 应用程序的入口点。 2 | #include "pch.h" 3 | #include "Stub.h" 4 | 5 | #pragma comment(linker, "/entry:\"StubEntryPoint\"") // 指定程序入口函数为StubEntryPoint() 6 | #pragma comment(linker, "/merge:.data=.text") // 将.data合并到.text 7 | #pragma comment(linker, "/merge:.rdata=.text") // 将.rdata合并到.text 8 | #pragma comment(linker, "/section:.text,RWE") // 将.text段的属性设置为可读、可写、可执行 9 | 10 | 11 | void Start() { 12 | // 1. 初始化所有API 13 | if (!InitializationAPI()) return; 14 | 15 | 16 | // 2. 解密宿主程序 17 | Decrypt(); 18 | 19 | 20 | // 3. 询问是否执行解密后的程序 21 | if (g_stcParam.bShowMessage) 22 | { 23 | int nRet = g_funMessageBox(NULL, L"解密完成,是否运行原程序?", L"解密完成", MB_OKCANCEL); 24 | if (IDCANCEL == nRet) return; 25 | } 26 | 27 | // 4. 跳转到OEP 28 | __asm jmp g_stcParam.dwOEP; 29 | 30 | } 31 | 32 | void __declspec(naked) StubEntryPoint() 33 | { 34 | __asm sub esp, 0x50; // 提升堆栈,提高容错性。 35 | Start(); 36 | __asm add esp, 0x50; 37 | __asm retn; 38 | } -------------------------------------------------------------------------------- /Stub/framework.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的内容 4 | // Windows 头文件 5 | #include 6 | -------------------------------------------------------------------------------- /Stub/pch.cpp: -------------------------------------------------------------------------------- 1 | // pch.cpp: 与预编译标头对应的源文件 2 | 3 | #include "pch.h" 4 | 5 | // 当使用预编译的头时,需要使用此源文件,编译才能成功。 6 | -------------------------------------------------------------------------------- /Stub/pch.h: -------------------------------------------------------------------------------- 1 | // pch.h: 这是预编译标头文件。 2 | // 下方列出的文件仅编译一次,提高了将来生成的生成性能。 3 | // 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。 4 | // 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。 5 | // 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。 6 | 7 | #ifndef PCH_H 8 | #define PCH_H 9 | 10 | // 添加要在此处预编译的标头 11 | #include "framework.h" 12 | 13 | #endif //PCH_H 14 | -------------------------------------------------------------------------------- /framework.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #ifndef VC_EXTRALEAN 4 | #define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料 5 | #endif 6 | 7 | #include "targetver.h" 8 | 9 | #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将是显式的 10 | 11 | // 关闭 MFC 的一些常见且经常可放心忽略的隐藏警告消息 12 | #define _AFX_ALL_WARNINGS 13 | 14 | #include // MFC 核心组件和标准组件 15 | #include // MFC 扩展 16 | 17 | 18 | 19 | 20 | 21 | #ifndef _AFX_NO_OLE_SUPPORT 22 | #include // MFC 对 Internet Explorer 4 公共控件的支持 23 | #endif 24 | #ifndef _AFX_NO_AFXCMN_SUPPORT 25 | #include // MFC 对 Windows 公共控件的支持 26 | #endif // _AFX_NO_AFXCMN_SUPPORT 27 | 28 | #include // MFC 支持功能区和控制条 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /pch.cpp: -------------------------------------------------------------------------------- 1 | // pch.cpp: 与预编译标头对应的源文件 2 | 3 | #include "pch.h" 4 | 5 | // 当使用预编译的头时,需要使用此源文件,编译才能成功。 6 | -------------------------------------------------------------------------------- /pch.h: -------------------------------------------------------------------------------- 1 | // pch.h: 这是预编译标头文件。 2 | // 下方列出的文件仅编译一次,提高了将来生成的生成性能。 3 | // 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。 4 | // 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。 5 | // 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。 6 | 7 | #ifndef PCH_H 8 | #define PCH_H 9 | 10 | // 添加要在此处预编译的标头 11 | #include "framework.h" 12 | 13 | #endif //PCH_H 14 | -------------------------------------------------------------------------------- /res/Or0packBase.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Or0kit/Or0packBase/64b9df05cf6c46b5350085302c52332784671f7d/res/Or0packBase.ico -------------------------------------------------------------------------------- /res/Or0packBase.rc2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Or0kit/Or0packBase/64b9df05cf6c46b5350085302c52332784671f7d/res/Or0packBase.rc2 -------------------------------------------------------------------------------- /resource.h: -------------------------------------------------------------------------------- 1 | //{{NO_DEPENDENCIES}} 2 | // Microsoft Visual C++ 生成的包含文件。 3 | // 供 Or0packBase.rc 使用 4 | // 5 | #define IDM_ABOUTBOX 0x0010 6 | #define IDD_ABOUTBOX 100 7 | #define IDS_ABOUTBOX 101 8 | #define IDD_OR0PACKBASE_DIALOG 102 9 | #define IDR_MAINFRAME 128 10 | #define IDC_BUTTON1 1000 11 | #define IDC_CHECK1 1001 12 | #define IDC_EDIT1 1002 13 | #define IDC_BUTTON2 1003 14 | 15 | // Next default values for new objects 16 | // 17 | #ifdef APSTUDIO_INVOKED 18 | #ifndef APSTUDIO_READONLY_SYMBOLS 19 | #define _APS_NEXT_RESOURCE_VALUE 130 20 | #define _APS_NEXT_COMMAND_VALUE 32771 21 | #define _APS_NEXT_CONTROL_VALUE 1004 22 | #define _APS_NEXT_SYMED_VALUE 101 23 | #endif 24 | #endif 25 | -------------------------------------------------------------------------------- /targetver.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。 4 | 5 | //如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并 6 | // 将 _WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。 7 | 8 | #include 9 | --------------------------------------------------------------------------------