Сейчас на форуме: bartolomeo, asfa, _MBK_, Adler (+7 невидимых)

 eXeL@B —› Вопросы новичков —› Компиляция файла ассемблера, созданного декомпилятором
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 12 ноября 2011 16:01 · Поправил: Dim77
· Личное сообщение · #1

Нужно скомпилить ассемплеровский файл, созданный декомпилятором, в данном случае IDA 6.1. FASM не берет, пишет в процессе, что у него закончилась память, MASM ругается на некоторые строчки, говоря что: : error A2066: incompatible CPU mode and segment size.
В данном случае имеется в ввиду строка:

_text segment para public 'CODE' use32
assume cs:_text

Как лучше подойти к решению проблемы?

Файл ассемплера залил Discipl2.asm (32.28 MB)



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 12 ноября 2011 16:09
· Личное сообщение · #2

Dim77
Я конечно извиняюсь,сорс не смотрел но что то меня гложат сомнения,а правил ли ты его или сразу с иды компилишь?




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 12 ноября 2011 16:18
· Личное сообщение · #3

32 мегабайта асма)) сильно это вы..

http://erfaren.narod.ru/Asm/Erfaren005.htm
вот почитайте там вроде мучились, и даже скрипты какие то писали и даже вроде скомпилялось

| Сообщение посчитали полезным: Dim77

Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 12 ноября 2011 16:37
· Личное сообщение · #4

Править начал, но хотелось бы понять общие принципы, что IDA не так декомпилирует, на что следует обращать внимание, как декомпилятор настроить, чтобы поменьше править было...

Так что руководство от reversecode очень кстати, спасибо. Буду изучать.

Одновременно в параллельной теме пытаюсь заставить программу работать под отладчиком. Это две стороны одной медали - сначала запустить под отладчиком, потом модифицировать, затем обратно скомпилить.



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 12 ноября 2011 16:50
· Личное сообщение · #5

Dim77
Единого подхода нет,у меня лично IDA часто не правильно определяет границы функций,путает данные и код,вобщем содрать исходник такого размера для не слабых духом,но для автоматизации рутины советую изучить скрипты,благо выбор есть.



Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 02 декабря 2011 01:18
· Личное сообщение · #6

После прочтения статей erfaren(а), очень полезных! удалось устранить многие ошибки компиляции. Осталась одна большая ошибка (и несколько мелких), а именно: undefined symbol... Насколько я понимаю проблема вроде бы в отсутствующем .lib файле , но дело в том, что для всех библиотек программы я создал .lib файлы. И те функции, на которые компилятор ругается там точно есть. Вот пример ошибок и пример строки кода на которую ругается компилятор:

Assembling: D2debug261111~.asm
D2debug261111~.asm(197) : error A2179: structure improperly initialized
D2debug261111~.asm(197) : error A2065: expected : )
D2debug261111~.asm(1166) : error A2008: syntax error : SubStr
D2debug261111~.asm(18603) : error A2008: syntax error : SubStr
D2debug261111~.asm(55008) : error A2008: syntax error : div
D2debug261111~.asm(16233) : error A2008: syntax error : fabs
D2debug261111~.asm(1537) : error A2088: END directive required at end of file
D2debug261111~.asm(281) : error A2006: undefined symbol : loc_6866BC
D2debug261111~.asm(282) : error A2006: undefined symbol : _EH_prolog
D2debug261111~.asm(300) : error A2006: undefined symbol : aString1
D2debug261111~.asm(303) : error A2006: undefined symbol : strlen
D2debug261111~.asm(309) : error A2006: undefined symbol : a00
D2debug261111~.asm(311) : error A2006: undefined symbol : strlen
D2debug261111~.asm(317) : error A2006: undefined symbol : a6t
D2debug261111~.asm(319) : error A2006: undefined symbol : strlen
D2debug261111~.asm(325) : error A2006: undefined symbol : aA0
D2debug261111~.asm(327) : error A2006: undefined symbol : strlen
D2debug261111~.asm(333) : error A2006: undefined symbol : a02
D2debug261111~.asm(335) : error A2006: undefined symbol : strlen
D2debug261111~.asm(341) : error A2006: undefined symbol : a6_0
D2debug261111~.asm(343) : error A2006: undefined symbol : strlen
D2debug261111~.asm(350) : error A2006: undefined symbol : _exit_0
D2debug261111~.asm(361) : error A2006: undefined symbol : byte_83B1EC
D2debug261111~.asm(363) : error A2006: undefined symbol : byte_83B1EC
D2debug261111~.asm(364) : error A2006: undefined symbol : byte_83B1ED
D2debug261111~.asm(367) : error A2006: undefined symbol : byte_83B1ED
D2debug261111~.asm(422) : error A2006: undefined symbol : unknown_libname_59

Строки с 281 по 301:

mov eax, offset loc_6866BC ; .text:00401000
call _EH_prolog
sub esp, 20h ; .text:0040100A
push ebx ; .text:0040100D
push esi ; .text:0040100E
mov esi, ecx ; .text:0040100F
xor ebx, ebx ; .text:00401011
push edi ; .text:00401013
mov [ebp+var_18], esi ; .text:00401014
mov [ebp+var_10], ebx ; .text:00401017
mov [esi], ebx ; .text:0040101A
lea eax, [esi+4] ; .text:0040101C
mov [ebp+var_4], ebx ; .text:0040101F
push eax ; .text:00401022
call sub_530AE7 ; .text:00401023
mov [ebp+var_20], ebx ; .text:00401028
mov [ebp+var_24], ebx ; .text:0040102B
mov [ebp+var_2C], ebx ; .text:0040102E
mov [ebp+var_28], ebx ; .text:00401031
mov edi, offset aString1 ; "X" ; .text:00401034
mov byte ptr [ebp+var_4], 2 ; .text:00401039




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 02 декабря 2011 01:24 · Поправил: reversecode
· Личное сообщение · #7

Dim77 пишет:
D2debug261111~.asm(282) : error A2006: undefined symbol : _EH_prolog

_EH_prolog ну так проверте есть она в вашем lib или нет
Dim77 пишет:
D2debug261111~.asm(281) : error A2006: undefined symbol : loc_6866BC

Dim77 пишет:
mov eax, offset loc_6866BC ; .text:00401000

ну так проверте есть у вас леибл loc_6866BC или нет

тоесть я так понимаю вы собираете asm не зная даже азов?



Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 02 декабря 2011 01:37 · Поправил: Dim77
· Личное сообщение · #8

_EH_prolog - есть, я же про это выше и написал... Я собственно этот .lib сам и скомилировал.

леибл loc_6866BC - .lib файлы нужны для линковки функций насколько я понимаю, при чем тут лейбл?




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 02 декабря 2011 01:45 · Поправил: reversecode
· Личное сообщение · #9

стоп что вы куда компилируете?
Dim77 пишет:
D2debug261111~.asm(282) : error A2006: undefined symbol : _EH_prolog

на етапе компиляции оно ничего не должно вроде выдавать
это extern функция должна быть, т.е. подключаемая
а значит в .obj оно должно сначала собратся

Dim77 пишет:
леибл loc_6866BC

это вообще насколько я помню seh таблица или хендлер, посмотрите есть она у вас вообще или нет
это леибл тоесть функция на ссылающаяся на ___CxxFrameHandler с таблицей
вообще разберитесь где и как что обьявлено
может в области видимости не попадает
или прототипа нет



Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 02 декабря 2011 01:55
· Личное сообщение · #10

reversecode пишет:
стоп что вы куда компилируете?


Компилирую D2debug261111~.asm файл. В headers.inc прописал все lib файлы, которые могут понадобиться. В одном из них точно есть EH_Prolog. Этот lib файл я создал из соответствующего .def.

reversecode пишет:
на етапе компиляции оно ничего не должно вроде выдавать


Да, это должно быть важно потом на этапе линковки, поэтому я и в недоумении, ибо не вижу патерна в ругательствах компилятора...


reversecode пишет:
это вообще насколько я помню seh таблица или хендлер, посмотрите есть она у вас вообще или нет


Проверю.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 02 декабря 2011 01:58 · Поправил: reversecode
· Личное сообщение · #11

Dim77 пишет:
Компилирую D2debug261111~.asm файл. В headers.inc прописал все lib файлы, которые могут понадобиться. В одном из них точно есть EH_Prolog. Этот lib файл я создал из соответствующего .def.

фокус в подчеркиваниях
в каком то из (или вызываемом или в екстерн) должно быть на одно меньше, я уже не помню точно

т.е. к примеру в коде
call _EH_Prolog
а в екстерн должны быть __EH_Prolog
или наоборот



Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 02 декабря 2011 17:44
· Личное сообщение · #12

http://rebl0g.wordpress.com/2011/09/08/реассемблирование-full-version/ на правах рекламы

-----
Реверсивная инженерия - написание кода идентичного натуральному




Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 03 декабря 2011 02:29 · Поправил: Dim77
· Личное сообщение · #13

call _EH_Prolog

С этим разобрался. Я несколько раз сохранял асм файл и в одном из сохранений забыл раскрыть все процедуры... Спасибо за ответы, сие была ложная тревога.

Теперь компилятор ругается на следующее: D2debug2.asm(3964) : fatal error A1010: unmatched block nesting : ?reserve_message@?$_Order_node_base@W4agent_status@Concurrency@@@Concurrency@@UAE_NH@Z_0

причем по этому адресу такого блока нет. Там есть следующее:

sub_403166 proc near ; CODE XREF: sub_4028B6+8Ep ; .text:00403166

arg_0 = dword ptr 4 ; .text:00403166

mov ecx, [ecx+8] ; .text:00403166
push [esp+arg_0] ; .text:00403169
add ecx, 0Ch ; .text:0040316D
call sub_404046 ; .text:00403170
retn 4 ; .text:00403175
sub_403166 endp ; .text:00403175

строка 3964: call sub_404046 ; .text:00403170

Hexxx пишет:
http://rebl0g.wordpress.com/2011/09/08/реассемблирование-full-version/ на правах рекламы


Спасибо. Читаю, просвещаюсь... До данного момента использовал метод Erfaren(a) (см. ссылку выше), все работает, включая большое количество скриптов, но с компилятором вот приходится возиться.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 03 декабря 2011 02:40
· Личное сообщение · #14

Dim77 пишет:
Теперь компилятор ругается на следующее: D2debug2.asm(3964) : fatal error A1010: unmatched block nesting : ?reserve_message@?$_Order_node_base@W4agent_status@Concurrency@@@Concurrency@@UAE_NH@Z_0

это IDA неправильно распознала
поставте там простой безыменный sub_403166
или как он у вас там

и вообще вы IDA после анализа смотрели редактировали?
а то такое чуство что сразу прямым копипастом))



Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 03 декабря 2011 14:48 · Поправил: Dim77
· Личное сообщение · #15

reversecode пишет:
это IDA неправильно распознала
поставте там простой безыменный sub_403166


Не совсем понял, каким образом можно здесь подставить безымянную сабрутину, если существует явное определение процедуры с этим неудобоваримым именем?

Кажется нашел в чем дело, хотя и не до конца разобрался. СкриптEfraren(a), который соединяет чанки и чунки почему-то разбил эту сабрутину ?reserve_message... так, что ее конец оказался посередине другого кода (line 200572 )) ), а начало я вообще пока не нашел.

reversecode пишет:
и вообще вы IDA после анализа смотрели редактировали?
а то такое чуство что сразу прямым копипастом))


Руками поменял некоторые имена локальных переменных, чтобы а) они не повторялись, б) не были бы командами ассемблера. Хотя, я это сделал возможно зря, так как тогда у меня один из скриптов Erfaren(a) не работал, а он как раз заменяет имена локальных переменных на удобоваримые значения. Вообще же сейчас работать через компилятор легче, чем все сначала причесывать руками ибо в коде 1184790 строк и все их руками просматривать, это как-то не очень... ))




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 03 декабря 2011 14:53
· Личное сообщение · #16

то ошибка IDA в распознании функции
поэтому я и сказал что прежде чем генерить листинг
нужно было в ручную проверить все функции и правильно им имена поназначать
ложно определенные убрать
плохо определенные указать явно
например memmove/memcpy IDA никогда не находит



Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 03 декабря 2011 16:07 · Поправил: Dim77
· Личное сообщение · #17

А можно на примере? Функция, как вы сказали, эта странная, ибо все что она делает это:

.text:00475466 ?reserve_message@?$_Order_node_base@W4agent_status@Concurrency@@@Concurrency@@UAE_NH@Z_0 proc near
.text:00475466 ; CODE XREF: sub_47542C+11j
.text:00475466 ; sub_47542C+22j ...
.text:00475466 xor al, al
.text:00475468
.text:00475468 locret_475468: ; CODE XREF: sub_47542C+5Aj
.text:00475468 retn 4
.text:00475468 ?reserve_message@?$_Order_node_base@W4agent_status@Concurrency@@@Concurrency@@UAE_NH@Z_0 endp

Когда я по ней прохожу скриптом для убирания чанков и чунков, то этот скрипт куда-то переносит тело функции (или я глючу), а с концом не знает что делать и оставляет висеть ни к чему не прикрепленным. Теперь, чтобы перенаправить все вызовы этой функции, мне нужно знать, какой функцией ее заменить. И мне не очень понятно, как это определить?

Сейчас взял и вставил определение этой функции (без переименования), как выше написано в код, ошибка исчезла, теперь ругается на следующую. Но меня терзают смутные сомнения, что вместо определения неправильных функций я должен перенаправить обращения к правильным функциям, но я не очень вижу, как их найти, эти правильные функции...




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 03 декабря 2011 16:17
· Личное сообщение · #18

функция определена не правильно
в IDA подводим курсор под ее имя и удаляем этот прототип
далее вообще нужно пересмотреть весь листинг в IDA
может это и не функция а окончание ее
а может это вообще виртуальный вызов

прежде чем генерить asm файл в ida, нужно было все проверить и подредактировать

дайте оригинал программы если она не большая ~2мб смогу стянуть глянуть



Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 03 декабря 2011 16:31 · Поправил: Dim77
· Личное сообщение · #19

кажется разобрался. В коде есть комменты типа: ; public: unsigned int __thiscall Concurrency::details::SchedulerProxy::GetNumNestedThreadSubscriptions(void).
Также в коде есть комменты с указанием на явное имя этой функции типа: ; int __thiscall sub_401506(int, int) Теперь вызовы первой (неправильной) функции заменяем на вызовы второй (sub_401506), а определение первой убираем, правильно? При этом sub_401506 не нужно делать явной (int __thiscall)?

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

Асм большой - около 54 МБ, что является частью проблемы )). Могу выложить... Или вы хотели ехе-шник? Ехе- 4.4МБ. Выложить?




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 03 декабря 2011 16:36 · Поправил: reversecode
· Личное сообщение · #20

асм не нужен
давайте оригинальный exe с которого генерился asm
если екзе нет и вы это все правите только в asm, то тогда вас ждут много проблем и подводных камней

Dim77 пишет:
Теперь вызовы первой (неправильной) функции заменяем на вызовы второй (sub_401506), а определение первой убираем,

да
Dim77 пишет:
При этом sub_401506 не нужно делать явной (int __thiscall)?

и да и нет, thiscall итд нужно для hexrays или для того кто разбирает код или для языков высокого уровня

компилятор же будет генерить код все равно по asm, ему конвершинал колл не нужны
Dim77 пишет:
Ехе- 4.4МБ. Выложить?

давайте, хотя я вижу вы уже во всем разобрались

вообще перед генерацией asm листинга, на етапе разбора exe в начале нужно было поубирать много опций которые IDA генерит в большей степени для анализа/разбора а для asm листинга они лишние и не нужны



Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 03 декабря 2011 16:53 · Поправил: Hexxx
· Личное сообщение · #21

Dim77 пишет:
но с компилятором вот приходится возиться.


Как я вас понимаю. (с)
Но все ваши проблемы из-за того что вы оставили всякое распознавание типов, библиотечных функций и т.п. Голую базу гораздо лучше выгонять в ассемблер и потом пробовать скомпилировать.

-----
Реверсивная инженерия - написание кода идентичного натуральному




Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 03 декабря 2011 17:12
· Личное сообщение · #22

--> D2Exe <--
--> Shw32.dll (110.03 KB) <--
--> C4dll-R.dll (127.5 KB) <--
--> Msvcrt.dll (271.27 KB) <--
--> Mss32.dll (338.5 KB) <--
--> Ha312w32.dll (355.5 KB) <--

А что делать с кодом, который внутри неправильной функции - удалить вместе с определением?

reversecode пишет:
вообще перед генерацией asm листинга, на етапе разбора exe в начале нужно было поубирвать много опций которые IDA генерит в большей степени для анализа/разбора а для asm листинга они лишние и не нужны


Возможно так и сделаю, просто было жаль времени, которое я потратил на переименование переменных, чтобы их компилятор понимал...




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 03 декабря 2011 17:15 · Поправил: reversecode
· Личное сообщение · #23

msvcrt это стандартная либа))

Dim77 пишет:
А что делать с кодом, который внутри неправильной функции - удалить вместе с определением?

непойму вы о чем?
Dim77 пишет:
Возможно так и сделаю, просто было жаль времени, которое я потратил на переименование переменных, чтобы их компилятор понимал...

автоматизируйте это
что бы скрипты сами все за вас делали до генерации asm файла

Dim77 пишет:
text:00475466 ?reserve_message@?$_Order_node_base@W4agent_status@Concurrency@@@Concurrency@@UAE_NH@Z_0 proc near
.text:00475466 ; CODE XREF: sub_47542C+11j

да кстати это код с exe? что бы я правильно смотрел



Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 03 декабря 2011 17:23 · Поправил: Dim77
· Личное сообщение · #24

Есть определение функции: .text:00475466 ?reserve_message@?$_Order_node_base@W4agent_status@Concurrency@@@Concurrency@@UAE_NH@Z_0 proc near
.text:00475466 ; CODE XREF: sub_47542C+11j
.text:00475466 ; sub_47542C+22j ...
.text:00475466 xor al, al
.text:00475468
.text:00475468 locret_475468: ; CODE XREF: sub_47542C+5Aj
.text:00475468 retn 4
.text:00475468 ?reserve_message@?$_Order_node_base@W4agent_status@Concurrency@@@Concurrency@@UAE_NH@Z_0 endp

Внутри есть код, который не будет использоваться ибо это определение я удаляю, а вызовы этой функции перенаправляю на __thiscall sub_401506(int, int).

reversecode пишет:
да кстати это код с exe? что бы я правильно смотрел

Да, код с ехе.



Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 03 декабря 2011 17:24 · Поправил: Dim77
· Личное сообщение · #25

reversecode пишет:
да кстати это код с exe? что бы я правильно смотрел


Да, код с ехе.

Hexxx пишет: Но все ваши проблемы из-за того что вы оставили всякое распознавание типов, библиотечных функций и т.п.

Я уже чувствую, что придется попробовать еще раз. А то придется руками все править....




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 03 декабря 2011 17:27 · Поправил: reversecode
· Личное сообщение · #26

вы удалятее определение поскольку оно фейк
и перенаправляете на нормальное определение
sub_475466

вообщем то кривое определение IDA
вот нормальное ее содержимое
Code:
  1. .text:0047542C sub_47542C      proc near               ; CODE XREF: sub_471C98+7p
  2. .text:0047542C
  3. .text:0047542C arg_0           = dword ptr  4
  4. .text:0047542C
  5. .text:0047542C                 mov     eax, [esp+arg_0]
  6. .text:00475430                 cmp     eax, 0Ch
  7. .text:00475433                 jg      short loc_475444
  8. .text:00475435                 cmp     eax, 8
  9. .text:00475438                 jge     short loc_475484
  10. .text:0047543A                 cmp     eax, 2
  11. .text:0047543D                 jl      short loc_475466
  12. .text:0047543F                 cmp     eax, 4
  13. .text:00475442                 jmp     short loc_475464
  14. .text:00475444 ; ---------------------------------------------------------------------------
  15. .text:00475444
  16. .text:00475444 loc_475444:                             ; CODE XREF: sub_47542C+7j
  17. .text:00475444                 cmp     eax, 16h
  18. .text:00475447                 jg      short loc_475455
  19. .text:00475449                 jz      short loc_475484
  20. .text:0047544B                 cmp     eax, 0Fh
  21. .text:0047544E                 jl      short loc_475466
  22. .text:00475450                 cmp     eax, 14h
  23. .text:00475453                 jmp     short loc_475464
  24. .text:00475455 ; ---------------------------------------------------------------------------
  25. .text:00475455
  26. .text:00475455 loc_475455:                             ; CODE XREF: sub_47542C+1Bj
  27. .text:00475455                 cmp     eax, 21h
  28. .text:00475458                 jg      short loc_47546B
  29. .text:0047545A                 jz      short loc_475484
  30. .text:0047545C                 cmp     eax, 18h
  31. .text:0047545F                 jl      short loc_475466
  32. .text:00475461                 cmp     eax, 1Ah
  33. .text:00475464
  34. .text:00475464 loc_475464:                             ; CODE XREF: sub_47542C+16j
  35. .text:00475464                                         ; sub_47542C+27j
  36. .text:00475464                 jle     short loc_475484
  37. .text:00475466
  38. .text:00475466 loc_475466:                             ; CODE XREF: sub_47542C+11j
  39. .text:00475466                                         ; sub_47542C+22j
  40. .text:00475466                                         ; sub_47542C+33j
  41. .text:00475466                                         ; sub_47542C+42j
  42. .text:00475466                                         ; sub_47542C+51j
  43. .text:00475466                                         ; sub_47542C+56j
  44. .text:00475466                 xor     al, al
  45. .text:00475468
  46. .text:00475468 locret_475468:                          ; CODE XREF: sub_47542C+5Aj
  47. .text:00475468                 retn    4
  48. .text:0047546B ; ---------------------------------------------------------------------------
  49. .text:0047546B
  50. .text:0047546B loc_47546B:                             ; CODE XREF: sub_47542C+2Cj
  51. .text:0047546B                 cmp     eax, 28h
  52. .text:0047546E                 jl      short loc_475466
  53. .text:00475470                 cmp     eax, 2Ah
  54. .text:00475473                 jle     short loc_475484
  55. .text:00475475                 cmp     eax, 37h
  56. .text:00475478                 jz      short loc_475484
  57. .text:0047547A                 cmp     eax, 3Bh
  58. .text:0047547D                 jle     short loc_475466
  59. .text:0047547F                 cmp     eax, 3Dh
  60. .text:00475482                 jg      short loc_475466
  61. .text:00475484
  62. .text:00475484 loc_475484:                             ; CODE XREF: sub_47542C+Cj
  63. .text:00475484                                         ; sub_47542C+1Dj
  64. .text:00475484                                         ; sub_47542C+2Ej
  65. .text:00475484                                         ; sub_47542C:loc_475464j
  66. .text:00475484                                         ; sub_47542C+47j
  67. .text:00475484                                         ; sub_47542C+4Cj
  68. .text:00475484                 mov     al, 1
  69. .text:00475486                 jmp     short locret_475468
  70. .text:00475486 sub_47542C      endp

говорюже перед генерацией asm
нужно ручками поработать, на то IDA и интерактивная
если вам нужно просто пытатся выхлоп компилировать использовали бы старый Sourcer

а вообще хорошая C++ программа, с именами классов итд
взяли бы и реверснули ее всю, больше бы скилов себе открыли чем банальное переганяние в asm

в c++ много подводных камней, хз как вы там с ними в asm справитесь ...

и натравите еще rtti4 скрипт что бы rtti разобралось
чуствую оно у вас в асме вообще никакое

Code:
  1. .text:00509530 _exit_0         proc near

вообще не правильный прототип
вообщем там руками неменьше месяца работать, прежде чем asm генерить



Ранг: 112.9 (ветеран), 186thx
Активность: 0.090.01
Статус: Участник

Создано: 03 декабря 2011 17:52
· Личное сообщение · #27

Dim77
А какая конечная цель? Может будет проще прицепить свою длл и в ней уже сделать то что ты хочешь?
Просто кода здесь около 3 МБ и даже если скомпилить асм текст, нет гарантий что все будет 100% работать.



Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 03 декабря 2011 21:10 · Поправил: Dim77
· Личное сообщение · #28

reversecode пишет:
говорюже перед генерацией asm
нужно ручками поработать, на то IDA и интерактивная


Думаю, что сгенерю по новой с рекомендациями по настройкам и посмотрим, что получится. Как править я понял, придется заняться.

Кстати, а как найти правильную функцию для exit_0?
В коде нет никаких подсказок, что это могло бы быть...


reversecode пишет:
а вообще хорошая C++ программа, с именами классов итд
взяли бы и реверснули ее всю, больше бы скилов себе открыли чем банальное переганяние в asm


Интересная мысль и действительно очень заманчиво... )) Хотелось бы правда еще иметь и асмовский вариант под рукой, так сказать short term solution.

vden пишет:
А какая конечная цель? Может будет проще прицепить свою длл и в ней уже сделать то что ты хочешь?


Конечная цель раширить возможности программы путем вставления туда своего кода. На начальном этапе это можно было бы сделать по аналогии с тем, что уже есть, т.к. код, который нужно будет написать идентичен тому, что уже есть.

А как такую длл подцеплять или предлагаете одну из известных длл расширить?




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 03 декабря 2011 21:14 · Поправил: reversecode
· Личное сообщение · #29

Dim77 пишет:
А как такую длл подцеплять

dll inject function
в гейм деве все так делают
столько бабла тратится на всякие инжекты переинжекты
я даже удивляюсь
они бы за это время уже раза три полностью реверснули, но не хотят
играть им побыстрее и уже завтра хочется)))

Dim77 пишет:
Кстати, а как найти правильную функцию для exit_0?
В коде нет никаких подсказок, что это могло бы быть...

никак
это IDA ложно сработала
там просто какойто sub_xxxxxxxxx

PS как то изучал игруху в которую раза три инжектился всякий доп код и раза два дописывались доп секции .data .text .... это кошмар))



Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 03 декабря 2011 22:04
· Личное сообщение · #30

reversecode пишет:
они бы за это время уже раза три полностью реверснули, но не хотят
играть им побыстрее и уже завтра хочется)))


Ну в данном случае дело не только в этом, а в том числе и в том, чтобы энтузиазм тех, кто параллельно делает графику и т.д. не угас ))

reversecode пишет:
это IDA ложно сработала
там просто какойто sub_xxxxxxxxx


Хмм, так без подсказок в коде найти нужный sub_xxxxxxxxx неполучается.. )


reversecode пишет:
как то изучал игруху в которую раза три инжектился всякий доп код и раза два дописывались доп секции .data .text .... это кошмар))


Дык, я думаю оно все же быстрее инжектнуть, чем обратно реверсить. Вот народ и не заморачвается.
Опять же нужно себя настроить на довольно долгий проект, хотя как вы и сказали можно многому научиться в процессе.


. 1 . 2 . >>
 eXeL@B —› Вопросы новичков —› Компиляция файла ассемблера, созданного декомпилятором
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати