Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <defs.h>
- //-------------------------------------------------------------------------
- // Data declarations
- extern int dword_10007100[]; // idb
- extern int dword_10007148[]; // idb
- extern int dword_10008148[64]; // weak
- extern int dword_10008ECC[2]; // weak
- extern int dword_10008ED4; // weak
- extern char LibFileName[]; // idb
- extern char Str2[]; // idb
- extern int dword_1000A050; // weak
- extern int len; // idb
- extern int dword_1000A2EC; // weak
- extern int dword_1000A2F0; // weak
- extern char byte_1000A504; // weak
- extern char byte_1000A520[]; // idb
- extern int dword_1000A620[632]; // weak
- extern char byte_1004A720[]; // idb
- extern char byte_1008A720; // weak
- extern char buf[]; // idb
- extern int dword_1009A741; // weak
- extern char byte_1009A745; // weak
- extern __int16 word_1009A746; // weak
- extern int dword_1009A748[16901]; // weak
- extern int (__stdcall *dword_100AB2D8)(_DWORD, _DWORD, _DWORD); // idb
- //-------------------------------------------------------------------------
- // Function declarations
- signed int __stdcall sub_10001000(int a1, int a2, unsigned int a3, int a4, signed int a5);
- int __stdcall sub_100012F0(int a1, int *a2, int *a3);
- int __stdcall sub_100013A0(int a1, unsigned int a2);
- int __stdcall sub_10001440(int a1, int *a2, int *a3);
- int __stdcall sub_100014F0(int a1, int a2, signed int a3);
- void __cdecl dummyfunc();
- BOOL __stdcall DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved); // idb
- void *__cdecl sub_10001710();
- int __stdcall sub_10001760(unsigned __int16 a1);
- bool __stdcall sub_100018B0(char a1);
- bool __cdecl sub_10001930();
- void *__stdcall sub_10001950(HMODULE hModule, LPCSTR Str1); // idb
- int __stdcall sub_100019A0(SOCKET s, struct sockaddr *name, int namelen); // idb
- int __stdcall sub_100019D0(SOCKET s, int a2, int a3, int a4); // idb
- signed int __stdcall sub_10001E50(LPVOID lpAddress, int a2, DWORD dwSize); // idb
- // int __stdcall connect(SOCKET s, const struct sockaddr *name, int namelen); idb
- // int __stdcall send(SOCKET s, const char *buf, int len, int flags); idb
- // void *__cdecl memcpy(void *Dst, const void *Src, size_t Size); idb
- int __cdecl sub_1000225D(int a1);
- // int __cdecl rand(); idb
- // _DWORD __stdcall _CRT_INIT(_DWORD, _DWORD, _DWORD); weak
- // BOOL __stdcall DllEntryPoint(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved); idb
- void __cdecl sub_10002D32();
- void __cdecl sub_10002D76(); // idb
- signed int __cdecl sub_10004ED1();
- // int __cdecl _stricmp(const char *Str1, const char *Str2); idb
- // FARPROC __stdcall GetProcAddress(HMODULE hModule, LPCSTR lpProcName); idb
- // HMODULE __stdcall LoadLibraryA(LPCSTR lpLibFileName); idb
- // void __stdcall Sleep(DWORD dwMilliseconds); idb
- // DWORD __stdcall GetTickCount(); idb
- // BOOL __stdcall VirtualProtect(LPVOID lpAddress, DWORD dwSize, DWORD flNewProtect, PDWORD lpflOldProtect); idb
- //----- (10001000) --------------------------------------------------------
- signed int __stdcall sub_10001000(int a1, int a2, unsigned int a3, int a4, signed int a5)
- {
- signed int result; // eax@2
- char v6; // [sp+14h] [bp-1048h]@7
- int v7; // [sp+8h] [bp-1054h]@7
- unsigned int v8; // [sp+Ch] [bp-1050h]@7
- int Dst; // [sp+0h] [bp-105Ch]@9
- int Src; // [sp+4h] [bp-1058h]@9
- size_t Size; // [sp+10h] [bp-104Ch]@9
- if ( a1 )
- {
- if ( a2 )
- {
- if ( a4 )
- {
- sub_100014F0((int)&v6, a4, a5);
- v7 = 0;
- v8 = 0;
- while ( v8 < a3 )
- {
- Dst = 0;
- Src = 0;
- Size = 4;
- if ( a3 - v8 < 4 )
- Size = a3 - v8;
- memcpy(&Dst, (const void *)(v8 + a1), Size);
- v8 += 4;
- Size = 4;
- if ( a3 - v8 < 4 )
- Size = a3 - v8;
- memcpy(&Src, (const void *)(v8 + a1), Size);
- v8 += 4;
- sub_100012F0((int)&v6, &Dst, &Src);
- memcpy((void *)(v7 + a2), &Dst, 4u);
- v7 += 4;
- memcpy((void *)(v7 + a2), &Src, 4u);
- v7 += 4;
- }
- result = 0;
- }
- else
- {
- result = -1;
- }
- }
- else
- {
- result = -1;
- }
- }
- else
- {
- result = -1;
- }
- return result;
- }
- //----- (100012F0) --------------------------------------------------------
- int __stdcall sub_100012F0(int a1, int *a2, int *a3)
- {
- int result; // eax@4
- int v4; // [sp+0h] [bp-10h]@1
- int v5; // [sp+4h] [bp-Ch]@1
- __int16 v6; // [sp+Ch] [bp-4h]@1
- int v7; // [sp+8h] [bp-8h]@3
- v4 = *a2;
- v5 = *a3;
- v6 = 0;
- while ( v6 < 16 )
- {
- v4 ^= *(_DWORD *)(a1 + 4 * v6);
- v7 = v4;
- v4 = v5 ^ sub_100013A0(a1, v4);
- v5 = v7;
- ++v6;
- }
- v7 = v4;
- v4 = v5;
- v5 = v7;
- v5 = *(_DWORD *)(a1 + 64) ^ v7;
- v4 ^= *(_DWORD *)(a1 + 68);
- *a2 = v4;
- result = v5;
- *a3 = v5;
- return result;
- }
- //----- (100013A0) --------------------------------------------------------
- int __stdcall sub_100013A0(int a1, unsigned int a2)
- {
- unsigned __int16 v3; // [sp+4h] [bp-10h]@1
- unsigned __int16 v4; // [sp+0h] [bp-14h]@1
- unsigned __int16 v5; // [sp+8h] [bp-Ch]@1
- __int16 v6; // [sp+Ch] [bp-8h]@1
- int v7; // [sp+10h] [bp-4h]@1
- v3 = (unsigned __int8)a2;
- a2 >>= 8;
- v4 = (unsigned __int8)a2;
- a2 >>= 8;
- v5 = (unsigned __int8)a2;
- a2 >>= 8;
- v6 = (unsigned __int8)a2;
- v7 = *(_DWORD *)(a1 + 4 * v5 + 1096) + *(_DWORD *)(a1 + 4 * (unsigned __int8)a2 + 72);
- v7 ^= *(_DWORD *)(a1 + 4 * v4 + 2120);
- v7 += *(_DWORD *)(a1 + 4 * v3 + 3144);
- return v7;
- }
- //----- (10001440) --------------------------------------------------------
- int __stdcall sub_10001440(int a1, int *a2, int *a3)
- {
- int result; // eax@4
- int v4; // [sp+0h] [bp-10h]@1
- int v5; // [sp+4h] [bp-Ch]@1
- __int16 v6; // [sp+Ch] [bp-4h]@1
- int v7; // [sp+8h] [bp-8h]@3
- v4 = *a2;
- v5 = *a3;
- v6 = 17;
- while ( v6 > 1 )
- {
- v4 ^= *(_DWORD *)(a1 + 4 * v6);
- v7 = v4;
- v4 = v5 ^ sub_100013A0(a1, v4);
- v5 = v7;
- --v6;
- }
- v7 = v4;
- v4 = v5;
- v5 = v7;
- v5 = *(_DWORD *)(a1 + 4) ^ v7;
- v4 ^= *(_DWORD *)a1;
- *a2 = v4;
- result = v5;
- *a3 = v5;
- return result;
- }
- //----- (100014F0) --------------------------------------------------------
- int __stdcall sub_100014F0(int a1, int a2, signed int a3)
- {
- int result; // eax@6
- signed int v4; // [sp+18h] [bp-4h]@1
- signed int v5; // [sp+4h] [bp-18h]@3
- int v6; // [sp+8h] [bp-14h]@9
- signed int v7; // [sp+Ch] [bp-10h]@9
- int v8; // [sp+10h] [bp-Ch]@15
- int v9; // [sp+14h] [bp-8h]@15
- v4 = 0;
- while ( v4 < 4 )
- {
- v5 = 0;
- while ( v5 < 256 )
- {
- *(_DWORD *)(a1 + (v4 << 10) + 72 + 4 * v5) = *(int *)((char *)&dword_10007148[256 * v4] + 4 * v5);
- ++v5;
- }
- result = v4++ + 1;
- }
- v5 = 0;
- v4 = 0;
- while ( v4 < 18 )
- {
- v6 = 0;
- v7 = 0;
- while ( v7 < 4 )
- {
- v6 = *(_BYTE *)(v5++ + a2) | (v6 << 8);
- if ( v5 >= a3 )
- v5 = 0;
- ++v7;
- }
- *(_DWORD *)(a1 + 4 * v4) = v6 ^ dword_10007100[v4];
- result = v4++ + 1;
- }
- v8 = 0;
- v9 = 0;
- v4 = 0;
- while ( v4 < 18 )
- {
- sub_100012F0(a1, &v8, &v9);
- *(_DWORD *)(a1 + 4 * v4) = v8;
- result = v4;
- *(_DWORD *)(a1 + 4 * v4 + 4) = v9;
- v4 += 2;
- }
- v4 = 0;
- while ( v4 < 4 )
- {
- v5 = 0;
- while ( v5 < 256 )
- {
- sub_100012F0(a1, &v8, &v9);
- *(_DWORD *)(a1 + (v4 << 10) + 72 + 4 * v5) = v8;
- *(_DWORD *)(a1 + (v4 << 10) + 72 + 4 * v5 + 4) = v9;
- v5 += 2;
- }
- result = v4++ + 1;
- }
- return result;
- }
- //----- (100016B0) --------------------------------------------------------
- void __cdecl dummyfunc()
- {
- ;
- }
- //----- (100016C0) --------------------------------------------------------
- BOOL __stdcall DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
- {
- DWORD v4; // [sp+0h] [bp-Ch]@1
- v4 = fdwReason;
- if ( fdwReason == 1 )
- {
- sub_10001E50((LPVOID)0x6B9274, (int)sub_10001950, 4u);
- sub_10001E50((LPVOID)0x6B9444, (int)sub_100019A0, 4u);
- }
- return 1;
- }
- //----- (10001710) --------------------------------------------------------
- void *__cdecl sub_10001710()
- {
- dword_1000A2EC = 0;
- byte_1008A720 = 0;
- byte_1000A504 = 0;
- memcpy(byte_1000A520, dword_10008148, 0x100u);
- return memcpy(dword_1000A620, dword_10008148, 0x100u);
- }
- //----- (10001760) --------------------------------------------------------
- int __stdcall sub_10001760(unsigned __int16 a1)
- {
- int result; // eax@1
- int v2; // [sp+4h] [bp-Ch]@1
- bool v3; // [sp+8h] [bp-8h]@1
- signed int v4; // [sp+Ch] [bp-4h]@1
- int v5; // [sp+0h] [bp-10h]@3
- result = a1 % 4;
- v2 = a1 % 4;
- v3 = (unsigned __int8)byte_1000A504 == 0;
- v4 = 0;
- while ( v4 < 256 )
- {
- result = v2;
- v5 = v2;
- if ( (unsigned int)v2 <= 3 )
- {
- switch ( v5 )
- {
- case 0:
- *(&byte_1000A520[256 * v3] + v4) += a1;
- result = v2++ + 1;
- break;
- case 1:
- result = *(&byte_1000A520[256 * v3] + v4) - a1;
- *(&byte_1000A520[256 * v3] + v4) -= a1;
- ++v2;
- break;
- case 2:
- result = v4;
- *(&byte_1000A520[256 * v3] + v4) += a1;
- ++v2;
- break;
- case 3:
- result = v3 << 8;
- *(&byte_1000A520[256 * v3] + v4) -= a1;
- v2 = 0;
- break;
- }
- }
- ++v4;
- }
- return result;
- }
- //----- (100018B0) --------------------------------------------------------
- bool __stdcall sub_100018B0(char a1)
- {
- bool result; // eax@1
- bool v2; // [sp+0h] [bp-4h]@1
- v2 = (unsigned __int8)byte_1000A504 == 0;
- *(&byte_1000A520[256 * ((unsigned __int8)byte_1000A504 == 0)] + (unsigned __int8)byte_1008A720) = a1 ^ (unsigned __int8)*(&byte_1000A520[256 * ((unsigned __int8)byte_1000A504 == 0)] + (unsigned __int8)byte_1008A720);
- ++byte_1008A720;
- result = (unsigned __int8)byte_1008A720;
- if ( (unsigned __int8)byte_1008A720 == 255 )
- {
- byte_1008A720 = 0;
- result = sub_10001930();
- }
- return result;
- }
- //----- (10001930) --------------------------------------------------------
- bool __cdecl sub_10001930()
- {
- bool result; // eax@1
- result = (unsigned __int8)byte_1000A504 == 0;
- byte_1000A504 = (unsigned __int8)byte_1000A504 == 0;
- return result;
- }
- //----- (10001950) --------------------------------------------------------
- void *__stdcall sub_10001950(HMODULE hModule, LPCSTR Str1)
- {
- void *result; // eax@3
- HMODULE v3; // eax@1
- HMODULE v4; // [sp+0h] [bp-4h]@1
- v3 = LoadLibraryA("WS2_32.DLL");
- v4 = v3;
- if ( hModule != v3 || _stricmp(Str1, "send") )
- result = GetProcAddress(hModule, Str1);
- else
- result = sub_100019D0;
- return result;
- }
- //----- (100019A0) --------------------------------------------------------
- int __stdcall sub_100019A0(SOCKET s, struct sockaddr *name, int namelen)
- {
- sub_10001710();
- return connect(s, name, namelen);
- }
- //----- (100019D0) --------------------------------------------------------
- int __stdcall sub_100019D0(SOCKET s, int a2, int a3, int a4)
- {
- int v5; // eax@7
- int v6; // eax@12
- int v7; // eax@2
- DWORD v8; // esi@2
- int v9; // eax@2
- signed int v10; // eax@2
- int v11; // eax@2
- char v12; // bl@4
- int v13; // eax@7
- int v14; // eax@12
- unsigned __int8 v15; // al@14
- int v16; // eax@23
- int v17; // eax@28
- int v18; // [sp+24h] [bp-10h]@2
- __int16 v19; // [sp+28h] [bp-Ch]@2
- int v20; // [sp+2Ah] [bp-Ah]@2
- __int16 v21; // [sp+2Eh] [bp-6h]@2
- int Size; // [sp+20h] [bp-14h]@2
- int v23; // [sp+14h] [bp-20h]@4
- int v24; // [sp+30h] [bp-4h]@4
- char *v25; // [sp+18h] [bp-1Ch]@7
- int v26; // [sp+10h] [bp-24h]@7
- int v27; // [sp+Ch] [bp-28h]@10
- int v28; // [sp+8h] [bp-2Ch]@14
- int v29; // [sp+1Ch] [bp-18h]@23
- if ( !dword_1000A2EC )
- {
- v7 = GetTickCount();
- sub_1000225D(v7);
- v18 = rand() + 78319;
- sub_10001930();
- sub_10001760(v18);
- sub_10001930();
- buf[0] = -119;
- dword_1009A741 = v18;
- Sleep(0xAu);
- v8 = GetTickCount();
- v9 = rand();
- sub_1000225D(v9 ^ v8);
- v10 = rand() + 42564;
- v18 = v10;
- v19 = (unsigned __int16)((signed int)(unsigned __int8)rand() >> 5) | (unsigned __int16)(8
- * (unsigned __int16)(v10 >> 3));
- sub_1000225D(v18);
- v11 = rand();
- v18 = v11;
- v20 = v11;
- sub_1000225D(8 * *(__int16 *)((char *)&v19 + 1));
- v21 = rand();
- sub_10001000((int)&v19, (int)&byte_1009A745, 8u, (int)byte_1000A520, 256);
- sub_10001930();
- Size = 0;
- while ( Size < 56 )
- {
- v23 = Size % 8;
- v12 = (unsigned __int8)((signed int)*((_BYTE *)&v19 + Size / 8 + 1) >> (8 - Size % 8)) | (unsigned __int8)(*((_BYTE *)&v19 + Size / 8) << Size % 8);
- v24 = (unsigned __int8)v12;
- sub_100018B0(v12);
- ++Size;
- }
- sub_10001930();
- if ( send(s, buf, 13, 0) != 13 )
- return -1;
- }
- v25 = buf;
- buf[0] = (unsigned __int8)(8 * (dword_1000A2EC % 8u & 7)) | (unsigned __int8)(buf[0] & 0xC7);
- v13 = rand();
- v26 = v13;
- v5 = v13 & 0x80000003;
- if ( v5 < 0 )
- v5 = ((v5 - 1) | 0xFFFFFFFC) + 1;
- *v25 = v5 & 3 | (unsigned __int8)(*v25 & 0xFC);
- if ( a3 % 4 )
- v27 = 4 - a3 % 4;
- else
- v27 = 0;
- *v25 = (unsigned __int8)((v27 & 3) << 6) | *v25 & 0x3F;
- v14 = GetTickCount();
- sub_1000225D(v14);
- v6 = rand() & 0x800000FF;
- if ( v6 < 0 )
- v6 = ((v6 - 1) | 0xFFFFFF00) + 1;
- LOBYTE(dword_1009A741) = (unsigned __int8)(*(_BYTE *)a2 ^ 0x36) ^ (_BYTE)v6;
- v15 = *v25 & 3;
- v28 = v15;
- if ( v15 <= 3u )
- {
- switch ( v28 )
- {
- case 0:
- sub_100018B0(dword_1009A741);
- break;
- case 1:
- sub_100018B0(dword_1009A741);
- break;
- case 2:
- sub_100018B0((_BYTE)dword_1009A741 ^ 0x2D);
- break;
- case 3:
- sub_100018B0((unsigned __int8)((signed int)(unsigned __int8)buf[0] >> 4) | (unsigned __int8)(16 * (_BYTE)dword_1009A741));
- break;
- }
- }
- *v25 = (unsigned __int8)(4 * (byte_1000A504 & 1)) | (unsigned __int8)(*v25 & 0xFB);
- *(int *)((char *)&dword_1009A741 + 1) = dword_1000A2EC;
- word_1009A746 = (_WORD)a3 + (((unsigned __int8)*v25 >> 6) & 3) + 12;
- sub_10001000(
- a2,
- (int)dword_1009A748,
- a3 + (((unsigned __int8)*v25 >> 6) & 3) + 4,
- (int)&byte_1000A520[256 * (unsigned __int8)byte_1000A504],
- 256);
- if ( 262144 - len < (unsigned int)(unsigned __int16)word_1009A746 )
- return -1;
- Size = (unsigned __int16)word_1009A746;
- sub_10001000((int)buf, (int)buf, 8u, (int)dword_10008148, 256);
- if ( len )
- {
- memcpy(&byte_1004A720[len], buf, Size);
- len += Size;
- v17 = send(s, byte_1004A720, len, 0);
- v29 = v17;
- if ( v17 < 0 )
- return v29;
- len -= Size;
- }
- else
- {
- v16 = send(s, buf, Size, 0);
- v29 = v16;
- if ( v16 != Size )
- {
- if ( v29 < 0 )
- return v29;
- memcpy(&byte_1004A720[len], &buf[v29], Size - v29);
- len += Size - v29;
- }
- }
- ++dword_1000A2EC;
- return a3;
- }
- //----- (10001E50) --------------------------------------------------------
- signed int __stdcall sub_10001E50(LPVOID lpAddress, int a2, DWORD dwSize)
- {
- signed int result; // eax@4
- DWORD flOldProtect; // [sp+0h] [bp-8h]@5
- signed int v5; // [sp+4h] [bp-4h]@5
- if ( lpAddress && a2 && (signed int)dwSize >= 4 )
- {
- VirtualProtect(lpAddress, dwSize, 0x40u, &flOldProtect);
- *(_DWORD *)lpAddress = a2;
- v5 = 4;
- while ( v5 < (signed int)dwSize )
- *((_BYTE *)lpAddress + v5++) = -112;
- result = 0;
- }
- else
- {
- result = -1;
- }
- return result;
- }
- //----- (1000225D) --------------------------------------------------------
- int __cdecl sub_1000225D(int a1)
- {
- int result; // eax@1
- result = a1;
- dword_1000A050 = a1;
- return result;
- }
- //----- (10002D32) --------------------------------------------------------
- void __cdecl sub_10002D32()
- {
- int *v0; // [sp+Ch] [bp-1Ch]@1
- CPPEH_RECORD ms_exc; // [sp+10h] [bp-18h]@3
- v0 = dword_10008ECC;
- while ( v0 < dword_10008ECC )
- {
- ms_exc.disabled = 0;
- if ( *v0 )
- ((int (*)(void))*v0)();
- ++v0;
- }
- }
- //----- (10002D76) --------------------------------------------------------
- void __cdecl sub_10002D76()
- {
- int *v0; // [sp+Ch] [bp-1Ch]@1
- CPPEH_RECORD ms_exc; // [sp+10h] [bp-18h]@3
- v0 = &dword_10008ED4;
- while ( v0 < &dword_10008ED4 )
- {
- ms_exc.disabled = 0;
- if ( *v0 )
- ((int (*)(void))*v0)();
- ++v0;
- }
- }
- //----- (10004ED1) --------------------------------------------------------
- signed int __cdecl sub_10004ED1()
- {
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment