From 4ec1857de120f7662b14f4d202fa9d1cfc718484 Mon Sep 17 00:00:00 2001 From: Bluzume <39113159+KuromeSan@users.noreply.github.com> Date: Wed, 11 Aug 2021 00:24:25 +1200 Subject: [PATCH] OGG Memes Thanks OGG for repeating the two bytes i needed, elsewhere in the file ;) --- .vs/RMDEC/v16/.suo | Bin 79872 -> 81920 bytes RMDEC/MVProject.cs | 44 +++++++++++++++++++++++++++++++++++++++----- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/.vs/RMDEC/v16/.suo b/.vs/RMDEC/v16/.suo index a278c71fbe2bceb8befe9421810c2c330446bdb8..f43cfe8b85efa44e7fe87736b5af5718190f6007 100644 GIT binary patch delta 4193 zcmd5}lppV@-5TOVgwc@-;eBrxPX;2gz9Y!^Sj!bULPgv@ZNx+y{&BqywKv2dTmJpRl;KC%rEwYMc(XdfT4AH@s zKy*A|86lI9OfV4igr$UR0$0>g{{Vrz7H%m6wR+9skb;P(mHL70=0(LJK|S?raa#F? zv5lxl2`z+H!d?Qm(@s5(sEp|ch~P%MsXs{QA@qi1T>b>nexXJ8$0}FZe+~mA;dI3E z-tgA>)r4Zg8bWxil<2Y$UqQVyM6aiQ1E&XEANsYgUCWI+bnrx4i99?iP1;}=W(YC<7nPFJ4po?_&qTAJiD`9p zdOaO?G%;4cQXNd-KDrT@@I5EIG*Fuin$xvUgFmj~D|JE}bV6s0+Qux*#_aT)k7+_8 zmZn)%>nJRP+d8*wzPnEKQp%!2ascz^Dw7)haA9SWyBm8*r}tSw;R`E!M&y#GD* zA8?J`*+wlFd`QfnxZt_$_F{W(sN6lY?&7C*}Ou`8z+-jknA++SdTf^+_T=*(&^y^b%8PS{oCP1dV!r3sYU}@>%BT=f6MnwBtoF6NqGhO7t+ zrbxiQZ>eE{*Ht5Gh*=X7s5x;V3vVp1yvKw&lD3J}v8`lsGo4Ti>tbH23~ltqN@eSb zYGEEs%iC;s&`I*sO@ohL$nxRxF!$M+;`}Xq>1thV@EFPrh5v64Fx!W8)0zYRgIY3^BY7udM(L@XM7> z94(nE7#ZG(&rh9ovz**^(H7loH;tE)dt8@4HMo0PJDCc-D;QdalJW4n>8U$*y^>be z{_Kx7u0EL-k2dY4mu}uP?%8KN@@er%%+y_m)Rw;- zGr!3WR+qhT{^B33S1x-y`xTjo|5kD9*vmhjIR58HxPhoUncqPv@f|)hPMXXDb*lSv zTi!3D&beKxa}_((j~uJESbuZq2XC>rmz5dqd#cnlJ&`|Ig6&=UeV*@l;}@<6IzS=6 zTudX2MFbuo*_&SjB7X+)_Ys$<_(!S=KhuxjU(pE9$ElT6Q*;*eQigNG_nz`5GpS$5 zq91Bszg!MqX7zpKvMQL%@@IwBpcH9WJi_R;Z&C8sGH2A`^R-moeK1F0cu57Qpq#7n zYVVETqO1tdZLB6qgSC*=pt& zVxUTp8nVG48=9{HrZkgdd;bpD*trFdwtZjz;9D6mXEo5S#JBs&@b(S}cm?$T;z?{j zB+Ad!?^j^?p(W_skt3JB-zVZ^zYp8{V{lvl&jT-r7`HQrv+}CfFDL@d0@j^6BcC}@ zsR-;905VRPk-ezFVzM;Y944zL-)wSNY!;Kf$z}0a z%{E&@qeK4dls+QRt`1xl{&o47Kr!w;9)oemJ{o>uBsOdr$6j?vWomdxwU5@xmv@bx z0RPa%BWo~jbnF<|Nm&xj|TTKm~Lc6KS-e7OEIxJ1@LiyU1A!7JKk`Q~6`xt72 z)Mv;Kj{Oc6m>vH~sNl)3jcuYVek#Cz9Q;RfWMmy(EGL!r3hCK+__nT@UXgC9 z_WU*3!u+?lN$ z4sI&$%Lmzad%vJ5XZfsvJ;w6hoPi0YbX@_Nk`w_6P;!TsHmRX{Hn7r3HB8KnESsYe zxXzlhg(5V=LQkb34V<6VeK8V}W~pb=VH;LnOqQxlaA|HZQHoBd?@=iiJn*~^_J6q^ zO61`;VYl=|I<)dnC$%pL624rENJmE|x_!MV-A}sy#f{-aupc?-VzFNSi8uVE~ F_$R#)3331c delta 3147 zcmb_ed2kzN72mg7B`f)eY|D-h#h2XRCOR$IlG4Ukls34uwn~~RttUjjCTW~lL~@57 ziPba-9WZI72W;K6Q=`rhhAA-B77YD|w5A?IY21O7LWki9#~)1T6e=^&p)v2tE5}U& zZGfHm=^fwu_Iu~2O(gV*ccjN|EUys+K}Wc_w6sJd$6KBYS;V4bIQ!Etya6||_BOm< z?2$JTClT=b?>2)E7sZF+4|t#Mfg%eCf@=*M3PJ;dv_847vZ{!LQo<$zy?m)qqpiu1 zvxJY!KP|N2PKL??{BBkj6SZl)Q=_amX?!iw>sRR;X>-xXNbx=yZ6(@|i_*6&QQ{5| zMhOQAhX`W?J{!;Oc1b5lz$|>Gc<-Z2FT75%ZXm^n#0nN%Tx*>uAj2vG2VG8(3DpF4 zGymjctkm>+q6R_*VLib}SVu4uN(f~Hj-ZYxzoVb1RpVK1BK|r8mEks_SzFk=%D}Gi z4x%oN_pDm?65poDKB9g?fY6l;)irk$vz@>v@pBXLJ2W{T3G30eyT0kpRfen#lYEz^ zyPIf)fKj~}kMA~>9MKloke^$Upmjp1?+DZB(e zy-lMRpNm)_RT#X+9hu@FsKM)805v#nnt*Ctq~9tWFFB_N&N2SFs~lf@cRj{S&*Qw) zhVin=RLiUZ*x^Ptpq^K=ErpQTxeahz=~hhKu|sOtR@QJ`4~Y1l{o@9KQ_lUsTlAkL zM#B3XJ$j*)b@_9$jy{>+%{|SA7!deIi3w(QM2`hkaEpSd>1S$g2jNM zzgyxlSxIx;-zVQd3Z9!>lvz@6-s|&|Fqd?RkrloVXGo<;biz0l&xb)?S%!JRWl1t>@qc^&h>xAo1Onb0!|zDe>*W zg5ecnzC;kPBwVJN!tX%ILnIv|JWM!FNG3y`q7*Sm_#)wnWN1CmOenB!Xm}(tJ{td2 z{9x3x-Mvj+x92aA=}*9_en{_?QXAt}jKJqpw%|u>g~{}gd~GF7kBT2&)m;AaRmIHd zQ|hThhc7Fys}S(Q)5kD6C99u{-m6RbgV$c_<=W>fUBKfz$2Tb_J+>L6Pnpy$@i|D{ z6#QtVHvpF}-;{Xu(ih}PpF2gs$XGcZdb$|jI$%-TpM6P}>DzHxL-19?4NAon zc0PVqm)<8~ceESZV`g>NlV8_Ssjzfx2v1F$Fg|@dPEUP}TutTcq09W{Y>BL+Gb+zJ zU&r~E{dnQ@9(B**v@ZRun40@xQ@|VW4R`~7yLZ6lvwL0MR(oK?=duU9L%tFBpr^HU za7g|0T$v7k>oeouPE@Oo<39n#T?OrG`;T7IrC%^AFK&Rl^?WBas(b%B4ViydizP=% z%s-D1(=xNU815I9NF$WZeAfg!beWT)mY&J1E`451r$ltcim`7>*1|n0V_kYLZhYp= z4}_u4zYNgiA8Lzu{Qd#^psOul_j=qOd&J%9vJXc_Ttfl3e`KV^#g4E2vJ78^KPhKq zxCf3Zstk8oqrzeOs<=lO76yg55FSF5+p=RNY^OrjFb{lC(2MG%~hJ|$s=s+Bw#l}D{$Se2MN%(3CPV=!im z47d0qZ3EN|^g*JyZQ!JonUpR&T-5U?nxHg@P`kWygE73oH@+YY_A6Z?rMuGs&6PQg zFnl=H|H=KM`v)Wa!Lh;dgTsf;B>bRPK3xk|<*6FDLHSh!lwa~_l`|_EcXZYfP4{lXD9B{qTBGW&9{hTyIekAnxwo?&TfvD3rW-oc%ny`4(*6sTQVRC~ diff --git a/RMDEC/MVProject.cs b/RMDEC/MVProject.cs index 19c4075..c70291b 100644 --- a/RMDEC/MVProject.cs +++ b/RMDEC/MVProject.cs @@ -131,10 +131,13 @@ namespace RMDEC private static byte[] guessKey(string path) // Incase you think your smart { + bool useOgg = false; string[] mzPngs = Directory.GetFiles(path, "*._png", SearchOption.AllDirectories); string[] mvPngs = Directory.GetFiles(path, "*.rpgmvp", SearchOption.AllDirectories); string[] mzM4as = Directory.GetFiles(path, "*._m4a", SearchOption.AllDirectories); string[] mvM4as = Directory.GetFiles(path, "*.rpgmvm", SearchOption.AllDirectories); + string[] mzOggs = Directory.GetFiles(path, "*._ogg", SearchOption.AllDirectories); + string[] mvOggs = Directory.GetFiles(path, "*.rpgmvo", SearchOption.AllDirectories); List files = new List(); files.AddRange(mzPngs); @@ -144,7 +147,23 @@ namespace RMDEC files.AddRange(mvM4as); if (files.Count <= 0) - return new byte[0x10]; + { + if(mzOggs.Length > 0 || mvOggs.Length > 0) // still encryted audio? + { + files.AddRange(mzOggs); + files.AddRange(mvOggs); + useOgg = true; + } + else + { + return new byte[0x10]; + } + } + + byte[] pngHeader = new byte[0x10] { 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52 }; + byte[] m4aHeader = new byte[0x10] { 0x00, 0x00, 0x00, 0x20, 0x66, 0x74, 0x79, 0x70, 0x4D, 0x34, 0x41, 0x20, 0x00, 0x00, 0x00, 0x00 }; + byte[] oggHeader = new byte[0x10] { 0x4F, 0x67, 0x67, 0x53, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF }; + Random rng = new Random(); int index = rng.Next(0, files.Count); @@ -154,12 +173,16 @@ namespace RMDEC FileStream fs = File.OpenRead(file); fs.Seek(0x10, SeekOrigin.Begin); fs.Read(encryptedHeader, 0x00, 0x10); + if (useOgg) + { + fs.Seek(0x58, SeekOrigin.Begin); + oggHeader[0x0E] = (byte)fs.ReadByte(); + oggHeader[0x0F] = (byte)fs.ReadByte(); + } fs.Close(); string filetype = Path.GetExtension(file).ToLower(); - byte[] pngHeader = new byte[0x10] { 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52 }; - byte[] m4aHeader = new byte[0x10] { 0x00, 0x00, 0x00, 0x20, 0x66, 0x74, 0x79, 0x70, 0x4D, 0x34, 0x41, 0x20, 0x00, 0x00, 0x00, 0x00 }; - + if (filetype == "._png" || filetype == ".rpgmvp") { byte[] key = RMProject.Xor(encryptedHeader, pngHeader); if(!tryKey(path, key)) @@ -183,7 +206,18 @@ namespace RMDEC return key; } } - // OGG Header is not 0x10 bytes unfortunately. + else if (filetype == "._ogg" || filetype == ".rpgmvo") + { + byte[] key = RMProject.Xor(encryptedHeader, oggHeader); + if (!tryKey(path, key)) + { + throw new Exception("Cannot find key (ITS TOO STRONG!)"); + } + else + { + return key; + } + } throw new Exception("Cannot find key (ITS TOO STRONG!)"); }