Inject кода в installer Всем привет. Нужна помощь со встраиванием своего кода в несколько инсталлеров. Что-то гугление в этом направлении сильно не помогло. Нашел пару прог, но они не справляются с упакованными инсталлерами. Т.е. надо, чтобы перед запуском основной программки запустился мой код. Кто может направить на путь истинный? Примеры софта или обучить как это сделать ручками. С меня вознаграждение, если что ;-) Любая помощь приветствуется.
Любой нормальный инсталлер проверит контрольную сумму себя любимого или цифровую подпись скажем. И если тема коммерческая, то надо было в другой раздел постить.
И нет вариантов его "одурачить"? Да я надеюсь и так подскажут (найдем варианты), но если сложно - готов отблагодарить.
Можно пропатчить инсталлер, но это будет не особо универсально и придется разбирать каждую новую версию/класс инсталлеров отдельно.
Способы конечно есть. Для начала знать бы какой инсталлер. Если не слишком замороченый, то как вариант, можно добавить новую секцию с твоим кодом и заинлайнить проверку контрольной суммы. Хотя самым эффективным методом в твоем случае - таскать рядом с инсталлерами поправленую системную библиотеку (так ломались большинство вмпротов через lpk.dll и аспр через msimg32.dll)
Спасибо за идею, но файл должен быть один. Инсталлер NSIS, ругается, что файлик битый после добавления кода.
NSIS 3.0b0 Функция проверки: PHP: 00402DBC /$ 55 push ebp 00402DBD |. 8BEC mov ebp, esp 00402DBF |. 81EC 2C020000 sub esp, 22C 00402DC5 |. 53 push ebx 00402DC6 |. 56 push esi 00402DC7 |. 33DB xor ebx, ebx 00402DC9 |. 57 push edi 00402DCA |. 895D FC mov dword ptr ss:[ebp-4], ebx 00402DCD |. 895D F8 mov dword ptr ss:[ebp-8], ebx 00402DD0 |. FF15 90704000 call dword ptr ds:[<&KERNEL32.GetTickCount>] ; [GetTickCount 00402DD6 |. BE 00784300 mov esi, mod_nsis.00437800 ; UNICODE "C:\Users\User\Desktop\mod_nsis-3.0b0-setup.exe" 00402DDB |. 68 00040000 push 400 ; /BufSize = 400 (1024.) 00402DE0 |. 05 E8030000 add eax, 3E8 ; | 00402DE5 |. 56 push esi ; |PathBuffer = NULL 00402DE6 |. 53 push ebx ; |hModule = NULL 00402DE7 |. A3 EC914200 mov dword ptr ds:[4291EC], eax ; | 00402DEC |. FF15 9C704000 call dword ptr ds:[<&KERNEL32.GetModuleFileNameW>] ; \GetModuleFileNameW 00402DF2 |. 6A 03 push 3 00402DF4 |. 68 00000080 push 80000000 00402DF9 |. 56 push esi 00402DFA |. E8 572D0000 call mod_nsis.00405B56 00402DFF |. 8BF8 mov edi, eax 00402E01 |. 83FF FF cmp edi, -1 00402E04 |. 893D 18904000 mov dword ptr ds:[409018], edi 00402E0A |. 75 0A jnz short mod_nsis.00402E16 00402E0C |. B8 B8924000 mov eax, mod_nsis.004092B8 ; UNICODE "Error launching installer" 00402E11 |. E9 45020000 jmp mod_nsis.0040305B 00402E16 |> 56 push esi 00402E17 |. BE 00584300 mov esi, mod_nsis.00435800 ; UNICODE "C:\Users\User\Desktop" 00402E1C |. 56 push esi 00402E1D |. E8 C8300000 call mod_nsis.00405EEA 00402E22 |. 56 push esi 00402E23 |. E8 592B0000 call mod_nsis.00405981 00402E28 |. 50 push eax 00402E29 |. 68 00804300 push mod_nsis.00438000 ; UNICODE "mod_nsis-3.0b0-setup.exe" 00402E2E |. E8 B7300000 call mod_nsis.00405EEA 00402E33 |. 53 push ebx ; /pFileSizeHigh = NULL 00402E34 |. 57 push edi ; |hFile = 0000164E 00402E35 |. FF15 98704000 call dword ptr ds:[<&KERNEL32.GetFileSize>] ; \GetFileSize 00402E3B |. 3BC3 cmp eax, ebx 00402E3D |. A3 88FE4100 mov dword ptr ds:[41FE88], eax 00402E42 |. 8BF0 mov esi, eax 00402E44 |. 0F8E EA000000 jle mod_nsis.00402F34 00402E4A |> A1 F4914200 /mov eax, dword ptr ds:[4291F4] 00402E4F |. 8BFE |mov edi, esi 00402E51 |. F7D8 |neg eax 00402E53 |. 1BC0 |sbb eax, eax 00402E55 |. 25 007E0000 |and eax, 7E00 00402E5A |. 05 00020000 |add eax, 200 00402E5F |. 3BF0 |cmp esi, eax 00402E61 |. 7C 02 |jl short mod_nsis.00402E65 00402E63 |. 8BF8 |mov edi, eax 00402E65 |> 57 |push edi 00402E66 |. 68 887E4100 |push mod_nsis.00417E88 00402E6B |. E8 89040000 |call mod_nsis.004032F9 00402E70 |. 85C0 |test eax, eax 00402E72 |. 0F84 57010000 |je mod_nsis.00402FCF 00402E78 |. 391D F4914200 |cmp dword ptr ds:[4291F4], ebx 00402E7E |. 75 7E |jnz short mod_nsis.00402EFE 00402E80 |. 6A 1C |push 1C 00402E82 |. 8D45 DC |lea eax, dword ptr ss:[ebp-24] 00402E85 |. 68 887E4100 |push mod_nsis.00417E88 00402E8A |. 50 |push eax 00402E8B |. E8 812C0000 |call mod_nsis.00405B11 00402E90 |. 8B45 DC |mov eax, dword ptr ss:[ebp-24] 00402E93 |. A9 F0FFFFFF |test eax, FFFFFFF0 00402E98 |. 75 71 |jnz short mod_nsis.00402F0B 00402E9A |. 817D E0 EFBEA>|cmp dword ptr ss:[ebp-20], DEADBEEF 00402EA1 |. 75 68 |jnz short mod_nsis.00402F0B 00402EA3 |. 817D EC 496E7>|cmp dword ptr ss:[ebp-14], 74736E49 00402EAA |. 75 5F |jnz short mod_nsis.00402F0B 00402EAC |. 817D E8 736F6>|cmp dword ptr ss:[ebp-18], 74666F73 00402EB3 |. 75 56 |jnz short mod_nsis.00402F0B 00402EB5 |. 817D E4 4E756>|cmp dword ptr ss:[ebp-1C], 6C6C754E 00402EBC |. 75 4D |jnz short mod_nsis.00402F0B 00402EBE |. 0945 08 |or dword ptr ss:[ebp+8], eax 00402EC1 |. 8B45 08 |mov eax, dword ptr ss:[ebp+8] 00402EC4 |. 8B0D 787E4100 |mov ecx, dword ptr ds:[417E78] 00402ECA |. 83E0 02 |and eax, 2 00402ECD |. 0905 80924200 |or dword ptr ds:[429280], eax 00402ED3 |. 8B45 F4 |mov eax, dword ptr ss:[ebp-C] 00402ED6 |. 3BC6 |cmp eax, esi 00402ED8 |. 890D F4914200 |mov dword ptr ds:[4291F4], ecx ; kernel32.75143F2C 00402EDE |. 0F8F 2F010000 |jg mod_nsis.00403013 00402EE4 |. F645 08 08 |test byte ptr ss:[ebp+8], 8 00402EE8 |. 75 06 |jnz short mod_nsis.00402EF0 00402EEA |. F645 08 04 |test byte ptr ss:[ebp+8], 4 00402EEE |. 75 44 |jnz short mod_nsis.00402F34 00402EF0 |> FF45 F8 |inc dword ptr ss:[ebp-8] 00402EF3 |. 8D70 FC |lea esi, dword ptr ds:[eax-4] 00402EF6 |. 3BFE |cmp edi, esi 00402EF8 |. 76 11 |jbe short mod_nsis.00402F0B 00402EFA |. 8BFE |mov edi, esi 00402EFC |. EB 0D |jmp short mod_nsis.00402F0B 00402EFE |> F645 08 02 |test byte ptr ss:[ebp+8], 2 00402F02 |. 75 07 |jnz short mod_nsis.00402F0B 00402F04 |. 53 |push ebx 00402F05 |. E8 10FEFFFF |call mod_nsis.00402D1A 00402F0A |. 59 |pop ecx ; mod_nsis.00436800 00402F0B |> 3B35 88FE4100 |cmp esi, dword ptr ds:[41FE88] 00402F11 |. 7D 11 |jge short mod_nsis.00402F24 00402F13 |. 57 |push edi 00402F14 |. 68 887E4100 |push mod_nsis.00417E88 00402F19 |. FF75 FC |push dword ptr ss:[ebp-4] 00402F1C |. E8 E1330000 |call mod_nsis.00406302 00402F21 |. 8945 FC |mov dword ptr ss:[ebp-4], eax 00402F24 |> 013D 787E4100 |add dword ptr ds:[417E78], edi 00402F2A |. 2BF7 |sub esi, edi 00402F2C |. 3BF3 |cmp esi, ebx 00402F2E |.^ 0F8F 16FFFFFF \jg mod_nsis.00402E4A 00402F34 |> 6A 01 push 1 00402F36 |. E8 DFFDFFFF call mod_nsis.00402D1A 00402F3B |. 391D F4914200 cmp dword ptr ds:[4291F4], ebx 00402F41 |. 59 pop ecx ; mod_nsis.00436800 00402F42 |. 0F84 CB000000 je mod_nsis.00403013 00402F48 |. 395D F8 cmp dword ptr ss:[ebp-8], ebx 00402F4B |. 74 2A je short mod_nsis.00402F77 00402F4D |. FF35 787E4100 push dword ptr ds:[417E78] 00402F53 |. E8 B7030000 call mod_nsis.0040330F 00402F58 |. 8D45 08 lea eax, dword ptr ss:[ebp+8] 00402F5B |. 6A 04 push 4 00402F5D |. 50 push eax 00402F5E |. E8 96030000 call mod_nsis.004032F9 00402F63 |. 85C0 test eax, eax 00402F65 |. 0F84 A8000000 je mod_nsis.00403013 00402F6B |. 8B45 FC mov eax, dword ptr ss:[ebp-4] 00402F6E |. 3B45 08 cmp eax, dword ptr ss:[ebp+8] 00402F71 |. 0F85 9C000000 jnz mod_nsis.00403013 00402F77 |> FF75 F0 push dword ptr ss:[ebp-10] ; /MemSize = 32988 (207240.) 00402F7A |. 6A 40 push 40 ; |Flags = GPTR 00402F7C |. FF15 20714000 call dword ptr ds:[<&KERNEL32.GlobalAlloc>] ; \GlobalAlloc 00402F82 |. B9 F0BD4000 mov ecx, mod_nsis.0040BDF0 00402F87 |. 8BF0 mov esi, eax 00402F89 |. E8 E2330000 call mod_nsis.00406370 00402F8E |. 8D85 D4FDFFFF lea eax, dword ptr ss:[ebp-22C] 00402F94 |. 68 00684300 push mod_nsis.00436800 ; UNICODE "C:\Users\User\AppData\Local\Temp\" 00402F99 |. 50 push eax 00402F9A |. E8 E62B0000 call mod_nsis.00405B85 00402F9F |. 53 push ebx ; /hTemplateFile = NULL 00402FA0 |. 68 00010004 push 4000100 ; |Attributes = TEMPORARY|DELETE_ON_CLOSE 00402FA5 |. 6A 02 push 2 ; |Mode = CREATE_ALWAYS 00402FA7 |. 53 push ebx ; |pSecurity = NULL 00402FA8 |. 53 push ebx ; |ShareMode = 0 00402FA9 |. 8D85 D4FDFFFF lea eax, dword ptr ss:[ebp-22C] ; | 00402FAF |. 68 000000C0 push C0000000 ; |Access = GENERIC_READ|GENERIC_WRITE 00402FB4 |. 50 push eax ; |FileName = 1CD66A89 ??? 00402FB5 |. FF15 94704000 call dword ptr ds:[<&KERNEL32.CreateFileW>] ; \CreateFileW 00402FBB |. 83F8 FF cmp eax, -1 00402FBE |. A3 1C904000 mov dword ptr ds:[40901C], eax 00402FC3 |. 75 14 jnz short mod_nsis.00402FD9 00402FC5 |. B8 30924000 mov eax, mod_nsis.00409230 ; UNICODE "Error writing temporary file. Make sure your temp folder is valid." 00402FCA |. E9 8C000000 jmp mod_nsis.0040305B 00402FCF |> 6A 01 push 1 00402FD1 |. E8 44FDFFFF call mod_nsis.00402D1A 00402FD6 |. 59 pop ecx ; mod_nsis.00436800 00402FD7 |. EB 3A jmp short mod_nsis.00403013 00402FD9 |> A1 F4914200 mov eax, dword ptr ds:[4291F4] 00402FDE |. 83C0 1C add eax, 1C 00402FE1 |. 50 push eax 00402FE2 |. E8 28030000 call mod_nsis.0040330F 00402FE7 |. 8B4D DC mov ecx, dword ptr ss:[ebp-24] 00402FEA |. FF75 F0 push dword ptr ss:[ebp-10] 00402FED |. F7D1 not ecx ; kernel32.75143F2C 00402FEF |. 83E1 04 and ecx, 4 00402FF2 |. A3 8CFE4100 mov dword ptr ds:[41FE8C], eax 00402FF7 |. 2BC1 sub eax, ecx ; kernel32.75143F2C 00402FF9 |. 8B4D F4 mov ecx, dword ptr ss:[ebp-C] 00402FFC |. 56 push esi 00402FFD |. 53 push ebx 00402FFE |. 8D4408 E4 lea eax, dword ptr ds:[eax+ecx-1C] 00403002 |. 6A FF push -1 00403004 |. A3 807E4100 mov dword ptr ds:[417E80], eax 00403009 |. E8 54000000 call mod_nsis.00403062 0040300E |. 3B45 F0 cmp eax, dword ptr ss:[ebp-10] 00403011 |. 74 07 je short mod_nsis.0040301A 00403013 |> B8 98904000 mov eax, mod_nsis.00409098 ; UNICODE "Installer integrity check has failed. Common causes include incomplete download and damaged media. C" 00403018 |. EB 41 jmp short mod_nsis.0040305B 0040301A |> F645 DC 01 test byte ptr ss:[ebp-24], 1 0040301E |. 8935 F0914200 mov dword ptr ds:[4291F0], esi 00403024 |. 8B06 mov eax, dword ptr ds:[esi] 00403026 |. A3 F8914200 mov dword ptr ds:[4291F8], eax 0040302B |. 74 06 je short mod_nsis.00403033 0040302D |. FF05 FC914200 inc dword ptr ds:[4291FC] 00403033 |> 6A 08 push 8 00403035 |. 8D46 44 lea eax, dword ptr ds:[esi+44] 00403038 |. 59 pop ecx ; mod_nsis.00436800 00403039 |> 83E8 08 /sub eax, 8 0040303C |. 0130 |add dword ptr ds:[eax], esi 0040303E |. 49 |dec ecx ; kernel32.75143F2C 0040303F |.^ 75 F8 \jnz short mod_nsis.00403039 00403041 |. A1 7C7E4100 mov eax, dword ptr ds:[417E7C] 00403046 |. 6A 40 push 40 00403048 |. 8946 3C mov dword ptr ds:[esi+3C], eax 0040304B |. 83C6 04 add esi, 4 0040304E |. 56 push esi 0040304F |. 68 00924200 push mod_nsis.00429200 00403054 |. E8 B82A0000 call mod_nsis.00405B11 00403059 |. 33C0 xor eax, eax 0040305B |> 5F pop edi ; mod_nsis.00436800 0040305C |. 5E pop esi ; mod_nsis.00436800 0040305D |. 5B pop ebx ; mod_nsis.00436800 0040305E |. C9 leave 0040305F \. C2 0400 ret 4 Место сравнения блоков контрольных сумм PHP: 00402F6B |. 8B45 FC mov eax, dword ptr ss:[ebp-4] 00402F6E |. 3B45 08 cmp eax, dword ptr ss:[ebp+8] 00402F71 |. 0F85 9C000000 jnz nsis-3_0.00403013 Делай поиск по маске и патч там, никаких проблем не будет
Что-то я сегодня добрый. Паттерн для поиска: 85 C0 0F 84 A8 00 00 00 8B 45 FC 3B 45 08 0F 85 9C 00 00 00 FF 75 F0 6A 40 Паттерн для патча: 85 C0 0F 84 A8 00 00 00 8B 45 08 3B 45 08 0F 85 9C 00 00 00 FF 75 F0 6A 40
в HEX поменял, не помогло, ругается. А вот нормально DISASM ему сделать (чтобы посмотреть почему не помогло) не получается. Можно узнать чем декомпилировали?
да без разницы в чем смотреть. любой отладчик, либо дизассемблер. покажи уже инсталлер, может там другая версия или вообще не NSIS
может другая версия, сравнение вижу, переход меняю, но наверное не туда или все таки не там. Вот к примеру файлик (не тронутый) http://speedy.sh/kh66r/testinstaller.exe
проверил. от изменения кода помогает. может ты изменил еще и размер файла? - в-общем посмотрел, после моего патча измененный инсталлер без проблем работает. видимо ты что-то не так делаешь. Может отписать тут или в личке подробней, скажу где ошибка. Но только завтра утром. Сейчас я спать
Да уж, с изменение размера файла все меняет. Процедура распаковки завязана на размере инсталлера, т.к. NSIS хранит контейнер в оверлее. Поэтому единственный вариант, который я вижу, это таскать свой код(если он такой огромный, что ты меняешь размер файла) в отдельной dll и вызывать ее. Если же твой код не очень большой, то можно уместиться в CodeCave внутри инсталлера. Извини, больше идей нет.
Кстати, а если не помещусь, не проблема же качнуть экзешник из нета и по-тихому запустить его? В отдельном потоке даже все это делать... Кода на это будет совсем не много. Вариант?
Вариант не очень, потому что: 1) Не факт что есть интернет 2) Не факт что тебя в него пустят 3) Повышение шанса ложных(или не ложных) детектов