type
status
date
slug
summary
tags
category
icon
password
😀
复现一下比赛中没有做出来的逆向题

easyre

这个题有大量的混淆,因此这个题我们选用x64dbg进行求解
其实对于这样的题我们需要确定的东西是
函数的输入的寻找
点击选项选择断在入口断点,这样他会断在Entrypoint那里
notion image
我们就一直往里面调,这里我直接F8步过了一个函数发现这个函数直接可以输入
notion image
但是这里我们看他存储到了一个地址,但这个不是我们最后的存储我们输入的地址
notion image
调到00007FF765224F82这个地址发现它在读取你的输入,这里的读取是为了后面存储到地址中做准备
notion image
继续往下面调,发现这里00007FF765214BC8开始读取之前的字符串到相对应的地址里,并且r12作为索引每次复制完以后,还会自增,因此我们可以确定这里就是相对应的地址
notion image
我们可以看到rsi那里存储着我们的地址,我们直接在内存窗口Ctrl+g跳到相对应的内存地址
notion image
对应的内存地址
notion image
这个时候我们就可以下一个硬件断点跟踪我们输入的字符串
notion image
F9之后跳到的第一个函数就是判断字符串长度的
notion image
我们直接往下面运行到ret那里,之后我们发现它的rax被赋值成了0x4,这正好是我们字符串的长度,然后我们到了ret那里根据rdi里面存储的地址,利用rdi-1可以得到调用比较字符串大小的函数00007FF76520772F
notion image
等我们运行完这个程序之后就开始利用x64dbgtrace,我们直接在我们所在的汇编代码处右键,代码覆盖那里有启动运行跟踪,trace的作用就是能够跟踪我们运行过的每一行汇编代码,以及记录寄存器的变化.
notion image
根据trace我们可以定位到这个区域,这里的意思就是将我们返回的字符串的长度赋值给了rdx这个寄存器,最后进行一个比较,因此可以得到字符串的长度为0x38
notion image
重新运行,然后把其它的软件断点全部禁用,只留下硬件断点.
notion image
并且我们要在内存窗口查看我们的input_addr
然后F9进行trace,在跳过字符串长度检查之后我们发现跳到了另一个地方,这个时候不着急往下面调,直接再F9一下,我们发现第一个字节发生了变化,应该是对一个字节进行
notion image
这个时候直接在你所在的代码那里进行trace直到它第三个字节发生变化,其实主要的加密逻辑还是在前面,它里面虽然包含了很多的数但其实最后只实现了一个 每个字节加0x40
notion image
记得把之前的trace删掉这样分析起来不会重合,第二步还是按上面的办法,这一步的数看着很繁琐,但其实最后只跟rdx这个有关,总结起来就是E9FCF789^B62DD00^E29E2AF6=7F
notion image
我们继续F9,发现它是对八个字节进行了加密,这里猜测是TEA加密
notion image
我们可以回到第二轮加密完那里直接F7开始trace但是这个trace量很大,从trace的结果可以看确实是xtea加密,并且轮数发生了变化,变成了102轮,并且多加了一层异或
异或在这里
notion image
notion image
根据这里我们其实可以判断是key,r8>>11很明显符合sum>>11,那么后面的mov eax,dword ptr ds:[rax+r8*4] 操作就是取里面的key
notion image
找到key的地址
notion image
最后就是差比较密文的地方,在进行所有TEA加密之后直接F7trace
notion image
由于它是一个密文一个密文进行比较,我们在比较的时候把对应的替换一下
notion image

Exp

notion image

📎 参考文章

 
💡
有关学习或者复现上的问题,欢迎您在底部评论区留言,一起交流~
某app的会员分析过程利用包管理器搭建编译lua环境
Loading...
5m10v3
5m10v3
目前主攻方向为Re
Announcement
🎉5m10v3のBlog已经上线啦🎉
-- 感谢各位师傅的支持 ---
👏欢迎师傅们前来交流👏