Добро пожаловать, гость ( Вход | Регистрация )
| Дата поста: | В теме: | За сообщение: | Спасибо сказали: | ||
|---|---|---|---|---|---|
| Mar 12 2011, 12:47 | Сжатие LZX / LZSS | Всё ещё нужна помощь. Код распаковщика на Asm'е (DOS) выдранный из игры (с моими комментариями): [codebox] ; si - input buffer ;es:[di] - output buffer ;[bx] - window buffer? ;edx - uncompressed size? ; ----------------------- ; DS - сегмент данных. ; SI, DI - индекс. ; DS и SI/DI связаны. ; [ds:si]=[si] ; [ds:di]=[di] sub_10349 proc near push ds push si ; initialization - nothing interesting xor eax, eax mov cx, 400h xor si, si mov ds, word ptr ds:2A1Ch @label1_01: ; $400 * 4 => 4096 fill buffer with zero (eax=0) -> memset()? mov [si], eax add si, 4 dec cx jnz label1_01 xor bx, bx xor cx, cx mov edx, [si] add si, 4 @start_decode: ;start decode routine shr cx, 1 or ch, ch ; see above (*) jnz label1_04 mov cl, [si] ; get next byte inc si jnz label1_03 ; check si overflow call buffer_overflow ; error handling?.. @label1_03: mov ch, 0FFh ; (*) it's a trick: check if we run first time, or get from loop above @label1_04: test cx, 1 jz label1_07 ; "read-byte" bit is not set mov al, [si] inc si jnz label1_05 ; check si overflow call buffer_overflow @label1_05: mov [bx], al inc bx and bx, 0FFFh mov es:[di], al inc di jnz label1_06 mov ax, es add ax, 1000h mov es, ax @label1_06: ; edx =0 - end of stream dec edx jz exit_from_proc jmp start_decode ; --------------------------------------------------------------------------- @label1_07: push cx mov cl, [si] inc si jnz label1_08 ; check si overflow call buffer_overflow @label1_08: mov ch, [si] inc si jnz label1_09 ; check si overflow call buffer_overflow @label1_09: push si ; label1_07 to label1_09 - read WORD from input stream mov si, cx and si, 0FFFh ; si = (cx & 0xfff) ; si - addr and cx, 0F000h rol cx, 4 add cx, 3 ; cx = (cx >> 12) + 3 ; cx - size @slide_window_decode: mov al, [si] inc si and si, 0FFFh mov [bx], al inc bx and bx, 0FFFh mov es:[di], al inc di jnz label1_11 mov ax, es add ax, 1000h mov es, ax @label1_11: ; edx =0 - end of stream dec edx jz exit_from_proc_clear_stack ; while cx != 0 - copy next byte dec cx jnz slide_window_decode pop si pop cx jmp start_decode ; --------------------------------------------------------------------------- @exit_from_proc_clear_stack: add sp, 4 ; remove si and cx from stack @exit_from_proc: pop si pop ds retn sub_10349 endp [/codebox] Он же на Delphi (не работает как надо): [codebox]Program unlzx; {$APPTYPE CONSOLE} Var Fl: File; B: Byte; buff: Array[0..(1024*6)-1] Of Byte; i, p, o, l, s, x: Integer; Begin FillChar(buff, 1024*6, 0); AssignFile(Fl, '1.zlx'); FileMode:=0; Reset(Fl, 1); FileMode:=2; p := 0; s := 0; While Not EOF(Fl) Do Begin b := 0; BlockRead(Fl, B, 1); If b = 0 Then Break; For I := 1 To 8 Do Begin // if bit is set - read byte to output buffer If (b And 1 <> 0) Then Begin BlockRead(Fl, buff[p], 1, x); p := p+1; End Else Begin // else - read word, size&offs // buffer shift value o := 0; BlockRead(Fl, o, 2, x); l := (o ShR 12) + 3; // length o := o And $fff; // addr // not sure about this if p > $1000 Then s := p - $1000 else s := 0; While l > 0 Do Begin buff[p] := buff[s + o]; o := ((o + 1) And $fff); p:=p+1; l:=l-1; End; End; // go to next bit b := b ShR 1; End; End; CloseFile(Fl); p := 4969; buff[p-1] := 0; AssignFile(Fl, 'dump'); ReWrite(Fl, 1); BlockWrite(Fl, buff, p); CloseFile(Fl); End.[/codebox] |
Siberian GRemlin, | ||
| Dec 16 2010, 02:18 | InstallShield CAB View | Есть такая утилита как InstallShield 5.x/6.x Cabinet Compression & Maintenance Util (i5comp.exe / i6comp.exe). У меня к ней даже где-то исходные коды на сях валяются, попробую поковырять... Добавлено: Ha-ha! I tricked you! © Laura, Silent Hill 2 Распаковщик: i6compx.zip Unicode, правда, не поддерживается (тупо переводится в ANSI с заменой на "_" левых символов), но главное, что оно всё правильно распаковывает. Флаг 0x04000000 я поставил от балды, т.к. не знаю какой там должен быть правильный, чтобы по нему определить наличие отсутствия Unicode. Кстати, это новая версия (у меня её не было) и там нет необходимости в ZD*.DLL файлах для распаковки - соответствующая библиотека статически слинкована с программой, что очень удобно. |
Axsis, | ||
| Aug 9 2010, 10:11 | FireFox: addons, extensions, tweaks, etc. | Так, возвращаемся на несколько каталогов вверх и удаляем в файле "chrome.manifest" последнюю строчку: CODE overlay chrome://mozapps/content/downloads/unknownContentType.xul chrome://getfilesize/content/dialogOverlay.xul В противном случае GetFileSize будет вызываться при попытке скачать любой файл! А это чревато обломом, особенно на всяких файловых обменниках (где после начала закачки ссылка становится невалидной), потому что GetFileSize вызывался ДО начала скачивания файла FireFox'ом. |
Siberian GRemlin, | ||
| Aug 7 2010, 18:38 | FireFox: addons, extensions, tweaks, etc. | QUOTE(-=CHE@TER=- @ Jul 4 2010, 20:10) [snapback]2945[/snapback] Кто-нибудь знает, как скрестить FireFox и вот это (взять программу можно здесь)? В Opera это одной строчкой делалось, а как в меню FireFox вставить - хрен знает. Про соответствующее расширение знаю, но оно не работает с FTP и сильно ограничено по сравнению с полноценной программой. Заранее спасибо. Итак, свершилось! Что нужно сделать: 1) Установить расширение для FireFox Get File Size. 2) Установить программу Get File Size. 3) После этого закрываем FireFox и лезем вот сюда: C: \ Documents and Settings \ USERNAME \ Application Data \ Mozilla \ Firefox \ Profiles \ HPROFILE.default \ extensions \ getfilesize@skakunov.alexander \ chrome \ content\ где: USERNAME - имя пользователя HPROFILE - абстрактный хэш выданный FireFox'ом Далее открываем файл "load.js" и заменяем там функцию get_file_meta() на вот такое: [codebox]function get_file_meta( url, callback, strings ) { var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); file.initWithPath("C:\\Program Files\\GetFileSize\\GetFileSize.exe"); var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess); process.init(file); var args = ["/url:" + url]; process.run(false, args, args.length); }[/codebox] Чтобы пункт меню "Get file size" появлялся не только на файлах, но и на картинках - открываем файл "overlay.js", находим там: CODE document.getElementById("context-getfilesize").hidden = !gContextMenu.onLink || gContextMenu.onMailtoLink; Меняем на: CODE document.getElementById("context-getfilesize").hidden = !(gContextMenu.onLink || gContextMenu.onImage) || gContextMenu.onMailtoLink; Далее находим: CODE url = gContextMenu.linkURL; Меняем на: CODE url = (gContextMenu.onLink ? gContextMenu.linkURL : gContextMenu.imageURL || gContextMenu.mediaURL); Всё! Жизнь удалась!!! |
Siberian GRemlin, | ||
| Jul 27 2010, 17:38 | Delphi, Asm, C, WinAPI, PHP, ... | Блин, ставил по работе на удалённый сайт Joomla - застрелиться. Сама CMS в архиве .tar.gz, но хостер (сюрприз!) не даёт доступ по SSH, а также запускать через PHP exec() / system() чтобы выполнить команду распаковки. В Интернете погуглил - ничего кроме использования двух упомянутых выше команд посоветовать не могут. Короче, распаковал я Жумлу и стал копировать по FTP на сайт... 2 часа с гаком - un-freaking-believable! Скорость заливки-то большая, да вот при создании нового файла удалённый сайт почему-то тупил по несколько секунд, а в Жумле этих файлов, как снега зимой. В общем, в конце копирования я уже озверел и решил написать свою программу, которая бы соединяла файлы в один (один файл быстро заливается) и чтобы этот файл можно было потом на сервере распаковать вызвав через HTTP скрипт на PHP для распаковки. Формат файла filedump: DWORD - размер файла (size) DWORD - размер строки имени файла (nlen) CHARS - имя и путь файла (nlen байт) BYTES - содержимое файл (size байт) Повторить до конца файла. Маленькое замечание: т.к. надо было ещё и пустые каталоги на всякий случий паковать и создавать на сервере, то с именем файла такое дело - если оно заканчивается на '/' - то это каталог, нужно его создать. Файлы при паковке сортируются, так что ситуации, когда надо распаковать файл, каталога для которого ещё нет, по идее, не должны встречаться. Опционально в эти скрипты можно добавить сжатие gz (если хостер поддерживает) и дату со временем. pack.php - пакует в архив filedump всё в текущем каталоге и его подкаталогах. unpk.php - распаковывает filedump в текущий каталог. Т.к. скрипты дописал практически одновременно с окончанием копирования - проверить времени не было, но, по идее, должны работать. Кстати, там с правами под иксы может быть косяк - все файлы будут пользователю Apache принадлежать - это можно поковырять и chmod() при распаковке добавить для файлов. [cut=Код программ] pack.php CODE <?php set_time_limit(0); Function GetFileList($dirpath){ $dirs = array(); if(is_dir($dirpath)){ if($dh = opendir($dirpath)){ while($file = @readdir($dh)){ if(($file != '.') && ($file != '..')){ if((filetype($dirpath.$file) == 'file')){ $dirs[] = $dirpath.$file; }else{ $dirs[] = $dirpath.$file.'/'; $dirs = array_merge($dirs, GetFileList($dirpath.$file.'/')); } } } closedir($dh); natcasesort($dirs); } } return($dirs); } // optional: add filedatetime and compression // $tm = filemtime($file); // getfiletime // touch($file, $tm); // setfiletime // $file = gzcompress($file, 9); // $file = gzdecompress($file); @unlink('./filedump'); $list = GetFileList('./'); for($i = 0; $i < count($list); $i++){ // echo $list[$i]."\r\n"; $fl = fopen('./filedump', 'ab'); if($fl){ $name = substr($list[$i], 2); $nlen = strlen($name); $size = 0; $file = ''; if($name[$nlen-1] != '/'){ $size = filesize('./'.$name); $file = file_get_contents('./'.$name); } $size = pack('V', $size); $nlen = pack('V', $nlen); fwrite($fl, $size, 4); fwrite($fl, $nlen, 4); $size = unpack('V', $size); $nlen = unpack('V', $nlen); fwrite($fl, $name, $nlen[1]); fwrite($fl, $file, $size[1]); } fclose($fl); } ?> unpk.php CODE <?php set_time_limit(0); $fend = filesize('./filedump'); $fl = fopen('./filedump', 'rb'); while(ftell($fl) < $fend){ $size = 0; $nlen = 0; $name = ''; $file = ''; $size = fread($fl, 4); $nlen = fread($fl, 4); $size = unpack('V', $size); $nlen = unpack('V', $nlen); $size = $size[1]; $nlen = $nlen[1]; $name = fread($fl, $nlen); if($size != 0){ $file = fread($fl, $size); } if($name[$nlen-1] == '/'){ @mkdir('./'.$name, 0777); }else{ @file_put_contents('./'.$name, $file); } } fclose($fl); ?> [/cut] |
Siberian GRemlin, | ||
| Jul 21 2010, 16:00 | Delphi, Asm, C, WinAPI, PHP, ... | QUOTE(-=CHE@TER=- @ Jul 20 2007, 13:48) [snapback]1101[/snapback] Xplorer! RasGetConnectionStatistics - это как раз в точности то, что мне нужно было! Большое, нет просто ГРОМАДНОЕ спасибо! Опять всплыл вопрос, только на этот раз хочу получить количество принятых / переданных байт для сетевой карты. RasGetConnectionStatistics() тут уже не помогает. Сделал программу через GetIfTable, но, почему-то, если не сильно активен, там обычно на полмегабайта меньше трафика, чем отображается по команде "netstat -e". Кто-нибудь знает, в чём прикол? Добавлено: А! Всё, понял - "netstat -e" показывает суммарный трафик на адаптере - т.е. сколько пришло и ушло со всех интерфейсов. А т.к. интерфейса два (+loopback), то нужно было тупо трафик суммировать. Хотя это даже удобно - если не учитывать loopback, то можно получить "чистый трафик", который уходит во внешку. |
Siberian GRemlin, | ||
| Jul 7 2010, 15:17 | !Вирусы! | Ну, у знакомых стоит на лицензионной 7-ке лицензионный же кашпировский. Тоже пару раз BSoD получали. Просили разобраться, я грешным делом думал что это 7-ка сырая, все обновления поставил - хрен там. Теперь, кажется, я понял что к чему. (*улыбается*) Я хочу тоже выплеснуть тут немного гнева, но по поводу Dr.Web. Короче, попользовался пару месяцев этим т.н. "антивирусом" - количество негативных эмоций просто хлещет через край. Итак, финальный список. Минусы: 1) Ублюдский установщик, который требует планировщик, хотя антивирусу эта служба для работы вообще никуда не упёрлась. 2) Ублюдская система сканирования файлов, когда при открытии даже текстовых файлов система впадает на полминуты в ступор не отвечая ни на что. 3) Ублюдский эврестический анализ - я неделю ругался со службой поддержи, потому что их антивирус убивал .EXE файл программы на Delphi после того как я применял StripReloc (там НИЧЕГО не было, кроме CreateFile и FileMapping, причём я им даже исходные коды выслал!). Они это поправили - затем (та же программа!!!) стала удаляться если при компиляции после StripReloc ещё и UPX сжать! Опять пришлось ругаться - внесли в исключения, но недавно убили ещё одну мою старую программу на Delphi, которую я писал для скачивания сайтов. Ругаться и писать в службу поддержки я перестал - это, как я понял, бесполезно, т.к. сам по себе антивирус просто ущербный. 4) Ублюдская система карантина - в корне того диска, где найден вирус создаётся скрытый (а в случае NTFS ещё и без прав доступа - не удалишь!) каталог "Drweb Quarantine", куда складируются вирусы. Причём каталог создаётся даже если вирус был удалён как неизлечимый! Чтобы снести этот каталог приходится лезть в свойства и делать себя владельцем. А если ваш знакомый притащил Flash накопитель с вирусом? Не вопрос! Он теперь будет наслаждаться на своей Flash ещё и скрытым каталогом "Drweb Quarantine", несмотря на то, что у него дома вообще другой антивирус стоит - программистам из Dr.Web на это плевать, как и на пользователей. У всех нормальных антивирусов есть каталог "Quarantine Files", где-нибудь в %APPDATA%, но Dr.Web - это русский антивирус - бессмысленный, безжалостный и беспощадный!!! 5) ТОРМОЗНАЯ (да-да! у Dr.Web именно ТОРМОЗНАЯ) система проверки файлов - не поверите, когда писал распаковщик для Zanzarah: The Hidden Portal (в последних обновлениях на сайте есть) - я охренел дожидаться пока архив распакуется, но как только отключил SpiDer Guard - файлы распаковались просто с бешеной скоростью! Та же самая вещь с установкой и удалением программ - переустановка Apache, например, занимает с включённым антивирусом просто дикое количество времени. Нахрен такой антивирус, который постоянно приходится выключать?! Вот, несмотря на то что Symantec был прожорлив и тормозил сильно при загрузке, скорость распаковки файлов с ним не сильно снижалась, при этом вирусы он не пропускал. А ведь я перешёл на Dr.Web именно из-за усиленно распространяемых непонятно кем (отделом по пиару?..) "слухов" про его "быстродействие"! И, кстати, у меня лиц.версия - мне знакомые люди ключ подарили, с намёком, что Dr.Web "быстрый", мол, тебе пригодится с твоим компьютером... Плюсы: 1) Не удаляет keygen и crack... хотя на фоне того, что он удаляет мои программы, где никогда вирусов не было - это жиденький плюс. 2) Грузится и обновляется немного быстрее, чем Symantec... Короче, я сейчас присматриваюсь к другим антивирусам. Вероятность того что я буду переходить с этого ужаса летящего на крыльях ночи под названием Dr.Web равна 500%. И, кстати, почитал форум Dr.Web - там им пользователи много во что носом тыкали, чтобы исправили. Думаете хотя бы зачесались? Хрен там - только отшучиваются в ответ. Конструктивный диалог невозможен - желаю растерять им всю свою аудиторию и разориться. |
Siberian GRemlin, | ||
| Jun 19 2010, 12:03 | Обмен любезностями | QUOTE(Axsis @ Jun 19 2010, 11:16) [snapback]2940[/snapback] Ну почему же? Выпуская по одной игре серии в год, раз в пятилетку получается весьма достойный экземпляр. Но не факт, что выпускай они по одной игре в раз пять лет, получалось бы каждый раз выпускать хит. Всё познаётся в сравнении Это точно. Ладно, поживём - увидим.QUOTE(Axsis @ Jun 19 2010, 11:16) [snapback]2940[/snapback] PS: со 2 по 14 июня принимал участие с бета-тестировании NFS:World - тоже довольно интересная штука, помимо гонок с онлайновыми соперниками можно и от копов поудирать. Карта довольно большая, состоит из 3 частей (все соединены между собой, конечно) - первая часть - полностью карта из most wanted, вторая - из carbon, а третья - новая. Вроде как и сэкономили, а вроде как и ничего плохого в этом нет - знакомые трассы и знаешь где можно срезать путь или избавиться от погони Это Online-версия NFS что-ли? Massively multiplayer online racing simulator? Хе-хе.Кстати, узнал случайно про вот такую игру - эдакая смесь из Portal и Mirror's Edge. Tag_Setup.exe занимает 58,215,165 байт - это кто качать с офсайта будет. Почему-то закачка рвётся, а размер при скачивании сервер не указывает. Посмотрел видео на трубе (осторожно - это прохождение - спойлеры!) захотелось самому попробовать, но обломался - игра требует шейдеры версии 2.0a, а у меня вообще никаких нет... |
useretail, | ||
| Jun 15 2010, 10:25 | Обмен любезностями | EA анонсировала новую часть Need for Speed Вот интересно, как потом будут различать старую Hot Pursuit и новую? Особенно это бесит когда ищешь что-нибудь в Интернете - ищешь старую вещь, а тебе только новую лажу с тем же названием поисковик выплёвывает... P.S. Оружие в NFS... да... Вообще, в выпусках всяких продолжений самое главное - это вовремя остановиться. |
Axsis, | ||
| Jun 1 2010, 17:46 | Delphi, Asm, C, WinAPI, PHP, ... | Иногда бывает надо при распаковке игровых архивов попутно создавать необходимые каталоги. Например для файла: DATA\TEXTURES\ENVIRONMENT\SKY_01.TGA их нужно создать аж 3 штуки. Вот небольшие куски кода на Delphi и C для таких вещей. Обрабатываются обе косые черты. В обоих случаях идентификатор S не должен являться константой. CODE For I:=1 To Length(S) Do If ((S[I] = '\') Or (S[I] = '/')) Then Begin CreateDirectory(PChar(Copy(S, 1, I - 1)), Nil); { Delphi понимает только слэш } S[I]:='\'; End; CODE char *s; ... s = filenamepath; while(*s){ if((*s == '\\') || (*s == '/')){ *s = 0; mkdir(filenamepath); /* а C понимает только такой */ *s = '/'; } s++; } |
Siberian GRemlin, | ||
| May 3 2010, 10:08 | Замена системных модулей для Delphi | Вопрос - чем можно воспользоваться в Delphi для увеличения длины строки до нужного размера? Если писать так: CODE SetLength(S, Len); То при использовании DCC32HACK в готовый код пихается куча всякого барохла, в частности строчка имени программы указанная в: CODE Program PrgName; Т.е. в исполняемый файл зачем-то пихается строчка "PRGNAME", если не писать "Program...", то на месте "PRGNAME" будет слово "PROGRAM". Зачем это делается - знают только в фирме Borland. Если использовать: CODE S:=#32; While Length(S) < Len Do S:=S + S[1]; То это долго. Можно конечно и так: CODE S:=#32; While Length(S) < Len Do S:=S + S; S:=Copy(S, 1, Len); Но при большом Len это будет занимать в два раза больше чем надо памяти на финальном шаге - как следствие жуткие тормоза при реаллоцировании. Есть какие-нибудь ещё способы удобные? Для тех случаев, когда нужна именно строка - когда нужен просто буфер, то там и GetMem()'ом обойтись можно... Или тогда вопрос к Grom PE ты можешь в DCC32HACK как-нибудь перехватить работу с SetLength()?.. |
Grom PE, | ||
| Apr 22 2010, 10:05 | Delphi, Asm, C, WinAPI, PHP, ... | Чтобы долго не писать чего да как - приведу [cut=лог чата] QUOTE ******: можно тогда тебя отвлеч глупым вопросом? -=CHE@TER=-: Давай. ******: есть девайс. типа ноут. ******: есть оборудование - типа жпс приёмник. ******: оно типа встроено и его не видно ******: покуда не будет запущена утилита и не поставлена галочка ******: вопрос -=CHE@TER=-: Даже Everest не видит? А в BIOS девайс этот включён? -=CHE@TER=-: А, понял. ******: можно ли как то отследить что делает эта утилита ******: тоесть покуда она не занесёт какой то битик в памяти - девайс не виден даже в эвересте -=CHE@TER=-: Теоретически возможно всё. ******: а помню на двк была прога... типа оболочки -=CHE@TER=-: А после закрытия утилиты и выгрузки её из памяти - девайс продолжает работать? ******: и можно было пошагово отслеживать выполнение программы ******: да. продолжает ******: если утилиту запустить повторно - то девайс исчезает :) -=CHE@TER=-: Возможно она свой драйвер ставит, который после перезагрузки отваливается (так и задумано). ******: неее ******: драйверами не пахнет 100% -=CHE@TER=-: Дай мне эту тулзу. -=CHE@TER=-: И скажи чего ты там и где ставишь. ******: ща ******: я кинул ******: жпс активатор написал не знаю кто ******: изначально и этого даж не было ******: DEVICE_SWITCH.EXE поидеи запускается жпс активатором, автоматом передвигает курсор и жмёт применить ******: Enable gsc3f GPS -=CHE@TER=-: Прикол. -=CHE@TER=-: Оно у меня не запускается. ******: угу, вначале проверяет есть ли оборудование? -=CHE@TER=-: Видимо, да. -=CHE@TER=-: Т.е. оно запускается и тут же выходит. -=CHE@TER=-: Даже ничего не сообщает. ******: поидеи папка тулс должна находиться в корне диска ц -=CHE@TER=-: А какая разница? ******: покрайней мере когда она там... мне сообщает на обычном компе что девайс не может быть выключен -=CHE@TER=-: У-у-у... Оно тут через DeviceIoControl работает... ******: переведи на земной язык :) -=CHE@TER=-: Это проще будет документацию по устройству найти и написать свою программу, чем разбираться в исходном коде. -=CHE@TER=-: Тут сильно замороченный алгоритм её включения / выключения. -=CHE@TER=-: Нужна спецификация: в какой порт чего пихать, что должно прийти, что означает и т.д. -=CHE@TER=-: http://mikhail.krivyy.com/2004/07/28/asus-l3c-led/ -=CHE@TER=-: Вот например - человек включает и выключает лампочку светодиода. -=CHE@TER=-: Нужно тоже самое, но для твоего GPS. -=CHE@TER=-: Ща тогда тебе ломанный файл дам - просто сграблю значения. -=CHE@TER=-: Лови. -=CHE@TER=-: Скопируй к себе на ноут и запусти, затем дай содержимое файла KERNEL.LOG, который появится. -=CHE@TER=-: После запуска нажми, чтобы оно разрешило твоё устройство. ******: угу ******: готово DeviceIoControl(232,2237444,INBUFF:1 1381453892 0 0 0 ,20,OUTBUFF768,) DeviceIoControl(232,2237444,INBUFF:2 1447380049 1 8 1237008 ,20,OUTBUFF768,) CBFARR(0 4 2) DeviceIoControl(232,2237444,INBUFF:2 1313817683 1 8 1240192 ,20,OUTBUFF768,) CBFARR(0 4 2) DeviceIoControl(232,2237444,INBUFF:1 1381453892 0 0 0 ,20,OUTBUFF768,) DeviceIoControl(232,2237444,INBUFF:2 1447380049 1 8 1237008 ,20,OUTBUFF768,) CBFARR(0 4 2) DeviceIoControl(232,2237444,INBUFF:2 1179599955 1 8 1240192 ,20,OUTBUFF768,) CBFARR(0 4 2) -=CHE@TER=-: Я сделал прогу. ******: что где тестить*? -=CHE@TER=-: Лови gsc3fgps.exe -=CHE@TER=-: Если просто запустишь - то включит, если с каким-либо параметром (любым) - то выключит. ******: ура! работает :) -=CHE@TER=-: Сунь тогда прогу в автозагрузку - будет сразу при включении компьютера подключать твой GPS. Код программы: CODE program gsc3fgps; {$IFNDEF DCC32HACK}uses Windows;{$ENDIF} // http://mikhail.krivyy.com/2004/07/28/asus-l3c-led/ // http://mikhail.krivyy.com/wp/wp-content/uploads/2006/10/asusled.cpp // http://www.scintilla.utwente.nl/~timl/devicepower/v1.1/devicepower.c const ATKACPI_IOCTL_CODE = $222404; // ioctl command codes DPWR = $52575044; // Device Power list QDEV = $56454451; // Query Device SDON = $4E4F4453; // Set Device On SDOF = $464F4453; // Set Device Off type ioctl_arg = packed record dummy: word; arg_bytes: word; value: longword; end; pioctl_arg = ^ioctl_arg; ioctl_cmd = packed record ctype: longword; cmd_code: longword; has_arg: longword; arg_bytes: longword; arg: pioctl_arg; end; function CtrlACPI(ATKACPIhandle: THandle; code, hasArg, arg: longword): longbool; var iarg: ioctl_arg; icmd: ioctl_cmd; bout: longword; buff: array[0..191] of longword; begin bout := 0; iarg.dummy := 0; iarg.arg_bytes := 4; iarg.value := 2; icmd.ctype := hasArg; icmd.cmd_code := code; icmd.has_arg := arg; icmd.arg_bytes := 8 * arg; icmd.arg := pioctl_arg(longword(@iarg) * arg); result := DeviceIoControl(ATKACPIhandle, ATKACPI_IOCTL_CODE, @icmd, sizeof(icmd), @buff[0], sizeof(buff), bout, nil); end; // enable gsc3f GPS var ATKACPIhandle: THandle; begin ATKACPIhandle := CreateFile('\\.\ATKACPI', GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0); if ATKACPIhandle <> INVALID_HANDLE_VALUE then begin CtrlACPI(ATKACPIhandle, DPWR, 1, 0); CtrlACPI(ATKACPIhandle, QDEV, 2, 1); if ParamCount <> 0 then CtrlACPI(ATKACPIhandle, SDOF, 2, 1) // OFF else CtrlACPI(ATKACPIhandle, SDON, 2, 1); // ON CloseHandle(ATKACPIhandle); end; end. |
Siberian GRemlin, | ||
| Dec 5 2009, 16:36 | Delphi, Asm, C, WinAPI, PHP, ... | QUOTE(-=CHE@TER=- @ Jun 25 2009, 04:10) [snapback]2704[/snapback] Однако! Первая строчка с получением 0 байт у меня работает нормально (XP SP3), а на соседней машине (2003 SP2) появляется BSoD с DRIVER_IRQL_NOT_LESS_OR_EQUAL. При этом сама машина с 2003 работает нормально и BSoD там никогда не было. Как оказалось BSoD был совсем не там...Короче, перед CloseSocket(), особенно для UDP-соединений нужно делать shutdown(), желательно с SD_BOTH, иначе на некоторых сетевых картах, драйвера к которым писали криворукие имбецилы, очень быстро забивается буфер и случается BSoD (т.к. приложение уже не забирает пакеты из буфера и вообще закрыло сокет, а тупой драйвер всё ещё продолжает их туда пихать). На сетевых картах, драйвера к которым писали вменяемые люди, при таком раскладе буфер самоочищается и сокет самозакрывается - т.е. сделана жёсткая проверка "на дурака". |
Siberian GRemlin, | ||
| Nov 4 2009, 14:42 | Hitman 2 и 3 | У меня ни той, ни другой игры нет, так что помочь не смогу. А сколько каждая из них в архиве занимает? Я просто не знаю где могут заголовки храниться, но, если в отдельном файле лежат, то он может быть, к примеру, зашифрован. Ещё, маловероятно, но всё же, они могут быть прямо в .EXE файле игры. Тупо, конечно, но вот, скажем, Silent Hill 2, шрифты свои в sh2pc.exe хранит как массив байт. |
useretail, | ||
| Oct 8 2009, 15:35 | Обмен любезностями | Обновил свой сайт сегодня - мне товарищ из далёкой Бразилии (!) помог дожать патч ко второму турку, чтобы музыка под Vista / Seven тоже нормально работала. Плюс туда же добавил патч для мультипроцессорных систем. Ко всему этому доступны исходные коды. Все подробности на сайте. |
Siberian GRemlin, | ||
| Sep 18 2009, 18:39 | Dreamcast Half-Life [.WAV] | CODE @echo off md new for %%a in ("*.wav") do ffmpeg.exe -i "%%a" "new\%%a.wav" Озвучка страшная, кстати. Чем тебя от 7-го волка не устроила? |
Siberian GRemlin, | ||
| Sep 18 2009, 15:18 | CheckSum | Спасибо большое! Всё, выложил на сайт. |
Капитан Фокин, | ||
| Sep 2 2009, 15:29 | Новости сайта | У нас начиная с утилит для "Zone Raiders" тащился мрачный баг с .TGA картинками: CODE TGAHeader.ImageDescriptor:=$30; Хотя должно было быть $20. Из-за чего все картинки были зеркально отражены при открытии в Photoshop (или в любой другой программе, которая правильно читала .TGA). Сейчас исправил (и уменьшил размер заодно) у программ к которым были исходные коды. QUOTE Bit 4 - Left-to-Right orientation 0=L/R 1=R/L TGA HeaderBit 5 - Top/Bottom orientation 0=B/T 1=T/B |
jTommy, Siberian GRemlin, | ||
| Sep 2 2009, 12:30 | Runaway 2: The Dream of the Turtle | Так, разобрался при помощи полной версии игры с этим флагом. Если 0, то распаковываемый файл .WAV, иначе - .MP3. Причём во всей игре есть только один не пустой (больше 44 байт) .WAV файл и находится он вторым по счёту в RESOURCE.M05, остальные все - пустышки. Кстати, у некоторых распакованных .MP3 даже ID3v1 прописан. Например, как я понял (игру не ставил) распакованный файл RAM01_11.MP3 с тегом "MASTER - Musica Gina Cae" - это заглавная тема игры. Кстати, там не только исполнитель прописан, но и остальные теги: Title: Musica Gina Cae Artist: MASTER Album: R2 Year: 2006 Genre: Blues Утилиты добавил на сайт. QUOTE MASTER - Musica Gina Cae (Extracted name: RAM01_11.MP3) You ready for this? Runaway 2! There comes a time in which You have to follow your dreams Because such is life. Here we go! I don't dare To face what I fear inside and Break up the chain... to do this just tonight, Now my inner me is needing a change Far from being insane I will do what pleases me. "For once in your life be real" These are the words that it said. "I long to be free again" Now I'm waiting for you. What do you say? One time I don't know from where this feeling grows Am I bound to leave what's between each other? I don't care 'bout what the world may say. That's the way it goes and I want to runaway. And I want... And I want... And I want... And I want to runaway... QUOTE MASTER - Musica Avion se estrella (Extracted name: RAM01_12.MP3) Here comes the break down, I will do what pleases me, 'Cuz this is a brand new life, This is a (yeah...) brand new life, (comes, which...) Ready for you what do you say? (you have to follow what your heart says) Lost and frustrated, Divided and hated This sadness squeezes my soul. I'll never be that lazy You may not understand I may be dumb and crazy but I won't be normal again. I don't know from where this feeling grows Am I bound to leave what's between each other? I don't care 'bout what the world may say. That's the way it goes and I want to runaway. It'll only be me, no time to cry, I will turn back the hands of time, But will never give up on my quest, But will never give up on my quest Run away, I will go I don't know Lost and frustrated, No more said-goodbyes, One time 'cuz, May my soul be strong This sadness squeezes my soul. Nevertheless we'll be, (ah ah ah) Masters at work I don't know from where this feeling grows Am I bound to leave what's between each other? I don't care 'bout what the world may say. That's the way it goes and I want to runaway. I wanna go, I will go, no way.... I'll have to run away... RYK-C... В ресурсах игры только эти два коротких ремикса оригинальной композиции Runaway. Полную версию можно послушать на сайте Ryk-C (там же, кстати, и текст песни полный есть). |
Siberian GRemlin, | ||
| Aug 31 2009, 14:19 | Runaway 2: The Dream of the Turtle | В свете написания утилит для первой части решил глянуть и вторую. QUOTE(Axsis @ Apr 28 2009, 19:36) [snapback]2645[/snapback] 1) Видео (предположительно) Угу. Ключи для расшифровки лежат в DATAVC00.000, там правда другой формат в отличие от первой части. Да и алгоритм шифрования тоже. Расшифровщик сделал, кстати, даже ничего брутфорсить не пришлось как раньше.Файлы в папке DATAV, похоже что это BIK'и с зашифрованным заголовком - первые 0x400h байт зашифрованы, а потом "продолжается" какая-то таблица смещений, похожую структуру можно найти в любом BIK файле, только вот как именно шифруется заголовок пока не понятно. На то что там именно BIK косвенно указывают binkw32.dll и строка "uses RAD video" в титрах игры QUOTE(Axsis @ Apr 28 2009, 19:36) [snapback]2645[/snapback] Структура довольно простая - первые 4 байта количество файлов в архиве, потом идут 9-тибайтовые записи в количестве, равном количеству файлов. Каждая запись - 4 байта смещение, 4 байта размер, 1 байт какой-то флаг, возможно всегда равен 1. Я делал только распаковщик музыки (*.M0?) для DEMO-версии (полную пока что не достал), так вот там если флаг равен 0, то вместо .MP3 распаковывается 44-байтный .WAV (пустышка, в размере секции data 4 нуля даже). Я сейчас файлы с этим флагом просто пропускаю. Надо будет потом полную версию глянуть.Сами файлы - MP3 и WAV (внутри которых мне попадались всё те же MP3). Здесь звуки, музыка, озвучка. Имён файлов нигде не видно. Дешифровщик видео и распаковщик музыки сделал. Кто-нибудь хочет на полной версии проверить? Потому что со своей скоростью я ещё только дня через два её докачаю. Как раздобуду полную версию - проверю всё окончательно и добавлю на сайт (частично успел уже распаковать с недокачанного образа файлы и проверить дешифрование видео). |
Siberian GRemlin, | ||
| Jun 11 2009, 17:54 | Authorized | В связи с тем, что я удалил последнюю тему Raf-9600 "Юмор" и общим недопониманием со стороны, то хочу пояснить что да как. Пусть это будет вроде добавления к правилам. Итак - проект CTPAX-X ориентирован, в основном, на создание распаковщиков / запаковщиков игровых ресурсов, nocd для игр, переводов, просто помощи товарищам по интересам и другим, около компьютерным темам. Если нормальный человек хочет почитать новости - он куда идёт? Правильно - на новостной сайт. Если нормальный человек хочет почитать анекдоты - он куда идёт? Правильно - на анекдотную ленту. ... Если нормальный человек хочет <что угодно> - он куда идёт? Правильно - на <тематический> сайт. Меня, например, всегда убивала попытка каких-нибудь крупных сайтов, тематики "Как разводить цветочки дома" создать подфорумы про ПО, компьютерное железо, ядерные реакторы, подводные лодки, "маленьких зелёных человечков" и занятия йогой. Да, бесспорно, удобно, когда ты приходишь каждый день на форум почитать про "ромашку обыкновенную", заодно ещё и узнать новости про последние достижения в области компьютерного железа. Однако, на сайте, у которого компьютерное железо это основная тематика можно узнать гораздо больше, подробней и актуальней. Не заменит любимый проект про "цветочки" весь остальной Интернет. Так же, как его не заменит и проект CTPAX-X. У него есть своя тематика и её нужно придерживаться, чтобы не превратиться в болото. Я вовсе не запрещаю создавать новые темы. Однако, я хочу, чтобы здесь не появлялись темы, особенно туалетно-сортирного юмора про то "кто с кем, как, каким образом и местом" - если есть любители копаться в чужих тараканах и грязном нижнем белье - сделайте одолжение и избавьте от своего пристрастия этот проект. !No pasaran! Здесь таких тем не будет. Так что, пожалуйста, не надо заливать ещё и этот проект всяким шлаком. Раз уж взялся писать, то замечу ещё пару вещей: - за постоянные злостные оскорбления пользователей (неважно кем, неважно кого) - гарантия бана 100% - мата тут тоже не надо - если сильно хочется выразить эмоции заменяйте часть символов на * - вы не одни в Интернете - темы о религии, политике, сексе и прочей мирской суете тут тоже не нужны совсем - у каждого своя точка зрения, так что спорить, ругаться и портить отношения я ни с кем не собираюсь и другим делать это здесь не дам - Интернет большой, найдите место, где всё это любят и уважают и добро туда пожаловать Я вовсе не обвиняю кого-либо из участников команды или пользователей форума. Я высказываю свою точку зрения и то как я вижу этот проект. Если вы не согласны - вы вольны отписаться здесь и высказать своё мнение. Впрочем, я подозреваю, что это всё мелочи и многие меня поддержат. |
Siberian GRemlin, xkL0#J, | ||
| Apr 26 2009, 11:14 | Баги сайта и форума | Сегодня форум очень мрачно накрылся тазом. При попытке зайти вылазило сообщение, что не найден файл: QUOTE IPB WARNING [2] require_once(/forum/cache/skin_cache/cacheid_/skin_global.php) [function.require-once]: failed to open stream: No such file or directory (Line: 1389 of /sources/ipsclass.php) Х.з. из-за чего, но утилита FSY21_Skin_Cache_Rebuilder_v1.1.zip помогла. |
Siberian GRemlin, | ||
| Apr 24 2009, 17:59 | Обмен любезностями | !!!Ахтунг!!! Компания Yahoo! до конца текущего года закроет сервис GeoCities, который предоставляет пользователям бесплатный хостинг. Порылся в своих ссылках - вот что нашёл: - Официальный сайт GFE (Game File Explorer) (с 2002 года заброшен) - Resco Software - TLJ Viewer (программа для работы с ресурсными файлами квеста The Longest Journey) - ATX - Traspasser hack та самая программа, про которую уже писал, для улучшения графики - надо будет написать автору и спросить куда он собирается переезжать. - The Homepage of Andres James - сайт единственно существующего редактора уровней к Trespasser (с 2000 года не обновляется). Пока что, сходу, больше ничего вспомнить не могу - кидайте, у кого есть, ссылки с описаниями, чтобы можно было унести пока оно ещё доступно. Добавлено: Засада полная - пытаюсь некоторые файлы скачать, а они через раз доступны, то страничка открывается, то вот такое: 403 Sorry, Service Temporarily Unavailable. |
Siberian GRemlin, | ||
| Apr 9 2009, 05:39 | No-CD for NFS 2 SE (patch) | QUOTE(Raf-9600 @ Apr 8 2009, 19:17) [snapback]2612[/snapback] Ты меня провоцируешь на лицемерие. Чтобы я тебя обманул. Потомучто сечас у меня нет причин относиться к Гремлину лучше. Да, я согласен, возможно он полезен, он русифицировал всю серию C&C, любителем которой я являюсь, он помогает тебе. Но мое отношение к нему сложилось от его человеческих качеств, иза его жадности, агрессивности, неотзывчивости. Если ему нужно чтобы отношение к нему было лучше, тогда пусть избавляеться от своих недостатков, если нет - мириться с любым мнением людей о себе. Ладно, есть у тебя своя правда...Но: Во-первых, это мне не нравится (а не кто-то там меня попросил - если что), что ты оскарбляешь других участников команды. Во-вторых, "жадность, агрессивность, неотзывчивость" - всё совершенно мимо кассы. Судить о человеке только по какому-то одному, вырванному из контекста, случаю - нельзя. Я довольно хорошо знаю всех участников команды, а его аж с начала 2005 года как минимум, так что могу судить о ком бы то ни было более объективно чем ты. В-третьих, последний раз убедительно прошу не оскарблять его или кого-нибудь другого. Между прочим в теме про OGG он спросил нужна ли тебе помощь (это не смотря на то, что ты про него здесь статью поместил), а ты ему в ответ хамить начал. Если что-то не устраивает - просто промолчи или вежливо откажись. Переходить на личности не стоит. Ладно, я не требую от тебя каких-то извинений или лицемерия - твоё право относиться к кому-нибудь так как ты считаешь нужным. Но я последний, китайский, раз предупреждаю - что если хамство в адрес других участников будет продолжаться здесь - на мою помощь точно больше можешь не рассчитывать. Хотя бы даже потому что это нарушение п.4 правил форума ("в чужой монастырь со своим уставом не лезут"). Вот nocd - проверяй. Если работает перемещу на сайт. Для работы надо запустить программу с именем файла для исправления или перетащить оригинальный файл на неё - должен будет появиться исправленный: NCD_*.exe nfs2secd.zip О результатах отпишись. |
Raf-9600, | ||
| Apr 6 2009, 18:02 | No-CD для Tomb Raider 4. The Last Revelation | Игра как-то странно проверяет диск... вернее потом с ним работает - достаточно просто закрыть процедуру проверки и она магическим образом начинает работать с файлами в текущем каталоге (даже всякие A:\ и C:\script.dat внутрях править не нужно). QUOTE xor eax,eax inc eax retn Кстати, наверное будет проще универсальный патч сделать (как для TR1, RE1 и второй Кирандии), чем проверять какое смещение брать по языковым ресурсам. Для версии 1.0: QUOTE Смещение: Было Стало 000739B0: 83 33 000739B1: EC C0 000739B2: 18 40 000739B3: A1 C3 Для версии 1.1 (патч на AG.ru есть): QUOTE Смещение: Было Стало 00073C10: 83 33 00073C11: EC C0 00073C12: 18 40 00073C13: A1 C3 Кстати, не ставил игру - просто скопировал следующие файлы на жёсткий диск и вытащил CD: QUOTE [audio] [Data] [FMV] tomb4.exe SCRIPT.DAT us.dat binkw32.dll Readme.txt Ко всему прочему удалил из каталогов (первые три в списке) дублирующийся binkw32.dll - зачем его в каждый каталог понапихали - непонятно. И последнее - у меня игра с родным диском работала, но он был второй в системе, а не первый. |
Siberian GRemlin, | ||
« < 4 5 6 7 8 >
| Упрощённая версия | Сейчас: 7th March 2026 - 18:19 |