type
status
date
slug
summary
tags
category
icon
password
mips:
先来一道被打烂的题,被硬控一整天,无语了
这道题整体来说是找到emu文件里面的花指令,然后去解密那个代码,其中难点是发现那个花指令的位置,还有就是其中一共值你不知道是什么,1是可以选择爆破,2是可以选择eBpf方法和3、patch的方法,下面说一下此题的收获
- 1、bindiff的使用
- 2、qemu使用
- 3、patch程序
- 4、eBpf在内核层监控
- 5、解密算法的复现
1、qemu使用:
使用bindiff恢复符号表的前提是我们也有一共相同架构的程序,用哪个程序的idb来恢复这个的idb
qemu编译:
具体过程看下面大佬的博客:
2、bindiff恢复符号表:
先下载好bindiff,然后在ida里面先打开qemu编译生成的qemu-mips文件,然后退出生成一个i64文件,接下来就在我们的emu文件里面使用bindiff,直接ctrl + 6

直接选择给出的i64文件,然后就可以恢复咯

3、加密算法:
接下来就是找关键的代码了,根据在mips里面的提示,它会让我们寻找一个0x23000h的地址,我们先搜索,会骚索到一个地址,进去会发现有花指令让我们难以分析,那就手动去除

得到这个,我修改变量了
有个rc4,那个函数也是花指令,同样需要解密

这处的汇编代码没有作用啊,就是让我们的eip指针把这段代码给加过去,直接nop

接下来就是对这段代码解密,我写了两种方式,python和c语言的
上面我的python代码的加密代码是错误的,不知道那里出错啦,有大佬看到希望可以给我修正一下,谢谢
4、key的求解:
还有一个重点就是外面的这个是怎么求的

有三个方法,
- 1、爆破
- 2、patch
- 3、ebpf监控内核求解
1、爆破:
爆破的方法还是简单的,就是在我们上面的代码上面添加一个爆破,还是挺快的

2、patch:

也就是让他输出edx的值
我们的patch使用read+write的方式进行patch


然后运行会直接输出出来,理论上是可以的,但是我这出来了一点问题,失败了,应该是可以的
3、ebpf
安装:
sudo apt-get install bpfcc-tools linux-headers-$(uname -r)
推荐学习文档:
使用前需要关闭地址随机化:
sudo sysctl -w kernel.randomize_va_space=0
给出代码:
命令行形式:
sudo ./bpftrace -e 'watchpoint:0x7FFFF76FF96E:8:x { $addr=0x7FFFF7FF4324; @i = 0; printf("所监控的key:"); unroll (4) { printf("%02x,", (uint8)($addr+@i)); @i++; } printf("\n"); }' -p 3474

得到啦key的值,记得关闭地址随机化哦
remem:
此题考点是ELF文件修复以及vm指令恢复
1、ELF文件修复:
首先拖进去ida发现爆粗,说明是ELF文件结构出问题了,所以接下来就是找个其他正常的ELF文件进行修复,给个对比图:
这个是我修复好的,对照的是上个题的emu文件

2、ida分析:
通过字符串可以定位到关键地址,接下来就是分析这些

可以发现这就是一个vm指令,两个步骤:
1、先通过动态调试分析每一个指令的含义
2、写一个vm解释器,找到变量的输入
接下来先dump这64段代码,也不是很多哈哈哈哈,一个一个dump也不是不行
1、dump64段小函数
2、vm解释器:
得到如下结果:
结合前面的汇编分析处加密逻辑
可以得到下面的加密代码:
3、加密代码仿写:
这是开了O3优化
4、ida分析:
把上面编译出来的代码拖进ida查看

简直就是神奇
直接爆破,从第四个看只有part1,part2,所以用part1表示part2
脚本求逆元:
- Author:xiaowaaa
- URL:https://www.xiaowaaa.asia//article/1355df8d-8884-80c5-ac62-e963e15bdfa2
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!