alexa-tracking

[Help C++] Crash di Windows 8.1

Main Content

1024
1024
KASKUS
51
244
https://www.kaskus.co.id/thread/53fd58a8620881d0498b4572/help-c-crash-di-windows-81
Inspiratif 
[Help C++] Crash di Windows 8.1
Hallo agan-agan sekalian, saat ini saya sedang membuat sebuah aplikasi untuk mencegah sebuah packet editor melihat packet terkirim dan diterima dari sebuah aplikasi menggunakan C++. saat di compile dan di jalankan tidak ada masalah di windows XP ataupun Windows 7 dengan update terbaru atau yg lama.

Namun saat dijalankan di Windows 8.1 64/32 bit program saya crash saat dijalankan.

Berikut Source Codenya:
Code:

#include "stdafx.h"

#pragma comment(lib, "ws2_32.lib")

#define AWPE_TIME_INTERVAL 500

using namespace std;

DWORD WINAPI AWPE(void* pVoid)
{
HANDLE hProcessW = GetCurrentProcess();
BYTE szBuffer[8];
BYTE bOriginal[] = "\x55" // PUSH EBP
"\x8B\xEC\x83" // MOV EBP, ESP
"\xEC\x10"; // SUB ESP, 10

DWORD dwRecvCall = (DWORD)GetProcAddress(GetModuleHandle(_T("ws2_32.dll")), _T("recv"));
DWORD dwSendCall = (DWORD)GetProcAddress(GetModuleHandle(_T("ws2_32.dll")), _T("send"));

if (dwRecvCall != NULL){
if (dwSendCall != NULL){
while (true)
{
ReadProcessMemory(hProcessW, (LPVOID)dwRecvCall, szBuffer, 6, 0);
for (int i = 0; i < 6; i++)
{
if (bOriginal[i] != szBuffer[i])
{
WriteProcessMemory(hProcessW, (LPVOID)dwRecvCall, bOriginal, 6, 0);
break;
}
}

ReadProcessMemory(hProcessW, (LPVOID)dwSendCall, szBuffer, 6, 0);
for (int i = 0; i < 6; i++)
{
if (bOriginal[i] != szBuffer[i])
{
WriteProcessMemory(hProcessW, (LPVOID)dwSendCall, bOriginal, 6, 0);
break;
}
}

Sleep(AWPE_TIME_INTERVAL);
}
}
else
{
WriteLogGG("Tidak ditemukan Packet Terkirim", dwSendCall);
AlertGuard();
}
}
else
{
WriteLogGG("Tidak ditemukan Packet Diterima", dwRecvCall);
AlertGuard();
}

return 0;
};



apakah ada code saya disitu yg tidak compatibel dengan windows 8?. atau perlu tambahan kah agar dapat berjalan di windows 8.1?.

Setelah process debuging. masalahnya terdapat saat process (while) untuk WriteProcessMemory. dan itu hanya crash di windows 8.1

Mohon bantuan dan sarannya terimakasih
Quote:

mungkin memory protection dari win8 nya emoticon-Bingung (S), coba posting screenshot crash message nya disini.

atau mungkin crash karena code injection di "recv" and "send" nya bikin alur eksekusinya jadi ngaco.

Coba yg ini:

Code:
 DWORD dwRecvCall = (DWORD)GetProcAddress(GetModuleHandle(_T("ws2_32.dll")), _T("recv"));
DWORD dwSendCall = (DWORD)GetProcAddress(GetModuleHandle(_T("ws2_32.dll")), _T("send"));


diganti jadi:

Code:
 unsigned long dwRecvCall = ((unsigned long)GetProcAddress(GetModuleHandle(_T("WS2_32.dll")), "recv")) + 2;
unsigned long dwSendCall = ((unsigned long)GetProcAddress(GetModuleHandle(_T("WS2_32.dll")), "send")) + 2;


Quote:


saya menggunakan VC++ 2013.
di header terbarunya

DWORD sudah di definisikan sebagai unsigned long mas.
nih :
WinDef.h (VC++2013)
Code:
typedef unsigned long       DWORD;
typedef int BOOL;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef float FLOAT;
typedef FLOAT *PFLOAT;
typedef BOOL near *PBOOL;
typedef BOOL far *LPBOOL;
typedef BYTE near *PBYTE;
typedef BYTE far *LPBYTE;
typedef int near *PINT;
typedef int far *LPINT;
typedef WORD near *PWORD;
typedef WORD far *LPWORD;
typedef long far *LPLONG;
typedef DWORD near *PDWORD;
typedef DWORD far *LPDWORD;
typedef void far *LPVOID;
typedef CONST void far *LPCVOID;
KASKUS Ads
Quote:

iya ane tau gan, sama aja kok. Itu cuma alias biar ga cape ngetiknya emoticon-Big Grin

Gimana hasilnya? udah bisa jalan di win8?
Quote:


masih crash gan.
cuma pas saya coba uncomment ( // )
di bagian ReadMemoryProccess dan WriteMemoryProccess.
Programnya jalan.

Tapi packet Send sama Packet keterimanya jadi kebaca sama Third Party Program.

Inti tujuan dari code diatas adalah untuk menyembunyikan packet send dan recv dari sebuah aplikasi semacam WPE atau Packet Editor. agar packetnya tidak di modifikasi.
Quote:

hmm, berarti bukan itu permasalahannya. Sayangnya ane ga punya win8 gan. Ane coba di win7 sih jalan gan. Pas crash kek gimana error message nya?

Iya ane tau itu buat Anti-WPE. Ini code yg ane coba. Coba dijalanin ane punya, apa sama hasilnya..
Quote:


sama gan kayak gitu kok.
cm saya gak pake LoadLibrary. karena code diatas saya compile di DLL dan DLL nya saya attach ke program yg mau di protect packetnya (di udah load WS2_32.dll sendiri) jadi saya tinggal manggil GetModuleHandle aja.

Saya jg udah coba di XP dan 7 work jalan gak kedetect packetnya. cm pas di Win 8. pas program saya running. awal kebuka langsung crash.

coba agan kalau ada win 8.1 jalanin disana pasti crash.
saya jg udah coba tambahin VirtualProtectEx. takutnya kan page memorynya di protect di win 8. jadi saya open dulu.
VirtualProtectEx(Hproc, (LPVOID)Alamat, 1, PAGE_WRITECOPY, &OLDPROTECT);

Cuma hasilnya tetep aja crash
Quote:

kemungkinan isi binary function recv/send dari WS2_32.dll nya win8 ga sama dgn yg di win7/XP, jadinya setelah diinject dgn data "bOriginal" itu jadi corrupt code nya. Agan bisa pake asm debugger ollydbg atau sejenisnya? Kalo bisa, dicoba aja ditelusuri 6 byte pertama code "recv" nya (yg dirujuk dari variable dwRecvCall).

kalo di tempat ane, WS2_32.dll nya kek gini isinya:

Code:
8BFF           MOV EDI,EDI
55 PUSH EBP
8BEC MOV EBP,ESP
83EC 10 SUB ESP,10
...


sedangkan yg mau diinjek itu 558B...EC10, ane kira disitu salahnya, makanya ane shift 2 byte (+2) supaya write nya setelah 8BFF itu.

Mudah2an aja ada yg punya win8 bisa bantu disini.
Quote:


iya saya sudah debug bs di includekan jg 2 byte sblmnya atau di shift 2 byte sama saja. saya jg mau debug pake olly. tapi gmn saya gak ada win 8 jg emoticon-Sorry
Quote:


coba download aja win8 enterprise, terus install di virtualbox/vmware.
Quote:


oke gan makasih infonya dan waktunya, saya coba dulu mudah2an work.

ini saya jg baru sadar kalau ws2_32.lib pakenya header winsock2.h bukan winsock.h (wsock32.lib)

dan harus di include sblm windows.h. soalnya windows.h otomatis include winsock.h

nanti kalau masih crash saya nanya lg hehehehe
Quote:

Under the hood, WriteProcessMemory() memanggil NtProtectVirtualMemory(), jadi ga perlu lagi VirtualProtectEx() . Lagipula VirtualProtectEx() itu untuk remote process.

Mengapa crash? Kodingannya tidak thread-safe, itu sebabnya. Hanya keberuntungan saja program ini tidak crash di Windows XP, 7. Agan harus suspend dulu semua thread sebelum WriteProcessMemory() .
Quote:


function di atas di while per 500 milliseconds. dan di berjalan didalam thread jg. karena fungsinya mereplace 8 byte diawal process ws2_32.dll saat program dijalankan. dan tidak hanya sekali saja tapi selama program berjalan dia akan terus mereplace.

pertanyaannya apa mungkin tiap writeproccess harus suspend resume thread yg sedang berjalan. sedangkan aplikasi yg nanti akan menggunakan fungsi diatas adalah multi-thread yg harus berjalan terus menerus.

Terimakasih sarannya.
Quote:

waktu itu agan ngetest di windows 8 cuma sekali aja atau udah coba jalanin berkali2 dan semuanya crash kah?
Quote:


sudah berkali2. dan tetap sama crash.
selalu crash di Windows 8.1 32/64 bit.

Tapi di beberapa windows 8 lain ada yg jalan tidak crash.
entah ini bingung, apakah karena thread-safe yg buruk. atau memang perbedaan proccess ws2_32.dll di windows 8.1 yg membuat saat proccess WriteMemoryProccess Crash.

emoticon-Sorry
Quote:

kalo selalu crash berarti bukan masalah thread-safe, terlalu mujur bgt kalo bisa spt itu. Sepertinya ada sesuatu di win8 tsb yg bikin crash. Crashnya cuma terjadi di satu PC aja? Udah coba di run as admin atau jalanin di safe mode?
Quote:


Selama seminggu ini saya sudah minta banyak teman untuk testing.
dari Run As Admininistrator, sampai safe mode.

Win XP, Win 7, Win 8 (32 dan 64).
Semua Jalan tanpa Hambatan termasuk Windows 8.
Kecuali : (Windows 8.1 32/64) crash all semua, all mode all PC all user.

Mumet gan emoticon-Sorry
Quote:

udah coba enable "Run this program as an admin" di properties -> compability nya?

Quote:


Sudah gan sudah semua di coba. anehnya gak semua windows 8.

cm yg versi 8.1 aja
Lah, kok malah jadi ke run-as-admin sih? Sejak kapan read/write memory di process address space sendiri memerlukan admin privileges?
Quote:

Gini aja, untuk mengecek apa memang crash-nya karena masalah thread-safe, coba agan compile dan jalankan kodingan yang dikasih agan wuruwuru, program itu cuma ada 2 thread aja kan? Kalau kodingan itu crash juga berarti bukan masalah thread-safe, walaupun kodingan agan tetap tidak thread-safe.