LH 3 anni fa
parent
commit
f1764f49c4

+ 2 - 0
.gitignore

@@ -116,3 +116,5 @@ fabric.properties
 .idea/
 *.iml
 IZsetup/distPackagerBase
+
+**/bin/

+ 9 - 6
QuickStuff/src/main/java/QuickVerifyCrap/PWNaFirmwareGrabScriptGenerator.java

@@ -8,9 +8,9 @@ import java.util.List;
 public class PWNaFirmwareGrabScriptGenerator {
     public static void main(String[] args){
         try{
-        BufferedReader br = new BufferedReader(new FileReader("Q:\\LOA\\000013\\S30-FW\\firmware.dat"));
+        BufferedReader br = new BufferedReader(new FileReader("Q:\\LOA\\000013\\S30-FW\\firmware2.dat"));
         String fwline = br.readLine();
-        BufferedWriter w = new BufferedWriter(new FileWriter("Q:\\LOA\\000013\\S30-FW\\firmwarehunt.txt"));
+        BufferedWriter w = new BufferedWriter(new FileWriter("Q:\\LOA\\000013\\S30-FW\\firmwarehunt-reloaded.txt"));
         w.write("#!/bin/bash\n");
         HashSet<String> linesAdded = new HashSet<>();
         while(fwline!=null)
@@ -90,10 +90,13 @@ public class PWNaFirmwareGrabScriptGenerator {
     {
         System.out.println(major+"--"+minor+"--"+patch);
         List<String> temp = new ArrayList<>();
-        temp.add(prefix+(major+1)+".0.0"); // poking for next major
-        temp.add(prefix+(major)+"."+(minor+1)+".0"); // poking for next minor
-        temp.add(prefix+(major)+"."+minor+"."+(patch+1)); // poking for next patch
+        //temp.add(prefix+(major+1)+".0.0"); // poking for next major
+        //temp.add(prefix+(major+1)+".0"); // poking for next major
+        //temp.add(prefix+(major)+"."+(minor+1)+".0"); // poking for next minor
+        temp.add(prefix+(major)+"."+(minor+1)); // poking for next minor
+        //temp.add(prefix+(major)+"."+minor+"."+(patch+1)); // poking for next patch
         System.out.println(major+"--"+minor+"--"+patch);
+        /*
         while(major>0&&minor>=0&&patch>=0)
         {
             temp.add(prefix+(major)+"."+minor+"."+(patch));
@@ -112,7 +115,7 @@ public class PWNaFirmwareGrabScriptGenerator {
                 minor=9;
                 major--;
             }
-        }
+        }/**/
         return temp.toArray(new String[]{});
     }
 }

+ 60 - 13
SenaBitWiggler/src/main/java/de/nplusc/izc/senabitwiggler/FlashFSUnWiggler.java

@@ -112,10 +112,17 @@ public class FlashFSUnWiggler {
     public static void unpackCSRFS(File firmware, File outfolder)
     {
         try (RandomAccessFile f = new RandomAccessFile(firmware,"r")) {
+            int filler = -1;
+            byte[] fillershort = new byte[]{(byte)0xff,(byte)0xff};
+            RandomAccessFile boobs = new RandomAccessFile(new File(outfolder,"debug.dat"),"rw");
+
             byte[] javaisDipshit = new byte[4];
             byte[] javaShorty = new byte[2];
             int magic = f.readInt(); //ignored
+
+
             f.read(javaisDipshit);
+            boobs.write(filler);
             int sizeFile = Ints.fromBytes(javaisDipshit[0],javaisDipshit[1],javaisDipshit[2],javaisDipshit[3]);
             //old shit calculates in words and not in bytes on sizes
             if((sizeFile*2)>f.length())
@@ -125,21 +132,41 @@ public class FlashFSUnWiggler {
                 System.err.println("ZOINKS!!!, mismatch");
                 return;
             }
+            byte[] background = new byte[(int)f.length()];
+            for(int i=0;i<background.length;i++)
+            {
+                background[i]=0;
+            }
+            boobs.seek(0);
+            boobs.write(background);
+            boobs.seek(0);
+            boobs.write(filler);
+            boobs.write(filler);
+
+
+
             f.read(javaisDipshit);
             int countFileRecords = (Ints.fromBytes(javaisDipshit[2],javaisDipshit[3],javaisDipshit[0],javaisDipshit[1]) &0x00FFFFFF);
             System.out.println(countFileRecords);
             int countFileRecordsXXX = (Ints.fromBytes(javaisDipshit[1],javaisDipshit[0],javaisDipshit[3],javaisDipshit[2])&0x00FFFFFF);
             System.out.println(countFileRecordsXXX);
-            f.seek(8);
+            boobs.write(fillershort);
+            boobs.seek(10);
+            f.seek(10);
+            byte[] fakeFileRecord = new byte[12];
+            for(int i=0;i<12;i++)
+            {
+                fakeFileRecord[i]=(byte)0xee;
+            }
             FileMetadata[] files = new FileMetadata[countFileRecords];
             for(int i=0;i<countFileRecords;i++)
             {
                 FileMetadata fmd = new FileMetadata();
                 f.read(javaisDipshit);
-                int sizeAndFlags = Ints.fromBytes(javaisDipshit[2],javaisDipshit[3],javaisDipshit[0],javaisDipshit[1]);
+                int sizeAndFlags = Ints.fromBytes(javaisDipshit[0],javaisDipshit[1],javaisDipshit[2],javaisDipshit[3]);
                 int size = sizeAndFlags&0x00FFFFFF;
-                System.out.println(sizeAndFlags);
-                System.out.println(size);
+                System.out.println("SZFlg>>"+sizeAndFlags);
+                System.out.println("SZExtr>>"+size);
 
                 fmd.offset_fname=size;
                 if((sizeAndFlags&0xFF000000)<0)
@@ -148,10 +175,11 @@ public class FlashFSUnWiggler {
                     fmd.is_dir=true;
                 }
                 f.read(javaisDipshit);
-                fmd.offset=Ints.fromBytes(javaisDipshit[2],javaisDipshit[3],javaisDipshit[0],javaisDipshit[1]);
+                fmd.offset=Ints.fromBytes(javaisDipshit[0],javaisDipshit[1],javaisDipshit[2],javaisDipshit[3]);
                 f.read(javaisDipshit);
-                fmd.length=Ints.fromBytes(javaisDipshit[2],javaisDipshit[3],javaisDipshit[0],javaisDipshit[1]);
+                fmd.length=Ints.fromBytes(javaisDipshit[0],javaisDipshit[1],javaisDipshit[2],javaisDipshit[3]);
                 files[i]=fmd;
+                boobs.write(fakeFileRecord);
             }
             for(int i=0;i<countFileRecords;i++)
             {
@@ -165,16 +193,22 @@ public class FlashFSUnWiggler {
                 {
                     f.seek(fmd.offset_fname*2); //words again...
                     f.read(javaShorty);
-                    short fnlength = Shorts.fromBytes(javaShorty[1],javaShorty[0]);
+                    short fnlength = Shorts.fromBytes(javaShorty[0],javaShorty[1]);
                     byte[] fname = new byte[fnlength*2];
                     f.read(fname);
                     byte[] fname_real = new byte[fnlength];
                     for(int fi=0;fi<fname_real.length;fi++)
                     {
-                        fname_real[i]=fname[i*2+1]; //zapping each upper bit...
+                        fname_real[fi]=fname[fi*2+1]; //zapping each upper bit...
                     }
-
-                    String s = File.separator+new String(fname);
+                    for(int j=0;j<fname.length;j++)
+                    {
+                        fname[j]=(byte) 0xCC;
+                    }
+                    boobs.seek(fmd.offset_fname*2); //words again...
+                    boobs.write(new byte[]{(byte)0xDD,(byte)0xDD});
+                    boobs.write(fname);
+                    String s = File.separator+new String(fname_real);
                     fmd.filename=s;
                 }
                 if(fmd.is_dir)
@@ -184,6 +218,10 @@ public class FlashFSUnWiggler {
                     for(int j= 0;j< fmd.length;j++)
                     {
                         int subfiles = fmd.offset+j-1;
+                        if(subfiles==-1)
+                        {
+                            System.out.println("WTF?");
+                        }
                         files[subfiles].parentpath=fmd.parentpath+fmd.filename;
                     }
                 }
@@ -191,14 +229,23 @@ public class FlashFSUnWiggler {
                 {
 
                     System.out.println("Reading:"+fmd.parentpath+fmd.filename+"("+fmd.length+")@"+fmd.offset);
-                    byte[] filecontent = new byte[fmd.length*2];
+                    byte[] filecontent = new byte[fmd.length];
                     if(fmd.length>0)
                     {
                         f.seek(fmd.offset*2);
-                        f.read(filecontent);
-
+                        int readme = f.read(filecontent);
                         RandomAccessFile out = new RandomAccessFile(outfolder+fmd.parentpath+fmd.filename,"rw");
                         out.write(filecontent);
+                        if(readme<filecontent.length)
+                        {
+                            throw new IndexOutOfBoundsException("ZARF");
+                        }
+                        for(int k=0;k<filecontent.length;k++)
+                        {
+                            filecontent[k]=(byte)0xBB;
+                        }
+                        boobs.seek(fmd.offset*2);
+                        boobs.write(filecontent);
                     }
                 }
             }