Изменение ЕХЕ файла с цифровой подписью, без потери оной.
От: falcoware Россия https://falcoware.com/rus/
Дата: 21.12.17 11:25
Оценка:
Привет,

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

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

Однако, как известно, при изменении ЕХЕ исчезает цифровая подпись.

Решение:

$src1 = "http://falcoware.com/distributives/" . $filename;
// $src2 = "http://falcogames.com/distributives/" . $filename;

// Workaround agaist redirecting to Paul server!
$src2 = "../falcogames.com/distributives/" . $filename;

$filesize = intval($this->size);

if (copy($src1, $user_file) || copy($src2, $user_file)) {

$bigfile_directory = realpath('TempBigFile') . DIRECTORY_SEPARATOR;

$addfile = "50M.txt";

if($filesize < 0){ $filesize = 0; }
if($filesize > 1000){ $filesize = 1000; }

$CERTIFICATE_ENTRY_OFFSET = 148 + 4;
$PAYLOAD_ALIGNMENT = 8;

$result_user_file = fopen($user_file, 'r');
$FileLength = $CERTIFICATE_ENTRY_OFFSET * 10;//filesize($user_file);
$contents = fread($result_user_file, $FileLength);

fclose($result_user_file);

$padding = 0;
if($filesize != 0){ $padding = 8 — ($filesize * 1000000) % 8; }

$nStart = strrpos($contents, "PE\0\0");
if(($nStart !== false) /*&& ($filesize == 0)*/){
$nStart += $CERTIFICATE_ENTRY_OFFSET;
$nCertTableOffset = substr($contents, $nStart, 4);
$nCertTableOffset1 = array_merge(unpack("L", $nCertTableOffset));

$nCertTableSize = substr($contents, $nStart + 4, 4);
$nCertTableSize1 = array_merge(unpack("L", $nCertTableSize));

$nCertTableSize1[0] = $nCertTableSize1[0] + 16 + $filesize * 1000000 + $padding;
$nNewCertTableSize = pack("L", $nCertTableSize1[0]);
$contents = substr_replace($contents, $nNewCertTableSize[0].$nNewCertTableSize[1].$nNewCertTableSize[2].$nNewCertTableSize[3], $nStart + 4, 4);
// $contents = substr_replace($contents, $nNewCertTableSize[0].$nNewCertTableSize[1].$nNewCertTableSize[2].$nNewCertTableSize[3], $nCertTableOffset1[0], 4);

$result_user_file = fopen($user_file, 'c');
fwrite($result_user_file, $contents, $FileLength);

fseek($result_user_file, $nCertTableOffset1[0]);
fwrite($result_user_file, $nNewCertTableSize[0].$nNewCertTableSize[1].$nNewCertTableSize[2].$nNewCertTableSize[3], 4);

fclose($result_user_file);
}

$result_user_file = fopen($user_file, 'a');

if($filesize != 0){
$bigfile_directory = $bigfile_directory . $addfile;
$ArrayFile = file_get_contents($bigfile_directory);

$WhileSize = $filesize;
while($WhileSize > 50){
fwrite($result_user_file, (string)$ArrayFile, 50 * 1000000);
$WhileSize = $WhileSize — 50;
}
fwrite($result_user_file, (string)$ArrayFile, $WhileSize * 1000000);
fwrite($result_user_file, (string)$ArrayFile, $padding);
}

fwrite($result_user_file, '1234567890' . $this->user_id);
fclose($result_user_file);

https://falcoware.com/rus/ — Бесплатные Игры!!!
Re: Изменение ЕХЕ файла с цифровой подписью, без потери оной.
От: drVanо Россия https://vmpsoft.com
Дата: 21.12.17 12:04
Оценка: 2 (1)
Здравствуйте, falcoware, Вы писали:

F>Самый оптимальный способ "присобачить" его ID к концу ехе и во время инсталляции дистрибутива проверять конец файла и запускать соответствующий скрипт в партнерке.


Самый оптимальный способ записать ID партнера в DOS заголовок и не морочить себе голову:
typedef struct _IMAGE_DOS_HEADER {
    WORD   e_magic;               
    WORD   e_cblp;                
    WORD   e_cp;                  
    WORD   e_crlc;                
    WORD   e_cparhdr;             
    WORD   e_minalloc;            
    WORD   e_maxalloc;            
    WORD   e_ss;                  
    WORD   e_sp;                  
    WORD   e_csum;                
    WORD   e_ip;                  
    WORD   e_cs;                  
    WORD   e_lfarlc;              
    WORD   e_ovno;                
    WORD   e_res[4];              // <---- например сюда
    WORD   e_oemid;                   
    WORD   e_oeminfo;                 
    WORD   e_res2[10];                
    LONG   e_lfanew;                  
  } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
Re[2]: Изменение ЕХЕ файла с цифровой подписью, без потери оной.
От: falcoware Россия https://falcoware.com/rus/
Дата: 21.12.17 12:07
Оценка:
V>Самый оптимальный способ записать ID партнера в DOS заголовок и не морочить себе голову:

Насколько я понимаю, Инносетап Паскаль скрипт не осилит Вашу гениальность! =)

А так сказали, что такой то файл-партнер ворует, открываешь его, уходишь в конец и "вауля", имя партнера известно! =)
https://falcoware.com/rus/ — Бесплатные Игры!!!
Re[3]: Изменение ЕХЕ файла с цифровой подписью, без потери оной.
От: drVanо Россия https://vmpsoft.com
Дата: 21.12.17 12:21
Оценка:
Здравствуйте, falcoware, Вы писали:

F>Насколько я понимаю, Инносетап Паскаль скрипт не осилит Вашу гениальность! =)


Насколько я понимаю вы даже не удосужились почитать в интернете где лежит эта самая структура, а она (что самое удивительное !!!) лежит в самом начале файла и для доступа к этому полю внутри файла достаточно посчитать смещение этого поля в структуре. Этот то вы осилите или посчитать за вас?
Re[4]: Изменение ЕХЕ файла с цифровой подписью, без потери оной.
От: falcoware Россия https://falcoware.com/rus/
Дата: 21.12.17 12:23
Оценка: -1
V>Насколько я понимаю вы даже не удосужились почитать в интернете где лежит эта самая структура, а она (что самое удивительное !!!) лежит в самом начале файла и для доступа к этому полю внутри файла достаточно посчитать смещение этого поля в структуре. Этот то вы осилите или посчитать за вас?

Если Вы видели мой код, то я могу добавлять к ЕХЕ "мусор", дабы раздуть дистрибутив для солидности. Как Ваш метод решает эту проблему?
https://falcoware.com/rus/ — Бесплатные Игры!!!
Re[5]: Изменение ЕХЕ файла с цифровой подписью, без потери оной.
От: drVanо Россия https://vmpsoft.com
Дата: 21.12.17 12:28
Оценка: +6 :)
Здравствуйте, falcoware, Вы писали:

F>Если Вы видели мой код, то я могу добавлять к ЕХЕ "мусор", дабы раздуть дистрибутив для солидности. Как Ваш метод решает эту проблему?


Я вам с такими "проблемами" предлагаю просто пойти и убицца апстену.
Re[6]: Изменение ЕХЕ файла с цифровой подписью, без потери оной.
От: falcoware Россия https://falcoware.com/rus/
Дата: 21.12.17 12:30
Оценка: -2
V>Я вам с такими "проблемами" предлагаю просто пойти и убицца апстену.

Ну смотри, ты создал Пакмана 10М. Такое на торрентах качать не будут. А раздул Пакмана до 10Г и все качают. Уловил?
https://falcoware.com/rus/ — Бесплатные Игры!!!
Re[2]: Изменение ЕХЕ файла с цифровой подписью, без потери оной.
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.12.17 12:57
Оценка:
Здравствуйте, drVanо, Вы писали:

V>Самый оптимальный способ записать ID партнера в DOS заголовок и не морочить себе голову:


А что, подпись исполняемого файла не учитывает DOS'овский заголовок?
Re[3]: Изменение ЕХЕ файла с цифровой подписью, без потери о
От: drVanо Россия https://vmpsoft.com
Дата: 21.12.17 13:02
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>А что, подпись исполняемого файла не учитывает DOS'овский заголовок?


Там проблема в хранении ID еще ДО подписи
Отредактировано 21.12.2017 13:07 drVanо . Предыдущая версия .
Re[7]: Изменение ЕХЕ файла с цифровой подписью, без потери оной.
От: drVanо Россия https://vmpsoft.com
Дата: 21.12.17 13:07
Оценка: -1
Здравствуйте, falcoware, Вы писали:

F>Ну смотри, ты создал Пакмана 10М. Такое на торрентах качать не будут. А раздул Пакмана до 10Г и все качают. Уловил?


Я уловил, что "не обмани ближнего своего" вы любите применять ко всем кроме себя
Re[4]: Изменение ЕХЕ файла с цифровой подписью, без потери оной.
От: falcoware Россия https://falcoware.com/rus/
Дата: 21.12.17 13:07
Оценка:
V>Там проблема в хранении ID

Это как раз не проблема.
https://falcoware.com/rus/ — Бесплатные Игры!!!
Re[8]: Изменение ЕХЕ файла с цифровой подписью, без потери оной.
От: falcoware Россия https://falcoware.com/rus/
Дата: 21.12.17 13:10
Оценка: -1
V>Я уловил, что "не обмани ближнего своего" вы любите применять ко всем кроме себя

Честность хорошо, но хитрить надо!

Даже Апостол Павел хитрил:

16. Положим, что сам я не обременял вас, но, будучи хитр, лукавством брал с вас.
(Второе послание к Коринфянам 12:16)
https://falcoware.com/rus/ — Бесплатные Игры!!!
Re[4]: Изменение ЕХЕ файла с цифровой подписью, без потери о
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.12.17 13:13
Оценка:
Здравствуйте, drVanо, Вы писали:

Pzz>>А что, подпись исполняемого файла не учитывает DOS'овский заголовок?


V>Там проблема в хранении ID еще ДО подписи


Я этот мутный скрипт не читал, но если я правильно понял, проблема в том, как поменять чего-нибудь в подписанном EXE, не сломав подписи.
Re[5]: Изменение ЕХЕ файла с цифровой подписью, без потери о
От: Matrix_Failure http://matrixfailure.wordpress.com/
Дата: 21.12.17 13:22
Оценка:
Здравствуйте, Pzz, Вы писали:

V>>Там проблема в хранении ID еще ДО подписи


Pzz>Я этот мутный скрипт не читал, но если я правильно понял, проблема в том, как поменять чего-нибудь в подписанном EXE, не сломав подписи.


Признаться тоже непонятно. Т.е. скрипт подразумевает, что можно к файлу всякого прилепить в хвост и цифровая подпись не изменится?
Re[6]: Изменение ЕХЕ файла с цифровой подписью, без потери о
От: falcoware Россия https://falcoware.com/rus/
Дата: 21.12.17 13:26
Оценка:
M_F>Признаться тоже непонятно. Т.е. скрипт подразумевает, что можно к файлу всякого прилепить в хвост и цифровая подпись не изменится?

Совершенно верно! Однако при увеличении файла до 1Г цифровая подпись всё же слетает! Пока не поборол!
https://falcoware.com/rus/ — Бесплатные Игры!!!
Re[6]: Изменение ЕХЕ файла с цифровой подписью, без потери о
От: wantus  
Дата: 21.12.17 14:35
Оценка: 71 (3)
Здравствуйте, Matrix_Failure, Вы писали:

M_F>Признаться тоже непонятно. Т.е. скрипт подразумевает, что можно к файлу всякого прилепить в хвост и цифровая подпись не изменится?


Смысл в том, что authenticode подпись покрывает не весь файл, а только определенные его секции. В секциях, не включенных в подпись, можно ковыряться сколько угодно (но, по-моему, нельзя менять их размер). Этим пользуются все web deployment консоли — типа сконфигурил инсталляцию через вебсайт, вписал её в уже готовый подписанный инсталлятор, послал линк клиенту. Клиент скачал, запустил и всё встало как надо. Этой икебане уже лет 10, если не больше.
Re[7]: Изменение ЕХЕ файла с цифровой подписью, без потери оной.
От: sr_dev  
Дата: 21.12.17 14:44
Оценка:
Здравствуйте, falcoware, Вы писали:

F>Ну смотри, ты создал Пакмана 10М. Такое на торрентах качать не будут. А раздул Пакмана до 10Г и все качают. Уловил?


Объясните плиз в общих чертах

1) создать пакмана
2) раздуть до 10Г
3) все качают с торентов
...
4) профит

зачем пункт 1?
Re[8]: Изменение ЕХЕ файла с цифровой подписью, без потери оной.
От: falcoware Россия https://falcoware.com/rus/
Дата: 21.12.17 14:57
Оценка:
Здравствуйте, sr_dev, Вы писали:

_>зачем пункт 1?


То есть взять чужого Пакмана или что? Нет, мы воровством не занимаемся.

Мы — солидная Быстрорастущая Софтверная Компания!
https://falcoware.com/rus/ — Бесплатные Игры!!!
Re: Изменение ЕХЕ файла с цифровой подписью, без потери оной.
От: okman Беларусь https://searchinform.ru/
Дата: 21.12.17 16:35
Оценка: 68 (2)
Здравствуйте, falcoware, Вы писали:

F>иногда надо раздавать свои инсталлеры партнерам, подписывая каждый инсталлер партнера, чтобы начислить ему деньги в случае установки его партнерского дистрибутива.

F>Самый оптимальный способ "присобачить" его ID к концу ехе и во время инсталляции дистрибутива проверять конец файла и запускать соответствующий скрипт в партнерке.
F>Однако, как известно, при изменении ЕХЕ исчезает цифровая подпись.

F>Решение:

F>...

Если не ошибаюсь, Microsoft уже закрыли эту "дырку". Правда, поведение по дефолту отключено.
Подробнее здесь:

Microsoft Security Advisory 2915720
https://docs.microsoft.com/en-us/security-updates/SecurityAdvisories/2014/2915720

When enabled, the new behavior for Windows Authenticode signature verification will no
longer allow extraneous information in the WIN_CERTIFICATE structure, and Windows will no
longer recognize non-compliant binaries as signed.


Включается эта настройка установкой обновления "KB 2893294" или включением флага "EnableCertPaddingCheck" в реестре.
Re[2]: Изменение ЕХЕ файла с цифровой подписью, без потери оной.
От: falcoware Россия https://falcoware.com/rus/
Дата: 21.12.17 16:44
Оценка:
O>Если не ошибаюсь, Microsoft уже закрыли эту "дырку". Правда, поведение по дефолту отключено.

Ну и кому нужно решение, которое по дефолту отключено?
https://falcoware.com/rus/ — Бесплатные Игры!!!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.