<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[الفريق العربي للهندسة العكسية - الهندسة العكسية المتقدمة - Advanced RCE]]></title>
		<link>https://www.at4re.net/f/</link>
		<description><![CDATA[الفريق العربي للهندسة العكسية - https://www.at4re.net/f]]></description>
		<pubDate>Fri, 01 May 2026 16:20:36 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[!RSA Tool 2 by tE]]></title>
			<link>https://www.at4re.net/f/thread-4867.html</link>
			<pubDate>Fri, 28 Nov 2025 23:19:42 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=6394">Cavoni</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-4867.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align">What is “RSA Tool 2 by tE”?<br />
<br />
RSA-Tool 2 by tE is a Windows application used for working with the RSA cryptosystem. It is mainly used for:<br />
<br />
✅ Functions<br />
<br />
Generating RSA key pairs (public and private keys).<br />
<br />
Factorizing RSA modulus (N = p × q) using algorithms like MPQS (Multiple Polynomial Quadratic Sieve).<br />
<br />
Testing RSA keys — checking if p, q, e, and d are valid and if encryption/decryption works correctly.<br />
<br />
Supports different number formats (decimal, hexadecimal, etc.).<br />
 <br />
<pre class="block-code line-numbers"><code class="language-php">https://www.mediafire.com/file/6crpn2hvrsz1s9r/RSATool2v17.rar/file
Password: www.at4re.net
</code></pre></div>]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align">What is “RSA Tool 2 by tE”?<br />
<br />
RSA-Tool 2 by tE is a Windows application used for working with the RSA cryptosystem. It is mainly used for:<br />
<br />
✅ Functions<br />
<br />
Generating RSA key pairs (public and private keys).<br />
<br />
Factorizing RSA modulus (N = p × q) using algorithms like MPQS (Multiple Polynomial Quadratic Sieve).<br />
<br />
Testing RSA keys — checking if p, q, e, and d are valid and if encryption/decryption works correctly.<br />
<br />
Supports different number formats (decimal, hexadecimal, etc.).<br />
 <br />
<pre class="block-code line-numbers"><code class="language-php">https://www.mediafire.com/file/6crpn2hvrsz1s9r/RSATool2v17.rar/file
Password: www.at4re.net
</code></pre></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[تحدي لكسر خوارزمية جديدة]]></title>
			<link>https://www.at4re.net/f/thread-4504.html</link>
			<pubDate>Sat, 15 Mar 2025 22:05:34 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=6067">mouradgpt</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-4504.html</guid>
			<description><![CDATA[أهلا أعزائي أعضاء الفريق.<br />
<br />
من نعومة الأظافر أحببت التشفير والرياضيات ولازلت كذلك, موخرا توصلت لدمج فرعين من الرياضيات لتطوير خوارزمية جديدة. الخوارزمية حاليا قيد الدراسة المتقدمة, أضعها بين أيديكوم.<br />
<br />
أضع بين أيديكم الكود مع شرح الخوارزمية, المطلوب منكوم إيجاد طريقة للحصول على المفتاح السري من المعلومات العامة,<br />
 <br />
<pre class="block-code line-numbers"><code class="language-none">#!/usr/bin/env python3
&quot;&quot;&quot;
CrackMe.py - An NTT-Based Key Exchange Challenge

This file implements a cryptographic protocol based on Number Theoretic Transform (NTT)
convolution exponentiation. A secret exponent s is chosen and kept private; however, we publish
the following public parameters:

   p  : A large prime such that p = k*n + 1 (for some integer k) and with a desired bit length.
   n  : Sequence length (a power of 2).
   w  : A primitive n-th root of unity modulo p.
   G  : A random public sequence (with elements in GF(p)).
   H  : The convolution exponentiation of G with the secret s, computed as H = G^{*s}.

The convolution exponentiation is carried out as follows:
   1. Compute F = NTT(G, w, p), where
          F_j = Σ (G_i * w^(i*j)) mod p   for j = 0, ..., n-1.
   2. Raise each frequency component of F to the power s modulo p:
          F'_j = (F_j)^s mod p.
   3. Compute H = INTT(F', w, p), where the inverse transform is scaled by 1/n mod p.

Equations:
  (1) p = k*n + 1,  where p is prime.
  (2) w = g^((p-1)/n) mod p,  for some generator g of Z_p*.
  (3) NTT: F_j = Σ_(i=0)^(n-1) [G_i * w^(i*j)] mod p.
  (4) Convolution exponentiation: H = G^{*s} = INTT( [F_j^s mod p] )

Your challenge: Using the public info (p, n, w, G, and H), try to recover the secret exponent s.
Good luck cracking the protocol!
&quot;&quot;&quot;

import random
import secrets
import time

# Fast modular exponentiation: computes (base^exponent) mod modulus
def fast_pow_mod(base, exponent, modulus):
    if modulus == 1:
        return 0
    result = 1
    base = base % modulus
    while exponent &gt; 0:
        if exponent &amp; 1:
            result = (result * base) % modulus
        exponent &gt;&gt;= 1
        base = (base * base) % modulus
    return result

# Miller-Rabin primality test
def is_prime(n, k=40):
    if n &lt;= 1:
        return False
    if n &lt;= 3:
        return True
    if n % 2 == 0:
        return False
    r, d = 0, n-1
    while d % 2 == 0:
        r += 1
        d //= 2
    for _ in range(k):
        a = random.randint(2, n-2)
        x = fast_pow_mod(a, d, n)
        if x == 1 or x == n - 1:
            continue
        for _ in range(r - 1):
            x = fast_pow_mod(x, 2, n)
            if x == n - 1:
                break
        else:
            return False
    return True

# Find a prime number of a given bit length such that (p - 1) is divisible by n.
def find_prime_congruent(bits, n):
    while True:
        k = secrets.randbits(bits - 1)
        p = k * n + 1
        if p.bit_length() != bits:
            continue
        if is_prime(p):
            return p

# Find a primitive n-th root of unity modulo p.
def find_primitive_root(p, n):
    if (p - 1) % n != 0:
        raise ValueError(&quot;n does not divide p-1&quot;)
    g = 2
    max_attempts = 100
    attempts = 0
    while attempts &lt; max_attempts:
        if fast_pow_mod(g, (p - 1) // 2, p) != 1:
            break
        g += 1
        attempts += 1
    if attempts == max_attempts:
        raise ValueError(&quot;Failed to find a generator&quot;)
    # Compute w = g^((p-1) // n) mod p.
    w = fast_pow_mod(g, (p - 1) // n, p)
    if fast_pow_mod(w, n, p) != 1:
        raise ValueError(&quot;Failed to compute a primitive n-th root of unity&quot;)
    return w

# Number Theoretic Transform (NTT) - iterative implementation
def ntt(A, w, p):
    n = len(A)
    if n == 1:
        return A.copy()
    # Ensure n is a power of 2.
    if n &amp; (n - 1) != 0:
        raise ValueError(&quot;NTT length must be a power of 2&quot;)
    
    A_copy = A.copy()
    # Bit-reversal permutation.
    j = 0
    for i in range(1, n):
        bit = n &gt;&gt; 1
        while j &gt;= bit:
            j -= bit
            bit &gt;&gt;= 1
        j += bit
        if i &lt; j:
            A_copy[i], A_copy[j] = A_copy[j], A_copy[i]
            
    # Cooley-Tukey iterative FFT (NTT) algorithm.
    s = 1
    while s &lt; n:
        m = s &lt;&lt; 1
        w_m = fast_pow_mod(w, (p - 1) // m, p)
        for k in range(0, n, m):
            omega = 1
            for j in range(s):
                t = (omega * A_copy[k + j + s]) % p
                u = A_copy[k + j]
                A_copy[k + j] = (u + t) % p
                A_copy[k + j + s] = (u - t) % p
                omega = (omega * w_m) % p
        s *= 2
    return A_copy

# Inverse Number Theoretic Transform (INTT)
def intt(A, w, p):
    n = len(A)
    # Compute inverse of w modulo p.
    w_inv = fast_pow_mod(w, p - 2, p)
    # Compute INTT via NTT using the inverse root.
    A_inv = ntt(A, w_inv, p)
    # Normalize by multiplying with modular inverse of n.
    n_inv = fast_pow_mod(n, p - 2, p)
    for i in range(n):
        A_inv[i] = (A_inv[i] * n_inv) % p
    return A_inv

# Convolution exponentiation: Computes H = G^{*s} by raising the NTT of G to the power s.
def convolve_power(G, s, w, p):
    # Compute the NTT of G.
    NTT_G = ntt(G, w, p)
    # Raise each component of the transformed sequence to the power s (mod p).
    NTT_G_s = [fast_pow_mod(x, s, p) for x in NTT_G]
    # Perform the inverse NTT to obtain H.
    H = intt(NTT_G_s, w, p)
    return H

# Generate a random sequence G of specified length with elements in GF(p).
def generate_random_sequence(length, p):
    return [random.randint(1, p - 1) for _ in range(length)]

def main():
    print(&quot;CrackMe Challenge: NTT-Based Cryptographic Protocol&quot;)
    print(&quot;----------------------------------------------------&quot;)
    # Parameters:
    # For strong security, bits should be 2048 or higher.
    # For demonstration purposes, we use 1024 bits here.
    bits = 1024  # Bit-length of prime modulus p.
    n = 16       # Sequence length (must be a power of 2 for NTT).
    
    # Step 1: Generate a prime p such that p = k*n + 1.
    print(&quot;\nStep 1: Generating prime p such that p = k*n + 1, with&quot;, bits, &quot;bits.&quot;)
    start_time = time.time()
    p = find_prime_congruent(bits, n)
    print(&quot;Prime p =&quot;, p)
    print(&quot;Verification (p - 1) mod n =&quot;, (p - 1) % n)
    print(&quot;Time taken:&quot;, time.time() - start_time, &quot;seconds&quot;)
    
    # Step 2: Compute a primitive n-th root of unity w modulo p.
    print(&quot;\nStep 2: Computing a primitive&quot;, n, &quot;th root of unity w modulo p.&quot;)
    start_time = time.time()
    w = find_primitive_root(p, n)
    print(&quot;Primitive n-th root of unity, w =&quot;, w)
    print(&quot;Verification: w^n mod p =&quot;, fast_pow_mod(w, n, p))
    print(&quot;Time taken:&quot;, time.time() - start_time, &quot;seconds&quot;)
    
    # Step 3: Generate a random public sequence G of length n.
    print(&quot;\nStep 3: Generating random public sequence G.&quot;)
    G = generate_random_sequence(n, p)
    print(&quot;Public sequence G =&quot;, G)
    
    # Step 4: Choose a secret exponent s (keep this private!)
    s = secrets.randbelow(p - 1) + 1
    # For demonstration or debugging you could print s:
    # print(&quot;Secret exponent s =&quot;, s)   # DO NOT print in a real challenge
    
    # Step 5: Compute convolution exponentiation H = G^{*s}.
    print(&quot;\nStep 4: Computing H = G^{*s} using convolution exponentiation.&quot;)
    start_time = time.time()
    H = convolve_power(G, s, w, p)
    print(&quot;Convolution exponentiation result H =&quot;, H)
    print(&quot;Time taken:&quot;, time.time() - start_time, &quot;seconds&quot;)
    
    # Display public parameters and challenge description.
    print(&quot;\n--- Public Parameters for the Challenge ---&quot;)
    print(&quot;p      =&quot;, p)
    print(&quot;n      =&quot;, n)
    print(&quot;w      =&quot;, w)
    print(&quot;G      =&quot;, G)
    print(&quot;H      =&quot;, H)
    
    print(&quot;\nProtocol Equations and Steps:&quot;)
    print(&quot;1) p = k*n + 1, where p is prime and k is an integer.&quot;)
    print(&quot;2) w = g^((p-1)/n) mod p, with g a generator of Z_p*.&quot;)
    print(&quot;3) NTT: For G = [g0, g1, ..., g(n-1)],&quot;)
    print(&quot;       F_j = Σ_(i=0)^(n-1) (g_i * w^(i*j)) mod p, for j = 0,...,n-1.&quot;)
    print(&quot;4) Convolution Exponentiation:&quot;)
    print(&quot;       H = G^{*s} = INTT( [F_j^s mod p] ), where F = NTT(G, w, p).&quot;)
    
    print(&quot;\n-- YOUR CHALLENGE --&quot;)
    print(&quot;Using the public parameters above, determine the secret exponent s.&quot;)
    print(&quot;Best of luck to the reverse engineering and cryptography community!&quot;)

if __name__ == &quot;__main__&quot;:
    main() 
</code></pre><br />
تفاصيل الخوارزمية<br />
<a href="https://github.com/mourad-ghafiri/circular_convolution_key_exchange" target="_blank" rel="noopener" class="mycode_url">https://github.com/mourad-ghafiri/circul...y_exchange</a><br />
<br />
بالتوفيق.]]></description>
			<content:encoded><![CDATA[أهلا أعزائي أعضاء الفريق.<br />
<br />
من نعومة الأظافر أحببت التشفير والرياضيات ولازلت كذلك, موخرا توصلت لدمج فرعين من الرياضيات لتطوير خوارزمية جديدة. الخوارزمية حاليا قيد الدراسة المتقدمة, أضعها بين أيديكوم.<br />
<br />
أضع بين أيديكم الكود مع شرح الخوارزمية, المطلوب منكوم إيجاد طريقة للحصول على المفتاح السري من المعلومات العامة,<br />
 <br />
<pre class="block-code line-numbers"><code class="language-none">#!/usr/bin/env python3
&quot;&quot;&quot;
CrackMe.py - An NTT-Based Key Exchange Challenge

This file implements a cryptographic protocol based on Number Theoretic Transform (NTT)
convolution exponentiation. A secret exponent s is chosen and kept private; however, we publish
the following public parameters:

   p  : A large prime such that p = k*n + 1 (for some integer k) and with a desired bit length.
   n  : Sequence length (a power of 2).
   w  : A primitive n-th root of unity modulo p.
   G  : A random public sequence (with elements in GF(p)).
   H  : The convolution exponentiation of G with the secret s, computed as H = G^{*s}.

The convolution exponentiation is carried out as follows:
   1. Compute F = NTT(G, w, p), where
          F_j = Σ (G_i * w^(i*j)) mod p   for j = 0, ..., n-1.
   2. Raise each frequency component of F to the power s modulo p:
          F'_j = (F_j)^s mod p.
   3. Compute H = INTT(F', w, p), where the inverse transform is scaled by 1/n mod p.

Equations:
  (1) p = k*n + 1,  where p is prime.
  (2) w = g^((p-1)/n) mod p,  for some generator g of Z_p*.
  (3) NTT: F_j = Σ_(i=0)^(n-1) [G_i * w^(i*j)] mod p.
  (4) Convolution exponentiation: H = G^{*s} = INTT( [F_j^s mod p] )

Your challenge: Using the public info (p, n, w, G, and H), try to recover the secret exponent s.
Good luck cracking the protocol!
&quot;&quot;&quot;

import random
import secrets
import time

# Fast modular exponentiation: computes (base^exponent) mod modulus
def fast_pow_mod(base, exponent, modulus):
    if modulus == 1:
        return 0
    result = 1
    base = base % modulus
    while exponent &gt; 0:
        if exponent &amp; 1:
            result = (result * base) % modulus
        exponent &gt;&gt;= 1
        base = (base * base) % modulus
    return result

# Miller-Rabin primality test
def is_prime(n, k=40):
    if n &lt;= 1:
        return False
    if n &lt;= 3:
        return True
    if n % 2 == 0:
        return False
    r, d = 0, n-1
    while d % 2 == 0:
        r += 1
        d //= 2
    for _ in range(k):
        a = random.randint(2, n-2)
        x = fast_pow_mod(a, d, n)
        if x == 1 or x == n - 1:
            continue
        for _ in range(r - 1):
            x = fast_pow_mod(x, 2, n)
            if x == n - 1:
                break
        else:
            return False
    return True

# Find a prime number of a given bit length such that (p - 1) is divisible by n.
def find_prime_congruent(bits, n):
    while True:
        k = secrets.randbits(bits - 1)
        p = k * n + 1
        if p.bit_length() != bits:
            continue
        if is_prime(p):
            return p

# Find a primitive n-th root of unity modulo p.
def find_primitive_root(p, n):
    if (p - 1) % n != 0:
        raise ValueError(&quot;n does not divide p-1&quot;)
    g = 2
    max_attempts = 100
    attempts = 0
    while attempts &lt; max_attempts:
        if fast_pow_mod(g, (p - 1) // 2, p) != 1:
            break
        g += 1
        attempts += 1
    if attempts == max_attempts:
        raise ValueError(&quot;Failed to find a generator&quot;)
    # Compute w = g^((p-1) // n) mod p.
    w = fast_pow_mod(g, (p - 1) // n, p)
    if fast_pow_mod(w, n, p) != 1:
        raise ValueError(&quot;Failed to compute a primitive n-th root of unity&quot;)
    return w

# Number Theoretic Transform (NTT) - iterative implementation
def ntt(A, w, p):
    n = len(A)
    if n == 1:
        return A.copy()
    # Ensure n is a power of 2.
    if n &amp; (n - 1) != 0:
        raise ValueError(&quot;NTT length must be a power of 2&quot;)
    
    A_copy = A.copy()
    # Bit-reversal permutation.
    j = 0
    for i in range(1, n):
        bit = n &gt;&gt; 1
        while j &gt;= bit:
            j -= bit
            bit &gt;&gt;= 1
        j += bit
        if i &lt; j:
            A_copy[i], A_copy[j] = A_copy[j], A_copy[i]
            
    # Cooley-Tukey iterative FFT (NTT) algorithm.
    s = 1
    while s &lt; n:
        m = s &lt;&lt; 1
        w_m = fast_pow_mod(w, (p - 1) // m, p)
        for k in range(0, n, m):
            omega = 1
            for j in range(s):
                t = (omega * A_copy[k + j + s]) % p
                u = A_copy[k + j]
                A_copy[k + j] = (u + t) % p
                A_copy[k + j + s] = (u - t) % p
                omega = (omega * w_m) % p
        s *= 2
    return A_copy

# Inverse Number Theoretic Transform (INTT)
def intt(A, w, p):
    n = len(A)
    # Compute inverse of w modulo p.
    w_inv = fast_pow_mod(w, p - 2, p)
    # Compute INTT via NTT using the inverse root.
    A_inv = ntt(A, w_inv, p)
    # Normalize by multiplying with modular inverse of n.
    n_inv = fast_pow_mod(n, p - 2, p)
    for i in range(n):
        A_inv[i] = (A_inv[i] * n_inv) % p
    return A_inv

# Convolution exponentiation: Computes H = G^{*s} by raising the NTT of G to the power s.
def convolve_power(G, s, w, p):
    # Compute the NTT of G.
    NTT_G = ntt(G, w, p)
    # Raise each component of the transformed sequence to the power s (mod p).
    NTT_G_s = [fast_pow_mod(x, s, p) for x in NTT_G]
    # Perform the inverse NTT to obtain H.
    H = intt(NTT_G_s, w, p)
    return H

# Generate a random sequence G of specified length with elements in GF(p).
def generate_random_sequence(length, p):
    return [random.randint(1, p - 1) for _ in range(length)]

def main():
    print(&quot;CrackMe Challenge: NTT-Based Cryptographic Protocol&quot;)
    print(&quot;----------------------------------------------------&quot;)
    # Parameters:
    # For strong security, bits should be 2048 or higher.
    # For demonstration purposes, we use 1024 bits here.
    bits = 1024  # Bit-length of prime modulus p.
    n = 16       # Sequence length (must be a power of 2 for NTT).
    
    # Step 1: Generate a prime p such that p = k*n + 1.
    print(&quot;\nStep 1: Generating prime p such that p = k*n + 1, with&quot;, bits, &quot;bits.&quot;)
    start_time = time.time()
    p = find_prime_congruent(bits, n)
    print(&quot;Prime p =&quot;, p)
    print(&quot;Verification (p - 1) mod n =&quot;, (p - 1) % n)
    print(&quot;Time taken:&quot;, time.time() - start_time, &quot;seconds&quot;)
    
    # Step 2: Compute a primitive n-th root of unity w modulo p.
    print(&quot;\nStep 2: Computing a primitive&quot;, n, &quot;th root of unity w modulo p.&quot;)
    start_time = time.time()
    w = find_primitive_root(p, n)
    print(&quot;Primitive n-th root of unity, w =&quot;, w)
    print(&quot;Verification: w^n mod p =&quot;, fast_pow_mod(w, n, p))
    print(&quot;Time taken:&quot;, time.time() - start_time, &quot;seconds&quot;)
    
    # Step 3: Generate a random public sequence G of length n.
    print(&quot;\nStep 3: Generating random public sequence G.&quot;)
    G = generate_random_sequence(n, p)
    print(&quot;Public sequence G =&quot;, G)
    
    # Step 4: Choose a secret exponent s (keep this private!)
    s = secrets.randbelow(p - 1) + 1
    # For demonstration or debugging you could print s:
    # print(&quot;Secret exponent s =&quot;, s)   # DO NOT print in a real challenge
    
    # Step 5: Compute convolution exponentiation H = G^{*s}.
    print(&quot;\nStep 4: Computing H = G^{*s} using convolution exponentiation.&quot;)
    start_time = time.time()
    H = convolve_power(G, s, w, p)
    print(&quot;Convolution exponentiation result H =&quot;, H)
    print(&quot;Time taken:&quot;, time.time() - start_time, &quot;seconds&quot;)
    
    # Display public parameters and challenge description.
    print(&quot;\n--- Public Parameters for the Challenge ---&quot;)
    print(&quot;p      =&quot;, p)
    print(&quot;n      =&quot;, n)
    print(&quot;w      =&quot;, w)
    print(&quot;G      =&quot;, G)
    print(&quot;H      =&quot;, H)
    
    print(&quot;\nProtocol Equations and Steps:&quot;)
    print(&quot;1) p = k*n + 1, where p is prime and k is an integer.&quot;)
    print(&quot;2) w = g^((p-1)/n) mod p, with g a generator of Z_p*.&quot;)
    print(&quot;3) NTT: For G = [g0, g1, ..., g(n-1)],&quot;)
    print(&quot;       F_j = Σ_(i=0)^(n-1) (g_i * w^(i*j)) mod p, for j = 0,...,n-1.&quot;)
    print(&quot;4) Convolution Exponentiation:&quot;)
    print(&quot;       H = G^{*s} = INTT( [F_j^s mod p] ), where F = NTT(G, w, p).&quot;)
    
    print(&quot;\n-- YOUR CHALLENGE --&quot;)
    print(&quot;Using the public parameters above, determine the secret exponent s.&quot;)
    print(&quot;Best of luck to the reverse engineering and cryptography community!&quot;)

if __name__ == &quot;__main__&quot;:
    main() 
</code></pre><br />
تفاصيل الخوارزمية<br />
<a href="https://github.com/mourad-ghafiri/circular_convolution_key_exchange" target="_blank" rel="noopener" class="mycode_url">https://github.com/mourad-ghafiri/circul...y_exchange</a><br />
<br />
بالتوفيق.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[الهندسة العكسية للنماذج اللغوية الكبيرة - مقال 1]]></title>
			<link>https://www.at4re.net/f/thread-4442.html</link>
			<pubDate>Mon, 24 Feb 2025 17:58:51 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=6067">mouradgpt</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-4442.html</guid>
			<description><![CDATA[أهلا أعزائي أعضاء منتدى الهندسة العكسية<br />
 <br />
يسرني مشاركتكم هذه السلسلة المتواضعة ومادة خام للنقاش حول مساق ربما سيكون مستقبل الهندسة العكسية ألا وهو الهندسية العكسية للنماذج اللغوية الكبيرة. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">مقدمة</span><br />
 <br />
مما لاشك فيه أن الذكاء الاصطناعي في نسخته الحديثة للتعلم العميق للنماذج اللغوية الكبيرة خطف أنظار العالم وصار و سيصير لبنة الإقتصاد للمجتمع الحديث.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1 - نبذة عن النماذج اللغوية الكبيرة.</span><br />
<br />
بإختصار شديد, النماذج اللغوية الكبيرة هي دوال إحصائية تعطيك إحتمالية الكلمات أو جزء من الكلمات الممكنة لإكمال السياق المدخل لها.<br />
مثلا لو أعطيتها “الفريق العربي للهندسة العكسية “ ربما ستعطيك “هو” أو “يعتبر” أو “تأسس”… إلخ, كل بنسبة تناسقه مع السياق. ثم تركب سياق جديد بالتتمة التي إخترت “الفريق العربي للهندسة العكسية هو “ ستعطيك “الفريق” أو “منتدى” … إلخ, إلى غاية إنهاء الفقرة أو الجملة أو التصادف مع كلمات معدة مسبقة في تدريبها تعني نهاية السياق,<br />
 <br />
ما جعل هذه النماذج اللغوية ناجحة هو مفهوم “الإنتباه” وهو سمة يتميز بها الإنسان لمعالجة البيانات بكشل ذكي “من نعمة الله”. بمعنى لو سألتك إختيار كلمة مناسبة من كل الكلمات التي تعرف لإكمال  السياق : “الفريق العربي للهندسة العكسية هو “ فأنت تعير إهتمام كبير ربما لكلمة “العكسية” أكثر من باقي الكلمات لتعلم أننا نتكلم عن هذا المنتدى حيث أن باقي الكلمات ك “الفريق” ربما تعني فريق كرة قدم وكلمة “الهندسة” ربما تعني هندسة الوراثة إلخ…<br />
فهذه الملكة “الإنتباه” هي ملكة نطورها مع العمر لنتعلم كيف نركز على المهم في سياق معين لإكماله.<br />
 <br />
دعنا نغوص قليلا ونفكك مفهوم كلمة أو إسم أو رزم … ماذا تعني كلمة أو جزء من كلمة أو رمز أو حتى معين ؟<br />
 <br />
العين حين ترى سياق معين فهي ترى بالأساس ضوء يسقط على القرنية ثم يتم تحويل الموجات الكهروضوئية لسيالة عصبية تمرع عبر عدة تحويلات حتى تعطي نشاط عصبي في المخ ليتم ترجمته بشكل “سحري وغير مفهوم بعد” لفكرة نستطيع من خلالها تذكر أو تعلم أو إسقاط معنى أو الإتفاق مع الأخرين عن إصطلاح أو إجماع عن تعريف.<br />
 <br />
 <br />
اللغة تتشكل عن طريق روية الكثير من الأمثلة والتعلم والخطأ إما عن طريق التلقين أو التواصل أو المقاربة ببيانات في ذكرتنا أو تجاربنا… يبقى السؤال, كيف نخزن معاني الرموز في ذكرتنا لتسهل علينا معرفة تتمة أي سياق بشكل سليم؟<br />
 <br />
بما أن اللغة هي سمة من سمات الإنسان والإنسان يعتمد نظام الشبكات العصبية لتوليد اللغة, فسنحاول محاكاة الشبكة العصبية مع خاصية الإنتباه لنرى إن كان بإمكان الذكاء الإصطناعي محاكاة توليد اللغة ولما لا حتى تطوير مهارات منطقية وحل المشاكل عن طريق التحليل المنطقي المبني على اللغة؟<br />
 <br />
دعنا نعود أدراجنا… فلو أخذنا كلمة “أميرة” نستنتج أنها مركبة من الكثير من المتغيرات أو نسبة من متغيرات, مثلا : 90% “مرأة” + 5%“غنية” + 2%“قصر” + 5%“جميلة”. <br />
لكن كيف يمكن معرفة المتغيرات الأساسية التي من خلالها الحصول على تركيب أي كلمة؟ وكيف يمكن تخزين هذه المتغيرات وإعادة تحويلها لرموز لغوية؟<br />
 <br />
هنا تأتي خدعة تقنية وهي الإفتراض أن كل رمز أو كلمة أو جزء من الكلمة هو تركيب لعدد معين من المتغيرات, مثلا 512 دون تحديد معنى أي متغير, لنكتشفهم جميعا بعد التدريب على الكثير من الأمثلة من النصوص المتوفرة. ثم نستغل مبدأ التعلم بإعارة الإنتباه.<br />
<br />
كل شيئ بعد ذلك يتم تخزينه في ملف واحد أو مقسم يحتوي متغيرات رقمية ومرجع لمعادلات أو معمارية فقط… لا يتم تخزين أي نص. هي قاعدة بيانات مختلفة عن قواعد البيانات التي نعرف, هي قواعد بيانات إحصائية تعطيك فقط قيم إحتمالات وأنت المسؤول  عن تحويل القيم لرمز لغوي.<br />
 <br />
بعد تدريب النماذج اللغوية الكبيرة بهذه الطريقة حصلة مفاجأة, مفادها القدرة على تذكر النصوص التي تعلمنها بل وأكثر من ذلك القدرة على إنتاج أمثلة لغوية تحاكي لغة الإنسان ولم نتعلمها قط في مرحلة التدريب؟<br />
 <br />
حتى هنا نحصل على نموذج لغوي قادر على إنتاج لغة صحيحة سليمة, لكن ليس بضروري أنها تقدم فكرة صحيحة أو قابلة للمحادثة… هنا بدأت مرحلة أخرى وهي التهيئة للمحادثة والإجابة عن الأسئلة, وهذه المرحلة تتم عن طريق تدريب النماذج اللغوية الكبيرة بنفس الطريقة ولكن هذه المرة عن طريق نصوص تحتوي على سؤال-جواب.<br />
<br />
هل نجح الأمر؟ نعم نحج…<br />
<br />
إذا يمكن الذهاب أبعد وتهيئة للإجابة عن الأسئلة ولكن بمنهجية تفكير ونقد؟<br />
هل نجح الأمر؟ نعم نجح…<br />
 <br />
إذا هذه النمادج بعد تدريبها على النصوص اللغوية يمكن تهيئتها وتوجيهها عن طريق المزيد من التدريب والأمثلة؟ نعم.<br />
وهكذا يمكن تهيئة نماذج لغوية كبيرة لمنعها من الإجابة عن أسئلة محرمة أخلاقيا أو قانونيا أو توجيهها لانتحال شخصيات معينة أو نشر أو منع أفكار معينة.<br />
<br />
كما يمكن تدريبها وتهيئتها لكتابة لغات برمجة بشكل سليم وضعها في وسط لإستعمال أدوات كالتحكم في الحاسوب أو الشبكة أو مناداة بيانات من قواعد بيانات أو تنفيذ أوامر معينة إلخ…<br />
<br />
كما يمكن إستغلالها لعمل تطبيقات ذكية ذاتية التحكم في جميع المجالات.<br />
 <br />
هنا نفتح باب الهندسة العكسية.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2 - الهندسة العكسية للنماذج اللغوية الكبيرة</span><br />
 <br />
كما ذكرنا سابقا….متغيرات النماذج اللغوية الكبيرة يتم تخزينها في ملف يحتوي مصفوفات رقمية ومرجع لمعادلات أو معمارية. يتم أولا تحميلها في الذاكرة ثم إستغلالها عن طريق تحويل سياق نصي لمصفوفة ثم تمريرها عبر متغيرات الشبكة العصبية والحصول في الأخير على إحتمالات الكلمة أو جزء كلمة المناسب لإتمام السياق.<br />
النماذج اللغوية الحديثة صارت قوية لتفادي التفاعل في مواضيع مخالفة لقوانين المتفق عليها, لكن لها القدرة من حيث المبدأ لفعل ذلك.<br />
<br />
كيف يمكن فعل ذلك؟ وهل هذا الأمر ممكن دائما؟<br />
<br />
نعم يمكن من حيث المبدأ ودائما توجيه النماذج اللغوية لتخدم مصالحك وذلك عن طريق منهجية التحايل اللغوي…<br />
 <br />
كمثال بسيط لو أنني دربت نموذج لغوي عن تفادي الحديث عن الفايروسات البرمجية فسيتجنب دائما الحديث عن الموضوع معك… لكن لو تحايلت لغويا عل النموذج وطلبتها في بحث علمي عن طريقة حقن برمجية نافعة في برنامج مفتوح سيشرح لك بالتفصيل كيف تفعل ذلك ويبقى لك فقط تعويض البرمجية النافعة بأخرى ضارة وبهذا تكون قد تحايلت على نموذج.<br />
<br />
هذه النوع من الهندسة العكسية عن طريق التحايل اللغوي واحد من المواضيع التي سنتحدث عنها بالتفصيل في هذه السلسلة... "الحقن اللغوي" لتوجيه النموذج اللغوي لفتح منافذ الإستغلال بإعتبار أن المحادثة هي الوسيلة التي نتفاعل بها مع هذه النماذج.<br />
<br />
<br />
هنالك مداخل أخرى في هذا المجال مثل تلويث بيانات التدريب عن طريق تقديم أمثلة ضارة لغوية أو برموز لغوية خاصة حيث يمكن استغلاله أثناء إستعمال النموذج… إلخ.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3 - تطبيقات الذكاء الاصطناعي الحديثة</span><br />
 <br />
حاليا العالم الرقمي يتجه لمفهوم “العميل” الرقمي الذكي كتطبيق يستعمل النماذج اللغوية الكبيرة لتقديم خدمات أوطوماتكية. كمثال لو أحببت ترتيب رحلة سفر من الألف إلى الياء لدولة معينة وتملك ميزانية محدودة ورغبات معينة مع تقديم معلوماتك التي ستساعد في تنظيم جدولك.... ستسأل هذا “العميل” وسيقوم بفهم سؤالك جيدا والبحث في الأنترنت عن الدول المناسبة لك وحجز التذاكر لك وترتيب الجدول وحتى تقديم الترجمة للغتك الأم في كل رحلتك.<br />
 <br />
طبعا هذه الخدمة لن تكون مجانية ولن تكون خالية من العيوب التي يمكن استغلاله أو الإستافدة منها لحماية الخدمة من القراصنة.<br />
 <br />
<span style="font-weight: bold;" class="mycode_b">خاتمة</span><br />
كان هذا مقال مقدمة لسلسلة جديدة في عالم جديد للهندسة العكسية, أعطيت فيه لمحة جد سريعة عن النماذج اللغوية وتدريبها واستغلالها ثم وضعت فيها نقطة محتملة للهندسة العكسية في المستقبل القريب.<br />
<br />
<br />
أتمنى أن يكون المقال واضح, وسنستمر في الرحلة للدخول في التفاصيل خطوة خطوة.]]></description>
			<content:encoded><![CDATA[أهلا أعزائي أعضاء منتدى الهندسة العكسية<br />
 <br />
يسرني مشاركتكم هذه السلسلة المتواضعة ومادة خام للنقاش حول مساق ربما سيكون مستقبل الهندسة العكسية ألا وهو الهندسية العكسية للنماذج اللغوية الكبيرة. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">مقدمة</span><br />
 <br />
مما لاشك فيه أن الذكاء الاصطناعي في نسخته الحديثة للتعلم العميق للنماذج اللغوية الكبيرة خطف أنظار العالم وصار و سيصير لبنة الإقتصاد للمجتمع الحديث.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1 - نبذة عن النماذج اللغوية الكبيرة.</span><br />
<br />
بإختصار شديد, النماذج اللغوية الكبيرة هي دوال إحصائية تعطيك إحتمالية الكلمات أو جزء من الكلمات الممكنة لإكمال السياق المدخل لها.<br />
مثلا لو أعطيتها “الفريق العربي للهندسة العكسية “ ربما ستعطيك “هو” أو “يعتبر” أو “تأسس”… إلخ, كل بنسبة تناسقه مع السياق. ثم تركب سياق جديد بالتتمة التي إخترت “الفريق العربي للهندسة العكسية هو “ ستعطيك “الفريق” أو “منتدى” … إلخ, إلى غاية إنهاء الفقرة أو الجملة أو التصادف مع كلمات معدة مسبقة في تدريبها تعني نهاية السياق,<br />
 <br />
ما جعل هذه النماذج اللغوية ناجحة هو مفهوم “الإنتباه” وهو سمة يتميز بها الإنسان لمعالجة البيانات بكشل ذكي “من نعمة الله”. بمعنى لو سألتك إختيار كلمة مناسبة من كل الكلمات التي تعرف لإكمال  السياق : “الفريق العربي للهندسة العكسية هو “ فأنت تعير إهتمام كبير ربما لكلمة “العكسية” أكثر من باقي الكلمات لتعلم أننا نتكلم عن هذا المنتدى حيث أن باقي الكلمات ك “الفريق” ربما تعني فريق كرة قدم وكلمة “الهندسة” ربما تعني هندسة الوراثة إلخ…<br />
فهذه الملكة “الإنتباه” هي ملكة نطورها مع العمر لنتعلم كيف نركز على المهم في سياق معين لإكماله.<br />
 <br />
دعنا نغوص قليلا ونفكك مفهوم كلمة أو إسم أو رزم … ماذا تعني كلمة أو جزء من كلمة أو رمز أو حتى معين ؟<br />
 <br />
العين حين ترى سياق معين فهي ترى بالأساس ضوء يسقط على القرنية ثم يتم تحويل الموجات الكهروضوئية لسيالة عصبية تمرع عبر عدة تحويلات حتى تعطي نشاط عصبي في المخ ليتم ترجمته بشكل “سحري وغير مفهوم بعد” لفكرة نستطيع من خلالها تذكر أو تعلم أو إسقاط معنى أو الإتفاق مع الأخرين عن إصطلاح أو إجماع عن تعريف.<br />
 <br />
 <br />
اللغة تتشكل عن طريق روية الكثير من الأمثلة والتعلم والخطأ إما عن طريق التلقين أو التواصل أو المقاربة ببيانات في ذكرتنا أو تجاربنا… يبقى السؤال, كيف نخزن معاني الرموز في ذكرتنا لتسهل علينا معرفة تتمة أي سياق بشكل سليم؟<br />
 <br />
بما أن اللغة هي سمة من سمات الإنسان والإنسان يعتمد نظام الشبكات العصبية لتوليد اللغة, فسنحاول محاكاة الشبكة العصبية مع خاصية الإنتباه لنرى إن كان بإمكان الذكاء الإصطناعي محاكاة توليد اللغة ولما لا حتى تطوير مهارات منطقية وحل المشاكل عن طريق التحليل المنطقي المبني على اللغة؟<br />
 <br />
دعنا نعود أدراجنا… فلو أخذنا كلمة “أميرة” نستنتج أنها مركبة من الكثير من المتغيرات أو نسبة من متغيرات, مثلا : 90% “مرأة” + 5%“غنية” + 2%“قصر” + 5%“جميلة”. <br />
لكن كيف يمكن معرفة المتغيرات الأساسية التي من خلالها الحصول على تركيب أي كلمة؟ وكيف يمكن تخزين هذه المتغيرات وإعادة تحويلها لرموز لغوية؟<br />
 <br />
هنا تأتي خدعة تقنية وهي الإفتراض أن كل رمز أو كلمة أو جزء من الكلمة هو تركيب لعدد معين من المتغيرات, مثلا 512 دون تحديد معنى أي متغير, لنكتشفهم جميعا بعد التدريب على الكثير من الأمثلة من النصوص المتوفرة. ثم نستغل مبدأ التعلم بإعارة الإنتباه.<br />
<br />
كل شيئ بعد ذلك يتم تخزينه في ملف واحد أو مقسم يحتوي متغيرات رقمية ومرجع لمعادلات أو معمارية فقط… لا يتم تخزين أي نص. هي قاعدة بيانات مختلفة عن قواعد البيانات التي نعرف, هي قواعد بيانات إحصائية تعطيك فقط قيم إحتمالات وأنت المسؤول  عن تحويل القيم لرمز لغوي.<br />
 <br />
بعد تدريب النماذج اللغوية الكبيرة بهذه الطريقة حصلة مفاجأة, مفادها القدرة على تذكر النصوص التي تعلمنها بل وأكثر من ذلك القدرة على إنتاج أمثلة لغوية تحاكي لغة الإنسان ولم نتعلمها قط في مرحلة التدريب؟<br />
 <br />
حتى هنا نحصل على نموذج لغوي قادر على إنتاج لغة صحيحة سليمة, لكن ليس بضروري أنها تقدم فكرة صحيحة أو قابلة للمحادثة… هنا بدأت مرحلة أخرى وهي التهيئة للمحادثة والإجابة عن الأسئلة, وهذه المرحلة تتم عن طريق تدريب النماذج اللغوية الكبيرة بنفس الطريقة ولكن هذه المرة عن طريق نصوص تحتوي على سؤال-جواب.<br />
<br />
هل نجح الأمر؟ نعم نحج…<br />
<br />
إذا يمكن الذهاب أبعد وتهيئة للإجابة عن الأسئلة ولكن بمنهجية تفكير ونقد؟<br />
هل نجح الأمر؟ نعم نجح…<br />
 <br />
إذا هذه النمادج بعد تدريبها على النصوص اللغوية يمكن تهيئتها وتوجيهها عن طريق المزيد من التدريب والأمثلة؟ نعم.<br />
وهكذا يمكن تهيئة نماذج لغوية كبيرة لمنعها من الإجابة عن أسئلة محرمة أخلاقيا أو قانونيا أو توجيهها لانتحال شخصيات معينة أو نشر أو منع أفكار معينة.<br />
<br />
كما يمكن تدريبها وتهيئتها لكتابة لغات برمجة بشكل سليم وضعها في وسط لإستعمال أدوات كالتحكم في الحاسوب أو الشبكة أو مناداة بيانات من قواعد بيانات أو تنفيذ أوامر معينة إلخ…<br />
<br />
كما يمكن إستغلالها لعمل تطبيقات ذكية ذاتية التحكم في جميع المجالات.<br />
 <br />
هنا نفتح باب الهندسة العكسية.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2 - الهندسة العكسية للنماذج اللغوية الكبيرة</span><br />
 <br />
كما ذكرنا سابقا….متغيرات النماذج اللغوية الكبيرة يتم تخزينها في ملف يحتوي مصفوفات رقمية ومرجع لمعادلات أو معمارية. يتم أولا تحميلها في الذاكرة ثم إستغلالها عن طريق تحويل سياق نصي لمصفوفة ثم تمريرها عبر متغيرات الشبكة العصبية والحصول في الأخير على إحتمالات الكلمة أو جزء كلمة المناسب لإتمام السياق.<br />
النماذج اللغوية الحديثة صارت قوية لتفادي التفاعل في مواضيع مخالفة لقوانين المتفق عليها, لكن لها القدرة من حيث المبدأ لفعل ذلك.<br />
<br />
كيف يمكن فعل ذلك؟ وهل هذا الأمر ممكن دائما؟<br />
<br />
نعم يمكن من حيث المبدأ ودائما توجيه النماذج اللغوية لتخدم مصالحك وذلك عن طريق منهجية التحايل اللغوي…<br />
 <br />
كمثال بسيط لو أنني دربت نموذج لغوي عن تفادي الحديث عن الفايروسات البرمجية فسيتجنب دائما الحديث عن الموضوع معك… لكن لو تحايلت لغويا عل النموذج وطلبتها في بحث علمي عن طريقة حقن برمجية نافعة في برنامج مفتوح سيشرح لك بالتفصيل كيف تفعل ذلك ويبقى لك فقط تعويض البرمجية النافعة بأخرى ضارة وبهذا تكون قد تحايلت على نموذج.<br />
<br />
هذه النوع من الهندسة العكسية عن طريق التحايل اللغوي واحد من المواضيع التي سنتحدث عنها بالتفصيل في هذه السلسلة... "الحقن اللغوي" لتوجيه النموذج اللغوي لفتح منافذ الإستغلال بإعتبار أن المحادثة هي الوسيلة التي نتفاعل بها مع هذه النماذج.<br />
<br />
<br />
هنالك مداخل أخرى في هذا المجال مثل تلويث بيانات التدريب عن طريق تقديم أمثلة ضارة لغوية أو برموز لغوية خاصة حيث يمكن استغلاله أثناء إستعمال النموذج… إلخ.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3 - تطبيقات الذكاء الاصطناعي الحديثة</span><br />
 <br />
حاليا العالم الرقمي يتجه لمفهوم “العميل” الرقمي الذكي كتطبيق يستعمل النماذج اللغوية الكبيرة لتقديم خدمات أوطوماتكية. كمثال لو أحببت ترتيب رحلة سفر من الألف إلى الياء لدولة معينة وتملك ميزانية محدودة ورغبات معينة مع تقديم معلوماتك التي ستساعد في تنظيم جدولك.... ستسأل هذا “العميل” وسيقوم بفهم سؤالك جيدا والبحث في الأنترنت عن الدول المناسبة لك وحجز التذاكر لك وترتيب الجدول وحتى تقديم الترجمة للغتك الأم في كل رحلتك.<br />
 <br />
طبعا هذه الخدمة لن تكون مجانية ولن تكون خالية من العيوب التي يمكن استغلاله أو الإستافدة منها لحماية الخدمة من القراصنة.<br />
 <br />
<span style="font-weight: bold;" class="mycode_b">خاتمة</span><br />
كان هذا مقال مقدمة لسلسلة جديدة في عالم جديد للهندسة العكسية, أعطيت فيه لمحة جد سريعة عن النماذج اللغوية وتدريبها واستغلالها ثم وضعت فيها نقطة محتملة للهندسة العكسية في المستقبل القريب.<br />
<br />
<br />
أتمنى أن يكون المقال واضح, وسنستمر في الرحلة للدخول في التفاصيل خطوة خطوة.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Řŏćķ3ÿ4ñď emulator kit]]></title>
			<link>https://www.at4re.net/f/thread-4397.html</link>
			<pubDate>Mon, 17 Feb 2025 06:40:46 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=2599">johnvb</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-4397.html</guid>
			<description><![CDATA[This kits has řŏćķ3ÿ4ñď dongle emulator and src code and tutorial<br />
<br />
<a href="https://1drv.ms/f/s!Arah36Ltc5Mxg3hl34dYl2w8e1Jx" target="_blank" rel="noopener" class="mycode_url">Download here</a>]]></description>
			<content:encoded><![CDATA[This kits has řŏćķ3ÿ4ñď dongle emulator and src code and tutorial<br />
<br />
<a href="https://1drv.ms/f/s!Arah36Ltc5Mxg3hl34dYl2w8e1Jx" target="_blank" rel="noopener" class="mycode_url">Download here</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[مواضيع حصرية من القسم الخاص]]></title>
			<link>https://www.at4re.net/f/thread-4288.html</link>
			<pubDate>Thu, 30 Jan 2025 17:51:25 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=1">M!X0R</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-4288.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.at4re.net/f/images/smilies/Salam.gif" alt="Salam" title="Salam" class="smilie smilie_72" /><br />
الحمد لله وحده و الصلاة و السلام على من لا نبي بعده، أما بعد:<br />
<br />
كما وعدكم الفريق بكشف الستار على بعض المواضيع الحصرية <br />
<br />
ها نحن نفي بالوعد و مع اول موضوع للأخ <span style="color: #f39c12;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">TeRcO</span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Inline Execryptor using DLL-File Injection</span><br />
<br />
الأسئلة و الاستفسارات تطرح بهذا الموضوع<br />
<br />
<a href="https://www.at4re.net/f/thread-4287.html" target="_blank" rel="noopener" class="mycode_url">https://www.at4re.net/f/thread-4287.html</a><br />
<br />
تحميل الشرح من الملف المرفق<br />
<br />
الدرس القادم باذن لله من طرف الأخ <span style="color: #8e44ad;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Newhak</span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Inlin!ng.ASprotect.using.DLL-File.Injection.Meth0d</span><br />
<br />
منكم و إليكم<span style="font-weight: bold;" class="mycode_b"> </span> <img src="https://www.at4re.net/f/images/smilies/heart.gif" alt="Heart" title="Heart" class="smilie smilie_16" /></div><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.at4re.net/f/images/attachtypes/txt.png" title="Text Document" border="0" alt=".txt" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=2934" target="_blank" title="">Link.txt</a> (الحجم : 73 bytes / التحميلات : 28)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.at4re.net/f/images/smilies/Salam.gif" alt="Salam" title="Salam" class="smilie smilie_72" /><br />
الحمد لله وحده و الصلاة و السلام على من لا نبي بعده، أما بعد:<br />
<br />
كما وعدكم الفريق بكشف الستار على بعض المواضيع الحصرية <br />
<br />
ها نحن نفي بالوعد و مع اول موضوع للأخ <span style="color: #f39c12;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">TeRcO</span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Inline Execryptor using DLL-File Injection</span><br />
<br />
الأسئلة و الاستفسارات تطرح بهذا الموضوع<br />
<br />
<a href="https://www.at4re.net/f/thread-4287.html" target="_blank" rel="noopener" class="mycode_url">https://www.at4re.net/f/thread-4287.html</a><br />
<br />
تحميل الشرح من الملف المرفق<br />
<br />
الدرس القادم باذن لله من طرف الأخ <span style="color: #8e44ad;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Newhak</span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Inlin!ng.ASprotect.using.DLL-File.Injection.Meth0d</span><br />
<br />
منكم و إليكم<span style="font-weight: bold;" class="mycode_b"> </span> <img src="https://www.at4re.net/f/images/smilies/heart.gif" alt="Heart" title="Heart" class="smilie smilie_16" /></div><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.at4re.net/f/images/attachtypes/txt.png" title="Text Document" border="0" alt=".txt" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=2934" target="_blank" title="">Link.txt</a> (الحجم : 73 bytes / التحميلات : 28)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[نقاش حول شاشة مزعجة Rainbow Sentinel]]></title>
			<link>https://www.at4re.net/f/thread-4262.html</link>
			<pubDate>Wed, 22 Jan 2025 17:24:58 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=2526">DarkDeath</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-4262.html</guid>
			<description><![CDATA[Protection: Rainbow Sentinel dongle reference<br />
<br />
<br />
كيف إزالة الشاشة المزعجة فقط لهذا الاصدار من البرنامج ؟<br />
 <br />
<pre class="block-code line-numbers"><code class="language-php">https://www.mediafire.com/file/akb22m1gj59ng5b/RISA-3D-Setup.rar/file
</code></pre>]]></description>
			<content:encoded><![CDATA[Protection: Rainbow Sentinel dongle reference<br />
<br />
<br />
كيف إزالة الشاشة المزعجة فقط لهذا الاصدار من البرنامج ؟<br />
 <br />
<pre class="block-code line-numbers"><code class="language-php">https://www.mediafire.com/file/akb22m1gj59ng5b/RISA-3D-Setup.rar/file
</code></pre>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Hasp hl and hasp srm emulator kit]]></title>
			<link>https://www.at4re.net/f/thread-4250.html</link>
			<pubDate>Wed, 15 Jan 2025 05:14:15 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=2599">johnvb</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-4250.html</guid>
			<description><![CDATA[This is full kit for hasp hl and hasp srm dongle emulator <br />
<br />
Encryption key<br />
1g8Y3wfBPMraI26a7tMrJ9TJi__reWNKCtGP2o4EC_A<br />
<br />
​​​​​​Download <br />
<a href="https://mega.nz/file/OJ5RzQiR" target="_blank" rel="noopener" class="mycode_url">​​​​​​​​​​Download from here</a>]]></description>
			<content:encoded><![CDATA[This is full kit for hasp hl and hasp srm dongle emulator <br />
<br />
Encryption key<br />
1g8Y3wfBPMraI26a7tMrJ9TJi__reWNKCtGP2o4EC_A<br />
<br />
​​​​​​Download <br />
<a href="https://mega.nz/file/OJ5RzQiR" target="_blank" rel="noopener" class="mycode_url">​​​​​​​​​​Download from here</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[احتاج مساعد فك ملف vmp معقد]]></title>
			<link>https://www.at4re.net/f/thread-4166.html</link>
			<pubDate>Wed, 20 Nov 2024 22:06:06 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=5573">Takayanagi</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-4166.html</guid>
			<description><![CDATA[اهلا احتاج فك ملف معقد اذا امكن المساعدة]]></description>
			<content:encoded><![CDATA[اهلا احتاج فك ملف معقد اذا امكن المساعدة]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Wibu code meter unpacking shell from executable]]></title>
			<link>https://www.at4re.net/f/thread-3962.html</link>
			<pubDate>Mon, 13 May 2024 08:12:52 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=2599">johnvb</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-3962.html</guid>
			<description><![CDATA[Video tutorial for unpacking shell for wibu protection<br />
<pre class="block-code line-numbers"><code class="language-php">https://dailyuploads.net/fyu1sc1oef59
</code></pre>]]></description>
			<content:encoded><![CDATA[Video tutorial for unpacking shell for wibu protection<br />
<pre class="block-code line-numbers"><code class="language-php">https://dailyuploads.net/fyu1sc1oef59
</code></pre>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Safenet microdog]]></title>
			<link>https://www.at4re.net/f/thread-3701.html</link>
			<pubDate>Wed, 06 Dec 2023 09:40:26 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=425">أبولهكرز</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-3701.html</guid>
			<description><![CDATA[السلام عليكم ورحمه الله وبركاته<br />
<br />
ممكن المساعدة في كسر حماية الدونغل microdog.<br />
<br />
شكرا]]></description>
			<content:encoded><![CDATA[السلام عليكم ورحمه الله وبركاته<br />
<br />
ممكن المساعدة في كسر حماية الدونغل microdog.<br />
<br />
شكرا]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[DONGLE - Rainbow SENTiNEL SUPER PRO]]></title>
			<link>https://www.at4re.net/f/thread-3394.html</link>
			<pubDate>Sun, 20 Nov 2022 21:24:20 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=2526">DarkDeath</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-3394.html</guid>
			<description><![CDATA[تم بفضل من الله وضع تمرين على هذه الحماية كـ تمرين بمسمى تحدي<br />
حتى يشارك من لدية خبره في هذا المجال و تتنوع الحلول لاكتشاف المواهب<br />
<br />
و وضعت هذه المشاركة لتكون فهرس ومرجع في البحث عن هذا النوع من الحماية<br />
<br />
الموضوع : <a href="https://www.at4re.net/f/thread-3391.html" target="_blank" rel="noopener" class="mycode_url">تمرين تحدي حماية صعبة</a><br />
<br />
أو من هذا الرابط : <a href="https://www.at4re.net/f/thread-3391.html" target="_blank" rel="noopener" class="mycode_url">https://www.at4re.net/f/thread-3391.html</a>]]></description>
			<content:encoded><![CDATA[تم بفضل من الله وضع تمرين على هذه الحماية كـ تمرين بمسمى تحدي<br />
حتى يشارك من لدية خبره في هذا المجال و تتنوع الحلول لاكتشاف المواهب<br />
<br />
و وضعت هذه المشاركة لتكون فهرس ومرجع في البحث عن هذا النوع من الحماية<br />
<br />
الموضوع : <a href="https://www.at4re.net/f/thread-3391.html" target="_blank" rel="noopener" class="mycode_url">تمرين تحدي حماية صعبة</a><br />
<br />
أو من هذا الرابط : <a href="https://www.at4re.net/f/thread-3391.html" target="_blank" rel="noopener" class="mycode_url">https://www.at4re.net/f/thread-3391.html</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[How To Bypass Flexnet Publisher License ?]]></title>
			<link>https://www.at4re.net/f/thread-3152.html</link>
			<pubDate>Fri, 15 Jul 2022 09:33:53 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=3224">dilip786</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-3152.html</guid>
			<description><![CDATA[? How To Bypass<span style="font-weight: bold;" class="mycode_b"> Flexnet Publisher License</span><br />
<br />
i have file<br />
<span style="font-weight: bold;" class="mycode_b">GVKK_009a7200_tsf.data<br />
license_param.xml</span><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.at4re.net/f/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=2281" target="_blank" title="">GVKK_009a7200_tsf_.zip</a> (الحجم : 41.37 KB / التحميلات : 74)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[? How To Bypass<span style="font-weight: bold;" class="mycode_b"> Flexnet Publisher License</span><br />
<br />
i have file<br />
<span style="font-weight: bold;" class="mycode_b">GVKK_009a7200_tsf.data<br />
license_param.xml</span><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.at4re.net/f/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=2281" target="_blank" title="">GVKK_009a7200_tsf_.zip</a> (الحجم : 41.37 KB / التحميلات : 74)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[برنامج بدون استيرادات]]></title>
			<link>https://www.at4re.net/f/thread-3065.html</link>
			<pubDate>Sun, 10 Apr 2022 21:00:31 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=1342">siddigss</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-3065.html</guid>
			<description><![CDATA[أثناء بحثي عن موضوع ما وجدت برنامجا يُدّعى أنه يعمل بدون استيرات أي مكتبة ولا حتى kernel32.dll، ولكنه يستدعي الدالة MessageBox والتي توجد في المكتبة USER32.dll. وفعلا في cff explorer لا وجود لجدول imports.<br />
البرنامج للأسف لا يعمل عندي على windows 8. من كان عنده windows xp إلى 7 يمكنه التحقق لنا <img src="https://www.at4re.net/f/images/smilies/smile.gif" alt="Smile" title="Smile" class="smilie smilie_1" /> .<br />
<br />
فقمت بتنقيح البرنامج ومحاولة فهم الأوامر، في ما يلي سأوضح نظريا كيف يعمل البرنامج على الرغم من عدم امتلاكي لنسخة تعمل منه حاليا، كما سأوضح سبب فشل البرنامج (<span style="color: #ff0000;" class="mycode_color">البرنامج في المرفقات</span>).<br />
<span style="color: #ff0000;" class="mycode_color">تنبيه: </span>هذا التحليل لا يعني أن البرنامج لن يعمل على الأنظمة السابقة ل windows 8! بل على العكس، فكرة البرنامج تبدو صالحة لو لا بعض الافتراضات الضمنية التي لا تتحقق في windows 8. وغالب ظني أنه فعلا يعمل على الأنظمة السابقة.<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="color: #ff0000;" class="mycode_color">خطة البرنامج بشكل مختصر:</span></span><br />
1- يفترض البرنامج أن kernel32.dll قد تم تحمليها مسبقا بشكل تلقائي حتى ولو لم يطلب البرنامج ذلك (وهو الحال فعلا).<br />
2- انطلاقا من هذا الفرض 1 يحاول البرنامج البحث عن ال base address ل kernel32.dll.<br />
3- يبحث البرنامج في ال export directory في ال PE Header الخاص ب kernel32.dll عن الدالة LoadLibrary.<br />
4- باستعمال الدالة LoadLibrary يستطيع البرنامج تحميل المكتية USER32.dll ومعرفة عنوانها.<br />
5- البحث في ال export directory في ال PE Header الخاص ب USER32.dll عن الدالة MessageBox<br />
6- استدعاء الدالة MessageBox.<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="color: #ff0000;" class="mycode_color">التفاصيل:</span></span><br />
سنستعمل ال structure التالي لتخزين معلومات الدوال التي نود البحث عنها.<br />
<pre class="block-code"><code class="language-none">struct function_info{
    BYTE function_name_length;    // including the zero byte at the end.
    char* function_name;        // zero terminated string.
    DWORD function_address;        // absolute address.
};
</code></pre>function_name_length و function_name ثابتان في الحقيقة بينما function_address هو المتغير الذي سوف نقوم بتعبئته عند الخطوتين 3 و 5.<br />
<br />
البرنامج يعرف المتغيرات العمومية (Global أهذه الترجمة جيدة؟) التالية:<br />
<pre class="block-code"><code class="language-none">Global Variables:
DLL_base_address                              : 0x40205D
kernel32_base_address                         : 0x402052
kernel32_functions_info_array                 : 0x402000
user32_functions_info_array                   : 00402033
user32_string = &quot;USER32&quot;                      : 0x402056
message = &quot;without imports, funny eh?&quot;        : 0x40106F
&quot;little test&quot;                                 : 0x401053
</code></pre>علي اليمين العناوين المطلقة التي ظهرت عندي وعنوان الأساس كان 0x400000، وأود أن أنوه أن جميع العناويين في هذه المشاركة مطلقة كما أن أسماء المتغيرات والدوال من تسميتي.<br />
لنلق نظرة على kernel32_functions_info_array<br />
<pre class="block-code"><code class="language-none">0E 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00  .GetProcAddress.
00 00 00 0B 4C 6F 61 64 4C 69 62 72 61 72 79 00  ....LoadLibrary.
00 00 00 0B 45 78 69 74 50 72 6F 63 65 73 73 00  ....ExitProcess.
00 00 00                                         ...
  
</code></pre>نرى أن kernel32_functions_info_array عبارة عن ثلاث function_info متعاقبة، وبالمثل user32_functions_info_array<br />
<pre class="block-code"><code class="language-none">0B 4D 65 73 73 61 67 65 42 65 65 70 00 00 00 00  .MessageBeep....  
0A 4D 65 73 73 61 67 65 42 6F 78 00 00 00 00     .MessageBox....
</code></pre>أسماء الدوال التي تظهر في kernel32_functions_info_array و user32_functions_info_array هي أسماء الدوال التي سيبحث البرنامج عن عناوينها بدون استيراد مكتباتها بشكل صريح.<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="color: #ff0000;" class="mycode_color">الأوامر:</span></span><br />
سنفصل الخطوتين 2 و 3، لأن البقية واضحة و الخطوة 5 مطابقة ل 3 (فقط باختلاف قيمة DLL_base_address).<br />
الخطوة 2: عمليا يبدأ البرنامج باستدعاء الدالة Fill_kernel32_address_directly_after_running المعرفة كالتالي<br />
<pre class="block-code"><code class="language-none">// This function must be called right at the beginning of the program excution.
// This function assigns the value of base address to kernel32.dll to the global variable DLL_base_address (0x40205D).
// Function address: 0x0040109A
Fill_kernel32_address_directly_after_running:
ecx = [esp+4]     // some address in kernel32
edx = 0
while(!(dx &amp; F800 == 0 &amp;&amp; ecx == [edx+ecx+0x34])){            // access violation exception. Fix this.
    ecx--
    dx = word[ecx+0x3C]
}
// ecx = the base address of kernel32.
[0x402052] = ecx        // kernel32_base_address = kernel32.dll base address
[0x40205D] = ecx        // DLL_base_address = kernel32.dll base address
ret
</code></pre>تبدأ الدالة ب ecx = [esp+4] وهذا لأن أول ما يوجد في المكدس هو عنوان داخل نطاق kernel32.dll. لكننا نريد عنوان الأساس وليس أي عنوان في kernel32.dll. نعلم أن عنوان الأساس يحقق الخصائص التالية<br />
1- عنوان الأساس يساوي قيمة PE_Header.Optional_Header.ImageBase<br />
والذي يمكننا الوصول إليه كالتالي<br />
<pre class="block-code"><code class="language-none">[base_address + [base_address + 03C] + 0x34]
</code></pre>أي أن الشرط الأول على ecx هو<br />
<pre class="block-code"><code class="language-none">ecx == [ecx + [ecx + 03C] + 0x34]
</code></pre><br />
2- أصغر من قيمة ecx أعلاه (هل هذا صحيح دائما؟).<br />
كما أن البرنامج يضيف الشرط التالي<br />
3- أن يكون dx &amp; F800 == 0 ولعل المقصود أن تكون قيمة edx صغيرة فلا يحصل memory access violation exception.<br />
فما تقوم به الدالة Fill_kernel32_address_directly_after_running  هو انقاص قيمة ecx باستمرار والتحقق من الشرطين 1 و 3. إذا تحققا فهذا هو عنوان الأساس ل kernel32.dll !!<br />
لكن لا بد أنكم رأيتم التعليق access violation exception. Fix this أعلاه، وهذا عندي لوجود مناطق ذاكرة محجوزة تتخلل منطقة ذاكرة kernel32.dll. يبدو أن هذا لم يكن الحال في الأنظمة السابقة.<br />
<br />
الخطوة 3:<br />
بما أننا حصلنا على عنوان kernel32.dll وخزناه في DLL_base_address فإبمكاننا الوصول إلى export directory ببساطة والبحث عن أسماء الدوال التي نريد. لنعرف الدالة التالية<br />
<pre class="block-code"><code class="language-none">// Find_Address_By_Name_From_DLL uses two pieces of information
// 1- [0x40205D]: DLL_base_address = The base address of the DLL.
// 2- esi        : The name of the wanted function.
// Function address: 0x004010D9

Find_Address_By_Name_From_DLL:
edx = [0x40205D]          // edx = base address of the dll
edx = edx + [edx+0x3C]      // edx = NT Header address
edx = [edx + 0x78]          // edx = Export Directory RVA
edx = edx + [0x40205D]      // edx = export directory address.
edi = [edx+20]              // edi = RVA of address of names.
edi = edi + [0x40205D]    // edi = address of addresses of names
edi = [edi]               // edi = RV address of first name
edi = edi + [0x40205D]      // edi = address of first name.
eax = [edx + 18]          // eax = number of functions names.

ebx = 1
while(esi equals edi as Strings){      //  repe cmpsb. edi at this point is a null terminated string.
    ebx++
    while(byte[edi]!=0){
        edi++
    }
    edi++
    eax--
    if(eax == 0){
        push 0
        call [0x40202F]        // ExitProcess address. Address not correct! Crash if not filled!
    }
}
ecx = [edx + 24]            // RV address of name ordinals
ecx = ecx + [0x40205D]        // address of name ordinals
ebx--                       // ebx is the order of the name esi in the name array edi.
eax = word [ecx + ebx*2]    // zero extended. eax = ordinal of the function. False ordinal!
ebx = [edx + 1C]            // RV address of functions in kernel32.dll
ebx = ebx + [0x40205D]      // address of functions in kernel32.dll
eax = [ebx + 4*eax]         // RV address of the wanted function
eax = eax + [0x40205D]      // address of the wanted function

ret
</code></pre>قد تبدو كبيرة لكن نظريا بسيطة وجل ما تقوم به هو التالي:<br />
1- استخراج بعض المعلومات من ال PE Header الخاص بال dll المراد البحث فيه وهو في حالتنا الآن kernel32.dll.<br />
2- في ال while loop يقوم بمقارنة اسم الدالة التي نريد أن نبحث عنها (esi) مع قائمة الأسماء المسخرجة في 1 والتي خزنت في edi.<br />
3- بعد إيجاد ترتيب اسم الدالة في قائمة الأسماء (ebx) نستعمله كأنه ال ordinal المحدد للدالة في ال PE Header الخاص ب kernerl32.dll وباستعماله نستطيع إيجاد عنوان الدالة.<br />
هذه الخطوات تطبيق عملي لل PE Header Structure.<br />
<br />
هل انتبهت للتعليق False ordinal؟ في الحقيقة حتى هنا توجد مشكلة وهي أن المبرمج افترض أن ترتيب اسم الدالة ebx في مصوفة الأسماء edi سيكون مطابقا ل ordinal الدالة! للأسف هذا غير صحيح عندي. كان من المفترض أن يستخدم address of addresses of names وليس address of first name (انظر التعليقات على الأوامر) لكنه افترض أن ترتيب الأسماء هنا وهناك سيكون متطابقا!<br />
<br />
--------------------<br />
<span style="font-size: medium;" class="mycode_size"><span style="color: #ff0000;" class="mycode_color">في المرفقات: </span></span>تجدون البرنامج وملف txt فيه أوامر البرنامج معكوسة كلها تقريبا لمن أراد التعقب أثناء التنقيح أو محاولة إعادة كتابة البرنامج لجعله يعمل على الأنظمة الجديدة.<br />
<br />
<span style="color: #ff0000;" class="mycode_color"><span style="font-size: medium;" class="mycode_size">المراجع:</span></span> البرنامج الأصلي يوجد في مجلد yoda/NoImports.exe بعد التحميل من <a href="https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/corkami/BinaryCorpus_v2.zip" target="_blank" rel="noopener" class="mycode_url">هنا</a>.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.at4re.net/f/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=2185" target="_blank" title="">NoImports.zip</a> (الحجم : 2.32 KB / التحميلات : 34)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[أثناء بحثي عن موضوع ما وجدت برنامجا يُدّعى أنه يعمل بدون استيرات أي مكتبة ولا حتى kernel32.dll، ولكنه يستدعي الدالة MessageBox والتي توجد في المكتبة USER32.dll. وفعلا في cff explorer لا وجود لجدول imports.<br />
البرنامج للأسف لا يعمل عندي على windows 8. من كان عنده windows xp إلى 7 يمكنه التحقق لنا <img src="https://www.at4re.net/f/images/smilies/smile.gif" alt="Smile" title="Smile" class="smilie smilie_1" /> .<br />
<br />
فقمت بتنقيح البرنامج ومحاولة فهم الأوامر، في ما يلي سأوضح نظريا كيف يعمل البرنامج على الرغم من عدم امتلاكي لنسخة تعمل منه حاليا، كما سأوضح سبب فشل البرنامج (<span style="color: #ff0000;" class="mycode_color">البرنامج في المرفقات</span>).<br />
<span style="color: #ff0000;" class="mycode_color">تنبيه: </span>هذا التحليل لا يعني أن البرنامج لن يعمل على الأنظمة السابقة ل windows 8! بل على العكس، فكرة البرنامج تبدو صالحة لو لا بعض الافتراضات الضمنية التي لا تتحقق في windows 8. وغالب ظني أنه فعلا يعمل على الأنظمة السابقة.<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="color: #ff0000;" class="mycode_color">خطة البرنامج بشكل مختصر:</span></span><br />
1- يفترض البرنامج أن kernel32.dll قد تم تحمليها مسبقا بشكل تلقائي حتى ولو لم يطلب البرنامج ذلك (وهو الحال فعلا).<br />
2- انطلاقا من هذا الفرض 1 يحاول البرنامج البحث عن ال base address ل kernel32.dll.<br />
3- يبحث البرنامج في ال export directory في ال PE Header الخاص ب kernel32.dll عن الدالة LoadLibrary.<br />
4- باستعمال الدالة LoadLibrary يستطيع البرنامج تحميل المكتية USER32.dll ومعرفة عنوانها.<br />
5- البحث في ال export directory في ال PE Header الخاص ب USER32.dll عن الدالة MessageBox<br />
6- استدعاء الدالة MessageBox.<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="color: #ff0000;" class="mycode_color">التفاصيل:</span></span><br />
سنستعمل ال structure التالي لتخزين معلومات الدوال التي نود البحث عنها.<br />
<pre class="block-code"><code class="language-none">struct function_info{
    BYTE function_name_length;    // including the zero byte at the end.
    char* function_name;        // zero terminated string.
    DWORD function_address;        // absolute address.
};
</code></pre>function_name_length و function_name ثابتان في الحقيقة بينما function_address هو المتغير الذي سوف نقوم بتعبئته عند الخطوتين 3 و 5.<br />
<br />
البرنامج يعرف المتغيرات العمومية (Global أهذه الترجمة جيدة؟) التالية:<br />
<pre class="block-code"><code class="language-none">Global Variables:
DLL_base_address                              : 0x40205D
kernel32_base_address                         : 0x402052
kernel32_functions_info_array                 : 0x402000
user32_functions_info_array                   : 00402033
user32_string = &quot;USER32&quot;                      : 0x402056
message = &quot;without imports, funny eh?&quot;        : 0x40106F
&quot;little test&quot;                                 : 0x401053
</code></pre>علي اليمين العناوين المطلقة التي ظهرت عندي وعنوان الأساس كان 0x400000، وأود أن أنوه أن جميع العناويين في هذه المشاركة مطلقة كما أن أسماء المتغيرات والدوال من تسميتي.<br />
لنلق نظرة على kernel32_functions_info_array<br />
<pre class="block-code"><code class="language-none">0E 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00  .GetProcAddress.
00 00 00 0B 4C 6F 61 64 4C 69 62 72 61 72 79 00  ....LoadLibrary.
00 00 00 0B 45 78 69 74 50 72 6F 63 65 73 73 00  ....ExitProcess.
00 00 00                                         ...
  
</code></pre>نرى أن kernel32_functions_info_array عبارة عن ثلاث function_info متعاقبة، وبالمثل user32_functions_info_array<br />
<pre class="block-code"><code class="language-none">0B 4D 65 73 73 61 67 65 42 65 65 70 00 00 00 00  .MessageBeep....  
0A 4D 65 73 73 61 67 65 42 6F 78 00 00 00 00     .MessageBox....
</code></pre>أسماء الدوال التي تظهر في kernel32_functions_info_array و user32_functions_info_array هي أسماء الدوال التي سيبحث البرنامج عن عناوينها بدون استيراد مكتباتها بشكل صريح.<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="color: #ff0000;" class="mycode_color">الأوامر:</span></span><br />
سنفصل الخطوتين 2 و 3، لأن البقية واضحة و الخطوة 5 مطابقة ل 3 (فقط باختلاف قيمة DLL_base_address).<br />
الخطوة 2: عمليا يبدأ البرنامج باستدعاء الدالة Fill_kernel32_address_directly_after_running المعرفة كالتالي<br />
<pre class="block-code"><code class="language-none">// This function must be called right at the beginning of the program excution.
// This function assigns the value of base address to kernel32.dll to the global variable DLL_base_address (0x40205D).
// Function address: 0x0040109A
Fill_kernel32_address_directly_after_running:
ecx = [esp+4]     // some address in kernel32
edx = 0
while(!(dx &amp; F800 == 0 &amp;&amp; ecx == [edx+ecx+0x34])){            // access violation exception. Fix this.
    ecx--
    dx = word[ecx+0x3C]
}
// ecx = the base address of kernel32.
[0x402052] = ecx        // kernel32_base_address = kernel32.dll base address
[0x40205D] = ecx        // DLL_base_address = kernel32.dll base address
ret
</code></pre>تبدأ الدالة ب ecx = [esp+4] وهذا لأن أول ما يوجد في المكدس هو عنوان داخل نطاق kernel32.dll. لكننا نريد عنوان الأساس وليس أي عنوان في kernel32.dll. نعلم أن عنوان الأساس يحقق الخصائص التالية<br />
1- عنوان الأساس يساوي قيمة PE_Header.Optional_Header.ImageBase<br />
والذي يمكننا الوصول إليه كالتالي<br />
<pre class="block-code"><code class="language-none">[base_address + [base_address + 03C] + 0x34]
</code></pre>أي أن الشرط الأول على ecx هو<br />
<pre class="block-code"><code class="language-none">ecx == [ecx + [ecx + 03C] + 0x34]
</code></pre><br />
2- أصغر من قيمة ecx أعلاه (هل هذا صحيح دائما؟).<br />
كما أن البرنامج يضيف الشرط التالي<br />
3- أن يكون dx &amp; F800 == 0 ولعل المقصود أن تكون قيمة edx صغيرة فلا يحصل memory access violation exception.<br />
فما تقوم به الدالة Fill_kernel32_address_directly_after_running  هو انقاص قيمة ecx باستمرار والتحقق من الشرطين 1 و 3. إذا تحققا فهذا هو عنوان الأساس ل kernel32.dll !!<br />
لكن لا بد أنكم رأيتم التعليق access violation exception. Fix this أعلاه، وهذا عندي لوجود مناطق ذاكرة محجوزة تتخلل منطقة ذاكرة kernel32.dll. يبدو أن هذا لم يكن الحال في الأنظمة السابقة.<br />
<br />
الخطوة 3:<br />
بما أننا حصلنا على عنوان kernel32.dll وخزناه في DLL_base_address فإبمكاننا الوصول إلى export directory ببساطة والبحث عن أسماء الدوال التي نريد. لنعرف الدالة التالية<br />
<pre class="block-code"><code class="language-none">// Find_Address_By_Name_From_DLL uses two pieces of information
// 1- [0x40205D]: DLL_base_address = The base address of the DLL.
// 2- esi        : The name of the wanted function.
// Function address: 0x004010D9

Find_Address_By_Name_From_DLL:
edx = [0x40205D]          // edx = base address of the dll
edx = edx + [edx+0x3C]      // edx = NT Header address
edx = [edx + 0x78]          // edx = Export Directory RVA
edx = edx + [0x40205D]      // edx = export directory address.
edi = [edx+20]              // edi = RVA of address of names.
edi = edi + [0x40205D]    // edi = address of addresses of names
edi = [edi]               // edi = RV address of first name
edi = edi + [0x40205D]      // edi = address of first name.
eax = [edx + 18]          // eax = number of functions names.

ebx = 1
while(esi equals edi as Strings){      //  repe cmpsb. edi at this point is a null terminated string.
    ebx++
    while(byte[edi]!=0){
        edi++
    }
    edi++
    eax--
    if(eax == 0){
        push 0
        call [0x40202F]        // ExitProcess address. Address not correct! Crash if not filled!
    }
}
ecx = [edx + 24]            // RV address of name ordinals
ecx = ecx + [0x40205D]        // address of name ordinals
ebx--                       // ebx is the order of the name esi in the name array edi.
eax = word [ecx + ebx*2]    // zero extended. eax = ordinal of the function. False ordinal!
ebx = [edx + 1C]            // RV address of functions in kernel32.dll
ebx = ebx + [0x40205D]      // address of functions in kernel32.dll
eax = [ebx + 4*eax]         // RV address of the wanted function
eax = eax + [0x40205D]      // address of the wanted function

ret
</code></pre>قد تبدو كبيرة لكن نظريا بسيطة وجل ما تقوم به هو التالي:<br />
1- استخراج بعض المعلومات من ال PE Header الخاص بال dll المراد البحث فيه وهو في حالتنا الآن kernel32.dll.<br />
2- في ال while loop يقوم بمقارنة اسم الدالة التي نريد أن نبحث عنها (esi) مع قائمة الأسماء المسخرجة في 1 والتي خزنت في edi.<br />
3- بعد إيجاد ترتيب اسم الدالة في قائمة الأسماء (ebx) نستعمله كأنه ال ordinal المحدد للدالة في ال PE Header الخاص ب kernerl32.dll وباستعماله نستطيع إيجاد عنوان الدالة.<br />
هذه الخطوات تطبيق عملي لل PE Header Structure.<br />
<br />
هل انتبهت للتعليق False ordinal؟ في الحقيقة حتى هنا توجد مشكلة وهي أن المبرمج افترض أن ترتيب اسم الدالة ebx في مصوفة الأسماء edi سيكون مطابقا ل ordinal الدالة! للأسف هذا غير صحيح عندي. كان من المفترض أن يستخدم address of addresses of names وليس address of first name (انظر التعليقات على الأوامر) لكنه افترض أن ترتيب الأسماء هنا وهناك سيكون متطابقا!<br />
<br />
--------------------<br />
<span style="font-size: medium;" class="mycode_size"><span style="color: #ff0000;" class="mycode_color">في المرفقات: </span></span>تجدون البرنامج وملف txt فيه أوامر البرنامج معكوسة كلها تقريبا لمن أراد التعقب أثناء التنقيح أو محاولة إعادة كتابة البرنامج لجعله يعمل على الأنظمة الجديدة.<br />
<br />
<span style="color: #ff0000;" class="mycode_color"><span style="font-size: medium;" class="mycode_size">المراجع:</span></span> البرنامج الأصلي يوجد في مجلد yoda/NoImports.exe بعد التحميل من <a href="https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/corkami/BinaryCorpus_v2.zip" target="_blank" rel="noopener" class="mycode_url">هنا</a>.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.at4re.net/f/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=2185" target="_blank" title="">NoImports.zip</a> (الحجم : 2.32 KB / التحميلات : 34)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[دراسة حالة (DiskGenius)]]></title>
			<link>https://www.at4re.net/f/thread-2878.html</link>
			<pubDate>Tue, 28 Sep 2021 15:40:13 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=2562">overlap</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-2878.html</guid>
			<description><![CDATA[كمحاولة لترقية التبادل العلمي، اقدم اكم فكرة دراسة حالة...<br />
دراسة حالة: هي محاولة القاء نظرة احترافية و تحليل حالة موجودة و معتمدة من طرف برنامج ما...<br />
<br />
الحالة:<br />
<span style="font-weight: bold;" class="mycode_b">DiskGenius </span>برنامج رائع و مبرمج باحترافية، محمي بحماية تجارية شرسة...<br />
و بما ان هذفي (الشخصي) ليس كسر البرنامج او تجاوز معلومات التسجيل بل القاء الضوء على ما اسميه بـــ <span style="font-weight: bold;" class="mycode_b">countermeasure </span>استعملها المبرمج كمضاد لــ <span style="font-weight: bold;" class="mycode_b">Dll Proxying</span>.<br />
<br />
البرنامج لا يقبل وجود و تحميل مكتبة (<span style="font-weight: bold;" class="mycode_b">version.dll </span>على سبيل <span style="color: #ff0000;" class="mycode_color">المثال</span>)<br />
<br />
الصورة المتحركة تبين تجربة نسخ مكتبة <span style="font-weight: bold;" class="mycode_b">موثوقة </span>الى مجلد البرنامج و محاولة تشغيله بعد ذلك...<br />
 <br />
<div style="text-align: center;" class="mycode_align"><img src="https://i.imgur.com/DIV2l4b.gif" loading="lazy"  alt="[صورة مرفقة: DIV2l4b.gif]" class="mycode_img" /></div>
<div style="text-align: left;" class="mycode_align"> </div>
<br />
<br />
<span style="color: #ff0000;" class="mycode_color">السؤال:</span><br />
<span style="font-weight: bold;" class="mycode_b">هل يمكن زرع مكتبة Dll Proxying و جعل البرنامج يحملها ؟</span><br />
 <br />
<pre class="block-code"><code class="language-none">https://www.diskgenius.com
</code></pre>]]></description>
			<content:encoded><![CDATA[كمحاولة لترقية التبادل العلمي، اقدم اكم فكرة دراسة حالة...<br />
دراسة حالة: هي محاولة القاء نظرة احترافية و تحليل حالة موجودة و معتمدة من طرف برنامج ما...<br />
<br />
الحالة:<br />
<span style="font-weight: bold;" class="mycode_b">DiskGenius </span>برنامج رائع و مبرمج باحترافية، محمي بحماية تجارية شرسة...<br />
و بما ان هذفي (الشخصي) ليس كسر البرنامج او تجاوز معلومات التسجيل بل القاء الضوء على ما اسميه بـــ <span style="font-weight: bold;" class="mycode_b">countermeasure </span>استعملها المبرمج كمضاد لــ <span style="font-weight: bold;" class="mycode_b">Dll Proxying</span>.<br />
<br />
البرنامج لا يقبل وجود و تحميل مكتبة (<span style="font-weight: bold;" class="mycode_b">version.dll </span>على سبيل <span style="color: #ff0000;" class="mycode_color">المثال</span>)<br />
<br />
الصورة المتحركة تبين تجربة نسخ مكتبة <span style="font-weight: bold;" class="mycode_b">موثوقة </span>الى مجلد البرنامج و محاولة تشغيله بعد ذلك...<br />
 <br />
<div style="text-align: center;" class="mycode_align"><img src="https://i.imgur.com/DIV2l4b.gif" loading="lazy"  alt="[صورة مرفقة: DIV2l4b.gif]" class="mycode_img" /></div>
<div style="text-align: left;" class="mycode_align"> </div>
<br />
<br />
<span style="color: #ff0000;" class="mycode_color">السؤال:</span><br />
<span style="font-weight: bold;" class="mycode_b">هل يمكن زرع مكتبة Dll Proxying و جعل البرنامج يحملها ؟</span><br />
 <br />
<pre class="block-code"><code class="language-none">https://www.diskgenius.com
</code></pre>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[rockey4nd]]></title>
			<link>https://www.at4re.net/f/thread-2797.html</link>
			<pubDate>Tue, 03 Aug 2021 10:06:14 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=2599">johnvb</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-2797.html</guid>
			<description><![CDATA[السلام عليكم كيف الحال اخواني<br />
ممكن شرح طريقة لمعرفة بروتوكولات الحماية لدونغل rockey4nd  وطريقة محاكاة هذا الدنغل وشكرا]]></description>
			<content:encoded><![CDATA[السلام عليكم كيف الحال اخواني<br />
ممكن شرح طريقة لمعرفة بروتوكولات الحماية لدونغل rockey4nd  وطريقة محاكاة هذا الدنغل وشكرا]]></content:encoded>
		</item>
	</channel>
</rss>