информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Портрет посетителяСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Microsoft обещает радикально усилить... 
 Ядро Linux избавляется от российских... 
 20 лет Ubuntu 
главная обзор 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