diff --git a/RE-HCTF_450/.gitattributes b/RE-HCTF_450/.gitattributes
new file mode 100644
index 0000000..1ff0c42
--- /dev/null
+++ b/RE-HCTF_450/.gitattributes
@@ -0,0 +1,63 @@
+###############################################################################
+# Set default behavior to automatically normalize line endings.
+###############################################################################
+* text=auto
+
+###############################################################################
+# Set default behavior for command prompt diff.
+#
+# This is need for earlier builds of msysgit that does not have it on by
+# default for csharp files.
+# Note: This is only used by command line
+###############################################################################
+#*.cs diff=csharp
+
+###############################################################################
+# Set the merge driver for project and solution files
+#
+# Merging from the command prompt will add diff markers to the files if there
+# are conflicts (Merging from VS is not affected by the settings below, in VS
+# the diff markers are never inserted). Diff markers may cause the following
+# file extensions to fail to load in VS. An alternative would be to treat
+# these files as binary and thus will always conflict and require user
+# intervention with every merge. To do so, just uncomment the entries below
+###############################################################################
+#*.sln merge=binary
+#*.csproj merge=binary
+#*.vbproj merge=binary
+#*.vcxproj merge=binary
+#*.vcproj merge=binary
+#*.dbproj merge=binary
+#*.fsproj merge=binary
+#*.lsproj merge=binary
+#*.wixproj merge=binary
+#*.modelproj merge=binary
+#*.sqlproj merge=binary
+#*.wwaproj merge=binary
+
+###############################################################################
+# behavior for image files
+#
+# image files are treated as binary by default.
+###############################################################################
+#*.jpg binary
+#*.png binary
+#*.gif binary
+
+###############################################################################
+# diff behavior for common document formats
+#
+# Convert binary document formats to text before diffing them. This feature
+# is only available from the command line. Turn it on by uncommenting the
+# entries below.
+###############################################################################
+#*.doc diff=astextplain
+#*.DOC diff=astextplain
+#*.docx diff=astextplain
+#*.DOCX diff=astextplain
+#*.dot diff=astextplain
+#*.DOT diff=astextplain
+#*.pdf diff=astextplain
+#*.PDF diff=astextplain
+#*.rtf diff=astextplain
+#*.RTF diff=astextplain
diff --git a/RE-HCTF_450/.gitignore b/RE-HCTF_450/.gitignore
new file mode 100644
index 0000000..1bc915c
--- /dev/null
+++ b/RE-HCTF_450/.gitignore
@@ -0,0 +1,156 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+
+# User-specific files
+*.suo
+*.user
+*.sln.docstates
+
+# Build results
+
+[Dd]ebug/
+[Rr]elease/
+x64/
+build/
+[Bb]in/
+[Oo]bj/
+
+# Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets
+!packages/*/build/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+*_i.c
+*_p.c
+*.ilk
+*.meta
+*.obj
+*.pch
+*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.log
+*.scc
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opensdf
+*.sdf
+*.cachefile
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# NCrunch
+*.ncrunch*
+.*crunch*.local.xml
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.Publish.xml
+
+# NuGet Packages Directory
+## TODO: If you have NuGet Package Restore enabled, uncomment the next line
+#packages/
+
+# Windows Azure Build Output
+csx
+*.build.csdef
+
+# Windows Store app package directory
+AppPackages/
+
+# Others
+sql/
+*.Cache
+ClientBin/
+[Ss]tyle[Cc]op.*
+~$*
+*~
+*.dbmdl
+*.[Pp]ublish.xml
+*.pfx
+*.publishsettings
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file to a newer
+# Visual Studio version. Backup files are not needed, because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+
+# SQL Server files
+App_Data/*.mdf
+App_Data/*.ldf
+
+
+#LightSwitch generated files
+GeneratedArtifacts/
+_Pvt_Extensions/
+ModelManifest.xml
+
+# =========================
+# Windows detritus
+# =========================
+
+# Windows image file caches
+Thumbs.db
+ehthumbs.db
+
+# Folder config file
+Desktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Mac desktop service store files
+.DS_Store
diff --git "a/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP.sln" "b/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP.sln"
new file mode 100644
index 0000000..97e6793
--- /dev/null
+++ "b/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP.sln"
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.21005.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "C_easy_VMP", "C_easy_VMP\C_easy_VMP.vcxproj", "{C460CB7F-F7D7-4F3E-B186-E28B05EFD922}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {C460CB7F-F7D7-4F3E-B186-E28B05EFD922}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C460CB7F-F7D7-4F3E-B186-E28B05EFD922}.Debug|Win32.Build.0 = Debug|Win32
+ {C460CB7F-F7D7-4F3E-B186-E28B05EFD922}.Release|Win32.ActiveCfg = Release|Win32
+ {C460CB7F-F7D7-4F3E-B186-E28B05EFD922}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(Performance) = preSolution
+ HasPerformanceSessions = true
+ EndGlobalSection
+EndGlobal
diff --git "a/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP/C_easy_VMP.vcxproj" "b/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP/C_easy_VMP.vcxproj"
new file mode 100644
index 0000000..5e5a35b
--- /dev/null
+++ "b/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP/C_easy_VMP.vcxproj"
@@ -0,0 +1,94 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+
+ {C460CB7F-F7D7-4F3E-B186-E28B05EFD922}
+ Win32Proj
+ C_easy_VMP
+
+
+
+ Application
+ true
+ v120
+ Unicode
+
+
+ Application
+ false
+ v120_xp
+ true
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+ false
+
+
+
+
+
+ Level3
+ Disabled
+ WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)
+ true
+
+
+ Console
+ true
+
+
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)
+ true
+ MultiThreaded
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP/C_easy_VMP.vcxproj.filters" "b/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP/C_easy_VMP.vcxproj.filters"
new file mode 100644
index 0000000..3b2d11d
--- /dev/null
+++ "b/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP/C_easy_VMP.vcxproj.filters"
@@ -0,0 +1,39 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;hm;inl;inc;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+ 源文件
+
+
+ 源文件
+
+
+ 源文件
+
+
+
+
+ 头文件
+
+
+ 头文件
+
+
+ 头文件
+
+
+
\ No newline at end of file
diff --git "a/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP/Code_Define.h" "b/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP/Code_Define.h"
new file mode 100644
index 0000000..ddbc346
--- /dev/null
+++ "b/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP/Code_Define.h"
@@ -0,0 +1,58 @@
+#include
+#define General_VM 0x10
+enum myVm
+{
+ VM_X00_START = 0,
+
+ VM_PUSH, //Ĵ
+ VM_POP,
+
+ VM_ADD, //
+ VM_SUB,
+ VM_XOR,
+ VM_CMP,
+ //
+ VM_SHR,
+ VM_SHL,
+ VM_AND,
+ VM_OR,
+
+ VM_JMP, //ת
+ VM_JZ,
+ VM_EXIT_SUCCESS,
+
+#ifdef _DEBUG
+ VM_DEBUG_BREAK,
+#endif
+ VM_STRLEN_CALL,//CALL룿
+ VM_FAKE_CALL,
+
+ VM_EXIT_FAIL
+
+};
+enum Code_Push_Parameter
+{
+ PUSH_EAX = 0x10,
+ PUSH_EBX = 0x20,
+ PUSH_MEM = 0x30,
+ PUSH_NUM = 0x40,
+ PUSH_MEM_BYTE = 0x1,
+ PUSH_MEM_WORD = 0x2,
+ PUSH_MEM_DWORD= 0x4
+
+};
+enum Code_Pop_Parameter
+{
+ POP_EAX = 0x10,
+ POP_EBX = 0x20,
+ POP_MEM = 0x30,
+ POP_DEL = 0x40,
+ POP_MEM_BYTE = 0x1,
+ POP_MEM_WORD = 0x2,
+ POP_MEM_DWORD= 0x4
+};
+enum Code_JumpFun
+{
+ Jump_From_EIP = 0x10,
+ Jump_From_OEP = 0X20
+};
\ No newline at end of file
diff --git "a/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP/MainEntry.cpp" "b/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP/MainEntry.cpp"
new file mode 100644
index 0000000..5fb1afc
--- /dev/null
+++ "b/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP/MainEntry.cpp"
@@ -0,0 +1,809 @@
+#include
+#include
+#include "Stack.h"
+#include "VM.h"
+//char stringIn[] = "HCTF{S1FALS1R1Fa9123489}";
+int main()
+{
+
+ char Check_HCTF[] = "\x7b\x70\x6a\x67\x72\x73\x75\x55\x44\x32\x48\x50\x11\x12\x13\x14\x15";
+
+ char Select_check_1[] = "0123456789qazwsxedcrtgbyhnujmiolp";
+ char Cmp_check_1[] = "\x38\x7a\x7a\x74\x65\x35\x37";
+ char Cmp_check_2[] = "\x65\x34\x74\x68\x7A\x71\x6D";
+ //
+ char XXXXX[] = "\x1b\x1a\x16\x11\x10\x13";
+
+ char stringIn[40] = {0};
+ printf("Please enter the flag:");
+ scanf_s("%s", stringIn, 40);
+
+ DWORD CALL_END_4[] =
+ {
+ /////////////////////////Data and function/////////////////////
+ VM_EXIT_FAIL,//END
+ VM_EXIT_FAIL,
+ /////////////////////////Code Start/////////////////////////////
+ VM_X00_START,
+ ////JMP_TO_ENCODE
+ VM_PUSH, PUSH_NUM, 78,
+ VM_JMP, Jump_From_EIP,
+ ////ҪܵĴ//////////////
+ ////////////////////////////////
+ VM_X00_START ^ 0x31,
+ VM_POP ^ 0x31, POP_DEL ^ 0x31,
+ VM_PUSH ^ 0x31, PUSH_NUM ^ 0x31, 0x8 ^ 0x31,
+ VM_JMP ^ 0x31, Jump_From_EIP ^ 0x31,//JMP_TO_CODE
+ //ݶ
+ 0x32 ^ 0x31,
+ 0x44 ^ 0x31,
+ 0x39 ^ 0x31,
+ 0x46 ^ 0x31,
+ 0x38 ^ 0x31,
+ 0x35 ^ 0x31,
+ 0x31 ^ 0x31,
+ 0xFF ^ 0x31,
+ //
+ VM_PUSH ^ 0x31, PUSH_NUM ^ 0x31, ((DWORD)CALL_END_4) ^ 0x31,
+ VM_PUSH ^ 0x31, PUSH_NUM ^ 0x31, 64 ^ 0x31,//datasec!!
+ VM_ADD ^ 0x31,//ݶ
+ VM_POP ^ 0x31, POP_EAX ^ 0x31,//EAX = STRIN
+
+ VM_PUSH ^ 0x31, PUSH_NUM ^ 0x31, 0x0 ^ 0x31,
+ VM_POP ^ 0x31, POP_EBX ^ 0x31,//EBX = i
+
+ VM_PUSH ^ 0x31, PUSH_EAX ^ 0x31,
+ VM_PUSH ^ 0x31, PUSH_EBX ^ 0x31,
+ VM_ADD ^ 0x31,
+ VM_PUSH ^ 0x31, (PUSH_MEM_DWORD | PUSH_MEM) ^ 0x31,
+ VM_CMP ^ 0x31,
+ VM_POP ^ 0x31, POP_DEL ^ 0x31,
+ VM_POP ^ 0x31, POP_DEL ^ 0x31,
+ VM_PUSH ^ 0x31, PUSH_NUM ^ 0x31, 0x5 ^ 0x31,
+ VM_JZ ^ 0x31, Jump_From_EIP ^ 0x31,
+ //BUG
+ VM_PUSH ^ 0x31, PUSH_NUM ^ 0x31, 0x0 ^ 0x31,
+ VM_JMP ^ 0x31, Jump_From_OEP ^ 0x31,
+ //
+ VM_PUSH ^ 0x31, PUSH_NUM ^ 0x31, 0x4 ^ 0x31,
+ VM_PUSH ^ 0x31, PUSH_EBX ^ 0x31,
+ VM_ADD ^ 0x31,
+ VM_PUSH ^ 0x31, PUSH_NUM ^ 0x31, 28 ^ 0x31,
+ VM_CMP ^ 0x31,
+ VM_POP ^ 0x31, POP_DEL ^ 0x31,
+ VM_POP ^ 0x31, POP_EBX ^ 0x31,
+ VM_PUSH ^ 0x31, PUSH_NUM ^ 0x31, 0x5 ^ 0x31,
+ VM_JZ ^ 0x31, Jump_From_EIP ^ 0x31,
+ VM_PUSH ^ 0x31, PUSH_NUM ^ 0x31, (-46) ^ 0x31,//BACK
+ VM_JMP ^ 0x31, Jump_From_EIP ^ 0x31,
+ VM_EXIT_SUCCESS ^ 0x31,
+ 0xAABBCCDD,
+ //////////////////////////////
+ ////////////////////////////////
+ VM_PUSH, PUSH_NUM, (DWORD)(CALL_END_4 + 8),
+ VM_POP, POP_EAX, ///EAX = addr need change
+ VM_PUSH, PUSH_NUM, 0x0,
+ VM_POP, POP_EBX, ///EBX = i
+
+ VM_PUSH, PUSH_EAX,
+ VM_PUSH, PUSH_EBX,
+ VM_ADD,
+ VM_PUSH, PUSH_MEM | PUSH_MEM_DWORD, //GET
+ VM_PUSH, PUSH_NUM, 0xAABBCCDD,
+ VM_CMP,
+ VM_POP, POP_DEL,
+
+ VM_PUSH, PUSH_NUM, 24,
+ VM_JZ, Jump_From_EIP,
+
+ //
+ VM_PUSH, PUSH_NUM, 0x31,
+ VM_XOR,
+ //VM_PUSH,PUSH_NUM,0xFFFFFFFF,
+ //VM_AND,
+ //
+ ////////
+ VM_PUSH, PUSH_EAX,
+ VM_PUSH, PUSH_EBX,
+ VM_ADD,
+ VM_POP, POP_MEM | POP_MEM_DWORD, //SET
+ VM_PUSH, PUSH_EBX,
+ VM_PUSH, PUSH_NUM, 0x4,///
+ VM_ADD,
+ VM_POP, POP_EBX,
+ VM_PUSH, PUSH_NUM, -42,
+ VM_JMP, Jump_From_EIP,
+ //ѭ
+
+ //jmpȥ
+ VM_PUSH, PUSH_NUM, 0x8,
+ VM_JMP, Jump_From_OEP,
+ ///////FUN2////
+ VM_POP, POP_DEL,
+
+ VM_EXIT_SUCCESS,
+ };
+ const DWORD FUNC_CHECK_1[] =
+ {
+ VM_EXIT_SUCCESS,
+ VM_EXIT_SUCCESS,
+ /////////////////////////Code Start/////////////////////////////
+ VM_X00_START,
+ VM_PUSH,PUSH_NUM,15,//JMP TO MAIN
+ VM_JMP,Jump_From_EIP,
+ //////////FUN1////////////
+ VM_POP,POP_EBX,
+ VM_PUSH,PUSH_EBX,
+ VM_PUSH, PUSH_NUM, (DWORD)Select_check_1,
+ VM_ADD,
+ VM_PUSH, PUSH_MEM | PUSH_MEM_BYTE,
+ VM_PUSH, PUSH_NUM,20,
+ VM_JMP,Jump_From_EIP,
+ /////////////////////////
+ VM_POP,POP_EAX, //EAX = IN
+ VM_PUSH,PUSH_NUM,0,
+
+ VM_PUSH,PUSH_EAX,
+ VM_PUSH,PUSH_NUM,0xF8000000,
+ VM_AND,
+
+ VM_PUSH,PUSH_NUM,27,
+ VM_SHR,
+
+ //JMP TO FUNTION
+ VM_PUSH,PUSH_NUM,0x7,
+ VM_JMP,Jump_From_OEP,
+ //END
+
+ VM_PUSH, PUSH_EAX,
+ VM_PUSH,PUSH_NUM, 0x5,
+ VM_SHL,
+ VM_PUSH,PUSH_NUM,0,
+ VM_CMP,
+ VM_POP,POP_DEL,
+ VM_POP,POP_EAX,
+ VM_PUSH,PUSH_NUM,0x5,
+ VM_JZ,Jump_From_EIP,
+ VM_PUSH,PUSH_NUM,-39,
+ VM_JMP,Jump_From_EIP,
+ VM_EXIT_SUCCESS,
+ };
+ DWORD FUNC_CHECK_2[]
+ {
+ VM_EXIT_SUCCESS,
+ VM_EXIT_SUCCESS,
+ VM_X00_START,
+//////////////////////////////////////////////
+
+ VM_POP,POP_EAX, //EAX = PARA1 ChangeCode
+ VM_POP,POP_EBX, //EBX = PARA2 strin
+
+ VM_PUSH,PUSH_NUM,0x0,//ѹջڼ
+
+ VM_PUSH,PUSH_EBX,
+
+ VM_PUSH,PUSH_EAX,
+ VM_PUSH,PUSH_NUM,0xF0000000, //ȡǰ
+ VM_AND,
+
+ VM_PUSH,PUSH_NUM,0x1C,
+ VM_SHR,//λ
+ VM_PUSH,PUSH_NUM,0x1,
+ VM_SHR,
+ VM_PUSH,PUSH_NUM,0x2,
+ VM_SHL,
+
+ VM_SHL,//λ
+
+ VM_PUSH, PUSH_NUM, 0xF0000000,
+ VM_AND,//ȥ
+
+ VM_PUSH,PUSH_EAX,
+ VM_PUSH,PUSH_NUM,0x4,
+ VM_SHL,
+ VM_PUSH,PUSH_NUM,0x0,
+ VM_CMP,
+ VM_POP,POP_DEL,
+ VM_POP,POP_EAX,
+ VM_PUSH,PUSH_NUM,0x5,
+ VM_JZ,Jump_From_EIP,
+ VM_PUSH,PUSH_NUM,-49,
+ VM_JMP,Jump_From_EIP,
+ ///////
+ VM_PUSH,PUSH_NUM,0,
+ VM_POP,POP_EBX,
+ VM_PUSH,PUSH_NUM,28,
+ VM_POP,POP_EAX,
+
+ VM_PUSH, PUSH_EAX,//<---
+ VM_SHR,
+
+ VM_PUSH,PUSH_EBX,
+ VM_OR,
+ VM_POP,POP_EBX,
+
+ VM_PUSH,PUSH_EAX,
+ VM_PUSH,PUSH_NUM,0x4,
+ VM_SUB,
+ VM_POP,POP_EAX,
+ VM_PUSH, PUSH_NUM, 0x0,
+ VM_CMP,
+ VM_POP, POP_DEL,
+ VM_PUSH,PUSH_NUM,0x5,
+ VM_JZ,Jump_From_EIP,
+ VM_PUSH,PUSH_NUM,-32,
+ VM_JMP,Jump_From_EIP,
+ VM_POP,POP_DEL,
+ VM_PUSH,PUSH_EBX,
+ VM_EXIT_SUCCESS,
+
+ };
+ DWORD FUN_CHECK_3_FUN_1[] =
+ {
+ VM_EXIT_SUCCESS,
+ VM_EXIT_SUCCESS,
+ VM_X00_START,
+//////////////////////////////////////////////
+ VM_POP,POP_DEL,
+ //һ
+ VM_PUSH, PUSH_NUM, 0xFDB97531,
+ VM_PUSH, PUSH_NUM, (DWORD)FUNC_CHECK_2,
+ VM_FAKE_CALL,
+ VM_POP, POP_DEL,
+ VM_EXIT_SUCCESS,
+ };
+ DWORD FUN_CHECK_3_FUN_2[] =
+ {
+ VM_EXIT_SUCCESS,
+ VM_EXIT_SUCCESS,
+ VM_X00_START,
+ //////////////////////////////////////////////
+ VM_POP, POP_DEL,
+ VM_POP,POP_EAX,
+ VM_PUSH,PUSH_EAX,
+ //һ
+ VM_PUSH, PUSH_NUM, 0xE0000000,
+ VM_AND,
+ VM_PUSH, PUSH_NUM, 29,
+ VM_SHR,
+ VM_PUSH, PUSH_EAX,
+ VM_PUSH, PUSH_NUM, 3,
+ VM_SHL,
+ VM_OR,
+ VM_EXIT_SUCCESS,
+ };
+ DWORD FUNC_CHECK_3X1[] =
+ {
+ /////////////////////////Data and function/////////////////////
+ VM_EXIT_SUCCESS,
+ VM_EXIT_SUCCESS,
+ /////////////////////////Code Start/////////////////////////////
+ VM_X00_START,
+ ////JMP_TO_ENCODE
+ VM_PUSH,PUSH_NUM,11,
+ VM_JMP,Jump_From_EIP,
+ ////ҪܵĴ//////////////
+ VM_X00_START ^ 0x28,
+ VM_PUSH^0x28,
+ PUSH_NUM ^ 0x28,
+ (DWORD)FUN_CHECK_3_FUN_1 ^ 0x28,
+ VM_FAKE_CALL ^ 0x28,
+ VM_PUSH ^ 0x28,
+ PUSH_NUM ^ 0x28,
+ 58 ^ 0x28,
+ VM_JMP ^ 0x28,
+ Jump_From_EIP ^ 0x28,
+ 0xFFFFAAAA,
+ ////////////////////////////////
+ VM_PUSH, PUSH_NUM, (DWORD)(FUNC_CHECK_3X1 + 8),
+ VM_POP,POP_EAX, ///EAX = addr need change
+ VM_PUSH,PUSH_NUM,0x0,
+ VM_POP,POP_EBX, ///EBX = i
+
+ VM_PUSH,PUSH_EAX,
+ VM_PUSH,PUSH_EBX,
+ VM_ADD,
+ VM_PUSH, PUSH_MEM | PUSH_MEM_DWORD, //GET
+ VM_PUSH, PUSH_NUM, 0xFFFFAAAA,
+ VM_CMP,
+ VM_POP,POP_DEL,
+
+ VM_PUSH,PUSH_NUM,24,
+ VM_JZ,Jump_From_EIP,
+
+ //
+ VM_PUSH,PUSH_NUM,0x28,
+ VM_XOR,
+ ////////
+ VM_PUSH, PUSH_EAX,
+ VM_PUSH, PUSH_EBX,
+ VM_ADD,
+ VM_POP,POP_MEM | POP_MEM_DWORD, //SET
+ VM_PUSH,PUSH_EBX,
+ VM_PUSH,PUSH_NUM,0x4,///
+ VM_ADD,
+ VM_POP,POP_EBX,
+ VM_PUSH,PUSH_NUM, -42,
+ VM_JMP,Jump_From_EIP,
+ //ѭ
+
+ //jmpȥ
+ VM_PUSH,PUSH_NUM,0x8,
+ VM_JMP,Jump_From_OEP,
+ ///////FUN2////
+ VM_POP,POP_DEL,
+ VM_EXIT_SUCCESS,
+
+ };
+ DWORD FUNC_CHECK_3X2[] =
+ {
+ /////////////////////////Data and function/////////////////////
+ VM_EXIT_SUCCESS,
+ VM_EXIT_SUCCESS,
+ /////////////////////////Code Start/////////////////////////////
+ VM_X00_START,
+ ////JMP_TO_ENCODE
+ VM_PUSH, PUSH_NUM, 11,
+ VM_JMP, Jump_From_EIP,
+ ////ҪܵĴ//////////////
+ VM_X00_START ^ 0x28,
+ VM_PUSH ^ 0x28,
+ PUSH_NUM ^ 0x28,
+ (DWORD)FUN_CHECK_3_FUN_2 ^ 0x28,
+ VM_FAKE_CALL ^ 0x28,
+ VM_PUSH ^ 0x28,
+ PUSH_NUM ^ 0x28,
+ 58 ^ 0x28,
+ VM_JMP ^ 0x28,
+ Jump_From_EIP ^ 0x28,
+ 0xFFFFAAAA,
+ ////////////////////////////////
+ VM_PUSH, PUSH_NUM, (DWORD)(FUNC_CHECK_3X2 + 8),
+ VM_POP, POP_EAX, ///EAX = addr need change
+ VM_PUSH, PUSH_NUM, 0x0,
+ VM_POP, POP_EBX, ///EBX = i
+
+ VM_PUSH, PUSH_EAX,
+ VM_PUSH, PUSH_EBX,
+ VM_ADD,
+ VM_PUSH, PUSH_MEM | PUSH_MEM_DWORD, //GET
+ VM_PUSH, PUSH_NUM, 0xFFFFAAAA,
+ VM_CMP,
+ VM_POP, POP_DEL,
+
+ VM_PUSH, PUSH_NUM, 24,
+ VM_JZ, Jump_From_EIP,
+
+ //
+ VM_PUSH, PUSH_NUM, 0x28,
+ VM_XOR,
+ ////////
+ VM_PUSH, PUSH_EAX,
+ VM_PUSH, PUSH_EBX,
+ VM_ADD,
+ VM_POP, POP_MEM | POP_MEM_DWORD, //SET
+ VM_PUSH, PUSH_EBX,
+ VM_PUSH, PUSH_NUM, 0x4,///
+ VM_ADD,
+ VM_POP, POP_EBX,
+ VM_PUSH, PUSH_NUM, -42,
+ VM_JMP, Jump_From_EIP,
+ //ѭ
+
+ //jmpȥ
+ VM_PUSH, PUSH_NUM, 0x8,
+ VM_JMP, Jump_From_OEP,
+ ///////FUN2////
+ VM_POP, POP_DEL,
+ VM_EXIT_SUCCESS,
+ };
+ DWORD CODE[] =
+ {
+ /////////////////////////Data and function/////////////////////
+ VM_EXIT_FAIL,
+ VM_EXIT_FAIL,
+ /////////////////////////Code Start/////////////////////////////
+ VM_X00_START,
+ /////////////////////////fun1 strlen////////////////////////////////
+ VM_PUSH, PUSH_NUM, (DWORD)stringIn, //NUM1 push addr of input Str *stack 1
+ VM_POP, POP_EBX,
+ VM_PUSH, PUSH_EBX, //EBX = ADDR STR
+ VM_PUSH, PUSH_EBX, //һ addr of input str
+ VM_STRLEN_CALL, //pop addr, call strlen, push result *stack1
+ VM_PUSH, PUSH_NUM, 0x18,
+ VM_CMP, //㳤ǷΪ24 *stack 2
+
+ VM_PUSH, PUSH_NUM, 0x7, //push jmp next func(jmpto_fun2) *stack 3
+ VM_JZ, Jump_From_EIP, //pop and JZ (18) *stack 2
+ VM_PUSH, PUSH_NUM, 0, //jmp code to Fail *stack 3
+ VM_JMP, Jump_From_OEP, //jmp *stack 2
+ ///////////////////////fun2 xor HCTF{//////////////////////////////
+
+ VM_POP, POP_DEL, //ƽջռ䣨ɾ*Stack 1 topofStack:length of addr
+ VM_PUSH, PUSH_NUM, 0x5, //HCTF{ 5
+ VM_PUSH, PUSH_NUM, 0x0, //push 0x0 i = 0 *Stack 2
+ VM_CMP, //cmp <-----
+
+ VM_PUSH, PUSH_NUM, 0x23, //push NUM3 is jum to exit
+ VM_JZ, Jump_From_EIP, //pop NUM3 JZ (18)
+
+ VM_POP, POP_EAX, //pop eax ;eax = i
+ VM_PUSH, PUSH_EBX, //EBX: push addr of input Str
+ VM_PUSH, PUSH_EAX, //PUSH i
+ VM_ADD, //Pop i ,add i str
+ VM_PUSH, PUSH_MEM | PUSH_MEM_BYTE, //POP STR, FIND BYTE STR, PUSH result
+ VM_PUSH, PUSH_NUM, 0x33, //num push 0x33
+ VM_XOR, //pop 0x33,top xor 0x33
+
+ VM_PUSH, PUSH_EBX, //EBX: push addr of input Str
+ VM_PUSH, PUSH_EAX, //PUSH i
+ VM_ADD, //Pop i ,add i str
+ VM_POP, POP_MEM | POP_MEM_BYTE,//pop addr,pop result, Set That addr
+
+ VM_PUSH, PUSH_EAX, //EAX = i
+ VM_PUSH, PUSH_NUM, 0x1, //NUM = 1
+ VM_ADD, //I = I+1
+ VM_POP, POP_EAX, //eax = i
+ VM_PUSH, PUSH_EAX, //
+
+ VM_PUSH, PUSH_NUM, -0x29, //NUM5 jmp code
+ VM_JMP, Jump_From_EIP, //circle jmp
+ ////////////////func check last '}'///////////////////////////
+ VM_POP, POP_DEL, //ƽջռ
+ VM_POP, POP_DEL, //ƽջռ *Stack 2 topofStack:length of addr X 2
+ VM_PUSH, PUSH_EBX, //EBX: push addr of input Str
+ VM_ADD, //Pop STR ,add 24 str
+ VM_PUSH, PUSH_NUM, 0x1,
+ VM_SUB,
+ VM_PUSH, PUSH_MEM | PUSH_MEM_BYTE,
+
+ VM_PUSH, PUSH_NUM, 0x33, //num push 0x33
+ VM_XOR, //pop 0x33,top xor 0x33
+ VM_PUSH, PUSH_NUM, 0x4E, //num push 0x4e
+ VM_CMP,
+ VM_PUSH, PUSH_NUM, 0x5,
+ VM_JZ, Jump_From_EIP,
+ VM_PUSH, PUSH_NUM, 0, //jmp code to Fail *stack 3
+ VM_JMP, Jump_From_OEP,
+ ///////////////////func push HCTF{ xor 0x33////////////////////////////////
+
+ VM_POP, POP_DEL, //ƽջռ
+ VM_POP, POP_DEL, //ƽջռ
+
+
+ VM_PUSH,PUSH_EAX,
+ VM_PUSH,PUSH_NUM,0x1,
+ VM_SUB,
+ VM_POP, POP_EAX,
+ VM_PUSH, PUSH_EAX,
+ VM_PUSH,PUSH_EBX,
+ VM_ADD,
+ VM_PUSH, PUSH_MEM | PUSH_MEM_BYTE,
+ VM_PUSH,PUSH_EAX,
+ VM_PUSH,PUSH_NUM,0,
+ VM_CMP,
+ VM_POP,POP_DEL,
+ VM_POP, POP_DEL,
+ VM_PUSH,PUSH_NUM,0x5, //Jmp to next Fun
+ VM_JZ, Jump_From_EIP,
+
+ VM_PUSH,PUSH_NUM, -0x23, //Circle Jmp
+ VM_JMP, Jump_From_EIP,
+ ///////////////////fun check HCTF{/////////////////////////////////////
+
+
+ VM_PUSH,PUSH_NUM,0,
+ VM_POP,POP_EBX, //EBX = i
+ VM_PUSH, PUSH_NUM, (DWORD)Check_HCTF,
+ VM_POP,POP_EAX, //EAX = ADDR Check_HCTF
+
+ VM_PUSH,PUSH_EAX,
+ VM_PUSH,PUSH_EBX,
+ VM_ADD,
+ VM_POP,POP_EAX,
+ VM_PUSH,PUSH_EAX, //EAX = EAX+i
+ VM_PUSH, PUSH_MEM | PUSH_MEM_BYTE,
+ VM_CMP,
+ VM_PUSH,PUSH_NUM,0x5, // <------ok
+
+ VM_JZ,Jump_From_EIP,
+ VM_PUSH,PUSH_NUM,0x0,
+ VM_JMP,Jump_From_OEP, // <----- Fail
+
+ VM_POP, POP_DEL, //ƽջռ
+ VM_POP, POP_DEL, //ƽջռ
+
+ VM_PUSH,PUSH_EBX,
+ VM_PUSH,PUSH_NUM,1,
+
+ VM_ADD,
+ VM_POP,POP_EBX,
+
+ VM_PUSH,PUSH_EBX,
+ VM_PUSH,PUSH_NUM,0x5,
+ VM_CMP,
+ VM_POP, POP_DEL, //ƽջռ
+ VM_POP, POP_DEL, //ƽջռ
+ VM_PUSH,PUSH_NUM,0x5,
+ VM_JZ,Jump_From_EIP,
+ VM_PUSH, PUSH_NUM, -0x36,
+ VM_JMP,Jump_From_EIP,
+
+ ///////////////////fun ѹջģ//////////////////////////////
+
+
+ VM_POP,POP_EAX, //EAX = strlen(Input Str)
+ VM_PUSH,PUSH_EBX,
+ VM_ADD,
+ VM_POP,POP_EBX, //EBX = ADDR STR IN
+ VM_PUSH,PUSH_EAX,
+ VM_PUSH,PUSH_EBX,
+
+ VM_PUSH,PUSH_EAX,
+ VM_PUSH,PUSH_EAX,
+ VM_XOR,
+ VM_POP,POP_EAX,
+ VM_PUSH, PUSH_EAX, //ռǸ
+
+ VM_PUSH,PUSH_EAX,
+ VM_PUSH,PUSH_NUM,0x4,
+ VM_CMP,
+ VM_PUSH,PUSH_NUM,28,//
+ VM_JZ,Jump_From_EIP,
+ VM_POP, POP_DEL, //ƽջռ
+ VM_PUSH,PUSH_EBX,
+ VM_ADD,
+ VM_PUSH, PUSH_MEM | PUSH_MEM_BYTE,
+ VM_PUSH, PUSH_EAX,
+ VM_PUSH, PUSH_NUM,0x3,
+ VM_SHL,
+ VM_SHL,
+ VM_OR,
+
+
+ VM_PUSH,PUSH_EAX,
+ VM_PUSH,PUSH_NUM,0x1,
+ VM_ADD,
+ VM_POP,POP_EAX,
+ VM_PUSH,PUSH_NUM,-39,//
+ VM_JMP,Jump_From_EIP,
+ VM_POP,POP_DEL,
+ VM_PUSH,PUSH_EBX,
+ VM_ADD,
+
+ VM_POP,POP_EBX,
+ VM_PUSH,PUSH_NUM,0x0,
+ VM_POP,POP_EAX,
+
+ VM_PUSH,PUSH_EBX,
+ VM_STRLEN_CALL,
+
+ VM_PUSH,PUSH_NUM,0x3,
+ VM_CMP,
+ VM_POP,POP_DEL,
+ VM_POP,POP_DEL,
+ VM_PUSH,PUSH_NUM,5,
+ VM_JZ, Jump_From_EIP,
+ VM_PUSH,PUSH_NUM,-74,
+
+ VM_JMP,Jump_From_EIP,
+ VM_POP,POP_DEL,
+
+ //////////////////////FUNC_CHECK_1//////////////////////
+
+ VM_PUSH, PUSH_NUM, (DWORD)FUNC_CHECK_1,
+ VM_FAKE_CALL,
+ VM_POP,POP_DEL,
+ /////////////Ƚ
+ VM_PUSH, PUSH_NUM, (DWORD)Cmp_check_1,
+ VM_POP,POP_EBX,
+ VM_PUSH,PUSH_NUM,0x0,
+ VM_POP,POP_EAX,
+
+ VM_PUSH,PUSH_EAX,
+ VM_PUSH,PUSH_EBX,
+ VM_ADD,
+ VM_PUSH, PUSH_MEM | PUSH_MEM_BYTE,
+ VM_XOR,
+ VM_PUSH,PUSH_NUM,0x0,
+ VM_CMP,
+ VM_POP,POP_DEL,
+
+ VM_POP,POP_DEL,
+ VM_PUSH,PUSH_NUM,0x5,
+ VM_JZ,Jump_From_EIP,
+ VM_PUSH,PUSH_NUM,0x0,
+ VM_JMP,Jump_From_OEP,
+ VM_PUSH,PUSH_NUM,0x0,
+ VM_CMP,
+ VM_POP,POP_DEL,
+ VM_PUSH,PUSH_NUM,13,
+ VM_JZ,Jump_From_EIP,
+ VM_PUSH,PUSH_NUM,0x1,
+ VM_PUSH,PUSH_EAX,
+ VM_ADD,
+ VM_POP,POP_EAX,
+ VM_PUSH,PUSH_NUM,-50,
+ VM_JMP,Jump_From_EIP,
+
+ /////////////////////fun_check_2////////////////////////
+ //////һ
+
+ VM_POP,POP_DEL,
+ VM_PUSH,PUSH_NUM,0xFDB97531,
+ VM_PUSH, PUSH_NUM, (DWORD)FUNC_CHECK_2,
+ VM_FAKE_CALL,
+ VM_POP,POP_DEL,
+ VM_POP,POP_EAX,
+ VM_PUSH,PUSH_EAX,
+
+
+ ////////////////////ѭλ//////
+ VM_PUSH,PUSH_NUM,0xE0000000,
+ VM_AND,
+ VM_PUSH,PUSH_NUM,29,
+ VM_SHR,
+ VM_PUSH,PUSH_EAX,
+ VM_PUSH,PUSH_NUM,3,
+ VM_SHL,
+ VM_OR,
+
+
+ //////////////////2/////
+ VM_PUSH, PUSH_NUM, 0xFDB97531,
+ VM_PUSH, PUSH_NUM, (DWORD)FUNC_CHECK_2,
+ VM_FAKE_CALL,
+ VM_POP, POP_DEL,
+ VM_POP, POP_EAX,
+ VM_PUSH, PUSH_EAX,
+
+
+ //////////һѡ
+ VM_PUSH, PUSH_NUM, (DWORD)FUNC_CHECK_1,
+ VM_FAKE_CALL,
+ VM_POP,POP_DEL,
+
+ /////////ձȽ
+ VM_PUSH, PUSH_NUM, (DWORD)Cmp_check_2,
+ VM_POP, POP_EBX,
+ VM_PUSH, PUSH_NUM, 0x0,
+ VM_POP, POP_EAX,
+
+ VM_PUSH, PUSH_EAX,
+ VM_PUSH, PUSH_EBX,
+ VM_ADD,
+ VM_PUSH, PUSH_MEM | PUSH_MEM_BYTE,
+ VM_XOR,
+ VM_PUSH, PUSH_NUM, 0x0,
+ VM_CMP,
+ VM_POP, POP_DEL,
+ VM_POP, POP_DEL,
+ VM_PUSH, PUSH_NUM, 0x5,
+ VM_JZ, Jump_From_EIP,
+ VM_PUSH, PUSH_NUM, 0x0,
+ VM_JMP, Jump_From_OEP,
+ VM_PUSH, PUSH_NUM, 0x0,
+ VM_CMP,
+ VM_POP, POP_DEL,
+ VM_PUSH, PUSH_NUM, 13,
+ VM_JZ, Jump_From_EIP,
+ VM_PUSH, PUSH_NUM, 0x1,
+ VM_PUSH, PUSH_EAX,
+ VM_ADD,
+ VM_POP, POP_EAX,
+ VM_PUSH, PUSH_NUM, -50,
+ VM_JMP, Jump_From_EIP,
+ VM_POP,POP_DEL,
+
+ ///
+ ////////////////////////FUN_CHECK_3,HARD////////////////////////////
+ /////
+ //1
+ VM_PUSH, PUSH_NUM, (DWORD)FUNC_CHECK_3X1,
+ VM_FAKE_CALL,
+ VM_POP,POP_DEL,
+
+ //ָ//
+ VM_PUSH,0x1000,
+ VM_POP,0x1000,
+ //end//
+ //1ѭλ
+ VM_PUSH, PUSH_NUM, (DWORD)FUNC_CHECK_3X2,
+ VM_FAKE_CALL,
+ VM_POP,POP_DEL,
+
+ //1ѡ
+ VM_POP,POP_EAX,
+
+ VM_PUSH,PUSH_EAX,
+ VM_PUSH,PUSH_NUM,0x1F,
+ VM_AND,
+ VM_PUSH,PUSH_NUM,0x30,
+ VM_ADD,
+ VM_PUSH,PUSH_EAX,
+ VM_PUSH,PUSH_NUM,0x5,
+ VM_SHR,
+ VM_PUSH,PUSH_NUM,0x0,
+ VM_CMP,
+ VM_POP,POP_DEL,
+ VM_POP,POP_EAX,
+ VM_PUSH,PUSH_NUM,0x5,
+ VM_JZ,Jump_From_EIP,
+ VM_PUSH,PUSH_NUM,-34,
+ VM_JMP,Jump_From_EIP,
+ /////////ԽѭȽϴ//////
+
+ VM_PUSH, PUSH_NUM, (DWORD)CALL_END_4,
+ VM_FAKE_CALL,
+ VM_POP,POP_DEL,
+
+ ///////////////////һȽϣס
+ VM_PUSH,PUSH_NUM,12,
+ VM_ADD,
+ VM_POP,POP_EAX,
+ VM_PUSH,PUSH_NUM,0,
+ VM_POP,POP_EBX,//EBX = i,
+
+ VM_PUSH,PUSH_EAX,
+ VM_PUSH,PUSH_EBX,
+ VM_ADD,
+ VM_PUSH, PUSH_MEM | PUSH_MEM_BYTE,
+ VM_PUSH,PUSH_NUM,0x0,
+ VM_CMP,
+ VM_POP,POP_DEL,
+ VM_PUSH,PUSH_NUM,17,
+ VM_JZ,Jump_From_EIP,
+ VM_PUSH,PUSH_NUM,0x22,
+ VM_XOR,
+ VM_PUSH,PUSH_NUM,0x1,
+ VM_PUSH,PUSH_EBX,
+ VM_ADD,
+ VM_POP,POP_EBX,
+ VM_PUSH,PUSH_NUM,-35,
+ VM_JMP,Jump_From_EIP,
+ VM_POP,POP_DEL,
+ VM_POP,POP_DEL,
+ //////
+ VM_PUSH, PUSH_NUM, (DWORD)XXXXX,
+ VM_PUSH,PUSH_NUM,0x0,
+ VM_POP,POP_EBX,//EBX = i,
+ VM_POP,POP_EAX, //EAX = STRIN
+
+ VM_PUSH,PUSH_EAX,
+ VM_PUSH,PUSH_EBX,
+ VM_ADD,
+ VM_PUSH, PUSH_MEM | PUSH_MEM_BYTE,
+ VM_CMP,
+ VM_PUSH,PUSH_NUM,0x5,
+ VM_JZ, Jump_From_EIP,
+ VM_PUSH,PUSH_NUM,0x0,
+ VM_JMP,Jump_From_OEP,
+
+ VM_POP, POP_DEL,
+ VM_POP, POP_DEL,
+
+ VM_PUSH,PUSH_NUM,0x1,
+ VM_PUSH,PUSH_EBX,
+ VM_ADD,
+ VM_PUSH,PUSH_NUM,0x6,
+ VM_CMP,
+ VM_POP,POP_DEL,
+ VM_POP,POP_EBX,
+ VM_PUSH,PUSH_NUM,0x5,
+ VM_JZ,Jump_From_EIP,
+ VM_PUSH,PUSH_NUM,-46,
+ VM_JMP,Jump_From_EIP,
+
+ VM_EXIT_SUCCESS,
+ };
+
+ VM_Function Fun1(64);
+ Fun1.StartVM(CODE+2);
+
+ printf("====================================\n");
+ printf("============YOU GOT IT!=============\n");
+ printf("====================================\n");
+ getchar();
+ getchar();
+ return 0;
+}
\ No newline at end of file
diff --git "a/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP/Stack.cpp" "b/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP/Stack.cpp"
new file mode 100644
index 0000000..2a5cbf2
--- /dev/null
+++ "b/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP/Stack.cpp"
@@ -0,0 +1,31 @@
+#include "Stack.h"
+
+//ǵfree
+VM_STACK::VM_STACK(int MaxSize)
+{
+ if (MaxSize < 1)
+ Error("Error the Stack is too small\n");
+ S = (VM_Stack *)malloc(sizeof(struct VM_Stack));
+ if (S == NULL)
+ Error("Create Stack Malloc Fail CODE 1");
+ S->vmStack = (PDWORD)malloc(sizeof(DWORD)*MaxSize);
+ if (S->vmStack == NULL)
+ Error("Create Stack Malloc Fail CODE 2");
+ memset(S->vmStack, sizeof(DWORD)*MaxSize, 0);
+ S->capacity = MaxSize;
+ S->TopOfStack = 0;
+
+}
+void VM_STACK::Stack_Push(DWORD xxx)
+{
+ S->vmStack[++S->TopOfStack] = xxx;
+}
+void VM_STACK::Stack_Pop(PDWORD xxx)
+{
+ *xxx = S->vmStack[S->TopOfStack--];
+}
+void VM_STACK::Error(char* xxx)
+{
+ printf("%s,LastError = %d", xxx, GetLastError());
+ exit(-1);
+}
\ No newline at end of file
diff --git "a/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP/Stack.h" "b/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP/Stack.h"
new file mode 100644
index 0000000..4c75167
--- /dev/null
+++ "b/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP/Stack.h"
@@ -0,0 +1,40 @@
+#include
+#include
+#pragma once
+class VM_STACK
+{
+ struct VM_Stack
+ {
+ int capacity;
+ int TopOfStack;
+ PDWORD vmStack;
+ };
+ typedef struct VM_Stack *Stack;
+protected:
+ Stack S;
+
+ //BOOL StartVM(PBYTE vmCode, PDWORD vmData);
+
+public:
+ VM_STACK(int MaxSize);//CreateStack
+ void Stack_Push(DWORD xxx);
+ void Stack_Pop(PDWORD xxx);
+#ifdef _DEBUG
+ void Debug_PrintStack()
+ {
+ printf("\n");
+ for (int i = 0; i <= S->TopOfStack; i++)
+ printf("Stack : %d ( %x )\n",i,S->vmStack[i]);
+ printf("\n");
+ }
+#endif
+ ~VM_STACK()
+ {
+ free(S->vmStack);
+ free(S);
+ }
+private:
+
+ void Error(char* xxx);
+
+};
diff --git "a/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP/VM.h" "b/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP/VM.h"
new file mode 100644
index 0000000..b30ef88
--- /dev/null
+++ "b/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP/VM.h"
@@ -0,0 +1,63 @@
+#include