Compare commits
No commits in common. "main" and "master" have entirely different histories.
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
/target
|
||||||
|
result*
|
1951
Cargo.lock
generated
Normal file
1951
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load diff
24
Cargo.toml
Normal file
24
Cargo.toml
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
[package]
|
||||||
|
name = "rendorseg-scam-spammer"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
fake_user_agent = "0.2.1"
|
||||||
|
fakedata_generator = "0.5.0"
|
||||||
|
futures-util = "0.3.30"
|
||||||
|
rand = "0.8.5"
|
||||||
|
reqwest = { version = "0.12.5", features = ["json"] }
|
||||||
|
serde = "1.0.204"
|
||||||
|
tracing-subscriber = { version = "0.3.18", features = ["env-filter"] }
|
||||||
|
serde_json = "1.0.122"
|
||||||
|
tokio = { version = "1", features = ["full"] }
|
||||||
|
log = "0.4.22"
|
||||||
|
fake-rs = "0.1.0"
|
||||||
|
fake = "2.9.2"
|
||||||
|
chrono = "0.4.38"
|
||||||
|
fakeit = "1.3.0"
|
||||||
|
serde_urlencoded = "0.7.1"
|
||||||
|
|
9
LICENSE
9
LICENSE
|
@ -1,9 +0,0 @@
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2024 4o1x5
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
3
docker-compose.yml
Normal file
3
docker-compose.yml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
services:
|
||||||
|
spammer:
|
||||||
|
image: git.4o1x5.dev/4o1x5/rendorseg-scam-spammer
|
82
flake.lock
Normal file
82
flake.lock
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"crane": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1722960479,
|
||||||
|
"narHash": "sha256-NhCkJJQhD5GUib8zN9JrmYGMwt4lCRp6ZVNzIiYCl0Y=",
|
||||||
|
"owner": "ipetkov",
|
||||||
|
"repo": "crane",
|
||||||
|
"rev": "4c6c77920b8d44cd6660c1621dea6b3fc4b4c4f4",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "ipetkov",
|
||||||
|
"repo": "crane",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-utils": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1710146030,
|
||||||
|
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1722957468,
|
||||||
|
"narHash": "sha256-SQ0TCC4aklOhN/OzcztrKqDLY8SjpIZcyvTulzhDXs0=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "2a13929e1f191b3690dd2f2db13098b04adb9043",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"crane": "crane",
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
106
flake.nix
Normal file
106
flake.nix
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
{
|
||||||
|
description = "Build a cargo project without extra checks";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||||
|
|
||||||
|
crane = {
|
||||||
|
url = "github:ipetkov/crane";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { self, nixpkgs, crane, flake-utils, ... }:
|
||||||
|
flake-utils.lib.eachDefaultSystem (system:
|
||||||
|
let
|
||||||
|
pkgs = nixpkgs.legacyPackages.${system};
|
||||||
|
|
||||||
|
craneLib = crane.mkLib pkgs;
|
||||||
|
|
||||||
|
# Common arguments can be set here to avoid repeating them later
|
||||||
|
# Note: changes here will rebuild all dependency crates
|
||||||
|
commonArgs = {
|
||||||
|
src = craneLib.cleanCargoSource ./.;
|
||||||
|
strictDeps = true;
|
||||||
|
|
||||||
|
buildInputs = with pkgs; [
|
||||||
|
openssl
|
||||||
|
pkg-config
|
||||||
|
libiconv
|
||||||
|
curl # for utoipa
|
||||||
|
] ++ lib.optionals pkgs.stdenv.isDarwin [
|
||||||
|
# Additional darwin specific inputs can be set here
|
||||||
|
pkgs.libiconv
|
||||||
|
];
|
||||||
|
nativeBuildInputs = with pkgs;[
|
||||||
|
openssl
|
||||||
|
pkg-config
|
||||||
|
libiconv
|
||||||
|
curl
|
||||||
|
makeWrapper
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
spammer = craneLib.buildPackage (commonArgs // {
|
||||||
|
cargoArtifacts = craneLib.buildDepsOnly commonArgs;
|
||||||
|
|
||||||
|
# Additional environment variables or build phases/hooks can be set
|
||||||
|
# here *without* rebuilding all dependency crates
|
||||||
|
# MY_CUSTOM_VAR = "some value";
|
||||||
|
});
|
||||||
|
in
|
||||||
|
{
|
||||||
|
checks = {
|
||||||
|
inherit spammer;
|
||||||
|
};
|
||||||
|
|
||||||
|
packages = {
|
||||||
|
inherit spammer;
|
||||||
|
spammer-container = pkgs.dockerTools.buildLayeredImage {
|
||||||
|
name = "spammer";
|
||||||
|
tag = "latest";
|
||||||
|
|
||||||
|
contents = with pkgs; [
|
||||||
|
cacert
|
||||||
|
openssl
|
||||||
|
pkg-config
|
||||||
|
libiconv
|
||||||
|
];
|
||||||
|
|
||||||
|
config = {
|
||||||
|
WorkingDir = "/app";
|
||||||
|
Volumes = { "/app" = { }; };
|
||||||
|
Entrypoint = [ "${spammer}/bin/rendorseg-scam-spammer" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
apps.default = flake-utils.lib.mkApp {
|
||||||
|
drv = spammer;
|
||||||
|
};
|
||||||
|
|
||||||
|
devShells.default = craneLib.devShell {
|
||||||
|
# Inherit inputs from checks.
|
||||||
|
checks = self.checks.${system};
|
||||||
|
|
||||||
|
LIBCLANG_PATH = "${pkgs.llvmPackages_17.libclang.lib}/lib";
|
||||||
|
#RUST_BACKTRACE = 1; # enable for more debugging
|
||||||
|
RUST_SRC_PATH = "${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}";
|
||||||
|
|
||||||
|
# Additional dev-shell environment variables can be set directly
|
||||||
|
# MY_CUSTOM_DEVELOPMENT_VAR = "something else";
|
||||||
|
|
||||||
|
# Extra inputs can be added here; cargo and rustc are provided by default.
|
||||||
|
packages = with pkgs; [
|
||||||
|
openssl
|
||||||
|
pkg-config
|
||||||
|
libiconv
|
||||||
|
];
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
111
src/main.rs
Normal file
111
src/main.rs
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
use std::{thread, time::Duration};
|
||||||
|
|
||||||
|
use chrono::{Datelike, Utc};
|
||||||
|
use fake::{faker::creditcard::en::CreditCardNumber, Fake};
|
||||||
|
use fake_user_agent::get_rua;
|
||||||
|
use rand::{distributions::Alphanumeric, rngs::StdRng, Rng, SeedableRng};
|
||||||
|
use reqwest::{
|
||||||
|
header::{self, HeaderMap, HeaderValue},
|
||||||
|
Url,
|
||||||
|
};
|
||||||
|
|
||||||
|
use serde_json::json;
|
||||||
|
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() {
|
||||||
|
tracing_subscriber::registry()
|
||||||
|
.with(tracing_subscriber::EnvFilter::new(
|
||||||
|
std::env::var("RUST_LOG").unwrap_or_else(|_| "debug".into()),
|
||||||
|
))
|
||||||
|
.with(tracing_subscriber::fmt::layer())
|
||||||
|
.init();
|
||||||
|
|
||||||
|
loop {
|
||||||
|
// Send the fake card information
|
||||||
|
let post_url = Url::parse("https://rendorsegportal-hu.net/fizetes?id=df687d19a3").unwrap();
|
||||||
|
let client = reqwest::Client::new();
|
||||||
|
// Generate fake info
|
||||||
|
let rng = rand::thread_rng();
|
||||||
|
let mut rng = StdRng::from_rng(rng).unwrap();
|
||||||
|
let cc = fakeit::payment::credit_card_number();
|
||||||
|
let cvv = fakeit::payment::credit_card_cvv();
|
||||||
|
let exp = fakeit::payment::credit_card_exp();
|
||||||
|
let s: String = rand::thread_rng()
|
||||||
|
.sample_iter(&Alphanumeric)
|
||||||
|
.take(9)
|
||||||
|
.map(char::from)
|
||||||
|
.collect();
|
||||||
|
let s = s.to_lowercase();
|
||||||
|
let data = [
|
||||||
|
(
|
||||||
|
"_administrativefine2_WAR_orfkwfsuserportlets_:administrativeFineFormId:j_idt130",
|
||||||
|
"",
|
||||||
|
),
|
||||||
|
("token", s.as_str()),
|
||||||
|
("cc", cc.as_str()),
|
||||||
|
("exp", exp.as_str()),
|
||||||
|
("cvv", cvv.as_str()),
|
||||||
|
];
|
||||||
|
|
||||||
|
// sending fake data
|
||||||
|
log::info!("Random data: \n {:?}", data);
|
||||||
|
let user_agent = get_rua();
|
||||||
|
let mut header_map = HeaderMap::new();
|
||||||
|
header_map.append("User-Agent", HeaderValue::from_str(&user_agent).unwrap());
|
||||||
|
log::info!("Seding dummy data to url, UA: {}", user_agent);
|
||||||
|
match client
|
||||||
|
.post(post_url.clone())
|
||||||
|
.form(&data)
|
||||||
|
.headers(header_map.clone())
|
||||||
|
.timeout(Duration::from_secs(12))
|
||||||
|
.send()
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
Err(error) => {
|
||||||
|
log::error!("Failed to send dummy data {}", error)
|
||||||
|
}
|
||||||
|
Ok(ok) => {
|
||||||
|
log::info!("Sent dummy data to server hehehe {}", ok.status())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sending fake code
|
||||||
|
let channel_url =
|
||||||
|
Url::parse("https://rendorsegportal-hu.net/hitelesites?id=df687d19a3").unwrap();
|
||||||
|
let six_digit = rng.gen_range(100000..1000000).to_string();
|
||||||
|
let s: String = rand::thread_rng()
|
||||||
|
.sample_iter(&Alphanumeric)
|
||||||
|
.take(9)
|
||||||
|
.map(char::from)
|
||||||
|
.collect();
|
||||||
|
let s = s.to_lowercase();
|
||||||
|
let data = [
|
||||||
|
(
|
||||||
|
"_administrativefine2_WAR_orfkwfsuserportlets_:administrativeFineFormId:j_idt130",
|
||||||
|
"",
|
||||||
|
),
|
||||||
|
("token", s.as_str()),
|
||||||
|
("code", six_digit.as_str()),
|
||||||
|
];
|
||||||
|
|
||||||
|
log::info!("Sending digits: {:?}", data);
|
||||||
|
match client
|
||||||
|
.post(channel_url.clone())
|
||||||
|
.form(&data)
|
||||||
|
.timeout(Duration::from_secs(8))
|
||||||
|
.send()
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
Err(error) => {
|
||||||
|
log::warn!("Failed to send fake codes to server")
|
||||||
|
}
|
||||||
|
Ok(ok) => {
|
||||||
|
if ok.status() == 200 {
|
||||||
|
log::info!("Sent dummy codes to server {}", ok.status());
|
||||||
|
} else {
|
||||||
|
log::error!("Uh oh, failed to send fake codes");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} // end of thread
|
||||||
|
}
|
Loading…
Reference in a new issue