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

 eXeL@B —› Программирование —› Снова про DLL :(
. 1 . 2 . 3 . >>
Посл.ответ Сообщение

Ранг: 32.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 29 октября 2006 23:11 · Поправил: crash_rider
· Личное сообщение · #1

НУ вроде вытащил из Dll fd_usb.dll---> CreateInterface имеет :

CreateInterface proc near
CODE:008C3940 push ebp
CODE:008C3941 mov ebp, esp
CODE:008C3943 mov eax, offset unk_8C5668 вот это что такое????? не понять....
CODE:008C3948 mov dword ptr [eax], offset sub_8C3880
CODE:008C394E mov dword ptr [eax+4], offset nullsub_1
CODE:008C3955 mov dword ptr [eax+8], offset sub_8C388C
CODE:008C395C mov dword ptr [eax+0Ch], offset sub_8C3894
CODE:008C3963 mov dword ptr [eax+10h], offset nullsub_2
CODE:008C396A mov dword ptr [eax+14h], offset nullsub_3
CODE:008C3971 mov dword ptr [eax+18h], offset sub_8C38A4
CODE:008C3978 mov dword ptr [eax+1Ch], offset sub_8C38AC
CODE:008C397F mov dword ptr [eax+20h], offset nullsub_4
CODE:008C3986 mov dword ptr [eax+24h], offset nullsub_5
CODE:008C398D mov dword ptr [eax+28h], offset nullsub_6
CODE:008C3994 mov dword ptr [eax+2Ch], offset sub_8C38C0
CODE:008C399B mov dword ptr [eax+30h], offset sub_8C38C8
CODE:008C39A2 mov dword ptr [eax+34h], offset sub_8C38D0
CODE:008C39A9 mov dword ptr [eax+38h], offset nullsub_7
CODE:008C39B0 mov dword ptr [eax+3Ch], offset nullsub_8
CODE:008C39B7 mov dword ptr [eax+40h], offset sub_8C38E0
CODE:008C39BE mov dword ptr [eax+44h], offset sub_8C38E8
CODE:008C39C5 mov dword ptr [eax+48h], offset nullsub_9
CODE:008C39CC mov dword ptr [eax+4Ch], offset nullsub_10
CODE:008C39D3 mov dword ptr [eax+50h], offset nullsub_11
CODE:008C39DA mov dword ptr [eax+54h], offset sub_8C38FC
CODE:008C39E1 mov dword ptr [eax+58h], offset nullsub_12
CODE:008C39E8 mov dword ptr [eax+5Ch], offset sub_8C3908
CODE:008C39EF mov dword ptr [eax+60h], offset sub_8C3910
CODE:008C39F6 mov dword ptr [eax+64h], offset sub_8C3918
CODE:008C39FD mov dword ptr [eax+68h], offset sub_8C3920
CODE:008C3A04 mov dword ptr [eax+6Ch], offset sub_8C3928
CODE:008C3A0B mov dword ptr [eax+70h], offset sub_8C3930
CODE:008C3A12 mov dword ptr [eax+74h], offset sub_8C3938
CODE:008C3A19 pop ebp
CODE:008C3A1A retn
CODE:008C3A1A CreateInterface endp

Пишу на Delphi Dll с экспортируемой процедурой CreateInterface

TIn_Module = record // mov eax, offset unk_8C5668
Arrayof : Array [0..120] of byte ;
Sub_Msvcrt: function(a4:integer):integer;stdcall; // sub_8C3880
sub_10002B10: procedure; // nullsub_1
sub_10001110: function(a4:integer):integer;stdcall; // sub_8C388C
sub_10001120: function(a4:integer;a84:integer):integer;stdcall; // sub_8C3894
CloseAllHandle: procedure; // nullsub_2
Func_DeviceIoControl: procedure; // nullsub_3
sub_10001220: function(a4:integer):integer;stdcall; // sub_8C38A4
sub_100012F0: function(a4:integer):integer;stdcall; // sub_8C38AC
sub_10001210: procedure; // nullsub_4
sub_10001160: procedure; // nullsub_5
sub_100011B0: procedure; // nullsub_6
sub_10001320: function(a4:integer;a8:integer;a16:integer):integer;stdcall; // sub_8C38C0
sub_10001370: function(a4:integer;a8:integer;a16:integer):integer;stdcall; // sub_8C38C8
sub_100013C0: function(a4:integer;a84:integer):integer;stdcall; // sub_8C38D0
sub_10001400: procedure; // nullsub_7
sub_10001450: procedure; // nullsub_8
sub_10001460: function(a4:integer;a84:integer):integer;stdcall; // sub_8C38E0
sub_10001530: function(a4:integer;a84:integer):integer;stdcall; // sub_8C38E8
sub_10001590: procedure; // nullsub_9
sub_10001600: procedure; // nullsub_10
sub_10001450copy: procedure; // nullsub_11
sub_10001640: function(a4:integer;a8:integer;a16:integer):integer;stdcall; // sub_8C38FC
sub_10001750: procedure; // nullsub_12
sub_10001D20: function(a4:integer;a8:integer;a16:integer):integer;stdcall; // sub_8C3908
sub_10001D40: function(a4:integer;a8:integer;a16:integer):integer;stdcall; // sub_8C3910
sub_10001D60: function(a4:integer):integer;stdcall; // sub_8C3918
WriteCommand: function(a4:integer):integer;stdcall; // sub_8C3920
WriteCommand2: function(a4:integer;a84:integer):integer;stdcall; // sub_8C3928
ReadCommand: function(a4:integer;a84:integer):integer;stdcall; // sub_8C3930
Facet_locale_std__AEPAXI_Z: function(a4:integer):integer;stdcall; // sub_8C3938
end;


обзываю ее fd_usb.dll запускаю менеджер, чтобы посмотреть что там передаеться смотрим в отладчике вылетает эксепшин что не так ????



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 30 октября 2006 07:23
· Личное сообщение · #2

crash_rider пишет:
CODE:008C3943 mov eax, offset unk_8C5668 вот это что такое????? не понять....

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




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

Создано: 30 октября 2006 10:16 · Поправил: s0larian
· Личное сообщение · #3

crash_rider пишет:
CODE:008C3943 mov eax, offset unk_8C5668 вот это что такое????? не понять....

В этот регистр попадает адрес структуры/класса - то есть указатель. И операции потом через него. Вот смотри кусок С++ который бы скомпилился в этот асм:

{
Interface *p = ???;
p->func1 = sub_8C3880;
p->func2 = nullsub_1;
p->func3 = sub_8C388C;
}





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

Создано: 30 октября 2006 10:30 · Поправил: s0larian
· Личное сообщение · #4

Вот ещё - в догонку. Тут всё просто:

main.cpp

#include <.....>

struct Interface
{
int (*func1)(int arg1);
......
};

Interface g_interface;

Interface *CreateInterface()
{
g_interface.func1 = sub_8c3880;
......


return &g_interface;
}





Ранг: 32.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 30 октября 2006 15:14 · Поправил: crash_rider
· Личное сообщение · #5

ок пасиб!
т.е мне на это не стоит обращать внимание?




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

Создано: 30 октября 2006 16:50 · Поправил: s0larian
· Личное сообщение · #6

crash_rider пишет:
т.е мне на это не стоит обращать внимание?

Ась? Чего? Это ты к чему?

То что "в догонку" - это пример на С++, который даст тебе код совместимый с этой DLL-кой. На него как раз и стоит посмотреть. Хотя, тебе, вроде, надо на Делфе, но я ей не польховолся года с 97го, и уже ничего не помню.... Знаю, что можно экспортировать и вызывать __stdcall функции, но как именно тебе это делать на паскале, да ещё и с указателем на структуру... пас.

Как вариант, можешь сделать тонкую "прокладку" на С++ и потом вызывать что-нить другое (то есть свою библиотеку написаную на дельфе)



Ранг: 32.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 30 октября 2006 19:36
· Личное сообщение · #7

а не подскажешь где качнуть можно vc++ 6 ?



Ранг: 32.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 30 октября 2006 21:35
· Личное сообщение · #8

НУ на дельфях пишу

PIn_Module = ^TIn_Module;
TIn_Module = record // mov eax, offset unk_8C5668
Sub_Msvcrt: function(a4:integer):integer;stdcall; // sub_8C3880
sub_10002B10: procedure; // nullsub_1
sub_10001110: function(a4:integer):integer;stdcall; // sub_8C388C
sub_10001120: function(a4:integer;a84:integer):integer;stdcall; // sub_8C3894
CloseAllHandle: procedure; // nullsub_2
Func_DeviceIoControl: procedure; // nullsub_3
sub_10001220: function(a4:integer):integer;stdcall; // sub_8C38A4
sub_100012F0: function(a4:integer):integer;stdcall; // sub_8C38AC
sub_10001210: procedure; // nullsub_4
sub_10001160: procedure; // nullsub_5
sub_100011B0: procedure; // nullsub_6
sub_10001320: function(a4:integer;a8:integer;a16:integer):integer;stdcall; // sub_8C38C0
sub_10001370: function(a4:integer;a8:integer;a16:integer):integer;stdcall; // sub_8C38C8
sub_100013C0: function(a4:integer;a84:integer):integer;stdcall; // sub_8C38D0
sub_10001400: procedure; // nullsub_7
sub_10001450: procedure; // nullsub_8
sub_10001460: function(a4:integer;a84:integer):integer;stdcall; // sub_8C38E0
sub_10001530: function(a4:integer;a84:integer):integer;stdcall; // sub_8C38E8
sub_10001590: procedure; // nullsub_9
sub_10001600: procedure; // nullsub_10
sub_10001450copy: procedure; // nullsub_11
sub_10001640: function(a4:integer;a8:integer;a16:integer):integer;stdcall; // sub_8C38FC
sub_10001750: procedure; // nullsub_12
sub_10001D20: function(a4:integer;a8:integer;a16:integer):integer;stdcall; // sub_8C3908
sub_10001D40: function(a4:integer;a8:integer;a16:integer):integer;stdcall; // sub_8C3910
sub_10001D60: function(a4:integer):integer;stdcall; // sub_8C3918
WriteCommand: function(a4:integer):integer;stdcall; // sub_8C3920
WriteCommand2: function(a4:integer;a84:integer):integer;stdcall; // sub_8C3928
ReadCommand: function(a4:integer;a84:integer):integer;stdcall; // sub_8C3930
Facet_locale_std__AEPAXI_Z: function(a4:integer):integer;stdcall; // sub_8C3938
end;

var
// inputmod: TIn_Module;
Ps_Module:TIn_Module;

function CreateInterface: TIn_Module; stdcall;
begin
//inputmod.version := $100;
// result := @inputmod;

Ps_Module.Sub_Msvcrt:= Sub_Msvcrt;
Ps_Module.sub_10002B10:=sub_10002B10;
Ps_Module.sub_10001110:=sub_10001110;
Ps_Module.sub_10001120:=sub_10001120;
Ps_Module.CloseAllHandle:=CloseAllHandle;
Ps_Module.Func_DeviceIoControl:= Func_DeviceIoControl;
Ps_Module.sub_10001220:=sub_10001220;
Ps_Module.sub_100012F0:=sub_100012F0;
Ps_Module.sub_10001210:=sub_10001210;
Ps_Module.sub_10001160:=sub_10001160;
Ps_Module.sub_100011B0:=sub_100011B0;
Ps_Module.sub_10001320:=sub_10001320;
Ps_Module.sub_10001370:=sub_10001370;
Ps_Module.sub_100013C0:=sub_100013C0;
Ps_Module.sub_10001400:=sub_10001400;
Ps_Module.sub_10001450:=sub_10001450;
Ps_Module.sub_10001460:=sub_10001460;
Ps_Module.sub_10001530:=sub_10001530;
Ps_Module.sub_10001590:=sub_10001590;
Ps_Module.sub_10001600:=sub_10001600;
Ps_Module.sub_10001450copy:=sub_10001450copy;
Ps_Module.sub_10001640:=sub_10001640;
Ps_Module.sub_10001750:=sub_10001750;
Ps_Module.sub_10001D20:=sub_10001D20;
Ps_Module.sub_10001D40:=sub_10001D40;
Ps_Module.sub_10001D60:=sub_10001D60;
Ps_Module.WriteCommand:=WriteCommand;
Ps_Module.WriteCommand2:=WriteCommand2;
Ps_Module.ReadCommand:=ReadCommand;
Ps_Module.Facet_locale_std__AEPAXI_Z:=Facet_locale_std__AEPAXI_Z;

end;



exports
CreateInterface;



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 30 октября 2006 22:44 · Поправил: tundra37
· Личное сообщение · #9

crash_rider пишет:
PIn_Module = ^TIn_Module;
TIn_Module = record // mov eax, offset unk_8C5668

Разъясняю. Этот объект в нормальной DLL создается вне ее( или вне той процедуры, которую ты рипаешь). Тебе надо понять, кто его создает и как сделать так, чтобы указатель на него попал не в "небо", а к тебе. Эксепшн может быть по двум причинам : либо при засылке указателя в несуществующие адреса, либо при попытке работать с несозданным объектом. Кстати, а где у тебя record создается - ты пишешь в пучтой объект. А главное, хоть бы подумал : ну запихал ты адреса в рекорд - почему это все работать будет. Их же кто-то должен использовать, а у тебя как в той рекламе : " А ребята и не знают..."



Ранг: 32.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 30 октября 2006 23:00
· Личное сообщение · #10

хм...
tundra37 пишет:
А главное, хоть бы подумал : ну запихал ты адреса в рекорд - почему это все работать будет. Их же кто-то должен использовать, а у тебя как в той рекламе : " А ребята и не знают..."


все ок я создал пустые фукции и процедуры! у них просто имена совпадают!

function Sub_Msvcrt(a4:char):integer;stdcall;
begin
//
end;

procedure sub_10002B10;
begin
//
end;


function sub_10001110(a4:integer):integer;stdcall;
begin

end;

ЛАдно приведу асм листинг там не просто они заносяться там трындец....



Ранг: 32.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 30 октября 2006 23:01 · Поправил: crash_rider
· Личное сообщение · #11

CreateInterface proc near
.text:10001000
.text:10001000 var_14 = dword ptr -14h
.text:10001000 var_10 = dword ptr -10h
.text:10001000 var_C = dword ptr -0Ch
.text:10001000 var_4 = dword ptr -4
.text:10001000
.text:10001000 push 274h
.text:10001005 call ??2@YAPAXI@Z ; operator new(uint) для чего это?
.text:1000100A add esp, 4
.text:1000100D test eax, eax
.text:1000100F jz short loc_10001018
.text:10001011 mov ecx, eax
.text:10001013 jmp loc_10001020
.text:10001018 ; ---------------------------------------------------------------------- -----
.text:10001018
.text:10001018 loc_10001018: ; CODE XREF: CreateInterface+Fj
.text:10001018 xor eax, eax
.text:1000101A retn
.text:1000101A ; ---------------------------------------------------------------------- -----
.text:1000101B align 10h
.text:10001020
.text:10001020 loc_10001020: ; CODE XREF: CreateInterface+13j
.text:10001020 push 0FFFFFFFFh
.text:10001022 push offset loc_10003A53
.text:10001027 mov eax, large fs:0
.text:1000102D push eax
.text:1000102E mov large fs:0, esp
.text:10001035 sub esp, 8
.text:10001038 push esi
.text:10001039 mov esi, ecx
.text:1000103B mov [esp+18h+var_14], esi
.text:1000103F push 14h
.text:10001041 mov [esp+1Ch+var_4], 0
.text:10001049 mov dword ptr [esi], offset off_10004070 <---- record c самими процедурами и функциями
.text:1000104F call ??2@YAPAXI@Z ; operator new(uint) опять для чего это ?
.text:10001054 add esp, 4
.text:10001057 mov [esp+18h+var_10], eax
.text:1000105B test eax, eax
.text:1000105D mov byte ptr [esp+18h+var_4], 1
.text:10001062 jz short loc_1000106E
.text:10001064 push esi
.text:10001065 mov ecx, eax
.text:10001067 call sub_100027F0
.text:1000106C jmp short loc_10001070
.text:1000106E ; ---------------------------------------------------------------------- -----
.text:1000106E
.text:1000106E loc_1000106E: ; CODE XREF: CreateInterface+62j
.text:1000106E xor eax, eax
.text:10001070
.text:10001070 loc_10001070: ; CODE XREF: CreateInterface+6Cj
.text:10001070 mov ecx, [esp+18h+var_C]
.text:10001074 mov [esi+4], eax
.text:10001077 mov dword ptr [esi+270h], 0
.text:10001081 mov eax, esi
.text:10001083 pop esi
.text:10001084 mov large fs:0, ecx
.text:1000108B add esp, 14h
.text:1000108E retn
.text:1000108E CreateInterface endp
Если бы просто заносились процедуры и функции такого бы не было тут что то наворочено трындец! Помогите!



Ранг: 32.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 30 октября 2006 23:11
· Личное сообщение · #12

посмотрите аттач там идовский(5) файл

3553_30.10.2006_CRACKLAB.rU.tgz - fd_usb.rar



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 31 октября 2006 07:58 · Поправил: tundra37
· Личное сообщение · #13

crash_rider пишет:
.text:10001005 call ??2@YAPAXI@Z ; operator new(uint) для чего это?

Во-первых, поставь опцию demangled name - будут имена с параметрами, а не кишмиш.
; void * __cdecl operator new(unsigned int)
extrn ??2@YAPAXI@Z:dword
Во-вторых, ИДА у меня старая или новая, проще было dll кинуть - не берет твою базу.
==============================
Блин, ты помог мне загадку решить. Где была моя голова. Это враппер С++ для функции malloc
В моей DLL еще были delete и еще пара операторов. Надо наверное новую ИДА ставить - там это должно быть приведено к нормальному виду.




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

Создано: 31 октября 2006 09:40
· Личное сообщение · #14

crash_rider
или сюда: www.microsoft.com/downloads/details.aspx?familyid=afd04ff1-9d16-439a-9a5e-e13eb0341923&displaylang=en

там самый последний компилер и библиотеки - из VS2005. Только нету IDE и отладчика. Скомпиль прослойку на С++, и тестируй.



Ранг: 32.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 31 октября 2006 14:42 · Поправил: crash_rider
· Личное сообщение · #15

2 s0larian пасиб

tundra37 пишет:
Блин, ты помог мне загадку решить. Где была моя голова. Это враппер С++ для функции malloc

ида 5 берет это без проблем! но какна с++ или дельфи это выглядит чет не въеду зы


ba57_31.10.2006_CRACKLAB.rU.tgz - fd_usb.dll




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

Создано: 31 октября 2006 17:13 · Поправил: s0larian
· Личное сообщение · #16

Это оригинальная dll? Что-то там совсем по-другому CreateInterface выглядит.... Хм...

Вот код... почти всё, минус пару проверок:

Big *p1 = new Big; //0x274 bytes, no constructor
p1->field1 = global1; // +0..... то что лежит в 0x10004070

Small *p2 = new Small; // 0x14 bytes, no constructor

sub_100227f0();

p1->field2 = p2; // +4
p1->lastField = 0; // +0x270

return p1;




Ранг: 32.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 31 октября 2006 17:53 · Поправил: crash_rider
· Личное сообщение · #17

ДА оригинал, как по другому? что то не понял ?
А Big это что?
0x10004070 сколько там оффсетов?чет не пойму правильно я их посчитал ?



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 01 ноября 2006 03:37
· Личное сообщение · #18

crash_rider
Big - это класс. new создает экземпляр объекта класса Big, похоже пустой - только память резервирует.
s0larian пишет:
sub_100227f0();

На это я бы особое внимание обратил. Наверняка она должна "достраивать" объект или наоборот его адрес куда-то засунуть. Скорее всего оффсет 0 - это функция Create, а в globall - ее generic variant.
Осатльные поля наверное можно найти либо в технических доках на С++, либо методом ковыряния собственных классов, где структуры известны. Можно поиском найти именно данный класс, но слово Big не слишком специфично. Я С++ знаю слабо и только в теории в основном, т.ч. скромно умолкаю.
Вчера нарыл скрипты для ИДА, которые для С++ , может таких нет в 5-й версии.


d81a_01.11.2006_CRACKLAB.rU.tgz - msvc_reversing.zip



Ранг: 32.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 01 ноября 2006 03:49 · Поправил: crash_rider
· Личное сообщение · #19

ООО большое спасибо! а где нарыл такое богатство?
Короче тема на дельфи не прокатит! классы из VС++ не совместимы с дельфёй зы вот мля
Короче буду на Vс++ переделывать все




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

Создано: 01 ноября 2006 09:33
· Личное сообщение · #20

енто, про классы - для начала пишешь так:

class Big
{
public:
uint32 field1, field2;
uint32 theRest[154];
uint32 lastField;
};


ну а потом выесняешь что надо записывать туда, пропишешь прототипы функций и впишешь туда указатели.



Ранг: 32.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 01 ноября 2006 20:34
· Личное сообщение · #21

ок пробую!



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 01 ноября 2006 22:42
· Личное сообщение · #22

crash_rider пишет:
а где нарыл такое богатство?

www.openrce.org/about/
Open Reverse Code Engineering

Вчера распаковал дистр. ИДА5 - там таких скриптов нет. А у этих ребят есть и еще кое-что.



Ранг: 32.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 01 ноября 2006 22:50 · Поправил: crash_rider
· Личное сообщение · #23

Пишу пока на дельфях с++ не докачал еще
TBig = class(TObject)
public
field1, field2: Cardinal;
theRest: array[0..154] of Cardinal;
lastField: Cardinal;
end;

TSmall = class(TObject)
public
field1, field2: Cardinal;
theRest: array[0..154] of Cardinal;
lastField: Cardinal;
end;

PInterface = ^TInterface;
TInterface = record // mov eax, offset unk_8C5668

Sub_Msvcrt: function(a4: char): integer; stdcall; // sub_8C3880
sub_10002B10: procedure; // nullsub_1
sub_10001110: function(a4: integer): integer; stdcall; // sub_8C388C
sub_10001120: function(a4: integer; a84: integer): integer; stdcall;
// sub_8C3894
sub_10001140: function(a4: integer; a84: integer): integer; stdcall;
// nullsub_2
Func_DeviceIoControl: procedure; // nullsub_3
sub_10001220: function(a4: integer): integer; stdcall; // sub_8C38A4
sub_100012F0: function(a4: integer): integer; stdcall; // sub_8C38AC
sub_10001210: procedure; // nullsub_4
sub_10001160: procedure; // nullsub_5
sub_100011B0: procedure; // nullsub_6
sub_10001320: function(a4: integer; lpBuffer: Dword; a16: integer): integer;
stdcall; // sub_8C38C0
sub_10001370: function(a4: integer; lpBuffer: Dword; a16: integer): integer;
stdcall; // sub_8C38C8
sub_100013C0: function(a4: integer; a84: integer): integer; stdcall;
// sub_8C38D0
sub_10001400: procedure; // nullsub_7
sub_10001450: procedure; // nullsub_8
sub_10001460: function(a4: integer; a84: integer): integer; stdcall;
// sub_8C38E0
sub_10001530: function(a4: integer; a84: integer): integer; stdcall;
// sub_8C38E8
sub_10001590: procedure; // nullsub_9
sub_10001600: procedure; // nullsub_10
sub_10001450copy: procedure; // nullsub_11
sub_10001640: function(a4: integer; a8: integer; a16: integer): integer;
stdcall; // sub_8C38FC
sub_10001750: procedure; // nullsub_12
sub_10001D20: function(a4: integer; a8: integer; a16: integer): integer;
stdcall; // sub_8C3908
sub_10001D40: function(a4: integer; a8: integer; a16: integer): integer;
stdcall; // sub_8C3910
sub_10001D60: function(lpBuffer: Dword): integer; stdcall; // sub_8C3918
sub_10001D70: function(lpBuffer: Dword): integer; stdcall; // sub_8C3920
sub_10001D80: function(lpBuffer: Dword; a84: Dword): integer; stdcall;
// sub_8C3928
sub_10001DA0: function(lpBuffer: Dword; a84: Dword): integer; stdcall;
// sub_8C3930
// Facet_locale_std__AEPAXI_Z: function(a4:char):integer;stdcall; // sub_8C3938
end;

var
Ps_Module: TInterface;


function CreateInterface: TBig; stdcall
var
P1: TBig;
p2: Tsmall;
begin
p1 := TBig.Create; //0x274 bytes, no constructor
Ps_Module.Sub_Msvcrt := Sub_Msvcrt;
Ps_Module.sub_10002B10 := sub_10002B10;
Ps_Module.sub_10001110 := sub_10001110;
Ps_Module.sub_10001120 := sub_10001120;
Ps_Module.sub_10001140 := sub_10001140;
Ps_Module.Func_DeviceIoControl := Func_DeviceIoControl;
Ps_Module.sub_10001220 := sub_10001220;
Ps_Module.sub_100012F0 := sub_100012F0;
Ps_Module.sub_10001210 := sub_10001210;
Ps_Module.sub_10001160 := sub_10001160;
Ps_Module.sub_100011B0 := sub_100011B0;
Ps_Module.sub_10001320 := sub_10001320;
Ps_Module.sub_10001370 := sub_10001370;
Ps_Module.sub_100013C0 := sub_100013C0;
Ps_Module.sub_10001400 := sub_10001400;
Ps_Module.sub_10001450 := sub_10001450;
Ps_Module.sub_10001460 := sub_10001460;
Ps_Module.sub_10001530 := sub_10001530;
Ps_Module.sub_10001590 := sub_10001590;
Ps_Module.sub_10001600 := sub_10001600;
Ps_Module.sub_10001450copy := sub_10001450copy;
Ps_Module.sub_10001640 := sub_10001640;
Ps_Module.sub_10001750 := sub_10001750;
Ps_Module.sub_10001D20 := sub_10001D20;
Ps_Module.sub_10001D40 := sub_10001D40;
Ps_Module.sub_10001D60 := sub_10001D60;
Ps_Module.sub_10001D70 := sub_10001D70;
Ps_Module.sub_10001D80 := sub_10001D80;
Ps_Module.sub_10001DA0 := sub_10001DA0;
p1.field1 := cardinal(@Ps_Module); // +0..... òî ÷òî ëåæèò â 0x10004070
p2 := TSmall.Create; // 0x14 bytes, no constructor
//sub_100227f0();
p1.field2 := cardinal(p2); // +4
p1.lastField := 0; // +0x270
Result := p1;
end;

exports
CreateInterface; что должно передоваться? P1:TBig или function CreateInterface: TInterface; stdcall ?




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

Создано: 02 ноября 2006 15:31
· Личное сообщение · #24

crash_rider пишет:
exports
CreateInterface; что должно передоваться? P1:TBig или function CreateInterface: TInterface; stdcall ?

чувак, я не помню уже как это всё на дельфе.... Но, CreateInterface() должен возвращать указатель на большую структуру - Big.



Ранг: 32.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 02 ноября 2006 17:09 · Поправил: crash_rider
· Личное сообщение · #25

ок буду копать!
2 s0larian
ты утилами разбирал все это или сам мозгами?




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

Создано: 03 ноября 2006 10:14
· Личное сообщение · #26

какими утилами, ты что Кусок С++ кода я тебе набил смотря в Иду... Как ещё.

Так что, как прогресс? Кста, имея DLL проект в VS2005 ты сможешь поставить breakpoint в своём коде, прописать оригинальный exe в debug settings, запустить debugger, пройтись по своему коду, переключиться в asm и и потом пройтись по главной проге.



Ранг: 32.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 04 ноября 2006 05:11
· Личное сообщение · #27

Пока не как мля скачал VS2005 express edition а там нету *.H файлов для компиляции....
ааааа
как я люблю микра софт счас ищу от 7 -ки фалы (windows.h и т.д.)
s0larian пишет:
Кста, имея DLL проект в VS2005 ты сможешь поставить breakpoint в своём коде, прописать оригинальный exe в debug settings, запустить debugger, пройтись по своему коду, переключиться в asm и и потом пройтись по главной проге.
так и делал ток на Delphi
Пока не как с классами завис..delphi не совместим с ними походу (я не разу не мог нормально запустить С++ классы из Dll в дельфи:s13
Ктонть юзал Thumb decompiler v0.1 by Ludvig Strigeus <luddes(at)gmail(dot)com> ?что то он не появляеться в меню Plugins



Ранг: 32.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 05 ноября 2006 04:19
· Личное сообщение · #28

2 s0larian спасибо за код!!! s0larian пишет:
Кста, имея DLL проект в VS2005 ты сможешь поставить breakpoint в своём коде, прописать оригинальный exe в debug settings, запустить debugger, пройтись по своему коду, переключиться в asm и и потом пройтись по главной проге.

Ты мне идейку подкинул! скопильнуть DLL на VC++ 6! Dll то на VC++ 6 написана! мой код DLL на асм. должен быть точь в точь после анализа в IDA! а если не совпадает значит косяк...
Пойду диск с шестеркой искать...
зы... вот с классами вроде разобрался... но все равно ексепшены летят GetLastError кричит типа класса такого нет! когда пытаюсь ему подсунуть BIG !

s0larian подмоги че не так делаю ?
код проги с с++ на дельфи перевести не проблема, но вот с классами что то запутался я.....



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 06 ноября 2006 06:00
· Личное сообщение · #29

crash_rider пишет:
но вот с классами что то запутался я

crash_rider пишет:
delphi не совместим с ними походу

Именно так- в смысле, что у Борланда и Микрософта принципиально разные реализации классов.
Придется на Микрософтовском С++ писать.




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

Создано: 06 ноября 2006 09:50
· Личное сообщение · #30

для начала поставь VC++ 6 или последние Visual C++ 2005 Tools (в низ самый последний компилер и все headers). Ну а потом возьми куски кодакоторые я постил, открой Иду с оригиналом в друзом окне и пили.

Да, не забудь выяснить что там с run-time (static/dynamic)


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


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