Newsgroup: it.comp.lang.visual-basic
Titolo: MODIFICARE il colore di sfondo di Notepad.exe

Si pu� fare con 
VB.NET
 ?
 
Con  C si pu� fare.
 
Grazie e ciao
 
( non ditemi di scaricare notepad++  o simili,mi interessava sapere come 
modificare notepad). 
 
 

 modificare notepad). 
 
Quando ho avuto un problema del genere
(si trattava di fare il conteggio delle battute)
io ho trovato pi� semplice riscrivermi un
simil-notepad da capo, con in pi� le funzioni
che mi servivano. Probabilmente il codice
� ancora in giro su PlanetSourceCode,
CodeGuru o qualcosa del genere.
Per� era VB classico, non .NET.
Direi che con questo potrebbe essere
almeno altrettanto semplice, se non di pi�.
 
Bye, G.


 
 
#include <windows.h>
#include <windowsx.h>
#include <stdlib.h>
#include <stdio.h>
#include "injinfo.h"
 
//typedef void (*LPFUNC)(HWND hwnd, UINT message, WPARAM wParam, LPARAM 
lParam);
typedef DWORD (*LPFUNC)();
 
// The worker dll and function that do some real work
#define THREADHELP_DLL "ThreadHelpDll.dll"
#define THREADHELP_FUNC "HookFunc"
 
// It's unlikely that a process will run 2 threads containing this structure
// But if the situation arises, we'll have to convert this to per thread 
data.
// Since thread is always executed in the context of the hosting process,
// this data is not shared among processes unless a shared rw segment is 
specified.
struct t_inj_info * l_info;
LPFUNC orig_func;
DWORD i, stackPtr, ORetAddr, retval;
HDC hdc;
HBRUSH brush;
 
 
LRESULT CALLBACK
new_func(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
 
// removed the stack messing for clarity purpose.
if(message == WM_CTLCOLOREDIT){
hdc = (HDC)wParam;
SetTextColor(hdc, RGB(255,255,0));
SetBkColor(hdc, RGB(255,0,0));
//GetSysColorBrush(COLOR_3DHILIGHT);
}else{
 
orig_func = (LPFUNC)(l_info->target_func_ptr);
 
// Do real work here. We have set up a frame for powerful code injection.
 
for(i = 0; i < 5; i ++)
((LPBYTE)(l_info->target_func_ptr))[I] = l_info->old_op[I];
__asm { cpuid }
//orig_func(hwnd, message, wParam, lParam);
retval=orig_func();
for(i = 0; i < 5; i ++)
((LPBYTE)(l_info->target_func_ptr))[I] = l_info->op[I];
}
return retval
}
 
BOOL MakeBrush(){
 
char * wndname = "PopPad1";
HWND hwnd = FindWindow(wndname, 0);
brush = CreateSolidBrush(RGB(255,0,0));
if(hwnd == 0 || brush == 0){
MessageBox(0, "Error during DLL HOOKING", 0, 0);
return FALSE;
}
 
//SetClassLong(hwnd, GCL_HBRBACKGROUND, (LONG)GetStockObject(BLACK_BRUSH));
InvalidateRect(hwnd, 0, 1);
return TRUE;
}
 
 
 
__declspec(dllexport) BOOL HookFunc(struct t_inj_info * example){
 
BOOL retval;
BYTE op[5];
DWORD oldpageattr, i, offset, opbytes;
char * mutex_name = "editctl_mutex";
HANDLE worker_mutex;
 
l_info = example;
 
//worker_mutex = CreateMutex(NULL, TRUE, mutex_name);
worker_mutex = OpenMutex(SYNCHRONIZE, FALSE, mutex_name);
if(worker_mutex == 0) return FALSE;
 
retval = VirtualProtect( 
(LPVOID)(((DWORD)(example->target_func_ptr))&0xFFFF1000),
0x1000, PAGE_EXECUTE_WRITECOPY, (PDWORD)&oldpageattr);
if(retval == FALSE) return FALSE;
 
offset = ((LPBYTE)(DWORD)new_func - 
(LPBYTE)(DWORD)(example->target_func_ptr))-5;
op[0] = 0xe9; // far jump
for(i = 0; i < 4; i ++)
op[i+1] = (BYTE)( (offset >> (8*i)) & 0xff );
opbytes = 5;
 
for(i = 0; i < 5; i ++){
example->old_op[I] = ((LPBYTE)(example->target_func_ptr))[I];
example->op[I] = op[I];
((LPBYTE)(example->target_func_ptr))[I] = op[I];
}
_asm { cpuid }
 
example->hookapi_addr = (DWORD)new_func;
if(!MakeBrush()) goto out;
//example->hookapi_addr = (DWORD)worker_mutex;
//ReleaseMutex(worker_mutex);
// We'll wait for the main controler to tell us to terminate: InjectThread 
app in this case
// After sleeping for 60 seconds, the control application is guranteed to 
have obtained
// the released mutex and reset its state (through the magic multi-tasking, 
Sleep yields CPU).
// Wait till control application release it.
//Sleep(1000);
WaitForSingleObject(worker_mutex, INFINITE);
CloseHandle(worker_mutex);
out:
// Clean up our track
for(i = 0; i < 5; i ++)
((LPBYTE)(example->target_func_ptr))[I] = example->old_op[I];
return TRUE;
} 
 
 

 #include "injinfo.h"
 
Ecco, gi� arrivato qui mi si � incazzato l'antivirus
virtuale :-). Cos� a occhio, cercare di fare una
code injection di quel tipo farebbe saltare un
bel po' di allarmi... o almeno dovrebbe, perlomeno
con sistemi da Vista in su.
 
Approccio interessante, comunque, anche
se un po' "black hat". Avrei scommesso che
chiunque si fosse messo a fare una cosa simile
sarebbe partito dal classico approccio di hook &
subclass, tipo questo (citato anche sullo stesso
sito da cui arriva il codice):
http://www.codeproject.com/Articles/5264/Cross-Process-Subclassing
 
?fid=25036&df=90&mpp=10&sort=Position&spc=Relaxed&tid=1184733
 
Per quanto riguarda quel codice, probabilmente
riportarlo in VB sarebbe anche possibile, ma
richiederebbe un bel po' di tempo e una quantit�
di pazienza che decisamente non ho... a meno
che qualcuno non mi pagasse, e non poco,
per farlo :-)
 
Bye, G.

 per farlo :-)
 
Ho anche provato ad aprire notepad.exe con un disassembler ( 
ollydbg.exe ),ma � difficile trovare l'istruzione che imposta il colore di 
sfondo.
 
 

 sfondo.
 
 
Papero rientra in casa che viene a piovere...
 
-- 
-> GbC
www.chiappori.com
 
 
 
 

 Papero rientra in casa che viene a piovere...
 
Questo invece lo �, ma volevo vedere fin dove
pensava di arrivare :-D
 
Bye, G. 
 
 

 Papero rientra in casa che viene a piovere...
 
non fare tanto il saccente,che sei solo un fesso 
 
 

 
"Paperino" <non...@lo.dico.invalid> ha scritto nel messaggio 
news:loe2ps$tnc$1...@dont-email.me...

sei cretino pi� di lui 
 
 

sei cretino pi� di lui
 
Per� devi concordare che le domande sono veramente assurde e prive di alcuna 
utilit�.
Ma poi scusa... se hai un minimo di conoscenza o sei uno smanettone (come 
dai ad intendere!!!!),
ma non fai veramente prima come diceva Paperino a riscriverti il Notepad???? 
Ma che ci vuole???? 
 

 alcuna utilit�.
 
assurdo iniettare codice in notepad?
Lo faccio spesso.
ma se era per te allora saremmo ancora a windows 3.11 !
 
Io programmo in assembly  e studio architettura dei calcolatori sul 
tanenbaum,caro!
E ricordati che il male su usenet non sono le domande sceme, ma la boriosa 
spacconeria delle persone.
 
 
 
 
 

spacconeria delle persone.
 
Visto che le sai le cose..... METTILE IN PRATICA!!!
 

tanenbaum,caro!
 
Io invece ho solo creato e realizzato questo...
 
http://www.noviservice.net/wpsite/documents/articolounione
.
 
Oooooops!!!!!

Qui si capisce meglio...
 
http://www.regione.sardegna.it/j/v/491?s=137961&v=2&c=27&t=1
 
 

 non fare tanto il saccente,che sei solo un fesso
 
 
Che poi non si dica che non l'avevo previsto.
 
-- 
-> GbC
www.chiappori.com