Hello World
Ici on trouve de l'actu, des essais sur les technos de l'information, de l'étrange et pas mal de bazard...
Ce blog véhicule des images, quelques videos, des sons, du code et des outils.
Bon surf.
Ici on trouve de l'actu, des essais sur les technos de l'information, de l'étrange et pas mal de bazard...
Ce blog véhicule des images, quelques videos, des sons, du code et des outils.
Bon surf.
Toujours dans le domaine de la visualisation 3D de données, on peut rechercher des patterns caractéristiques.
On attribue une couleur a chaque pattern et on place un cube en (x,y,z) ,ce triplet étant fonction de la position de l'octet dans le fichier.
Un code de visu simplissime:
If (IntegerArray%(k)=Pattern8%) Then
red%=0
green%=128
blue%=255
;Place un Cube-Copie
NewSpcell=CopyEntity(Spcell,trinity)
PositionEntity NewSpcell,xx,yy,zz
EntityColor NewSpcell,red%,green%,blue%
End If
Si on charge un fichier de pattern représentant des OpCodes caractéristiques (manipulation de l'accumulateur,sauts, subs) de microprocesseur (ici du 6502) on peut obtenir des résultats interessants.
Visualisation d'une image disque contenant du binaire Oric:
Prochaine étape: Exploration de code viral, d'ou le nom "Pluto Kiss".
Pour chercher un ordre caché dans un flot de données qui semblent aléatoires, rien de tel qu'une petite balade dans l'espace des phases:
On visualise (en 3D, merci Blitz) des triplets (x,y,z) de valeurs successives.
Ex, si IntegerArray% contient les valeurs du fichier données:
xx=IntegerArray%(a2*k-b2)-IntegerArray%(a3*k-b3)
yy=IntegerArray%(a1*k-b1)-IntegerArray%(a2*k-b2)
zz=IntegerArray%(a0*k-b0)-IntegerArray%(a1*k-b1)
(ou a1=a2=a3=1 et b1=1,b2=2,b3=3)
Autre variante, ou pseudox et pseudoy parcourent un plan 800x600 quand on balaye les valeurs:
pseudocos=pseudox/Sqr(pseudox^2+pseudoy^2)
pseudosin=pseudoy/Sqr(pseudox^2+pseudoy^2)
xx=IntegerArray%(a2*k-b2)-IntegerArray%(a3*k-b3)
yy=Int(pseudocos*(IntegerArray%(a1*k-b1)-IntegerArray%(a2*k-b2)))
zz=Int(pseudosin*(IntegerArray%(a0*k-b0)-IntegerArray%(a1*k-b1)))
Apres, ce n'est que de la manipulation d'objets 3d en Blitz.
Exemple de "nebulisation" d'un code source:
C'est peut-étre déja connu, mais voici un moyen que j'utilise pour récupérer les octets d'un échantillon sonore chargé en Blitz.
La bidouille consiste à utiliser les commandes dédiées aux "Bank" mémoire sur les Descripteurs Son.
Brutal, mais ça à l'air de marcher.
Maintenant il faut vérifier que ce n'est pas n'importe quoi qui est renvoyé par PEEK et trouver comment les échantillons sont stockés/codés en RAM.
Si c'est cohérent et donc exploitable, encore une nouvelle possibilité du Blitz...
Un chtio bout de code:
AppTitle "Blitz Basic Bank Hack
Graphics 640,480,16,2
;On prend un prog Casio FX602p
SndFileName$="number.mp3"
SndBank=LoadSound(SndFileName$)
;A partir de maintenant, on traite le handle Son
;Comme un handle Bank
;Bare Metal Coding Style...
SndLength=BankSize(SndBank)
x1=0
y1=0
Color 255,0,0
For cursor=1 To 639 ;SndLength pour tout parcourir
CurrentByte=PeekByte (SndBank,cursor)
y1=480-CurrentByte
Line x1,480,x1,y1
Delay 5
x1=x1+1
If (x1>639) Then
;Cls
x1=0
End If
Next
Et son résultat:
Du Grenouillage en perspective...
Bon c'est un lecteur pour C64, mais il est quand meme plus beau que ceux des PCs.
Encore du OldSchool en QuickBasic: Bidouillage de formats spéciaux et création d'erreurs:
'Implantation de protection
'Sur une D7.
'Formattage non standard
'Uniquement par le BIOS.
'Donc fonctionne sur toute machine.
'A soumettre au scanner ecrit en QB.
'
'Franck Balmer, Janvier 2007.
'Ben oui...
'
'BIOS Sub
DECLARE SUB GetDPT ()
DECLARE SUB SetDPT (sectsize%, nbrsect%)
DECLARE SUB ResetDrive (Drive%)
DECLARE SUB FormatTrack (Drive%, track%, head%, nbrsect%)
DECLARE SUB InitIDTable ()
DECLARE SUB InitIDTable2 ()
'$INCLUDE: 'QB.BI'
DIM reg AS RegTypeX, reg2 AS RegTypeX
DIM databuffer%(9216) '18 Secteurs = 9216
DIM formattable%(72) '18 Secteurs * 4 Octets
'Table pour 18 (max) IDs: Piste/Face/Secteur/Taille
DIM TrackInError%(2, 90) 'Attention sup a maxtrack
DIM SectorInError%(2, 90, 22)
CLS
INPUT "Side (0/1) : ", head%
INPUT "Track (0..79) : ", track%
'INPUT "To Track : ", maxtrack%
maxsect% = 9
size% = 512
nbrsect% = maxsect%
sectsize% = 2
'Always Floppy A:
Drive% = 0
rerr% = 0
GetDPT
CALL SetDPT(sectsize%, nbrsect%)
ResetDrive (Drive%)
InitIDTable2
CALL FormatTrack(Drive%, track%, head%, nbrsect%)
CALL SetDPT(2, 18)
ResetDrive (Drive%)
PRINT "Protection implented (Not Verified :) !"
'Happy New Year
END
SUB FormatTrack (Drive%, track%, head%, nbrsect%)
SHARED formattable%(), rerr%, reg AS RegTypeX, reg2 AS RegTypeX
intnum% = &H13
numsectors% = nbrsect%
reg.ds = -1
reg.es = VARSEG(formattable%(0))
reg.bx = VARPTR(formattable%(0))
reg.cx = 256 * track% + 0
reg.dx = 256 * head% + Drive%
reg.ax = 5 * 256 + numsectors% 'Fonction 5: Format
CALL INTERRUPTX(intnum%, reg, reg2)
reg.ax = &H100
CALL INTERRUPTX(intnum%, reg, reg2)
rerr% = INT((reg2.ax) / 256)
END SUB
SUB GetDPT
SHARED SegDPT, OffDPT
'On calcule adresse DPT
DEF SEG = &H0
OffDPT = PEEK(4 * &H1E) + 256 * PEEK(4 * &H1E + 1)
SegDPT = PEEK(4 * &H1E + 2) + 256 * PEEK(4 * &H1E + 3)
DEF SEG
'PRINT ">>DPT at: "; HEX$(SegDPT); ":"; HEX$(OffDPT)
END SUB
SUB InitIDTable2
SHARED formattable%(), track%, head%, nbrsect%, sectsize%
'On Poke comme des malades
SegIDTable = VARSEG(formattable%(0))
OffIDTable = VARPTR(formattable%(0))
DEF SEG = SegIDTable
'Initialisation (Pseudo) Table
s% = 1
FOR k% = 1 TO 4 * nbrsect% STEP 4
POKE OffIDTable + k% - 1, track%
POKE OffIDTable + k% + 0, head%
POKE OffIDTable + k% + 1, s%
POKE OffIDTable + k% + 2, sectsize%
s% = s% + 1
NEXT k%
'Ici on trafique la table des IDs
'Secteur par secteur
'Secteur 2
POKE OffIDTable + 4, track%
POKE OffIDTable + 5, head%
POKE OffIDTable + 6, 2
POKE OffIDTable + 7, 3
'Secteur 6
'POKE OffIDTable + 20, track%
'POKE OffIDTable + 21, head%
'POKE OffIDTable + 22, 6
'POKE OffIDTable + 23, 0
'Fin des manips...
DEF SEG
END SUB
SUB ResetDrive (Drive%)
DIM reg AS RegTypeX, reg2 AS RegTypeX
reg.ax = &H0 ' function number 0
reg.dx = Drive%
CALL INTERRUPTX(&H13, reg, reg2)
END SUB
SUB SetDPT (sectsize%, nbrsect%)
SHARED SegDPT, OffDPT
'On change des valeurs dans la Table des Params Disk
'Gére maintenant la taille des secteurs
DEF SEG = SegDPT
'Sector Size
POKE OffDPT + &H3, sectsize%
'Number of Sectors
POKE OffDPT + &H4, nbrsect%
DEF SEG
END SUB
Yop !
| Novembre 2009 | ||||||||||
| L | M | M | J | V | S | D | ||||
| 1 | ||||||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | ||||
| 9 | 10 | 11 | 12 | 13 | 14 | 15 | ||||
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | ||||
| 23 | 24 | 25 | 26 | 27 | 28 | 29 | ||||
| 30 | ||||||||||
|
||||||||||
Commentaires