Пример #1
0
 def test_flp_01(self):
     """Simple use case test."""
     faults_inject.main([
         "-i", self.file_in.name, "-o", self.file_out.name, "FLP", "1", "1"
     ])
     self.assertEqual(b'\x01\x00\x03\x04\x05\x06\x07\x08',
                      self.file_out.read())
Пример #2
0
 def test_jmp_12(self, err):
     """Not a supported jump instruction at the given address (ARM)."""
     self.file_in.write(b'\x00\x01\x02\x03\x04\x05\x06\x07')
     self.file_in.flush()
     with self.assertRaises(SystemExit):
         faults_inject.main(["-i", self.file_in.name, "-o", self.file_out.name, "-a", "arm", "JMP", "0x0", "0x0"])
     self.assertEqual('Unknow opcode at JMP address : 0x3\n', err.getvalue())
Пример #3
0
 def test_jmp_07(self, err):
     """Target address outside of possible range."""
     self.file_in.write(b'\x31\xc0\x31\xdb\x31\xc9\xeb\xfa\x31\xd2')
     self.file_in.flush()
     with self.assertRaises(SystemExit):
         faults_inject.main(["-i", self.file_in.name, "-o", self.file_out.name, "-a", "x86", "JMP", "0x6", "0x1000"])
     self.assertEqual('Warning: Target outside the file\nTarget value out of range : 4088\n', err.getvalue())
Пример #4
0
 def test_z1w_01(self, err):
     """Missing word size parameter."""
     with self.assertRaises(SystemExit):
         faults_inject.main([
             "-i", self.file_in.name, "-o", self.file_out.name, "Z1W", "3"
         ])
     self.assertEqual('Word size required when using Z1W\n', err.getvalue())
Пример #5
0
 def test_jmp_08(self, err):
     """Not a number target address."""
     self.file_in.write(b'\x31\xc0\x31\xdb\x31\xc9\xeb\xfa\x31\xd2')
     self.file_in.flush()
     with self.assertRaises(SystemExit):
         faults_inject.main(["-i", self.file_in.name, "-o", self.file_out.name, "-a", "x86", "JMP", "0x6", "abc"])
     self.assertEqual('Invalid target for JMP : abc\n', err.getvalue())
Пример #6
0
 def test_jcc_02(self):
     """Simple use case test (JNE rel16)."""
     self.file_in.write(
         b'\x31\xc0\x31\xdb\x31\xc9\x66\x0f\x85\xf9\xff\x31\xd2')
     self.file_in.flush()
     #    0:  31 c0                  xor    eax,eax
     #    2:  31 db                  xor    ebx,ebx
     #    4:  31 c9                  xor    ecx,ecx
     #    6:  66 0f 85 f9 ff         jne    0x4
     #    b:  31 d2                  xor    edx,edx
     faults_inject.main([
         "-i", self.file_in.name, "-o", self.file_out.name, "-a", "x86",
         "JCC", "0x6", "0x0"
     ])
     self.assertEqual(
         b'\x31\xc0\x31\xdb\x31\xc9\x66\x0f\x85\xf5\xff\x31\xd2',
         self.file_out.read())
     #    0:  31 c0                  xor    eax,eax
     #    2:  31 db                  xor    ebx,ebx
     #    4:  31 c9                  xor    ecx,ecx
     #    6:  66 0f 85 f5 ff         jne    0x0
     #    b:  31 d2                  xor    edx,edx
     faults_inject.main([
         "-i", self.file_in.name, "-o", self.file_out.name, "-a", "x86",
         "JCC", "0x7", "0x0"
     ])
     self.file_out.seek(0)
     self.assertEqual(
         b'\x31\xc0\x31\xdb\x31\xc9\x66\x0f\x85\xf5\xff\x31\xd2',
         self.file_out.read())
Пример #7
0
 def test_jmp_06(self, err):
     """Not a number jump address."""
     self.file_in.write(b'\x00\x01\x02\x03\x04\x05\x06\x07')
     self.file_in.flush()
     with self.assertRaises(SystemExit):
         faults_inject.main(["-i", self.file_in.name, "-o", self.file_out.name, "-a", "x86", "JMP", "abc", "0x0"])
     self.assertEqual('Wrong address format : abc\n', err.getvalue())
Пример #8
0
 def test_jmp_11(self):
     """Simple use case test (ARM B instruction)."""
     self.file_in.write(b'\x07\x00\x00\xea')
     self.file_in.flush()
     #    0:	ea 00 00 07             b      0x24
     faults_inject.main(["-i", self.file_in.name, "-o", self.file_out.name, "-a", "arm", "JMP",  "0x0",  "0x2"])
     self.assertEqual(b'\xfe\xff\xff\xea', self.file_out.read())
Пример #9
0
 def test_jmp_10(self, err):
     """Not a supported jump instruction at the given address (after 0x66)."""
     self.file_in.write(b'\x66\xc0\x31\xdb\x31\xc9\xeb\xfa\x31\xd2')
     self.file_in.flush()
     with self.assertRaises(SystemExit):
         faults_inject.main(["-i", self.file_in.name, "-o", self.file_out.name, "-a", "x86", "JMP", "0x0", "0x0"])
     self.assertEqual('Unknow opcode at JMP address : 0xc0\n', err.getvalue())
Пример #10
0
 def test_z1b_04(self, err):
     """Not a number address."""
     with self.assertRaises(SystemExit):
         faults_inject.main([
             "-i", self.file_in.name, "-o", self.file_out.name, "Z1B", "abc"
         ])
     self.assertEqual('Wrong address format : abc\n', err.getvalue())
Пример #11
0
 def test_nop_11(self, err):
     """Invalid range."""
     with self.assertRaises(SystemExit):
         faults_inject.main([
             "-i", self.file_in.name, "-o", self.file_out.name, "-a", "arm",
             "NOP", "10-3"
         ])
     self.assertEqual('Address range empty : 10-3\n', err.getvalue())
Пример #12
0
 def test_z1w_02(self):
     """Simple use case test."""
     faults_inject.main([
         "-i", self.file_in.name, "-o", self.file_out.name, "-w", "2",
         "Z1W", "3"
     ])
     self.assertEqual(b'\x01\x02\x03\x00\x00\x06\x07\x08',
                      self.file_out.read())
Пример #13
0
 def test_z1w_11(self, err):
     """Invalid range."""
     with self.assertRaises(SystemExit):
         faults_inject.main([
             "-i", self.file_in.name, "-o", self.file_out.name, "-w", "2",
             "Z1W", "10--3"
         ])
     self.assertEqual('Wrong address format : 10--3\n', err.getvalue())
Пример #14
0
 def test_nop_01(self, err):
     """Missing arch."""
     with self.assertRaises(SystemExit):
         faults_inject.main([
             "-i", self.file_in.name, "-o", self.file_out.name, "NOP", "3"
         ])
     self.assertEqual('Architecture required when using NOP\n',
                      err.getvalue())
Пример #15
0
 def test_nop_08(self):
     """Simple use case test on a range."""
     faults_inject.main([
         "-i", self.file_in.name, "-o", self.file_out.name, "-a", "x86",
         "NOP", "1-3"
     ])
     self.assertEqual(b'\x01\x90\x90\x90\x05\x06\x07\x08',
                      self.file_out.read())
Пример #16
0
 def test_nop_04(self, err):
     """Unsupported arch."""
     with self.assertRaises(SystemExit):
         faults_inject.main([
             "-i", self.file_in.name, "-o", self.file_out.name, "-a", "abc",
             "NOP", "3"
         ])
     self.assertTrue("(choose from 'x86', 'arm')" in err.getvalue())
Пример #17
0
 def test_nop_03(self):
     """Simple use case test."""
     faults_inject.main([
         "-i", self.file_in.name, "-o", self.file_out.name, "-a", "arm",
         "NOP", "3"
     ])
     self.assertEqual(b'\x01\x02\x03\x00\xbf\x06\x07\x08',
                      self.file_out.read())
Пример #18
0
 def test_z1w_08(self):
     """Simple use case with a range."""
     faults_inject.main([
         "-i", self.file_in.name, "-o", self.file_out.name, "-w", "2",
         "Z1W", "1-6"
     ])
     self.assertEqual(b'\x01\x00\x00\x00\x00\x00\x00\x08',
                      self.file_out.read())
Пример #19
0
 def test_z1b_02(self, err):
     """Negative address."""
     with self.assertRaises(SystemExit):
         faults_inject.main([
             "-i", self.file_in.name, "-o", self.file_out.name, "Z1B", "-1"
         ])
     self.assertEqual('Address outside file content : byte -0x1\n',
                      err.getvalue())
Пример #20
0
 def test_nop_12(self, err):
     """Invalid range."""
     with self.assertRaises(SystemExit):
         faults_inject.main([
             "-i", self.file_in.name, "-o", self.file_out.name, "-a", "arm",
             "NOP", "10-s"
         ])
     self.assertEqual('Wrong address format : 10-s\n', err.getvalue())
Пример #21
0
 def test_z1w_03(self, err):
     """Negative word size."""
     with self.assertRaises(SystemExit):
         faults_inject.main([
             "-i", self.file_in.name, "-o", self.file_out.name, "-w", "-1",
             "Z1W", "3"
         ])
     self.assertEqual('Word size must be positive\n', err.getvalue())
Пример #22
0
 def test_jmp_04(self):
     """Simple use case test (JMP rel32 first in the file)."""
     self.file_in.write(b'\xe9\x00\x00\x00\x00\x31\xd2')
     self.file_in.flush()
     #    0:	e9 00 00 00 00       	jmp    0x5
     #    5:	31 d2                	xor    edx,edx
     faults_inject.main(["-i", self.file_in.name, "-o", self.file_out.name, "-a", "x86", "JMP",  "0x0",  "0x0"])
     self.assertEqual(b'\xe9\xfb\xff\xff\xff\x31\xd2', self.file_out.read())
Пример #23
0
 def test_other_01(self):
     """Reading two faults from a file."""
     self.file_in.write(b'\x01\x02\x03\x04\x05\x06\x07\x08')
     self.file_in.flush()
     self.file_cmd.write(b'NOP 0x3\nNOP 0x5')
     self.file_cmd.flush()
     faults_inject.main(["-i", self.file_in.name, "-o", self.file_out.name, "-a", "x86", "-f", self.file_cmd.name])
     self.assertEqual(b'\x01\x02\x03\x90\x05\x90\x07\x08', self.file_out.read())
Пример #24
0
 def test_flp_07(self, err):
     """Not a number bit offset."""
     with self.assertRaises(SystemExit):
         faults_inject.main([
             "-i", self.file_in.name, "-o", self.file_out.name, "FLP", "1",
             "abc"
         ])
     self.assertEqual('Wrong significance format : abc\n', err.getvalue())
Пример #25
0
 def test_nop_06(self, err):
     """Address outside the file."""
     with self.assertRaises(SystemExit):
         faults_inject.main([
             "-i", self.file_in.name, "-o", self.file_out.name, "-a", "arm",
             "NOP", "7"
         ])
     self.assertEqual('Address outside file content : byte 0x8\n',
                      err.getvalue())
Пример #26
0
 def test_jcc_05(self, err):
     """Jump address outside the file."""
     self.file_in.write(b'\x00\x01\x02\x03\x04\x05\x06\x07')
     self.file_in.flush()
     with self.assertRaises(Exception):
         faults_inject.main([
             "-i", self.file_in.name, "-o", self.file_out.name, "-a", "x86",
             "JCC", "0x1000", "0x0"
         ])
Пример #27
0
 def test_z1w_04(self, err):
     """Giant word size that would require to write outside the file."""
     with self.assertRaises(SystemExit):
         faults_inject.main([
             "-i", self.file_in.name, "-o", self.file_out.name, "-w",
             "1000", "Z1W", "3"
         ])
     self.assertEqual('Address outside file content : byte 0x8\n',
                      err.getvalue())
Пример #28
0
 def test_z1w_06(self, err):
     """Address outside the file."""
     with self.assertRaises(SystemExit):
         faults_inject.main([
             "-i", self.file_in.name, "-o", self.file_out.name, "-w", "2",
             "Z1W", "1000"
         ])
     self.assertEqual('Address outside file content : byte 0x3e8\n',
                      err.getvalue())
Пример #29
0
 def test_flp_03(self, err):
     """Out of the file byte offset."""
     with self.assertRaises(SystemExit):
         faults_inject.main([
             "-i", self.file_in.name, "-o", self.file_out.name, "FLP",
             "1000", "1"
         ])
     self.assertEqual('Address outside file content : byte 0x3e8\n',
                      err.getvalue())
Пример #30
0
 def test_flp_06(self, err):
     """Greater than 7 bit offset."""
     with self.assertRaises(SystemExit):
         faults_inject.main([
             "-i", self.file_in.name, "-o", self.file_out.name, "FLP", "1",
             "8"
         ])
     self.assertEqual('Significance must be between 0 and 7 : 8\n',
                      err.getvalue())