Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.56/16: Рейтинг темы: голосов - 16, средняя оценка - 4.56
Van111
212 / 191 / 22
Регистрация: 03.08.2011
Сообщений: 2,674
Записей в блоге: 12
1

поиск базы кернел

16.05.2012, 21:23. Просмотров 2937. Ответов 45
Метки нет (Все метки)

помогите наладить(на masm работает -авторский пример, а tasm -не мой, не авторский)
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Search_kernel32 proc 
 
Search_kernel32_1:
    cmp byte ptr ss:[ebp],00h
    jz kernel_limit_end
 
    cmp word ptr ds:[esi],'ZM'
    jz kernel_search_ok
 
Search_kernel32_2:
    dec byte ptr ss:[ebp]
    sub esi,10000h
    jmp Search_kernel32_1
 
kernel_search_ok:
 
    mov edi,ds:[esi+3ch]
    add edi,esi
    cmp word ptr ds:[edi],'EP'
    je kernel_search_ok_pe
 
 
kernel_limit_end:
    mov esi,0BFF70000h
 
kernel_search_ok_pe:  
 
    mov eax,esi
    ret
 
Search_kernel32 endp
start:  
mov esi,[esp]
        mov ebp,esp
        sub esp,100h
        mov eax,50h
        mov [ebp],eax
        add esi,0ffff0000h
        call Search_kernel32
end start
почему то вылетает при обращении к верхним адрессам ядра, ebp- указывает на стек где хранятся данные(ebp+0 =50р)
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2012, 21:23
Ответы с готовыми решениями:

Можно ли программируя в кернел мод повредить комп
Можна ли програмируя в кернел мод павредить комп?

Поиск термина из базы
Всем привет. возникла проблема с memo. задача. есть два документа( один новый...

Поиск базы на компьютере
Знаю что база есть. знаю это из лога. Но скл сервер мэн студия не отображает её...

Поиск из базы данных
Пожалуйста помогите разобраться, не так давно стал изучать php, на работе дали...

Поиск и удаление из базы данных
Вопрос такой как сделать поиск в mysql из <input>, по имени и при нажатии...

45
zzzyyyxxx
764 / 308 / 11
Регистрация: 27.05.2011
Сообщений: 704
17.05.2012, 13:39 41
зацикливание из-за этого момента:
Цитата Сообщение от Vadimych Посмотреть сообщение
68. cmp ebx,esi
замена на:
Assembler
1
   test esi,esi
решает проблему(по крайней мере у меня всё в норме)..

либо после WriteConsole eax проверить на 0..

по поводу разбора, у меня нет rtl.inc, скинешь, гляну...
0
Vadimych
635 / 478 / 12
Регистрация: 10.01.2011
Сообщений: 1,047
17.05.2012, 13:45 42
Вот. Глянь.
0
Вложения
Тип файла: rar rtl.rar (9.0 Кб, 12 просмотров)
zzzyyyxxx
764 / 308 / 11
Регистрация: 27.05.2011
Сообщений: 704
17.05.2012, 18:56 43
Vadimych, у меня такое ощущение, что мы с тобой запускаем разные файлы... проверь..(у нас списки отличаются(позиция основного модуля), но это на разность операционок не похоже)
а так предположу, что это холостой проход, но! если было бы так, то запись должна быть последней,но она таковой не являеться... есть одна мысль конечно..
короче, открой ту прогу(что скидывал сюда) в отладчике и перебей проверку на:
Assembler
1
 68. test eax,eax
да и чёт интересно, что у тебя в списке отсутствует ntdll.dll

PS: может предположение и глупое, но просмотрев код в отладчике, придраться больше не к чему...
конечно искать причину ошибки не имея её(ошибку) трудновато.. а так тебе у себя придётся проверять, если тебя конечно интересует причина..
0
Van111
212 / 191 / 22
Регистрация: 03.08.2011
Сообщений: 2,674
Записей в блоге: 12
17.05.2012, 19:16  [ТС] 44
рас тема так раскрутилась сможете помочь с lib файлом
inject.a -lib файл
объявляю вот так
extrn GetProcessHandle@4:dword
пишет вот что

\Masm32\Bin\Link @"C:\WinAsm\link.war"

Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

/SUBSYSTEM:WINDOWS /SECTION:.text,W "/LIBPATH:\Masm32\Lib" "C:\WinAsm\1.obj" "/OUT:C:\WinAsm\1.exe"
inject.a(inject.o) : warning LNK4078: multiple ".drectve" sections found with different attributes (C0000040)
inject.a(inject.o) : error LNK2001: unresolved external symbol _memcpy
inject.a(inject.o) : error LNK2001: unresolved external symbol _strcmp
C:\WinAsm\1.exe : fatal error LNK1120: 2 unresolved externals
0
Вложения
Тип файла: rar inject.rar (622 байт, 9 просмотров)
Van111
212 / 191 / 22
Регистрация: 03.08.2011
Сообщений: 2,674
Записей в блоге: 12
17.05.2012, 19:37  [ТС] 45
про борландскую либу masm32 пишет что у неё неверный формат

Добавлено через 6 минут
их вообще реально подключить?
0
_lucius_
387 / 175 / 2
Регистрация: 14.03.2012
Сообщений: 443
17.05.2012, 21:38 46
Цитата Сообщение от Van111 Посмотреть сообщение
рас тема так раскрутилась сможете помочь с lib файлом
У меня вот так компилирует:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 .386
    .model flat, stdcall
    option casemap :none
    include \masm32\include\windows.inc
    include \masm32\include\user32.inc
    include \masm32\include\kernel32.inc
    include \masm32\include\msvcrt.inc
    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\msvcrt.lib
    includelib inject.a
    GetProcessHandle  proto :DWORD
    .code
start:
    invoke GetProcessHandle,NULL
    ret
end start
C:\masm32\bin\ml /c /coff %1.asm
C:\masm32\bin\Link /SUBSYSTEM:WINDOws %1.obj
Добавлено через 1 минуту
Цитата Сообщение от Van111 Посмотреть сообщение
inject.a(inject.o) : error LNK2001: unresolved external symbol _memcpy
inject.a(inject.o) : error LNK2001: unresolved external symbol _strcmp
Потому что msvcrt то не подключил.

Добавлено через 39 минут
Vadimych, а почему бы вам не использовать тот метод, что я предложил. Через PEB получаем базу kernel32. В семёрке этот код вернет базу kernelbase. В kernelbase нету LoadLibraryA, но зато есть как и в kernel32 функция LoadLibraryExA. А получив LoadLibraryExA, мы можем получить любую базу.

Вот слипил код, прога просто выводит сообщения не используя не одной API. Протестировал на 32 разрядных Windows 2000, 2003, XP, VISTA и на 64 разрядной Windows 7. Везде работает.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
 .386
    .model flat, stdcall
    option casemap :none
    include C:\masm32\include\windows.inc
    include C:\masm32\include\kernel32.inc
    includelib C:\masm32\lib\kernel32.lib
      
    GetFuncFormExport PROTO :DWORD,:DWORD
    _lstrcmpi         PROTO :DWORD,:DWORD
 
    .data
    
    FName1 db 'LoadLibraryExA',0
    FName2 db 'MessageBoxA',0
    DName  db 'user32.dll',0
    Mess   db 'Hello world!',0
 
    .code
 
start:
 
    ; через PEB получаем в EAX базу kernel32.dll (или kernelbase.dll если мы Win7)
    assume fs:nothing
    mov eax,fs:[30h]
    mov eax,[eax+0Ch]
    mov esi,[eax+1Ch]
    lods dword ptr[esi]
    mov eax,[eax+8]
    
    ; получаем указатель на функцию LoadLibraryExA, т.к. LoadLibraryA в kernelbase.dll отсутствует
    invoke GetFuncFormExport,addr FName1,eax
 
    ; получаем базу user32.dll
    push NULL
    push NULL
    push offset DName
    call eax
    
    ; получаем указатель на функцию MessageBoxA из user32.dll
    invoke GetFuncFormExport,addr FName2,eax
 
    push NULL
    push NULL
    push offset Mess
    push NULL
    call eax
 
    ret
 
    ; -----------------------------------------------------------   
    ; это можно убрать но тогда не будет работать на всех WinNT 
    ; т.к. у модуля не будет таблицы импорта
    call ExitProcess
    ; -----------------------------------------------------------
    
GetFuncFormExport proc USES EBX ESI EDI FuncName:DWORD, ModBase:DWORD
 
    ; ВХОД:    FuncName - указатель на имя функции
    ;          ModBase  - база модуля
    ; ВЫХОД:   EAX      - указатель на пролог нужной нам функции
 
    ; получаем в esi указатель на PE сигну
    mov ebx,ModBase         ; в ebx будем хранить базу образа dll'ки
    assume eax:ptr IMAGE_DOS_HEADER
    mov esi,[eax].e_lfanew
    add esi,eax
 
    ; получаем в esi указатель на таблицу экспорта
    assume esi:ptr IMAGE_NT_HEADERS
    mov esi,[esi].OptionalHeader.DataDirectory.VirtualAddress+IMAGE_DIRECTORY_ENTRY_EXPORT*8
    add esi,ebx
    
    ; ищем указатель на прогол
    assume esi:ptr IMAGE_EXPORT_DIRECTORY
    mov edi,[esi].AddressOfNames
    mov ecx,[esi].NumberOfNames
    add edi,ebx         ; edi = pointer на массив указателей на имена фунок
@@: mov eax,dword ptr [edi+ecx*4-4]
    add eax,ebx
    invoke _lstrcmpi,eax,FuncName
    test eax,eax
    je ff
    loop @B
 
ff: dec ecx
    mov eax,[esi].AddressOfNameOrdinals ; ecx = нужный нам индекс, будем использовать его
    add eax,ebx         ; как индекс в массиве AddressOfNameOrdinals
    movzx eax,word ptr [eax+ecx*2]  ; eax = ordinal
    ;sub eax,[esi].nBase            ; ordinal - OrdinalBase
    ;inc eax                ; т.к. начальный ординал нумеруется с единицы
    mov edi,[esi].AddressOfFunctions
    add edi,ebx         ; edi = указ. на массив адресов функций
    mov eax,dword ptr [edi+eax*4]
    add eax,ebx
    ret
 
GetFuncFormExport endp
    
_lstrcmpi proc lpStr1:DWORD, lpStr2:DWORD
 
    push esi
    push edi
 
    mov esi,lpStr1
    mov edi,lpStr2
    xor eax,eax
loc_compare:
    lodsb
    mov ah,[edi]
    inc edi
    cmp al,ah
    jne @f
    or al,al
    jz loc_ret
    jmp loc_compare
@@:
    and eax,0DFDFh
    cmp al,'A'
    jb loc_not_equal
    cmp al,'Z'
    ja loc_not_equal
 
    cmp al,ah
    je loc_compare
loc_not_equal:
    xor eax,eax
    inc eax    
loc_ret:
    pop edi
    pop esi
    ret
        
_lstrcmpi endp
 
 
end start
И заодно хотел спросить. Обратите внимание на строки 89-90. При получении адресов функций из таблицы экспорта, по документации нужно еще вычетать из ординала OrdinalBase. Но я этого не делаю и все работает нормально, а если делаю то не работает на 7 и VISTA. Делал человеку программу, у него на одной из машин моя программа падала. Думаю из-за того что я OrdinalBase не вычетаю.
2
17.05.2012, 21:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2012, 21:38

Поиск базы данных в сети
Всем привет. Вопрос в следующем: Delphi 7 + Mysql (База уже подключена к...

Сделать поиск по таблицам базы
Не дружу совсем с VBA, нужно сделать поиск по 2 таблицам, например пользователь...

Поиск и вывод из базы данных
<form action="search.php" method="post"> <input type="text" name="nickname"...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
46
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru