文章重点基于[CrackerMe03]。这是R2 CrackerMe系列的典型的一个,算是CrackerMe系列的一个分水岭。在黑客攻击-软件破解(1) 中对破解进行了简单的介绍,主要是通过修改字节码的方式,当然所有的CrackerMe都可以使用此方式。不过,这篇文章介绍一些其他的方式,主要是基于代码逻辑进行破解以及使用Emulator进行破解。
现说一个最简单的CrackeMe00。 查看字符串信息 rabin2 -z crackme0x00
通过字符串信息,大概推断密码是250382。运行程序,输入250382,Pass!
继续CrackeMe01。 查看字符串信息 rabin2 -z ./crackme0x01
,没有什么有价值的信息。
使用Radare2进行反汇编main函数:pdf @ sym.main
分析汇编代码可知就是对0x149a和输入内容进行比较。Pass!
看汇编可能不太方便,那就使用decompiler,类似IDA中的F5功能。pdg @ sym.main
这里使用了radare2ghidra插件,还有pdz使用的插件是retDec。当然还有radare默认的decompiler命令pdc,这个效果不太好。
继续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 aei
2.初始化ESIL VM Memory(Stack) aeim
3.初始化 ESIL VM IP aeip
4.运行 aesu addrerss
通过最后的结果可以判断出var_ch的值是338724,也就是密码。这是在基本不知道逻辑的情况下获取到最终的结果。加密解密不正符合这种情况!
典型的crackeMe003类型题目,输入密码,判断密码是否正确。前面的So easy,来个有难度的。
使用rabin2使用rabin2 -z crackme0x03
好像没有什么特别有用的信息。
通过分析,主要的判断逻辑放在了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 删除。