2017-01-27 4 views
0

私は、プロセスの仮想メモリといくつかのデータをいくつかのレジスタに読み込み、それを修正するプログラムを持っています。これは私と一緒に裸のデバッグアプリケーションを作る私の初めてのことです。仮想メモリを読み込み中にC++でバッファオーバーフローが発生する

ここで私は私の関数にEAXレジスタの内容を渡す(これは正常に動作するようですが、私はそれが関与しているデータの種類を証明かもしれないと思った)

case EXCEPTION_SINGLE_STEP: // EXCEPTION_SINGLE_STEP = 0x80000004 
        bl_flag = TRUE; 
        memset((void *)&context, 0, 0x2CC); 
        context.ContextFlags = 0x10017; 
        thread = OpenThread(0x1FFFFF, 0, debug_event.dwThreadId); 
        GetThreadContext(thread, &context); 
        context.Eip = context.Eip + 1; 

//     sub_FD4BF0((HANDLE)(*((DWORD *)(lpThreadParameter))), context.Eax); 
        StringToHtml((HANDLE)(dwArray[0]), context.Eax); 

        SetThreadContext(thread, &context); 
        CloseHandle(thread); 
        break; 



void StringToHtml(HANDLE hProcess, DWORD address) 
{ 
    WCHAR buff[0x100]; 
    WCHAR html[0x100]; 
    DWORD oldProt = 0, real = 0; 
    int len = 0; 

    VirtualProtectEx(hProcess, (LPVOID)address, 0x200, PAGE_READWRITE, &oldProt); 
    ReadProcessMemory(hProcess, (LPCVOID)address, (LPVOID)buff, 0x200, &real); 

    len = wcslen(buff); 
    int k = 0, j = 0; 

    wprintf(L"Found out chat string : \"%s\" \n", buff); 

    for (int pp = 0; pp < 0x100; pp++) 
     html[pp] = NULL; 
    while(j < len) 
    { 

     if (buff[j] == L'&') 
     { 
      if (wcsncmp((const WCHAR *)(buff + j + 1), L"lt;", 3) == 0) 
      { 
       //html[k] = L'<'; 
       html[k] = L'<font color="#00FF10">'; 
       k++; 
       j = j + 4; 
       continue; 
      } 

私はこれが不完全で承知しています関数のスニペット。しかし、問題は私のforループにここで到着しています。

for (int pp = 0; pp < 0x100; pp++) 

私が256文字以上を入力すると(私は最初はこれで十分だろうと思った)、クラッシュしました。私は明確に何かを明らかにしたが、私はバッファサイズを使用すると思ったpp < lenをやってみたが、私はまだ同じクラッシュを得る。

チャットに入力された文字列の合計サイズをループに読み込んで、それを全面的に繰り返す方法を教えてください。または、少なくともこのエラーをキャッチしますか?

答えて

0

forループの最大値に応じてhtmlとバッファのサイズを変更しましたか?多分それは既に解決策です。

+0

クラップス。私はそれを忘れてしまった。そういう意味です:WCHAR buff [len]; WCHAR html [len] ;? –

+0

WCHAR buff [len]は使用できません。その時点でlenは後で割り当てられるためです。バッファを十分に大きくして、長さを取得し、それに応じてHTMLのサイズを調整してください。 – Aeonos

+0

これはクラッシュを修正しました。ありがとう、私はbuffとhtmlと0x1f3dにループを設定しましたが、これは簡単には十分ですが、現在は256文字にしか切り捨てられていないようです。あたかもそれが以前に持っていた0x100サイズを超えて書き続けるかのように。 –

関連する問題