Casa
Top.Mail.Ru Yandeks.Metrika
Fórum: "WinAPI";
Arquivo atual: 2002.01.14;
Download: [xml.tar.bz2];

Para baixo

Escreva para endereços de memória proibidos. Encontre agências semelhantes


McSimm   (2001-11-13 12:55) [0]

É aconselhável poder escrever no espaço de endereço do código de outra pessoa. Isso não é para fins de sabotagem, mas vice-versa. (talvez alguém se lembre do tópico "programas de competição"?)
A essência do problema: estou tentando substituir meu manipulador pela função API em vez da função padrão. Aqui está o código de gravação do teste:
procedimento TForm1.Button1Click (Sender: TObject); var P1, P2: PByteArray; B: Byte; começar P1: = @MessageBoxA; // endereço do gateway (jmp [ProcAdr]) se P1 <> nulo então começar asm mov eax, P1 adicione eax, 2 // desloque 2 bytes (código jmp) mov eax, [eax] // obtém o endereço do endereço mov eax, [eax] // obtém o endereço User32.MessageBoxA mov P2, eax fim; se P2 <> nulo então começar B: = P2 [0]; // lê o primeiro byte do código User32.MessageBoxA P2 [0]: = B // Tentando escrever. fim fim fim;
Como esperado, a gravação falhou. No entanto, eles dizem que isso é possível. O que os queridos mestres podem dizer sobre isso?

Obrigado



Digitman   (2001-11-13 14:21) [1]

Para começar, a gravação direta em um segmento de código é proibida no nível do mecanismo de proteção.



Алексей Петров   (2001-11-13 14:27) [2]

E é facilmente resolvido (pelo menos no NT e 2K) chamando a função VirtualProtect :)



Digitman   (2001-11-13 14:30) [3]

... mas isso não é mais uma gravação direta.



McSimm   (2001-11-13 14:44) [4]

Obrigado a todos, vou tentar descobrir.



paul_shmakov   (2001-11-13 16:48) [5]

2 McSimm:
Por que você encontra o endereço MessageBoxA dessa maneira? O fato é que esse gateway (jmp XXXX) não pode estar presente em alguns casos. É melhor
P1: = GetProcAddress (GetModuleHandle ("kernel32.dll"), "MessageBoxA");



paul_shmakov   (2001-11-13 17:02) [6]

Esse gateway ali, a propósito, geralmente acontece no caso de iniciar o aplicativo no depurador. e IMHO apenas no win9x (embora aqui eu possa estar errado).
e novamente, se não me engano, o VirtualProtect não funcionará no win9x / mese você tentar alterar o atributo de segurança para PAGE_READWRITE em uma das DLLs do sistema. porque eles são carregados em um espaço de endereço compartilhado.
Para fazer isso, entre em contato com ring0.
asm push 020060000h // PC_WRITEABLE | PC_USER | PC_STATIC push 0FFFFFFFFh // Manter todos os bits anteriores push dword ptr [dwNumPages] // dword ptr [mbi + 0Ch] Nº de páginas push dword ptr [dwFirstPage] // dword ptr [ped] página # push 1000Dh // _PageModifyPermissions (win32_service_table #) chamar dword ptr [VxDCall] // VxDCall0 fim;
concorda que não é fácil. além disso, é inútil interceptar chamadas para GetProcAddress :( porque escrever seu análogo GetProcAddress é muito simples - são apenas 30 a 40 linhas de código.



McSimm   (2001-11-13 17:49) [7]

> paul_shmakov ©
Nesses assuntos, me sinto como um bule de chá.
Tanto quanto eu notei, esses gateways estão sempre lá. De fato, o código foi criado com o único objetivo de observar a reação do Windows ao escrever para seus santos santos, não pensei nas sutilezas.
Quanto aos recursos do VirtualProtect no Win9x, Alexey Petrov já me avisou.

> anel de contato0
chur me :)

> analógico do GetProcAddress
Ostap nunca experimentou tais golpes do destino. E essa pergunta. Devo procurar uma maneira de carregar a DLL com segurança? Ou maneiras de fazer muito mais mal do que você poderia esperar? Que tal usar interrupções para fins maliciosos, por exemplo?

Para todos,
Talvez você ainda deva tentar carregar a DLL no NT com direitos insuficientes para sabotagem? Como você classificaria as perspectivas desse método?



paul_shmakov   (2001-11-13 18:05) [8]

direitos aqui não vai ajudar. "existem mais maneiras de fazer muito mais do que você pode imaginar." você está absolutamente certo. a única opção (no contexto da "competição de programas") é não permitir que as DLLs cheguem a lugar algum, carregá-las não com loadlibrary, mas com seu próprio procedimento (como orifício traseiro), executar no modo de depuração e ver se o código não acessa endereços ao qual o acesso não deve ser.
até a opção que discutimos por e-mail (editando a própria API do funky) também pode ser contornada - a dll é carregada, parece que a remendamos lá, muda tudo de volta e funciona silenciosamente.
então é melhor esquecer esse negócio :(



Алексей Петров   (2001-11-14 09:11) [9]

> paul_shmakov © (13.11.01/18/05 XNUMX:XNUMX)
À custa de "direitos não vai ajudar" eu não concordo.

Sugira pelo menos uma maneira de prejudicar uma DLL em execução no NT em uma conta de usuário comum que não tenha permissão de gravação em nenhum lugar, exceto "MyDocuments". Ou sob um convidado?
Bem, a Internet pelo período de operação, se você a desligar?

Embora haja certamente falhas na proteção NT-shnoy :(

A principal desvantagem desse caminho é que muitos têm o win9x.



paul_shmakov   (2001-11-14 10:47) [10]

dependendo do que é considerado sabotagem. se falamos de "competição de programas", então, por exemplo, uma das DLLs pode prejudicar diminuindo a prioridade do fluxo do rival da DLL. de fato, apesar da restrição de todos os direitos, quase todas as APIs estão disponíveis, e as que são proibidas podem ser permitidas em alguns casos. ainda existe uma API não documentada.



Страницы: 1 filial inteira

Fórum: "WinAPI";
Arquivo atual: 2002.01.14;
Download: [xml.tar.bz2];

em cima





Memória: 0.58 MB
Hora: 0.022 c
3-42365
CSF
2001-12-10 16:28
2002.01.14
A Oracle possui dual e o que é o InterBase e?


1-42498
Alan
2001-12-25 19:16
2002.01.14
Problema com dicas de exibição constantes


4-42615
AlexandrH
2001-11-14 12:37
2002.01.14
Como inserir texto no cabeçalho da janela ativa.


6-42528
Робот
2001-10-18 16:09
2002.01.14
Precisa de um robô de correio


3-42362
Alan
2001-12-12 17:44
2002.01.14
Classificar registros por campo vazio





afrikaans albanês Arabic armênio azerbaijano basco belarusian Bulgarian catalão Chinês simplificado) Chinês tradicional) croata checo dinamarquês Dutch Inglês estoniano filipino Finnish French
Galego georgiano German grego crioulo haitiano hebraico hindi húngaro islandês Indonesian irlandês Italian Japanese Korean letão lituano macedónio Malay maltês Norwegian
persa polonês Portuguese Romeno Russa sérvio Slovak esloveno Espanhol swahili sueco tailandês turco ucraniano urdu vietnamita galês ídiche bengali bósnio
cebuano esperanto gujarati hausa hmong igbo javanês kannada khmer lao latino maori marata mongol Nepali punjabi somali tâmil telugu yoruba
zulu
Английский francês Alemão Italiano Португальский russo Espanhol