From 5dfe299551622b68e7bbf82f945893e030a077ea Mon Sep 17 00:00:00 2001 From: Joshua Sigona Date: Thu, 21 Oct 2021 16:05:36 +0900 Subject: [PATCH] Add core memory functions for teleportation of bun --- bin/sig/RabiRandomTeleportation.class | Bin 3335 -> 6292 bytes src/sig/RabiRandomTeleportation.java | 99 +++++++++++++++++++++++++- 2 files changed, 97 insertions(+), 2 deletions(-) diff --git a/bin/sig/RabiRandomTeleportation.class b/bin/sig/RabiRandomTeleportation.class index 82f96088af8334c0db6240841afe9b94e731a7a6..e25a26b93752fd41d3b3c6e5933bc306e573781d 100644 GIT binary patch literal 6292 zcmbtZ33wFc8Gip{cV~AQl1)gEa7Yl4WFZL&iZuZRLL!SHiP;DQJQ$J*S=j8XyAzJq zqaJux>QxW4t@fg)2bBfHYOB?H)Y{ATsl9A#ZELH&tw#%e|9@sT*${bn+B^?4|IGjW z-|>FuEYBT&uR--O% zBsSG`Y}{=2+5*K}&6FMMHR3DG*rowHEl{vNA~2z|tE0Ik8ojWyrE66r8jW9nq(cV34#nSfWZ7od#0 zrq>jhR8`$J7IBkgHeE+0W>7OTF*N7`W)iYe9#RgHBI?>=X}f70W@5I6S+pyEN5{#S zBj6_>DZ{pC=fu3z5%)bgRAa7&Fxd}t$nNTxhZ>rhFt^j@vMh%Y0n((QjxHIFn@GYo zH<_sb>ajpWgTTyV`1x!zl`!KA8g!h3Q>ksFJ=(pry}3nT_OZevdyHt+;xru}!0FOd zH{_IaBIBq)la57LOzb<7W+E4PwN;UIk>d|P>5(&aEWuJj)H3XmRaW0nT)L&H>R7tw zh4NAU)6mSU8;%5rX%NfMqN5dOIdRh(i<|AnAmb+A1yP%!yQ#?!rky{VVL_aYRT|pz zve}{3(T)z1_F4(sh$X1|lqx5plt-Hfj8xRTXvj?TnoZT~q!#Ds=t7jy#prEIE;G_* zNB{D8TwpF^;TVq1vpR@#u|@;)WzKOP(Xkdi0zpdcwCGop@q5B3iS7ntU_H*)a2{*Y zNbc^ojtg)hQB1JNZ8cR%lG&H1dzMr6$^Zlm9YrV(pckfwzI+sSq-}FhM?W?($gCme zM7e`s%&P08FKps$8iP!V7!@8)3J3mWL$P?DnetYoWDJY0Z?25mVj?jED^KMpu~|bb0eU7br2UJt${c>g+Mv9%}Q+2VPl8@ z*wzYjyF)H{taL+B(YaitxNSPNgJsfZuy!VBe$80oMg&csX$-{=F}^AIL&B*R(CyF$m6^1a`-98N*(#5EeOraKjW`N-dy2VEAlT{=FBn@Bfcq}x^PV!dWS--6pT+?r*rY;W1#YbIp_)bTM)WT#TB zqqfnzr8{NxnzD}Eq2o^6MG%|gR@z*_<{4)$&dZOYW3{mAb$;BYhWN6n? zYFjK}whs+%G*jKiM#;Uj&0^DCZKPuI*?sA;2V%_HX{vXqmUMI@XTS6$V|^qGjqVl# z-hLT&bjmsgFsTT|2wz5=+D#4w*zME)fn1>zgHo;0#fsE|`nrjbk16*i=G(C&nYCs1 zDD4)Fp~x9zFzYC~qco6Y99)e8zkk$$Oi$Q+2dx z*^Vx=-%RDI^j0 z44z_YlB=R}Pb}MEo9U6T`l?n&s@E@*XTGiD1w1F9^Ngf(hpr&oW=Fp|NbE;=CRg3P zRV(S6AhY=UIv$k96mB)xXS8It{)e{7>5leyTUpF`C{n#T>o~tu;AI^@#gB*p$3oId zul-!dFQnH>*GLAV+~%c}A%?GC-H9;il%VJUC*wR(QCVg8;#D2L#jkmS5)={RKbk$I zaLPN?Do?$RKWX?Q(|oukC`uh~;7yk7e(8j6OFB0uM{G}3s{_Vgbi5?Z5v}xMp1bmq z<928$*=N{h%T~^(ZlCj4MI-#HUM;KRzjS!vldE@hl%QB*{hp3rNn5-r4#;cWI~%Xq z&VNjpU_VFWcqGwh@$?V;)tR$s#A%Ra-4c{oI;+KdzL`5o1^1*_&rh2|6a&`aCineK*^zc z{ZSH{q{oHu(v8H1-kdN74da^~mIz0!p;WIa+a(o#pORiH!-h!}NhHivbKFR$&9o*K z2vm+NV`DWSCW7-7g&A}=KgMWVNX7wIA?Y2y4RBo`ZI<1WYsh}8?wo_voxW3dMvc1D zgX&KIsXM*LyG}0j9{HR=hI`;qoR1v9qzq1MD_lJHAP9M*XAfSi@Ek;yV9}~=-;4Pr zp81}d3>F^bCK|mwP~pwsj7DFD&pG1X1G~cS9$D6?RcIM3FI|zr%Db@Mvp6iDJ2U7$ zfOY$@VJ|iw!az^y=KY9=AI63QNM^9L^n<*pgYw~G_u*3BGq^m1tHM%)eYh@M;oXND z_F%jec%#7XBiBy73*+}-mLvD(3h&b>qSh7OgSfo_YoslTu4d|POrY@6-DI~1{#Elb zxcMQ1Qje$cEN2hkExg0K2lsHj8IyUfq!VTksFN_ApK|s5YHPwAL^;E3Ko}b_mvh}b z>_H74;J3~`)Zqa4pFjh7E+E%a@jMpdyZi)t38&)~@_C)#Ja1w#Wu1w4`Pp)q)7Qr- z={(0B_yj)5CymK+FYZ(Be*>Swr>W<3d;_1sXBj5-l=e9~)Jtu4QTlxhm?%tq9$(9)I6^Z5?i&rY ze5c`DZacg0A$f#4Yhw}cs1Lr;JCgS;z9Wpr(Q*PP%u43bB1y>lMQRW4Y&X0zXgMnT zX%SF+2zz_V@bG?QWPmb?Za9SXJu;f68~bsvMiU3|h!1OO0vS9eZ7)zhEmA4g!bECC z70yz)SE_flF7D(_l#3}(e!4$_C%G%|O+5AgXz=v?qck|1+}o(Zs^iw+Sv==za5*uM zg|%K{Fl{FxX!MMQL4{|U3qpk_FfD`U9~`AbCzUvdZthY_gcY#$IT-3)7$^wep~yl~ zpR53pE_sn5?YQJh?#XJkVAv&%-jVvu$l!ZBl~*dfS+`Vp$MVZ+M)VqH)7lXVEyyXf z06$QEp(y;2t3p!COnZ`O2-$^Qg?734G&lf zN`{j&!JPfUoc%%C|5ueWZ1yha|2;&GN}R1UdmBS!`v_AHkrj``n zE6GXocDc_xu+uorAD-x+lEJ$Yu0mC2!ixLF%$Q49%PwVIy^M|IQs&y_n2#&ah^ttD zu4ejQqwMH+w8_EQP7q(CuGA3!W;jXk+wmV2SaNlkE9t6s)=F6n#>ro)xbjij62Y;F z1-b;2L;+WRO7e?BCX8Pd`Tz#+zvl1{AHrdlvHJ6qNL+Z7980M z%q8xqF+og{vqqVi%mcxUn3@qMI#WfCV1`35b2LGCI!_sFHO2%nJ0ngW&WSF%6}XO$ zC}C!lVh6KPy822ES=X{#-H1t?B`RGC>Rv!pi?EwfOGzVxB5(+zXTO-+HmsJDs=Mj!yNB5! kAm)i09^gDFYB^x=e+fh#p9{o%QO~=aF3%MW;uHk_3uPeBumAu6 delta 1777 zcmZuxTW}Lq82(POyJwSbO79Q|B~YYo(o#}efwX{7TP(Dtf)raXkixcXNt2pvxd<5V z2y(F=M8F$fqarG3(^iC0XOtQB#dpU?XLKANoDpYa#`^E3$jJDz=bZolzwf{A@z8;p z?r;A7^fG`tOpLgfj`ZwpR2q$#VJ>HIR#bK|NKNr=x*Ja9Y0%(tfuTTy48^(?X>h@9 z-AXj%KoM!)=__p7u5aD3KGJKfH+qexsG-M9H)dlFN2wTOUZ)>(#X%NSXQNEReB2^F zW97bbRB}`>(69(0(d_X1 zZ)M20_0dSIzos>2>iv4cg?cRJxQ(Gqj7YP@8Hd}s1WUy^M}1i>8Zd@B zbW%-B(&`b);h+^NAF@QzSPrW3jE2KFLbC0VWQQKyZQ7mcapM?9IG(-EW5?aRd#gTV z8u6Hh=im_`UZmFJxQ6F(LbUT0?4&rted13(RFZGC$(q!5eQ;f0Us5Mpwnpgc3DM)3 zt0B)#*Xcy=XYZK_}BnfQ{eRJv6Nj8km zlE4_I1@fguqsR}iQ4|IoqbNR48V9CZdSV5kBtqq28hOb>F}-JyRLe5JiF?kVelSEd4_;jz3OVmLi{*mnw^H0EcW9`(v!BbP$< z$`cR{Y_bxu?LsNvX%v$0f)|J{4Yj>0gQMrEh9P{3uV^BG-|+{Xl3mpS%p^%M^{Rxr zG#zuOo*`;!1AN$kQfwhfFZ_sOF5bXAoJASV)4%Bx(qBe7aaIs(09O#icQlIMr?3z| z5YbOW^9yRpSskv@FXJyPwp-O_kHR&pRpglCH=M$0>Xi#W<3+qgfzH7tyo^_9OhV-D zRkD{UoI^N6b_xX*!E1P(ka09qNN*DI3R%2`w@G#tDapP%kS6*PqRYB?hg@Vy-X)Uv zNOuzMNfbfmU>xPvv{nO?6tQbc!cj{yj&4$Cwbu}xBzOG(3<#<~;YitR|6(ojW6C7W z>&=c_a9(#!*j&qy_KU0~a&Z>#XXh8Kl!Al8^;`t&9>ck|;21u*u@$*gCLl~()<9d( mh#7TLXsy;ra(j3uUeV diff --git a/src/sig/RabiRandomTeleportation.java b/src/sig/RabiRandomTeleportation.java index c30681b..60491a3 100644 --- a/src/sig/RabiRandomTeleportation.java +++ b/src/sig/RabiRandomTeleportation.java @@ -1,6 +1,7 @@ package sig; import sig.utils.PsapiTools; +import java.util.Arrays; import java.util.List; import com.sun.jna.Memory; @@ -8,12 +9,22 @@ import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Kernel32; import com.sun.jna.platform.win32.WinNT; import com.sun.jna.platform.win32.WinNT.HANDLE; + +import sig.modules.RabiRibi.MemoryOffset; import sig.utils.Module; public class RabiRandomTeleportation { + final int[] verticalHeights = { 12, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 12, 8 }; final int PROCESS_PERMISSIONS = WinNT.PROCESS_QUERY_INFORMATION | WinNT.PROCESS_VM_READ | WinNT.PROCESS_VM_WRITE; public HANDLE rabiribiProcess = null; int rabiRibiPID = -1; + long rabiRibiMemOffset = 0; + + long Sprite1Address = 0; + long upperLeftRoomArray = 0; + long entityArrayPtr = 0; + long ErinaXAddress = 0; + long ErinaYAddress = 0; private void CheckRabiRibiClient() { List pids; @@ -29,7 +40,7 @@ public class RabiRandomTeleportation { //System.out.println(m.getFileName()+":"+m.getEntryPoint()); if (m.getFileName().contains("rabiribi")) { found=true; - long rabiRibiMemOffset = Pointer.nativeValue(m.getLpBaseOfDll().getPointer()); + rabiRibiMemOffset = Pointer.nativeValue(m.getLpBaseOfDll().getPointer()); System.out.println("Found an instance of Rabi-Ribi at 0x"+Long.toHexString(rabiRibiMemOffset)+" | File:"+m.getFileName()+","+m.getBaseName()); rabiRibiPID=pid; rabiribiProcess=process; @@ -54,8 +65,92 @@ public class RabiRandomTeleportation { } } + public int readIntFromMemory(long offset) { + Memory mem = new Memory(4); + Kernel32.INSTANCE.ReadProcessMemory(rabiribiProcess, new Pointer(rabiRibiMemOffset+offset), mem, 4, null); + return mem.getInt(0); + } + + public float readFloatFromMemory(long offset) { + Memory mem = new Memory(4); + Kernel32.INSTANCE.ReadProcessMemory(rabiribiProcess, new Pointer(rabiRibiMemOffset+offset), mem, 4, null); + return mem.getFloat(0); + } + public byte[] readBytesFromMemory(long offset,int numOfBytes) { + Memory mem = new Memory(numOfBytes); + Kernel32.INSTANCE.ReadProcessMemory(rabiribiProcess, new Pointer(rabiRibiMemOffset+offset), mem, numOfBytes, null); + return mem.getByteArray(0, numOfBytes); + } + + public int readIntFromPointer(long val, long pointer) { + Memory mem = new Memory(4); + Kernel32.INSTANCE.ReadProcessMemory(rabiribiProcess, new Pointer(readIntFromMemory(pointer)+val), mem, 4, null); + return mem.getInt(0); + } + + public void writeIntToMemory(long offset,int value) { + //Pointer valueptr = new Pointer(); + Memory valueptr = new Memory(8); + valueptr.setInt(0, value); + //new Pointer(rabiRibiMemOffset+offset).setMemory((long)0, (long)4, (byte)value); + Kernel32.INSTANCE.WriteProcessMemory(rabiribiProcess, + new Pointer(rabiRibiMemOffset+offset),valueptr,4,null); + //Kernel32.INSTANCE.ReadProcessMemory(rabiribiProcess, new Pointer(rabiRibiMemOffset+offset), mem, 4, null); + //return mem.getInt(0); + } + + public void writeShortToMemory(long offset,short value) { + //Pointer valueptr = new Pointer(); + Memory valueptr = new Memory(4); + valueptr.setShort((short)0,(short)value); + //new Pointer(rabiRibiMemOffset+offset).setMemory((long)0, (long)4, (byte)value); + Kernel32.INSTANCE.WriteProcessMemory(rabiribiProcess, + new Pointer(rabiRibiMemOffset+offset),valueptr,2,null); + //Kernel32.INSTANCE.ReadProcessMemory(rabiribiProcess, new Pointer(rabiRibiMemOffset+offset), mem, 4, null); + //return mem.getInt(0); + } + + public void writeFloatToMemory(long offset,float value) { + writeIntToMemory(offset,Float.floatToIntBits(value)); + } + + public float readFloatFromPointer(long offset, long pointer) { + Memory mem = new Memory(4); + Kernel32.INSTANCE.ReadProcessMemory(rabiribiProcess, new Pointer(readIntFromMemory(pointer)+offset), mem, 4, null); + return mem.getFloat(0); + } + + public void updateEventValue(short value, int roomX, int roomY, int x, int y) { + int finalIndex = y+x*200; + int verticalHeight = 0; + for (int i=0;i