某Delphi软件逆向记录

某Delphi软件逆向记录

一、背景

最近逆向分析某个工具类软件,拖进die里分析结果如下:
在这里插入图片描述
居然是加了上古的ASPack壳,并且是Delphi编写的,估计维护这个软件的公司10年以内没有重构过了。从网上随便找了个脚本把ASPack的壳脱了,但是Delphi编译后乍看一片混乱,俗话说工欲善其事必先利其器,需要找一套合适的工具先还原一下符号信息。

二、还原符号信息

从github上找到了一个神器IDR(链接),把脱壳后的二进制文件直接拖到里面,软件会自动分析出是Delphi 7编写的。然后把(可能)含有Delphi 7的符号信息kb7.7z解压后放在IDR运行的目录下,软件便可以自动分析并还原符号信息。
还原完毕后,可以点击 Tools -> IDC Generator 导出idc脚本给IDA使用。然而,在ida中运行导出的idc脚本后,会发现很多函数虽然起始地址和结束地址是对的,但是内部的汇编代码全被误识别成了二进制的数据(如db dd dw)。需要再写一个python脚本,遍历还原出的函数,让IDA对其进行重新分析

from idc import *
first_addr = 0x401000
current_func = get_next_fchunk(first_addr)
while (current_func != BADADDR):
    end = find_func_end(current_func)
    plan_and_wait(current_func,end)
    print(f'analyzing from {hex(current_func)} to {hex(end)}')
    current_func = get_next_fchunk(current_func)

三、愉快的逆向

此处自行脑补
有一个比较坑的地方是Delphi中的字符串通常不是以\0结尾,而直接在字符串首部用1位的信息记录整个字符串的长度

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值