type
status
date
slug
summary
tags
category
icon
password
2022强网杯-easyre思路复现
总结一下以下三位师傅的思路
一.思路总结
1.Ittly师傅
动调IDA ,然后dump子进程
2.PZ师傅
IDA动调 拿异或值手解部分SMC代码 然后dump
3.Fa1lWind师傅
以下有几个困扰点:
- 子进程无法调试(主进程在调试中)
- 一共有两个int3,第二个int3又会经过SMC加密回去
- 里面 for循环,i=3,前两次是调试int3.,最后一次是等待子进程结束
这时候Fa1lWind师傅的思路简直就是曲线救国
- 让子进程不再结束,在子进程最后一个int3后面加个死循环
- 将for 循环改为两次,目的是为了只进行两次int3
- 将第二个int3中的SMC加密改为异或0,这样就相当于没有经过处理
二.思路复现
1.Ittly师傅的思路复现
我们打开main 函数之后很显然这是个写入操作
我们发现这是个ELF文件,然后利用pwndbg将子进程的文件导出
在main函数中 sub_401F2F这个函数很重要
点开这个函数之后,我们可以发现这应该是ptrace通信
sub_401BB1和sub_401D78这两个函数分别是SMC加密和解密
很显然我们应该断点到函数sub_401BB1后面
Ittly师傅的思路是利用pwndbg进行断点
之后找到断点的地址
之后查看内存的位置,然后dump下载
报错不用管,之后将内容放到010中
然后将生成的文件用ida打开
这个函数loc_21F9将是我们要解密的函数
按c恢复函数之后,然后将这两个int3 nop掉,然后再按p还原函数
后面看师傅的wp好像是个数织游戏,咱也不懂,看上面师傅们的wp吧
2.PZ师傅的思路复现
pz师傅和lttly师傅的思路有异曲同工之妙
看pz师傅调试的视频没觉得自己有什么,结果自己调试的时候出现了大问题
调试的时候发现无法往下调了,其实问题就是调试这个没有传入参数
传入参数123123之后就可以调试了(传入的参数是什么无所谓,只要有参数就行了)
然后我们然后在这里下个断点,为了就是要得出SMC加密的异或值
之后写个idc脚本
在re3里面跑一下
后面跟前面的思路一样
3.Fa1lWind师傅的思路复现(非常妙!)
首先就是改掉
还有一个就是在第二个int3 后面加上一个死循环,目的是为了让这个子进程一直运行下去
快速寻找第二个int3,写个简单idc脚本
之后./easyre 2333运行之后,主进程瞬间结束,然而子进程还没有结束
之后打开IDA然后attach re3 之后就可以跳到函数那里,直接dump
有关复现上的问题,欢迎您在底部评论区留言,一起交流~
- Author:5m10v3
- URL:https://5m10v3.top/article/3b2f9c9c-dad2-44f0-b2cc-ecca1a985d9b
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts