编程黑洞网
首页
编程
数据库
代码审查
网络应用
Android
wordpress
软件推荐
软件工程
逆向工程
信息安全
软件质量测试
地理信息
密码学
网站管理员
元堆栈交换
网络工程
操作系统
Ubuntu
计算机
Unix和Linux
服务器故障
Vi和Vim
运维
物联网
机器人
树莓派
计算机图形学
信号处理
将外部模块的源代码映射到程序集-从源代码中提取信息
逆向工程
|
2020-12-30
|
编程黑洞网
|
0条评论
|
581 人阅读
情况如下:
我正在反转一个应用程序,在其中我找到了许多属于OpenSSL库的函数。由于我具有该模块的源代码,所以我想知道是否有可能从源代码中“提取”变量名称,结构,函数名称,并将其同步/映射到IDA?
评论
很有可能不会。为了执行任何简单的匹配,您可能必须在相同的编译器的相同版本和相同的设置下构建相同版本的OpenSSL,以获取与您要使用的二进制文件足够接近的二进制文件。 br />
或者,您可以只编译包含所有符号的源代码并对其进行分析,然后将其与所拥有的内容进行比较。我很确定,即使编译后的二进制文件不会完全相同,但也非常接近。为了更加紧密,可以尝试使用与原始二进制文件相同的编译器进行编译。
即使您使用不同的设置进行编译,功能的顺序也将相同。因此,如果您可以识别一个功能,则以下功能应与源模块中之前/之后的功能相同。
@Devolus Okey,但是如何使该过程自动化?我的意思是我编译了上述模块,可以识别功能,但是无法手动命名所有变量和功能名称。
我认为您无法自动执行此操作,因为不确定变量与结果代码之间是否存在映射关系,尤其是在使用优化程序进行编译的情况下。我不明白为什么这很重要。对于反转,知道库的签名就足够了,如果您要编写可编译的代码,则无论如何都可以使用源代码,除非代码依赖于该特定版本的某些特定行为,这无疑是imo。 。
#1 楼
使用调试符号构建模块
将构建的模块加载到IDA Pro中并导入调试符号
使用BinDiff将所构建模块的IDB中的函数名称等移植到目标模块的IDB
在程序执行期间,可以使用什么方法来原子地更改代码流?
解码古代格式
标签列表
java
(11)
r
(3)
r-faq
(3)
javascript
(17)
jquery
(3)
asynchronous
(2)
php
(17)
mysql
(7)
sql
(3)
html
(2)
regex
(2)
arrays
(2)
variables
(3)
warnings
(2)
language-agnostic
(2)
c++
(9)
c++-faq
(8)
parsing
(2)
debugging
(5)
c
(3)
error-handling
(3)
python
(10)
pandas
(3)
android
(3)
list
(3)
最近发表
IP地址错误的错误掩码
在Cisco IOS中自动进行配置备份(每分钟)
VRRP和HSRP有什么区别?
IP地址如何映射到MAC地址?
网站可以识别我的MAC地址吗?
在STP中如何选择根桥?
为什么要使用三根以太网电缆将交换机连接到路由器?
为什么10.1.255.255是无效的广播地址?
为什么将IP地址分配给每个接口而不是设备?这将意味着什么?
为什么Visual Studio 2013不愿意运行我的Web性能/负载测试?
对测试代码了解太多会不利吗?
如何隔离错误?
如何使用Selenium和WebDriver清除localStorage
评估测试项目
我如何说服管理层我们需要一个正式的质量保证部门?
FluentWait与WebDriverWait有何不同?
简历和求职建议-从开发到测试的职业转变
您如何等待Selenium 2中的jQuery Ajax调用完成
在持续开发下测试应用程序
Selenium的页面加载默认超时是多少?
IT项目中软件测试的真正商业价值是什么?
系统测试与系统集成测试(SIT)有何不同?
如何找到我们的“质量保证流程”的弱点?
测试人员应如何处理生产中发现的错误?
如果我不使用TDD但想过渡到敏捷,那我应该回去创建那些单元测试吗?
代码覆盖率和测试覆盖率有什么区别?
当团队想要忽略关键但难以重现的错误时,我应该如何应对
测试人员应该修复错误吗?
审核测试自动化代码的良好实践
质量检查人员应该能够编写测试代码吗?
随机文章
将外部模块的源代码映射到程序集-从源代码中提取信息
idapython-将外部参照获取到堆栈变量
外键可以为NULL和/或重复吗?
在笔记本电脑上搜索军事安装的后门
删除最后一个逗号
为什么不应该使用ECB加密?
光探头与环境立方体贴图有何不同?
软件工程师担任QA职位还有哪些其他好处?
签名:RSA与ECDSA相比
鼠标滚轮的反转方向
评论
很有可能不会。为了执行任何简单的匹配,您可能必须在相同的编译器的相同版本和相同的设置下构建相同版本的OpenSSL,以获取与您要使用的二进制文件足够接近的二进制文件。 br />或者,您可以只编译包含所有符号的源代码并对其进行分析,然后将其与所拥有的内容进行比较。我很确定,即使编译后的二进制文件不会完全相同,但也非常接近。为了更加紧密,可以尝试使用与原始二进制文件相同的编译器进行编译。
即使您使用不同的设置进行编译,功能的顺序也将相同。因此,如果您可以识别一个功能,则以下功能应与源模块中之前/之后的功能相同。
@Devolus Okey,但是如何使该过程自动化?我的意思是我编译了上述模块,可以识别功能,但是无法手动命名所有变量和功能名称。
我认为您无法自动执行此操作,因为不确定变量与结果代码之间是否存在映射关系,尤其是在使用优化程序进行编译的情况下。我不明白为什么这很重要。对于反转,知道库的签名就足够了,如果您要编写可编译的代码,则无论如何都可以使用源代码,除非代码依赖于该特定版本的某些特定行为,这无疑是imo。 。