예제 #1
0
파일: codatify.py 프로젝트: wolfien666/ida
    def codeify(self, ea=idc.BADADDR):
        func_count = 0
        code_count = 0

        if ea == idc.BADADDR:
            ea = self.get_start_ea(self.CODE)
            if ea == idc.BADADDR:
                ea = ida_shims.get_first_seg()

        print("\nLooking for undefined code starting at: %s:0x%X" % \
              (ida_shims.get_segm_name(ea), ea))

        while ea != idc.BADADDR:
            try:
                if ida_shims.get_segm_attr(ea, idc.SEGATTR_TYPE) == self.CODE:
                    if ida_shims.get_func_name(ea) != '':
                        ea = ida_shims.find_func_end(ea)
                        continue
                    else:
                        if ida_shims.add_func(ea):
                            func_count += 1
                        elif ida_shims.create_insn(ea):
                            code_count += 1
            except:
                pass

            ea = ida_shims.next_addr(ea)

        print("Created %d new functions and %d new code blocks\n" % \
              (func_count, code_count))
예제 #2
0
파일: codatify.py 프로젝트: wolfien666/ida
    def get_start_ea(self, attr):
        ea = idc.BADADDR
        seg = ida_shims.get_first_seg()

        while seg != idc.BADADDR:
            if ida_shims.get_segm_attr(seg, idc.SEGATTR_TYPE) == attr:
                ea = seg
                break
            else:
                seg = ida_shims.get_next_seg(seg)

        return ea
예제 #3
0
    def _get_segments(self, attr):
        segments = []
        seg = ida_shims.get_first_seg()

        while seg != idc.BADADDR:
            if ida_shims.get_segm_attr(seg, idc.SEGATTR_TYPE) == attr:
                start = ida_shims.get_segm_start(seg)
                end = ida_shims.get_segm_end(seg)
                segments.append((start, end))
            seg = ida_shims.get_next_seg(seg)

        return segments
예제 #4
0
파일: codatify.py 프로젝트: wolfien666/ida
    def get_data_section(self):
        ea = idc.BADADDR
        seg = ida_shims.get_first_seg()
        stop = idc.BADADDR

        while seg != idc.BADADDR:
            if ea == idc.BADADDR and \
                    ida_shims.get_segm_attr(seg, idc.SEGATTR_TYPE) == 2:
                ea = seg

            stop = ida_shims.get_segm_end(seg)
            seg = ida_shims.get_next_seg(seg)

        return ea, stop
예제 #5
0
    def stringify(self):
        n = 0
        ea = self.get_start_ea(self.DATA)

        if ea == idc.BADADDR:
            ea = ida_shims.get_first_seg()

        print "Looking for possible strings starting at: 0x%X..." % ea,

        for s in idautils.Strings():
            if s.ea > ea:
                if not ida_shims.is_strlit(ida_shims.get_full_flags(s.ea)) \
                        and ida_shims.create_strlit(s.ea, 0):
                    n += 1

        print "created %d new ASCII strings" % n
예제 #6
0
파일: codatify.py 프로젝트: wolfien666/ida
    def datify(self):
        ea = self.get_start_ea(self.DATA)
        if ea == idc.BADADDR:
            ea = ida_shims.get_first_seg()

        print("Converting remaining data to DWORDs...", end=' ')

        while ea != idc.BADADDR:
            flags = ida_shims.get_full_flags(ea)

            if (ida_shims.is_unknown(flags) or ida_shims.is_byte(flags)) and \
                    ((ea % 4) == 0):
                ida_shims.create_dword(ea)
                ida_shims.op_plain_offset(ea, 0, 0)

            ea = ida_shims.next_addr(ea)

        print("done.")

        self._fix_data_offsets()