eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
обновлён 2 декабря!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: tan99932 (+2 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Основной форум —› unknown_libname_1 при риппинге бинаря
Посл.ответ Сообщение


Ранг: 172.2 (ветеран)
Статус: Участник

Создано: 29 июня 2008 14:33 · Поправил: Модератор New!
Цитата · Личное сообщение · #1

рипаю код (либа Microsoft Visual C++ 6.0 DLL), большая непонятное слово работы уже сделана (непонятное слово касается функционала) но вот без кода рантайма масм компилить отказывается.

вот функа

.text:10008CE3 sub_10008CE3 proc near ; CODE XREF: sub_100073E0+Dp
.text:10008CE3 ; sub_100073E0+16p ...
.text:10008CE3
.text:10008CE3 var_28 = dword ptr -28h
.text:10008CE3 var_24 = dword ptr -24h
.text:10008CE3 var_20 = dword ptr -20h
.text:10008CE3 var_1C = dword ptr -1Ch
.text:10008CE3 var_10 = dword ptr -10h
.text:10008CE3 var_4 = dword ptr -4
.text:10008CE3 arg_0 = dword ptr 8
.text:10008CE3
.text:10008CE3 ; FUNCTION CHUNK AT .text:10008D56 SIZE 0000004F BYTES
.text:10008CE3 ; FUNCTION CHUNK AT .text:10008DAE SIZE 0000001E BYTES
.text:10008CE3
.text:10008CE3 push ebp
.text:10008CE4 mov ebp, esp
.text:10008CE6 push 0FFFFFFFFh
.text:10008CE8 push offset unk_100101B0
.text:10008CED push offset unknown_libname_1 ; Microsoft VisualC 2-8/net runtime

->>

.text:1000B0A0 ; =============== S U B R O U T I N E =======================================
.text:1000B0A0
.text:1000B0A0 ; Microsoft VisualC 2-8/net runtime
.text:1000B0A0 ; Attributes: library function bp-based frame
.text:1000B0A0
.text:1000B0A0 unknown_libname_1 proc near ; DATA XREF: sub_10008BE7+Ao
.text:1000B0A0 ; sub_10008CE3+Ao ...
.text:1000B0A0
.text:1000B0A0 var_8 = dword ptr -8
.text:1000B0A0 var_4 = dword ptr -4
.text:1000B0A0 arg_0 = dword ptr 8
.text:1000B0A0 arg_4 = dword ptr 0Ch
.text:1000B0A0 arg_8 = dword ptr 10h
.text:1000B0A0
.text:1000B0A0 push ebp
.text:1000B0A1 mov ebp, esp
.text:1000B0A3 sub esp, 8
.text:1000B0A6 push ebx
.text:1000B0A7 push esi
.text:1000B0A8 push edi
.text:1000B0A9 push ebp
.text:1000B0AA cld
.text:1000B0AB mov ebx, [ebp+arg_4]
.text:1000B0AE mov eax, [ebp+arg_0]
.text:1000B0B1 test dword ptr [eax+4], 6
.text:1000B0B8 jnz loc_1000B140
.text:1000B0BE mov [ebp+var_8], eax
.text:1000B0C1 mov eax, [ebp+arg_8]
.text:1000B0C4 mov [ebp+var_4], eax
.text:1000B0C7 lea eax, [ebp+var_8]
.text:1000B0CA mov [ebx-4], eax
.text:1000B0CD mov esi, [ebx+0Ch]
.text:1000B0D0 mov edi, [ebx+8]
.text:1000B0D3
.text:1000B0D3 loc_1000B0D3: ; CODE XREF: unknown_libname_1+90j
.text:1000B0D3 cmp esi, 0FFFFFFFFh
.text:1000B0D6 jz short loc_1000B139
.text:1000B0D8 lea ecx, [esi+esi*2]
.text:1000B0DB cmp dword ptr [edi+ecx*4+4], 0
.text:1000B0E0 jz short loc_1000B127
.text:1000B0E2 push esi
.text:1000B0E3 push ebp
.text:1000B0E4 lea ebp, [ebx+10h]
.text:1000B0E7 call dword ptr [edi+ecx*4+4]
.text:1000B0EB pop ebp
.text:1000B0EC pop esi
.text:1000B0ED mov ebx, [ebp+arg_4]
.text:1000B0F0 or eax, eax
.text:1000B0F2 jz short loc_1000B127
.text:1000B0F4 js short loc_1000B132
.text:1000B0F6 mov edi, [ebx+8]
.text:1000B0F9 push ebx
.text:1000B0FA call __global_unwind2
.text:1000B0FF add esp, 4
.text:1000B102 lea ebp, [ebx+10h]
.text:1000B105 push esi
.text:1000B106 push ebx
.text:1000B107 call __local_unwind2
.text:1000B10C add esp, 8
.text:1000B10F lea ecx, [esi+esi*2]
.text:1000B112 push 1
.text:1000B114 mov eax, [edi+ecx*4+8]
.text:1000B118 call __NLG_Notify
.text:1000B11D mov eax, [edi+ecx*4]
.text:1000B120 mov [ebx+0Ch], eax
.text:1000B123 call dword ptr [edi+ecx*4+8]
.text:1000B127
.text:1000B127 loc_1000B127: ; CODE XREF: unknown_libname_1+40j
.text:1000B127 ; unknown_libname_1+52j
.text:1000B127 mov edi, [ebx+8]
.text:1000B12A lea ecx, [esi+esi*2]
.text:1000B12D mov esi, [edi+ecx*4]
.text:1000B130 jmp short loc_1000B0D3
.text:1000B132 ; ---------------------------------------------------------------------- -----
.text:1000B132
.text:1000B132 loc_1000B132: ; CODE XREF: unknown_libname_1+54j
.text:1000B132 mov eax, 0
.text:1000B137 jmp short loc_1000B155
.text:1000B139 ; ---------------------------------------------------------------------- -----
.text:1000B139
.text:1000B139 loc_1000B139: ; CODE XREF: unknown_libname_1+36j
.text:1000B139 mov eax, 1
.text:1000B13E jmp short loc_1000B155
.text:1000B140 ; ---------------------------------------------------------------------- -----
.text:1000B140
.text:1000B140 loc_1000B140: ; CODE XREF: unknown_libname_1+18j
.text:1000B140 push ebp
.text:1000B141 lea ebp, [ebx+10h]
.text:1000B144 push 0FFFFFFFFh
.text:1000B146 push ebx
.text:1000B147 call __local_unwind2
.text:1000B14C add esp, 8
.text:1000B14F pop ebp
.text:1000B150 mov eax, 1
.text:1000B155
.text:1000B155 loc_1000B155: ; CODE XREF: unknown_libname_1+97j
.text:1000B155 ; unknown_libname_1+9Ej
.text:1000B155 pop ebp
.text:1000B156 pop edi
.text:1000B157 pop esi
.text:1000B158 pop ebx
.text:1000B159 mov esp, ebp
.text:1000B15B pop ebp
.text:1000B15C retn
.text:1000B15C unknown_libname_1 endp



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


Ранг: 387.4 (мудрец)
Статус: Участник
системщик

Создано: 29 июня 2008 19:35 New!
Цитата · Личное сообщение · #2

Я думаю что тебе надо отрезать/переписать все вызовы CRT/MFC, а то один вызов за собой потянет немеряно кода. Попробуй скомпилить код в .obj и потом сделай проект на VC++ и подсунь этот файлик линкеру. Таким образом получишь реализации malloc, и т.д. если не сможешь их отрезать.


Ранг: 172.2 (ветеран)
Статус: Участник

Создано: 29 июня 2008 20:30 · Поправил: Модератор New!
Цитата · Личное сообщение · #3

в этом-то и дело, непонятное слово все вызовы црт я или резал(500кб листинга), когда код явно не вызывается, если функа маленькая то добавлял код функи, или же импортил из c:\masm32\lib\msvcrt.lib аналоги. осталась только приведенная в первом посте функа и непонятно каким образом заменить код непонятное слово offset unknown_libname_1 ; Microsoft VisualC 2-8/net runtime на непонятное слово-то, непонятное слово код отрабатывал как следует


Ранг: 105.9 (ветеран)
Статус: Участник

Создано: 29 июня 2008 20:59 · Поправил: seeq New!
Цитата · Личное сообщение · #4

так, проглянул, похоже на код _except_handler2 из msvcrt.dll, т.е. можно просто вызвать ее динамически из msvcrt.dll и не париться. Вообще все эти unwind... думаю винда сама все "подчистит"после выгрузки библиотеки.


Ранг: 172.2 (ветеран)
Статус: Участник

Создано: 29 июня 2008 21:30 New!
Цитата · Личное сообщение · #5

заменил push offset unknown_libname_1 на _imp___except_handler2 (msvcrt.lib), код функи из рипа убрал. все ок

seeq, s0larian, спасибо
 eXeL@B —› Основной форум —› unknown_libname_1 при риппинге бинаря
Эта тема закрыта. Ответы больше не принимаются.

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS