From a9e1d6e4cd0f3cecc99a9a9227dc416d4171f19f Mon Sep 17 00:00:00 2001 From: DrLyoko <49804904+DrLyoko@users.noreply.github.com> Date: Fri, 10 Jan 2020 00:05:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=A1=B9=E7=9B=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 63 +++ .gitignore | 261 +++++++++++ Bins/P2S_x64.exe | Bin 0 -> 132608 bytes Bins/P2S_x86.exe | Bin 0 -> 113664 bytes PE2Shellcode.sln | 61 +++ PE2Shellcode/PE2Shellcode.rc | Bin 0 -> 3124 bytes PE2Shellcode/PE2Shellcode.vcxproj | 169 +++++++ PE2Shellcode/PE2Shellcode.vcxproj.filters | 52 +++ PE2Shellcode/PePacket.cpp | 334 ++++++++++++++ PE2Shellcode/PePacket.h | 101 +++++ PE2Shellcode/ProccessData.cpp | 102 +++++ PE2Shellcode/ProccessData.h | 24 + PE2Shellcode/main.cpp | 20 + PE2Shellcode/resource.h | 17 + PE2Shellcode/x64.bin | Bin 0 -> 1804 bytes PE2Shellcode/x86.bin | Bin 0 -> 1357 bytes PELoader/PELoader.vcxproj | 185 ++++++++ PELoader/PELoader.vcxproj.filters | 27 ++ PELoader/Readme.md | 10 + PELoader/Source.cpp | 461 +++++++++++++++++++ PELoader/func.asm | 13 + PELoader/mapfile | 367 +++++++++++++++ PELoader/mapfile64 | 529 ++++++++++++++++++++++ PELoader/order.txt | 1 + Readme.md | 15 + Test/Test.vcxproj | 151 ++++++ Test/Test.vcxproj.filters | 22 + Test/main.cpp | 8 + TestBin/TestBin.vcxproj | 151 ++++++ TestBin/TestBin.vcxproj.filters | 22 + TestBin/main.cpp | 24 + 31 files changed, 3190 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 Bins/P2S_x64.exe create mode 100644 Bins/P2S_x86.exe create mode 100644 PE2Shellcode.sln create mode 100644 PE2Shellcode/PE2Shellcode.rc create mode 100644 PE2Shellcode/PE2Shellcode.vcxproj create mode 100644 PE2Shellcode/PE2Shellcode.vcxproj.filters create mode 100644 PE2Shellcode/PePacket.cpp create mode 100644 PE2Shellcode/PePacket.h create mode 100644 PE2Shellcode/ProccessData.cpp create mode 100644 PE2Shellcode/ProccessData.h create mode 100644 PE2Shellcode/main.cpp create mode 100644 PE2Shellcode/resource.h create mode 100644 PE2Shellcode/x64.bin create mode 100644 PE2Shellcode/x86.bin create mode 100644 PELoader/PELoader.vcxproj create mode 100644 PELoader/PELoader.vcxproj.filters create mode 100644 PELoader/Readme.md create mode 100644 PELoader/Source.cpp create mode 100644 PELoader/func.asm create mode 100644 PELoader/mapfile create mode 100644 PELoader/mapfile64 create mode 100644 PELoader/order.txt create mode 100644 Readme.md create mode 100644 Test/Test.vcxproj create mode 100644 Test/Test.vcxproj.filters create mode 100644 Test/main.cpp create mode 100644 TestBin/TestBin.vcxproj create mode 100644 TestBin/TestBin.vcxproj.filters create mode 100644 TestBin/main.cpp diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.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/.gitignore b/.gitignore new file mode 100644 index 0000000..3c4efe2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,261 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# DNX +project.lock.json +project.fragment.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# 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 +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +#*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignoreable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# 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 +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc \ No newline at end of file diff --git a/Bins/P2S_x64.exe b/Bins/P2S_x64.exe new file mode 100644 index 0000000000000000000000000000000000000000..c4abed47a1e457ea58f39d9bdba8579f4a537b04 GIT binary patch literal 132608 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%0DG;}kQ5TDBU8NHWz!X$ZJA!3*d6cFZ$Wp%49dnll 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 L=pWnvw-)%n&}4>E literal 0 HcmV?d00001 diff --git a/Bins/P2S_x86.exe b/Bins/P2S_x86.exe new file mode 100644 index 0000000000000000000000000000000000000000..fc6748e5a3c46e0e8c2ee27ab1e519f6fe03bc68 GIT binary patch literal 113664 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 |sA*uVV$GrC;;+I-U(*kK_gtt%^||Txch6aR zOfG-q?Z^C1(%e@!NVg{3`{LmH zgIAA<`_`FT>{I#so$7%T;=SB<+`iR4xx0J##Rb!XzJ9s)xo^$W zKitu6rXIV=Yh52Jol%)2?Y}zM7SQokmu%zbdku4>_4|jsx~^_UkGzgO)(yX?c(i~N1P_z9G`V=!{9j!N@tHn56bxc`{E~Vxot^a z-SyKVF7wl2(vznToL!KseyeZXj^me%>&}O2d+r!}qEgaKEABjPol_U-eR5Qp_Vsoyhr`~y`9%SXxF2ICM{&%xM>?tD79C|<>tB#xTQ?`E~$IP;Fr$U zdo8VBb7pQxOur9&`j3(ZZdr5c#QhZ)j$a!4RC(6K_0zIHE>U&!oE?QDi#cuIp`&}{ zC4Z219_uZCf(kDxP zIQmju_Sqp}rfb`tdT-T~fkDdGtR3c!dG7ispSkz)Uim@Ox##}I=UpWYDYv@jR1OZe z-8;PQxz6Sf=Qp)m<`c0s+dACGduj69l3)5)bDDXFzDwI#H*LA>MUm{ zFyrBZy(63tkJb{XA~QBX9J0_v=qT{jJNIK=X6^V(O2*G(6=+ zb)egCpFAgZA6anfa`>r=O9R7tBwzk;Map--&b1x+;ms)%MuayiL2cP4a< znsz08+XudWpS+p>=5cl2Jg;qc=T?lVt~x!VwsF%3GeQn;`6Q_-r}MgXFLD*SDWNO& zj=mFcZbDq$h1mxN^u5<{an$IUHSe9BAA7~+wYOfia?4fMXdjQ^_xzWVo6dVp86K_` z0Z;$_eu4Y2563?UdZ~VJ583e8&RxXoLsSpFc0X7?cT&XbJ2zenHSfC>J%4SQiEW6;{6-0OehN;Bsu%8d0FJ{bKOpgJ)Snc8hmj=-Gq<78~b~&4kO-< z+k55g`<=%9l(zE88@o;n&}4qe757;Gz4hB;w}y>ax|oW8t=HU)-+w(bJ9JLj^%3q1 zGGp&3eQ)l({mdh7-LqH6nm4%(N!4^0sX8s6eQbcwTO)rte163?`DfwU*n3~+w6j(1 z6t%lL|EHHG?AKSOy;pPo=}SKG%xN#egKa^2pY-S=%8tB5_kMfv)k-48do;muFOK6rmuW&Y1DefP4PsOG(Wn#Jel zHhPDiy)t|4h#$V{m_FY0P47(~MnCcR*C#GIJ^t{U=o6)$-G^>DJ!nVo&z$!UKh}Q7 zk@}BDT^!SK-4UmY2c8-Ky}T%?@|jJOM)-yIbGEsE_r=5R51QJ!6{gSlBjBsdIq_F^ zrL~9N^jl~2=_EQ`ex+S?h`HMZweK5mUS0RG{_4f_$M-l7S^er)M*W(>-|pLG?d(3l z`?3D1GrRBH5OTW2yx?Z)<+Dc)4!@k;e&o|TJ%4KdLS}tlOz->)r7u{QSf&TOl6OG9 zV^zR`aIdOo3P13?)P));LtF96@~>X@jyTunhoTL>p})-vEsR+b@$L_Wqrd-S;48+j zYkxU;q}|z#rJv_;8Q*?#aqL@pE}PcB9`&rHD)E^I$p)pRP(8IrrPZH;;ynd;Roc z@7M2cv>duu`O*)4X9iwN+5DRAc8B{nmVdRm;)$>m$39$URQF$ZCfBFV)nh@g{MFgh zuXsO`p$l67V%J(Xze%cI+gAUk8~SM)pd!l{*F7k^INF^m)Abrt7M6FBG2(>Q0> zY_6TFm23CN60TjBRa`r_H@Nn0A8_sQt-khMPjVf))^Z)X-QqfQZzpo;?jdsN;UjYC z86oP}bF!#oFQcfV$8u38k1|oG-n&Gd`kWDUdh};e=SMp_b?!UZsqB&YS&K&Dn)4QeG#khlb7T+3fNx%E%3q6k=#>3Q5lSUo)*BG6H7bnvWz zd{FrXmLE{kNFmRL3yAO{cr0qhf;Zy3N1jnn`lMTb`7izXg$T)D@>>3qU(3}}pB6ty zmn?#D0yZ=;zF`s5Sqt7f@zO!}5`RtT;$aybUvMd(xYU1U(c!`6r~TJlbej1SsyQ{(^9+>5v7-TJ~s>-$B{yeI7XY|gWYuMx4R-Nkp#?pl^P`=duREF8xjYwiX_ zxUTK}+lznLQ`V}*h5{oC$6vgr7B7K?usfb^fr`3nn}c{qc~g`BzN`To&bu9MQVXt! zc3FZpTr@7u_@zGxotcqcN`rcllaMM*!?gO#A{HpI$5~s>9BVZU>1$FKcU;XIa@jij==){*x+t(%A)a_)y zKkPUwFcbsg(g()X>c_4;=UVU}2;pJR_?~}7-N%^s`l&~8YIphMyER+N)a&sx^zn~B zitzM33yCMyeLlw*H@QPjtHRz>KXs2}O{UgscUYLjUWnUY+dTmwDiT}{cb{l-^%^Uq+`$+xe#Dsq8T9mKc@W-P)K2g6o zW2JM^RUCVtdZ1|N3)|GU-%2~ac|T5}DY`!0+-|%2jRormoviEyd813`&f1}#msi%U zPTUviuZ`{e^-lGY*s;gH<4_-s=fG{s-D>~j8Ggo_0Z9K&;`SFmQy&^T$8&m@VWC{@ zb*CXe?ol5->bqpvsd^PxmQ%4Ue6RX?TdcSYm42aqXYP&-Z#{z(aippP zujZDkqwZh%xpc9D^tn0gkqY$(4aG;JR`d(ysx3X#J1f**Hob7OcV`j!aqS+C-={90 z>!sPmHnsZXK$I>uw!wgk(t{c684dk%Cw zLHc-j-}A_R_4uss!y}}=p`5H^H*4AfwNJ12KDluj>ABzf^tp9F-CZB%^XM;X@T+=m zC_SjIetFFU@6|u4V9C#!Bt4`)o~TLNB*p1L@qL?K+;&KPK>1vjw+QtsJCV6TU8R0w z(9=&<9K`wR4N0zDj#a5Imz`X{?OW)p`iEaGPd=>vuC{5OlhhOCIX$ZX^}}kZ=dGMB zO7stn*tRk6h!|Oh)5p&>RjZ5E-TbYKKl*#YzP%$f zr_{FH1H+{%lxJ0T@0aGCQolUaXF%aC^#4hlW%E8grCzwSDJ|?I^szIz$AyMd>dReR z2l-AK8p`Ry$8{NUT79qoMlZ?29+21d?XTbPVefw85l31W)R~AtiJXopI*S! zw;3;B)-1*g*yzo80SkUT!>1RpXgA{pOosThIz%ukt>L&s&uVlP{#x;x=a8fqo1>C7-yntoh7%w1qy_%OVV9h?p z3mEt^;{}wM884tQhVcTH4`IB3YdOXXSi24L0WJZH@)<9n^l`=uSbpsUA78-KHyAG< z_XOhwT=gj91(bb#oKG)c`Adu!Fn%)Q1+4AEcmY$tJ;tXOuwf(P1vKU|UO;XH;{`0b zdz4QvAXm=#X5?zs?$8H)?d&liecy{LS@c0PdPYp2Q0otDSjwKUHv$KM=a#W|7U;WU z^sWPacFYav0)JZ7NPuJqrLU0Dvs@4GWLE48lmewdvWt2GVQu5Qf%Ht?4@l3DRlwfB zNFcql5DWAGCIabM{8S+A-7|o+-N^wC0vds|Mz#P40}Fs;*eL>H*+h?zI4qlZwCEYH zhlBhH6+l{E(b9^%(+&Jj=()_CeEx8~Onn-^=E}{_$fPtm8Eh$;lFkBBvI>p)SdC>O z0)=Oq?BRtnE~QWo%HvY7s7pgwN}i#>qR+(1auidz8Wy!)BXUJCd2{sHIT=zMlA))) z%tRbuC=HgzM=27r3^_UJ`56XZLxDl6GU_c^()>(>giXn}T8vf;(pa*lNvHUzr*-0{ z_?V_iC#3sH4SDINLZgLbP4P*e#-Evmg9pt>D9ywX8VDd8Jzew^fvzb7rb!dC41BOO z+bqq?w+OL)c{vD=jE!v-ZnheY`6i1Y12HJQ@7SnBsorSBu^Rj-8fGa@{oo}z#$B3>MiM6l;ISgY0_~$q}j%Zq3Z(yLX-?BPYifgt{Ocr>Y21aAs<9zG+s15r-fqppdL> z5kVSl&Et<$6^hL(f|TKKUG?oXomiTK_QUw#Z4+_c_MN5>*2N({Im_Dc{}I-?4D*|f zz27Ip7b;s_qE_6033F@{-VrQm$%nGo1Af2VkHUqE<_&UdK#pn1Z!6;6agYO5an37H z7my%};s{l6l;xO?WYr;_2I+(gW)&_Td}Q!SggR23KdU39>*)nOf#_wn)G*u+bhv-`inw*4Q4xu; zbYnC26LG#cp3&l&%ilAM2tzcxUjbew648Io7e~8T^q%yZ6DO04I5PeC%4F%8GjNX+ z_=pLKo|7W@$_2LZBTrRpzb8nRrj=g|pEk0MA9?E9_>oa27JhWk_2u)8Aun!H>v((~ zQ(O7P^LeDg&!stS{3J@7)jA&Dg2nx?wI46f*vc=FmuG=rOIZ^6ct!B@fMj1BhGWs= zeXkM`S0EC2PyU7^v5ENg0gK~lE?`mlaZlsl?mutdyo@xcnrkSv>)vEZ_l(iYAkq@7-CmI~@LB1g3-!HVcIV~Z$hSq*c@^fC@s&Dv_ zADzLTM)FvH2_QeNOvG)4vVHA!+qy}_zn{qSP=oGW5$A_RlW!V3XNM~nakWV1Yr@UY zQzj=7wd99M(eB5WiToX}fjIXY>g7D2;nm_8#Jees#+%WXh11u8D1bgnPe}Z*M>Sk1 zNZ<);9Kv_^({RT@bd?TbI3M}Z*jx_W2%_~O%{_D>DKDG)#_t0)_>27hBusCYCCIFX z9GZt}fr4C0OLGuij&gnNX@&YYmiOCX8m`ad8a|B>UhPmH3J6lM@P-f#cON9g+t?;v zd@zgmN|1)z2x1%r;JSq{p-cj@5N2BzfiXUdwJq9+bX5d5`KYeQfqu)||ereh!qh4sR=e{;Gc;zUH}qAO6GNq*t{`-?n_Z&HrBhv+uMH zZ>zu0K5ZS|R(|x}*5Nzb=Rrmt@k-ZuTaXIiIk)joe{ zxV|8|g#Oc3{;Y?s!>iiV?>+w4CN1e5<=-2Oef1Fh&IR`x;d+RB48JH5JRIFS=deD_bBaXzmlIh!M+v4$&u~(y&-Kj@uoi8QxcQR>7B5niNz-b_zfk;T@cew zswL%9Tm%lNH|X?v8Ay8wq56!L&^033^9g)1H-@BK19F~c*Iqj!vKP8Sa+nIb*Gw|uW7AvW7= z(ZM9ZEkcPR4QbXHGYlr7B-OkOiynvb8)Nb^^OLy(@^RE=GRK{9#vXQJ-dr>am*zY{ zkHbfswZ?G@(w9S9`-r0Q$Vd~PpUu}v4jy%D^WhMV`&=Ar(9dc6K@seaM3MXlAlfEK zai~?BFl}B&f-yUf*CO|NyTs-%pOlds6=GjFSx;Q^w@uz4j{h3U`yzta>@*y*UdUDQ zz0uA^6`=mpMUDri&uyzAKF(>T$qaj!<}59-sOOHwk*kpOwTOC8el8jv4~g;&_=Q>< zpJXmdjOH?G`A@gR@NV|WmRDP!91Ce5iDO&Nc?Ca~@}%78oYy;uawgv1!QsV?<=ctbb7Fb-1Oscqu56Bsz_&S& zLo(M9z1wkgINY56*ZJS7fscBB5jpmI&1YC%G|_6IWyQdlOe_N6MCj|dL-W^0vbfO)e3B$max}xW&nx~l{+XIfwfFG8=R#I8Bj#7XZGTUT?3V@c z0}=nP$QL;h3HyH0zm(wrO%KuETuyB+vHfaWTR|^^zjdwPVtB*;yveq~N1r z`RN*buTP`l9K)KwS@|bnd^-A;6du0MO<~{2v`1?tgFaK2f{!xfw~CffR=8vb@yw`$z@d!CMce|1K_qT|O3vc&-wXFBHay^p4UJqvQgW6`KmBah zw34pF>gFO{mj1`2SznyG*z^06s5{AZ8RRwf#5eCJ+ZyVUiTQqV2;yy6k z9SE+jE(Baj)Q!@p#`w~x2k~|5F%Q`mJSg5Tv(*$Y^5iUTP1eSyxn2o%A35P`P5WJo z7xm>Vk|yh&q~wIUBPd+)eu=FnIVqt|2FBJvu9s}hCqZ>)&35tnjDrY#ihHIeK|I^p78zD2jtsjN-!xm&gztlw zTf4&R8ocTdA$}$YPso@?G7@alBuUB2CY#w=Y;_5G(q)dXZLBLk9^S8bp@g$|G|iFN zqTR(&F7dV~S8+vrT_uWw%8V*L=oRv$i|Mo=D9L7ZO`fUAqLMTPP#zLnV`-FYeA66h zlhvguAUVqkNt-6R+YY5n=kqSU;hwRcx*2L=)5w$;Y#LXa&fRveB(4#k-<~Teb+f6L z{bpHUi&ohpWd-7cXdz2Z(`>K0C}?7GNR*5930u@1<>8XJ2ex>rP2(Z{x@2MlS_PlO z)-1bV?PGIZAwC#icLOaj*%tR8B+Atyu}y5SMcvRMO-PmLe7%Ql;vHMKXQ{K!ZHKGO z7T&kidAY5xOneFHJKLffLmJ(d8L{Y3nQp6OdN01=YK!u)#knNejPBx_CDsSUVVq?_ zLb7e4tN30rv}>zD;!bd(ftOvdOtAGtZ1E{uw4~VJ!HFwMq8e>ZB@^$Um_g9}&1L0< z?c8>h*S9M!cS3m+NK4ScM33;2i5?}+ZnpcVX2lOqHs=m#%`-OZ1IR1JYx8{8)~8dZ zOlLh}A{rClgYSjDfc6;va7Fu4*O8;614Y(O%T8NwD$7arwte-D)O{vO5VeOb&J}Iv zGW_NW(Q@Z5+TtHY)?ZosEWY847E4G{{+5i4YzLPwZTA4PvnG_r`23r;OSXqLt7OIM zQ1Z1M8jLr;iVEB5imMtlZrhz@;u^Q@N5tnAe~ay7QK8G2#YgG+QN)U+k5T;POZjA@ zmapd7#W*(}LO)jiW_uW9b)7TbHqE6pTI9C9VZ~~Hito04pE&A)+x9B7+lr-+FcEyn z^3^=&wtZ!D#45M#6)RY2WzPLag)DG2eJqR`v|du(0e-|Cin{aOXUD!d6xB%gu7gnz zxO(@QE~Qa-qT`e5wjfhjl+ zwT*EV$GL>WxmYIIM7HtH;(eBJ$)(|qr!c5Xq8_AJ{M~jW7P{E>9g1?LK{A+Yz>8t% zk=E`Iz4$79eO=sDJke!%ghb?oGC!Dqg2WuLOS68GVjuQVF4WVbT&FeF(hwd`b6XuM z#7#mzwx|buS4f~nRi3Wz=C=1}#Szz{-}R;1TDRB=adq^HeoHS{>!#cG*{6Uc<%MMG zFt_X7-M06tIN@5P)|W1FDji+x7Jfv0Gc%~a^@kMOL7Fj;iO#lPS2D>%SCS=7O4cT7 zleEdY;u|tuajFZqo2FK{B-}23ew~DI$4{-hX_B>_)YimhNDb{u} z7BlV;Vrh;gwy~}kSY2tNXI8AOR#zJ9nOb)bw*{STzGte=)}Sk1q{EaNYm4;E(%GtP z$?oter)iBayUo<^N5$Fo3(>0X+W5i$U#K-Fv zp{`Abbj6iky7WW3kZ6hNls(HFWQlw=)CM}rTsytFt~s8_*5WDUJ4B4_dW@}{ukSsb ztsAQ#E5Gt^Q+1>*8Zv5hrIDVxSg5ol($fptjRZ<}(VZgF*1qX0QgXbGT5&36Y4Myy z8gElyWNMU_#7n3*PPF$&sX=FR9t`C|&UNK)u{KRA6z&mgOGQgO(AiR?x>7ftO|8T9 zY|^Dis3L9KJeDJRtoXJ?ud~I(*WE@}(uN$cj@8=oq*0{7`lz6V9&^HUm=C(z;y9i7 zXx#=x3W@ZbWO37yz79A?g)H|+5uNR( zcDYkic}&wj`)w=ARuNm;*E7m?O6#^gL~Gl}-?tWYXsW`EtEpVK)@{41SERTiQhZ3e zxR&l+3m!o!wTr9h_N9fW^eS!Bz7@`{+U4Syrb^9nm8*8~eg5{f1vk{tSlbzGsa6z; zdsQ^0k`qc@M^xzUE1yVr)|+ zF}7JAF*Y+g?2}$Gwr?@eTF)smo$WsASGVH#rlvy}Hgqq;kb={bzn@`5anz*!bxoBt ziAphxX?J3|&DG7t%?%+#(EY7fD7d5_8g3HxLY=OpzpgYw!iF3_+7RSYf05=GHmA+^ z#GE_YLuWf5D?S{H=`7^1#S&!`Md5xGh5KF>w5mLRBXYdU zF1qPyvDC>NRI!UIqZ?p_^--;@BdHoUz%ixHVx71u1|xoWgj6RIq2YBQXXjUtXh@9} zS0OUbh>uv;QW;%nCX!IU(8_e;eY&Pv6x89`heYwOCv9=2Ip3KOgj+VaYB$BvNjS~_T-RINbo>-9?735;Q zMz=#wr7p0iQko6vR=mqxXy@T$GR($D>+s5U zyeWGQp6JXln41F~gQE(N)Picq8s->sq&f6Abg15pSJm@p8B9Z^)@&{RUUTTsOnr{o zFjP9CS&nMNU+1D4(W*?U5zUoDa@7byZ(yha{`dONX+VOfdypWKMaw424$C~{Kge&& zf0wsYyrTF_aY9j}_*vnh?5E6D&Q(6EJgodid0Uz2m*QvkTjBS*-!{K0zi<3*`UUuZ z>VL%lNB@oi!vfR+V*`={rU%RlcqL$Wz!w2W0=^3PCg5to)REr@-VW>)WDR;fs9mru zI4XE_@VH=Our+u|@SfloLtYPgH)Lx_b;#Et7elUw)P?*U@@vS05V5M0s;kOF)n7GK zH9|E~6`_h%jaMbB^r~5^Csj7ptE!EvI@Ry0q|hayJ3}vp{uIiExrX%(^9hRxn-rEC zW(k`YwlZu@*u${SYK1yjouGbRy{WDD4pI(NhAESjQU!7lrpSQopf0X}R|04eq|CjvB{I~d5`0E1}2OJK#67YS%_>nauuaA5x z$T`>}WOGO@YI{GVgKC(nN2ph5S?IB_+hP6Ge(H(pbal3Rsd}@zTzyepr@o~|VX>%* z2XL}SW!|zt+0(K$vbplNl!yJb0i}V*0K>?j zl6nrL+0@Uex8oOCm(}&^yJ}8@-{(MFXW0PRD49`KAp1aeUUpe_P1YoHmG_YMk@uGe z%OmCS@`>^%8g{z{gqOU@&7_XS7n4!o~EK%H1 zbWjdfDwS9KJpB9nd-{9%d;81$pYlKIU+w>;e~te||JcBZfgcC%4GaiM2ucas7IY}+ zyP(@a>qBZnE{9x$Ms9>Ogka~dTBTa8TB~|ZbvJC3`Uz;ns9vOAt$tnok$R_kKlE}% z{S#>hN|}#(w3mG)yD0lv<|OYVcb7jV_mykp#atdxA z+$s20*uAix>OSgz>VfJZ>V;}96*h6?{hqQ?*~c%?Pw!Xh_e)^Ap#DKVL4HB1pv0iG zpqW8Sf?f@(4f-+Ym!MyRW}x4{8@w&JTy;eCt?DOLpU?rJ^TXP!hpNNX$?B=etlxZKILd!bGxI*(BLCS-LC>Ej35BQ1+7SHQ8IT8#1eWq5OUMHu*Ogx!o1M ziXimXuN0%vGw1pp^gHDz@elG}>3_=qEB|l&ultJwQ~~1yrUqmLxq7=kxiA& zMERGX?{1czmOYepkgMg%@)`0cjWetL3v4(aJdGlgcH^Hnne!cw^ ze(`>Dk>hKA@A{qgJLh-bZ;*eW|7ibYf203me;ek4z5ZvAI~UL?;FsXrq20q8)wCKy zGjn2@N;X!OC`(W%P(p3MjDTXy7TZRi8Ts2tZJ;i2Twqe55hX4OToYIpxHYhSP*_lA zP*O;7NM*>$kSierRe7qpm>CzVmZ80#RlTg*tol?{t@=YXG&DQ3F0@COD(va7Eow5l zl4*U4Y`yG?EL=Wb{*3%J`6l^i7}cv3jfy{%V!y6_Qon8(wd&~gxZw>Q-=8cpZ3l##Ifp*BjOaIm^sO&KAB4`!eHchCzw`ZmzTcDNaNiSBx^h=mV|t;56P#hhWluKbEokT~ z>vPb7+Ln#;;ZvMT#Q&<~FXSb1jpW%=>>QZ#1oCsjUlmWuntWHDSC1eaE&Z%6Sy%1f zI2W9^osRRqGeDNz6Z>=Q_1HV0cF4SH4$Zyp<7X-GDeib_@!7h^PXxI@?xPRV$LPoO z3;F}b#9zg~L|4o}+n<5656M5sm*vml^Iss1^Xiv6rGKTfx}Y!V-|N5YSM*!@SbwAg z(d*HR&c)dCu|LIb#y*XGhIjokcDMPddCpuh|1fWwtLCN&x(~a*cAo}!|LDHBn41r0 zGH`hl>k@=-i^$6tz}6?(KKlfYxXvFHm&EVHEisf6`IS7U?o{`yE2^gcrd~t-P1UKo zP5(s4a6iA*J^i8nME_ggVF@d1-LP&%92DjXIP zVX-EN5J(OO4I&|uA_anEL{_YWUU^Xv8)8!wMM-RlZLuTDV9TzkiW&%07Y)%A`=SN9 zwZ)<6Km|vlCyqs548%~Jh!Oh81dW6^mJ@dpP7)0&?PQ#+v+m@bg0lg#7oC!`GHH`RzgjmrlQ*9Dk|&H=CwYped4~VD zx&3cu@?GaK6LWDY@Sr;Bl`GOG{W2g|W$-^;W!I`&HEYirnvt29nK?Df?uzSoSKW}i zhIZz-2{+|tkk)y3!!5d7=vEaplRdYA#&+NyqMh{IJ{ro%ow&0F+tTna=Cn*!h@Y&Y zbFRV34oM)_Gswg|*#Pmj&_OGtiezsf9S@K;UD6|cw3-o;enw8oGF?HpS*0PmMg?`C z?-aDX4sCD1i(624g;qiH2Go5(525cK?b9Jrb%M5bde+zcP>ZhA~e1OeOICF26TM@O?RQ^ zKD0c7j%Qf2WvrJUYZXE^3F*j$Ov#K~mwCA%i*ifupzBoS9_YM}%sP}^*+b_XBD*GX zCXux{e9wt>@DMMWe}Du@m=JX7I7yN;8dmPCUzNx zO^}5_9E-)#NYgCKa;(5MS&414GTUV}G@d4Fu{P_Vr5YM;hBZZ4gjANyhS_UIkayP}@$rL$*Pe0P|?uckLZXZg@0ySTMgPAK#u{?z=Hlt&|Dijo72D|#h|1b)H8r$0#HfzEXiun z!y=&;=M2*rp#{yBpw}9-+5s<)L5wMA5!4|a)@$f^LR;F=ah=df^X;+ T_MKzP7YRr3LjV8!UQOT|FYAgK literal 0 HcmV?d00001 diff --git a/PE2Shellcode.sln b/PE2Shellcode.sln new file mode 100644 index 0000000..019fab1 --- /dev/null +++ b/PE2Shellcode.sln @@ -0,0 +1,61 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28307.902 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PE2Shellcode", "PE2Shellcode\PE2Shellcode.vcxproj", "{E1A5BE0D-F978-45C7-BEF3-8F010D65EA82}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PELoader", "PELoader\PELoader.vcxproj", "{1BFE8FDC-A162-4ACA-9964-535BC853DD9F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Test", "Test\Test.vcxproj", "{0B7FEBF4-FBCE-46E7-B864-398625233D5C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestBin", "TestBin\TestBin.vcxproj", "{4A4DA453-788F-4D22-9A09-2134143DA1E3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E1A5BE0D-F978-45C7-BEF3-8F010D65EA82}.Debug|x64.ActiveCfg = Debug|x64 + {E1A5BE0D-F978-45C7-BEF3-8F010D65EA82}.Debug|x64.Build.0 = Debug|x64 + {E1A5BE0D-F978-45C7-BEF3-8F010D65EA82}.Debug|x86.ActiveCfg = Debug|Win32 + {E1A5BE0D-F978-45C7-BEF3-8F010D65EA82}.Debug|x86.Build.0 = Debug|Win32 + {E1A5BE0D-F978-45C7-BEF3-8F010D65EA82}.Release|x64.ActiveCfg = Release|x64 + {E1A5BE0D-F978-45C7-BEF3-8F010D65EA82}.Release|x64.Build.0 = Release|x64 + {E1A5BE0D-F978-45C7-BEF3-8F010D65EA82}.Release|x86.ActiveCfg = Release|Win32 + {E1A5BE0D-F978-45C7-BEF3-8F010D65EA82}.Release|x86.Build.0 = Release|Win32 + {1BFE8FDC-A162-4ACA-9964-535BC853DD9F}.Debug|x64.ActiveCfg = Debug|x64 + {1BFE8FDC-A162-4ACA-9964-535BC853DD9F}.Debug|x64.Build.0 = Debug|x64 + {1BFE8FDC-A162-4ACA-9964-535BC853DD9F}.Debug|x86.ActiveCfg = Debug|Win32 + {1BFE8FDC-A162-4ACA-9964-535BC853DD9F}.Debug|x86.Build.0 = Debug|Win32 + {1BFE8FDC-A162-4ACA-9964-535BC853DD9F}.Release|x64.ActiveCfg = Release|x64 + {1BFE8FDC-A162-4ACA-9964-535BC853DD9F}.Release|x64.Build.0 = Release|x64 + {1BFE8FDC-A162-4ACA-9964-535BC853DD9F}.Release|x86.ActiveCfg = Release|Win32 + {1BFE8FDC-A162-4ACA-9964-535BC853DD9F}.Release|x86.Build.0 = Release|Win32 + {0B7FEBF4-FBCE-46E7-B864-398625233D5C}.Debug|x64.ActiveCfg = Debug|x64 + {0B7FEBF4-FBCE-46E7-B864-398625233D5C}.Debug|x64.Build.0 = Debug|x64 + {0B7FEBF4-FBCE-46E7-B864-398625233D5C}.Debug|x86.ActiveCfg = Debug|Win32 + {0B7FEBF4-FBCE-46E7-B864-398625233D5C}.Debug|x86.Build.0 = Debug|Win32 + {0B7FEBF4-FBCE-46E7-B864-398625233D5C}.Release|x64.ActiveCfg = Release|x64 + {0B7FEBF4-FBCE-46E7-B864-398625233D5C}.Release|x64.Build.0 = Release|x64 + {0B7FEBF4-FBCE-46E7-B864-398625233D5C}.Release|x86.ActiveCfg = Release|Win32 + {0B7FEBF4-FBCE-46E7-B864-398625233D5C}.Release|x86.Build.0 = Release|Win32 + {4A4DA453-788F-4D22-9A09-2134143DA1E3}.Debug|x64.ActiveCfg = Debug|x64 + {4A4DA453-788F-4D22-9A09-2134143DA1E3}.Debug|x64.Build.0 = Debug|x64 + {4A4DA453-788F-4D22-9A09-2134143DA1E3}.Debug|x86.ActiveCfg = Debug|Win32 + {4A4DA453-788F-4D22-9A09-2134143DA1E3}.Debug|x86.Build.0 = Debug|Win32 + {4A4DA453-788F-4D22-9A09-2134143DA1E3}.Release|x64.ActiveCfg = Release|x64 + {4A4DA453-788F-4D22-9A09-2134143DA1E3}.Release|x64.Build.0 = Release|x64 + {4A4DA453-788F-4D22-9A09-2134143DA1E3}.Release|x86.ActiveCfg = Release|Win32 + {4A4DA453-788F-4D22-9A09-2134143DA1E3}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {AF919E2B-7D17-417B-9C97-56573C7C3D3B} + EndGlobalSection +EndGlobal diff --git a/PE2Shellcode/PE2Shellcode.rc b/PE2Shellcode/PE2Shellcode.rc new file mode 100644 index 0000000000000000000000000000000000000000..ceb0cd984f959082bfd9e40d102f000557037486 GIT binary patch literal 3124 zcmd5;OHbQC5dO{x{)2HYpaS7hprIh!Z+dSjBAHGxvh^|(rjS`OO#SHut4m9r&pxz8Co~SzlBSRN&(nT{PekTj9En8h#NI@Oy+3F*UALzUYv@q1q{QP^DkyeH_wDH@K$#V|qvY z(4^Hr`SodanRbdlJmPmb=OglY4E`AZTE1ET=g(uRkn+B)&u0cMBA&TJIKy?AIaUe zgYEZ@>(O&lKT9uJL`G7VcMEGqkolCFg>`(t|)!Q4vAV) zkBMiS#wZ%+e62-8(MX}gd=WczuNL^sh6d~0o=VPT4@;L#6Fqfthi};DE8*1qfu{fc zS;>-#*<%sO`}mq5IX(7&-+}WL?Wi^yS%p%oVdg(Hp5M{?^0kiUuW0tauPNy_*{><} bW4` + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {E1A5BE0D-F978-45C7-BEF3-8F010D65EA82} + Win32Proj + PE2Shellcode + 10.0.18362.0 + PE2Shellcode + + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + Level3 + Disabled + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + + + true + Console + + + + + Level3 + Disabled + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + true + Console + + + + + Level3 + MaxSpeed + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + + + true + true + false + Console + + + + + Level3 + MaxSpeed + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + + + true + true + false + Console + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/PE2Shellcode/PE2Shellcode.vcxproj.filters b/PE2Shellcode/PE2Shellcode.vcxproj.filters new file mode 100644 index 0000000..052e405 --- /dev/null +++ b/PE2Shellcode/PE2Shellcode.vcxproj.filters @@ -0,0 +1,52 @@ + + + + + {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;ipp;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/PE2Shellcode/PePacket.cpp b/PE2Shellcode/PePacket.cpp new file mode 100644 index 0000000..eedb5ab --- /dev/null +++ b/PE2Shellcode/PePacket.cpp @@ -0,0 +1,334 @@ +#include "PePacket.h" +#include "ProccessData.h" +#include "resource.h" +CPePacket::CPePacket() +{ + rc4Flag = FALSE; + cmpFlag = FALSE; + data = NULL; + head = NULL; + shellcode = NULL; + dataSize = 0; +} +CPePacket::~CPePacket() +{ + if (data != NULL) + delete data; + data = NULL; + + if (head != NULL) + delete head; + head = NULL; + + if (shellcode != NULL) + delete shellcode; + shellcode = NULL; + + dataSize = 0; + headSize = 0; + shellSize = 0; +} + + +int CPePacket::ParsePara(int argc, wchar_t ** argv) +{ + if (argc <= 2) + { + printf("Used : PE2Shellcode.exe [output path] [-?]\n"); + printf("[-r] Rc4 encrypt\n"); + printf("[-c] Compress PE file\n"); + return 1; + } + + srcExePath = argv[1]; + targetBinPath = argv[2]; + + if (argc > 2) + { + for (int i = 3; i < argc; i++) + { + if (wcscmp(L"-r", argv[i]) == 0 && wcslen(argv[i]) == 2) + rc4Flag = true; + + else if (wcscmp(L"-c", argv[i]) == 0 && wcslen(argv[i]) == 2) + cmpFlag = true; + } + } + + return 0; +} + +BOOL CPePacket::IsExeFile() +{ +#ifdef _WIN64 + int bit = 64; +#else + int bit = 32; +#endif + + + PIMAGE_DOS_HEADER pDos = (PIMAGE_DOS_HEADER)data; + + PIMAGE_NT_HEADERS pNt = (PIMAGE_NT_HEADERS)(data + pDos->e_lfanew); + + if (pDos->e_magic != IMAGE_DOS_SIGNATURE) + { + printf("[!] The file is not PE file.\n"); + return 1; + } + if (pNt->Signature != IMAGE_NT_SIGNATURE) + { + printf("[!] The file is not PE file.\n"); + return 1; + } + + if ((pNt->FileHeader.Characteristics & IMAGE_FILE_DLL) == IMAGE_FILE_DLL) + { + printf("[!] DLL file is not supported.\n"); + return 1; + } + + DWORD offsetDonet = pNt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR].VirtualAddress; + if (offsetDonet) + { + printf("[!] .NET applications are not supported.\n"); + return 1; + } + + if (pNt->FileHeader.Machine == IMAGE_FILE_MACHINE_I386 && bit == 32) + { + return 0; + } + else if ((pNt->FileHeader.Machine == IMAGE_FILE_MACHINE_IA64 || + pNt->FileHeader.Machine == IMAGE_FILE_MACHINE_AMD64) && bit == 64) + { + return 0; + } + + printf("[!] Bits of PE file is not match.\n"); + return 1; +} + +int CPePacket::ReadFileContent() +{ + + char buffer[1024]; + DWORD filesize; + DWORD dwReadBytes; + int Result = 0; + + + HANDLE hFile = INVALID_HANDLE_VALUE; + do + { + hFile = CreateFileW(srcExePath, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); + if (hFile == INVALID_HANDLE_VALUE) + { + Result = GetLastError(); + printf("[-] Open src file failed.ErrorCode:%d\n", Result); + break; + } + filesize = GetFileSize(hFile, NULL); + data = new char[filesize]; + char *p = data; + while (1) + { + if (!ReadFile(hFile, buffer, 1024, &dwReadBytes, NULL)) + { + Result = GetLastError(); + printf("[-] ReadFile failed.ErrorCode:%d\n", Result); + break; + } + if (dwReadBytes == 0) + break; + memcpy(p, buffer, dwReadBytes); + p += dwReadBytes; + dataSize += dwReadBytes; + } + } while (FALSE); + if (hFile != INVALID_HANDLE_VALUE) + CloseHandle(hFile); + + return Result; +} + +int CPePacket::CreateBinFile() +{ + + HANDLE hFile = INVALID_HANDLE_VALUE; + DWORD dwWriteBytes; + int Result = 0; + do + { + hFile = CreateFileW(targetBinPath, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); + if (hFile == INVALID_HANDLE_VALUE) + { + Result = GetLastError(); + printf("[-] Create bin file failed. ErrorCode:%d\n", Result); + break; + } + if (!WriteFile(hFile, shellcode, shellSize, &dwWriteBytes, NULL) || + !WriteFile(hFile, head, headSize, &dwWriteBytes, NULL) || + !WriteFile(hFile, data, dataSize, &dwWriteBytes, NULL) + ) + { + Result = GetLastError(); + printf("[-] Write bin file failed. ErrorCode:%d\n", Result); + break; + } + + } while (FALSE); + + + if(hFile != INVALID_HANDLE_VALUE) + CloseHandle(hFile); + return Result; +} + + +int CPePacket::GetCustomHead() +{ + PIMAGE_DOS_HEADER pDos = (PIMAGE_DOS_HEADER)data; + + PIMAGE_NT_HEADERS pNt = (PIMAGE_NT_HEADERS)(data + pDos->e_lfanew); + + customHead.size = dataSize; + customHead.numberOfSection = pNt->FileHeader.NumberOfSections; + customHead.entryPoint = pNt->OptionalHeader.AddressOfEntryPoint; + customHead.offsetImportTable = pNt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress; + customHead.offsetRelocation = pNt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress; + customHead.offsetSection = (DA)((char *)IMAGE_FIRST_SECTION(pNt) - (char *)data); + customHead.imageAddr = pNt->OptionalHeader.ImageBase; + + //clear DOS head and NT head + memset(data, 0, customHead.offsetSection); + return 0; +} + +int CPePacket::GenerateShellCode() +{ + if ( + ReadFileContent() || + IsExeFile() || + GetCustomHead() || + ProcessData() || + GetResourceFile() || + PacthCustomHead() || + CreateBinFile() + ) + { + printf("[-] Generate failed.\n"); + } + else + { + printf("[+] Generate success.\n"); + } + + + return 0; +} + +int CPePacket::ProcessData() +{ + if (cmpFlag) + { + if (CProcsData::CompressData(data, dataSize, data, dataSize)) + { + printf("[-] Compress PE failed.\n"); + return 1; + } + else + { + customHead.flag1 = 1; + customHead.compressSize = dataSize; + } + } + + if (rc4Flag) + { + if (CProcsData::Rc4Encrypt(data, dataSize, rc4Key, RC4_KEY_SIZE)) + { + printf("[-] Rc4 encrypt failed.\n"); + return 1; + } + else + { + customHead.flag2 = 1; + customHead.rc4Size = dataSize; + } + } + + + return 0; +} + +int CPePacket::GetResourceFile() +{ + HRSRC hRsrc = NULL; + DWORD dwSize = 0; + HGLOBAL hGlobal = NULL; + LPVOID pBuffer = NULL; + int Result = 0; + do + { +#ifdef _WIN64 + hRsrc = FindResource(NULL, MAKEINTRESOURCE(IDR_BIN2), L"BIN"); +#else + hRsrc = FindResource(NULL, MAKEINTRESOURCE(IDR_BIN1), L"BIN"); +#endif // _WIN64 + + if (hRsrc == NULL) + { + Result = GetLastError(); + printf("[-] Find resource failed. ErrCode:%d\n", Result); + } + + DWORD dwSize = SizeofResource(NULL, hRsrc); + if (dwSize == 0) + { + Result = GetLastError(); + printf("[-] Get resource size failed. ErrCode:%d\n", Result); + } + + + hGlobal = LoadResource(NULL, hRsrc); + if (hGlobal == NULL) + { + Result = GetLastError(); + printf("[-] Load resource failed. ErrCode:%d\n", Result); + } + + pBuffer = LockResource(hGlobal); + + if (pBuffer == NULL) + { + Result = GetLastError(); + printf("[-] Lock resource failed. ErrCode:%d\n", Result); + } + + + shellcode = new char[dwSize]; + + memcpy(shellcode, pBuffer, dwSize); + shellSize = dwSize; + + } while (FALSE); + + if(hGlobal != NULL) + GlobalUnlock(hGlobal); + + + return Result; +} + + +int CPePacket::PacthCustomHead() +{ + //patch head + head = new char[headSize]; + unsigned char sign[] = { '\xaa','\xbb', '\xcc', '\xdd', '\x01', '\x01', '\x01', '\x01'}; + memcpy(head, sign, 8); + memcpy(head + 8, &customHead, sizeof(CustomHead)); + memcpy(head + 8 + sizeof(CustomHead), rc4Key, sizeof(rc4Key)); + return 0; +} diff --git a/PE2Shellcode/PePacket.h b/PE2Shellcode/PePacket.h new file mode 100644 index 0000000..2221715 --- /dev/null +++ b/PE2Shellcode/PePacket.h @@ -0,0 +1,101 @@ +#pragma once + +#include +#include +#include +#include +/* +shellcode struct + + +------------+ + | PE Load | + +------------+ + | Head | <--- sign + struct CustomHead + rc4key + +------------+ + | | + | exe | + | | + +------------+ + +*/ +#pragma pack(push, 1) +#ifdef _WIN64 +typedef ULONG64 QWORD; +typedef QWORD DA; +typedef struct CustomHead +{ + QWORD size;//PE size + QWORD offsetSection; + QWORD numberOfSection; + QWORD offsetRelocation; + QWORD imageAddr; + QWORD offsetImportTable; + QWORD entryPoint; + QWORD flag1; + QWORD compressSize; + QWORD flag2; + QWORD rc4Size; +}*pCustomHead; +#else +typedef DWORD DA; +typedef struct CustomHead +{ + DWORD size;//PE size + DWORD offsetSection; + DWORD numberOfSection; + DWORD offsetRelocation; + DWORD imageAddr; + DWORD offsetImportTable; + DWORD entryPoint; + DWORD flag1; + DWORD compressSize; + DWORD flag2; + DWORD rc4Size; +}*pCustomHead; +#endif // _WIN64 +#pragma pack(pop) + +#define SIGN_SIZE 8 +#define RC4_KEY_SIZE 16 + +class CPePacket +{ +public: + CPePacket(); + ~CPePacket(); + + + int ParsePara(int argc, wchar_t ** argv); + + BOOL IsExeFile(); + + int ReadFileContent(); + + int CreateBinFile(); + + int PacthCustomHead(); + + int GetCustomHead(); + + int GenerateShellCode(); + + int ProcessData(); + + int GetResourceFile(); + +private: + wchar_t *srcExePath; + wchar_t *targetBinPath; + + BOOL rc4Flag; + BOOL cmpFlag; + + char * head; + int headSize = SIGN_SIZE + RC4_KEY_SIZE + sizeof(CustomHead); + char * data; + int dataSize; + char * shellcode; + int shellSize; + unsigned char rc4Key[RC4_KEY_SIZE]; + CustomHead customHead; +}; diff --git a/PE2Shellcode/ProccessData.cpp b/PE2Shellcode/ProccessData.cpp new file mode 100644 index 0000000..4727cb4 --- /dev/null +++ b/PE2Shellcode/ProccessData.cpp @@ -0,0 +1,102 @@ +#include +#include +#include +#include "ProccessData.h" + +int CProcsData::Rc4Encrypt(char * org, int size, unsigned char * rc4Key, int keySize) +{ + //create key + srand((int)time(0)); + int i = 0; + while (1) { + unsigned char r = rand() % 255; + if (0x30 <= r && r <= 0x39 || 0x41 <= r && r <= 0x5a || 0x61 <= r && r <= 0x7a) + { + rc4Key[i++] = r; + } + if (i > keySize) break; + } + + + unsigned char box[256]; + unsigned int index_i = 0; + unsigned int index_j = 0; + + //init box + for (int i = 0; i < 256; i++) + { + box[i] = i; + } + + int j = 0; + unsigned char tmp; + for (int i = 0; i < 256; i++) + { + j = (j + box[i] + rc4Key[i % 16]) % 256; + tmp = box[i]; + box[i] = box[j]; + box[j] = tmp; + } + + for (unsigned long k = 0; k < size; k++) + { + index_i = (index_i + 1) % 256; + index_j = (index_j + box[index_i]) % 256; + + tmp = box[index_i]; + box[index_i] = box[index_j]; + box[index_j] = tmp; + + DWORD r = (box[index_i] + box[index_j]) % 256; + org[k] ^= box[r]; + } + return 0; +} + +int CProcsData::CompressData(char * src, int size, char * retData, int & retSize) +{ + + DWORD dwCompressionFormat = COMPRESSION_FORMAT_LZNT1 | COMPRESSION_ENGINE_MAXIMUM; + DWORD dwCompress; + DWORD unKnow; + + pRtlCompressBuffer f_RtlCompressBuffer = (pRtlCompressBuffer)GetProcAddress(GetModuleHandleA("ntdll.dll"), "RtlCompressBuffer"); + pRtlGetCompressionWorkSpaceSize f_RelGetCompressionWorkApacesize = (pRtlGetCompressionWorkSpaceSize)GetProcAddress(GetModuleHandleA("ntdll.dll"), "RtlGetCompressionWorkSpaceSize"); + if (f_RtlCompressBuffer == NULL || f_RelGetCompressionWorkApacesize == NULL) + { + printf("[-] Get Function failed.\n"); + return 1; + } + + + f_RelGetCompressionWorkApacesize(dwCompressionFormat, &dwCompress, &unKnow); + + char *tempMem = new char[dwCompress]; + char *tempData = new char[size]; + + DWORD ret = f_RtlCompressBuffer( + dwCompressionFormat, + src, + size, + tempData, + size, + unKnow, + &dwCompress, + tempMem + ); + + if (ret == 0) + { + retSize = dwCompress; + memcpy(retData, tempData, retSize); + + } + else + { + printf("[-] Compress PE failed.\n"); + } + + delete tempMem; + delete tempData; + return ret; +} diff --git a/PE2Shellcode/ProccessData.h b/PE2Shellcode/ProccessData.h new file mode 100644 index 0000000..88d6333 --- /dev/null +++ b/PE2Shellcode/ProccessData.h @@ -0,0 +1,24 @@ +#pragma once +typedef DWORD(__stdcall *pRtlCompressBuffer)( + IN ULONG CompressionFormat, + IN PVOID SourceBuffer, + IN ULONG SourceBufferLength, + OUT PVOID DestinationBuffer, + IN ULONG DestinationBufferLength, + IN ULONG Unknown, + OUT PULONG pDestinationSize, + IN PVOID WorkspaceBuffer); + + +typedef DWORD(__stdcall *pRtlGetCompressionWorkSpaceSize)( + IN ULONG CompressionFormat, + OUT PULONG pNeededBufferSize, + OUT PULONG pUnknown); + +namespace CProcsData +{ + + int Rc4Encrypt(char * org, int size, unsigned char * rc4Key, int keySize); + + int CompressData(char *org, int size, char * retData ,int & retSize); +} \ No newline at end of file diff --git a/PE2Shellcode/main.cpp b/PE2Shellcode/main.cpp new file mode 100644 index 0000000..5a96f7e --- /dev/null +++ b/PE2Shellcode/main.cpp @@ -0,0 +1,20 @@ +#include +#include + +#include "PePacket.h" + +int wmain(int argc, wchar_t * argv[]) +{ + + CPePacket pePacket; + + if (pePacket.ParsePara(argc, argv)) + { + printf("Invaild para\n"); + exit(0); + } + + pePacket.GenerateShellCode(); + + return 0; +} \ No newline at end of file diff --git a/PE2Shellcode/resource.h b/PE2Shellcode/resource.h new file mode 100644 index 0000000..f843c47 --- /dev/null +++ b/PE2Shellcode/resource.h @@ -0,0 +1,17 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ ɵİļ +// PE2Shellcode.rc ʹ +// +#define IDR_BIN1 101 +#define IDR_BIN2 102 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 103 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/PE2Shellcode/x64.bin b/PE2Shellcode/x64.bin new file mode 100644 index 0000000000000000000000000000000000000000..ee29517470d0701b38b2952de984ac91b5a3aecc GIT binary patch literal 1804 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 literal 0 HcmV?d00001 diff --git a/PELoader/PELoader.vcxproj b/PELoader/PELoader.vcxproj new file mode 100644 index 0000000..bf21516 --- /dev/null +++ b/PELoader/PELoader.vcxproj @@ -0,0 +1,185 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {1BFE8FDC-A162-4ACA-9964-535BC853DD9F} + Win32Proj + PELoader + 10.0.18362.0 + + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + Level3 + MinSpace + false + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + false + false + true + true + OnlyExplicitInline + Default + + + true + Console + true + true + mapfile + order.txt + + + + + Level3 + MinSpace + false + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + false + Default + false + OnlyExplicitInline + true + false + EditAndContinue + true + + + true + Console + true + true + mapfile64 + order.txt + + + + + Level3 + MaxSpeed + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + true + true + true + Console + + + + + Level3 + MaxSpeed + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + true + true + true + Console + + + + + + + + true + Document + + + + + ml64 /Fo $(IntDir)%(fileName).obj /c %(fileName).asm + $(IntDir)%(fileName).obj + + + + + + \ No newline at end of file diff --git a/PELoader/PELoader.vcxproj.filters b/PELoader/PELoader.vcxproj.filters new file mode 100644 index 0000000..5567236 --- /dev/null +++ b/PELoader/PELoader.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {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;ipp;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/PELoader/Readme.md b/PELoader/Readme.md new file mode 100644 index 0000000..d9845cc --- /dev/null +++ b/PELoader/Readme.md @@ -0,0 +1,10 @@ +# PELoader + +Binary source code embedded in the program. PE loader is not written with pure assembly, but is generated by Visual Stdiotdio 2017 and extracted. The extraction method can refer to the following information. + +PS: you can try to write with pure assembly, which can reduce the size of shellcode again. + +## Reference + + + diff --git a/PELoader/Source.cpp b/PELoader/Source.cpp new file mode 100644 index 0000000..c3df7f7 --- /dev/null +++ b/PELoader/Source.cpp @@ -0,0 +1,461 @@ +#include +#include +#include + +#pragma pack(push, 1) +#ifdef _WIN64 +typedef ULONG64 QWORD; +typedef QWORD DA; +typedef struct CustomHead +{ + QWORD size;//PE size + QWORD offsetSection; + QWORD numberOfSection; + QWORD offsetRelocation; + QWORD imageAddr; + QWORD offsetImportTable; + QWORD entryPoint; + QWORD flag1; + QWORD compressSize; + QWORD flag2; + QWORD rc4Size; + +}*pCustomHead; +#else +typedef DWORD DA; +typedef struct CustomHead +{ + DWORD size;//PE size + DWORD offsetSection; + DWORD numberOfSection; + DWORD offsetRelocation; + DWORD imageAddr; + DWORD offsetImportTable; + DWORD entryPoint; + DWORD flag1; + DWORD compressSize; + DWORD flag2; + DWORD rc4Size; +}*pCustomHead; +#endif // _WIN64 +#pragma pack(pop) + +typedef DWORD(__stdcall *pRtlDecompressBuffer)( + IN ULONG CompressionFormat, + OUT PVOID DestinationBuffer, + IN ULONG DestinationBufferLength, + IN PVOID SourceBuffer, + IN ULONG SourceBufferLength, + OUT PULONG pDestinationSize); + + + +DWORD getHash(const char *str) { + + DWORD h = 0; + while (*str) { + h = (h >> 12) | (h << (32 - 12)); + h += *str >= 'a' ? *str - 32 : *str; + str++; + } + return h; + +} + +DWORD getUnicodeHash(const wchar_t * str) { + DWORD h = 0; + PWORD ptr = (PWORD)str; + while (*ptr) { + h = (h >> 12) | (h << (32 - 12)); + h += (BYTE)(*ptr) >= 'a' ? (BYTE)(*ptr) - 32 : (BYTE)(*ptr); + ptr++; + } + return h; +} + +void MemCopy(char * det, char * src, DWORD size) +{ + while(size--) + { + *det++ = *src++; + } +} +DWORD MemCmp(char *buf1, char *buf2, DWORD size) +{ + while (size--) + { + if (*buf1++ != *buf2++) + return size; + } + return 0; +} + + +void Rc4Decrypt(char * buff, int size, unsigned char *key) +{ + unsigned char box[256]; + unsigned int index_i = 0; + unsigned int index_j = 0; + + + //init + for (int i = 0; i < 256; i++) + { + box[i] = i; + } + + int j = 0; + unsigned char tmp; + for (int i = 0; i < 256; i++) + { + j = (j + box[i] + key[i % 16]) % 256; + tmp = box[i]; + box[i] = box[j]; + box[j] = tmp; + } + + for (unsigned long k = 0; k < size; k++) + { + index_i = (index_i + 1) % 256; // a + index_j = (index_j + box[index_i]) % 256; // b + + tmp = box[index_i]; + box[index_i] = box[index_j]; + box[index_j] = tmp; + + DWORD r = (box[index_i] + box[index_j]) % 256; + buff[k] ^= box[r]; + } + +} + +char * GetFunction(DWORD DLLhash,DWORD APIhash) +{ + _PEB *peb = NtCurrentTeb()->ProcessEnvironmentBlock; + + LIST_ENTRY *first = peb->Ldr->InMemoryOrderModuleList.Flink; + + LIST_ENTRY *ptr = first; + char *func = NULL; + do { +#ifdef _WIN64 + LDR_DATA_TABLE_ENTRY *pLdr = (LDR_DATA_TABLE_ENTRY*)((BYTE*)ptr - 0x10); +#else // _WIN64 + LDR_DATA_TABLE_ENTRY *pLdr = (LDR_DATA_TABLE_ENTRY*)((BYTE*)ptr - 0x8); +#endif + BYTE * baseAddr = (BYTE *)pLdr->DllBase; + + ptr = ptr->Flink; + + if (!baseAddr) { + continue; + } + + PIMAGE_DOS_HEADER pDos = (PIMAGE_DOS_HEADER)(baseAddr); + PIMAGE_NT_HEADERS pNt = (PIMAGE_NT_HEADERS)(baseAddr + pDos->e_lfanew); + PIMAGE_EXPORT_DIRECTORY pExport = (PIMAGE_EXPORT_DIRECTORY)(baseAddr + pNt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress); + if (!pExport) { + continue; + } + + if (getUnicodeHash(((decltype(pLdr->FullDllName)*)(DWORD*)&(pLdr->Reserved4))->Buffer) == DLLhash) { + DWORD* nameRVAs = (DWORD*)(baseAddr + pExport->AddressOfNames); + + for (DWORD i = 0; i < pExport->NumberOfNames; i++) { + char* funName = (char*)(baseAddr + nameRVAs[i]); + //get address of function + if (func == NULL && getHash(funName) == APIhash) { + WORD ordinal = ((WORD*)(baseAddr + pExport->AddressOfNameOrdinals))[i]; + DWORD functionRVA = ((DWORD*)(baseAddr + pExport->AddressOfFunctions))[ordinal]; + func = (char*)(baseAddr + functionRVA); + break; + } + } + } + if (func != NULL) break; + } while (ptr != first); + + return func; +} + + + +#ifdef _WIN64 +extern "C" char * getCurrAddr(void); +#else +DWORD * getCurrAddr() +{ + DWORD *p = NULL; + _asm { + call fun; + fun: + pop eax; + mov p, eax; + } + return p; +} +#endif // _WIN64 + +char * ReadFileContent( + pCustomHead &head, + unsigned char ** rc4Key +) +{ + +#ifdef _WIN64 + char *curAddr = getCurrAddr(); +#else + char * curAddr = (char *)getCurrAddr(); +#endif + + char sign[] = {'\xaa', '\xbb', '\xcc', '\xdd', '\x01' , '\x01', '\x01', '\x01', '\x00' }; + while(curAddr ++ ) + { + if (MemCmp(curAddr, sign, 8) == 0) + { + curAddr += 8; + break; + } + } + + head = (pCustomHead)curAddr; + curAddr += sizeof(CustomHead); + + *rc4Key = (unsigned char *)curAddr; + curAddr += 16; + + return curAddr; +} + + +char* ApplySpace +( + char * pData, + decltype(VirtualAlloc)* pVirtualAlloc, + pCustomHead pustomHead +) +{ + char * baseAddress = NULL; + + PIMAGE_SECTION_HEADER pSection = (PIMAGE_SECTION_HEADER)(pData + pustomHead->offsetSection); + + pSection += pustomHead->numberOfSection - 1; + + baseAddress = (char *)pVirtualAlloc( + (char*)pustomHead->imageAddr, + pSection->SizeOfRawData + pSection->VirtualAddress, + MEM_COMMIT | MEM_RESERVE, + PAGE_EXECUTE_READWRITE); + + if (NULL == baseAddress) { + baseAddress = (char *)pVirtualAlloc( + NULL, + pSection->SizeOfRawData + pSection->VirtualAddress, + MEM_COMMIT | MEM_RESERVE, + PAGE_EXECUTE_READWRITE); + } + + return baseAddress; +} + + + +void CopyToMemory( + char*pData, + char*address, + pCustomHead pcustomHead +) { + + PIMAGE_SECTION_HEADER pSection = (PIMAGE_SECTION_HEADER)(pData + pcustomHead->offsetSection); + + + for (int i = 0; i < pcustomHead->numberOfSection; i++) { + if ((0 == pSection->VirtualAddress) || (0 == pSection->SizeOfRawData)) { + pSection++; + continue; + } + + DA* chSrcMem = (DA *)((DA)pData + pSection->PointerToRawData); + DA* chDestMem = (DA *)((DA)address + pSection->VirtualAddress); + DA dwSizeOfRawData = pSection->SizeOfRawData; + MemCopy((char*)chDestMem, (char *)chSrcMem, dwSizeOfRawData); + + pSection++; + } + +} + +void Reloaction(char *address, pCustomHead pcustomHead) { + PIMAGE_DOS_HEADER pDos = (PIMAGE_DOS_HEADER)address; + + PIMAGE_BASE_RELOCATION pRel = (PIMAGE_BASE_RELOCATION)(address + pcustomHead->offsetRelocation); + + if ((DA*)pRel == (DA*)pDos) { + return; + } + + while ((pRel->VirtualAddress + pRel->SizeOfBlock) != 0) { + + WORD *pLocData = (WORD*)((PBYTE)pRel + sizeof(IMAGE_BASE_RELOCATION)); + int numberOfReloc = (pRel->SizeOfBlock - sizeof(IMAGE_BASE_RELOCATION)) / sizeof(WORD); + + for (int i = 0; i < numberOfReloc; i++) { + +#ifdef _WIN64 + if ((DWORD)(pLocData[i] & 0xf000) == 0xa000) { +#else + if ((DWORD)(pLocData[i] & 0xf000) == 0x3000) { +#endif + DA *pAddress = (DA*)((DA)pDos + pRel->VirtualAddress + ((DWORD)pLocData[i] & 0x0fff)); + DA dwDelta = (DA)pDos - pcustomHead->imageAddr; + *pAddress += dwDelta; + } + + + } + pRel = (PIMAGE_BASE_RELOCATION)((PBYTE)pRel + pRel->SizeOfBlock); + } + return; +} + +void LoadDll( + char *address, + decltype(GetModuleHandleA) * myGetModuleHandleA, + decltype(LoadLibraryA) * myLoadLibraryA, + decltype(GetProcAddress) *myGetProcAddress, + pCustomHead pcustomHead +) +{ + + PIMAGE_IMPORT_DESCRIPTOR pImportTable = (PIMAGE_IMPORT_DESCRIPTOR)(address + pcustomHead->offsetImportTable); + + char *lpDllName = NULL; + HMODULE hDll = NULL; + + PIMAGE_THUNK_DATA lpImportNameArray = NULL; + PIMAGE_IMPORT_BY_NAME lpImportByName = NULL; + PIMAGE_THUNK_DATA lpImportFuncAddrArray = NULL; + FARPROC lpFuncAddress = NULL; + DA i = 0; + + while (TRUE) { + if (0 == pImportTable->OriginalFirstThunk) { + break; + } + + //load dll, get hmoudle + lpDllName = (char *)((DA)address + pImportTable->Name); + hDll = myGetModuleHandleA(lpDllName); + if (hDll == NULL) { + hDll = myLoadLibraryA(lpDllName); + if (hDll == NULL) { + pImportTable++; + continue; + } + } + + + i = 0; + lpImportNameArray = (PIMAGE_THUNK_DATA)((DA)address + pImportTable->OriginalFirstThunk); + lpImportFuncAddrArray = (PIMAGE_THUNK_DATA)((DA)address + pImportTable->FirstThunk); + while (TRUE) { + if (lpImportNameArray[i].u1.AddressOfData == 0) { + break; + } + + lpImportByName = (PIMAGE_IMPORT_BY_NAME)((DA)address + lpImportNameArray[i].u1.AddressOfData); + + if (0x80000000 & lpImportNameArray[i].u1.Ordinal) { + lpFuncAddress = myGetProcAddress(hDll, (LPCSTR)(lpImportNameArray[i].u1.Ordinal & 0x0000FFFF)); + } + else { + lpFuncAddress = myGetProcAddress(hDll, (LPCSTR)lpImportByName->Name); + } + lpImportFuncAddrArray[i].u1.Function = (DA)lpFuncAddress; + i++; + } + + pImportTable++; + } + +} + +void Run(pCustomHead pcustomHead, char *address) { + + DA * ExeEntry = (DA*)(address + pcustomHead->entryPoint); + + ((void(*) (void)) ExeEntry)(); + +} + +char * DeCompress( + char *buff, + pCustomHead pcustomHead, + decltype(VirtualAlloc)* pVirtualAlloc, + pRtlDecompressBuffer f_RtlDecompressBuffer +) +{ + char *outData = NULL; + DWORD CompressionFormat = COMPRESSION_FORMAT_LZNT1 | COMPRESSION_ENGINE_MAXIMUM; + + outData = (char *)pVirtualAlloc(NULL, pcustomHead->size, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE); + DWORD dwDeCompress; + f_RtlDecompressBuffer( + CompressionFormat, + outData, + pcustomHead->size, + buff, + pcustomHead->compressSize, + &dwDeCompress); + + return outData; +} + +void func() { + + pCustomHead pCustomHead = NULL; + unsigned char *rc4Key = NULL; + + DWORD Hash_Kernel = 0xe616dcd1; + DWORD Hash_Ntdll = 0x2911895d; + DWORD Hash_VirtualAlloc = 0x6b56ea61; + DWORD Hash_RtlDecompressBuffer = 0xd75e613c; + DWORD Hash_GetProcAddress = 0xabddce5c; + DWORD Hash_GetModuleHandleA = 0xc74459e6; + DWORD Hash_LoadLibraryA = 0x22f765ae; + + pRtlDecompressBuffer f_RtlDecompressBuffer = (pRtlDecompressBuffer)GetFunction(Hash_Ntdll, Hash_RtlDecompressBuffer); + decltype(VirtualAlloc)* pVirtualAlloc = (decltype(VirtualAlloc)*) GetFunction(Hash_Kernel, Hash_VirtualAlloc); + decltype(GetProcAddress) *pGetProcAddress = (decltype(GetProcAddress) *)GetFunction(Hash_Kernel, Hash_GetProcAddress); + decltype(GetModuleHandleA) *pGetModuleHandleA = (decltype(GetModuleHandleA)*)GetFunction(Hash_Kernel, Hash_GetModuleHandleA); + decltype(LoadLibraryA) * pLoadLibraryA = (decltype(LoadLibraryA) *)GetFunction(Hash_Kernel, Hash_LoadLibraryA); + + + + char *pDataBuff = ReadFileContent(pCustomHead, &rc4Key); + + if (pCustomHead->flag2) + Rc4Decrypt(pDataBuff, pCustomHead->rc4Size, rc4Key); + + if (pCustomHead->flag1) + pDataBuff = DeCompress(pDataBuff, pCustomHead, pVirtualAlloc, f_RtlDecompressBuffer); + + char *baseAddress = ApplySpace(pDataBuff, pVirtualAlloc ,pCustomHead); + + CopyToMemory(pDataBuff, baseAddress, pCustomHead); + + Reloaction(baseAddress, pCustomHead); + + LoadDll(baseAddress, pGetModuleHandleA, pLoadLibraryA, pGetProcAddress, pCustomHead); + + Run(pCustomHead, baseAddress); + +} + + +int main(int argc, char *argv[], char ** envp) { + + func(); + + return 0; +} diff --git a/PELoader/func.asm b/PELoader/func.asm new file mode 100644 index 0000000..ec7031c --- /dev/null +++ b/PELoader/func.asm @@ -0,0 +1,13 @@ +public getCurrAddr + +_TEXT SEGMENT +getCurrAddr PROC + call f; + f: + pop rax; + ret; +getCurrAddr ENDP + +_TEXT ENDS + +END \ No newline at end of file diff --git a/PELoader/mapfile b/PELoader/mapfile new file mode 100644 index 0000000..1ed7e25 --- /dev/null +++ b/PELoader/mapfile @@ -0,0 +1,367 @@ + PELoader + + Timestamp is 5e17372e (Thu Jan 9 22:22:38 2020) + + Preferred load address is 00400000 + + Start Length Name Class + 0001:00000000 00001d87H .text$mn CODE + 0002:00000000 000000b8H .idata$5 DATA + 0002:000000b8 00000004H .00cfg DATA + 0002:000000bc 00000004H .CRT$XCA DATA + 0002:000000c0 00000004H .CRT$XCAA DATA + 0002:000000c4 00000004H .CRT$XCZ DATA + 0002:000000c8 00000004H .CRT$XIA DATA + 0002:000000cc 00000004H .CRT$XIAA DATA + 0002:000000d0 00000004H .CRT$XIAC DATA + 0002:000000d4 00000004H .CRT$XIZ DATA + 0002:000000d8 00000004H .CRT$XPA DATA + 0002:000000dc 00000004H .CRT$XPZ DATA + 0002:000000e0 00000004H .CRT$XTA DATA + 0002:000000e4 0000000cH .CRT$XTZ DATA + 0002:000000e8 00000000H .gfids$y DATA + 0002:000000f0 00000110H .rdata DATA + 0002:00000200 00000004H .rdata$sxdata DATA + 0002:00000204 000002b0H .rdata$zzzdbg DATA + 0002:000004b4 00000004H .rtc$IAA DATA + 0002:000004b8 00000004H .rtc$IZZ DATA + 0002:000004bc 00000004H .rtc$TAA DATA + 0002:000004c0 00000008H .rtc$TZZ DATA + 0002:000004c8 0000003cH .xdata$x DATA + 0002:00000504 00000000H .edata DATA + 0002:00000504 0000003cH .idata$2 DATA + 0002:00000540 00000014H .idata$3 DATA + 0002:00000554 000000b8H .idata$4 DATA + 0002:0000060c 000003a2H .idata$6 DATA + 0003:00000000 00000018H .data DATA + 0003:00000018 00000374H .bss DATA + 0004:00000000 00000060H .rsrc$01 DATA + 0004:00000060 00000180H .rsrc$02 DATA + + Address Publics by Value Rva+Base Lib:Object + + 0000:00000000 ___dynamic_value_reloc_table 00000000 + 0000:00000000 ___hybrid_code_map 00000000 + 0000:00000000 ___guard_fids_table 00000000 + 0000:00000000 ___guard_longjmp_table 00000000 + 0000:00000000 ___volatile_metadata 00000000 + 0000:00000000 ___guard_fids_count 00000000 + 0000:00000000 ___enclave_config 00000000 + 0000:00000000 ___guard_iat_table 00000000 + 0000:00000000 ___guard_longjmp_count 00000000 + 0000:00000000 ___guard_iat_count 00000000 + 0000:00000000 ___hybrid_auxiliary_iat 00000000 + 0000:00000000 ___hybrid_code_map_count 00000000 + 0000:00000001 ___safe_se_handler_count 00000001 + 0000:00000100 ___guard_flags 00000100 + 0000:00000000 ___ImageBase 00400000 + 0001:00000000 ?func@@YAXXZ 00401000 f Source.obj + 0001:000000d7 ?ApplySpace@@YAPADPADP6GPAXPAXKKK@ZPAUCustomHead@@@Z 004010d7 f Source.obj + 0001:0000011b ?CopyToMemory@@YAXPAD0PAUCustomHead@@@Z 0040111b f Source.obj + 0001:00000164 ?DeCompress@@YAPADPADPAUCustomHead@@P6GPAXPAXKKK@ZP6GKK2K2KPAK@Z@Z 00401164 f Source.obj + 0001:00000197 ?GetFunction@@YAPADKK@Z 00401197 f Source.obj + 0001:0000024f ?LoadDll@@YAXPADP6GPAUHINSTANCE__@@PBD@Z2P6GP6GHXZPAU1@1@ZPAUCustomHead@@@Z 0040124f f Source.obj + 0001:000002e9 ?MemCmp@@YAKPAD0K@Z 004012e9 f Source.obj + 0001:00000316 ?MemCopy@@YAXPAD0K@Z 00401316 f Source.obj + 0001:00000337 ?Rc4Decrypt@@YAXPADHPAE@Z 00401337 f Source.obj + 0001:0000040d ?ReadFileContent@@YAPADAAPAUCustomHead@@PAPAE@Z 0040140d f Source.obj + 0001:00000460 ?Reloaction@@YAXPADPAUCustomHead@@@Z 00401460 f Source.obj + 0001:000004ce ?Run@@YAXPAUCustomHead@@PAD@Z 004014ce f Source.obj + 0001:000004dd ?__empty_global_delete@@YAXPAXI@Z 004014dd f i Source.obj + 0001:000004dd ?__empty_global_delete@@YAXPAX@Z 004014dd f i Source.obj + 0001:000004de ?getCurrAddr@@YAPAKXZ 004014de f Source.obj + 0001:000004f4 ?getHash@@YAKPBD@Z 004014f4 f Source.obj + 0001:0000051e ?getUnicodeHash@@YAKPB_W@Z 0040151e f Source.obj + 0001:0000054d _main 0040154d f Source.obj + 0001:00000870 ?configure_argv@__scrt_narrow_argv_policy@@SAHXZ 00401870 f i MSVCRTD:exe_main.obj + 0001:00000890 ?initialize_environment@__scrt_narrow_environment_policy@@SAHXZ 00401890 f i MSVCRTD:exe_main.obj + 0001:000008d0 ?set_app_type@__scrt_main_policy@@SAXXZ 004018d0 f i MSVCRTD:exe_main.obj + 0001:000008e0 ?set_commode@__scrt_file_policy@@SAXXZ 004018e0 f i MSVCRTD:exe_main.obj + 0001:00000900 ?set_fmode@__scrt_file_policy@@SAXXZ 00401900 f i MSVCRTD:exe_main.obj + 0001:00000920 _mainCRTStartup 00401920 f MSVCRTD:exe_main.obj + 0001:00000930 ??$__crt_fast_decode_pointer@PAP6AXXZ@@YAPAP6AXXZQAP6AXXZ@Z 00401930 f i MSVCRTD:utility.obj + 0001:00000960 ??$__crt_fast_encode_pointer@PAP6AXXZ@@YAPAP6AXXZQAP6AXXZ@Z 00401960 f i MSVCRTD:utility.obj + 0001:00000990 ?__crt_rotate_pointer_value@@YAIIH@Z 00401990 f i MSVCRTD:utility.obj + 0001:00000aa0 _NtCurrentTeb 00401aa0 f i MSVCRTD:utility.obj + 0001:00000ab0 ___scrt_acquire_startup_lock 00401ab0 f MSVCRTD:utility.obj + 0001:00000b00 ___scrt_dllmain_after_initialize_c 00401b00 f MSVCRTD:utility.obj + 0001:00000b30 ___scrt_dllmain_before_initialize_c 00401b30 f MSVCRTD:utility.obj + 0001:00000b50 ___scrt_dllmain_crt_thread_attach 00401b50 f MSVCRTD:utility.obj + 0001:00000b80 ___scrt_dllmain_crt_thread_detach 00401b80 f MSVCRTD:utility.obj + 0001:00000ba0 ___scrt_dllmain_exception_filter 00401ba0 f MSVCRTD:utility.obj + 0001:00000bf0 ___scrt_dllmain_uninitialize_c 00401bf0 f MSVCRTD:utility.obj + 0001:00000c20 ___scrt_dllmain_uninitialize_critical 00401c20 f MSVCRTD:utility.obj + 0001:00000c40 ___scrt_initialize_crt 00401c40 f MSVCRTD:utility.obj + 0001:00000c90 ___scrt_initialize_onexit_tables 00401c90 f MSVCRTD:utility.obj + 0001:00000d70 ___scrt_is_nonwritable_in_current_image 00401d70 f MSVCRTD:utility.obj + 0001:00000ea0 ___scrt_release_startup_lock 00401ea0 f MSVCRTD:utility.obj + 0001:00000ed0 ___scrt_uninitialize_crt 00401ed0 f MSVCRTD:utility.obj + 0001:00000f10 __onexit 00401f10 f MSVCRTD:utility.obj + 0001:00000f80 _at_quick_exit 00401f80 f MSVCRTD:utility.obj + 0001:00000fd0 _atexit 00401fd0 f MSVCRTD:utility.obj + 0001:00001070 ___security_init_cookie 00402070 f MSVCRTD:gs_support.obj + 0001:000010f0 __get_startup_new_mode 004020f0 f MSVCRTD:new_mode.obj + 0001:000010f0 __matherr 004020f0 f MSVCRTD:matherr.obj + 0001:000010f0 ___scrt_stub_for_initialize_mta 004020f0 f MSVCRTD:utility_desktop.obj + 0001:000010f0 __get_startup_thread_locale_mode 004020f0 f MSVCRTD:thread_locale.obj + 0001:000010f0 ___scrt_initialize_winrt 004020f0 f MSVCRTD:utility_desktop.obj + 0001:000010f0 __get_startup_commit_mode 004020f0 f MSVCRTD:commit_mode.obj + 0001:000010f0 ___scrt_stub_for_is_c_termination_complete 004020f0 f MSVCRTD:ucrt_stubs.obj + 0001:000010f0 ___scrt_exe_initialize_mta 004020f0 f MSVCRTD:utility_desktop.obj + 0001:000010f0 __is_c_termination_complete 004020f0 f MSVCRTD:ucrt_stubs.obj + 0001:00001100 __get_startup_argv_mode 00402100 f MSVCRTD:argv_mode.obj + 0001:00001110 __get_startup_file_mode 00402110 f MSVCRTD:file_mode.obj + 0001:00001120 ?__scrt_initialize_type_info@@YAXXZ 00402120 f MSVCRTD:tncleanup.obj + 0001:00001130 ?__scrt_uninitialize_type_info@@YAXXZ 00402130 f MSVCRTD:tncleanup.obj + 0001:00001150 ___vcrt_initialize 00402150 f MSVCRTD:ucrt_stubs.obj + 0001:00001150 ___vcrt_thread_detach 00402150 f MSVCRTD:ucrt_stubs.obj + 0001:00001150 ___acrt_thread_attach 00402150 f MSVCRTD:ucrt_stubs.obj + 0001:00001150 ___acrt_uninitialize 00402150 f MSVCRTD:ucrt_stubs.obj + 0001:00001150 ___scrt_stub_for_acrt_thread_attach 00402150 f MSVCRTD:ucrt_stubs.obj + 0001:00001150 ___vcrt_thread_attach 00402150 f MSVCRTD:ucrt_stubs.obj + 0001:00001150 ___scrt_stub_for_acrt_uninitialize 00402150 f MSVCRTD:ucrt_stubs.obj + 0001:00001150 __should_initialize_environment 00402150 f MSVCRTD:env_mode.obj + 0001:00001150 ___vcrt_uninitialize_critical 00402150 f MSVCRTD:ucrt_stubs.obj + 0001:00001150 ___vcrt_uninitialize 00402150 f MSVCRTD:ucrt_stubs.obj + 0001:00001150 ___scrt_stub_for_acrt_thread_detach 00402150 f MSVCRTD:ucrt_stubs.obj + 0001:00001150 ___acrt_thread_detach 00402150 f MSVCRTD:ucrt_stubs.obj + 0001:00001150 ___acrt_initialize 00402150 f MSVCRTD:ucrt_stubs.obj + 0001:00001150 ___acrt_uninitialize_critical 00402150 f MSVCRTD:ucrt_stubs.obj + 0001:00001150 ___scrt_stub_for_acrt_uninitialize_critical 00402150 f MSVCRTD:ucrt_stubs.obj + 0001:00001150 ___scrt_stub_for_acrt_initialize 00402150 f MSVCRTD:ucrt_stubs.obj + 0001:00001160 __initialize_default_precision 00402160 f MSVCRTD:default_precision.obj + 0001:00001190 __initialize_denormal_control 00402190 f MSVCRTD:denormal_control.obj + 0001:00001190 __initialize_invalid_parameter_handler 00402190 f MSVCRTD:invalid_parameter_handler.obj + 0001:000011a0 ___local_stdio_printf_options 004021a0 f i MSVCRTD:default_local_stdio_options.obj + 0001:000011b0 ___local_stdio_scanf_options 004021b0 f i MSVCRTD:default_local_stdio_options.obj + 0001:000011c0 ___scrt_initialize_default_local_stdio_options 004021c0 f MSVCRTD:default_local_stdio_options.obj + 0001:00001200 ___scrt_is_user_matherr_present 00402200 f MSVCRTD:matherr_detection.obj + 0001:00001230 ___scrt_get_dyn_tls_init_callback 00402230 f MSVCRTD:dyn_tls_init.obj + 0001:00001240 ___scrt_get_dyn_tls_dtor_callback 00402240 f MSVCRTD:dyn_tls_dtor.obj + 0001:00001250 ___scrt_fastfail 00402250 f MSVCRTD:utility_desktop.obj + 0001:00001390 ___scrt_get_show_window_mode 00402390 f MSVCRTD:utility_desktop.obj + 0001:000013d0 ___scrt_initialize_mta 004023d0 f MSVCRTD:utility_desktop.obj + 0001:000013e0 ___scrt_is_managed_app 004023e0 f MSVCRTD:utility_desktop.obj + 0001:00001470 ___scrt_set_unhandled_exception_filter 00402470 f MSVCRTD:utility_desktop.obj + 0001:00001480 ___scrt_unhandled_exception_filter@4 00402480 f MSVCRTD:utility_desktop.obj + 0001:000014e0 __crt_debugger_hook 004024e0 f MSVCRTD:utility_desktop.obj + 0001:000014f0 __RTC_Initialize 004024f0 f MSVCRTD:initsect.obj + 0001:00001520 __RTC_Terminate 00402520 f MSVCRTD:initsect.obj + 0001:00001550 __except_handler4 00402550 f MSVCRTD:chandler4gs.obj + 0001:00001580 @_guard_check_icall_nop@4 00402580 f i MSVCRTD:guard_support.obj + 0001:00001590 _ReadNoFence 00402590 f i MSVCRTD:guard_support.obj + 0001:000015b0 _ReadPointerNoFence 004025b0 f i MSVCRTD:guard_support.obj + 0001:000015d0 __guard_icall_checks_enforced 004025d0 f i MSVCRTD:guard_support.obj + 0001:00001600 ___isa_available_init 00402600 f MSVCRTD:cpu_disp.obj + 0001:000018e0 ___scrt_is_ucrt_dll_in_use 004028e0 f MSVCRTD:ucrt_detection.obj + 0001:00001910 @__security_check_cookie@4 00402910 f MSVCRTD:secchk.obj + 0001:00001930 ___raise_securityfailure 00402930 f MSVCRTD:gs_report.obj + 0001:00001960 ___report_gsfailure 00402960 f MSVCRTD:gs_report.obj + 0001:00001a70 ___report_rangecheckfailure 00402a70 f MSVCRTD:gs_report.obj + 0001:00001a80 ___report_securityfailure 00402a80 f MSVCRTD:gs_report.obj + 0001:00001b60 ___report_securityfailureEx 00402b60 f MSVCRTD:gs_report.obj + 0001:00001c85 ___std_type_info_destroy_list 00402c85 f vcruntimed:VCRUNTIME140D.dll + 0001:00001c8b _memset 00402c8b f vcruntimed:VCRUNTIME140D.dll + 0001:00001c91 __except_handler4_common 00402c91 f vcruntimed:VCRUNTIME140D.dll + 0001:00001c97 __seh_filter_exe 00402c97 f ucrtd:ucrtbased.dll + 0001:00001c9d __set_app_type 00402c9d f ucrtd:ucrtbased.dll + 0001:00001ca3 ___setusermatherr 00402ca3 f ucrtd:ucrtbased.dll + 0001:00001ca9 __configure_narrow_argv 00402ca9 f ucrtd:ucrtbased.dll + 0001:00001caf __initialize_narrow_environment 00402caf f ucrtd:ucrtbased.dll + 0001:00001cb5 __get_initial_narrow_environment 00402cb5 f ucrtd:ucrtbased.dll + 0001:00001cbb __initterm 00402cbb f ucrtd:ucrtbased.dll + 0001:00001cc1 __initterm_e 00402cc1 f ucrtd:ucrtbased.dll + 0001:00001cc7 _exit 00402cc7 f ucrtd:ucrtbased.dll + 0001:00001ccd __exit 00402ccd f ucrtd:ucrtbased.dll + 0001:00001cd3 __set_fmode 00402cd3 f ucrtd:ucrtbased.dll + 0001:00001cd9 ___p___argc 00402cd9 f ucrtd:ucrtbased.dll + 0001:00001cdf ___p___argv 00402cdf f ucrtd:ucrtbased.dll + 0001:00001ce5 __cexit 00402ce5 f ucrtd:ucrtbased.dll + 0001:00001ceb __c_exit 00402ceb f ucrtd:ucrtbased.dll + 0001:00001cf1 __register_thread_local_exe_atexit_callback 00402cf1 f ucrtd:ucrtbased.dll + 0001:00001cf7 __configthreadlocale 00402cf7 f ucrtd:ucrtbased.dll + 0001:00001cfd __set_new_mode 00402cfd f ucrtd:ucrtbased.dll + 0001:00001d03 ___p__commode 00402d03 f ucrtd:ucrtbased.dll + 0001:00001d09 __seh_filter_dll 00402d09 f ucrtd:ucrtbased.dll + 0001:00001d0f __initialize_onexit_table 00402d0f f ucrtd:ucrtbased.dll + 0001:00001d15 __register_onexit_function 00402d15 f ucrtd:ucrtbased.dll + 0001:00001d1b __execute_onexit_table 00402d1b f ucrtd:ucrtbased.dll + 0001:00001d21 __crt_atexit 00402d21 f ucrtd:ucrtbased.dll + 0001:00001d27 __crt_at_quick_exit 00402d27 f ucrtd:ucrtbased.dll + 0001:00001d2d __controlfp_s 00402d2d f ucrtd:ucrtbased.dll + 0001:00001d33 _terminate 00402d33 f ucrtd:ucrtbased.dll + 0001:00001d39 _QueryPerformanceCounter@4 00402d39 f kernel32:KERNEL32.dll + 0001:00001d3f _GetCurrentProcessId@0 00402d3f f kernel32:KERNEL32.dll + 0001:00001d45 _GetCurrentThreadId@0 00402d45 f kernel32:KERNEL32.dll + 0001:00001d4b _GetSystemTimeAsFileTime@4 00402d4b f kernel32:KERNEL32.dll + 0001:00001d51 _InitializeSListHead@4 00402d51 f kernel32:KERNEL32.dll + 0001:00001d57 _IsDebuggerPresent@0 00402d57 f kernel32:KERNEL32.dll + 0001:00001d5d _UnhandledExceptionFilter@4 00402d5d f kernel32:KERNEL32.dll + 0001:00001d63 _SetUnhandledExceptionFilter@4 00402d63 f kernel32:KERNEL32.dll + 0001:00001d69 _GetStartupInfoW@4 00402d69 f kernel32:KERNEL32.dll + 0001:00001d6f _IsProcessorFeaturePresent@4 00402d6f f kernel32:KERNEL32.dll + 0001:00001d75 _GetModuleHandleW@4 00402d75 f kernel32:KERNEL32.dll + 0001:00001d7b _GetCurrentProcess@0 00402d7b f kernel32:KERNEL32.dll + 0001:00001d81 _TerminateProcess@8 00402d81 f kernel32:KERNEL32.dll + 0002:00000000 __imp__SetUnhandledExceptionFilter@4 00403000 kernel32:KERNEL32.dll + 0002:00000004 __imp__GetCurrentProcessId@0 00403004 kernel32:KERNEL32.dll + 0002:00000008 __imp__GetCurrentThreadId@0 00403008 kernel32:KERNEL32.dll + 0002:0000000c __imp__TerminateProcess@8 0040300c kernel32:KERNEL32.dll + 0002:00000010 __imp__GetCurrentProcess@0 00403010 kernel32:KERNEL32.dll + 0002:00000014 __imp__GetModuleHandleW@4 00403014 kernel32:KERNEL32.dll + 0002:00000018 __imp__IsProcessorFeaturePresent@4 00403018 kernel32:KERNEL32.dll + 0002:0000001c __imp__GetStartupInfoW@4 0040301c kernel32:KERNEL32.dll + 0002:00000020 __imp__QueryPerformanceCounter@4 00403020 kernel32:KERNEL32.dll + 0002:00000024 __imp__UnhandledExceptionFilter@4 00403024 kernel32:KERNEL32.dll + 0002:00000028 __imp__IsDebuggerPresent@0 00403028 kernel32:KERNEL32.dll + 0002:0000002c __imp__InitializeSListHead@4 0040302c kernel32:KERNEL32.dll + 0002:00000030 __imp__GetSystemTimeAsFileTime@4 00403030 kernel32:KERNEL32.dll + 0002:00000034 \177KERNEL32_NULL_THUNK_DATA 00403034 kernel32:KERNEL32.dll + 0002:00000038 __imp__memset 00403038 vcruntimed:VCRUNTIME140D.dll + 0002:0000003c __imp___except_handler4_common 0040303c vcruntimed:VCRUNTIME140D.dll + 0002:00000040 __imp____std_type_info_destroy_list 00403040 vcruntimed:VCRUNTIME140D.dll + 0002:00000044 \177VCRUNTIME140D_NULL_THUNK_DATA 00403044 vcruntimed:VCRUNTIME140D.dll + 0002:00000048 __imp___c_exit 00403048 ucrtd:ucrtbased.dll + 0002:0000004c __imp___register_thread_local_exe_atexit_callback 0040304c ucrtd:ucrtbased.dll + 0002:00000050 __imp___configthreadlocale 00403050 ucrtd:ucrtbased.dll + 0002:00000054 __imp___set_new_mode 00403054 ucrtd:ucrtbased.dll + 0002:00000058 __imp____p__commode 00403058 ucrtd:ucrtbased.dll + 0002:0000005c __imp____p___argv 0040305c ucrtd:ucrtbased.dll + 0002:00000060 __imp___initialize_onexit_table 00403060 ucrtd:ucrtbased.dll + 0002:00000064 __imp___register_onexit_function 00403064 ucrtd:ucrtbased.dll + 0002:00000068 __imp___execute_onexit_table 00403068 ucrtd:ucrtbased.dll + 0002:0000006c __imp___crt_atexit 0040306c ucrtd:ucrtbased.dll + 0002:00000070 __imp___crt_at_quick_exit 00403070 ucrtd:ucrtbased.dll + 0002:00000074 __imp___controlfp_s 00403074 ucrtd:ucrtbased.dll + 0002:00000078 __imp__terminate 00403078 ucrtd:ucrtbased.dll + 0002:0000007c __imp___seh_filter_dll 0040307c ucrtd:ucrtbased.dll + 0002:00000080 __imp____p___argc 00403080 ucrtd:ucrtbased.dll + 0002:00000084 __imp___set_fmode 00403084 ucrtd:ucrtbased.dll + 0002:00000088 __imp___exit 00403088 ucrtd:ucrtbased.dll + 0002:0000008c __imp__exit 0040308c ucrtd:ucrtbased.dll + 0002:00000090 __imp___initterm_e 00403090 ucrtd:ucrtbased.dll + 0002:00000094 __imp___initterm 00403094 ucrtd:ucrtbased.dll + 0002:00000098 __imp___get_initial_narrow_environment 00403098 ucrtd:ucrtbased.dll + 0002:0000009c __imp___initialize_narrow_environment 0040309c ucrtd:ucrtbased.dll + 0002:000000a0 __imp___configure_narrow_argv 004030a0 ucrtd:ucrtbased.dll + 0002:000000a4 __imp____setusermatherr 004030a4 ucrtd:ucrtbased.dll + 0002:000000a8 __imp___set_app_type 004030a8 ucrtd:ucrtbased.dll + 0002:000000ac __imp___seh_filter_exe 004030ac ucrtd:ucrtbased.dll + 0002:000000b0 __imp___cexit 004030b0 ucrtd:ucrtbased.dll + 0002:000000b4 \177ucrtbased_NULL_THUNK_DATA 004030b4 ucrtd:ucrtbased.dll + 0002:000000b8 ___guard_check_icall_fptr 004030b8 MSVCRTD:guard_support.obj + 0002:000000bc ___xc_a 004030bc MSVCRTD:initializers.obj + 0002:000000c4 ___xc_z 004030c4 MSVCRTD:initializers.obj + 0002:000000c8 ___xi_a 004030c8 MSVCRTD:initializers.obj + 0002:000000d4 ___xi_z 004030d4 MSVCRTD:initializers.obj + 0002:000000d8 ___xp_a 004030d8 MSVCRTD:initializers.obj + 0002:000000dc ___xp_z 004030dc MSVCRTD:initializers.obj + 0002:000000e0 ___xt_a 004030e0 MSVCRTD:initializers.obj + 0002:000000e4 ___xt_z 004030e4 MSVCRTD:initializers.obj + 0002:00000158 __load_config_used 00403158 MSVCRTD:loadcfg.obj + 0002:00000200 ___safe_se_handler_table 00403200 + 0002:000004b4 ___rtc_iaa 004034b4 MSVCRTD:initsect.obj + 0002:000004b8 ___rtc_izz 004034b8 MSVCRTD:initsect.obj + 0002:000004bc ___rtc_taa 004034bc MSVCRTD:initsect.obj + 0002:000004c0 ___rtc_tzz 004034c0 MSVCRTD:initsect.obj + 0002:00000504 __IMPORT_DESCRIPTOR_VCRUNTIME140D 00403504 vcruntimed:VCRUNTIME140D.dll + 0002:00000518 __IMPORT_DESCRIPTOR_ucrtbased 00403518 ucrtd:ucrtbased.dll + 0002:0000052c __IMPORT_DESCRIPTOR_KERNEL32 0040352c kernel32:KERNEL32.dll + 0002:00000540 __NULL_IMPORT_DESCRIPTOR 00403540 vcruntimed:VCRUNTIME140D.dll + 0003:00000000 ___scrt_native_dllmain_reason 00404000 MSVCRTD:utility.obj + 0003:00000004 ___scrt_default_matherr 00404004 MSVCRTD:matherr.obj + 0003:00000008 ___security_cookie_complement 00404008 MSVCRTD:gs_cookie.obj + 0003:0000000c ___security_cookie 0040400c MSVCRTD:gs_cookie.obj + 0003:00000010 ___isa_enabled 00404010 MSVCRTD:cpu_disp.obj + 0003:00000014 ___scrt_ucrt_dll_is_in_use 00404014 MSVCRTD:ucrt_stubs.obj + 0003:00000018 ___scrt_current_native_startup_state 00404018 MSVCRTD:utility.obj + 0003:0000001c ___scrt_native_startup_lock 0040401c MSVCRTD:utility.obj + 0003:00000040 ?__type_info_root_node@@3U__type_info_node@@A 00404040 MSVCRTD:tncleanup.obj + 0003:00000048 ?_OptionsStorage@?1??__local_stdio_printf_options@@9@4_KA 00404048 MSVCRTD:default_local_stdio_options.obj + 0003:00000050 ?_OptionsStorage@?1??__local_stdio_scanf_options@@9@4_KA 00404050 MSVCRTD:default_local_stdio_options.obj + 0003:00000058 ___scrt_debugger_hook_flag 00404058 MSVCRTD:utility_desktop.obj + 0003:0000005c ___isa_available 0040405c MSVCRTD:cpu_disp.obj + 0003:00000060 ___favor 00404060 MSVCRTD:cpu_disp.obj + 0003:00000384 ___dyn_tls_dtor_callback 00404384 + 0003:00000388 ___dyn_tls_init_callback 00404388 + + entry point at 0001:00000920 + + Static symbols + + 0002:ffffcfff __guard_fids__ 1003fffff MSVCRTD:guard_support.obj + 0002:ffffcfff __guard_fids___guard_icall_checks_enforced 1003fffff MSVCRTD:guard_support.obj + 0000:ffff9000 .debug$S 00400000 kernel32:KERNEL32.dll + 0000:ffff9000 .debug$S 00400000 kernel32:KERNEL32.dll + 0000:ffff9000 .debug$S 00400000 kernel32:KERNEL32.dll + 0000:ffff9000 .debug$S 00400000 kernel32:KERNEL32.dll + 0000:ffff9000 .debug$S 00400000 kernel32:KERNEL32.dll + 0000:ffff9000 .debug$S 00400000 kernel32:KERNEL32.dll + 0002:ffffd000 __guard_fids__ 00400000 MSVCRTD:exe_main.obj + 0000:ffff9000 .debug$S 00400000 kernel32:KERNEL32.dll + 0000:ffff9000 .debug$S 00400000 kernel32:KERNEL32.dll + 0000:ffff9000 .debug$S 00400000 kernel32:KERNEL32.dll + 0000:ffff9000 .debug$S 00400000 kernel32:KERNEL32.dll + 0000:ffff9000 .debug$S 00400000 kernel32:KERNEL32.dll + 0000:ffff9000 .debug$S 00400000 kernel32:KERNEL32.dll + 0000:ffff9000 .debug$S 00400000 kernel32:KERNEL32.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0002:ffffd000 __guard_fids___except_handler4 00400000 MSVCRTD:chandler4gs.obj + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0002:ffffd000 __guard_fids____scrt_set_unhandled_exception_filter 00400000 MSVCRTD:utility_desktop.obj + 0000:ffff9000 .debug$S 00400000 vcruntimed:VCRUNTIME140D.dll + 0000:ffff9000 .debug$S 00400000 vcruntimed:VCRUNTIME140D.dll + 0000:ffff9000 .debug$S 00400000 vcruntimed:VCRUNTIME140D.dll + 0002:ffffd000 __guard_fids_?pre_c_initialization@@YAHXZ 00400000 MSVCRTD:exe_main.obj + 0000:ffff9000 .debug$S 00400000 ucrtd:ucrtbased.dll + 0002:ffffd004 __guard_fids__ 00400004 MSVCRTD:exe_main.obj + 0002:ffffd008 __guard_fids__ 00400008 MSVCRTD:exe_main.obj + 0001:00000560 ?pre_c_initialization@@YAHXZ 00401560 f MSVCRTD:exe_main.obj + 0001:00000610 ?post_pgo_initialization@@YAHXZ 00401610 f MSVCRTD:exe_main.obj + 0001:00000620 ?pre_cpp_initialization@@YAXXZ 00401620 f MSVCRTD:exe_main.obj + 0001:00000640 ?__scrt_common_main@@YAHXZ 00401640 f MSVCRTD:exe_main.obj + 0001:00000650 ?__scrt_common_main_seh@@YAHXZ 00401650 f MSVCRTD:exe_main.obj + 0001:000008a0 ?invoke_main@@YAHXZ 004018a0 f MSVCRTD:exe_main.obj + 0001:000009a0 ?find_pe_section@@YAPAU_IMAGE_SECTION_HEADER@@QAEI@Z 004019a0 f MSVCRTD:utility.obj + 0001:00000a30 ?is_potentially_valid_image_base@@YA_NQAX@Z 00401a30 f MSVCRTD:utility.obj + 0001:00001000 ___get_entropy 00402000 f MSVCRTD:gs_support.obj + 0002:000000c0 ?pre_cpp_initializer@@3P6AXXZA 004030c0 MSVCRTD:exe_main.obj + 0002:000000cc ?pre_c_initializer@@3P6AHXZA 004030cc MSVCRTD:exe_main.obj + 0002:000000d0 ?post_pgo_initializer@@3P6AHXZA 004030d0 MSVCRTD:exe_main.obj + 0002:000000f0 _GS_ExceptionPointers 004030f0 MSVCRTD:gs_report.obj + 0002:000004c8 __sehtable$?__scrt_common_main_seh@@YAHXZ 004034c8 MSVCRTD:exe_main.obj + 0002:000004e8 __sehtable$___scrt_is_nonwritable_in_current_image 004034e8 MSVCRTD:utility.obj + 0002:00000650 .idata$6 00403650 vcruntimed:VCRUNTIME140D.dll + 0002:00000864 .idata$6 00403864 ucrtd:ucrtbased.dll + 0002:000009a0 .idata$6 004039a0 kernel32:KERNEL32.dll + 0003:00000020 ?is_initialized_as_dll@@3_NA 00404020 MSVCRTD:utility.obj + 0003:00000021 ?module_local_atexit_table_initialized@@3_NA 00404021 MSVCRTD:utility.obj + 0003:00000024 ?module_local_atexit_table@@3U_onexit_table_t@@A 00404024 MSVCRTD:utility.obj + 0003:00000030 ?module_local_at_quick_exit_table@@3U_onexit_table_t@@A 00404030 MSVCRTD:utility.obj + 0003:00000068 _GS_ExceptionRecord 00404068 MSVCRTD:gs_report.obj + 0003:000000b8 _GS_ContextRecord 004040b8 MSVCRTD:gs_report.obj + 0004:00000060 $R000000 00405060 * linker generated manifest res * diff --git a/PELoader/mapfile64 b/PELoader/mapfile64 new file mode 100644 index 0000000..87757e4 --- /dev/null +++ b/PELoader/mapfile64 @@ -0,0 +1,529 @@ + PELoader + + Timestamp is 5e11f470 (Sun Jan 5 22:36:32 2020) + + Preferred load address is 0000000140000000 + + Start Length Name Class + 0001:00000000 00002390H .text$mn CODE + 0001:00002390 00000020H .text$mn$00 CODE + 0001:000023b0 0000006dH .text$x CODE + 0002:00000000 00000178H .idata$5 DATA + 0002:00000178 00000010H .00cfg DATA + 0002:00000188 00000008H .CRT$XCA DATA + 0002:00000190 00000008H .CRT$XCAA DATA + 0002:00000198 00000008H .CRT$XCZ DATA + 0002:000001a0 00000008H .CRT$XIA DATA + 0002:000001a8 00000008H .CRT$XIAA DATA + 0002:000001b0 00000008H .CRT$XIAC DATA + 0002:000001b8 00000008H .CRT$XIZ DATA + 0002:000001c0 00000008H .CRT$XPA DATA + 0002:000001c8 00000008H .CRT$XPZ DATA + 0002:000001d0 00000008H .CRT$XTA DATA + 0002:000001d8 00000008H .CRT$XTZ DATA + 0002:000001e0 00000000H .gfids$y DATA + 0002:000001e0 00000170H .rdata DATA + 0002:00000350 000002d0H .rdata$zzzdbg DATA + 0002:00000620 00000008H .rtc$IAA DATA + 0002:00000628 00000008H .rtc$IZZ DATA + 0002:00000630 00000008H .rtc$TAA DATA + 0002:00000638 00000008H .rtc$TZZ DATA + 0002:00000640 000001dcH .xdata DATA + 0002:0000081c 00000000H .edata DATA + 0002:0000081c 0000003cH .idata$2 DATA + 0002:00000858 00000018H .idata$3 DATA + 0002:00000870 00000178H .idata$4 DATA + 0002:000009e8 000003c8H .idata$6 DATA + 0003:00000000 00000040H .data DATA + 0003:00000040 00000600H .bss DATA + 0004:00000000 00000378H .pdata DATA + 0005:00000000 00000060H .rsrc$01 DATA + 0005:00000060 00000180H .rsrc$02 DATA + + Address Publics by Value Rva+Base Lib:Object + + 0000:00000000 __guard_iat_table 0000000000000000 + 0000:00000000 __dynamic_value_reloc_table 0000000000000000 + 0000:00000000 __volatile_metadata 0000000000000000 + 0000:00000000 __enclave_config 0000000000000000 + 0000:00000000 __guard_iat_count 0000000000000000 + 0000:00000000 __guard_longjmp_count 0000000000000000 + 0000:00000000 __hybrid_auxiliary_iat 0000000000000000 + 0000:00000000 ___safe_se_handler_table 0000000000000000 + 0000:00000000 __guard_fids_count 0000000000000000 + 0000:00000000 __hybrid_code_map 0000000000000000 + 0000:00000000 ___safe_se_handler_count 0000000000000000 + 0000:00000000 __hybrid_code_map_count 0000000000000000 + 0000:00000000 __guard_fids_table 0000000000000000 + 0000:00000000 __guard_longjmp_table 0000000000000000 + 0000:00000100 __guard_flags 0000000000000100 + 0000:00000000 __ImageBase 0000000140000000 + 0001:00000000 ?func@@YAXXZ 0000000140001000 f Source.obj + 0001:00000120 getCurrAddr 0000000140001120 f func.obj + 0001:00000128 ?ApplySpace@@YAPEADPEADP6APEAXPEAX_KKK@ZPEAUCustomHead@@@Z 0000000140001128 f Source.obj + 0001:00000198 ?CopyToMemory@@YAXPEAD0PEAUCustomHead@@@Z 0000000140001198 f Source.obj + 0001:00000214 ?DeCompress@@YAPEADPEADPEAUCustomHead@@P6APEAXPEAX_KKK@ZP6AKK2K2KPEAK@Z@Z 0000000140001214 f Source.obj + 0001:00000288 ?GetFunction@@YAPEADKK@Z 0000000140001288 f Source.obj + 0001:00000370 ?LoadDll@@YAXPEADP6APEAUHINSTANCE__@@PEBD@Z2P6AP6A_JXZPEAU1@1@ZPEAUCustomHead@@@Z 0000000140001370 f Source.obj + 0001:00000440 ?MemCmp@@YAKPEAD0K@Z 0000000140001440 f Source.obj + 0001:00000468 ?MemCopy@@YAXPEAD0K@Z 0000000140001468 f Source.obj + 0001:00000480 ?Rc4Decrypt@@YAXPEADHPEAE@Z 0000000140001480 f Source.obj + 0001:0000057c ?ReadFileContent@@YAPEADAEAPEAUCustomHead@@PEAPEAE@Z 000000014000157c f Source.obj + 0001:000005fc ?Reloaction@@YAXPEADPEAUCustomHead@@@Z 00000001400015fc f Source.obj + 0001:00000698 ?Run@@YAXPEAUCustomHead@@PEAD@Z 0000000140001698 f Source.obj + 0001:000006b0 _initialize_invalid_parameter_handler 00000001400016b0 f i MSVCRTD:invalid_parameter_handler.obj + 0001:000006b0 ?__empty_global_delete@@YAXPEAX_K@Z 00000001400016b0 f i Source.obj + 0001:000006b0 _initialize_denormal_control 00000001400016b0 f i MSVCRTD:denormal_control.obj + 0001:000006b0 ?__empty_global_delete@@YAXPEAX@Z 00000001400016b0 f i Source.obj + 0001:000006b4 ?getHash@@YAKPEBD@Z 00000001400016b4 f Source.obj + 0001:000006e0 ?getUnicodeHash@@YAKPEB_W@Z 00000001400016e0 f Source.obj + 0001:0000070c main 000000014000170c f Source.obj + 0001:000009d0 ?configure_argv@__scrt_narrow_argv_policy@@SAHXZ 00000001400019d0 f i MSVCRTD:exe_main.obj + 0001:000009f0 ?initialize_environment@__scrt_narrow_environment_policy@@SAHXZ 00000001400019f0 f i MSVCRTD:exe_main.obj + 0001:00000a40 ?set_app_type@__scrt_main_policy@@SAXXZ 0000000140001a40 f i MSVCRTD:exe_main.obj + 0001:00000a60 ?set_commode@__scrt_file_policy@@SAXXZ 0000000140001a60 f i MSVCRTD:exe_main.obj + 0001:00000a80 ?set_fmode@__scrt_file_policy@@SAXXZ 0000000140001a80 f i MSVCRTD:exe_main.obj + 0001:00000aa0 mainCRTStartup 0000000140001aa0 f MSVCRTD:exe_main.obj + 0001:00000ab0 ??$__crt_fast_decode_pointer@PEAP6AXXZ@@YAPEAP6AXXZQEAP6AXXZ@Z 0000000140001ab0 f i MSVCRTD:utility.obj + 0001:00000af0 ??$__crt_fast_encode_pointer@PEAP6AXXZ@@YAPEAP6AXXZQEAP6AXXZ@Z 0000000140001af0 f i MSVCRTD:utility.obj + 0001:00000b30 ?__crt_rotate_pointer_value@@YA_K_KH@Z 0000000140001b30 f i MSVCRTD:utility.obj + 0001:00000cb0 NtCurrentTeb 0000000140001cb0 f i MSVCRTD:utility.obj + 0001:00000cc0 __scrt_acquire_startup_lock 0000000140001cc0 f MSVCRTD:utility.obj + 0001:00000d30 __scrt_dllmain_after_initialize_c 0000000140001d30 f MSVCRTD:utility.obj + 0001:00000d60 __scrt_dllmain_before_initialize_c 0000000140001d60 f MSVCRTD:utility.obj + 0001:00000d80 __scrt_dllmain_crt_thread_attach 0000000140001d80 f MSVCRTD:utility.obj + 0001:00000db0 __scrt_dllmain_crt_thread_detach 0000000140001db0 f MSVCRTD:utility.obj + 0001:00000dd0 __scrt_dllmain_exception_filter 0000000140001dd0 f MSVCRTD:utility.obj + 0001:00000e30 __scrt_dllmain_uninitialize_c 0000000140001e30 f MSVCRTD:utility.obj + 0001:00000e60 __scrt_dllmain_uninitialize_critical 0000000140001e60 f MSVCRTD:utility.obj + 0001:00000e80 __scrt_initialize_crt 0000000140001e80 f MSVCRTD:utility.obj + 0001:00000ed0 __scrt_initialize_onexit_tables 0000000140001ed0 f MSVCRTD:utility.obj + 0001:00000fe0 __scrt_is_nonwritable_in_current_image 0000000140001fe0 f MSVCRTD:utility.obj + 0001:00001070 __scrt_release_startup_lock 0000000140002070 f MSVCRTD:utility.obj + 0001:000010a0 __scrt_uninitialize_crt 00000001400020a0 f MSVCRTD:utility.obj + 0001:000010e0 _onexit 00000001400020e0 f MSVCRTD:utility.obj + 0001:00001170 at_quick_exit 0000000140002170 f MSVCRTD:utility.obj + 0001:000011c0 atexit 00000001400021c0 f MSVCRTD:utility.obj + 0001:000012c0 __security_init_cookie 00000001400022c0 f MSVCRTD:gs_support.obj + 0001:00001340 _matherr 0000000140002340 f MSVCRTD:matherr.obj + 0001:00001350 _get_startup_argv_mode 0000000140002350 f MSVCRTD:argv_mode.obj + 0001:00001360 _get_startup_thread_locale_mode 0000000140002360 f MSVCRTD:thread_locale.obj + 0001:00001360 __scrt_exe_initialize_mta 0000000140002360 f MSVCRTD:utility_desktop.obj + 0001:00001360 _guard_rf_checks_enforced 0000000140002360 f MSVCRTD:guard_support.obj + 0001:00001360 __scrt_initialize_winrt 0000000140002360 f MSVCRTD:utility_desktop.obj + 0001:00001360 _get_startup_new_mode 0000000140002360 f MSVCRTD:new_mode.obj + 0001:00001360 __scrt_stub_for_is_c_termination_complete 0000000140002360 f MSVCRTD:ucrt_stubs.obj + 0001:00001360 _is_c_termination_complete 0000000140002360 f MSVCRTD:ucrt_stubs.obj + 0001:00001360 __scrt_stub_for_initialize_mta 0000000140002360 f MSVCRTD:utility_desktop.obj + 0001:00001360 _get_startup_commit_mode 0000000140002360 f MSVCRTD:commit_mode.obj + 0001:00001370 _get_startup_file_mode 0000000140002370 f MSVCRTD:file_mode.obj + 0001:00001380 ?__scrt_initialize_type_info@@YAXXZ 0000000140002380 f MSVCRTD:tncleanup.obj + 0001:000013a0 ?__scrt_uninitialize_type_info@@YAXXZ 00000001400023a0 f MSVCRTD:tncleanup.obj + 0001:000013c0 __acrt_initialize 00000001400023c0 f MSVCRTD:ucrt_stubs.obj + 0001:000013c0 __vcrt_thread_attach 00000001400023c0 f MSVCRTD:ucrt_stubs.obj + 0001:000013c0 __scrt_stub_for_acrt_initialize 00000001400023c0 f MSVCRTD:ucrt_stubs.obj + 0001:000013c0 _should_initialize_environment 00000001400023c0 f MSVCRTD:env_mode.obj + 0001:000013c0 __acrt_thread_attach 00000001400023c0 f MSVCRTD:ucrt_stubs.obj + 0001:000013c0 __acrt_thread_detach 00000001400023c0 f MSVCRTD:ucrt_stubs.obj + 0001:000013c0 __scrt_stub_for_acrt_thread_detach 00000001400023c0 f MSVCRTD:ucrt_stubs.obj + 0001:000013c0 __vcrt_thread_detach 00000001400023c0 f MSVCRTD:ucrt_stubs.obj + 0001:000013c0 __vcrt_initialize 00000001400023c0 f MSVCRTD:ucrt_stubs.obj + 0001:000013c0 __scrt_stub_for_acrt_thread_attach 00000001400023c0 f MSVCRTD:ucrt_stubs.obj + 0001:000013d0 __local_stdio_printf_options 00000001400023d0 f i MSVCRTD:default_local_stdio_options.obj + 0001:000013e0 __local_stdio_scanf_options 00000001400023e0 f i MSVCRTD:default_local_stdio_options.obj + 0001:000013f0 __scrt_initialize_default_local_stdio_options 00000001400023f0 f MSVCRTD:default_local_stdio_options.obj + 0001:00001440 __scrt_is_user_matherr_present 0000000140002440 f MSVCRTD:matherr_detection.obj + 0001:00001470 __scrt_get_dyn_tls_init_callback 0000000140002470 f MSVCRTD:dyn_tls_init.obj + 0001:00001480 __scrt_get_dyn_tls_dtor_callback 0000000140002480 f MSVCRTD:dyn_tls_dtor.obj + 0001:00001490 __crt_debugger_hook 0000000140002490 f MSVCRTD:utility_desktop.obj + 0001:000014a0 __scrt_fastfail 00000001400024a0 f MSVCRTD:utility_desktop.obj + 0001:00001640 __scrt_get_show_window_mode 0000000140002640 f MSVCRTD:utility_desktop.obj + 0001:000016a0 __scrt_initialize_mta 00000001400026a0 f MSVCRTD:utility_desktop.obj + 0001:000016b0 __scrt_is_managed_app 00000001400026b0 f MSVCRTD:utility_desktop.obj + 0001:00001760 __scrt_set_unhandled_exception_filter 0000000140002760 f MSVCRTD:utility_desktop.obj + 0001:00001780 __scrt_unhandled_exception_filter 0000000140002780 f MSVCRTD:utility_desktop.obj + 0001:00001800 _RTC_Initialize 0000000140002800 f MSVCRTD:initsect.obj + 0001:00001850 _RTC_Terminate 0000000140002850 f MSVCRTD:initsect.obj + 0001:000018a0 _guard_check_icall_nop 00000001400028a0 f i MSVCRTD:guard_support.obj + 0001:000018b0 ReadNoFence64 00000001400028b0 f i MSVCRTD:guard_support.obj + 0001:000018d0 ReadPointerNoFence 00000001400028d0 f i MSVCRTD:guard_support.obj + 0001:000018f0 _guard_icall_checks_enforced 00000001400028f0 f i MSVCRTD:guard_support.obj + 0001:00001930 __isa_available_init 0000000140002930 f MSVCRTD:cpu_disp.obj + 0001:00001c80 __scrt_is_ucrt_dll_in_use 0000000140002c80 f MSVCRTD:ucrt_detection.obj + 0001:00001cb0 __GSHandlerCheck 0000000140002cb0 f MSVCRTD:gshandler.obj + 0001:00001cf0 __GSHandlerCheckCommon 0000000140002cf0 f MSVCRTD:gshandler.obj + 0001:00001e00 __security_check_cookie 0000000140002e00 f MSVCRTD:amdsecgs.obj + 0001:00001e30 __raise_securityfailure 0000000140002e30 f MSVCRTD:gs_report.obj + 0001:00001e70 __report_gsfailure 0000000140002e70 f MSVCRTD:gs_report.obj + 0001:00001f50 __report_rangecheckfailure 0000000140002f50 f MSVCRTD:gs_report.obj + 0001:00001f70 __report_securityfailure 0000000140002f70 f MSVCRTD:gs_report.obj + 0001:00002010 __report_securityfailureEx 0000000140003010 f MSVCRTD:gs_report.obj + 0001:00002272 __C_specific_handler 0000000140003272 f vcruntimed:VCRUNTIME140D.dll + 0001:00002278 __std_type_info_destroy_list 0000000140003278 f vcruntimed:VCRUNTIME140D.dll + 0001:0000227e _seh_filter_exe 000000014000327e f ucrtd:ucrtbased.dll + 0001:00002284 _set_app_type 0000000140003284 f ucrtd:ucrtbased.dll + 0001:0000228a __setusermatherr 000000014000328a f ucrtd:ucrtbased.dll + 0001:00002290 _configure_narrow_argv 0000000140003290 f ucrtd:ucrtbased.dll + 0001:00002296 _initialize_narrow_environment 0000000140003296 f ucrtd:ucrtbased.dll + 0001:0000229c _get_initial_narrow_environment 000000014000329c f ucrtd:ucrtbased.dll + 0001:000022a2 _initterm 00000001400032a2 f ucrtd:ucrtbased.dll + 0001:000022a8 _initterm_e 00000001400032a8 f ucrtd:ucrtbased.dll + 0001:000022ae exit 00000001400032ae f ucrtd:ucrtbased.dll + 0001:000022b4 _exit 00000001400032b4 f ucrtd:ucrtbased.dll + 0001:000022ba _set_fmode 00000001400032ba f ucrtd:ucrtbased.dll + 0001:000022c0 __p___argc 00000001400032c0 f ucrtd:ucrtbased.dll + 0001:000022c6 __p___argv 00000001400032c6 f ucrtd:ucrtbased.dll + 0001:000022cc _cexit 00000001400032cc f ucrtd:ucrtbased.dll + 0001:000022d2 _c_exit 00000001400032d2 f ucrtd:ucrtbased.dll + 0001:000022d8 _register_thread_local_exe_atexit_callback 00000001400032d8 f ucrtd:ucrtbased.dll + 0001:000022de _configthreadlocale 00000001400032de f ucrtd:ucrtbased.dll + 0001:000022e4 _set_new_mode 00000001400032e4 f ucrtd:ucrtbased.dll + 0001:000022ea __p__commode 00000001400032ea f ucrtd:ucrtbased.dll + 0001:000022f0 _seh_filter_dll 00000001400032f0 f ucrtd:ucrtbased.dll + 0001:000022f6 _initialize_onexit_table 00000001400032f6 f ucrtd:ucrtbased.dll + 0001:000022fc _register_onexit_function 00000001400032fc f ucrtd:ucrtbased.dll + 0001:00002302 _execute_onexit_table 0000000140003302 f ucrtd:ucrtbased.dll + 0001:00002308 _crt_atexit 0000000140003308 f ucrtd:ucrtbased.dll + 0001:0000230e _crt_at_quick_exit 000000014000330e f ucrtd:ucrtbased.dll + 0001:00002314 terminate 0000000140003314 f ucrtd:ucrtbased.dll + 0001:0000231a QueryPerformanceCounter 000000014000331a f kernel32:KERNEL32.dll + 0001:00002320 GetCurrentProcessId 0000000140003320 f kernel32:KERNEL32.dll + 0001:00002326 GetCurrentThreadId 0000000140003326 f kernel32:KERNEL32.dll + 0001:0000232c GetSystemTimeAsFileTime 000000014000332c f kernel32:KERNEL32.dll + 0001:00002332 InitializeSListHead 0000000140003332 f kernel32:KERNEL32.dll + 0001:00002338 RtlCaptureContext 0000000140003338 f kernel32:KERNEL32.dll + 0001:0000233e RtlLookupFunctionEntry 000000014000333e f kernel32:KERNEL32.dll + 0001:00002344 RtlVirtualUnwind 0000000140003344 f kernel32:KERNEL32.dll + 0001:0000234a IsDebuggerPresent 000000014000334a f kernel32:KERNEL32.dll + 0001:00002350 UnhandledExceptionFilter 0000000140003350 f kernel32:KERNEL32.dll + 0001:00002356 SetUnhandledExceptionFilter 0000000140003356 f kernel32:KERNEL32.dll + 0001:0000235c GetStartupInfoW 000000014000335c f kernel32:KERNEL32.dll + 0001:00002362 IsProcessorFeaturePresent 0000000140003362 f kernel32:KERNEL32.dll + 0001:00002368 GetModuleHandleW 0000000140003368 f kernel32:KERNEL32.dll + 0001:0000236e GetCurrentProcess 000000014000336e f kernel32:KERNEL32.dll + 0001:00002374 TerminateProcess 0000000140003374 f kernel32:KERNEL32.dll + 0001:00002380 __acrt_uninitialize_critical 0000000140003380 f MSVCRTD:ucrt_stubs.obj + 0001:00002380 __scrt_stub_for_acrt_uninitialize_critical 0000000140003380 f MSVCRTD:ucrt_stubs.obj + 0001:00002380 __acrt_uninitialize 0000000140003380 f MSVCRTD:ucrt_stubs.obj + 0001:00002380 __vcrt_uninitialize_critical 0000000140003380 f MSVCRTD:ucrt_stubs.obj + 0001:00002380 __vcrt_uninitialize 0000000140003380 f MSVCRTD:ucrt_stubs.obj + 0001:00002380 __scrt_stub_for_acrt_uninitialize 0000000140003380 f MSVCRTD:ucrt_stubs.obj + 0001:000023a0 _guard_dispatch_icall_nop 00000001400033a0 f MSVCRTD:guard_dispatch.obj + 0002:00000000 __imp_IsDebuggerPresent 0000000140004000 kernel32:KERNEL32.dll + 0002:00000008 __imp_GetCurrentProcessId 0000000140004008 kernel32:KERNEL32.dll + 0002:00000010 __imp_TerminateProcess 0000000140004010 kernel32:KERNEL32.dll + 0002:00000018 __imp_GetCurrentProcess 0000000140004018 kernel32:KERNEL32.dll + 0002:00000020 __imp_GetModuleHandleW 0000000140004020 kernel32:KERNEL32.dll + 0002:00000028 __imp_IsProcessorFeaturePresent 0000000140004028 kernel32:KERNEL32.dll + 0002:00000030 __imp_GetStartupInfoW 0000000140004030 kernel32:KERNEL32.dll + 0002:00000038 __imp_SetUnhandledExceptionFilter 0000000140004038 kernel32:KERNEL32.dll + 0002:00000040 __imp_UnhandledExceptionFilter 0000000140004040 kernel32:KERNEL32.dll + 0002:00000048 __imp_QueryPerformanceCounter 0000000140004048 kernel32:KERNEL32.dll + 0002:00000050 __imp_RtlVirtualUnwind 0000000140004050 kernel32:KERNEL32.dll + 0002:00000058 __imp_RtlLookupFunctionEntry 0000000140004058 kernel32:KERNEL32.dll + 0002:00000060 __imp_RtlCaptureContext 0000000140004060 kernel32:KERNEL32.dll + 0002:00000068 __imp_InitializeSListHead 0000000140004068 kernel32:KERNEL32.dll + 0002:00000070 __imp_GetSystemTimeAsFileTime 0000000140004070 kernel32:KERNEL32.dll + 0002:00000078 __imp_GetCurrentThreadId 0000000140004078 kernel32:KERNEL32.dll + 0002:00000080 \177KERNEL32_NULL_THUNK_DATA 0000000140004080 kernel32:KERNEL32.dll + 0002:00000088 __imp___std_type_info_destroy_list 0000000140004088 vcruntimed:VCRUNTIME140D.dll + 0002:00000090 __imp___C_specific_handler 0000000140004090 vcruntimed:VCRUNTIME140D.dll + 0002:00000098 \177VCRUNTIME140D_NULL_THUNK_DATA 0000000140004098 vcruntimed:VCRUNTIME140D.dll + 0002:000000a0 __imp__set_new_mode 00000001400040a0 ucrtd:ucrtbased.dll + 0002:000000a8 __imp___p__commode 00000001400040a8 ucrtd:ucrtbased.dll + 0002:000000b0 __imp__seh_filter_dll 00000001400040b0 ucrtd:ucrtbased.dll + 0002:000000b8 __imp__register_thread_local_exe_atexit_callback 00000001400040b8 ucrtd:ucrtbased.dll + 0002:000000c0 __imp__register_onexit_function 00000001400040c0 ucrtd:ucrtbased.dll + 0002:000000c8 __imp__execute_onexit_table 00000001400040c8 ucrtd:ucrtbased.dll + 0002:000000d0 __imp__crt_atexit 00000001400040d0 ucrtd:ucrtbased.dll + 0002:000000d8 __imp__crt_at_quick_exit 00000001400040d8 ucrtd:ucrtbased.dll + 0002:000000e0 __imp_terminate 00000001400040e0 ucrtd:ucrtbased.dll + 0002:000000e8 __imp__configthreadlocale 00000001400040e8 ucrtd:ucrtbased.dll + 0002:000000f0 __imp__c_exit 00000001400040f0 ucrtd:ucrtbased.dll + 0002:000000f8 __imp__cexit 00000001400040f8 ucrtd:ucrtbased.dll + 0002:00000100 __imp___p___argv 0000000140004100 ucrtd:ucrtbased.dll + 0002:00000108 __imp___p___argc 0000000140004108 ucrtd:ucrtbased.dll + 0002:00000110 __imp__set_fmode 0000000140004110 ucrtd:ucrtbased.dll + 0002:00000118 __imp__exit 0000000140004118 ucrtd:ucrtbased.dll + 0002:00000120 __imp_exit 0000000140004120 ucrtd:ucrtbased.dll + 0002:00000128 __imp__initterm_e 0000000140004128 ucrtd:ucrtbased.dll + 0002:00000130 __imp__initterm 0000000140004130 ucrtd:ucrtbased.dll + 0002:00000138 __imp__get_initial_narrow_environment 0000000140004138 ucrtd:ucrtbased.dll + 0002:00000140 __imp__initialize_narrow_environment 0000000140004140 ucrtd:ucrtbased.dll + 0002:00000148 __imp__configure_narrow_argv 0000000140004148 ucrtd:ucrtbased.dll + 0002:00000150 __imp___setusermatherr 0000000140004150 ucrtd:ucrtbased.dll + 0002:00000158 __imp__set_app_type 0000000140004158 ucrtd:ucrtbased.dll + 0002:00000160 __imp__seh_filter_exe 0000000140004160 ucrtd:ucrtbased.dll + 0002:00000168 __imp__initialize_onexit_table 0000000140004168 ucrtd:ucrtbased.dll + 0002:00000170 \177ucrtbased_NULL_THUNK_DATA 0000000140004170 ucrtd:ucrtbased.dll + 0002:00000178 __guard_check_icall_fptr 0000000140004178 MSVCRTD:guard_support.obj + 0002:00000180 __guard_dispatch_icall_fptr 0000000140004180 MSVCRTD:guard_support.obj + 0002:00000188 __xc_a 0000000140004188 MSVCRTD:initializers.obj + 0002:00000198 __xc_z 0000000140004198 MSVCRTD:initializers.obj + 0002:000001a0 __xi_a 00000001400041a0 MSVCRTD:initializers.obj + 0002:000001b8 __xi_z 00000001400041b8 MSVCRTD:initializers.obj + 0002:000001c0 __xp_a 00000001400041c0 MSVCRTD:initializers.obj + 0002:000001c8 __xp_z 00000001400041c8 MSVCRTD:initializers.obj + 0002:000001d0 __xt_a 00000001400041d0 MSVCRTD:initializers.obj + 0002:000001d8 __xt_z 00000001400041d8 MSVCRTD:initializers.obj + 0002:00000250 _load_config_used 0000000140004250 MSVCRTD:loadcfg.obj + 0002:00000620 __rtc_iaa 0000000140004620 MSVCRTD:initsect.obj + 0002:00000628 __rtc_izz 0000000140004628 MSVCRTD:initsect.obj + 0002:00000630 __rtc_taa 0000000140004630 MSVCRTD:initsect.obj + 0002:00000638 __rtc_tzz 0000000140004638 MSVCRTD:initsect.obj + 0002:0000081c __IMPORT_DESCRIPTOR_VCRUNTIME140D 000000014000481c vcruntimed:VCRUNTIME140D.dll + 0002:00000830 __IMPORT_DESCRIPTOR_ucrtbased 0000000140004830 ucrtd:ucrtbased.dll + 0002:00000844 __IMPORT_DESCRIPTOR_KERNEL32 0000000140004844 kernel32:KERNEL32.dll + 0002:00000858 __NULL_IMPORT_DESCRIPTOR 0000000140004858 vcruntimed:VCRUNTIME140D.dll + 0003:00000000 __scrt_native_dllmain_reason 0000000140005000 MSVCRTD:utility.obj + 0003:00000004 __scrt_default_matherr 0000000140005004 MSVCRTD:matherr.obj + 0003:00000008 __isa_available 0000000140005008 MSVCRTD:cpu_disp.obj + 0003:0000000c __isa_enabled 000000014000500c MSVCRTD:cpu_disp.obj + 0003:00000010 __memcpy_nt_iters 0000000140005010 MSVCRTD:cpu_disp.obj + 0003:00000018 __security_cookie_complement 0000000140005018 MSVCRTD:gs_cookie.obj + 0003:00000020 __security_cookie 0000000140005020 MSVCRTD:gs_cookie.obj + 0003:00000030 __scrt_ucrt_dll_is_in_use 0000000140005030 MSVCRTD:ucrt_stubs.obj + 0003:00000040 __scrt_current_native_startup_state 0000000140005040 MSVCRTD:utility.obj + 0003:00000048 __scrt_native_startup_lock 0000000140005048 MSVCRTD:utility.obj + 0003:00000090 ?__type_info_root_node@@3U__type_info_node@@A 0000000140005090 MSVCRTD:tncleanup.obj + 0003:000000a0 ?_OptionsStorage@?1??__local_stdio_printf_options@@9@4_KA 00000001400050a0 MSVCRTD:default_local_stdio_options.obj + 0003:000000a8 ?_OptionsStorage@?1??__local_stdio_scanf_options@@9@4_KA 00000001400050a8 MSVCRTD:default_local_stdio_options.obj + 0003:000000b0 __scrt_debugger_hook_flag 00000001400050b0 MSVCRTD:utility_desktop.obj + 0003:000000b4 __favor 00000001400050b4 MSVCRTD:cpu_disp.obj + 0003:00000630 __dyn_tls_dtor_callback 0000000140005630 + 0003:00000638 __dyn_tls_init_callback 0000000140005638 + + entry point at 0001:00000aa0 + + Static symbols + + 0002:ffffbfff __guard_fids__guard_icall_checks_enforced 000000023fffffff MSVCRTD:guard_support.obj + 0002:ffffbfff __guard_fids__ 000000023fffffff MSVCRTD:guard_support.obj + 0000:ffff7000 .debug$S 0000000140000000 kernel32:KERNEL32.dll + 0000:ffff7000 .debug$S 0000000140000000 kernel32:KERNEL32.dll + 0000:ffff7000 .debug$S 0000000140000000 kernel32:KERNEL32.dll + 0000:ffff7000 .debug$S 0000000140000000 kernel32:KERNEL32.dll + 0000:ffff7000 .debug$S 0000000140000000 kernel32:KERNEL32.dll + 0000:ffff7000 .debug$S 0000000140000000 kernel32:KERNEL32.dll + 0000:ffff7000 .debug$S 0000000140000000 kernel32:KERNEL32.dll + 0000:ffff7000 .debug$S 0000000140000000 kernel32:KERNEL32.dll + 0000:ffff7000 .debug$S 0000000140000000 kernel32:KERNEL32.dll + 0000:ffff7000 .debug$S 0000000140000000 kernel32:KERNEL32.dll + 0000:ffff7000 .debug$S 0000000140000000 kernel32:KERNEL32.dll + 0000:ffff7000 .debug$S 0000000140000000 kernel32:KERNEL32.dll + 0000:ffff7000 .debug$S 0000000140000000 kernel32:KERNEL32.dll + 0000:ffff7000 .debug$S 0000000140000000 kernel32:KERNEL32.dll + 0000:ffff7000 .debug$S 0000000140000000 kernel32:KERNEL32.dll + 0000:ffff7000 .debug$S 0000000140000000 kernel32:KERNEL32.dll + 0004:ffffa000 $pdata$?initialize_environment@__scrt_narrow_environment_policy@@SAHXZ 0000000140000000 MSVCRTD:utility.obj + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0002:ffffc000 __guard_fids_?pre_c_initialization@@YAHXZ 0000000140000000 MSVCRTD:exe_main.obj + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0002:ffffc000 $unwind$?initialize_environment@__scrt_narrow_environment_policy@@SAHXZ 0000000140000000 MSVCRTD:utility.obj + 0000:ffff7000 .debug$S 0000000140000000 vcruntimed:VCRUNTIME140D.dll + 0000:ffff7000 .debug$S 0000000140000000 vcruntimed:VCRUNTIME140D.dll + 0004:ffffa000 $pdata$?configure_argv@__scrt_narrow_argv_policy@@SAHXZ 0000000140000000 MSVCRTD:utility.obj + 0002:ffffc000 $unwind$?configure_argv@__scrt_narrow_argv_policy@@SAHXZ 0000000140000000 MSVCRTD:utility.obj + 0002:ffffc000 __guard_fids___scrt_set_unhandled_exception_filter 0000000140000000 MSVCRTD:utility_desktop.obj + 0000:ffff7000 .debug$S 0000000140000000 ucrtd:ucrtbased.dll + 0002:ffffc000 __guard_fids__ 0000000140000000 MSVCRTD:exe_main.obj + 0002:ffffc004 __guard_fids__ 0000000140000004 MSVCRTD:exe_main.obj + 0002:ffffc008 __guard_fids__ 0000000140000008 MSVCRTD:exe_main.obj + 0001:00000720 ?pre_c_initialization@@YAHXZ 0000000140001720 f MSVCRTD:exe_main.obj + 0001:000007e0 ?post_pgo_initialization@@YAHXZ 00000001400017e0 f MSVCRTD:exe_main.obj + 0001:000007f0 ?pre_cpp_initialization@@YAXXZ 00000001400017f0 f MSVCRTD:exe_main.obj + 0001:00000810 ?__scrt_common_main@@YAHXZ 0000000140001810 f MSVCRTD:exe_main.obj + 0001:00000830 ?__scrt_common_main_seh@@YAHXZ 0000000140001830 f MSVCRTD:exe_main.obj + 0001:00000a00 ?invoke_main@@YAHXZ 0000000140001a00 f MSVCRTD:exe_main.obj + 0001:00000b50 ?find_pe_section@@YAPEAU_IMAGE_SECTION_HEADER@@QEAE_K@Z 0000000140001b50 f MSVCRTD:utility.obj + 0001:00000c20 ?is_potentially_valid_image_base@@YA_NQEAX@Z 0000000140001c20 f MSVCRTD:utility.obj + 0001:00001200 __get_entropy 0000000140002200 f MSVCRTD:gs_support.obj + 0001:00001df0 $$000000 0000000140002df0 MSVCRTD:amdsecgs.obj + 0001:00002120 capture_current_context 0000000140003120 f MSVCRTD:gs_report.obj + 0001:000021c0 capture_previous_context 00000001400031c0 f MSVCRTD:gs_report.obj + 0001:00002390 $$000000 0000000140003390 MSVCRTD:guard_dispatch.obj + 0001:000023b0 ?filt$0@?0??__scrt_common_main_seh@@YAHXZ@4HA 00000001400033b0 f MSVCRTD:exe_main.obj + 0001:000023e0 __scrt_is_nonwritable_in_current_image$filt$0 00000001400033e0 f MSVCRTD:utility.obj + 0002:00000190 ?pre_cpp_initializer@@3P6AXXZEA 0000000140004190 MSVCRTD:exe_main.obj + 0002:000001a8 ?pre_c_initializer@@3P6AHXZEA 00000001400041a8 MSVCRTD:exe_main.obj + 0002:000001b0 ?post_pgo_initializer@@3P6AHXZEA 00000001400041b0 MSVCRTD:exe_main.obj + 0002:000001e0 GS_ExceptionPointers 00000001400041e0 MSVCRTD:gs_report.obj + 0002:00000640 $unwind$?func@@YAXXZ 0000000140004640 Source.obj + 0002:00000658 $unwind$?Rc4Decrypt@@YAXPEADHPEAE@Z 0000000140004658 Source.obj + 0002:00000674 $unwind$?GetFunction@@YAPEADKK@Z 0000000140004674 Source.obj + 0002:00000690 $unwind$?ReadFileContent@@YAPEADAEAPEAUCustomHead@@PEAPEAE@Z 0000000140004690 Source.obj + 0002:000006a0 $unwind$?ApplySpace@@YAPEADPEADP6APEAXPEAX_KKK@ZPEAUCustomHead@@@Z 00000001400046a0 Source.obj + 0002:000006b0 $unwind$?CopyToMemory@@YAXPEAD0PEAUCustomHead@@@Z 00000001400046b0 Source.obj + 0002:000006c8 $unwind$?Reloaction@@YAXPEADPEAUCustomHead@@@Z 00000001400046c8 Source.obj + 0002:000006d4 $unwind$?LoadDll@@YAXPEADP6APEAUHINSTANCE__@@PEBD@Z2P6AP6A_JXZPEAU1@1@ZPEAUCustomHead@@@Z 00000001400046d4 Source.obj + 0002:000006ec $unwind$?DeCompress@@YAPEADPEADPEAUCustomHead@@P6APEAXPEAX_KKK@ZP6AKK2K2KPEAK@Z@Z 00000001400046ec Source.obj + 0002:00000700 $unwind$?post_pgo_initialization@@YAHXZ 0000000140004700 MSVCRTD:exe_main.obj + 0002:00000700 $unwind$?pre_cpp_initialization@@YAXXZ 0000000140004700 MSVCRTD:exe_main.obj + 0002:00000700 $unwind$?__scrt_common_main@@YAHXZ 0000000140004700 MSVCRTD:exe_main.obj + 0002:00000700 $unwind$?configure_argv@__scrt_narrow_argv_policy@@SAHXZ 0000000140004700 MSVCRTD:exe_main.obj + 0002:00000700 $unwind$mainCRTStartup 0000000140004700 MSVCRTD:exe_main.obj + 0002:00000700 $unwind$__report_rangecheckfailure 0000000140004700 MSVCRTD:gs_report.obj + 0002:00000700 $unwind$?__scrt_initialize_type_info@@YAXXZ 0000000140004700 MSVCRTD:tncleanup.obj + 0002:00000700 $unwind$?pre_c_initialization@@YAHXZ 0000000140004700 MSVCRTD:exe_main.obj + 0002:00000700 $unwind$__scrt_dllmain_before_initialize_c 0000000140004700 MSVCRTD:utility.obj + 0002:00000700 $unwind$__scrt_dllmain_after_initialize_c 0000000140004700 MSVCRTD:utility.obj + 0002:00000700 $unwind$__scrt_dllmain_uninitialize_c 0000000140004700 MSVCRTD:utility.obj + 0002:00000700 $unwind$__scrt_dllmain_uninitialize_critical 0000000140004700 MSVCRTD:utility.obj + 0002:00000700 $unwind$__scrt_dllmain_crt_thread_attach 0000000140004700 MSVCRTD:utility.obj + 0002:00000700 $unwind$__scrt_set_unhandled_exception_filter 0000000140004700 MSVCRTD:utility_desktop.obj + 0002:00000700 $unwind$?initialize_environment@__scrt_narrow_environment_policy@@SAHXZ 0000000140004700 MSVCRTD:exe_main.obj + 0002:00000700 $unwind$__scrt_dllmain_crt_thread_detach 0000000140004700 MSVCRTD:utility.obj + 0002:00000700 $unwind$__scrt_initialize_mta 0000000140004700 MSVCRTD:utility_desktop.obj + 0002:00000700 $unwind$?set_app_type@__scrt_main_policy@@SAXXZ 0000000140004700 MSVCRTD:exe_main.obj + 0002:00000700 $unwind$main 0000000140004700 Source.obj + 0002:00000700 $unwind$?set_fmode@__scrt_file_policy@@SAXXZ 0000000140004700 MSVCRTD:exe_main.obj + 0002:00000700 $unwind$?__scrt_uninitialize_type_info@@YAXXZ 0000000140004700 MSVCRTD:tncleanup.obj + 0002:00000708 $unwind$?invoke_main@@YAHXZ 0000000140004708 MSVCRTD:exe_main.obj + 0002:00000708 $unwind$__security_init_cookie 0000000140004708 MSVCRTD:gs_support.obj + 0002:00000708 $unwind$__scrt_initialize_default_local_stdio_options 0000000140004708 MSVCRTD:default_local_stdio_options.obj + 0002:00000708 $unwind$?set_commode@__scrt_file_policy@@SAXXZ 0000000140004708 MSVCRTD:exe_main.obj + 0002:00000708 $unwind$_guard_icall_checks_enforced 0000000140004708 MSVCRTD:guard_support.obj + 0002:00000708 $unwind$__scrt_is_managed_app 0000000140004708 MSVCRTD:utility_desktop.obj + 0002:00000710 $unwind$?__scrt_common_main_seh@@YAHXZ 0000000140004710 MSVCRTD:exe_main.obj + 0002:00000730 $unwind$?filt$0@?0??__scrt_common_main_seh@@YAHXZ@4HA 0000000140004730 MSVCRTD:exe_main.obj + 0002:00000730 $unwind$__scrt_is_nonwritable_in_current_image$filt$0 0000000140004730 MSVCRTD:utility.obj + 0002:00000738 $unwind$__report_gsfailure 0000000140004738 MSVCRTD:gs_report.obj + 0002:00000738 $unwind$atexit 0000000140004738 MSVCRTD:utility.obj + 0002:00000738 $unwind$__scrt_unhandled_exception_filter 0000000140004738 MSVCRTD:utility_desktop.obj + 0002:00000738 $unwind$at_quick_exit 0000000140004738 MSVCRTD:utility.obj + 0002:00000740 $unwind$_onexit 0000000140004740 MSVCRTD:utility.obj + 0002:00000748 $unwind$__scrt_is_nonwritable_in_current_image 0000000140004748 MSVCRTD:utility.obj + 0002:00000768 $unwind$__scrt_acquire_startup_lock 0000000140004768 MSVCRTD:utility.obj + 0002:00000770 $unwind$__scrt_release_startup_lock 0000000140004770 MSVCRTD:utility.obj + 0002:00000770 $unwind$__scrt_initialize_crt 0000000140004770 MSVCRTD:utility.obj + 0002:00000770 $unwind$__report_securityfailure 0000000140004770 MSVCRTD:gs_report.obj + 0002:00000778 $unwind$__scrt_uninitialize_crt 0000000140004778 MSVCRTD:utility.obj + 0002:00000780 $unwind$__scrt_initialize_onexit_tables 0000000140004780 MSVCRTD:utility.obj + 0002:0000078c $unwind$__scrt_dllmain_exception_filter 000000014000478c MSVCRTD:utility.obj + 0002:00000794 $unwind$__raise_securityfailure 0000000140004794 MSVCRTD:gs_report.obj + 0002:00000794 $unwind$?is_potentially_valid_image_base@@YA_NQEAX@Z 0000000140004794 MSVCRTD:utility.obj + 0002:00000794 $unwind$??$__crt_fast_encode_pointer@PEAP6AXXZ@@YAPEAP6AXXZQEAP6AXXZ@Z 0000000140004794 MSVCRTD:utility.obj + 0002:00000794 $unwind$ReadPointerNoFence 0000000140004794 MSVCRTD:guard_support.obj + 0002:00000794 $unwind$??$__crt_fast_decode_pointer@PEAP6AXXZ@@YAPEAP6AXXZQEAP6AXXZ@Z 0000000140004794 MSVCRTD:utility.obj + 0002:0000079c $unwind$?find_pe_section@@YAPEAU_IMAGE_SECTION_HEADER@@QEAE_K@Z 000000014000479c MSVCRTD:utility.obj + 0002:000007a4 $unwind$__get_entropy 00000001400047a4 MSVCRTD:gs_support.obj + 0002:000007ac $unwind$__scrt_is_user_matherr_present 00000001400047ac MSVCRTD:matherr_detection.obj + 0002:000007ac $unwind$__scrt_is_ucrt_dll_in_use 00000001400047ac MSVCRTD:ucrt_detection.obj + 0002:000007b4 $unwind$__scrt_get_show_window_mode 00000001400047b4 MSVCRTD:utility_desktop.obj + 0002:000007c0 $unwind$__scrt_fastfail 00000001400047c0 MSVCRTD:utility_desktop.obj + 0002:000007cc $unwind$_RTC_Terminate 00000001400047cc MSVCRTD:initsect.obj + 0002:000007cc $unwind$_RTC_Initialize 00000001400047cc MSVCRTD:initsect.obj + 0002:000007d8 $unwind$ReadNoFence64 00000001400047d8 MSVCRTD:guard_support.obj + 0002:000007e0 $unwind$__isa_available_init 00000001400047e0 MSVCRTD:cpu_disp.obj + 0002:000007f0 $xdatasym 00000001400047f0 MSVCRTD:guard_dispatch.obj + 0002:000007f4 $unwind$__GSHandlerCheckCommon 00000001400047f4 MSVCRTD:gshandler.obj + 0002:000007fc $unwind$__GSHandlerCheck 00000001400047fc MSVCRTD:gshandler.obj + 0002:00000808 $xdatasym 0000000140004808 MSVCRTD:amdsecgs.obj + 0002:0000080c $unwind$__report_securityfailureEx 000000014000480c MSVCRTD:gs_report.obj + 0002:00000814 $unwind$capture_current_context 0000000140004814 MSVCRTD:gs_report.obj + 0002:00000814 $unwind$capture_previous_context 0000000140004814 MSVCRTD:gs_report.obj + 0002:00000a20 .idata$6 0000000140004a20 vcruntimed:VCRUNTIME140D.dll + 0002:00000c24 .idata$6 0000000140004c24 ucrtd:ucrtbased.dll + 0002:00000da2 .idata$6 0000000140004da2 kernel32:KERNEL32.dll + 0003:00000050 ?is_initialized_as_dll@@3_NA 0000000140005050 MSVCRTD:utility.obj + 0003:00000051 ?module_local_atexit_table_initialized@@3_NA 0000000140005051 MSVCRTD:utility.obj + 0003:00000058 ?module_local_atexit_table@@3U_onexit_table_t@@A 0000000140005058 MSVCRTD:utility.obj + 0003:00000070 ?module_local_at_quick_exit_table@@3U_onexit_table_t@@A 0000000140005070 MSVCRTD:utility.obj + 0003:000000c0 GS_ExceptionRecord 00000001400050c0 MSVCRTD:gs_report.obj + 0003:00000160 GS_ContextRecord 0000000140005160 MSVCRTD:gs_report.obj + 0004:00000000 $pdata$?Rc4Decrypt@@YAXPEADHPEAE@Z 0000000140006000 Source.obj + 0004:0000000c $pdata$?GetFunction@@YAPEADKK@Z 000000014000600c Source.obj + 0004:00000018 $pdata$?ReadFileContent@@YAPEADAEAPEAUCustomHead@@PEAPEAE@Z 0000000140006018 Source.obj + 0004:00000024 $pdata$?ApplySpace@@YAPEADPEADP6APEAXPEAX_KKK@ZPEAUCustomHead@@@Z 0000000140006024 Source.obj + 0004:00000030 $pdata$?CopyToMemory@@YAXPEAD0PEAUCustomHead@@@Z 0000000140006030 Source.obj + 0004:0000003c $pdata$?Reloaction@@YAXPEADPEAUCustomHead@@@Z 000000014000603c Source.obj + 0004:00000048 $pdata$?LoadDll@@YAXPEADP6APEAUHINSTANCE__@@PEBD@Z2P6AP6A_JXZPEAU1@1@ZPEAUCustomHead@@@Z 0000000140006048 Source.obj + 0004:00000054 $pdata$?DeCompress@@YAPEADPEADPEAUCustomHead@@P6APEAXPEAX_KKK@ZP6AKK2K2KPEAK@Z@Z 0000000140006054 Source.obj + 0004:00000060 $pdata$?func@@YAXXZ 0000000140006060 Source.obj + 0004:0000006c $pdata$main 000000014000606c Source.obj + 0004:00000078 $pdata$?configure_argv@__scrt_narrow_argv_policy@@SAHXZ 0000000140006078 MSVCRTD:exe_main.obj + 0004:00000084 $pdata$?initialize_environment@__scrt_narrow_environment_policy@@SAHXZ 0000000140006084 MSVCRTD:exe_main.obj + 0004:00000090 $pdata$?set_app_type@__scrt_main_policy@@SAXXZ 0000000140006090 MSVCRTD:exe_main.obj + 0004:0000009c $pdata$?set_fmode@__scrt_file_policy@@SAXXZ 000000014000609c MSVCRTD:exe_main.obj + 0004:000000a8 $pdata$?set_commode@__scrt_file_policy@@SAXXZ 00000001400060a8 MSVCRTD:exe_main.obj + 0004:000000b4 $pdata$?invoke_main@@YAHXZ 00000001400060b4 MSVCRTD:exe_main.obj + 0004:000000c0 $pdata$?pre_c_initialization@@YAHXZ 00000001400060c0 MSVCRTD:exe_main.obj + 0004:000000cc $pdata$?post_pgo_initialization@@YAHXZ 00000001400060cc MSVCRTD:exe_main.obj + 0004:000000d8 $pdata$?pre_cpp_initialization@@YAXXZ 00000001400060d8 MSVCRTD:exe_main.obj + 0004:000000e4 $pdata$?__scrt_common_main_seh@@YAHXZ 00000001400060e4 MSVCRTD:exe_main.obj + 0004:000000f0 $pdata$?filt$0@?0??__scrt_common_main_seh@@YAHXZ@4HA 00000001400060f0 MSVCRTD:exe_main.obj + 0004:000000fc $pdata$?__scrt_common_main@@YAHXZ 00000001400060fc MSVCRTD:exe_main.obj + 0004:00000108 $pdata$mainCRTStartup 0000000140006108 MSVCRTD:exe_main.obj + 0004:00000114 $pdata$atexit 0000000140006114 MSVCRTD:utility.obj + 0004:00000120 $pdata$_onexit 0000000140006120 MSVCRTD:utility.obj + 0004:0000012c $pdata$at_quick_exit 000000014000612c MSVCRTD:utility.obj + 0004:00000138 $pdata$__scrt_is_nonwritable_in_current_image 0000000140006138 MSVCRTD:utility.obj + 0004:00000144 $pdata$__scrt_is_nonwritable_in_current_image$filt$0 0000000140006144 MSVCRTD:utility.obj + 0004:00000150 $pdata$__scrt_acquire_startup_lock 0000000140006150 MSVCRTD:utility.obj + 0004:0000015c $pdata$__scrt_release_startup_lock 000000014000615c MSVCRTD:utility.obj + 0004:00000168 $pdata$__scrt_initialize_crt 0000000140006168 MSVCRTD:utility.obj + 0004:00000174 $pdata$__scrt_uninitialize_crt 0000000140006174 MSVCRTD:utility.obj + 0004:00000180 $pdata$__scrt_initialize_onexit_tables 0000000140006180 MSVCRTD:utility.obj + 0004:0000018c $pdata$__scrt_dllmain_exception_filter 000000014000618c MSVCRTD:utility.obj + 0004:00000198 $pdata$__scrt_dllmain_before_initialize_c 0000000140006198 MSVCRTD:utility.obj + 0004:000001a4 $pdata$__scrt_dllmain_after_initialize_c 00000001400061a4 MSVCRTD:utility.obj + 0004:000001b0 $pdata$__scrt_dllmain_uninitialize_c 00000001400061b0 MSVCRTD:utility.obj + 0004:000001bc $pdata$__scrt_dllmain_uninitialize_critical 00000001400061bc MSVCRTD:utility.obj + 0004:000001c8 $pdata$__scrt_dllmain_crt_thread_attach 00000001400061c8 MSVCRTD:utility.obj + 0004:000001d4 $pdata$__scrt_dllmain_crt_thread_detach 00000001400061d4 MSVCRTD:utility.obj + 0004:000001e0 $pdata$?is_potentially_valid_image_base@@YA_NQEAX@Z 00000001400061e0 MSVCRTD:utility.obj + 0004:000001ec $pdata$?find_pe_section@@YAPEAU_IMAGE_SECTION_HEADER@@QEAE_K@Z 00000001400061ec MSVCRTD:utility.obj + 0004:000001f8 $pdata$??$__crt_fast_decode_pointer@PEAP6AXXZ@@YAPEAP6AXXZQEAP6AXXZ@Z 00000001400061f8 MSVCRTD:utility.obj + 0004:00000204 $pdata$??$__crt_fast_encode_pointer@PEAP6AXXZ@@YAPEAP6AXXZQEAP6AXXZ@Z 0000000140006204 MSVCRTD:utility.obj + 0004:00000210 $pdata$__security_init_cookie 0000000140006210 MSVCRTD:gs_support.obj + 0004:0000021c $pdata$__get_entropy 000000014000621c MSVCRTD:gs_support.obj + 0004:00000228 $pdata$?__scrt_initialize_type_info@@YAXXZ 0000000140006228 MSVCRTD:tncleanup.obj + 0004:00000234 $pdata$?__scrt_uninitialize_type_info@@YAXXZ 0000000140006234 MSVCRTD:tncleanup.obj + 0004:00000240 $pdata$__scrt_initialize_default_local_stdio_options 0000000140006240 MSVCRTD:default_local_stdio_options.obj + 0004:0000024c $pdata$__scrt_is_user_matherr_present 000000014000624c MSVCRTD:matherr_detection.obj + 0004:00000258 $pdata$__scrt_get_show_window_mode 0000000140006258 MSVCRTD:utility_desktop.obj + 0004:00000264 $pdata$__scrt_is_managed_app 0000000140006264 MSVCRTD:utility_desktop.obj + 0004:00000270 $pdata$__scrt_initialize_mta 0000000140006270 MSVCRTD:utility_desktop.obj + 0004:0000027c $pdata$__scrt_set_unhandled_exception_filter 000000014000627c MSVCRTD:utility_desktop.obj + 0004:00000288 $pdata$__scrt_fastfail 0000000140006288 MSVCRTD:utility_desktop.obj + 0004:00000294 $pdata$__scrt_unhandled_exception_filter 0000000140006294 MSVCRTD:utility_desktop.obj + 0004:000002a0 $pdata$_RTC_Initialize 00000001400062a0 MSVCRTD:initsect.obj + 0004:000002ac $pdata$_RTC_Terminate 00000001400062ac MSVCRTD:initsect.obj + 0004:000002b8 $pdata$ReadNoFence64 00000001400062b8 MSVCRTD:guard_support.obj + 0004:000002c4 $pdata$ReadPointerNoFence 00000001400062c4 MSVCRTD:guard_support.obj + 0004:000002d0 $pdata$_guard_icall_checks_enforced 00000001400062d0 MSVCRTD:guard_support.obj + 0004:000002dc $pdata$__isa_available_init 00000001400062dc MSVCRTD:cpu_disp.obj + 0004:000002e8 $pdata$__scrt_is_ucrt_dll_in_use 00000001400062e8 MSVCRTD:ucrt_detection.obj + 0004:00000300 $pdata$__GSHandlerCheckCommon 0000000140006300 MSVCRTD:gshandler.obj + 0004:0000030c $pdata$__GSHandlerCheck 000000014000630c MSVCRTD:gshandler.obj + 0004:00000324 $pdata$__report_securityfailure 0000000140006324 MSVCRTD:gs_report.obj + 0004:00000330 $pdata$__report_securityfailureEx 0000000140006330 MSVCRTD:gs_report.obj + 0004:0000033c $pdata$__report_rangecheckfailure 000000014000633c MSVCRTD:gs_report.obj + 0004:00000348 $pdata$__report_gsfailure 0000000140006348 MSVCRTD:gs_report.obj + 0004:00000354 $pdata$capture_current_context 0000000140006354 MSVCRTD:gs_report.obj + 0004:00000360 $pdata$capture_previous_context 0000000140006360 MSVCRTD:gs_report.obj + 0004:0000036c $pdata$__raise_securityfailure 000000014000636c MSVCRTD:gs_report.obj + 0005:00000060 $R000000 0000000140007060 * linker generated manifest res * diff --git a/PELoader/order.txt b/PELoader/order.txt new file mode 100644 index 0000000..8c3a9c4 --- /dev/null +++ b/PELoader/order.txt @@ -0,0 +1 @@ +?func@@YAXXZ \ No newline at end of file diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..03b6cae --- /dev/null +++ b/Readme.md @@ -0,0 +1,15 @@ +# PE2Shellcode + +Converts PE so that it can be then injected just like a normal shellcode. + +# How to use + +Optional parameter. + +> P2S.exe < path of PE> [output path] [-?] +> [-r] Rc4 encrypt +> [-c] Compress PE file + +i.e. +> P2S_x86.exe test.exe test_x86.bin -c -r +> P2S_x64.exe test64.exe test_x64.bin -r diff --git a/Test/Test.vcxproj b/Test/Test.vcxproj new file mode 100644 index 0000000..e16551a --- /dev/null +++ b/Test/Test.vcxproj @@ -0,0 +1,151 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {0B7FEBF4-FBCE-46E7-B864-398625233D5C} + Win32Proj + Test + 10.0.18362.0 + + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + Level3 + Disabled + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + true + Console + + + + + Level3 + Disabled + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + true + Console + + + + + Level3 + MaxSpeed + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + true + true + true + Console + + + + + Level3 + MaxSpeed + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + true + true + true + Console + + + + + + + + + \ No newline at end of file diff --git a/Test/Test.vcxproj.filters b/Test/Test.vcxproj.filters new file mode 100644 index 0000000..69f15b8 --- /dev/null +++ b/Test/Test.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {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;ipp;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/Test/main.cpp b/Test/main.cpp new file mode 100644 index 0000000..8553ad8 --- /dev/null +++ b/Test/main.cpp @@ -0,0 +1,8 @@ +#include +#include + +int main() +{ + MessageBoxA(0, "suc", "------", 0); + return 0; +} \ No newline at end of file diff --git a/TestBin/TestBin.vcxproj b/TestBin/TestBin.vcxproj new file mode 100644 index 0000000..f40177a --- /dev/null +++ b/TestBin/TestBin.vcxproj @@ -0,0 +1,151 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {4A4DA453-788F-4D22-9A09-2134143DA1E3} + Win32Proj + TestBin + 10.0.18362.0 + + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + Level3 + Disabled + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + true + Console + + + + + Level3 + Disabled + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + true + Console + + + + + Level3 + MaxSpeed + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + true + true + true + Console + + + + + Level3 + MaxSpeed + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + true + true + true + Console + + + + + + + + + \ No newline at end of file diff --git a/TestBin/TestBin.vcxproj.filters b/TestBin/TestBin.vcxproj.filters new file mode 100644 index 0000000..69f15b8 --- /dev/null +++ b/TestBin/TestBin.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {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;ipp;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/TestBin/main.cpp b/TestBin/main.cpp new file mode 100644 index 0000000..89bb755 --- /dev/null +++ b/TestBin/main.cpp @@ -0,0 +1,24 @@ +#include +#include + +int wmain(int argc, char **argv) +{ + +#ifdef _WIN64 + HANDLE hFile = CreateFileA("test_x64.bin", GENERIC_READ, 0, 0, OPEN_EXISTING, NULL, NULL); +#else + HANDLE hFile = CreateFileA("test_x86.bin", GENERIC_READ, 0, 0, OPEN_EXISTING, NULL, NULL); +#endif // _WIN64 + + + DWORD fileSize = GetFileSize(hFile, NULL); + + void * base = VirtualAlloc(NULL, fileSize, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); + + DWORD dw; + ReadFile(hFile, base, fileSize, &dw, NULL); + + ((void(*)(void))base)(); + + return 0; +} \ No newline at end of file