首页
社区
课程
招聘
[IDA使用技巧]#164: 我的代码呢?函数参数丢失的情况
发表于: 2023-12-6 17:31 8772

[IDA使用技巧]#164: 我的代码呢?函数参数丢失的情况

2023-12-6 17:31
8772

翻译:梦幻的彼岸

原文地址:dc8K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Z5k6i4S2Q4x3X3c8J5j5i4W2K6i4K6u0W2j5$3!0E0i4K6u0r3j5X3I4G2k6#2)9J5c8X3W2Y4L8%4u0K6i4K6u0V1N6r3W2H3i4K6u0V1L8$3k6Q4x3X3c8@1K9r3g2Q4x3X3c8%4k6h3g2C8i4K6u0V1x3e0j5@1i4K6u0V1N6$3S2W2M7X3g2K6i4K6u0V1L8i4W2Q4x3X3c8U0L8$3c8W2i4K6u0V1N6r3S2W2i4K6u0V1j5$3q4K6k6g2)9J5k6r3!0X3i4K6u0V1L8h3W2K6M7$3W2F1k6#2)9J5k6r3k6#2L8X3y4@1K9h3!0F1i4K6u0V1j5i4u0Y4N6h3#2W2L8Y4c8K6i4K6u0r3



让我们来看看 x86 Windows 二进制文件的反编译片段:

使用相同的参数调用了相同的函数两次,最后一次似乎没有使用 GetComputerNameExW 调用的结果。

通过切换到反汇编,我们可以看到在每次调用之前都用字符串地址初始化了eax:


但是反编译器并不考虑它,因为在 x86 系统中,栈是传递参数的常用方式,而 eax 通常只是一个临时的寄存器。

一种方法是编辑 sub_10006FC7 的原型,使用 __usercall调用约定,然后手动将 eax 添加到参数中。但当函数位于同一个二进制文件中时,通常更简单的做法是直接进入函数内部并反编译,这样反编译器就能看到函数在初始化前确实使用了 eax,从而将其添加到参数列表中:


[注意]看雪招聘,专注安全领域的专业人才平台!

最后于 2023-12-6 17:35 被梦幻的彼岸编辑 ,原因:
收藏
免费 5
支持
分享
最新回复 (1)
雪    币: 1238
活跃值: (1805)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
好文章,最新写plt 函数的 重命名还原也是这样搞的,但是有个问题就是,我想通过 python api 直接手动指定类型  这个楼主有研究么?
2023-12-7 18:00
0
游客
登录 | 注册 方可回帖
返回