Сейчас на форуме: hgdagon, asfa, bartolomeo (+4 невидимых) |
![]() |
eXeL@B —› Программирование —› Анализатор кода |
Посл.ответ | Сообщение |
|
Создано: 04 сентября 2006 04:00 · Личное сообщение · #1 Есть желание написать что-то типа анализатора кода. Какие-то результаты есть, теперь думаю в каком направлении продолжать работу и будет ли это вообще кому-то нужно. Пока пытаюсь разобрать выражения, получается что-то типа такого (компилятор - delphi): Было: a:=((was.al+10) shr 1)-was.al; a:=(was.al-((50-was.al xor 10) shr 1)+was.al) xor $ff; Z:=(a shr 1) and (a shl 1); Стало: A=((([456BD8h+1Ch]+Ah) shr 1h)-[456BD8h+1Ch]) A=((([456BD8h+1Ch]-(((32h-[456BD8h+1Ch]) xor Ah) shr 1h))+[456BD8h+1Ch]) xor FFFFFFFFh) B=((A shr 1h) and (A+A)) Еще вопрос: если ли какие либо алгоритмы по определению параметров функций (через стек или регистры передаются, без типов на уровне byte/word/dword)? Мысли есть, но вдруг я зациклился и есть другие варианты.. ![]() |
|
Создано: 04 сентября 2006 04:31 · Личное сообщение · #2 |
|
Создано: 04 сентября 2006 05:28 · Личное сообщение · #3 |
|
Создано: 04 сентября 2006 05:40 · Личное сообщение · #4 |
|
Создано: 04 сентября 2006 06:56 · Личное сообщение · #5 |
|
Создано: 04 сентября 2006 07:41 · Личное сообщение · #6 |
|
Создано: 04 сентября 2006 10:18 · Личное сообщение · #7 |
|
Создано: 11 сентября 2006 18:24 · Личное сообщение · #8 Malice пишет: если ли какие либо алгоритмы по определению параметров функций (через стек или регистры передаются, без типов на уровне byte/word/dword)? Какой тут может быть алгоритм... ![]() ![]() |
|
Создано: 12 сентября 2006 03:09 · Личное сообщение · #9 S_T_A_S_ пишет: Какой тут может быть алгоритм... Смотришь в функе, что есть чтение регистра без его предварительной модификации - значит в нём параметр передан извне. Так же и со стековыми параметрами - чтение через esp\ebp. Так и есть, в принципе. Только это надо рекурсивно делать, т.к. переданный в регистре параметр может быть использован в качестве параметра для другой функции внутри данной ( т.е. обращение к регистру в самой функции может и не быть). С возвращаемыми параметрами еще хуже, т.к. функция может просто портить регистры. Да еще компиляторы могут разорвать процедуру, куском-то оно легче ![]() ![]() |
|
Создано: 14 сентября 2006 18:35 · Поправил: S_T_A_S_ · Личное сообщение · #10 Malice пишет: переданный в регистре параметр может быть использован в качестве параметра для другой функции внутри данной ( т.е. обращение к регистру в самой функции может и не быть) Ты такое хоть раз видел? Теоретически такая ситуация возможна, но на практике компиляторы так не сделают (из-за технических сложностей для оптимизатора). Malice пишет: С возвращаемыми параметрами еще хуже, т.к. функция может просто портить регистры Если регистр используется без инициализации после вызова функции - возможно, в нём возвращено значение. Однако регистры ebx/edi/esi/ebp не модифицируются функциями скомпилированными MSVC, так что необходим анализ вызываемой функции. Проще всего тупо заложиться на calling convention - значения возвращаются в eax и (возможно) edx. Malice пишет: Да еще компиляторы могут разорвать процедуру, куском-то оно легче Анализатор должен смотреть на поток команд, а не просто читать байты подряд ![]() ![]() |
|
Создано: 15 сентября 2006 03:00 · Поправил: Malice · Личное сообщение · #11 S_T_A_S_ пишет: Ты такое хоть раз видел? Теоретически такая ситуация возможна, но на практике компиляторы так не сделают (из-за технических сложностей для оптимизатора). вот пример на Delphi7: function x1(x:dword):dword; begin x1:=x+1; end; function x2(x:dword):dword; begin x2:=x1(x); end; ... i:=x2(1); Вот что получилось: 0045F7A8: 40 inc eax //x1 0045F7A9: C3 ret 0045F7AC: E8F7FFFFFF call 0045F7A8h //х2 0045F7B1: C3 ret т.е. для функции х2 как раз такая ситуация.. ![]() |
|
Создано: 16 сентября 2006 17:20 · Личное сообщение · #12 Мда, про оптимизатор дельфи много чего слышал, но такого еще не видел ![]() Вообще-то сам алго распознавания параметров не изменится, подниматься выше по дереву вызовов нужно только что бы определить октуда передаётся параметр. ![]() |
|
Создано: 19 сентября 2006 04:51 · Личное сообщение · #13 Гляньте - мож в помощь, сам ещё не юзал, заглянул тут на сайт а там прога лежит - даже не ожидал ![]() www.microapl.co.uk/download/Relogix86UserManual.pdf www.microapl.co.uk/download/RelogixWhitePaper.pdf и rlx86v1.4.9 в архиве запароленном, но password находится быстро. www.microapl.co.uk/download/ForDirk25Aug06.zip ![]() |
|
Создано: 19 сентября 2006 07:05 · Личное сообщение · #14 |
|
Создано: 19 сентября 2006 09:37 · Личное сообщение · #15 |
|
Создано: 20 февраля 2007 01:09 · Личное сообщение · #16 |
|
Создано: 20 февраля 2007 06:24 · Личное сообщение · #17 |
|
Создано: 20 февраля 2007 06:47 · Личное сообщение · #18 |
|
Создано: 20 февраля 2007 08:14 · Личное сообщение · #19 |
|
Создано: 20 февраля 2007 11:30 · Личное сообщение · #20 |
|
Создано: 20 февраля 2007 16:02 · Личное сообщение · #21 |
|
Создано: 05 марта 2007 08:56 · Личное сообщение · #22 |
|
Создано: 27 марта 2007 18:22 · Личное сообщение · #23 |
|
Создано: 28 марта 2007 10:16 · Личное сообщение · #24 |
|
Создано: 10 апреля 2007 19:21 · Личное сообщение · #25 |
|
Создано: 10 апреля 2007 20:11 · Личное сообщение · #26 |
|
Создано: 11 апреля 2007 08:31 · Личное сообщение · #27 Ну как же они работают, если ссылки hxxp://www.microapl.co.uk/download/ForDirk25Jan07.zip hxxp://www.microapl.co.uk/download/ForDirk21Feb07.zip hxxp://www.microapl.co.uk/download/ForDirk15March07.zip дают "Page not found" а в хуттп://www.microapl.co.uk/download/ лежит только это: Parent directory Demo68.html 3 Oct 06 08:42 4.2Kb Demo68Kto86.html 3 Oct 06 08:42 3.9Kb Demo86.html 3 Oct 06 08:42 4.5Kb MicroAPLmap.pdf 3 Oct 06 08:42 355.0Kb Mimic68.pdf 3 Oct 06 08:42 115.5Kb Mimic68mc.pdf 3 Oct 06 08:42 93.2Kb Relogix68KUserManual.pdf 27 Nov 06 14:00 461.7Kb Relogix86UserManual.pdf 27 Nov 06 14:01 405.1Kb RelogixWhitePaper.pdf 3 Oct 06 08:43 253.8Kb aplx_linux_pe_11.tgz 20 Feb 07 14:52 9.5Mb aplx_mac_2_0_9_updater.hqx 1 Sep 04 11:12 1.4Mb aplx_mac_3_1_1_updater.hqx 3 Oct 06 08:45 1.9Mb aplx_mac_demo_30.hqx 3 Oct 06 08:48 12.1Mb aplx_mac_demo_35.dmg 12 Mar 07 17:42 13.5Mb aplx_support_20.zip 3 Oct 06 08:48 1.7Mb aplx_support_30.zip 3 Oct 06 08:48 1.9Mb aplx_update_2_0_9.exe 30 Jul 04 14:11 1.3Mb aplx_update_3_2_1.exe 26 Feb 07 16:06 1.5Mb aplxlinux.gz 3 Oct 06 08:51 1.7Mb pa68kto86.pdf 3 Oct 06 08:51 319.8Kb pa68ktoppc.pdf 3 Oct 06 08:51 282.1Kb pa86demo_win.zip 3 Oct 06 08:51 1.3Mb pa86toppc.pdf 3 Oct 06 08:51 229.8Kb pademo68.zip 3 Oct 06 08:52 1.7Mb pademo68kto86.zip 3 Oct 06 08:52 1.8Mb setup_aplx_win_demo.exe 16 Feb 07 17:23 13.5Mb или тут хитрость какая есть? ![]() |
|
Создано: 11 апреля 2007 10:05 · Личное сообщение · #28 |
|
Создано: 11 апреля 2007 18:32 · Поправил: bash · Личное сообщение · #29 |
|
Создано: 11 апреля 2007 18:56 · Поправил: mak · Личное сообщение · #30 theCollision пишет: Malice А почему бы не напривить движение в более нужное русло? К примеру поиск ситуаций могущих привести в исходном коде к ошибке переполнения буфера. Нужная штука, как для тех кто хакает, так и для тех кто пишет ПО связанной с работой по локальной\глобальной сети! Ну да было бы супер ...или хотябы поддержка плагинов ...а там уже может что и будет ......а ты вооюще видел такую прогу в своем роде ...или таких нет вообще ? я тоже думал написать ...но как то времени не было ...но вот его больше стало ..инфу нарыть о всех методах переполнения ..и в путь ...но пример был бы кстати ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube ![]() |
![]() |
eXeL@B —› Программирование —› Анализатор кода |