首页
社区
课程
招聘
[求助]有没有软件直接从udd里提取标签和注释
发表于: 2013-6-23 18:41 10355

[求助]有没有软件直接从udd里提取标签和注释

2013-6-23 18:41
10355
如题,调试目标找不到了,但还想把以前做的记录找回来(从udd里面)

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 1042
活跃值: (495)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
貌似是根据文件名找的UDD吧。
2013-6-23 19:26
0
雪    币: 233
活跃值: (59)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不知道你的OD是什么版本? 下面的python脚本是针对版本1.1的,供你参考:
########################
# Tested with Python 2.7
# udd file version 1.1
#######################

import os, sys
import struct
import datetime

def FindUs(f, data): # get offset and comments
    index, key = FindKey(data)
    while index: 
        f.seek(index + 7)
        offset = f.read(4)
        hexstr = hex(struct.unpack('I', offset)[0])        
        Writefile(hexstr + '\t\t' + f.readline()[:-2] + \
                  '[*User*]' * (key == 'Us6'), output)  # *User* for User comments       
        data = data.replace(key, 'XXX', 1)
        index, key = FindKey(data)
def Writefile(string, f):
    f.writelines(string + '\r\n')
    
def FindKey(data):
    index_c = data.find('Us:') # OD generated comments
    index_u = data.find('Us6') # User added comments

    if index_c == -1 and index_u == -1:
        return None, None
    elif index_c < index_u or index_u == -1:
        return index_c, 'Us:'
    else:
        return index_u, 'Us6'

def PrintHeader(f, data): # generate the header
    f.seek(8)
    v_str = f.read(21)
    Writefile('"'* 40, output)
    Writefile(v_str, output)
    Writefile('Generated on ' + datetime.datetime.now().strftime('%Y-%m-%d %H:%M'), output)
    Writefile('"' * 40 + '\r\n', output)
        
if __name__ == '__main__':
    try:
        udd_file = sys.argv[1] # get parameter as file
        f = open(udd_file, 'rb')

        data = f.read() # read file as string
        output = open(udd_file + '.txt','w') # create a new file
        Writefile('FileName: ' + udd_file, output)
        
        PrintHeader(f, data)
        Writefile ('Offset\t\t' + 'Comments', output)
        Writefile('======'.ljust(20) + ('='* 25).ljust(50), output)

        FindUs(f, data)        
        Writefile('\r\n[END OF FILE]', output) # File is done
        
        f.close()
        output.close()
        sys.exit(0)
        
    except:
        raise


比如保存脚本为uddReport.py,运行的话可以:
python uddReport.py udd文件名

不出错的话会生成 udd文件名.txt。
2013-6-24 12:32
0
雪    币: 233
活跃值: (59)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
对以上的脚本进行了修改,以兼顾OD 2.01版本。
上传的附件:
2013-6-25 01:05
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
好东东啊,多谢
不知能否导出label?(现在只有comment)
2013-6-29 22:46
0
雪    币: 233
活跃值: (59)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
应该可以导出label。
不过上面的版本速度太慢,下面的版本改用正则后提高了不少。
上传的附件:
2013-6-30 09:34
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这个版本好快,但是出现了BUG
原先
0xfcb08                3.01修复后:如果丹青远游,杭州事件后继续远游[*User*]
0xfcb2d                杭州行3回合[*User*]
0xfcc72                C4事件(洛阳花会[*User*]
0xfcd2c                87事件(凌云窟化解刀剑门[*User*]
这个
0xfcb08                .01修复后:如果丹青远游,杭州事件后继续远游
0xfcb2d                杭州行3回合
0xfcc72                C4事件(洛阳花会
0xfcd2c                事件(凌云窟化解刀剑门
2013-6-30 11:24
0
雪    币: 233
活跃值: (59)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
[QUOTE=darkradx;1193743]这个版本好快,但是出现了BUG
原先
0xfcb08                3.01修复后:如果丹青远游,杭州事件后继续远游[*User*]
0xfcb2d                杭州行3回合[*User*]
0xfcc72                C4事件(洛阳花会[*User*]
0xfcd2c                87事件(凌云窟化解刀剑门[*User*]
这...[/QUOTE]

上面的问题是由不同的OD版本引起的。那个*User*就不要管它。试试上面的更新如何?
看来得多做几个版本
2013-6-30 22:25
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
"起始数字被吞"的问题修好了
能加入导label吗
2013-7-1 12:50
0
雪    币: 233
活跃值: (59)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
它label也能导出的。测试下吧
2013-7-3 10:56
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
真的没见到label啊
2013-7-10 00:08
0
雪    币: 233
活跃值: (59)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
我试了试,还真是没有导出v1.1的label。所以我把上面的脚本更新了。
2013-7-10 21:58
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
这次可以了导出label

能不能导出的地址加上400000
我就可以直接调整一下格式,用labelmaster/myinfo导入了

我悲剧的一次就是两个同名的EXE文件,作用相同,就是OEP不同还是Section不同,导致OD重新分析
label/comment因为没导出备份,udd已经清了,bak又导不出来,前面的辛苦全破费了
现在有了uddReport就好了:)
2013-7-10 23:12
0
雪    币: 233
活跃值: (59)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
导出的地址可以加上400000,但需要注意的是,并不是所有的PE文件base都是400000。
有两种办法:
1)自己指定image base。格式例子: 0x400000
(这个通过OD很容易查到)
需要把脚本文件中下面一行注释掉:
#import pefile

2)指定exe文件的路径,如 "C:\Program Files (x86)\Search32\Search32.exe"。脚本会计算 但这个办法,需要安装一个pefile模块:
下载地址:http://pefile.googlecode.com/files/pefile-1.2.10-123.zip

运行格式:
python uddReport.py [udd文件] [ImageBase]

python uddReport.py [udd文件] [exe文件的路径]

【注】如果udd文件或exe文件的路径字串中有空格的话,要用引号(单双皆可)引起来。
上传的附件:
2013-7-11 04:42
0
游客
登录 | 注册 方可回帖
返回
//