Jump to content
  • RSPS-Community Guest Message

    Hello guest! Please take the time to sign up if you wanna use our unique features like toplist review incentive voting, member owned shops and more! We offer a whole palette of unique tools to help you advertise your project, or get help. 

    If you are simply a person looking for a server to play, we have that too.

    To participate in incentive voting you must be registered on the forums.


    From all of us at RSPS-Community we wish you the best experience and we hope to see you around.




  1. Top 5 Lists

    1. RSPS   (6 visits to this link)

    2. GFX Artists   (5 visits to this link)

    3. YouTubers   (3 visits to this link)

  2. Community Knowledge

    1. News & Announcements

      Community news and announcements!

    2. General Info

      General information about the community is stored in here

    3. Support

      Need help with the forum or one of our services? Post your problem in here! Remember to be descriptive and show pictures if you can!

  3. General Discussion

      • No posts here yet
    1. Welcome Mat

      Introduce yourself! We won't bite 

    2. Homework

      Get some help with your homework!

      • No posts here yet
    3. Spam

      Any spam goes in here (posts dont count in this section)

    4. Humor

      All of your jokes are belong to us!

      • No posts here yet
    5. 26
  4. RSPS

    1. RSC

      Anything from the beginning of RuneScape time to revision #194

      • No posts here yet
    2. RS2

      This would be anything from revisions 194 - 503

    3. RS3

      This would be anything from 503 - current runescape 3 revisions

      • No posts here yet
    4. OSRS

      All newer OSRS RSPS content goes in here!

      • No posts here yet
  5. RuneScape

    1. General

      General chit chat about RuneScape should be contained in here

      • No posts here yet
    2. Media

      All RuneScape media in here, videos, pictures etc

      • No posts here yet
      • No posts here yet

  • Latest Update

  • Rsps Community
    Discord server
    Music Studio
    AFK Time Out
  • Posts

    • Hi guys, today I will tell you how you can protect C ++ code from reverse engineering. Just little trick based on const expr compile-time obfuscation. Everything in comments 😉   #pragma once #include "targetver.h" #include <stdio.h> #include <tchar.h> #include <array> #include <iostream> #include <string> #pragma region Learning typedef uint32_t u32; typedef uint64_t u64; typedef unsigned char uchar; template<u32 S, u32 A = 16807UL, u32 C = 0UL, u32 M = (1UL << 31) - 1> struct LinearGenerator { static const u32 state = ((u64)S * A + C) % M; static const u32 value = state; typedef LinearGenerator<state> next; struct Split { // Leapfrog typedef LinearGenerator< state, A*A, 0, M> Gen1; typedef LinearGenerator<next::state, A*A, 0, M> Gen2; }; }; // Metafunction to get a particular index from generator template<u32 S, std::size_t index> struct Generate { static const uchar value = Generate<LinearGenerator<S>::state, index - 1>::value; }; template<u32 S> struct Generate<S, 0> { static const uchar value = static_cast<uchar> (LinearGenerator<S>::value); }; // List of indices template<std::size_t...> struct StList {}; // Concatenate template<typename TL, typename TR> struct Concat; template<std::size_t... SL, std::size_t... SR> struct Concat<StList<SL...>, StList<SR...>> { typedef StList<SL..., SR...> type; }; template<typename TL, typename TR> using Concat_t = typename Concat<TL, TR>::type; // Count from zero to n-1 template<size_t s> struct Count { typedef Concat_t<typename Count<s - 1>::type, StList<s - 1>> type; }; template<> struct Count<0> { typedef StList<> type; }; template<size_t s> using Count_t = typename Count<s>::type; // Get a scrambled character of a string template<u32 seed, std::size_t index, std::size_t N> constexpr uchar get_scrambled_char(const char(&a)[N]) { return static_cast<uchar>(a[index]) + Generate<seed, index>::value; } // Get a ciphertext from a plaintext string template<u32 seed, typename T> struct cipher_helper; template<u32 seed, std::size_t... SL> struct cipher_helper<seed, StList<SL...>> { static constexpr std::array<uchar, sizeof...(SL)> get_array(const char(&a)[sizeof...(SL)]) { return{ { get_scrambled_char<seed, SL>(a)... } }; } }; template<u32 seed, std::size_t N> constexpr std::array<uchar, N> get_cipher_text(const char(&a)[N]) { return cipher_helper<seed, Count_t<N>>::get_array(a); } // Get a noise sequence from a seed and string length template<u32 seed, typename T> struct noise_helper; template<u32 seed, std::size_t... SL> struct noise_helper<seed, StList<SL...>> { static constexpr std::array<uchar, sizeof...(SL)> get_array() { return{ { Generate<seed, SL>::value ... } }; } }; template<u32 seed, std::size_t N> constexpr std::array<uchar, N> get_key() { return noise_helper<seed, Count_t<N>>::get_array(); } /* // Get an unscrambled character of a string template<u32 seed, std::size_t index, std::size_t N> char get_unscrambled_char(const std::array<uchar, N> & a) { return static_cast<char> (a[index] - Generate<seed, index>::value); } */ // Metafunction to get the size of an array template<typename T> struct array_info; template <typename T, size_t N> struct array_info<T[N]> { typedef T type; enum { size = N }; }; template <typename T, size_t N> struct array_info<const T(&)[N]> : array_info<T[N]> {}; // Scramble a string template<u32 seed, std::size_t N> class obfuscated_string { private: std::array<uchar, N> cipher_text_; std::array<uchar, N> key_; public: explicit constexpr obfuscated_string(const char(&a)[N]) : cipher_text_(get_cipher_text<seed, N>(a)) , key_(get_key<seed, N>()) {} operator std::string() const { char plain_text[N]; for (volatile std::size_t i = 0; i < N; ++i) { volatile char temp = static_cast<char>(cipher_text_[i] - key_[i]); plain_text[i] = temp; } return std::string{ plain_text, plain_text + N }; } }; template<u32 seed, std::size_t N> std::ostream & operator<< (std::ostream & s, const obfuscated_string<seed, N> & str) { s << static_cast<std::string>(str); return s; } //compiletime Seed for random string obfuscation #define RNG_SEED ((__TIME__[7] - '0') * 1 + (__TIME__[6] - '0') * 10 + \ (__TIME__[4] - '0') * 60 + (__TIME__[3] - '0') * 600 + \ (__TIME__[1] - '0') * 3600 + (__TIME__[0] - '0') * 36000) + \ (__LINE__ * 100000) #define DECRYPTSTRING(STR) \ obfuscated_string<RNG_SEED, array_info<decltype(STR)>::size>{STR} #pragma endregion Well, now the usage: #include "stdafx.h" auto FooBar = DECRYPTSTRING("FWEFWEFWEFWefwehkdl2hei1o;eh23khdBlahBlahBlah"); int main() { std::cout << DECRYPTSTRING("You can use it like this also") << std::endl; std::getchar(); return 0; }   This code obfuscate your string values just like VMProtect.DecryptString ("Foobar") does. Such technique can be used for protect constant string values like public RSA/XXTea/etc. keys, connection IP string or any other string values. It prevents simple reading such values via OllyDbg or IDAPro software. Works like a charm at Visual Studio 2015/2017 x86 Release builds. Enjoy 😉          
    • Well here is my attempt so far if I figure it out i'll update this:   package org.petina; import javafx.application.Application; import javafx.embed.swing.SwingNode; import javafx.event.EventHandler; import javafx.scene.*; import javafx.scene.paint.Color; import javafx.stage.Stage; import javafx.stage.WindowEvent; import java.awt.Dimension; /** * * * @author smokey * * Date: Apr 21, 2019 * Time: 8:37:45 AM */ public class JavaFXTest extends Application { private ClientStub stub = new ClientStub(); @Override public void init() { stub.init(); stub.setSize(new Dimension(765, 503)); } @Override @SuppressWarnings("deprecation") public void start(Stage stage) { final SwingNode swingNode = new SwingNode(); swingNode.setContent(stub.getRootPane()); stage.setScene(new Scene(new Group(swingNode), 765, 503, Color.BLACK)); stage.setOnCloseRequest(new EventHandler<WindowEvent>() { @Override public void handle(WindowEvent t) { System.exit(0); } }); stage.setTitle("JaGeX"); stage.setResizable(false); stage.show(); } @Override public void stop() { stub.stop(); stub.destroy(); } public static void main(String[] args) { launch(args); } }   ClientStub.java: package org.petina; import java.net.URL; import java.net.InetAddress; import org.petina.loader.SignLink; import org.petina.loader.client; /** * * * @author smokey * * Date: Apr 21, 2019 * Time: 2:40:44 PM */ public class ClientStub extends client { public ClientStub() { super(); try { SignLink.startpriv(InetAddress.getLocalHost()); } catch(Exception ex) { ex.printStackTrace(); } } @Override public URL getCodeBase() { try { return new URL("" + 43594); } catch (Exception ex) { ex.printStackTrace(); return super.getCodeBase(); } } public URL getDocumentBase() { return this.getCodeBase(); } public String getParameter(String key) { return ""; } } Anyone here have any experience with javafx? @Guruu?
    • Swing is the API provided to effectively make GUI for your applications in Java. What is a GUI you ask? A GUI is a graphical user interface, simply put it's the frame around your application and all the features specifically attached to it that the user can interact with like buttons or a menu bar.   In 317 clients the client was built to be embedded in a webpage so the main client is engineered to be an applet, and if the client is run in local mode its made to be embedded into a java.awt.Frame, this container is an older but still effective way of creating a GUI but its less manageable and outdated.  To scrap the old frame theres a few things we need to do: Initialize the client as an applet so we can use that as a container Create a new JFrame instance to hold the client's applet container This is really simple, and has been made complicated by many a man over the years. It can be simply done by extending the client object and overriding its applet-based functions. Step 1:   Step 2:  
    • Welcome @kiwi Very glad to have you, hope to see you around and active 🙂
    • Not bad brother! I love my paint brush haha.
  • Topics

  • Forum Statistics

    • Total Topics
    • Total Posts
  • Members

    No members to show


Important Information

By using our forums or services as a guest you agree to our Terms of Service: Terms of Use Privacy Policy: Privacy Policy and Guidelines