Outils pour utilisateurs

Outils du site


writeup:microcorruption:utiliser_ida

IDA MSP430 Micro Corruption

Comme l'interface n'est pas très pratique pour reverser le programme, j'ai développé un petit script python pour convertir le “Live Memory Dump” en .hex lisible par IDA.

Attention, pour qu'IDA puisse l'interpréter correctement, il faut lui spécifier que le processeur est un Texas Instrument MSP430. Sur la version d'IDA que j'utilise (la 6.1 d'ESET qui tourne sur internet) il faut que Python soit installé et qu'idapython fonctionne correctement pour pouvoir spécifier à IDA d'utiliser le jeu d'instruction du MSP430.

#!/usr/bin/env python
 
import argparse
import re
 
def calc_checksum(data):
	checksum = 0
	for char in data:
		checksum += ord(char)
	return (((checksum%256)^0xff)+1)&0xff
 
parser = argparse.ArgumentParser()
parser.add_argument('fin', help='File in')
parser.add_argument('fout', help='File out')
parser.add_argument('--ep', help='Entry point of the program', default='0000')
args = parser.parse_args()
 
empty_addr = None
cmds = [] # cmd = (where, what)
with open(args.fin, 'rb') as fichier:
	for line in [_.strip() for _ in fichier if _.strip() !=  '']:
		data = re.findall(r"[A-Fa-f0-9]{4}", line)[:9]
		if len(data) == 1: # juste l'adresse avec *
			pass
		elif len(data) == 9: # adresse avec data
			cmds.append((int(data[0], 16),"".join(data[1:]).decode("hex")))
		else:
			raise Exception("bad line : " + line)
 
lines = []
for addr, data in cmds:
	line = "%02X" % len(data)
	line += "%04X" % addr
	line += "00" # data record
	line += data.encode("hex")
	line += "%02X" % calc_checksum(line.decode("hex"))
	lines.append(":"+line)
 
ep = "00%s01" % args.ep
lines.append(":" + ep + "%02X" % calc_checksum(ep.decode("hex"))) # end of file + ep
 
print "[+] writing in %s ..." % args.fout
with open(args.fout, 'w') as out:
	for line in lines:
		print "\t ... %s" % line
		out.write(line+"\n")

Pour utiliser le script il faut simplement copier/coller le “Live Memory Dump” (après une première exécution c'est mieux) dans un fichier puis lancer le script dessus. Il est aussi possible de spécifier l'entry point avec –ep.

[tlk:.../CTF/microcorruption]$ python raw2hex.py hanoi.txt hanoi.hex --ep 4438
[+] writing in hanoi.hex ...
	 ... :1000000000004400000000000000000000000000AC
	 ... :100130003f0156702b5e712b722b732146013421C7
	 ... :10001000304100000000000000000000000000006F
	 ... :10015000000000000000000000000000085a00003D
	 ... :102400006b696b696b696b696b696b6900000000D4
	 ... :1024100000000000000000000000000000000000BC
	 ... :1024200000000000000000000000000000000000AC
	 ... :1043E0000000000000000000000000008e450100F9
	 ... :1043F0008e450300024600000a00000078453c4458
	 ... :104400003140004415425c0175f335d0085a3f40F5
	 ... :1044100000000f93072482455c012f839f4f0c46B9
	 ... :104420000024f9233f4022000f93062482455c01BB
	 ... :104430001f83cf430024fa23b01220450f4332d00C
	 ... :10444000f000fd3f30400a4630127f00b0127a453E
	 ... :10445000215330410412044124532183c443fcffFF
	 ... :104460003e40fcff0e540e120f1230127d00b012AF
	 ... :104470007a455f44fcff8f11315234413041456e23
	 ... :10448000746572207468652070617373776f7264ED
	 ... :1044900020746f20636f6e74696e75652e005265AF
	 ... :1044A0006d656d6265723a2070617373776f7264C7
	 ... :1044B0007320617265206265747765656e203820AF
	 ... :1044C000616e642031362063686172616374657265
	 ... :1044D000732e0054657374696e672069662070617D
	 ... :1044E0007373776f72642069732076616c69642eD0
	 ... :1044F00000416363657373206772616e7465642e37
	 ... :1045000000546861742070617373776f72642069FE
	 ... :1045100073206e6f7420636f72726563742e000077
	 ... :10452000c24310243f407e44b012de453f409e44CB
	 ... :10453000b012de453e401c003f400024b012ce4584
	 ... :104540003f400024b01254440f930324f240ba00B9
	 ... :1045500010243f40d344b012de45f290f600102400
	 ... :1045600007203f40f144b012de45b01248443041CC
	 ... :104570003f400145b012de4530411e4102000212AB
	 ... :104580000f4e8f10024f32d00080b0121000324117
	 ... :10459000304121830f120312814f0400b0127a457B
	 ... :1045A0001f410400315006003041041204412453DD
	 ... :1045B00021833f40fcff0f540f121312b0127a45B3
	 ... :1045C0005f44fcff8f1131500600344130410e1220
	 ... :1045D0000f122312b0127a453150060030410b12EF
	 ... :1045E0000b4f073c1b538f110f120312b0127a4569
	 ... :1045F00021526f4b4f93f62330120a000312b01270
	 ... :104600007a4521520f433b41304100130000000026
	 ... :10FF80004444444444444444444444444444444431
	 ... :10FF90004444444444444444444444444444444421
	 ... :10FFA0004444444444444444444444444444444411
	 ... :10FFB0004444444444444444444444444444444401
	 ... :10FFC00044444444444444444444444444444444F1
	 ... :10FFD00044444444444444444444444444444444E1
	 ... :10FFE00044444444444444444444444444444444D1
	 ... :10FFF0004444444444444444444444444444004405
	 ... :004438018
writeup/microcorruption/utiliser_ida.txt · Dernière modification: 2014/10/19 14:21 par tlk