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
notion image
 
直接选择给出的i64文件,然后就可以恢复咯
notion image
 

3、加密算法:

 
接下来就是找关键的代码了,根据在mips里面的提示,它会让我们寻找一个0x23000h的地址,我们先搜索,会骚索到一个地址,进去会发现有花指令让我们难以分析,那就手动去除
notion image
得到这个,我修改变量了
有个rc4,那个函数也是花指令,同样需要解密
notion image
这处的汇编代码没有作用啊,就是让我们的eip指针把这段代码给加过去,直接nop
notion image
接下来就是对这段代码解密,我写了两种方式,python和c语言的
 
 
上面我的python代码的加密代码是错误的,不知道那里出错啦,有大佬看到希望可以给我修正一下,谢谢
 

4、key的求解:

 
还有一个重点就是外面的这个是怎么求的
notion image
 
有三个方法,
  • 1、爆破
  • 2、patch
  • 3、ebpf监控内核求解
 

1、爆破:

爆破的方法还是简单的,就是在我们上面的代码上面添加一个爆破,还是挺快的
notion image
 

2、patch:

notion image
 
也就是让他输出edx的值
我们的patch使用read+write的方式进行patch
notion image
 
 
notion image
 
然后运行会直接输出出来,理论上是可以的,但是我这出来了一点问题,失败了,应该是可以的
 

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
 
notion image
 
得到啦key的值,记得关闭地址随机化
 
 

remem:

此题考点是ELF文件修复以及vm指令恢复

1、ELF文件修复:

首先拖进去ida发现爆粗,说明是ELF文件结构出问题了,所以接下来就是找个其他正常的ELF文件进行修复,给个对比图:
这个是我修复好的,对照的是上个题的emu文件
notion image

2、ida分析:

通过字符串可以定位到关键地址,接下来就是分析这些
notion image
可以发现这就是一个vm指令,两个步骤:
1、先通过动态调试分析每一个指令的含义
2、写一个vm解释器,找到变量的输入
 
接下来先dump这64段代码,也不是很多哈哈哈哈,一个一个dump也不是不行

1、dump64段小函数

 

2、vm解释器:

 
得到如下结果:
结合前面的汇编分析处加密逻辑
 
可以得到下面的加密代码:

3、加密代码仿写:

这是开了O3优化

4、ida分析:

把上面编译出来的代码拖进ida查看
notion image
 
简直就是神奇
直接爆破,从第四个看只有part1,part2,所以用part1表示part2
脚本求逆元:
 
 
 
 
 
 
 
 
 
 
 
 
安卓逆向学学习一ELF文件解析
Loading...