freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

IDApython提取信息
2021-04-20 18:20:05

数据提取:以Hitcon-Training LAB1为例 | IDApython

1919808-20200913203620597-1783608277.png

1919808-20200913204401003-1100083111.png

ea=here()
print hex(ea),idc.GetDisasm(ea)
ch=idc.GetDisasm(ea)
print ch[-9:]
ea=here()
print hex(ea),idc.GetDisasm(ea)
ch=idc.GetDisasm(ea)
print ch[-9:]
print hex(ea+7),idc.GetDisasm(ea+7)

ch=idc.GetDisasm(ea+7)
print ch[-9:]

1919808-20200913232747585-1793162165.png

#脚本的制约条件:锁定.text的具体定位,只能在类似数组结构的开头
ea=here()
test=''
for i in range(12):
    ch=idc.GetDisasm(ea+i*7)
    test+=('0x'+ch[-9:]).rstrip('h')
    test+=','
#print test
    #print type(ch)
la=idc.GetDisasm(ea+12*7)
org=la[-3:]
num='0x'+org.rstrip('h')
test+=num
#print test
l=test.split(',')
#print l
list=[int(x.lstrip('0x'),16) for x in l]
#print list
str=""
for i in list:
    str+=chr(i%0x100)
    str+=chr(int(i%0x10000/0x100))
    str+=chr(int(i%0x1000000/0x10000))
    str+=chr(int((i%0x100000000/0x1000000)))
#str+=chr(0x3f)
print(str)

1919808-20200915064932039-138787263.png

ea=here()
print ea,idc.GetDisasm(ea)
l=[]
    #数据的提取,大致分为两种类型
for n in range(49):
    i=idc.GetDisasm(ea+n*4)
    if(i[-1:]=='h'):  #可以已结尾是否是h作为判断标志对数据进行提取
        cn=int("0x"+i[-3:-1],16)

    else:
        cn=int(i[-1:],10)
    l.append(cn)
print l

1919808-20200915070821720-1362506405.png

#脚本的制约条件:锁定.text的具体定位,只能在类似数组结构的开头
ea=here()
test=''
for i in range(12):
    ch=idc.GetDisasm(ea+i*7)
    test+=('0x'+ch[-9:]).rstrip('h')
    test+=','
#print test
    #print type(ch)
la=idc.GetDisasm(ea+12*7)
org=la[-3:]
num='0x'+org.rstrip('h')
test+=num
#print test
l=test.split(',')
#print l
list=[int(x.lstrip('0x'),16) for x in l]
#print list
str=""
for i in list:
    str+=chr(i%0x100)
    str+=chr(int(i%0x10000/0x100))
    str+=chr(int(i%0x1000000/0x10000))
    str+=chr(int((i%0x100000000/0x1000000)))
#str+=chr(0x3f)
##print(str)
#ea=here()
#print ea,idc.GetDisasm(ea)

l=[]
    #数据的提取,大致分为两种类型
for n in range(49):
    i=idc.GetDisasm(ea+90+n*4)
    if(i[-1:]=='h'):  #可以已结尾是否是h作为判断标志对数据进行提取
        cn=int("0x"+i[-3:-1],16)

    else:
        cn=int(i[-1:],10)
    l.append(cn)
##print l
flag=""
for i in range(49):
    flag+=chr(ord(str[i])^l[i])
print flag

1919808-20200915071019317-1067745949.png

1919808-20200915071041468-98535267.png

上述两个地址的差值是用来计算两组数据的偏移的,用来具体的数据提取。

# 网络安全技术
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者