информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetВсе любят медSpanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / job
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Decompiling (Software testing) 23.09.03 10:37  
Автор: SL Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Декомпиляция (пока бесплатная) программ, написанных на С. Цель - software testing. Пожелания - на crypto2001@mail.ru
Так держать! 24.09.03 22:56  
Автор: Tlo Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Правильной дорогой идете, товарищ.

Подобный output может очень сильно помогать в некоторых случаях, например, когда лень (или мало заплатили) реверсить генератор ключей, то подобное может быть полезно. Только в таком случае надо больший упор делать на слежение за переменными и аргумантами. А в пределе пытаться сворачивать if, for, switch и т.п.

Хотя продать Такое будет скорее всего мудрено... "Ильфак" (в кавычках, потому что он вообще-то не при больших делах) вон как извращается, а все равно имеют.
уж не Desquirr ли ты переточил ? 24.09.03 18:44  
Автор: redp Статус: Незарегистрированный пользователь
<"чистая" ссылка>
что значит - инструмент интерактивен ? IDA вон тоже типа интерактивна, только щит выдает пока руки не приложишь
Опиши pls подробнее на основе чего сделано (ни в жысть не поверю что с полного нуля)
Desquirr - вот его-то я и потестирую! 25.09.03 17:38  
Автор: SL Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Посмотрел я этот device. Что-то похожее я уже видел (кажется программа называлась dec, точно не помню). Выход очень похожий, но читать его просто ужасно.
Подход у обеих не очень правильный. Ну зачем писать свой дизассемблер, когда лучше IDA не найти. И зачем тупо декомпилировать весь код, в том числе startup, встроенные функции? У меня на вход дается ASM из IDA (м.б. даже уже обработанный, со своими названиями функций, переменных,...). Есть небольшие (несущественные ограничения). И можно из списка процедур выбирать те, которые требуется декомпилировать. (В том числе все). Декомпилирую - выложу исходники куда-нить
Нет, это результат многолетних разборов программ. 24.09.03 20:31  
Автор: SL Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> что значит - инструмент интерактивен ? IDA вон тоже типа
> интерактивна, только щит выдает пока руки не приложишь
> Опиши pls подробнее на основе чего сделано (ни в жысть не
> поверю что с полного нуля)
Это значит, что в ситуации, когда нет однозначного решения, программа выдает возможные варианты, а юзер выбирает тот, который по его мнению наиболее подходит для данной ситуации. Пример
xor esi, esi
esi после этого может использоваться просто как константа 0, а может быть переменной цикла.
Попробуй этот: %windir%\explorer.exe, результат запости сюда Ж) 23.09.03 15:08  
Автор: Killer{R} <Dmitry> Статус: Elderman
Отредактировано 23.09.03 15:20  Количество правок: 2
<"чистая" ссылка>
Или хотябы winmine.exe. И вообще C всякие бывают. Код скомпиленный Visual'ом, Borland'ом, Intel'ом или GCC - четыре большие разницы, причем ни в одном из них ты не увидишь первоначальных имен функий и переменных. И что значит декомпилить? Твоя (или еще чьято) прога на основании некоторых шаблнов кода и вызовов функций и вызовов из общих runtime библиотек может восстановить их места вызовов и параметры. А если компилятор (вижуал или борланд какой) компилял с оптимизацией под пень, при которой инструкции через пень-колоду идут? Причем переменные в регистрах идут? + развертка циклов всяких? и это тока общеиспользуемые и очевидные фичи. Вобщем муть это...
Фрагмент explorer.exe... 23.09.03 17:39  
Автор: SL Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Winmine - 16-битная, моя программа понимает только 32-битные
Explorer - не лучший пример, эти "программы" специально написаны так, чтобы существенно затруднить их reengineering. Тем не менее, вот тебе фрагмент. С переходами проблема, т.к. они вышли за scope рассматриваемого мною куска кода.

sub_403131
{
var_C = 0;
dword_415250 = 0;
dword_4151DC = sub_4021B2(0x43);
if (GetShellWindow() ? 0)
jnz short loc_403184
if (dword_4151DC ? 0)
jnz short loc_403184
if (SHRegGetUSValueA("Software\Microsoft\Windows\Internet Settings","AutoConfigURL",0,0,0,0,0,0) ? 0)
jz loc_40A6B0
loc_403184:
InitializeCriticalSection(&unk_4151A0);
sub_403436();
dword_415240 = arg_0;
RegCreateKeyA(0x80000001,"Software\Microsoft\Windows\CurrentVersion\Explorer",&dword_415258);
var_8 = sub_403455();
if (var_8 != 0)
{
ShellAboutW(0,0);
}
if (SHELL32_100(0x800000) ? 0)
jnz loc_40A6C0
var_4 = 4;
j_SHELL32_509(dword_415258,&aDesktopprocess,0,&var_10,&dword_415254,&var_4);
loc_4031FD:
if (var_8 ? 0)
jz loc_40A6CF
dword_4152B4 = GetTickCount();
sub_40354F(1);
SetProcessShutdownParameters(2,0);
PeekMessageA(&var_68,0,0x12,0x12,0);
dword_4151D8 = SHELL32_181(0,4);
SHELL32_660(1);
if (dword_4151D8 ? 0)
jz loc_40A727
sub_406408(1);
sub_4035A4();
var_4 = sub_40702A(0x80000002,"Software\Microsoft\Windows\CurrentVersion\RunOnce",3);
loc_403275:
sub_403630(1,1);
sub_403669(0,0);
if (dword_4151DC ? 0)
jnz loc_40A775
loc_40328F:
sub_403895(arg_0);
sub_40716C();
if (dword_4151DC == 0)
{
sub_4038EA();
}
if (var_C == 0)
{
sub_403924();
}
if (sub_40392D() ? 0)
jz loc_40A77F
loc_4032C0:
if (sub_403967() ? 0)
jnz loc_40A6FD
if (sub_40399A(arg_0) ? 0)
jz loc_40A6FD
sub_40716C();
if (dword_4151D8 ? 0)
jz short loc_403315
if (dword_4151DC ? 0)
jnz short loc_403315
$a = GetDesktopWindow(0x400,0,0);
SendMessageA($a);
if (var_4 ? 0)
jnz loc_40A796
loc_40330F:
sub_407841(0);
loc_403315:
sub_407910(arg_8,arg_C);
if (dword_415254 ? 0)
jnz loc_40A7C8
loc_40332C:
dword_4152B8 = GetTickCount();
if (dword_415000 != 0)
{
$j = GetForegroundWindow();
if ($j ? 0)
jz short loc_403363
GetWindowThreadProcessId($j,&arg_0);
if (arg_0 == GetCurrentProcessId())
{
$j = 0;
}
if ($j ? 0)
jnz short loc_40336F
loc_403363:
SetForegroundWindow(dword_415000);
}
loc_40336F:
sub_407947(dword_4152BC);
jmp loc_40A825
}
мдааа.... а может лучше все таки IDAшкой по старинке? 23.09.03 17:43  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
мдааа.... а может лучше все таки IDAшкой по старинке? 23.09.03 18:22  
Автор: SL Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Если ты помнишь, до IDA были дизассемблеры, которые автоматически пытались дизассемблировать программы. Но этот процесс в ряде случаев приводил к плохим результатам. Были попытки сделать дизассемблеры более интеллектуальными, например, небезизвестный Sourcer (так что ли он назывался, уже и не помню) имел несколько опций для управления процессом. Однако это плохо помогало. Потом Ильфак закрыл проблему своим интерактивным дизассемблером - процесс на начальном этапе все-таки остался близким к автоматическому, зато юзер может улучшать результат сколь-угодно долго. И это самый правильный метод решения.
IDA не решает задачи декомпиляции, хотя в него можно было бы вложить кое-что... Да она и не нужна с точки зрения назначения. Декомпилировать в IDA можно, только очень занудно. Вот я и попробовал облегчить жизнь. Хотелось бы довести свою программу до какого-то логического конца, выжать из нее побольше. На большее пока не претендую.
Я говорю о тестировании, а не о проблеме в целом... 23.09.03 16:46  
Автор: SL Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Или хотябы winmine.exe. И вообще C всякие бывают. Код
> скомпиленный Visual'ом, Borland'ом, Intel'ом или GCC -
> четыре большие разницы, причем ни в одном из них ты не
> увидишь первоначальных имен функий и переменных. И что
> значит декомпилить? Твоя (или еще чьято) прога на основании
> некоторых шаблнов кода и вызовов функций и вызовов из общих
> runtime библиотек может восстановить их места вызовов и
> параметры. А если компилятор (вижуал или борланд какой)
> компилял с оптимизацией под пень, при которой инструкции
> через пень-колоду идут? Причем переменные в регистрах идут?
> + развертка циклов всяких? и это тока общеиспользуемые и
> очевидные фичи. Вобщем муть это...
Программа интерактивная, поэтому многие вопросы решает сам пользователь (когда ситуация многозначная), а программа существенно облегчает процесс. Например, здорово разбирает инструкции c Floating Point
Я говорю о тестировании, а не о проблеме в целом... 23.09.03 17:41  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
> Программа интерактивная, поэтому многие вопросы решает сам
> пользователь (когда ситуация многозначная), а программа
> существенно облегчает процесс. Например, здорово разбирает
> инструкции c Floating Point
ну так я жу сказал - winmine.exe можешь, или notepad.exe - он еще проще, но все это на С писано, а исходники у микрософта лежат Ж). А насчет интерактивности - так тут IDA рулит, хоть и не Сшнй код выдает, но имхо лучше нормальный асм чем С фиг знает какой.
В смысле, ты декомпилер тестируешь? Ну выложи его в Сеть, потестим... 23.09.03 11:22  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
Или ты предлагаешь проги тебе присылать, ты будешь их декомпилить, и результаты отсылать обратно? :)
Не против, если я его сам для начала в реале потестирую?... 23.09.03 14:30  
Автор: SL Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Или ты предлагаешь проги тебе присылать, ты будешь их
> декомпилить, и результаты отсылать обратно? :)
Исполняемый файл + указание интервала адресов для декомпиляции (для начала не очень много, пож-ста)
Нет, только вопросов несколько (2 штуки)... 23.09.03 14:54  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
> Исполняемый файл + указание интервала адресов для
> декомпиляции (для начала не очень много, пож-ста)

1) Почему именно C, а не любой другой *.exe? В смысле, можно любой другой, но декомпилер выдаст C-подобный код?

2) Тебе адреса от Image Base или смещения в *.exe?
2 штуки ответов... 23.09.03 16:37  
Автор: SL Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> 1) Почему именно C, а не любой другой *.exe? В смысле,
> можно любой другой, но декомпилер выдаст C-подобный код?
>
Кстати, пока только 32-битные программы, с 16 битами под вопросом (исчезающая фича, хотя во многих смыслах интересная)
Ну не любой, конечно, сам понимаешь. Выдача действительно псевдо-С.
> 2) Тебе адреса от Image Base или смещения в *.exe?
От ImageBase
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach