吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 738|回复: 4
收起左侧

[已解决] 花指令不知道怎么处理了,求大佬指教

[复制链接]
Tempests 发表于 2024-5-2 14:07
如题,一道ctf的花指令题目,求解题过程
一个*.sys的驱动程序,入口函数在sub_140001060()可以看到flag
sub_140001100()函数里面有个sub_140001000()没有被正常解析,导致srand设置的随机数种子没有被正常设置。

原程序:链接:https://pan.baidu.com/s/11NUAElxpy9v2fmFSkf6Mww
提取码:6666

花指令段二进制代码如下图:

二进制代码段

二进制代码段

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

爱飞的猫 发表于 2024-5-3 09:40
本帖最后由 爱飞的猫 于 2024-5-3 09:45 编辑
Tempests 发表于 2024-5-2 21:08
感谢指导,
简单的操作我还是会一些的,一般来说只需要对特定的编码(如图中100D位置的E8进行nop)即可 ...

0000000140001001 开始是花指令,本质上就是将程序跳转到 000000014000100E 继续执行。



将 140001001 到 14000100D 全部 NOP 掉即可:



然后分析调用方:

.text:000000014000111A C7 44 24 24 52 BF 01 00                 mov     dword ptr [rsp+24h], 1BF52h
.text:0000000140001122 E8 D9 FE FF FF                          call    sub_140001000   ; 这个函数修改 "rsp+2Ch" 的值,实际上就是此处的 "rsp+24h" 的值
.text:0000000140001127 8B 4C 24 24                             mov     ecx, [rsp+24h]  ; Seed
.text:000000014000112B E8 03 01 00 00                          call    srand
爱飞的猫 发表于 2024-5-2 16:51
利用 patching 等插件将花指令 nop,对函数头的地址按下 u 取消定义,再按 c 将所在区域作为代码分析,最后按 p 重新建立函数

可能有更方便的操作方法,但手动操作这样是可行的。
 楼主| Tempests 发表于 2024-5-2 21:08
爱飞的猫 发表于 2024-5-2 16:51
利用 patching 等插件将花指令 nop,对函数头的地址按下 u 取消定义,再按 c 将所在区域作为代码分析,最后 ...

感谢指导,
简单的操作我还是会一些的,一般来说只需要对特定的编码(如图中100D位置的E8进行nop)即可正常编译,但此题目在处理后还存在返回和代码不连贯的问题,
sub_140001000是call进来的,在loc_140001006中含有ret,后续的应执行函数无法正常执行,
如果改变函数结构,nop 1006处的ret并不能正确编译执行,当然直接跳过该段对整体函数是可行的,
但flag的正确函数与 14000101D 的数据是否正确解析有关

望指点一二

点评

0000000140001001 开始是花指令,本质上就是将程序跳转到 000000014000100E 继续执行。 将 140001001 到 14000100D 全部 NOP 掉即可:  详情 回复 发表于 2024-5-3 09:40
 楼主| Tempests 发表于 2024-5-4 12:59
多谢版主指点,确实是ida使用尚有不熟,您的分析清楚明了,着实恍然大悟
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-11 22:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表