Artykuły na każdy temat
C:\ścieżka\do\konwertera\KSC-Converter.exe "C:\ścieżka\do\pliku\KSC\losowy.ksc"
Wynikiem działania tego programu będzie plik losowy.JPEG, który pojawi się w folderze, w którym znajdował się plik KSC. Mogłem dać dwa parametry do programu (input i input) jednak nie chciało mi się. Nikt mi za to nie płaci i nie ma, co się użalać nad rozlanym mlekiem. Gdybyście chcieli przekonwertować cały folder to wsadzacie w niego KSC-Converter.exe i tworzycie plik BAT o następującej zawartości:
@echo off
FOR %%i IN (*.ksc) DO KSC-Converter.exe "%%i"
Po jego zapisaniu odpalamy go i jeżeli nic nie popsuliście to w wyniku działania aplikacji w tym samym folderze, co pliki KSC powinny się pojawić pliki JPEG. Przy okazji powiem ciekawostkę. DOS nie akceptuje - albo _ w nazwie programu. Bardziej to drugie. Jeżeli będziecie chcieli to możecie samemu sprawdzić. Myślę, że taka forma jest łatwiejsza niż zaznaczanie dużej ilości plików KSC z okna KscViewer'a.
<?php
include('./ksc.class.php');
$ksc = new ksc;
// KSC to JPG
$ksc -> open('./data/a.ksc');
$ksc -> decrypt_ksc();
$ksc -> save('./data/a.jpg');
// JPG to KSC
$ksc -> open('./data/b.jpg');
$ksc -> encrypt_jpg();
$ksc -> save('./data/b.ksc');
?>
Tak wygląda ksc.class.php:
<?php
/**
* @author CapaciousCore
* @version 1.0
*/
class ksc
{
private $m_r = 0x464;
private $m_c1 = 0xCE6D;
private $m_c2 = 0x58BF;
private $data;
public function open($path)
{
$data = @file_get_contents($path);
$length = @filesize($path);
if($data && $length)
{
$this -> m_r = 0x464;
$this -> data['input'] = $data;
$this -> data['length'] = $length;
return true;
}
else
{
return false;
}
}
public function save($path)
{
$result = (@file_put_contents($path, $this -> data['output']) ? true : false);
unset($this -> data);
return $result;
}
public function decrypt_ksc()
{
$destination_length = $this -> data['length'] - 8;
for($h = 0; $h < 8; ++$h)
{
$this -> decrypt(ord($this -> data['input'][$h]));
}
for($h = 8; $h < $destination_length; ++$h)
{
$this -> data['output'][] = chr($this -> decrypt(ord($this -> data['input'][$h])));
}
}
public function encrypt_jpg()
{
$destination_length = $this -> data['length'] + 8;
// If PHP < 4.2.0 then use srand(floor(time() / (60*60*24))) or mt_srand(/* whatever you want */)
for($h = 0; $h < 4; ++$h)
{
$header[$h] = rand() & 0xFF;
}
$header[4] = 0x4B;
$header[5] = 0x53;
$header[6] = 0x43;
$header[7] = 1;
$header = array_map('chr', $header);
for($h = 0; $h < 8; ++$h)
{
$this -> data['output'][$h] = chr($this -> encrypt(ord($header[$h])));
}
for($h = 0; $h < $destination_length; ++$h)
{
$this -> data['output'][] = chr($this -> encrypt(ord($this -> data['input'][$h])));
}
}
private function decrypt($cipher)
{
$plain = ($cipher ^ ($this -> m_r >> 8));
$this -> m_r = (($cipher + $this -> m_r) * $this -> m_c1 + $this -> m_c2) & 0xFFFF;
return $plain;
}
private function encrypt($plain)
{
$cipher = ($plain ^ ($this -> m_r >> 8));
$this -> m_r = (($cipher + $this -> m_r) * $this -> m_c1 + $this -> m_c2) & 0xFFFF;
return $cipher;
}
}
?>
Przykładem zmodyfikowanego formatu KSC jest plik fake.ksc.
Komentarze
Dodaj komentarz