From cc048d0ce945923730e9234fac867034edc20b61 Mon Sep 17 00:00:00 2001 From: lightless Date: Tue, 8 Dec 2015 20:19:40 +0800 Subject: [PATCH] first commit --- RE-HCTF_450/.gitattributes | 63 ++ RE-HCTF_450/.gitignore | 156 ++++ .../C_easy_VMP.sln" | 25 + .../C_easy_VMP/C_easy_VMP.vcxproj" | 94 ++ .../C_easy_VMP/C_easy_VMP.vcxproj.filters" | 39 + .../C_easy_VMP/Code_Define.h" | 58 ++ .../C_easy_VMP/MainEntry.cpp" | 809 ++++++++++++++++ .../C_easy_VMP/Stack.cpp" | 31 + .../C_easy_VMP/Stack.h" | 40 + .../C_easy_VMP/VM.h" | 63 ++ .../C_easy_VMP/VMmain.cpp" | 303 ++++++ .../FLAG\350\257\264\346\230\216.txt" | 6 + ...0\345\215\225\344\273\213\347\273\215.txt" | 22 + RE-HCTF_450/C_easy_VMP/C_easy_VMP.sln | 22 + .../C_easy_VMP/C_easy_VMP/C_easy_VMP.vcxproj | 93 ++ .../C_easy_VMP/C_easy_VMP.vcxproj.filters | 36 + .../C_easy_VMP/C_easy_VMP/C_easy_VMP_code.rar | Bin 0 -> 2787 bytes .../C_easy_VMP/C_easy_VMP/MainEntry.cpp | 168 ++++ RE-HCTF_450/C_easy_VMP/C_easy_VMP/Stack.cpp | 33 + RE-HCTF_450/C_easy_VMP/C_easy_VMP/Stack.h | 13 + RE-HCTF_450/C_easy_VMP/C_easy_VMP/VM.h | 44 + RE-HCTF_450/C_easy_VMP/C_easy_VMP/VMmain.cpp | 175 ++++ ...2\346\213\237\347\272\246\345\256\232.txt" | 20 + RE-HCTF_450/C_easy_VMP_2/C_easy_VMP.sln | 22 + .../C_easy_VMP/C_easy_VMP.vcxproj | 93 ++ .../C_easy_VMP/C_easy_VMP.vcxproj.filters | 36 + .../C_easy_VMP_2/C_easy_VMP/MainEntry.cpp | 174 ++++ RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/Stack.cpp | 31 + RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/Stack.h | 31 + RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/VM.h | 84 ++ .../C_easy_VMP_2/C_easy_VMP/VMmain.cpp | 222 +++++ ...\350\257\225\347\211\210\346\234\2542.txt" | 5 + RE-HCTF_450/C_easy_VMP_3/C_easy_VMP.sln | 22 + .../C_easy_VMP/C_easy_VMP.vcxproj | 94 ++ .../C_easy_VMP/C_easy_VMP.vcxproj.filters | 39 + .../C_easy_VMP/C_easy_VMP_code.rar | Bin 0 -> 2787 bytes .../C_easy_VMP_3/C_easy_VMP/Code_Define.h | 49 + .../C_easy_VMP_3/C_easy_VMP/MainEntry.cpp | 175 ++++ RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/Stack.cpp | 31 + RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/Stack.h | 40 + RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/VM.h | 60 ++ .../C_easy_VMP_3/C_easy_VMP/VMmain.cpp | 349 +++++++ ...\346\224\271\347\211\210\346\234\2543.txt" | 9 + RE-HCTF_450/C_easy_VMP_4/C_easy_VMP.sln | 25 + .../C_easy_VMP/C_easy_VMP.vcxproj | 94 ++ .../C_easy_VMP/C_easy_VMP.vcxproj.filters | 39 + .../C_easy_VMP_4/C_easy_VMP/Code_Define.h | 58 ++ .../C_easy_VMP_4/C_easy_VMP/MainEntry.cpp | 264 ++++++ RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/Stack.cpp | 31 + RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/Stack.h | 40 + RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/VM.h | 62 ++ .../C_easy_VMP_4/C_easy_VMP/VMmain.cpp | 287 ++++++ ...\346\224\271\347\211\210\346\234\2544.txt" | 15 + ...2\346\213\237\347\272\246\345\256\232.txt" | 28 + RE-HCTF_450/C_easy_VMP_5/C_easy_VMP.sln | 25 + .../C_easy_VMP/C_easy_VMP.vcxproj | 94 ++ .../C_easy_VMP/C_easy_VMP.vcxproj.filters | 39 + .../C_easy_VMP_5/C_easy_VMP/Code_Define.h | 58 ++ .../C_easy_VMP_5/C_easy_VMP/MainEntry.cpp | 883 ++++++++++++++++++ RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/Stack.cpp | 31 + RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/Stack.h | 40 + RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/VM.h | 63 ++ .../C_easy_VMP_5/C_easy_VMP/VMmain.cpp | 303 ++++++ ...\346\224\271\347\211\210\346\234\2545.txt" | 10 + ...2\346\213\237\347\272\246\345\256\232.txt" | 28 + RE-HCTF_450/ReadMe.txt | 186 ++++ RE-HCTF_450/git_fire.bat | 4 + re150/Debug/re200.exe | Bin 0 -> 154624 bytes re150/Release/re200.exe | Bin 0 -> 169984 bytes re150/re200.sln | 22 + re150/re200.v12.suo | Bin 0 -> 28672 bytes re150/re200/9.bmp | Bin 0 -> 71510 bytes re150/re200/9.jpg | Bin 0 -> 91059 bytes re150/re200/IncludeAll.h | 8 + re150/re200/Main.cpp | 85 ++ re150/re200/MainDlgProc.cpp | 273 ++++++ re150/re200/Rand.cpp | 11 + re150/re200/re200.aps | Bin 0 -> 74252 bytes re150/re200/re200.rc | Bin 0 -> 4682 bytes re150/re200/re200.vcxproj | 104 +++ re150/re200/re200.vcxproj.filters | 46 + re150/re200/resource.h | Bin 0 -> 1082 bytes re150/re200/resource1.h | Bin 0 -> 1228 bytes re150/readme.txt | 38 + 84 files changed, 7173 insertions(+) create mode 100644 RE-HCTF_450/.gitattributes create mode 100644 RE-HCTF_450/.gitignore create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" create mode 100644 "RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/CM_\344\270\273\344\275\223/C_easy_VMP/VMmain.cpp" create mode 100644 "RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/FLAG\350\257\264\346\230\216.txt" create mode 100644 "RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/\344\273\243\347\240\201\350\231\232\346\213\237\347\256\200\345\215\225\344\273\213\347\273\215.txt" create mode 100644 RE-HCTF_450/C_easy_VMP/C_easy_VMP.sln create mode 100644 RE-HCTF_450/C_easy_VMP/C_easy_VMP/C_easy_VMP.vcxproj create mode 100644 RE-HCTF_450/C_easy_VMP/C_easy_VMP/C_easy_VMP.vcxproj.filters create mode 100644 RE-HCTF_450/C_easy_VMP/C_easy_VMP/C_easy_VMP_code.rar create mode 100644 RE-HCTF_450/C_easy_VMP/C_easy_VMP/MainEntry.cpp create mode 100644 RE-HCTF_450/C_easy_VMP/C_easy_VMP/Stack.cpp create mode 100644 RE-HCTF_450/C_easy_VMP/C_easy_VMP/Stack.h create mode 100644 RE-HCTF_450/C_easy_VMP/C_easy_VMP/VM.h create mode 100644 RE-HCTF_450/C_easy_VMP/C_easy_VMP/VMmain.cpp create mode 100644 "RE-HCTF_450/C_easy_VMP/\344\273\243\347\240\201\350\231\232\346\213\237\347\272\246\345\256\232.txt" create mode 100644 RE-HCTF_450/C_easy_VMP_2/C_easy_VMP.sln create mode 100644 RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/C_easy_VMP.vcxproj create mode 100644 RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/C_easy_VMP.vcxproj.filters create mode 100644 RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/MainEntry.cpp create mode 100644 RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/Stack.cpp create mode 100644 RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/Stack.h create mode 100644 RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/VM.h create mode 100644 RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/VMmain.cpp create mode 100644 "RE-HCTF_450/C_easy_VMP_2/\344\273\243\347\240\201\346\265\213\350\257\225\347\211\210\346\234\2542.txt" create mode 100644 RE-HCTF_450/C_easy_VMP_3/C_easy_VMP.sln create mode 100644 RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/C_easy_VMP.vcxproj create mode 100644 RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/C_easy_VMP.vcxproj.filters create mode 100644 RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/C_easy_VMP_code.rar create mode 100644 RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/Code_Define.h create mode 100644 RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/MainEntry.cpp create mode 100644 RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/Stack.cpp create mode 100644 RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/Stack.h create mode 100644 RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/VM.h create mode 100644 RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/VMmain.cpp create mode 100644 "RE-HCTF_450/C_easy_VMP_3/\344\273\243\347\240\201\344\277\256\346\224\271\347\211\210\346\234\2543.txt" create mode 100644 RE-HCTF_450/C_easy_VMP_4/C_easy_VMP.sln create mode 100644 RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/C_easy_VMP.vcxproj create mode 100644 RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/C_easy_VMP.vcxproj.filters create mode 100644 RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/Code_Define.h create mode 100644 RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/MainEntry.cpp create mode 100644 RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/Stack.cpp create mode 100644 RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/Stack.h create mode 100644 RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/VM.h create mode 100644 RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/VMmain.cpp create mode 100644 "RE-HCTF_450/C_easy_VMP_4/\344\273\243\347\240\201\344\277\256\346\224\271\347\211\210\346\234\2544.txt" create mode 100644 "RE-HCTF_450/C_easy_VMP_4/\344\273\243\347\240\201\350\231\232\346\213\237\347\272\246\345\256\232.txt" create mode 100644 RE-HCTF_450/C_easy_VMP_5/C_easy_VMP.sln create mode 100644 RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/C_easy_VMP.vcxproj create mode 100644 RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/C_easy_VMP.vcxproj.filters create mode 100644 RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/Code_Define.h create mode 100644 RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/MainEntry.cpp create mode 100644 RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/Stack.cpp create mode 100644 RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/Stack.h create mode 100644 RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/VM.h create mode 100644 RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/VMmain.cpp create mode 100644 "RE-HCTF_450/C_easy_VMP_5/\344\273\243\347\240\201\344\277\256\346\224\271\347\211\210\346\234\2545.txt" create mode 100644 "RE-HCTF_450/C_easy_VMP_5/\344\273\243\347\240\201\350\231\232\346\213\237\347\272\246\345\256\232.txt" create mode 100644 RE-HCTF_450/ReadMe.txt create mode 100644 RE-HCTF_450/git_fire.bat create mode 100644 re150/Debug/re200.exe create mode 100644 re150/Release/re200.exe create mode 100644 re150/re200.sln create mode 100644 re150/re200.v12.suo create mode 100644 re150/re200/9.bmp create mode 100644 re150/re200/9.jpg create mode 100644 re150/re200/IncludeAll.h create mode 100644 re150/re200/Main.cpp create mode 100644 re150/re200/MainDlgProc.cpp create mode 100644 re150/re200/Rand.cpp create mode 100644 re150/re200/re200.aps create mode 100644 re150/re200/re200.rc create mode 100644 re150/re200/re200.vcxproj create mode 100644 re150/re200/re200.vcxproj.filters create mode 100644 re150/re200/resource.h create mode 100644 re150/re200/resource1.h create mode 100644 re150/readme.txt 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 +#include +#include "Stack.h" +#include "Code_Define.h" +class VM_Function:public VM_STACK +{ + typedef struct _VMDATA + { + + DWORD EAX; + DWORD EBX; + + DWORD OEP; + PDWORD CODE; + PDWORD DATA; + + BOOL SFLAG; //ű־ + BOOL ZFLAG; //־ + + } VMDATA, *PVMDATA; + + typedef void(VM_Function::*ProcessFuncPtr)(PVMDATA); + + //typedef void(VM_Function::*ProcessTest)(); + //ProcessTest calltest; + + std::map ControlTable; + ProcessFuncPtr callname; + +public: + VM_Function(int datax) ; + BOOL StartVM(PDWORD vmCode); + +private: + virtual void CODE_X00_START(); + void CODE_PUSH(PVMDATA vm_data); + void CODE_POP(PVMDATA vm_data); + + + void CODE_ADD(PVMDATA vm_data); + void CODE_SUB(PVMDATA vm_data); + void CODE_XOR(PVMDATA vm_data); + void CODE_JMP(PVMDATA vm_data); + void CODE_JZ(PVMDATA vm_data); + void CODE_CMP(PVMDATA vm_data); + //߼ָ + void CODE_SHR(PVMDATA vm_data); + void CODE_SHL(PVMDATA vm_data); + void CODE_AND(PVMDATA vm_data); + void CODE_OR(PVMDATA vm_data); + + //CALLָ + void CODE_STRLEN_CALL(PVMDATA vm_data); + void CODE_FAKE_CALL(PVMDATA vm_data); + //⻷仯ָ + void CODE_EXIT_SUCCESS(PVMDATA vm_data); + void CODE_EXIT_FAIL(PVMDATA vm_data); +#ifdef _DEBUG + void CODE_DBG_BREAK(PVMDATA vm_data); +#endif + //Ӻֵ + DWORD VM_RET; +}; \ 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/VMmain.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/VMmain.cpp" new file mode 100644 index 0000000..af66002 --- /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/VMmain.cpp" @@ -0,0 +1,303 @@ +#include "VM.h" +VM_Function::VM_Function(int datax) :VM_STACK(datax) +{ + ControlTable[VM_X00_START] = 0x00; + ControlTable[VM_PUSH] = &VM_Function::CODE_PUSH; + + ControlTable[VM_POP] = &VM_Function::CODE_POP; + ControlTable[VM_ADD] = &VM_Function::CODE_ADD; + ControlTable[VM_SUB] = &VM_Function::CODE_SUB; + ControlTable[VM_XOR] = &VM_Function::CODE_XOR; + ControlTable[VM_JMP] = &VM_Function::CODE_JMP; + ControlTable[VM_JZ] = &VM_Function::CODE_JZ; + ControlTable[VM_CMP] = &VM_Function::CODE_CMP; + + ControlTable[VM_SHR] = &VM_Function::CODE_SHR; + ControlTable[VM_SHL] = &VM_Function::CODE_SHL; + ControlTable[VM_AND] = &VM_Function::CODE_AND; + ControlTable[VM_OR] = &VM_Function::CODE_OR; + + ControlTable[VM_STRLEN_CALL] = &VM_Function::CODE_STRLEN_CALL; + ControlTable[VM_FAKE_CALL] = &VM_Function::CODE_FAKE_CALL; + ControlTable[VM_EXIT_SUCCESS] = &VM_Function::CODE_EXIT_SUCCESS; + ControlTable[VM_EXIT_FAIL] = &VM_Function::CODE_EXIT_FAIL; + +#ifdef _DEBUG + ControlTable[VM_DEBUG_BREAK] = &VM_Function::CODE_DBG_BREAK; +#endif + +} +#ifdef _DEBUG +void VM_Function::CODE_DBG_BREAK(PVMDATA vm_data) +{ + printf("\n===== VM Debug BreakPoint =====\n"); + Debug_PrintStack(); + printf(" EAX: %x\n EBX: %x\n Zflag: %d\n Sflag: %d\n", vm_data->EAX, vm_data->EBX, vm_data->ZFLAG, vm_data->SFLAG); + getchar(); +} +#endif +void VM_Function::CODE_X00_START() +{ + printf("VM_Start\n"); +} +void VM_Function::CODE_PUSH(PVMDATA vm_data) +{ + DWORD reg = *((vm_data->CODE)+2); + switch ((*(++vm_data->CODE))&0x70) + { + case PUSH_EAX: + Stack_Push(vm_data->EAX); + break; + case PUSH_EBX: + Stack_Push(vm_data->EBX); + break; + case PUSH_MEM: + Stack_Pop(®); + + switch ((*vm_data->CODE) & 0x7) + { + case PUSH_MEM_BYTE: + reg = *(BYTE*)reg; + break; + case PUSH_MEM_WORD: + reg = *(WORD*)reg; + break; + case PUSH_MEM_DWORD: + reg = *(DWORD*)reg; + break; + default: + break; + } + Stack_Push(reg); + break; + case PUSH_NUM: + Stack_Push(reg); + (vm_data->CODE)++; + break; + default: + break; + } + +} + +void VM_Function::CODE_POP(PVMDATA vm_data) +{ + DWORD reg = 0; + BYTE DataB = 0; + WORD DataW = 0; + DWORD DataDW = 0; + DWORD Addr = 0; + switch ((*(++vm_data->CODE)) & 0x70) + { + case POP_EAX: + Stack_Pop(&(vm_data->EAX)); + break; + case POP_EBX: + Stack_Pop(&(vm_data->EBX)); + break; + case POP_MEM: + + Stack_Pop(&Addr); + Stack_Pop(®); + + switch ((*vm_data->CODE) & 0x7) + { + case POP_MEM_BYTE: + + _asm + { + push eax + xor eax, eax + mov eax, reg + mov DataB, al + pop eax + } + *(BYTE*)Addr = DataB; + break; + case POP_MEM_WORD: + + _asm + { + push eax + xor eax, eax + mov eax, reg + mov DataW, ax + pop eax + } + *(WORD*)Addr = DataW; + break; + case POP_MEM_DWORD: + + _asm + { + push eax + xor eax, eax + mov eax, reg + mov DataDW,eax + pop eax + } + *(DWORD*)Addr = DataDW; + break; + default: + break; + } + //(vm_data->CODE)++; + break; + case POP_DEL: + Stack_Pop(®); + break; + default: + break; + } + +} + +void VM_Function::CODE_ADD( PVMDATA vm_data) +{ + + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] += reg; + //FLAGı + vm_data->ZFLAG = ((S->vmStack[S->TopOfStack]) == 0); + vm_data->SFLAG = ((S->vmStack[S->TopOfStack]) < 0); +} +void VM_Function::CODE_SUB(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] -= reg; + //FLAGı + vm_data->ZFLAG = ((S->vmStack[S->TopOfStack]) == 0); + vm_data->SFLAG = ((S->vmStack[S->TopOfStack]) & 0x80000000); +} +void VM_Function::CODE_XOR(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] ^= reg; + +} +void VM_Function::CODE_SHR(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] = S->vmStack[S->TopOfStack] >> reg; +} +void VM_Function::CODE_SHL(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] = S->vmStack[S->TopOfStack] << reg; +} +void VM_Function::CODE_OR(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] |= reg; +} +void VM_Function::CODE_AND(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] &= reg; +} +void VM_Function::CODE_JMP( PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(® ); + (vm_data->CODE)++; + if (Jump_From_EIP == *(vm_data->CODE)) + vm_data->CODE = (vm_data->CODE) + (reg); + else if (Jump_From_OEP == *(vm_data->CODE)) + vm_data->CODE = (PDWORD)(vm_data->OEP) + (reg); + +} +void VM_Function::CODE_JZ( PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + (vm_data->CODE)++; + if (vm_data->ZFLAG) + { + if (Jump_From_EIP == *(vm_data->CODE)) + vm_data->CODE = (vm_data->CODE) + (reg); + else if (Jump_From_OEP == *(vm_data->CODE)) + vm_data->CODE = (PDWORD)(vm_data->OEP) + (reg); + + vm_data->ZFLAG = 0; + } + +} +void VM_Function::CODE_CMP(PVMDATA vm_data) +{ + DWORD reg = NULL; + reg = (S->vmStack[(S->TopOfStack) - 1]) - (S->vmStack[S->TopOfStack]); + vm_data->ZFLAG = (reg == 0); + +} + +void VM_Function::CODE_STRLEN_CALL(PVMDATA vm_data) +{ + DWORD reg = NULL; + DWORD STRLEN_RET = 0; + Stack_Pop(®); + STRLEN_RET = strlen((char*)(reg)); + Stack_Push(STRLEN_RET); +} +void VM_Function::CODE_FAKE_CALL(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + StartVM((PDWORD)reg+2); + Stack_Push(VM_RET); +} +void VM_Function::CODE_EXIT_SUCCESS(PVMDATA vm_data) +{ + vm_data->CODE = 0x0; +#ifdef _DEBUG + Debug_PrintStack(); +#endif +} +void VM_Function::CODE_EXIT_FAIL(PVMDATA vm_data) +{ + vm_data->CODE = 0x0; + printf("Sorry Fail, Try Again\n"); + getchar(); + exit(1); +#ifdef _DEBUG + printf("============END===========\n"); + printf("============END===========\n"); + printf("============END===========\n"); + Debug_PrintStack(); + exit(1); +#endif +} +// +BOOL VM_Function::StartVM(PDWORD vmCode) +{ + VMDATA vm_data; + //Stack vm_Stack = CreateVmStack(64); + + vm_data.OEP = (DWORD)(vmCode-2); + vm_data.CODE = vmCode; + + vm_data.EAX = 0; + vm_data.EBX = 0; + //vm_data.ECX = 0; + + vm_data.SFLAG = FALSE; + vm_data.ZFLAG = FALSE; + + + while (vm_data.CODE++) + { + DWORD XXXX = *(vm_data.CODE); + callname = ControlTable[*(vm_data.CODE)]; + (this->*callname)(&vm_data); + + + + } + return FALSE; +} \ No newline at end of file diff --git "a/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/FLAG\350\257\264\346\230\216.txt" "b/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/FLAG\350\257\264\346\230\216.txt" new file mode 100644 index 0000000..afc860c --- /dev/null +++ "b/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/FLAG\350\257\264\346\230\216.txt" @@ -0,0 +1,6 @@ +FLAGEʽ +HCTF{123412341234123489} + +HCTF{S1FALS1R1Fa9xxxxxx} +ǰ12Dzģ6Ϊڼݣÿflagͬ +Ox22ڴбȽ \ No newline at end of file diff --git "a/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/\344\273\243\347\240\201\350\231\232\346\213\237\347\256\200\345\215\225\344\273\213\347\273\215.txt" "b/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/\344\273\243\347\240\201\350\231\232\346\213\237\347\256\200\345\215\225\344\273\213\347\273\215.txt" new file mode 100644 index 0000000..b9bd790 --- /dev/null +++ "b/RE-HCTF_450/CM_VM_\345\256\214\346\210\220\347\211\210/\344\273\243\347\240\201\350\231\232\346\213\237\347\256\200\345\215\225\344\273\213\347\273\215.txt" @@ -0,0 +1,22 @@ +飺ֽԼάһջ2Ĵһתı־λ +⻯ԭ +⣺ +mov-->push,pop +add-->push,push,VM_add,pop +jmp-->push ,jmp code + +˫ָԼ +popһջкһջڴ + +callָ +ӺһջĴͬ +ʱpushַfake_callãexit_success. + +ָ +װһVMָУΪVMָá + + +⻯ +ֽ룬push0x100 +ӺԽС + diff --git a/RE-HCTF_450/C_easy_VMP/C_easy_VMP.sln b/RE-HCTF_450/C_easy_VMP/C_easy_VMP.sln new file mode 100644 index 0000000..8842ff3 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP/C_easy_VMP.sln @@ -0,0 +1,22 @@ + +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 +EndGlobal diff --git a/RE-HCTF_450/C_easy_VMP/C_easy_VMP/C_easy_VMP.vcxproj b/RE-HCTF_450/C_easy_VMP/C_easy_VMP/C_easy_VMP.vcxproj new file mode 100644 index 0000000..e8a5d4a --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP/C_easy_VMP/C_easy_VMP.vcxproj @@ -0,0 +1,93 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {C460CB7F-F7D7-4F3E-B186-E28B05EFD922} + Win32Proj + C_easy_VMP + + + + Application + true + v120 + Unicode + + + Application + false + v120 + 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/C_easy_VMP/C_easy_VMP/C_easy_VMP.vcxproj.filters b/RE-HCTF_450/C_easy_VMP/C_easy_VMP/C_easy_VMP.vcxproj.filters new file mode 100644 index 0000000..2b58cb9 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP/C_easy_VMP/C_easy_VMP.vcxproj.filters @@ -0,0 +1,36 @@ + + + + + {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/C_easy_VMP/C_easy_VMP/C_easy_VMP_code.rar b/RE-HCTF_450/C_easy_VMP/C_easy_VMP/C_easy_VMP_code.rar new file mode 100644 index 0000000000000000000000000000000000000000..e3af73f940d3ad778cb535f6d93567aee03a05ec GIT binary patch literal 2787 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 p4LruWT4 +#include +#include "Stack.h" +#include "VM.h" +/* +enum myVm +{ + VM_PUSH_EAX = 0, + VM_PUSH_NUM, + VM_POP_EAX, + VM_ADD, + VM_SUB, + VM_XOR, + VM_JMP, + VM_JZ, + VM_EXIT, + VM_CMP, + + VM_STRLEN_CALL + + }; + */ +int main() +{ + char stringIn[10] = {0}; + scanf_s("%s", stringIn, 10); +#ifdef _DEBUG + printf("addr = %x \n", stringIn); +#endif + BYTE CODE[] = + { + VM_X00_START, + VM_PUSH_NUM, //NUM1 push addr of input Str + + VM_POP_EBX, + VM_PUSH_EBX, //EBX = ADDR STR + + VM_STRLEN_CALL, //pop addr, call strlen, push result + + VM_PUSH_NUM, //NUNM2 push 0x0 i = 0 + VM_CMP, //cmp <----- + VM_PUSH_NUM, //push NUM3 is jum to exit + VM_JZ, //pop NUM3 JZ (18) + + VM_POP_EAX, //pop eax ;eax = i + + + VM_PUSH_EBX, //EBX: push addr of input Str + VM_PUSH_EAX, //PUSH i + + VM_ADD, //Pop i ,add i str + VM_BYTE_MEM_GET, //POP STR, FIND BYTE STR, PUSH result + VM_PUSH_NUM, //num push 6 (6) + VM_XOR, //pop 6,top xor 6 + + VM_PUSH_EBX, //EBX: push addr of input Str + VM_PUSH_EAX, //PUSH i + VM_ADD, //Pop i ,add i str + VM_BYTE_MEM_SET,//pop addr,pop result, Set That addr + + VM_PUSH_EAX, //EAX = i + VM_PUSH_NUM, //NUM = 1 + VM_ADD, //I = I+1 + VM_POP_EAX, //eax = i + VM_PUSH_EAX, //push to jmp + + VM_PUSH_NUM, //NUM5 jmp code + VM_JMP, //circle jmp + VM_EXIT }; + DWORD CODE_DATA[] = + { + (DWORD)stringIn, + 0x000, + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + }; + + StartVM(CODE, CODE_DATA); + if (!strcmp(stringIn, "745230")) + { + printf("YOU GOT IT\n"); + } + else + { + printf("SORRY FAIL\n"); + } +#ifdef _DEBUG + printf("%s", stringIn); +#endif + return 0; +} \ No newline at end of file diff --git a/RE-HCTF_450/C_easy_VMP/C_easy_VMP/Stack.cpp b/RE-HCTF_450/C_easy_VMP/C_easy_VMP/Stack.cpp new file mode 100644 index 0000000..3928a6c --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP/C_easy_VMP/Stack.cpp @@ -0,0 +1,33 @@ +#include "Stack.h" +#include +//ǵfree +Stack CreateVmStack(int MaxSize) +{ + Stack S; + 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; + return S; + +} +void Stack_Push(DWORD xxx, Stack S) +{ + S->vmStack[++S->TopOfStack] = xxx; +} +void Stack_Pop(PDWORD xxx, Stack S) +{ + *xxx = S->vmStack[S->TopOfStack--]; +} +void Error(char* xxx) +{ + printf("%s,LastError = %d", xxx,GetLastError()); + exit(-1); +} \ No newline at end of file diff --git a/RE-HCTF_450/C_easy_VMP/C_easy_VMP/Stack.h b/RE-HCTF_450/C_easy_VMP/C_easy_VMP/Stack.h new file mode 100644 index 0000000..fefd990 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP/C_easy_VMP/Stack.h @@ -0,0 +1,13 @@ +#include +typedef struct VM_Stack *Stack; +BOOL StartVM(PBYTE vmCode, PDWORD vmData); +Stack CreateVmStack(int MaxSize); +void Stack_Push(DWORD xxx, Stack S); +void Stack_Pop(PDWORD xxx, Stack S); +void Error(char* xxx); +struct VM_Stack +{ + int capacity; + int TopOfStack; + PDWORD vmStack; +}; \ No newline at end of file diff --git a/RE-HCTF_450/C_easy_VMP/C_easy_VMP/VM.h b/RE-HCTF_450/C_easy_VMP/C_easy_VMP/VM.h new file mode 100644 index 0000000..5567f2b --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP/C_easy_VMP/VM.h @@ -0,0 +1,44 @@ +#include + +typedef struct _VMDATA +{ //ջ + DWORD ESP; + DWORD EAX; + DWORD EBX; + DWORD ECX; + DWORD EDX; + DWORD ESI; + DWORD EDI; + DWORD EIP; + PBYTE OEP; + PBYTE CODE; + PDWORD DATA; + //PBYTE PARAM; + //PBYTE PARAM1; + BOOL SFLAG; //ű־ + BOOL ZFLAG; //־ +} VMDATA, *PVMDATA; +enum myVm +{ + VM_X00_START = 0, + VM_PUSH_EAX, + VM_POP_EAX, + + VM_PUSH_EBX, + VM_POP_EBX, + + VM_PUSH_NUM, + VM_BYTE_MEM_GET, + VM_BYTE_MEM_SET, + + VM_ADD, + VM_SUB, + VM_XOR, + VM_JMP, + VM_JZ, + VM_EXIT, + VM_CMP, + + VM_STRLEN_CALL + +}; \ No newline at end of file diff --git a/RE-HCTF_450/C_easy_VMP/C_easy_VMP/VMmain.cpp b/RE-HCTF_450/C_easy_VMP/C_easy_VMP/VMmain.cpp new file mode 100644 index 0000000..a343fc7 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP/C_easy_VMP/VMmain.cpp @@ -0,0 +1,175 @@ +#include "VM.h" +#include"Stack.h" +void CODE_PUSH(Stack xxx, DWORD DATA) +{ + Stack_Push(DATA, xxx); +} +void CODE_PUSH_NUM(Stack xxx, PVMDATA vm_data) +{ + Stack_Push(*(vm_data->DATA), xxx); + (vm_data->DATA)++; +} +void CODE_POP(Stack xxx, DWORD *REG) +{ + Stack_Pop(REG, xxx); +} +void CODE_ADD(Stack xxx, PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®, xxx); + xxx->vmStack[xxx->TopOfStack] += reg; + //FLAGı + vm_data->ZFLAG = ((xxx->vmStack[xxx->TopOfStack]) == 0); + vm_data->SFLAG = ((xxx->vmStack[xxx->TopOfStack]) < 0); +} +void CODE_SUB(Stack xxx, PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®, xxx); + xxx->vmStack[xxx->TopOfStack] -= reg; + //FLAGı + vm_data->ZFLAG = ((xxx->vmStack[xxx->TopOfStack]) == 0); + vm_data->SFLAG = ((xxx->vmStack[xxx->TopOfStack]) & 0x80000000); +} +void CODE_XOR(Stack xxx) +{ + DWORD reg = NULL; + Stack_Pop(®, xxx); + xxx->vmStack[xxx->TopOfStack] ^= reg; +} +void CODE_JMP(Stack xxx, PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®, xxx); + vm_data->CODE = (vm_data->CODE) + (reg); +} +void CODE_JZ(Stack xxx, PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®, xxx); + if (vm_data->ZFLAG) + vm_data->CODE = (vm_data->CODE) + (reg); +} +void CODE_CMP(Stack xxx, PVMDATA vm_data) +{ + DWORD reg = NULL; + reg = (xxx->vmStack[(xxx->TopOfStack) - 1]) - (xxx->vmStack[xxx->TopOfStack]); + vm_data->ZFLAG = (reg == 0); +} +void CODE_BYTE_MEM_GET(Stack xxx) +{ + DWORD reg = NULL; + Stack_Pop(®, xxx); + reg = *(BYTE*)reg; + Stack_Push(reg, xxx); +} +void CODE_BYTE_MEM_SET(Stack xxx) +{ + DWORD reg = NULL; + DWORD Addr = NULL; + BYTE Data = NULL; + Stack_Pop(&Addr, xxx); //result + Stack_Pop(®, xxx);//address + _asm + { + push eax + xor eax, eax + mov eax, reg + mov Data,al + pop eax + + } + *(BYTE*)Addr = Data; +} +void CODE_STRLEN_CALL(Stack xxx) +{ + DWORD reg = NULL; + DWORD STRLEN_RET = 0; + Stack_Pop(®, xxx); + STRLEN_RET = strlen((char*)(reg)); + Stack_Push(STRLEN_RET, xxx); +} +void CODE_EXIT(Stack xxx) +{ + free(xxx->vmStack); + free(xxx); +} + +BOOL StartVM(PBYTE vmCode, PDWORD vmData) +{ + VMDATA vm_data; + Stack vm_Stack = CreateVmStack(64); + + vm_data.OEP = vmCode; + vm_data.CODE = vmCode; + vm_data.DATA = vmData; + //vm_data.PARAM = vmparam; + //vm_data.PARAM1 = vmparam1; + vm_data.EAX = 0; + vm_data.EBX = 0; + vm_data.ECX = 0; + vm_data.EDX = 0; + vm_data.EDI = 0; + vm_data.ESI = 0; + vm_data.ESP = 0; + vm_data.SFLAG = FALSE; + vm_data.ZFLAG = FALSE; + + + while (vm_data.CODE++) + { + switch (*(vm_data.CODE)) + { + case VM_PUSH_EAX: + CODE_PUSH(vm_Stack, vm_data.EAX); + break; + case VM_POP_EAX: + CODE_POP(vm_Stack, &(vm_data.EAX)); + break; + case VM_PUSH_EBX: + CODE_PUSH(vm_Stack, vm_data.EBX); + break; + case VM_POP_EBX: + CODE_POP(vm_Stack, &(vm_data.EBX)); + break; + case VM_PUSH_NUM: + CODE_PUSH_NUM(vm_Stack, &vm_data); + break; + case VM_ADD: + CODE_ADD(vm_Stack, &vm_data); + break; + case VM_SUB: + CODE_SUB(vm_Stack, &vm_data); + break; + case VM_XOR: + CODE_XOR(vm_Stack); + break; + case VM_JMP: + CODE_JMP(vm_Stack, &vm_data); + break; + case VM_JZ: + CODE_JZ(vm_Stack, &vm_data); + break; + + case VM_STRLEN_CALL: + CODE_STRLEN_CALL(vm_Stack); + break; + case VM_CMP: + CODE_CMP(vm_Stack, &vm_data); + break; + case VM_BYTE_MEM_GET: + CODE_BYTE_MEM_GET(vm_Stack); + break; + case VM_BYTE_MEM_SET: + CODE_BYTE_MEM_SET(vm_Stack); + break; + case VM_EXIT: + CODE_EXIT(vm_Stack); + return TRUE; + default: + break; + } + + } + return FALSE; +} \ No newline at end of file diff --git "a/RE-HCTF_450/C_easy_VMP/\344\273\243\347\240\201\350\231\232\346\213\237\347\272\246\345\256\232.txt" "b/RE-HCTF_450/C_easy_VMP/\344\273\243\347\240\201\350\231\232\346\213\237\347\272\246\345\256\232.txt" new file mode 100644 index 0000000..bb53ca0 --- /dev/null +++ "b/RE-HCTF_450/C_easy_VMP/\344\273\243\347\240\201\350\231\232\346\213\237\347\272\246\345\256\232.txt" @@ -0,0 +1,20 @@ +Լάһջ뼸Ĵ־λ⻯롣 +⻯ԭ +⣺ +mov-->push,pop +add-->push,push,VM_add,pop +jmp-->push ,jmp code + +cmpָsubָadd棿 + +˫ָԼ +popһջкһջڴ + +αָԶָ +ĿѶȽ޸ġ + +callָ +ԼװС + +ָ +޴롣Ҫʱ˳⻯ԭá diff --git a/RE-HCTF_450/C_easy_VMP_2/C_easy_VMP.sln b/RE-HCTF_450/C_easy_VMP_2/C_easy_VMP.sln new file mode 100644 index 0000000..8842ff3 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_2/C_easy_VMP.sln @@ -0,0 +1,22 @@ + +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 +EndGlobal diff --git a/RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/C_easy_VMP.vcxproj b/RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/C_easy_VMP.vcxproj new file mode 100644 index 0000000..af2096a --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/C_easy_VMP.vcxproj @@ -0,0 +1,93 @@ + + + + + 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/C_easy_VMP_2/C_easy_VMP/C_easy_VMP.vcxproj.filters b/RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/C_easy_VMP.vcxproj.filters new file mode 100644 index 0000000..2b58cb9 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/C_easy_VMP.vcxproj.filters @@ -0,0 +1,36 @@ + + + + + {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/C_easy_VMP_2/C_easy_VMP/MainEntry.cpp b/RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/MainEntry.cpp new file mode 100644 index 0000000..d6888c3 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/MainEntry.cpp @@ -0,0 +1,174 @@ +#include +#include +#include "Stack.h" +#include "VM.h" +/* +enum myVm +{ + VM_PUSH_EAX = 0, + VM_PUSH_NUM, + VM_POP_EAX, + VM_ADD, + VM_SUB, + VM_XOR, + VM_JMP, + VM_JZ, + VM_EXIT, + VM_CMP, + + VM_STRLEN_CALL + + }; + */ +int main() +{ + char stringIn[10] = {0}; + scanf_s("%s", stringIn, 10); +#ifdef _DEBUG + printf("addr = %x \n", stringIn); +#endif + BYTE CODE[] = + { + VM_X00_START, + VM_PUSH_NUM, //NUM1 push addr of input Str + + VM_POP_EBX, + VM_PUSH_EBX, //EBX = ADDR STR + + VM_STRLEN_CALL, //pop addr, call strlen, push result + + VM_PUSH_NUM, //NUNM2 push 0x0 i = 0 + VM_CMP, //cmp <----- + VM_PUSH_NUM, //push NUM3 is jum to exit + VM_JZ, //pop NUM3 JZ (18) + + VM_POP_EAX, //pop eax ;eax = i + + + VM_PUSH_EBX, //EBX: push addr of input Str + VM_PUSH_EAX, //PUSH i + + VM_ADD, //Pop i ,add i str + VM_BYTE_MEM_GET, //POP STR, FIND BYTE STR, PUSH result + VM_PUSH_NUM, //num push 6 (6) + VM_XOR, //pop 6,top xor 6 + + VM_PUSH_EBX, //EBX: push addr of input Str + VM_PUSH_EAX, //PUSH i + VM_ADD, //Pop i ,add i str + VM_BYTE_MEM_SET,//pop addr,pop result, Set That addr + + VM_PUSH_EAX, //EAX = i + VM_PUSH_NUM, //NUM = 1 + VM_ADD, //I = I+1 + VM_POP_EAX, //eax = i + VM_PUSH_EAX, // + + VM_PUSH_NUM, //NUM5 jmp code + VM_JMP, //circle jmp + VM_EXIT }; + DWORD CODE_DATA[] = + { + (DWORD)stringIn, + 0x000, + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + }; + VM_Function Fun1(64); + Fun1.StartVM(CODE, CODE_DATA); + printf("VM_2:%x\n", (int*)*(int*)(&Fun1)); + typedef void(*Fun)(VOID); + Fun pFun = NULL; + pFun = (Fun)*((int*)*(int*)(&Fun1)); + pFun(); + + if (!strcmp(stringIn, "745230")) + { + printf("YOU GOT IT\n"); + } + else + { + printf("SORRY FAIL\n"); + } +#ifdef _DEBUG + printf("%s", stringIn); +#endif + return 0; +} \ No newline at end of file diff --git a/RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/Stack.cpp b/RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/Stack.cpp new file mode 100644 index 0000000..2a5cbf2 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_2/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/C_easy_VMP_2/C_easy_VMP/Stack.h b/RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/Stack.h new file mode 100644 index 0000000..4d95389 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/Stack.h @@ -0,0 +1,31 @@ +#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); + ~VM_STACK() + { + free(S->vmStack); + free(S); + } +private: + + void Error(char* xxx); + +}; diff --git a/RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/VM.h b/RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/VM.h new file mode 100644 index 0000000..ce34eaa --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/VM.h @@ -0,0 +1,84 @@ +#include +#include "Stack.h" +#include +#include +enum myVm +{ + VM_X00_START = 0, + VM_PUSH_EAX, + VM_POP_EAX, + + VM_PUSH_EBX, + VM_POP_EBX, + + VM_PUSH_NUM, + VM_BYTE_MEM_GET, + VM_BYTE_MEM_SET, + + VM_ADD, + VM_SUB, + VM_XOR, + VM_JMP, + VM_JZ, + VM_EXIT, + VM_CMP, + + VM_STRLEN_CALL + +}; + +class VM_Function:public VM_STACK +{ + typedef struct _VMDATA + { + DWORD ESP; + DWORD EAX; + DWORD EBX; + DWORD ECX; + DWORD EDX; + DWORD ESI; + DWORD EDI; + DWORD EIP; + PBYTE OEP; + PBYTE CODE; + PDWORD DATA; + //PBYTE PARAM; + //PBYTE PARAM1; + BOOL SFLAG; //ű־ + BOOL ZFLAG; //־ + } VMDATA, *PVMDATA; + + typedef void(VM_Function::*ProcessFuncPtr)(PVMDATA); + + typedef void(VM_Function::*ProcessTest)(); + ProcessTest calltest; + + std::map ControlTable; + ProcessFuncPtr callname; + +public: + VM_Function(int datax) ; + BOOL StartVM(PBYTE vmCode, PDWORD vmData); + +private: + virtual void CODE_X00_START(); + void CODE_PUSH_EAX(PVMDATA vm_data); + void CODE_POP_EAX(PVMDATA vm_data); + void CODE_PUSH_EBX(PVMDATA vm_data); + void CODE_POP_EBX(PVMDATA vm_data); + void CODE_PUSH_NUM(PVMDATA vm_data); + + void CODE_ADD(PVMDATA vm_data); + void CODE_SUB(PVMDATA vm_data); + void CODE_XOR(PVMDATA vm_data); + void CODE_JMP(PVMDATA vm_data); + void CODE_JZ(PVMDATA vm_data); + void CODE_CMP(PVMDATA vm_data); + void CODE_BYTE_MEM_GET(PVMDATA vm_data); + void CODE_BYTE_MEM_SET(PVMDATA vm_data); + //CALLָ + void CODE_STRLEN_CALL(PVMDATA vm_data); + //⻷仯ָ + void CODE_EXIT(PVMDATA vm_data); + +}; \ No newline at end of file diff --git a/RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/VMmain.cpp b/RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/VMmain.cpp new file mode 100644 index 0000000..9226739 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_2/C_easy_VMP/VMmain.cpp @@ -0,0 +1,222 @@ +#include "VM.h" +VM_Function::VM_Function(int datax) :VM_STACK(datax) +{ + ControlTable[VM_X00_START] = 0x00; + ControlTable[VM_PUSH_EAX] = &VM_Function::CODE_PUSH_EAX; + ControlTable[VM_PUSH_EBX] = &VM_Function::CODE_PUSH_EBX; + ControlTable[VM_PUSH_NUM] = &VM_Function::CODE_PUSH_NUM; + ControlTable[VM_POP_EAX] = &VM_Function::CODE_POP_EAX; + ControlTable[VM_POP_EBX] = &VM_Function::CODE_POP_EBX; + ControlTable[VM_ADD] = &VM_Function::CODE_ADD; + ControlTable[VM_SUB] = &VM_Function::CODE_SUB; + ControlTable[VM_XOR] = &VM_Function::CODE_XOR; + ControlTable[VM_JMP] = &VM_Function::CODE_JMP; + ControlTable[VM_JZ] = &VM_Function::CODE_JZ; + ControlTable[VM_CMP] = &VM_Function::CODE_CMP; + ControlTable[VM_BYTE_MEM_GET] = &VM_Function::CODE_BYTE_MEM_GET; + ControlTable[VM_BYTE_MEM_SET] = &VM_Function::CODE_BYTE_MEM_SET; + ControlTable[VM_STRLEN_CALL] = &VM_Function::CODE_STRLEN_CALL; + ControlTable[VM_EXIT] = &VM_Function::CODE_EXIT; + ProcessTest xxxx; + xxxx = &VM_Function::CODE_X00_START; + printf("VM_1:%x, VM_1:%x\n", xxxx, *(int*)*(int*)(this)); + calltest = xxxx; + + (this->*calltest)();//ClallͨһתʵֵģΪʲô + + typedef void(*Fun)(VOID); + Fun pFun = NULL; + pFun = (Fun)*((int*)*(int*)(this)); + pFun(); + +} +void VM_Function::CODE_X00_START() +{ + printf("VM_Start\n"); +} +void VM_Function::CODE_PUSH_EAX(PVMDATA vm_data) +{ + Stack_Push(vm_data->EAX); +} +void VM_Function::CODE_PUSH_EBX(PVMDATA vm_data) +{ + Stack_Push(vm_data->EBX); +} +void VM_Function::CODE_PUSH_NUM( PVMDATA vm_data) +{ + Stack_Push(*(vm_data->DATA)); + (vm_data->DATA)++; +} +void VM_Function::CODE_POP_EAX(PVMDATA vm_data) +{ + Stack_Pop(&(vm_data->EAX)); +} +void VM_Function::CODE_POP_EBX(PVMDATA vm_data) +{ + Stack_Pop(&(vm_data->EBX)); +} +void VM_Function::CODE_ADD( PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] += reg; + //FLAGı + vm_data->ZFLAG = ((S->vmStack[S->TopOfStack]) == 0); + vm_data->SFLAG = ((S->vmStack[S->TopOfStack]) < 0); +} +void VM_Function::CODE_SUB(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] -= reg; + //FLAGı + vm_data->ZFLAG = ((S->vmStack[S->TopOfStack]) == 0); + vm_data->SFLAG = ((S->vmStack[S->TopOfStack]) & 0x80000000); +} +void VM_Function::CODE_XOR(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] ^= reg; +} +void VM_Function::CODE_JMP( PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(® ); + vm_data->CODE = (vm_data->CODE) + (reg); +} +void VM_Function::CODE_JZ( PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + if (vm_data->ZFLAG) + vm_data->CODE = (vm_data->CODE) + (reg); +} +void VM_Function::CODE_CMP(PVMDATA vm_data) +{ + DWORD reg = NULL; + reg = (S->vmStack[(S->TopOfStack) - 1]) - (S->vmStack[S->TopOfStack]); + vm_data->ZFLAG = (reg == 0); +} +void VM_Function::CODE_BYTE_MEM_GET(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + reg = *(BYTE*)reg; + Stack_Push(reg); +} +void VM_Function::CODE_BYTE_MEM_SET(PVMDATA vm_data) +{ + DWORD reg = NULL; + DWORD Addr = NULL; + BYTE Data = NULL; + Stack_Pop(&Addr); //result + Stack_Pop(®);//address + _asm + { + push eax + xor eax, eax + mov eax, reg + mov Data,al + pop eax + + } + *(BYTE*)Addr = Data; +} +void VM_Function::CODE_STRLEN_CALL(PVMDATA vm_data) +{ + DWORD reg = NULL; + DWORD STRLEN_RET = 0; + Stack_Pop(®); + STRLEN_RET = strlen((char*)(reg)); + Stack_Push(STRLEN_RET); +} +void VM_Function::CODE_EXIT(PVMDATA vm_data) +{ + //free(xxx->vmStack); + //free(xxx); + vm_data->CODE = 0x0; + +} +// +BOOL VM_Function::StartVM(PBYTE vmCode, PDWORD vmData) +{ + VMDATA vm_data; + //Stack vm_Stack = CreateVmStack(64); + + vm_data.OEP = vmCode; + vm_data.CODE = vmCode; + vm_data.DATA = vmData; + //vm_data.PARAM = vmparam; + //vm_data.PARAM1 = vmparam1; + vm_data.EAX = 0; + vm_data.EBX = 0; + vm_data.ECX = 0; + vm_data.EDX = 0; + vm_data.EDI = 0; + vm_data.ESI = 0; + vm_data.ESP = 0; + vm_data.SFLAG = FALSE; + vm_data.ZFLAG = FALSE; + + + while (vm_data.CODE++) + { + callname = ControlTable[*(vm_data.CODE)]; + (this->*callname)(&vm_data); + + /*switch (*(vm_data.CODE)) + { + case VM_PUSH_EAX: + CODE_PUSH_EAX(&vm_data); + break; + case VM_POP_EAX: + CODE_POP_EAX(&vm_data); + break; + case VM_PUSH_EBX: + CODE_PUSH_EBX(&vm_data); + break; + case VM_POP_EBX: + CODE_POP_EBX(&vm_data); + break; + case VM_PUSH_NUM: + CODE_PUSH_NUM(&vm_data); + break; + case VM_ADD: + CODE_ADD(&vm_data); + break; + case VM_SUB: + CODE_SUB(&vm_data); + break; + case VM_XOR: + CODE_XOR(&vm_data); + break; + case VM_JMP: + CODE_JMP(&vm_data); + break; + case VM_JZ: + CODE_JZ(&vm_data); + break; + + case VM_STRLEN_CALL: + CODE_STRLEN_CALL(&vm_data); + break; + case VM_CMP: + CODE_CMP(&vm_data); + break; + case VM_BYTE_MEM_GET: + CODE_BYTE_MEM_GET(&vm_data); + break; + case VM_BYTE_MEM_SET: + CODE_BYTE_MEM_SET(&vm_data); + break; + case VM_EXIT: + CODE_EXIT(&vm_data); + return TRUE; + default: + break; + }*/ + + } + return FALSE; +} \ No newline at end of file diff --git "a/RE-HCTF_450/C_easy_VMP_2/\344\273\243\347\240\201\346\265\213\350\257\225\347\211\210\346\234\2542.txt" "b/RE-HCTF_450/C_easy_VMP_2/\344\273\243\347\240\201\346\265\213\350\257\225\347\211\210\346\234\2542.txt" new file mode 100644 index 0000000..930c110 --- /dev/null +++ "b/RE-HCTF_450/C_easy_VMP_2/\344\273\243\347\240\201\346\265\213\350\257\225\347\211\210\346\234\2542.txt" @@ -0,0 +1,5 @@ +ԭͬ +ı䣺 +1.ʹC++д +2.ʼʱһָñswitchcase䣬ָò + diff --git a/RE-HCTF_450/C_easy_VMP_3/C_easy_VMP.sln b/RE-HCTF_450/C_easy_VMP_3/C_easy_VMP.sln new file mode 100644 index 0000000..8842ff3 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_3/C_easy_VMP.sln @@ -0,0 +1,22 @@ + +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 +EndGlobal diff --git a/RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/C_easy_VMP.vcxproj b/RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/C_easy_VMP.vcxproj new file mode 100644 index 0000000..5e5a35b --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_3/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/C_easy_VMP_3/C_easy_VMP/C_easy_VMP.vcxproj.filters b/RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/C_easy_VMP.vcxproj.filters new file mode 100644 index 0000000..3b2d11d --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_3/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/C_easy_VMP_3/C_easy_VMP/C_easy_VMP_code.rar b/RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/C_easy_VMP_code.rar new file mode 100644 index 0000000000000000000000000000000000000000..e3af73f940d3ad778cb535f6d93567aee03a05ec GIT binary patch literal 2787 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 p4LruWT4 +#define General_VM 0x10 +enum myVm +{ + VM_X00_START = 0, + + VM_PUSH, //Ĵ + VM_POP, + + VM_ADD, // + VM_SUB, + VM_XOR, + VM_CMP, + + VM_JMP, //ת + VM_JZ, + VM_EXIT, + + + VM_STRLEN_CALL,//CALL룿 + VM_FAKE_CALL + +}; +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/C_easy_VMP_3/C_easy_VMP/MainEntry.cpp b/RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/MainEntry.cpp new file mode 100644 index 0000000..7698acc --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/MainEntry.cpp @@ -0,0 +1,175 @@ +#include +#include +#include "Stack.h" +#include "VM.h" +/* +enum myVm +{ + VM_PUSH_EAX = 0, + VM_PUSH_NUM, + VM_POP_EAX, + VM_ADD, + VM_SUB, + VM_XOR, + VM_JMP, + VM_JZ, + VM_EXIT, + VM_CMP, + + VM_STRLEN_CALL + + }; + */ +int main() +{ + char stringIn[10] = {0}; + scanf_s("%s", stringIn, 10); +#ifdef _DEBUG + printf("addr = %x \n", stringIn); +#endif + DWORD CODE[] = + { + VM_X00_START, + VM_PUSH, PUSH_NUM, (DWORD)stringIn, //NUM1 push addr of input Str + + VM_POP,POP_EBX, + VM_PUSH,PUSH_EBX, //EBX = ADDR STR + + VM_STRLEN_CALL, //pop addr, call strlen, push result + + VM_PUSH, PUSH_NUM, 0x0, //NUNM2 push 0x0 i = 0 + 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,0x6, //num push 6 (6) + VM_XOR, //pop 6,top xor 6 + + 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 bug? + + 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 + VM_EXIT, VM_EXIT, VM_EXIT }; + /* + DWORD CODE_DATA[] = + { + (DWORD)stringIn, + 0x000, + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + + 0x012, + 0x006, + 0x001, + -0x15, + }; */ + VM_Function Fun1(64); + Fun1.StartVM(CODE); + printf("VM_2:%x\n", (int*)*(int*)(&Fun1)); + //typedef void(*Fun)(VOID); + //Fun pFun = NULL; + //pFun = (Fun)*((int*)*(int*)(&Fun1)); + //pFun(); + + if (!strcmp(stringIn, "745230")) + { + printf("YOU GOT IT\n"); + } + else + { + printf("SORRY FAIL\n"); + } +#ifdef _DEBUG + printf("%s", stringIn); +#endif + return 0; +} \ No newline at end of file diff --git a/RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/Stack.cpp b/RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/Stack.cpp new file mode 100644 index 0000000..2a5cbf2 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_3/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/C_easy_VMP_3/C_easy_VMP/Stack.h b/RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/Stack.h new file mode 100644 index 0000000..255ae1e --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_3/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 ( %d )\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/C_easy_VMP_3/C_easy_VMP/VM.h b/RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/VM.h new file mode 100644 index 0000000..3f4bd06 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/VM.h @@ -0,0 +1,60 @@ +#include +#include +#include "Stack.h" +#include "Code_Define.h" +class VM_Function:public VM_STACK +{ + typedef struct _VMDATA + { + //DWORD ESP; + DWORD EAX; + DWORD EBX; + //DWORD ECX; + //DWORD EDX; + //DWORD ESI; + //DWORD EDI; + //DWORD EIP; + DWORD OEP; + PDWORD CODE; + PDWORD DATA; + //PBYTE PARAM; + //PBYTE PARAM1; + BOOL SFLAG; //ű־ + BOOL ZFLAG; //־ + + } VMDATA, *PVMDATA; + + typedef void(VM_Function::*ProcessFuncPtr)(PVMDATA); + + //typedef void(VM_Function::*ProcessTest)(); + //ProcessTest calltest; + + std::map ControlTable; + ProcessFuncPtr callname; + +public: + VM_Function(int datax) ; + BOOL StartVM(PDWORD vmCode); + +private: + virtual void CODE_X00_START(); + void CODE_PUSH(PVMDATA vm_data); + void CODE_POP(PVMDATA vm_data); + + + void CODE_ADD(PVMDATA vm_data); + void CODE_SUB(PVMDATA vm_data); + void CODE_XOR(PVMDATA vm_data); + void CODE_JMP(PVMDATA vm_data); + void CODE_JZ(PVMDATA vm_data); + void CODE_CMP(PVMDATA vm_data); + + //CALLָ + void CODE_STRLEN_CALL(PVMDATA vm_data); + void CODE_FAKE_CALL(PVMDATA vm_data); + //⻷仯ָ + void CODE_EXIT(PVMDATA vm_data); + + //Ӻֵ + DWORD VM_RET; +}; \ No newline at end of file diff --git a/RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/VMmain.cpp b/RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/VMmain.cpp new file mode 100644 index 0000000..29c8874 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_3/C_easy_VMP/VMmain.cpp @@ -0,0 +1,349 @@ +#include "VM.h" +VM_Function::VM_Function(int datax) :VM_STACK(datax) +{ + ControlTable[VM_X00_START] = 0x00; + ControlTable[VM_PUSH] = &VM_Function::CODE_PUSH; + + ControlTable[VM_POP] = &VM_Function::CODE_POP; + ControlTable[VM_ADD] = &VM_Function::CODE_ADD; + ControlTable[VM_SUB] = &VM_Function::CODE_SUB; + ControlTable[VM_XOR] = &VM_Function::CODE_XOR; + ControlTable[VM_JMP] = &VM_Function::CODE_JMP; + ControlTable[VM_JZ] = &VM_Function::CODE_JZ; + ControlTable[VM_CMP] = &VM_Function::CODE_CMP; + + ControlTable[VM_STRLEN_CALL] = &VM_Function::CODE_STRLEN_CALL; + ControlTable[VM_EXIT] = &VM_Function::CODE_EXIT; + //ProcessTest xxxx; + //xxxx = &VM_Function::CODE_X00_START; + //printf("VM_1:%x, VM_1:%x\n", xxxx, *(int*)*(int*)(this)); + //calltest = xxxx; + + //(this->*calltest)();//ClallͨһתʵֵģΪʲô + + //typedef void(*Fun)(VOID); + //Fun pFun = NULL; + //pFun = (Fun)*((int*)*(int*)(this)); + //pFun(); + +} +void VM_Function::CODE_X00_START() +{ + printf("VM_Start\n"); +} +void VM_Function::CODE_PUSH(PVMDATA vm_data) +{ + DWORD reg = *((vm_data->CODE)+2); + switch ((*(++vm_data->CODE))&0x70) + { + case PUSH_EAX: + Stack_Push(vm_data->EAX); + break; + case PUSH_EBX: + Stack_Push(vm_data->EBX); + break; + case PUSH_MEM: + Stack_Pop(®); + + switch ((*vm_data->CODE) & 0x7) + { + case PUSH_MEM_BYTE: + reg = *(BYTE*)reg; + break; + case PUSH_MEM_WORD: + reg = *(WORD*)reg; + break; + case PUSH_MEM_DWORD: + reg = *(DWORD*)reg; + break; + default: + break; + } + Stack_Push(reg); + break; + case PUSH_NUM: + Stack_Push(reg); + (vm_data->CODE)++; + break; + default: + break; + } + +} +/* +void VM_Function::CODE_PUSH_EBX(PVMDATA vm_data) +{ + Stack_Push(vm_data->EBX); +} +void VM_Function::CODE_PUSH_NUM( PVMDATA vm_data) +{ + Stack_Push(*(vm_data->DATA)); + (vm_data->DATA)++; +} +void VM_Function::CODE_POP_EBX(PVMDATA vm_data) +{ +Stack_Pop(&(vm_data->EBX)); +}*/ +void VM_Function::CODE_POP(PVMDATA vm_data) +{ + DWORD reg = 0; + BYTE DataB = 0; + WORD DataW = 0; + DWORD DataDW = 0; + DWORD Addr = 0; + switch ((*(++vm_data->CODE)) & 0x70) + { + case POP_EAX: + Stack_Pop(&(vm_data->EAX)); + break; + case POP_EBX: + Stack_Pop(&(vm_data->EBX)); + break; + case POP_MEM: + + Stack_Pop(&Addr); + Stack_Pop(®); + + switch ((*vm_data->CODE) & 0x7) + { + case POP_MEM_BYTE: + + _asm + { + push eax + xor eax, eax + mov eax, reg + mov DataB, al + pop eax + } + *(BYTE*)Addr = DataB; + break; + case POP_MEM_WORD: + + _asm + { + push eax + xor eax, eax + mov eax, reg + mov DataW, ax + pop eax + } + *(WORD*)Addr = DataW; + break; + case POP_MEM_DWORD: + + _asm + { + push eax + xor eax, eax + mov eax, reg + mov DataDW,eax + pop eax + } + *(DWORD*)Addr = DataDW; + break; + default: + break; + } + //(vm_data->CODE)++; + break; + case POP_DEL: + Stack_Pop(®); + break; + default: + break; + } + +} + +void VM_Function::CODE_ADD( PVMDATA vm_data) +{ + + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] += reg; + //FLAGı + vm_data->ZFLAG = ((S->vmStack[S->TopOfStack]) == 0); + vm_data->SFLAG = ((S->vmStack[S->TopOfStack]) < 0); +} +void VM_Function::CODE_SUB(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] -= reg; + //FLAGı + vm_data->ZFLAG = ((S->vmStack[S->TopOfStack]) == 0); + vm_data->SFLAG = ((S->vmStack[S->TopOfStack]) & 0x80000000); +} +void VM_Function::CODE_XOR(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] ^= reg; + +} +void VM_Function::CODE_JMP( PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(® ); + (vm_data->CODE)++; + if (Jump_From_EIP == *(vm_data->CODE)) + vm_data->CODE = (vm_data->CODE) + (reg); + if (Jump_From_OEP == *(vm_data->CODE)) + vm_data->CODE = (PDWORD)(vm_data->OEP) + (reg); + +} +void VM_Function::CODE_JZ( PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + (vm_data->CODE)++; + if (vm_data->ZFLAG) + { + if (Jump_From_EIP == *(vm_data->CODE)) + vm_data->CODE = (vm_data->CODE) + (reg); + if (Jump_From_OEP == *(vm_data->CODE)) + vm_data->CODE = (PDWORD)(vm_data->OEP) + (reg); + + vm_data->ZFLAG = 0; + } + +} +void VM_Function::CODE_CMP(PVMDATA vm_data) +{ + DWORD reg = NULL; + reg = (S->vmStack[(S->TopOfStack) - 1]) - (S->vmStack[S->TopOfStack]); + vm_data->ZFLAG = (reg == 0); + +} +/* +void VM_Function::CODE_BYTE_MEM_GET(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + reg = *(BYTE*)reg; + Stack_Push(reg); +} +void VM_Function::CODE_BYTE_MEM_SET(PVMDATA vm_data) +{ + DWORD reg = NULL; + DWORD Addr = NULL; + BYTE Data = NULL; + Stack_Pop(&Addr); //result + Stack_Pop(®);//address + _asm + { + push eax + xor eax, eax + mov eax, reg + mov Data,al + pop eax + + } + *(BYTE*)Addr = Data; +}*/ +void VM_Function::CODE_STRLEN_CALL(PVMDATA vm_data) +{ + DWORD reg = NULL; + DWORD STRLEN_RET = 0; + Stack_Pop(®); + STRLEN_RET = strlen((char*)(reg)); + Stack_Push(STRLEN_RET); +} +void VM_Function::CODE_FAKE_CALL(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + StartVM((PDWORD)reg); + Stack_Push(VM_RET); +} +void VM_Function::CODE_EXIT(PVMDATA vm_data) +{ + //free(xxx->vmStack); + //free(xxx); + vm_data->CODE = 0x0; + +} +// +BOOL VM_Function::StartVM(PDWORD vmCode) +{ + VMDATA vm_data; + //Stack vm_Stack = CreateVmStack(64); + + vm_data.OEP = (DWORD)vmCode; + vm_data.CODE = vmCode; + //vm_data.DATA = vmData; + //vm_data.PARAM = vmparam; + //vm_data.PARAM1 = vmparam1; + vm_data.EAX = 0; + vm_data.EBX = 0; + //vm_data.ECX = 0; + //vm_data.EDX = 0; + //vm_data.EDI = 0; + //vm_data.ESI = 0; + //vm_data.ESP = 0; + vm_data.SFLAG = FALSE; + vm_data.ZFLAG = FALSE; + + + while (vm_data.CODE++) + { + DWORD XXXX = *(vm_data.CODE); + callname = ControlTable[*(vm_data.CODE)]; + (this->*callname)(&vm_data); + + /*switch (*(vm_data.CODE)) + { + case VM_PUSH_EAX: + CODE_PUSH_EAX(&vm_data); + break; + case VM_POP_EAX: + CODE_POP_EAX(&vm_data); + break; + case VM_PUSH_EBX: + CODE_PUSH_EBX(&vm_data); + break; + case VM_POP_EBX: + CODE_POP_EBX(&vm_data); + break; + case VM_PUSH_NUM: + CODE_PUSH_NUM(&vm_data); + break; + case VM_ADD: + CODE_ADD(&vm_data); + break; + case VM_SUB: + CODE_SUB(&vm_data); + break; + case VM_XOR: + CODE_XOR(&vm_data); + break; + case VM_JMP: + CODE_JMP(&vm_data); + break; + case VM_JZ: + CODE_JZ(&vm_data); + break; + + case VM_STRLEN_CALL: + CODE_STRLEN_CALL(&vm_data); + break; + case VM_CMP: + CODE_CMP(&vm_data); + break; + case VM_BYTE_MEM_GET: + CODE_BYTE_MEM_GET(&vm_data); + break; + case VM_BYTE_MEM_SET: + CODE_BYTE_MEM_SET(&vm_data); + break; + case VM_EXIT: + CODE_EXIT(&vm_data); + return TRUE; + default: + break; + }*/ + + } + return FALSE; +} \ No newline at end of file diff --git "a/RE-HCTF_450/C_easy_VMP_3/\344\273\243\347\240\201\344\277\256\346\224\271\347\211\210\346\234\2543.txt" "b/RE-HCTF_450/C_easy_VMP_3/\344\273\243\347\240\201\344\277\256\346\224\271\347\211\210\346\234\2543.txt" new file mode 100644 index 0000000..8b055fa --- /dev/null +++ "b/RE-HCTF_450/C_easy_VMP_3/\344\273\243\347\240\201\344\277\256\346\224\271\347\211\210\346\234\2543.txt" @@ -0,0 +1,9 @@ +ԭͬ +ı䣺 +.ָʹð3ַָ +.⻯ѭ + + +޸ģ +ֽ벻ٴͷأмأΪݻӺ +VM_DATAɾVM_RETVM_CALLķ \ No newline at end of file diff --git a/RE-HCTF_450/C_easy_VMP_4/C_easy_VMP.sln b/RE-HCTF_450/C_easy_VMP_4/C_easy_VMP.sln new file mode 100644 index 0000000..97e6793 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_4/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/C_easy_VMP_4/C_easy_VMP/C_easy_VMP.vcxproj b/RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/C_easy_VMP.vcxproj new file mode 100644 index 0000000..5e5a35b --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_4/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/C_easy_VMP_4/C_easy_VMP/C_easy_VMP.vcxproj.filters b/RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/C_easy_VMP.vcxproj.filters new file mode 100644 index 0000000..3b2d11d --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_4/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/C_easy_VMP_4/C_easy_VMP/Code_Define.h b/RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/Code_Define.h new file mode 100644 index 0000000..fd78d0e --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_4/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, + +#ifdef _DEBUG + VM_DEBUG_BREAK, +#endif + VM_STRLEN_CALL,//CALL룿 + VM_FAKE_CALL + + + +}; +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/C_easy_VMP_4/C_easy_VMP/MainEntry.cpp b/RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/MainEntry.cpp new file mode 100644 index 0000000..3dfc1c1 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/MainEntry.cpp @@ -0,0 +1,264 @@ +#include +#include +#include "Stack.h" +#include "VM.h" + +int main() +{ + + char Check_HCTF[] = "\x7b\x70\x6a\x67\x72\x73\x75\x55\x44\x32\x48\x50\x11\x12\x13\x14\x15"; +#ifdef _DEBUG + char stringIn[] = "HCTF{123456789123456789}"; + printf("addr1 = %x \n", stringIn); + printf("addr2 = %d \n", Check_HCTF); +#else + char stringIn[40] = {0}; + scanf_s("%s", stringIn, 40); +#endif + /* + DWORD CODE[] = + { + VM_X00_START, + VM_PUSH, PUSH_NUM, (DWORD)stringIn, //NUM1 push addr of input Str + + VM_POP,POP_EBX, + VM_PUSH,PUSH_EBX, //EBX = ADDR STR + + VM_STRLEN_CALL, //pop addr, call strlen, push result + + VM_PUSH, PUSH_NUM, 0x0, //NUNM2 push 0x0 i = 0 + 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,0x6, //num push 6 (6) + VM_XOR, //pop 6,top xor 6 + + 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 + VM_EXIT }; + */ + DWORD CODE[] = + { + /////////////////////////Data and function///////////////////// + VM_EXIT, + VM_EXIT, + /////////////////////////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,0x0, + 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,0,// + VM_JMP,Jump_From_EIP, + + VM_DEBUG_BREAK, + + + + + + + VM_EXIT + + + + + + }; + VM_Function Fun1(64); + Fun1.StartVM(CODE+2); + /*printf("VM_2:%x\n", (int*)*(int*)(&Fun1)); + + if (!strcmp(stringIn, "745230")) + { + printf("YOU GOT IT\n"); + } + else + { + printf("SORRY FAIL\n"); + }*/ +#ifdef _DEBUG + printf("%s\n", stringIn); + for (int i = 0; i < strlen(stringIn); i++) + { + printf("%3d ( %3x ) ( %3c )\n", i, stringIn[i], stringIn[i]); + } +#endif + return 0; +} \ No newline at end of file diff --git a/RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/Stack.cpp b/RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/Stack.cpp new file mode 100644 index 0000000..2a5cbf2 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_4/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/C_easy_VMP_4/C_easy_VMP/Stack.h b/RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/Stack.h new file mode 100644 index 0000000..4c75167 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_4/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/C_easy_VMP_4/C_easy_VMP/VM.h b/RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/VM.h new file mode 100644 index 0000000..c79459c --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/VM.h @@ -0,0 +1,62 @@ +#include +#include +#include "Stack.h" +#include "Code_Define.h" +class VM_Function:public VM_STACK +{ + typedef struct _VMDATA + { + + DWORD EAX; + DWORD EBX; + + DWORD OEP; + PDWORD CODE; + PDWORD DATA; + + BOOL SFLAG; //ű־ + BOOL ZFLAG; //־ + + } VMDATA, *PVMDATA; + + typedef void(VM_Function::*ProcessFuncPtr)(PVMDATA); + + //typedef void(VM_Function::*ProcessTest)(); + //ProcessTest calltest; + + std::map ControlTable; + ProcessFuncPtr callname; + +public: + VM_Function(int datax) ; + BOOL StartVM(PDWORD vmCode); + +private: + virtual void CODE_X00_START(); + void CODE_PUSH(PVMDATA vm_data); + void CODE_POP(PVMDATA vm_data); + + + void CODE_ADD(PVMDATA vm_data); + void CODE_SUB(PVMDATA vm_data); + void CODE_XOR(PVMDATA vm_data); + void CODE_JMP(PVMDATA vm_data); + void CODE_JZ(PVMDATA vm_data); + void CODE_CMP(PVMDATA vm_data); + //߼ָ + void CODE_SHR(PVMDATA vm_data); + void CODE_SHL(PVMDATA vm_data); + void CODE_AND(PVMDATA vm_data); + void CODE_OR(PVMDATA vm_data); + + //CALLָ + void CODE_STRLEN_CALL(PVMDATA vm_data); + void CODE_FAKE_CALL(PVMDATA vm_data); + //⻷仯ָ + void CODE_EXIT(PVMDATA vm_data); +#ifdef _DEBUG + void CODE_DBG_BREAK(PVMDATA vm_data); +#endif + //Ӻֵ + DWORD VM_RET; +}; \ No newline at end of file diff --git a/RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/VMmain.cpp b/RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/VMmain.cpp new file mode 100644 index 0000000..94c6ce4 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_4/C_easy_VMP/VMmain.cpp @@ -0,0 +1,287 @@ +#include "VM.h" +VM_Function::VM_Function(int datax) :VM_STACK(datax) +{ + ControlTable[VM_X00_START] = 0x00; + ControlTable[VM_PUSH] = &VM_Function::CODE_PUSH; + + ControlTable[VM_POP] = &VM_Function::CODE_POP; + ControlTable[VM_ADD] = &VM_Function::CODE_ADD; + ControlTable[VM_SUB] = &VM_Function::CODE_SUB; + ControlTable[VM_XOR] = &VM_Function::CODE_XOR; + ControlTable[VM_JMP] = &VM_Function::CODE_JMP; + ControlTable[VM_JZ] = &VM_Function::CODE_JZ; + ControlTable[VM_CMP] = &VM_Function::CODE_CMP; + + ControlTable[VM_SHR] = &VM_Function::CODE_SHR; + ControlTable[VM_SHL] = &VM_Function::CODE_SHL; + ControlTable[VM_AND] = &VM_Function::CODE_AND; + ControlTable[VM_OR] = &VM_Function::CODE_OR; + + ControlTable[VM_STRLEN_CALL] = &VM_Function::CODE_STRLEN_CALL; + ControlTable[VM_EXIT] = &VM_Function::CODE_EXIT; + +#ifdef _DEBUG + ControlTable[VM_DEBUG_BREAK] = &VM_Function::CODE_DBG_BREAK; +#endif + +} +#ifdef _DEBUG +void VM_Function::CODE_DBG_BREAK(PVMDATA vm_data) +{ + printf("\n===== VM Debug BreakPoint =====\n"); + Debug_PrintStack(); + printf(" EAX: %x\n EBX: %x\n Zflag: %d\n Sflag: %d\n", vm_data->EAX, vm_data->EBX, vm_data->ZFLAG, vm_data->SFLAG); + getchar(); +} +#endif +void VM_Function::CODE_X00_START() +{ + printf("VM_Start\n"); +} +void VM_Function::CODE_PUSH(PVMDATA vm_data) +{ + DWORD reg = *((vm_data->CODE)+2); + switch ((*(++vm_data->CODE))&0x70) + { + case PUSH_EAX: + Stack_Push(vm_data->EAX); + break; + case PUSH_EBX: + Stack_Push(vm_data->EBX); + break; + case PUSH_MEM: + Stack_Pop(®); + + switch ((*vm_data->CODE) & 0x7) + { + case PUSH_MEM_BYTE: + reg = *(BYTE*)reg; + break; + case PUSH_MEM_WORD: + reg = *(WORD*)reg; + break; + case PUSH_MEM_DWORD: + reg = *(DWORD*)reg; + break; + default: + break; + } + Stack_Push(reg); + break; + case PUSH_NUM: + Stack_Push(reg); + (vm_data->CODE)++; + break; + default: + break; + } + +} + +void VM_Function::CODE_POP(PVMDATA vm_data) +{ + DWORD reg = 0; + BYTE DataB = 0; + WORD DataW = 0; + DWORD DataDW = 0; + DWORD Addr = 0; + switch ((*(++vm_data->CODE)) & 0x70) + { + case POP_EAX: + Stack_Pop(&(vm_data->EAX)); + break; + case POP_EBX: + Stack_Pop(&(vm_data->EBX)); + break; + case POP_MEM: + + Stack_Pop(&Addr); + Stack_Pop(®); + + switch ((*vm_data->CODE) & 0x7) + { + case POP_MEM_BYTE: + + _asm + { + push eax + xor eax, eax + mov eax, reg + mov DataB, al + pop eax + } + *(BYTE*)Addr = DataB; + break; + case POP_MEM_WORD: + + _asm + { + push eax + xor eax, eax + mov eax, reg + mov DataW, ax + pop eax + } + *(WORD*)Addr = DataW; + break; + case POP_MEM_DWORD: + + _asm + { + push eax + xor eax, eax + mov eax, reg + mov DataDW,eax + pop eax + } + *(DWORD*)Addr = DataDW; + break; + default: + break; + } + //(vm_data->CODE)++; + break; + case POP_DEL: + Stack_Pop(®); + break; + default: + break; + } + +} + +void VM_Function::CODE_ADD( PVMDATA vm_data) +{ + + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] += reg; + //FLAGı + vm_data->ZFLAG = ((S->vmStack[S->TopOfStack]) == 0); + vm_data->SFLAG = ((S->vmStack[S->TopOfStack]) < 0); +} +void VM_Function::CODE_SUB(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] -= reg; + //FLAGı + vm_data->ZFLAG = ((S->vmStack[S->TopOfStack]) == 0); + vm_data->SFLAG = ((S->vmStack[S->TopOfStack]) & 0x80000000); +} +void VM_Function::CODE_XOR(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] ^= reg; + +} +void VM_Function::CODE_SHR(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] = S->vmStack[S->TopOfStack] >> reg; +} +void VM_Function::CODE_SHL(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] = S->vmStack[S->TopOfStack] << reg; +} +void VM_Function::CODE_OR(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] |= reg; +} +void VM_Function::CODE_AND(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] &= reg; +} +void VM_Function::CODE_JMP( PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(® ); + (vm_data->CODE)++; + if (Jump_From_EIP == *(vm_data->CODE)) + vm_data->CODE = (vm_data->CODE) + (reg); + else if (Jump_From_OEP == *(vm_data->CODE)) + vm_data->CODE = (PDWORD)(vm_data->OEP) + (reg); + +} +void VM_Function::CODE_JZ( PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + (vm_data->CODE)++; + if (vm_data->ZFLAG) + { + if (Jump_From_EIP == *(vm_data->CODE)) + vm_data->CODE = (vm_data->CODE) + (reg); + else if (Jump_From_OEP == *(vm_data->CODE)) + vm_data->CODE = (PDWORD)(vm_data->OEP) + (reg); + + vm_data->ZFLAG = 0; + } + +} +void VM_Function::CODE_CMP(PVMDATA vm_data) +{ + DWORD reg = NULL; + reg = (S->vmStack[(S->TopOfStack) - 1]) - (S->vmStack[S->TopOfStack]); + vm_data->ZFLAG = (reg == 0); + +} + +void VM_Function::CODE_STRLEN_CALL(PVMDATA vm_data) +{ + DWORD reg = NULL; + DWORD STRLEN_RET = 0; + Stack_Pop(®); + STRLEN_RET = strlen((char*)(reg)); + Stack_Push(STRLEN_RET); +} +void VM_Function::CODE_FAKE_CALL(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + StartVM((PDWORD)reg); + Stack_Push(VM_RET); +} +void VM_Function::CODE_EXIT(PVMDATA vm_data) +{ + vm_data->CODE = 0x0; +#ifdef _DEBUG + Debug_PrintStack(); +#endif +} +// +BOOL VM_Function::StartVM(PDWORD vmCode) +{ + VMDATA vm_data; + //Stack vm_Stack = CreateVmStack(64); + + vm_data.OEP = (DWORD)(vmCode-2); + vm_data.CODE = vmCode; + + vm_data.EAX = 0; + vm_data.EBX = 0; + //vm_data.ECX = 0; + + vm_data.SFLAG = FALSE; + vm_data.ZFLAG = FALSE; + + + while (vm_data.CODE++) + { + DWORD XXXX = *(vm_data.CODE); + callname = ControlTable[*(vm_data.CODE)]; + (this->*callname)(&vm_data); + + + + } + return FALSE; +} \ No newline at end of file diff --git "a/RE-HCTF_450/C_easy_VMP_4/\344\273\243\347\240\201\344\277\256\346\224\271\347\211\210\346\234\2544.txt" "b/RE-HCTF_450/C_easy_VMP_4/\344\273\243\347\240\201\344\277\256\346\224\271\347\211\210\346\234\2544.txt" new file mode 100644 index 0000000..b2434ac --- /dev/null +++ "b/RE-HCTF_450/C_easy_VMP_4/\344\273\243\347\240\201\344\277\256\346\224\271\347\211\210\346\234\2544.txt" @@ -0,0 +1,15 @@ + +ڸֵ۵ԭ򣬵4ɰ汻޷ԭˣֱӿ + +ԭͬ +ı䣺 +Ҫ㷨 + +⻯ѭдʲô +ʹһЩ룿أ +׼ָ (δ) +׻ָ δɣ + +޸ģ +ֽ벻ٴͷأмأΪݻӺ +VM_DATAɾVM_RETVM_CALLķ diff --git "a/RE-HCTF_450/C_easy_VMP_4/\344\273\243\347\240\201\350\231\232\346\213\237\347\272\246\345\256\232.txt" "b/RE-HCTF_450/C_easy_VMP_4/\344\273\243\347\240\201\350\231\232\346\213\237\347\272\246\345\256\232.txt" new file mode 100644 index 0000000..f3c488a --- /dev/null +++ "b/RE-HCTF_450/C_easy_VMP_4/\344\273\243\347\240\201\350\231\232\346\213\237\347\272\246\345\256\232.txt" @@ -0,0 +1,28 @@ +Լάһջ뼸Ĵ־λ⻯롣 +⻯ԭ +⣺ +mov-->push,pop +add-->push,push,VM_add,pop +jmp-->push ,jmp code + +cmpָsubָadd棿 + +˫ָԼ +popһջкһջڴ + +αָԶָ +ĿѶȽ޸ġ + +callָ +ԼװС + +ָ +޴롣Ҫʱ˳⻯ԭá + + + + +⻯ +˼·1ret +˼·2 +˼·3ָ͡ \ No newline at end of file diff --git a/RE-HCTF_450/C_easy_VMP_5/C_easy_VMP.sln b/RE-HCTF_450/C_easy_VMP_5/C_easy_VMP.sln new file mode 100644 index 0000000..97e6793 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_5/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/C_easy_VMP_5/C_easy_VMP/C_easy_VMP.vcxproj b/RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/C_easy_VMP.vcxproj new file mode 100644 index 0000000..5e5a35b --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_5/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/C_easy_VMP_5/C_easy_VMP/C_easy_VMP.vcxproj.filters b/RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/C_easy_VMP.vcxproj.filters new file mode 100644 index 0000000..3b2d11d --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_5/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/C_easy_VMP_5/C_easy_VMP/Code_Define.h b/RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/Code_Define.h new file mode 100644 index 0000000..ddbc346 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_5/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/C_easy_VMP_5/C_easy_VMP/MainEntry.cpp b/RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/MainEntry.cpp new file mode 100644 index 0000000..47c621a --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/MainEntry.cpp @@ -0,0 +1,883 @@ +#include +#include +#include "Stack.h" +#include "VM.h" + +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\x34\x72\x6e\x65\x36"; + char Cmp_check_2[] = "\x38\x36\x33\x6e\x74\x36\x65"; +#ifdef _DEBUG + char stringIn[] = "HCTF{123412341234123489}"; + printf("addr1 = %x \n", stringIn); + printf("addr2 = %d \n", Check_HCTF); +#else + char stringIn[40] = {0}; + scanf_s("%s", stringIn, 40); +#endif + /* + DWORD CODE[] = + { + VM_X00_START, + VM_PUSH, PUSH_NUM, (DWORD)stringIn, //NUM1 push addr of input Str + + VM_POP,POP_EBX, + VM_PUSH,PUSH_EBX, //EBX = ADDR STR + + VM_STRLEN_CALL, //pop addr, call strlen, push result + + VM_PUSH, PUSH_NUM, 0x0, //NUNM2 push 0x0 i = 0 + 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,0x6, //num push 6 (6) + VM_XOR, //pop 6,top xor 6 + + 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 + VM_EXIT }; + */ + 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, + VM_POP, POP_DEL, + VM_PUSH, PUSH_NUM, 0x8, + VM_JMP, Jump_From_EIP,//JMP_TO_CODE + //ݶ + 0x32, + 0x3C, + 0x41, + 0x43, + 0x36, + 0x40, + 0x48, + 0xFF, + // + VM_PUSH, PUSH_NUM, (DWORD)CALL_END_4, + VM_PUSH, PUSH_NUM, 64,//datasec!! + VM_ADD,//ݶ + VM_POP, POP_EAX,//EAX = STRIN + + 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_DWORD | PUSH_MEM, + VM_CMP, + VM_POP, POP_DEL, + VM_POP, POP_DEL, + VM_PUSH, PUSH_NUM, 0x5, + VM_JZ, Jump_From_EIP, + //BUG + VM_PUSH, PUSH_NUM, 0x0, + VM_JMP, Jump_From_OEP, + // + VM_PUSH, PUSH_NUM, 0x4, + VM_PUSH, PUSH_EBX, + VM_ADD, + VM_PUSH, PUSH_NUM, 28, + 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,//BACK + VM_JMP,Jump_From_EIP, + VM_EXIT_SUCCESS, + 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,//1 + 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,//1 + VM_JMP,Jump_From_EIP, + VM_POP,POP_DEL, + VM_POP,POP_DEL, + ////// + VM_PUSH,PUSH_NUM,0x1b,//@1 + 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, 0x1A,//@2 + 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, 0x16,//@3 + 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, 0x11,//@4 + 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, 0x10,//@5 + 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, 0x13,//@6 + 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_EXIT_SUCCESS, + }; + + VM_Function Fun1(64); + Fun1.StartVM(CODE+2); + /*printf("VM_2:%x\n", (int*)*(int*)(&Fun1)); + + if (!strcmp(stringIn, "745230")) + { + printf("YOU GOT IT\n"); + } + else + { + printf("SORRY FAIL\n"); + }*/ +#ifdef _DEBUG + printf("%s\n", stringIn); + for (int i = 0; i < strlen(stringIn); i++) + { + printf("%3d ( %3x ) ( %3c )\n", i, stringIn[i], stringIn[i]); + } +#endif + printf("====================================\n"); + printf("============YOU GOT IT!=============\n"); + printf("====================================\n"); + return 0; +} \ No newline at end of file diff --git a/RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/Stack.cpp b/RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/Stack.cpp new file mode 100644 index 0000000..2a5cbf2 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_5/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/C_easy_VMP_5/C_easy_VMP/Stack.h b/RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/Stack.h new file mode 100644 index 0000000..4c75167 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_5/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/C_easy_VMP_5/C_easy_VMP/VM.h b/RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/VM.h new file mode 100644 index 0000000..b30ef88 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/VM.h @@ -0,0 +1,63 @@ +#include +#include +#include "Stack.h" +#include "Code_Define.h" +class VM_Function:public VM_STACK +{ + typedef struct _VMDATA + { + + DWORD EAX; + DWORD EBX; + + DWORD OEP; + PDWORD CODE; + PDWORD DATA; + + BOOL SFLAG; //ű־ + BOOL ZFLAG; //־ + + } VMDATA, *PVMDATA; + + typedef void(VM_Function::*ProcessFuncPtr)(PVMDATA); + + //typedef void(VM_Function::*ProcessTest)(); + //ProcessTest calltest; + + std::map ControlTable; + ProcessFuncPtr callname; + +public: + VM_Function(int datax) ; + BOOL StartVM(PDWORD vmCode); + +private: + virtual void CODE_X00_START(); + void CODE_PUSH(PVMDATA vm_data); + void CODE_POP(PVMDATA vm_data); + + + void CODE_ADD(PVMDATA vm_data); + void CODE_SUB(PVMDATA vm_data); + void CODE_XOR(PVMDATA vm_data); + void CODE_JMP(PVMDATA vm_data); + void CODE_JZ(PVMDATA vm_data); + void CODE_CMP(PVMDATA vm_data); + //߼ָ + void CODE_SHR(PVMDATA vm_data); + void CODE_SHL(PVMDATA vm_data); + void CODE_AND(PVMDATA vm_data); + void CODE_OR(PVMDATA vm_data); + + //CALLָ + void CODE_STRLEN_CALL(PVMDATA vm_data); + void CODE_FAKE_CALL(PVMDATA vm_data); + //⻷仯ָ + void CODE_EXIT_SUCCESS(PVMDATA vm_data); + void CODE_EXIT_FAIL(PVMDATA vm_data); +#ifdef _DEBUG + void CODE_DBG_BREAK(PVMDATA vm_data); +#endif + //Ӻֵ + DWORD VM_RET; +}; \ No newline at end of file diff --git a/RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/VMmain.cpp b/RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/VMmain.cpp new file mode 100644 index 0000000..af66002 --- /dev/null +++ b/RE-HCTF_450/C_easy_VMP_5/C_easy_VMP/VMmain.cpp @@ -0,0 +1,303 @@ +#include "VM.h" +VM_Function::VM_Function(int datax) :VM_STACK(datax) +{ + ControlTable[VM_X00_START] = 0x00; + ControlTable[VM_PUSH] = &VM_Function::CODE_PUSH; + + ControlTable[VM_POP] = &VM_Function::CODE_POP; + ControlTable[VM_ADD] = &VM_Function::CODE_ADD; + ControlTable[VM_SUB] = &VM_Function::CODE_SUB; + ControlTable[VM_XOR] = &VM_Function::CODE_XOR; + ControlTable[VM_JMP] = &VM_Function::CODE_JMP; + ControlTable[VM_JZ] = &VM_Function::CODE_JZ; + ControlTable[VM_CMP] = &VM_Function::CODE_CMP; + + ControlTable[VM_SHR] = &VM_Function::CODE_SHR; + ControlTable[VM_SHL] = &VM_Function::CODE_SHL; + ControlTable[VM_AND] = &VM_Function::CODE_AND; + ControlTable[VM_OR] = &VM_Function::CODE_OR; + + ControlTable[VM_STRLEN_CALL] = &VM_Function::CODE_STRLEN_CALL; + ControlTable[VM_FAKE_CALL] = &VM_Function::CODE_FAKE_CALL; + ControlTable[VM_EXIT_SUCCESS] = &VM_Function::CODE_EXIT_SUCCESS; + ControlTable[VM_EXIT_FAIL] = &VM_Function::CODE_EXIT_FAIL; + +#ifdef _DEBUG + ControlTable[VM_DEBUG_BREAK] = &VM_Function::CODE_DBG_BREAK; +#endif + +} +#ifdef _DEBUG +void VM_Function::CODE_DBG_BREAK(PVMDATA vm_data) +{ + printf("\n===== VM Debug BreakPoint =====\n"); + Debug_PrintStack(); + printf(" EAX: %x\n EBX: %x\n Zflag: %d\n Sflag: %d\n", vm_data->EAX, vm_data->EBX, vm_data->ZFLAG, vm_data->SFLAG); + getchar(); +} +#endif +void VM_Function::CODE_X00_START() +{ + printf("VM_Start\n"); +} +void VM_Function::CODE_PUSH(PVMDATA vm_data) +{ + DWORD reg = *((vm_data->CODE)+2); + switch ((*(++vm_data->CODE))&0x70) + { + case PUSH_EAX: + Stack_Push(vm_data->EAX); + break; + case PUSH_EBX: + Stack_Push(vm_data->EBX); + break; + case PUSH_MEM: + Stack_Pop(®); + + switch ((*vm_data->CODE) & 0x7) + { + case PUSH_MEM_BYTE: + reg = *(BYTE*)reg; + break; + case PUSH_MEM_WORD: + reg = *(WORD*)reg; + break; + case PUSH_MEM_DWORD: + reg = *(DWORD*)reg; + break; + default: + break; + } + Stack_Push(reg); + break; + case PUSH_NUM: + Stack_Push(reg); + (vm_data->CODE)++; + break; + default: + break; + } + +} + +void VM_Function::CODE_POP(PVMDATA vm_data) +{ + DWORD reg = 0; + BYTE DataB = 0; + WORD DataW = 0; + DWORD DataDW = 0; + DWORD Addr = 0; + switch ((*(++vm_data->CODE)) & 0x70) + { + case POP_EAX: + Stack_Pop(&(vm_data->EAX)); + break; + case POP_EBX: + Stack_Pop(&(vm_data->EBX)); + break; + case POP_MEM: + + Stack_Pop(&Addr); + Stack_Pop(®); + + switch ((*vm_data->CODE) & 0x7) + { + case POP_MEM_BYTE: + + _asm + { + push eax + xor eax, eax + mov eax, reg + mov DataB, al + pop eax + } + *(BYTE*)Addr = DataB; + break; + case POP_MEM_WORD: + + _asm + { + push eax + xor eax, eax + mov eax, reg + mov DataW, ax + pop eax + } + *(WORD*)Addr = DataW; + break; + case POP_MEM_DWORD: + + _asm + { + push eax + xor eax, eax + mov eax, reg + mov DataDW,eax + pop eax + } + *(DWORD*)Addr = DataDW; + break; + default: + break; + } + //(vm_data->CODE)++; + break; + case POP_DEL: + Stack_Pop(®); + break; + default: + break; + } + +} + +void VM_Function::CODE_ADD( PVMDATA vm_data) +{ + + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] += reg; + //FLAGı + vm_data->ZFLAG = ((S->vmStack[S->TopOfStack]) == 0); + vm_data->SFLAG = ((S->vmStack[S->TopOfStack]) < 0); +} +void VM_Function::CODE_SUB(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] -= reg; + //FLAGı + vm_data->ZFLAG = ((S->vmStack[S->TopOfStack]) == 0); + vm_data->SFLAG = ((S->vmStack[S->TopOfStack]) & 0x80000000); +} +void VM_Function::CODE_XOR(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] ^= reg; + +} +void VM_Function::CODE_SHR(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] = S->vmStack[S->TopOfStack] >> reg; +} +void VM_Function::CODE_SHL(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] = S->vmStack[S->TopOfStack] << reg; +} +void VM_Function::CODE_OR(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] |= reg; +} +void VM_Function::CODE_AND(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + S->vmStack[S->TopOfStack] &= reg; +} +void VM_Function::CODE_JMP( PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(® ); + (vm_data->CODE)++; + if (Jump_From_EIP == *(vm_data->CODE)) + vm_data->CODE = (vm_data->CODE) + (reg); + else if (Jump_From_OEP == *(vm_data->CODE)) + vm_data->CODE = (PDWORD)(vm_data->OEP) + (reg); + +} +void VM_Function::CODE_JZ( PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + (vm_data->CODE)++; + if (vm_data->ZFLAG) + { + if (Jump_From_EIP == *(vm_data->CODE)) + vm_data->CODE = (vm_data->CODE) + (reg); + else if (Jump_From_OEP == *(vm_data->CODE)) + vm_data->CODE = (PDWORD)(vm_data->OEP) + (reg); + + vm_data->ZFLAG = 0; + } + +} +void VM_Function::CODE_CMP(PVMDATA vm_data) +{ + DWORD reg = NULL; + reg = (S->vmStack[(S->TopOfStack) - 1]) - (S->vmStack[S->TopOfStack]); + vm_data->ZFLAG = (reg == 0); + +} + +void VM_Function::CODE_STRLEN_CALL(PVMDATA vm_data) +{ + DWORD reg = NULL; + DWORD STRLEN_RET = 0; + Stack_Pop(®); + STRLEN_RET = strlen((char*)(reg)); + Stack_Push(STRLEN_RET); +} +void VM_Function::CODE_FAKE_CALL(PVMDATA vm_data) +{ + DWORD reg = NULL; + Stack_Pop(®); + StartVM((PDWORD)reg+2); + Stack_Push(VM_RET); +} +void VM_Function::CODE_EXIT_SUCCESS(PVMDATA vm_data) +{ + vm_data->CODE = 0x0; +#ifdef _DEBUG + Debug_PrintStack(); +#endif +} +void VM_Function::CODE_EXIT_FAIL(PVMDATA vm_data) +{ + vm_data->CODE = 0x0; + printf("Sorry Fail, Try Again\n"); + getchar(); + exit(1); +#ifdef _DEBUG + printf("============END===========\n"); + printf("============END===========\n"); + printf("============END===========\n"); + Debug_PrintStack(); + exit(1); +#endif +} +// +BOOL VM_Function::StartVM(PDWORD vmCode) +{ + VMDATA vm_data; + //Stack vm_Stack = CreateVmStack(64); + + vm_data.OEP = (DWORD)(vmCode-2); + vm_data.CODE = vmCode; + + vm_data.EAX = 0; + vm_data.EBX = 0; + //vm_data.ECX = 0; + + vm_data.SFLAG = FALSE; + vm_data.ZFLAG = FALSE; + + + while (vm_data.CODE++) + { + DWORD XXXX = *(vm_data.CODE); + callname = ControlTable[*(vm_data.CODE)]; + (this->*callname)(&vm_data); + + + + } + return FALSE; +} \ No newline at end of file diff --git "a/RE-HCTF_450/C_easy_VMP_5/\344\273\243\347\240\201\344\277\256\346\224\271\347\211\210\346\234\2545.txt" "b/RE-HCTF_450/C_easy_VMP_5/\344\273\243\347\240\201\344\277\256\346\224\271\347\211\210\346\234\2545.txt" new file mode 100644 index 0000000..4b6e857 --- /dev/null +++ "b/RE-HCTF_450/C_easy_VMP_5/\344\273\243\347\240\201\344\277\256\346\224\271\347\211\210\346\234\2545.txt" @@ -0,0 +1,10 @@ +ԭͬ +ı䣺 +Ҫ +.ȫ⻯󲿷ֵúǷʹnative +.Խܲ +.ʹֽ븴ü +.ǿӽУ鹦 +.дflag==exeɳ + + //ӦɰˣиĸĶ \ No newline at end of file diff --git "a/RE-HCTF_450/C_easy_VMP_5/\344\273\243\347\240\201\350\231\232\346\213\237\347\272\246\345\256\232.txt" "b/RE-HCTF_450/C_easy_VMP_5/\344\273\243\347\240\201\350\231\232\346\213\237\347\272\246\345\256\232.txt" new file mode 100644 index 0000000..f3c488a --- /dev/null +++ "b/RE-HCTF_450/C_easy_VMP_5/\344\273\243\347\240\201\350\231\232\346\213\237\347\272\246\345\256\232.txt" @@ -0,0 +1,28 @@ +Լάһջ뼸Ĵ־λ⻯롣 +⻯ԭ +⣺ +mov-->push,pop +add-->push,push,VM_add,pop +jmp-->push ,jmp code + +cmpָsubָadd棿 + +˫ָԼ +popһջкһջڴ + +αָԶָ +ĿѶȽ޸ġ + +callָ +ԼװС + +ָ +޴롣Ҫʱ˳⻯ԭá + + + + +⻯ +˼·1ret +˼·2 +˼·3ָ͡ \ No newline at end of file diff --git a/RE-HCTF_450/ReadMe.txt b/RE-HCTF_450/ReadMe.txt new file mode 100644 index 0000000..e954319 --- /dev/null +++ b/RE-HCTF_450/ReadMe.txt @@ -0,0 +1,186 @@ +/**/ +//Ŀ˷û +//:VS2013 +/**/ +///////////////////////////////////////////////////////////////////// + +˵Ǹûô̬ģԼʱ򲻶µ뷨Գ6汾ǧڼСʱ + +//////////////////////////////////////////////////////////////////// +飺 +߷ĿԭûôѵģԽԽԾԼɡ +˼·ԴBCTFRE300뺣Ѱ٣ԼάһջһԼָֽ +οϣܲ֡ +//////////////////////////////////////////////////////////////////// +ļ +C_easy_VMP,ʹcԱдdemon +C_easy_VMP_2,c++ˣԭswitchcaseΪһת +C_easy_VMP_3,Żˣʹõʽ +C_easy_VMP_4,˸ָİɰһ޸ĵʱСıˣͱˡ +C_easy_VMP_5,ָɣοx86 +ɰ棺Ŀˣcallָֻ +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// + + +ָֽ +ת + ControlTable[VM_X00_START] = 0x00; + ControlTable[VM_PUSH] = &VM_Function::CODE_PUSH; + + ControlTable[VM_POP] = &VM_Function::CODE_POP; + ControlTable[VM_ADD] = &VM_Function::CODE_ADD; + ControlTable[VM_SUB] = &VM_Function::CODE_SUB; + ControlTable[VM_XOR] = &VM_Function::CODE_XOR; + ControlTable[VM_JMP] = &VM_Function::CODE_JMP; + ControlTable[VM_JZ] = &VM_Function::CODE_JZ; + ControlTable[VM_CMP] = &VM_Function::CODE_CMP; + + ControlTable[VM_SHR] = &VM_Function::CODE_SHR; + ControlTable[VM_SHL] = &VM_Function::CODE_SHL; + ControlTable[VM_AND] = &VM_Function::CODE_AND; + ControlTable[VM_OR] = &VM_Function::CODE_OR; + + ControlTable[VM_STRLEN_CALL] = &VM_Function::CODE_STRLEN_CALL; + ControlTable[VM_FAKE_CALL] = &VM_Function::CODE_FAKE_CALL; + ControlTable[VM_EXIT_SUCCESS] = &VM_Function::CODE_EXIT_SUCCESS; + ControlTable[VM_EXIT_FAIL] = &VM_Function::CODE_EXIT_FAIL; + +#ifdef _DEBUG + ControlTable[VM_DEBUG_BREAK] = &VM_Function::CODE_DBG_BREAK; +#endif + + + +[VM_X00_START] ûõı־ʾһʼ + +[VM_PUSH] +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 + +}; +ջPUSHһݣΪ2Ԫ3Ԫʾ +1.VM_PUSH, PUSH_MEM | PUSH_MEM_BYTE,ջһַȡBYTEַջ +2.VM_PUSH,PUSH_NUM,0x0,ջ0 + +[VM_POP] +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 +};ͬϡ + +[VM_ADD] +ջ2ݣ֮ջ + + +[VM_SUB] +ͬ + + +[VM_XOR] +ͬ + +[VM_JMP] +Ԫ +ջһת +enum Code_JumpFun +{ + Jump_From_EIP = 0x10, //һַΪתַ + Jump_From_OEP = 0X20 //ڵΪתַ +}; +磺 +VM_PUSH,PUSH_NUM,0x0, +VM_JMP,Jump_From_OEP, +ʾͷ + +[VM_JZ] +ͬϣҪжZ־λǷת + + +[VM_CMP] +Ƚջ2ֵZS flagͬx86 + + +[VM_SHR] +ԪһλٳһֵƺŻջС + + +[VM_SHL] +ͬϡ + +[VM_AND] +ͬXOR + +[VM_OR] +ͬXOR + +[VM_STRLEN_CALL] +װstrlen + +[VM_FAKE_CALL] +һµֽ룬ԭֽʹòͬļĴͬջ + + +[VM_EXIT_SUCCESS] +سɹyou got it + + +[VM_EXIT_FAIL] +ʧܣTry again + + +[VM_DEBUG_BREAK] +DebugʱdebugָֽʾջĴ + + +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// + +ʽ +1.ָ +磺 + //ָ// + VM_PUSH,0x1000, + VM_POP,0x1000, +ᱻִֽлִкûκָ + +2.ֽԽ +磺 + ////ҪܵĴ////////////// + 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, + +δȫ0x28ʱԽȻС + + +3. +дˡ + +4.ѭλ +鷳дˡ + +///////////////////////////////////////////////////////////////////////////////// +Դ붼ˡԼ +///////////// diff --git a/RE-HCTF_450/git_fire.bat b/RE-HCTF_450/git_fire.bat new file mode 100644 index 0000000..8ee872b --- /dev/null +++ b/RE-HCTF_450/git_fire.bat @@ -0,0 +1,4 @@ +git add -A +git commit +git push origin master +pause \ No newline at end of file diff --git a/re150/Debug/re200.exe b/re150/Debug/re200.exe new file mode 100644 index 0000000000000000000000000000000000000000..bb2cf52c9c59a0aaba146296eb25499d175c3e88 GIT binary patch literal 154624 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%0AB+ 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 literal 0 HcmV?d00001 diff --git a/re150/re200/9.jpg b/re150/re200/9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..40c7e9be277f5172eb76166dae720c0500886dae GIT binary patch literal 91059 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 +#include +#include +#include + +#include + +#include "resource1.h" diff --git a/re150/re200/Main.cpp b/re150/re200/Main.cpp new file mode 100644 index 0000000..fa003bf --- /dev/null +++ b/re150/re200/Main.cpp @@ -0,0 +1,85 @@ +#include "IncludeAll.h" + +int rou = 0; + +LRESULT CALLBACK DlgProc(HWND hDlg, UINT Message, WPARAM wParam, LPARAM lParam); + +unsigned _stdcall Make_HunTun1(void* param); + +unsigned _stdcall Make_HunTun2(void* param); + +int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd) +{ +#ifdef _DEBUG + FILE *stream; //debugҪһ̨Ϣ + AllocConsole(); + freopen_s(&stream, "CONOUT$", "w", stdout); +#endif + srand((int)time(NULL)); + + //Լ1 + //CheckRemoteDebuggerPresent + if (OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, GetCurrentProcessId()) == NULL) + printf("\n"); + else + { + BOOL judge; + + if (0 == CheckRemoteDebuggerPresent(OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, GetCurrentProcessId()), &judge)) + printf("\n"); + else + { + if (judge == TRUE) + { + // + exit(-1); + } + else + { + // + } + } + } + // + + HANDLE handle_huntun1 = (HANDLE)_beginthreadex(NULL, 0, Make_HunTun1, NULL, NULL, NULL); + if (NULL == handle_huntun1) + { + printf("\n"); + } + HANDLE handle_huntun2 = (HANDLE)_beginthreadex(NULL, 0, Make_HunTun2, NULL, NULL, NULL); + if (NULL == handle_huntun2) + { + CloseHandle(handle_huntun1); + printf("\n"); + } + + DialogBoxW(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)DlgProc); + + CloseHandle(handle_huntun1); + CloseHandle(handle_huntun2); + return 0; +} + +unsigned _stdcall Make_HunTun1(void* param) +{ + for (;;) + { + + rou = 1; + Sleep(10); + + } + return 0; +} +unsigned _stdcall Make_HunTun2(void* param) +{ + for (;;) + { + + rou = 2; + Sleep(10); + + } + return 0; +} \ No newline at end of file diff --git a/re150/re200/MainDlgProc.cpp b/re150/re200/MainDlgProc.cpp new file mode 100644 index 0000000..cae9dc2 --- /dev/null +++ b/re150/re200/MainDlgProc.cpp @@ -0,0 +1,273 @@ +#include "IncludeAll.h" +unsigned _stdcall Check_ThreadProc(void* param); +BOOL Main_Check(char *str); +BOOL CheckHCTF(char *str5,char last); +int FindSpace_MainCheck(char *str, char x, int num); +char chaos = 3; + +char SeriesL[] = "abcdefghijklmnopqrstuvwxyz"; +char SeriesH[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; +int Code1[12] = { 0 }; + +int Maincjeckaaa[] = { 102, 100, 200, 104, 117,117, 20, 11, 104, 21, 104, 18 }; + +volatile char CHECK_1[] = "\x33\x30\x31\x36"; + + +extern int rou; +LRESULT CALLBACK DlgProc(HWND hDlg_MainProc, UINT Message, WPARAM wParam, LPARAM lParam) +{ + static HWND ButtonCheck = NULL; + static HWND EditControl = NULL; + static HANDLE handle_Check = NULL; + static int PS = 0x22; + + char EnterText[30] = { 0 }; + switch (Message) + { + case WM_SETCURSOR: + if ((DWORD)ButtonCheck == wParam) + { + + if (PS == 0x22) + { + MoveWindow(ButtonCheck, 10, 10, 80, 35, TRUE); + PS = 0x15; + } + else if (0x15 == PS) + { + MoveWindow(ButtonCheck, 20, 230, 80, 35, TRUE); + PS = 0x18; + } + else if (0x18 == PS) + { + MoveWindow(ButtonCheck, 350, 230, 80, 35, TRUE); + PS = 0x22; + } + } + break; + + case WM_COMMAND: + if (HIWORD(wParam) == 0) + { + switch (LOWORD(wParam)) + { + case IDC_Button1: + + GetWindowTextA(EditControl, EnterText, 30); + + //check strlen + int x = strlen(EnterText); + if (x != 22) + { + MessageBox(0, L"Try Again", L"Fail", 0); + break; + } + //check HCTF{} + if (FALSE == CheckHCTF(EnterText, EnterText[x-1])) + { + MessageBox(0, L"Try Again", L"Fail", 0); + break; + } + //checkencode + if (FALSE == Main_Check(EnterText)) + { + MessageBox(0, L"Try Again", L"Fail", 0); + break; + } + + //⽼ӽܺ + for (int i = 0; i < 100; i++) + { + + int xor = rou^chaos; + if (xor > 0)//ȥ2 + { + + //xflag Ƚ + + if ((EnterText[17] ^ xor) == CHECK_1[0] && + (EnterText[18] ^ xor) == CHECK_1[1] && + (EnterText[19] ^ xor) == CHECK_1[2] && + (EnterText[20] ^ xor) == CHECK_1[3]) + { + //жϳɹһ׶Σ + int exchange = 0; + //06λ + exchange = Code1[0]; + Code1[0] = Code1[6]; + Code1[6] = exchange; + //38λ + exchange = Code1[3]; + Code1[3] = Code1[8]; + Code1[8] = exchange; + //25λ + exchange = Code1[2]; + Code1[2] = Code1[5]; + Code1[5] = exchange; + //114λ + exchange = Code1[11]; + Code1[11] = Code1[4]; + Code1[4] = exchange; + //ѭбȽ + + for (int a = 0; a < 12; a++) + { + + if (Maincjeckaaa[a] != Code1[a]) + { + MessageBox(0, L"Try Again", L"Fail", 0); + exit(-1); + } + } + //жxorǷΪ2 + if (xor != 2) + { + + break; + } + MessageBox(0, L"YOU GOT IT", L"OK", 0); + exit(0); + break; + } + } + Sleep(20); + } + MessageBox(0, L"Try Again", L"Fail", 0); + + } + } + break; + case WM_INITDIALOG: + ButtonCheck = GetDlgItem(hDlg_MainProc, IDC_Button1); + EditControl = GetDlgItem(hDlg_MainProc, IDC_EDIT2); + //thread1 + handle_Check = (HANDLE)_beginthreadex(NULL, 0, Check_ThreadProc, NULL, NULL, NULL); + if (NULL == handle_Check) + { + printf("\n"); + } + break; + case WM_CLOSE: + CloseHandle(handle_Check); + EndDialog(hDlg_MainProc, 0); + DestroyWindow(hDlg_MainProc); + break; + default: + break; + } + return 0; +} + +unsigned _stdcall Check_ThreadProc(void* param) +{ + for (;;) + { + + _asm + { + push eax + xor eax,eax + mov al, chaos + rol al,2 + mov chaos,al + pop eax + } + + Sleep(10); + } + return 0; +} + +BOOL Main_Check(char *str) +{ + const int count = 12; + char *from = str + 5; + char t0o[30] = {0}; + char *to = t0o; + + + int n = (count + 7) / 8; + switch (count % 8) + { + case 0: do{ + *to++ = *from++; + case 7: *to++ = *from++; + case 6: *to++ = *from++; + case 5: *to++ = *from++; + case 4: *to++ = *from++; + case 3: *to++ = *from++; + case 2: *to++ = *from++; + case 1: *to++ = *from++; + + + } while (--n > 0); + } + + //t0oһα + for (int i = 0; i < count; i++) + { + char xxxx = t0o[i]; + int abs = 0; + if ((xxxx>0x40) && (xxxx < 0x5B)) + { + abs = FindSpace_MainCheck(SeriesH, xxxx, strlen(SeriesH)); + } + else if ((xxxx>0x60) && (xxxx < 0x7B)) + { + abs = FindSpace_MainCheck(SeriesL, xxxx, strlen(SeriesL)); + abs += 100; + } + else if ((xxxx>0xF) && (xxxx < 0x3A)) + { + abs = xxxx - 0x30 + 200; + } + else + { + + return FALSE; + } + Code1[i] = abs; + } + + return TRUE; +} +int FindSpace_MainCheck(char *str, char x, int num) +{ + if (x == *(str + (num / 2))) + return num/2; + else if (x > *(str + (num / 2))) + return (FindSpace_MainCheck(str + (num / 2), x, num-num / 2) + num / 2); + else + return FindSpace_MainCheck(str , x, num / 2); +} +BOOL CheckHCTF(char *str5, char last) +{ + const int strlength = 5; + char stringcpy[6] = { 0 }; + char maomaomao[] = "316754"; + + int cmpxxx[] = { -21, -18, -30, -15, -70, -73 }; + + for (int i = 0; i < strlength; i++) + { + stringcpy[i] = str5[i]; + } + + for (int i = 0; i < strlength; i++) + { + stringcpy[i] = maomaomao[i] - stringcpy[i]; + } + + for (int i = 0; i < strlength; i++) + { + if (stringcpy[i] != cmpxxx[i]) + { + return FALSE; + } + } + if ((maomaomao[strlength] - last) != cmpxxx[strlength]) + return FALSE; + + return TRUE; +} \ No newline at end of file diff --git a/re150/re200/Rand.cpp b/re150/re200/Rand.cpp new file mode 100644 index 0000000..617b6d5 --- /dev/null +++ b/re150/re200/Rand.cpp @@ -0,0 +1,11 @@ +#include "IncludeAll.h" +int M_Rand() +{ + const int RandMax = 0x5; + const int RandMin = 0x1; + int ret = 0; + + for (; ret < RandMin;) + ret = (int)(rand() % (RandMax + 1)); + return ret; +} \ No newline at end of file diff --git a/re150/re200/re200.aps b/re150/re200/re200.aps new file mode 100644 index 0000000000000000000000000000000000000000..670cbdf0b6d49f46726fe138e3d44dc28824fd8f GIT binary patch literal 74252 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 literal 0 HcmV?d00001 diff --git a/re150/re200/re200.vcxproj b/re150/re200/re200.vcxproj new file mode 100644 index 0000000..4a9b1ea --- /dev/null +++ b/re150/re200/re200.vcxproj @@ -0,0 +1,104 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {7F28123C-1A59-410D-A160-83A9A7889FE7} + Win32Proj + re200 + + + + Application + true + v120 + Unicode + + + Application + false + v120_xp + true + Unicode + + + + + + + + + + + + + true + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + Windows + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MultiThreaded + + + Windows + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/re150/re200/re200.vcxproj.filters b/re150/re200/re200.vcxproj.filters new file mode 100644 index 0000000..8a6e097 --- /dev/null +++ b/re150/re200/re200.vcxproj.filters @@ -0,0 +1,46 @@ + + + + + {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/re150/re200/resource.h b/re150/re200/resource.h new file mode 100644 index 0000000000000000000000000000000000000000..0c87ace92cf9a1fd478e8baf8936337161b056ac GIT binary patch literal 1082 zcmbV~QA+|r6on5#FG0{hXrY%tNUi>WtrknVEAA@wBxx%cqM)q>5xoTci2i4f)i<+B zwxL;EcIV#RGiUCcb3fkm%Iksf6{xMUDysANHuL4mqYCv%Y-8ek$#FxnO&Gq)Ko+S==4|S-?(es z&;7>1cKgSL|tkErB+QR&@zW$h(FP0d+WI`8f;b z>^6HU%tSh#gtnxsk^FIMv!eHLdwwvHL+QrExNpFJ>;rT_o{ literal 0 HcmV?d00001 diff --git a/re150/re200/resource1.h b/re150/re200/resource1.h new file mode 100644 index 0000000000000000000000000000000000000000..3c8c65b1a6560b8db137a564aaa9816f960fa878 GIT binary patch literal 1228 zcmb7^T}uK%6oy}dZi1kH&_XwXkRR0#&{aap-EdXvYVi{cQShrEqMM)}(f{nSdS*tk zLKo$*&Y9ga&zw2u9lyWQO6wU56e?CxCEfA_)(hmT%q-FicBlhl)ACeNUu}&w(uAj{ zDeoG*n`ow{2F!e=Fi*#`qt@GeKT6f!yPv^cX2tjjJqTUpl)=vM+r+>ueMHz|QAZJ2Spd zI7N^B#*C)#kBlR=^nl+cc4G5&T69(E6YqGQ?Oa3;>$cuT)n#^Vpp|RegVl;*!kQ|v zc?cnEZ*&hO;(M-H(JCt^(<&&Q9+#3;9p|6jGH8<$&?eW(?y zRC8OCxE@_F8rr1&b$J_lzzM4MyvcN@qU|$xl{EJunY&c~^2T;iLx=x@-l9f-=RY