前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Radare2破解实战

Radare2破解实战

原创
作者头像
无情剑客
修改2020-11-30 14:36:23
8510
修改2020-11-30 14:36:23
举报
文章被收录于专栏:Android逆向Android逆向

文章重点基于[CrackerMe03]。这是R2 CrackerMe系列的典型的一个,算是CrackerMe系列的一个分水岭。在黑客攻击-软件破解(1) 中对破解进行了简单的介绍,主要是通过修改字节码的方式,当然所有的CrackerMe都可以使用此方式。不过,这篇文章介绍一些其他的方式,主要是基于代码逻辑进行破解以及使用Emulator进行破解。

CrackerMe00

现说一个最简单的CrackeMe00。 查看字符串信息 rabin2 -z crackme0x00

在这里插入图片描述
在这里插入图片描述

通过字符串信息,大概推断密码是250382。运行程序,输入250382,Pass!

在这里插入图片描述
在这里插入图片描述

CrackerMe01

继续CrackeMe01。 查看字符串信息 rabin2 -z ./crackme0x01,没有什么有价值的信息。

在这里插入图片描述
在这里插入图片描述

使用Radare2进行反汇编main函数:pdf @ sym.main

在这里插入图片描述
在这里插入图片描述

分析汇编代码可知就是对0x149a和输入内容进行比较。Pass!

在这里插入图片描述
在这里插入图片描述

看汇编可能不太方便,那就使用decompiler,类似IDA中的F5功能pdg @ sym.main

在这里插入图片描述
在这里插入图片描述

这里使用了radare2ghidra插件,还有pdz使用的插件是retDec。当然还有radare默认的decompiler命令pdc,这个效果不太好。

在这里插入图片描述
在这里插入图片描述

CrackerMe02

继续CrackeMe02。 查看字符串信息 rabin2 -z ./crackme0x02,没有什么有价值的信息。

在这里插入图片描述
在这里插入图片描述

使用Radare2进行反汇编main函数:pdf @ sym.main

在这里插入图片描述
在这里插入图片描述

这个看起来比较麻烦了。使用decompiler看一下 pdg @ sym.main

在这里插入图片描述
在这里插入图片描述

目测密码是0x52b24。Pass!

在这里插入图片描述
在这里插入图片描述

再介绍一种破解方法,基于Radare2里面的一个非常强大的功能ESIL and Emulation。后面文章会详细介绍这个强大的功能,在很多情况下上可以取代动态调式。

ESIL stands for 'Evaluable Strings Intermediate Language'. It aims to describe a Forth-like representation for every target CPU opcode semantics. ESIL representations can be evaluated (interpreted) in order to emulate individual instructions For partial emulation (or imprecise full emulation) radare2 uses its own ESIL intermediate language and virtual machine

1.初始化ESIL VM aei2.初始化ESIL VM Memory(Stack) aeim3.初始化 ESIL VM IP aeip4.运行 aesu addrerss

在这里插入图片描述
在这里插入图片描述

通过最后的结果可以判断出var_ch的值是338724,也就是密码。这是在基本不知道逻辑的情况下获取到最终的结果。加密解密不正符合这种情况!

CrackerMe03

查看功能

典型的crackeMe003类型题目,输入密码,判断密码是否正确。前面的So easy,来个有难度的。

在这里插入图片描述
在这里插入图片描述

查看字符串信息

使用rabin2使用rabin2 -z crackme0x03

在这里插入图片描述
在这里插入图片描述

好像没有什么特别有用的信息。

使用Radare2进行分析

通过分析,主要的判断逻辑放在了sym.test这个函数。pdf @ sym.test

在这里插入图片描述
在这里插入图片描述

查看sym.shift函数 pdf @ sym.shift

在这里插入图片描述
在这里插入图片描述

可以看出,最终的输出是在这个函数进行打印的。

decompiler看一下. pdg @ sym.shift。推测这个函数是通过输入参数,构造最终的打印结果。核心算法是sub al, 0x3

在这里插入图片描述
在这里插入图片描述

通过以上的代码,大致可以对断除在sym.test中的两个判断必然有一个会打印密码正确的信息。于是可以推测,如果传能给sym.test的两个参数一致,则会打印密码正确的信息。从decompiler中可以知道其中一个参数是0x52b24,于是可以就此推断密码是0x52b24。换成十进制的试下,Pass

在这里插入图片描述
在这里插入图片描述

写在最后

CrackerMe系列总共有10个,后续会把剩余的6个的破解过程更新上。

公众号

更多逆向方面的内容,欢迎关注我的微信公众号:无情剑客。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CrackerMe00
  • CrackerMe01
  • CrackerMe02
  • CrackerMe03
  • 查看功能
  • 查看字符串信息
  • 使用Radare2进行分析
  • 写在最后
  • 公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com