[Smc/patch修改][HGAME 2023 week3]patchme

方法一:Smc自解密:

1)、使用ida64打开进入查看:

1、在main函数中没有信息,

发现在调用main函数之前会先调用fini函数和init函数,进入这两个函数查看:

fini函数平平无奇:

但是init函数中批量调用了off_3D00处的函数:

2、进入段off_3D00查看:

发现sub_13E0和sub_188C两个函数,其中sub_188C为重点

3、进入sub_188c查看发现其对某一段数据进行了异或操作,肯定是Smc无疑:

2)、Smc解密还原函数:

使用idapython脚本还原函数:

使用快捷键P定义函数,F5进入查看,定位到输出flag的核心代码:

根据逻辑,其是有两端数据异或得到的flag,编写脚本如下:


a=["5416D999808A28FA","588505094953B563","CE8CF3A0DC669097","4C5CF3E854F44CBD","D144E49916678331","DA616BAC","BBD0","55"]

b=["3B4FA2FCEDEB4F92","07E45A6C3B67EA16","AFE1ACC8BF12D0E7","132EC3B7269138CE","8E2197EB7311E643","AE540AC1","C9B5","28"]

for i in range(len(a)):

    flag=""

    for j in range(0,len(a[i]),2):

        flag+=(chr(int(a[i][j:j+2],16)^int(b[i][j:j+2],16)))

    print(flag[::-1],end="")

Flag = hgame{You_4re_a_p@tch_master_0r_reverse_ma5ter}

方法二patch修改后保存修改直接执行.elf程序:

1)、在Smc还原代码后发现要输出flag必须是if判断进入到输出flag的块,因此可以直接将flag的判定条件取否,则在程序运行时会直接输出flag

1、在汇编模式下patch

阅读汇编代码后,发现其中有两条跳转指令

将其取否后如下:

注意:再次执行idapythonSmc还原为数据(不还原程序执行时会再次异或导致程序报错)

最后、在Edit->Patch_program->apply patch to:中保存修改

2)、将程序拖入kali虚拟机中运行,任意输入即可得到flag

虚拟机中运行程序报错,权限不够:

https://blog.csdn.net/chnyifan/article/details/104705437/?ops_request_misc=&request_id=&biz_id=102&utm_term=zsh:%20permission%20denied:%20./patc&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-104705437.142^v99^pc_search_result_base3&spm=1018.2226.3001.4187

Chmod u+x patchme(提升权限,让其可以执行)

与手动还原得到的flag一致。

  • 39
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值