|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Мар 20, 2004 21:25:02 Здравствуйте! Я задался несколько странным вопросом: насколько реально получить КАЧЕСВТЕННЫЙ исходный код программы? Случай конкретный: программа небольшая, написана на ассемблере (TASM32), никакими пакерами не была "попорчена". Не подскажите, какую программу можно использовать для получения приемлимого кода, чтобы с небольшими исправлениями его можно было бы привести к "нормальному" виду и снова скомпилировать? Конечно, первым ответом будет IDA, но у меня только незарегиная версия и сохранять в asm не получается. (А так как спрашивать про взлом на форуме запрещено, то я спрашиваю про аналогичные доступные и, главное, небольшие утилиты для получения такого исходного кода). Или возможность получения приемлимого кода исключена? Было бы интересно услышать мнение ваше мнение. Заранее спасибо! 1990 |
|
|
Дата: Мар 21, 2004 00:12:01 тогда надо скачать нормальную иду и попробовать еще раз. |
|
|
Дата: Мар 21, 2004 01:28:50 Хмм.., Ида конечно рулит, для анализа, но не для получения исходного кода для последующей компиляции. Я использую Olly, Ctrl+C - рулит, + IDA PRO для подглядывания за переменными и структурами. В любом случае ручной работы хватает ;-) |
|
|
Дата: Мар 22, 2004 00:31:11 [но не для получения исходного кода для последующей компиляции] это почему же ? чем тебе егойный синтаксис асма не нравится? :) |
|
|
Дата: Мар 22, 2004 05:18:47 чем тебе егойный синтаксис асма не нравится? :) Много лишнего мешающего на пути к компиляции ;-) В листинге Olly нужно всего лишь поправить числовые константы(добавить h) и имена API, объявить глобальные переменные и структуры, ну и добавить указания чтоб компилилось без пролога и эпилога, и можно сувать в masm32 :-) Да, важно, в данном случае нужно юзать Olly под 2k/XP, а то в 98-й он имена API неправильно показывает ;-) |
|
|
Дата: Мар 22, 2004 10:13:23 Что-то почерпнул, спасибо! Сейчас буду получать исходники ;) |
|
|
Дата: Мар 22, 2004 12:51:34 Asterix Поясните мне, пожалуйста, каким образом можно получить листинг в OllyDBG? Что-то комбинация Ctrl + С, мне кажется, обозначает компирование. Может быть есть какие-нибудь плагины для создания качественного листинга. Кстати, я тут в инструментах нашёл прикольный инструмент -pdasm. Правда он пока ещё не делает asm listing, но, по словам автора, асм source будет очень лизким к реальности. А пока - olly. |
|
|
Дата: Мар 22, 2004 15:34:27 infern0 Пожалйста дай мне свое рабоее мыло или аську!!! |
|
|
Дата: Мар 23, 2004 20:25:15 Asterix Откликнись... Как же в olly получить исходник? См. выше. |
|
|
Дата: Мар 23, 2004 22:04:45 Я же говорил, вручную Ctrl+C или в файл если получиться, хоть в Ида хоть в Olly. Например имеем в Olly такую процедуру: 004010C0 /$ 55 PUSH EBP 004010C1 |. 8BEC MOV EBP,ESP 004010C3 |. 83C4 FC ADD ESP,-4 004010C6 |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4] 004010C9 |. 50 PUSH EAX ; /pOldProtect 004010CA |. 6A 40 PUSH 40 ; |NewProtect = PAGE_EXECUTE_READWRITE 004010CC |. 6A 01 PUSH 1 ; |Size = 1 004010CE |. FF75 0C PUSH DWORD PTR SS:[EBP+C] ; |Address 004010D1 |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hProcess 004010D4 |. FF15 3C204000 CALL DWORD PTR DS:[<&kernel32.VirtualPro>; \VirtualProtectEx 004010DA |. 6A 00 PUSH 0 ; /pBytesWritten = NULL 004010DC |. 6A 01 PUSH 1 ; |BytesToWrite = 1 004010DE |. FF75 10 PUSH DWORD PTR SS:[EBP+10] ; |Buffer 004010E1 |. FF75 0C PUSH DWORD PTR SS:[EBP+C] ; |Address 004010E4 |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hProcess 004010E7 |. FF15 48204000 CALL DWORD PTR DS:[<&kernel32.WriteProce>; \WriteProcessMemory 004010ED |. 85C0 TEST EAX,EAX 004010EF |. 74 18 JE SHORT TRASER.00401109 004010F1 |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4] 004010F4 |. 50 PUSH EAX ; /pOldProtect 004010F5 |. FF75 FC PUSH DWORD PTR SS:[EBP-4] ; |NewProtect 004010F8 |. 6A 01 PUSH 1 ; |Size = 1 004010FA |. FF75 0C PUSH DWORD PTR SS:[EBP+C] ; |Address 004010FD |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hProcess 00401100 |. FF15 3C204000 CALL DWORD PTR DS:[<&kernel32.VirtualPro>; \VirtualProtectEx 00401106 |. 33C0 XOR EAX,EAX 00401108 |. 40 INC EAX 00401109 |> C9 LEAVE 0040110A \. C2 0C00 RETN 0C Правим вручную и получаем готовый к компиляции в masm32 исходник. _004010C0 proc option PROLOGUE:NONE option EPILOGUE:NONE PUSH EBP MOV EBP,ESP ADD ESP,-4 LEA EAX,DWORD PTR SS:[EBP-4] PUSH EAX ; /pOldProtect PUSH 040h ; |NewProtect = PAGE_EXECUTE_READWRITE PUSH 1 ; |Size = 1 PUSH DWORD PTR SS:[EBP+00Ch] ; |Address PUSH DWORD PTR SS:[EBP+8] ; |hProcess CALL VirtualProtectEx PUSH 0 ; /pBytesWritten = NULL PUSH 1 ; |BytesToWrite = 1 PUSH DWORD PTR SS:[EBP+010h] ; |Buffer PUSH DWORD PTR SS:[EBP+00Ch] ; |Address PUSH DWORD PTR SS:[EBP+8] ; |hProcess CALL WriteProcessMemory TEST EAX,EAX JE SHORT @00401109 LEA EAX,DWORD PTR SS:[EBP-4] PUSH EAX ; /pOldProtect PUSH DWORD PTR SS:[EBP-4] ; |NewProtect PUSH 1 ; |Size = 1 PUSH DWORD PTR SS:[EBP+00Ch] ; |Address PUSH DWORD PTR SS:[EBP+8] ; |hProcess CALL VirtualProtectEx XOR EAX,EAX INC EAX @00401109: LEAVE RETN 00Ch option PROLOGUE:PROLOGUEDEF option EPILOGUE:EPILOGUEDEF _004010C0 endp В случае использования листинга IDA вручную править тоже придётся... |
|
|
Дата: Мар 23, 2004 23:05:18 Asterix Большое спасибо! |
|
|
Дата: Мар 24, 2004 09:34:35 Если компилить листинг иды тасмом, то ничего не нужно править. |
|
|
Дата: Мар 24, 2004 10:13:18 Здается мне, тут можно еще подправить чуток (вначале и ниже подобным образом..) ADD ESP,-4 ;; == PUSH ESP ;; или другой регистр LEA EAX,DWORD PTR SS:[EBP-4] ;; 2 строки == PUSH ESP PUSH EAX А это совсем убрать XOR EAX,EAX INC EAX Asterix А чего там за компилятор такой? ^^ ;-) |
|
|
Дата: Мар 24, 2004 11:29:58 S_T_A_S_ Тут не нужна оптимизация, нужно точное соответствие изначальному коду, иначе при большом количестве рипаемого кода можно так никогда и не дорипать ;-) xor eax, eax inc eax это нужно! А вдруг VirtualProtectEx вернёт 0, хотя основная работа процедуры благополучно выполнена, т.е. WriteProcessMemory прошло успешно :-) Хотя логичнее всё-таки сохранить в стеке то что вернула WriteProcessMemory и восстановить в eax при выходе из функции. Компилятор ml.exe ;-) |
|
|
Дата: Мар 24, 2004 12:52:14 Хорошо, а где бы скачать полную ИДУ? А? Или это провакационный вопрос? Если провокация - прошу простить! У меня демо версия и листинги не выдаёт... ;-/ А так бы хотелось... |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.075 |