Исследование CreateInstall 2003.3.5

Перейти на главную страницу, индексную страницу.


Автор: Usupov Vlad <vlad@shellov.net>

Вступление

Это моя первая статья. Вобщем надоел мне InnoSetup 3, а для 4 не нашёл русификации оболочки и Help-а, и остановился на CreateInstall мало весит всего - короче понравилась он мне. Скачал её запускаю и смотрю CreateInstall - trial ага будем ломать.

Инструменты

1. Win32dasm
2. Qview или Hview - кому как.

Приступим

В Help --> About нет нигде регистрации хмм... Ладно. Натравим на неё win32dasm (на createinstall.exe) захожу в String Data References и нахожу там CreateInstall trial и ниже CreateInstall Pro (щелкаемся на CreateInstall Pro два раза л.кнопкой мыши) и оказываемся тут:
* Possible StringData Ref from Data Obj ->"CreateInstall Pro"
                                  |
:0040C40B BAC8964300              mov edx, 004396C8
:0040C410 8D4C2410                lea ecx, dword ptr [esp+10]
:0040C414 E8039D0100              call 0042611C
Поднимемся на верх немного и увидим там вот это:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040C3EF(C)
|
:0040C3FF 813D5CD84300C9000000  cmp dword ptr [0043D85C],000000C9
: сравниваем [0043D85C] c 000000C9 (это hex,а decimal-201)
:0040C409 750E                  jne 0040C419

* Possible StringData Ref from Data Obj ->"CreateInstall Pro"
                                  |
:0040C40B BAC8964300              mov edx, 004396C8
:0040C410 8D4C2410                lea ecx, dword ptr [esp+10]
:0040C414 E8039D0100              call 0042611C
Запомним этот адрес - 0040C3FF.
Посмотрим откуда берется значения для 0043D85C поднимемся на самое
начало и нажмем в win32dasm searcha FindText введем туда - 0043D85C
и будем нажимать FindNext пока не окажемся тут:

:0040C143 68A0714300              push 004371A0
:0040C148 BA02020000              mov edx, 00000202
:0040C14D 8B0D2CDD4300            mov ecx, dword ptr [0043DD2C]
:0040C153 E800A50100              call 00426658

* Possible StringData Ref from Data Obj ->"Type"
                                  |
:0040C158 6870964300              push 00439670
:0040C15D BA00020000              mov edx, 00000200
:0040C162 8B0D2CDD4300            mov ecx, dword ptr [0043DD2C]
:0040C168 E8EBA40100              call 00426658
:0040C16D A35CD84300              mov dword ptr [0043D85C], eax
:0040C172 C3                      ret
Посмотрим выше, что же там? А там вот, что:

* Referenced by a CALL at Addresses:
|:0040C468   , :00423FED
|
:0040C100 6A01                    push 00000001
:0040C102 A188EF4300              mov eax, dword ptr [0043EF88]
:0040C107 BA4F010000              mov edx, 0000014F
:0040C10C 8B4836                  mov ecx, dword ptr [eax+36]
:0040C10F E844A50100              call 00426658

* Possible StringData Ref from Data Obj ->"ci.ini": Файл из директории
программы
                                  |
:0040C114 6878964300              push 00439678
:0040C119 BA47010000              mov edx, 00000147
:0040C11E 8BC8                    mov ecx, eax
:0040C120 A36C964300              mov dword ptr [0043966C], eax
:0040C125 E82EA50100              call 00426658
:0040C12A A16C964300              mov eax, dword ptr [0043966C]
:0040C12F BA27020000              mov edx, 00000227
:0040C134 8B4852                  mov ecx, dword ptr [eax+52]
:0040C137 51                      push ecx
:0040C138 8B0D2CDD4300            mov ecx, dword ptr [0043DD2C]
:0040C13E E815A50100              call 00426658

* Possible StringData Ref from Data Obj ->"CreateInstall":
секция [CreateInstall]
                                  |
:0040C143 68A0714300              push 004371A0
:0040C148 BA02020000              mov edx, 00000202
:0040C14D 8B0D2CDD4300            mov ecx, dword ptr [0043DD2C]
:0040C153 E800A50100              call 00426658

* Possible StringData Ref from Data Obj ->"Type": строка Type=0
                                  |
:0040C158 6870964300              push 00439670
:0040C15D BA00020000              mov edx, 00000200
:0040C162 8B0D2CDD4300            mov ecx, dword ptr [0043DD2C]
:0040C168 E8EBA40100              call 00426658
:0040C16D A35CD84300              mov dword ptr [0043D85C], eax
: заносим в eax то чему равно Type , а оно равно 0.Интересно
:0040C172 C3                      ret
Ухты так это же наш ini файл из директории с программой (ci.ini),а
нука зайдем туда и смотрим, что Type = 0. Ага  вернемся по адресу -
0040C3FF (помните его?) для этого нажмем Shift+F12 и в Code Offset(HEX)
введем - 0040C3FF и нажмем OK.

Теперь мы опять тут:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040C3EF(C)
|
:0040C3FF 813D5CD84300C9000000    cmp dword ptr [0043D85C], 000000C9:
:0040C409 750E                    jne 0040C419

* Possible StringData Ref from Data Obj ->"CreateInstall Pro"
                                  |
:0040C40B BAC8964300              mov edx, 004396C8
:0040C410 8D4C2410                lea ecx, dword ptr [esp+10]
:0040C414 E8039D0100              call 0042611C
Теперь откроем ini файл (ci.ini) и изменим Type=0 на Type=201 все
закрываем файл и сохраняем изменения.
Теперь при запуске появляется окно о вводе регистрационных данных.
Заполняем их нажимаем OK ничего, никакого MessageBox. Ладно. Теперь
в win32dasm заходим в DebugaLoadProcess и нажимаем Enter (Ничего
вводить не надо) Нажимаем F8 (по тихоньку не торопитесь). При вывод
окна нажимаем Close. Нажимаем F8 пока не окажемся тут:

* Possible StringData Ref from Data Obj ->"љ"
                                  |
:004242BE B9E8AB4300              mov ecx, 0043ABE8
:004242C3 8B1538DD4300            mov edx, dword ptr [0043DD38]
:004242C9 A310DD4300              mov dword ptr [0043DD10], eax
:004242CE E85B1C0000              call 00425F2E
:004242D3 A3B0DE4300              mov dword ptr [0043DEB0], eax
:004242D8 891D40DD4300            mov dword ptr [0043DD40], ebx
:004242DE E84D70FEFF              call 0040B330
:004242E3 391D5CD84300            cmp dword ptr [0043D85C], ebx
: сравниваем [0043D85C] с ebx;
:004242E9 751C                    jne 00424307: если все OK то прыгаем;
:004242EB E82080FEFF              call 0040C310
:004242F0 85C0                    test eax, eax
:004242F2 7513                    jne 00424307
:004242F4 53                      push ebx
:004242F5 6820C74000              push 0040C720
:004242FA 53                      push ebx

* Possible Reference to Dialog: DialogID_006A: Окно которое выводится
и просить ввести регистрационные данные;
                                  |
:004242FB 6A6A                    push 0000006A
:004242FD 53                      push ebx
:004242FE FFD6                    call esi
:00424300 50                      push eax
:00424301 FFD7                    call edi
:00424303 85C0                    test eax, eax
:00424305 7545                    je 0042434C
Остановимся на адресе - 004242E9 снизу в win32dasm в строке состояния
введем Offset (в данной версии он @Offset 000236E9)
Теперь запускаем Qview нажимаем Alt+F6 находим наш файл и нажимаем
Enter, нажимаем Alt+F3, нажимаем F5  и вводим - 000236E9.
Заменим 751C на 741C.
Теперь осталось только убрать идиотское окно,  которое появляется при
запуске созданного инсталляционного приложения. Посмотрев файл
(createinstall.exe) я не нашел там ничего больше интересного, значит
надо искать где-то ещё OK.
Заинтересовала меня директория (resource) зашел я туда и увидел
(Inststd.dll). Решил натравить на неё Win32Dasm и увидел там интересный
диалог:
+++++++++++++++++ DIALOG INFORMATION ++++++++++++++++++

Number of Dialogs = 1 (decimal)

Name: DialogID_0073, # of Controls=006, Caption:"Installation", ClassName:""
001 - ControlID:0001, Control Class:"BUTTON" Control Text:"Continue"
002 - ControlID:FFFF, Control Class:"STATIC" Control Text:""
003 - ControlID:FFFF, Control Class:"STATIC" Control Text:"When you purchase a fully registered version, you will no longer see this mess"
004 - ControlID:FFFF, Control Class:"STATIC" Control Text:"This setup was made with CreateInstall (unregistered Trial version)."
005 - ControlID:03EA, Control Class:"STATIC" Control Text:""
006 - ControlID:FFFF, Control Class:"STATIC" Control Text:"Internet: http://www.createinstall.com"


Так это ведь и есть то самое окно, которое при запуске нашего созданного приложения выскакивает. В Win32Dasm зайдем в Dialog References и видим наш диалог (DialogID_0073) щелкнем на него два раза (л.кнопкой мыши) и окажемся тут:
* Referenced by a CALL at Address:
|:1000D0D1
|
:1000C240 A1A03C0110              mov eax, dword ptr [10013CA0]
:1000C245 6A00                    push 00000000
:1000C247 68F0C10010              push 1000C1F0
:1000C24C 6A00                    push 00000000

* Possible Reference to Dialog: DialogID_0073
                                  |
:1000C24E 6A73                    push 00000073
:1000C250 50                      push eax

* Reference To: USER32.DialogBoxParamA, Ord:0093h
                                  |
:1000C251 FF15DC010110            Call dword ptr [100101DC]

:1000C257 C3                      ret

Посмотрим окуда оно вызывается. Зайдём в 1000D0D1 и там видим такое:

:1000D0A9 8B7B04                  mov edi, dword ptr [ebx+04]
:1000D0AC 8B13                    mov edx, dword ptr [ebx]
:1000D0AE 03FA                    add edi, edx
:1000D0B0 8A4F14                  mov cl, byte ptr [edi+14]
:1000D0B3 891D453D0110            mov dword ptr [10013D45], ebx
:1000D0B9 880D443D0110            mov byte ptr [10013D44], cl
:1000D0BF 8B17                    mov edx, dword ptr [edi]
:1000D0C1 8915403D0110            mov dword ptr [10013D40], edx
:1000D0C7 E834FDFFFF              call 1000CE00
:1000D0CC 83F802                  cmp eax, 00000002
:1000D0CF 7405                    je 1000D0D6: Если его изменить на 75,
то никакого окна больше не появится.
:1000D0D1 E86AF1FFFF              call 1000C240

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:1000D0CF(C)
|
:1000D0D6 E835BAFFFF              call 10008B10

* Possible StringData Ref from Data Obj ->"CloseSplash"
Меняем по адресу (1000D0CF) 7405 на 7505 вот и всё.
Автор: Usupov Vlad


Материалы находятся на сайте http://cracklab.narod.ru/doc/






Hosted by uCoz