xorstring lazım

eLwtx

Platinum Üye
Katılım
16 Kas 2023
Mesajlar
128
Beğeniler
34
İletişim
bana güzel sağlam bir xorstring lazım elinde olan atabilecek olan varsa güzel olur
 

anlatmaya üşendim

AI Bakışı:

XORString (veya XOR şifrelemesi), metin verilerini (string) gizli bir anahtar kullanarak "Özel VEYA" (XOR) mantıksal operatörü ile şifreleyen, basit ve simetrik bir veri güvenliği yöntemidir. Veriyi okunamaz hale getirir, aynı işlemle anahtar kullanılarak kolayca çözülebilir ve genellikle gibi dillerde derleme zamanında şifreleme (compile-time) için kullanılır.
GitHub +2
 
#pragma once
#include <cstdint>
#include <cstddef>

namespace xor_detail {

constexpr uint8_t key_at(uint64_t seed, size_t i) {
uint32_t h = static_cast<uint32_t>(i) ^ static_cast<uint32_t>(seed & 0xFFFFFFFF);
h ^= static_cast<uint32_t>(seed >> 32);
h = (h ^ (h >> 7)) * 0x45D9F3Bu;
h = (h ^ (h >> 13)) * 0x1315423u;
h = (h ^ (h >> 11)) * 0x27D4EB2Fu;
return static_cast<uint8_t>((h ^ (h >> 15)) & 0xFF);
}

constexpr uint64_t make_seed(uint64_t line, uint64_t counter) {
uint64_t s = line * 0x517CC1B727220A95ULL + counter * 0x6C62272E07BB0142ULL;
s ^= (s >> 33);
s *= 0xFF51AFD7ED558CCDULL;
s ^= (s >> 33);
return s;
}

template<size_t N>
struct EncData {
char data[N];
constexpr EncData(const char(&str)[N], uint64_t seed) : data{} {
for (size_t i = 0; i < N; ++i)
data = static_cast<char>(str ^ key_at(seed, i));
}
};

}

#define XorStr(str) \
([]() -> const char* { \
constexpr auto _seed = ::xor_detail::make_seed(__LINE__, __COUNTER__); \
static constexpr ::xor_detail::EncData _enc(str, _seed); \
thread_local char _buf[sizeof(str)]; \
for (size_t _i = 0; _i < sizeof(str); ++_i) \
_buf[_i] = static_cast<char>(_enc.data[_i] ^ ::xor_detail::key_at(_seed, _i)); \
return _buf; \
}())
 
#pragma once
#include <cstdint>
#include <cstddef>

namespace xor_detail {

constexpr uint8_t key_at(uint64_t seed, size_t i) {
uint32_t h = static_cast<uint32_t>(i) ^ static_cast<uint32_t>(seed & 0xFFFFFFFF);
h ^= static_cast<uint32_t>(seed >> 32);
h = (h ^ (h >> 7)) * 0x45D9F3Bu;
h = (h ^ (h >> 13)) * 0x1315423u;
h = (h ^ (h >> 11)) * 0x27D4EB2Fu;
return static_cast<uint8_t>((h ^ (h >> 15)) & 0xFF);
}

constexpr uint64_t make_seed(uint64_t line, uint64_t counter) {
uint64_t s = line * 0x517CC1B727220A95ULL + counter * 0x6C62272E07BB0142ULL;
s ^= (s >> 33);
s *= 0xFF51AFD7ED558CCDULL;
s ^= (s >> 33);
return s;
}

template<size_t N>
struct EncData {
char data[N];
constexpr EncData(const char(&str)[N], uint64_t seed) : data{} {
for (size_t i = 0; i < N; ++i)
data = static_cast<char>(str ^ key_at(seed, i));
}
};

}

#define XorStr(str) \
([]() -> const char* { \
constexpr auto _seed = ::xor_detail::make_seed(__LINE__, __COUNTER__); \
static constexpr ::xor_detail::EncData _enc(str, _seed); \
thread_local char _buf[sizeof(str)]; \
for (size_t _i = 0; _i < sizeof(str); ++_i) \
_buf[_i] = static_cast<char>(_enc.data[_i] ^ ::xor_detail::key_at(_seed, _i)); \
return _buf; \
}())
sağolun teşekkürler

#pragma once
#include <cstdint>
#include <cstddef>

namespace xor_detail {

constexpr uint8_t key_at(uint64_t seed, size_t i) {
uint32_t h = static_cast<uint32_t>(i) ^ static_cast<uint32_t>(seed & 0xFFFFFFFF);
h ^= static_cast<uint32_t>(seed >> 32);
h = (h ^ (h >> 7)) * 0x45D9F3Bu;
h = (h ^ (h >> 13)) * 0x1315423u;
h = (h ^ (h >> 11)) * 0x27D4EB2Fu;
return static_cast<uint8_t>((h ^ (h >> 15)) & 0xFF);
}

constexpr uint64_t make_seed(uint64_t line, uint64_t counter) {
uint64_t s = line * 0x517CC1B727220A95ULL + counter * 0x6C62272E07BB0142ULL;
s ^= (s >> 33);
s *= 0xFF51AFD7ED558CCDULL;
s ^= (s >> 33);
return s;
}

template<size_t N>
struct EncData {
char data[N];
constexpr EncData(const char(&str)[N], uint64_t seed) : data{} {
for (size_t i = 0; i < N; ++i)
data = static_cast<char>(str ^ key_at(seed, i));
}
};

}

#define XorStr(str) \
([]() -> const char* { \
constexpr auto _seed = ::xor_detail::make_seed(__LINE__, __COUNTER__); \
static constexpr ::xor_detail::EncData _enc(str, _seed); \
thread_local char _buf[sizeof(str)]; \
for (size_t _i = 0; _i < sizeof(str); ++_i) \
_buf[_i] = static_cast<char>(_enc.data[_i] ^ ::xor_detail::key_at(_seed, _i)); \
return _buf; \
}())
birşey fark ettim bellek kalıntısı bırakıyor direkt dump edilir ama çözülür o
 
Son düzenleme:
sağolun teşekkürler


birşey fark ettim bellek kalıntısı bırakıyor direkt dump edilir ama çözülür o
Kendi projemden ayrıştırıp attım başka dosyalarla entegreliydi ayrıştırdım elimden geldiğince bazı hatalar kalmış olabilir basit hatalar
 
Kendi projemden ayrıştırıp attım başka dosyalarla entegreliydi ayrıştırdım elimden geldiğince bazı hatalar kalmış olabilir basit hatalar
basit değil ama evet kaldığını fark ettim hatalarını giderip kullanırım teşekkürler yinede
 
basit değil ama evet kaldığını fark ettim hatalarını giderip kullanırım teşekkürler yinede
Buyur hocam temiz hali;

#pragma once
#include <cstdint>
#include <cstddef>
#include <atomic>
#ifdef _WIN32
#include <windows.h>
#endif
namespace xor_detail {
constexpr uint8_t key_at(uint64_t seed, size_t i) {
uint32_t h = static_cast<uint32_t>(i) ^ static_cast<uint32_t>(seed & 0xFFFFFFFF);
h ^= static_cast<uint32_t>(seed >> 32);
h = (h ^ (h >> 7)) * 0x45D9F3Bu;
h = (h ^ (h >> 13)) * 0x1315423u;
h = (h ^ (h >> 11)) * 0x27D4EB2Fu;
return static_cast<uint8_t>((h ^ (h >> 15)) & 0xFF);
}
constexpr uint64_t make_seed(uint64_t line, uint64_t counter) {
uint64_t s = line * 0x517CC1B727220A95ULL + counter * 0x6C62272E07BB0142ULL;
s ^= (s >> 33);
s *= 0xFF51AFD7ED558CCDULL;
s ^= (s >> 33);
return s;
}

inline void secure_wipe(void* ptr, size_t len) {
#ifdef _WIN32
SecureZeroMemory(ptr, len);
#else
volatile unsigned char* p = static_cast<volatile unsigned char*>(ptr);
for (size_t i = 0; i < len; ++i)
p = 0;
std::atomic_signal_fence(std::memory_order_seq_cst);
#endif
}
template<size_t N>
struct EncData {
char data[N];
constexpr EncData(const char(&str)[N], uint64_t seed) : data{} {
for (size_t i = 0; i < N; ++i)
data = static_cast<char>(str ^ key_at(seed, i));
}
};
template<size_t N>
struct SecureBuf {
char data[N];
bool active;
#ifdef _MSC_VER
__forceinline
#else
__attribute__((always_inline)) inline
#endif
void decrypt(const EncData<N>& enc, uint64_t seed) {
active = true;
for (size_t i = 0; i < N; ++i)
data = static_cast<char>(enc.data ^ key_at(seed, i));
}
#ifdef _MSC_VER
__declspec(noinline)
#else
__attribute__((noinline))
#endif
~SecureBuf() {
if (active) {
secure_wipe(data, N);
}
}
operator const char*() const { return data; }
SecureBuf(const SecureBuf&) = delete;
SecureBuf& operator=(const SecureBuf&) = delete;
};
}
#define XorStr(str) \
[&]() -> ::xor_detail::SecureBuf<sizeof(str)> { \
constexpr auto _seed = ::xor_detail::make_seed(__LINE__, __COUNTER__); \
static constexpr ::xor_detail::EncData _enc(str, _seed); \
::xor_detail::SecureBuf<sizeof(str)> _buf{}; \
_buf.decrypt(_enc, _seed); \
return _buf; \
}()
 
ne için kullaniliyo bu
normalde exe nin içine yazdığın tüm stringler düz okunabiliyor biri hex editörle açsa direkt görür api keyleri mesajları falan XorStr bunları derleme anında şifreliyor binary de sadece çöp byte görünüyo çalışırken çözüp kullanıyo sonra bellekten siliyo yani reverse engineer strings çektiğinde bişey bulamıyor
 

Şuanda konuyu görüntüleyen kullanıcılar

Geri
Üst Alt