Pertanyaan ws_32.dll menghubungkan detouring hook tidak terhubung gagal


Saya mencoba untuk memutar fungsi koneksi dari ws_32.dll. Pekerjaan detouring, tetapi ada yang salah ketika memanggil fungsi asli. Saya menggunakan pustaka yang relatif tidak dikenal untuk menghubungkan fungsi ini. Ini disebut WhiteMagic. Ia bekerja dengan fungsi lain dengan baik, tidak hanya yang satu ini.

Saya mencobanya di Internet Explorer dan saya tidak dapat terhubung ke mana pun. Jika saya memblokir dengan Thread.Sleep 100 ms, ia bekerja.

public static UIntPtr ConnectSocketDetoured(UIntPtr s, ref NativeSocks.sockaddr name, int namelen)
{
    Magic.Instance.Detours[DetouredConnectId].Remove();
    var retVal = ((NativeSocks.Dconnect)Magic.Instance.Detours[DetouredConnectId].TargetDelegate).Invoke(s, ref name, namelen);
    //var retVal = NativeSocks.connect(s, ref name, namelen); PINVOKE IMPORT DOESNT WORK TOO. 
    //IF I BLOCK HERE 100 MILLISECONDS THIS WORK.
    Magic.Instance.Detours[DetouredConnectId].Apply();

    return retVal;
}

[UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Ansi, SetLastError = false)]
public delegate UIntPtr Dconnect(UIntPtr s, ref sockaddr_in name, int namelen);

sockaddr_in Struct

    [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public struct sockaddr_in
    {
        public short sin_family;
        public ushort sin_port;
        public in_addr sin_addr;
        [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 8)]
        public string sin_zero;
    }

    [StructLayoutAttribute(LayoutKind.Sequential)]
    public struct in_addr
    {
        public Anonymous1 S_un;
    }

    [StructLayoutAttribute(LayoutKind.Explicit)]
    public struct Anonymous1
    {
        [FieldOffsetAttribute(0)]
        public Anonymous2 S_un_b;

        [FieldOffsetAttribute(0)]
        public Anonymous3 S_un_w;

        [FieldOffsetAttribute(0)]
        public uint S_addr;
    }

    [StructLayoutAttribute(LayoutKind.Sequential)]
    public struct Anonymous2
    {
        public byte s_b1;
        public byte s_b2;
        public byte s_b3;
        public byte s_b4;
    }

    [StructLayoutAttribute(LayoutKind.Sequential)]
    public struct Anonymous3
    {
        public ushort s_w1;
        public ushort s_w2;
    }

Saya pikir dengan memblokir di dalam fungsi detouring saat hook dihapus akan menyebabkan kesalahan WSAEWOULDBLOCK. Untuk alasan itu, internet explorer memanggil fungsi koneksi lagi saat hook dihapus dan memanggil fungsi kerja asli.

Deskripsi Kesalahan WSAEWOULDBLOCK:

Sumber daya sementara tidak tersedia. Kesalahan ini dikembalikan dari operasi pada soket non-blokir yang tidak dapat diselesaikan dengan segera, misalnya, rekam bila tidak ada data yang diantrekan untuk dibaca dari soket. Ini adalah kesalahan nonfatal, dan operasi harus dicoba kembali nanti. Adalah normal untuk WSAEWOULDBLOCK dilaporkan sebagai hasil dari panggilan terhubung pada soket SOCK_STREAM yang tidak memblokir, sejak beberapa waktu harus berlalu untuk koneksi yang akan didirikan.


32
2017-07-19 06:43


asal


Jawaban:


Dengan asumsi Anda menggunakan pustaka WhiteMagic ini: http://www.gamedeception.net/threads/17994-C-WhiteMagic-Injected-NET-Helper-Library

Ada metode "CallOriginal" untuk setiap Detour. Coba telepon itu daripada menghapus / menerapkan kembali jalan memutar Anda.


1
2017-12-29 21:34



Sekarang anggaplah Anda menggunakan beberapa WhiteMagic perpustakaan. Anda harus mencoba menggunakan metode ini CallOriginal untuk setiap jalan memutar. Anda harus memanggil itu alih-alih menghapus jalan memutar Anda.

Semoga ini membantu.


-3
2018-03-19 10:52