0x000 前言

昨天一个朋友发给我一个CrackMe (戳这里下载),打开只有一个输入框和按钮,典型的CTF类型的Crack,大概就是要拿输出的Flag之类的东西吧。正好 上班可以摸 手头有些时间,就来看看怎么处理它。

0x001 序章

所以说APK是一个压缩包真是太好了(误),直接解压开来发现里面结构非常简单,只有一个classes.dex一些资源文件和一个assets。一般来说这样的包里assets里面的都是大宝贝,迫不及待地打开发现里面又是一个压缩包,拉出来解压发现损坏了。唔,应该是假的文件名,居然被骗了,这仇我先记下了。除此以外就没有什么东西了,先提取一下里面的资源,把classes.dex和这个压缩包先拉出来再说。

0x002 深入(不是什么奇怪的意思!)

先用jd反编译一下这个classes,发现里面并没有Activity(!),这就很奇怪了。这样的时候一般第一个想到的就是使用了分包加载,Activity在另一个包里(大概就是那个压缩包了),所以先找入口,这里的入口一定是一个Application。定位到源码中的ProxyApplication,里面果然有使用到DexClassLoader进行额外的包加载的痕迹。查看完整代码发现,它先从assets里把那个像压缩包一样的文件提取并解密到了data目录下,然后用DexClassLoder加载了,所以我们要先破解它的解密过程——吗?——

——当然不,我们为什么不直接把安装之后解压出来的那个包直接提取出来呢=v=(吐槽:明明每次启动都会把这个文件重新解压,加载完不把它删掉不然不就毫无遮拦的暴露出来了吗)。用shell切到这个文件夹,里面有一个load.dex文件(毫不掩饰啊喂),先pull出来然后扔进jd,里面果然有MainActivity(混淆也没有=-= Too weak)。

0x003 核心

MainActivity里对于onclick的处理使用到了包里的其他两个类,大概是用它们做了一些奇怪的加密,验证成功后输出Success(居然不是摸Flag- -)。所以我们采取直接了当的爆破策略,用d2j把提取的dex反编译成smali,发现Success前面有个标号L7,在onclick前两行直接加一个

goto :L7

这样在点击的时候就会绕过验证直接输出Success了。但是问题又出现了,刚刚说到每次启动的时候它都会重新解压这个包,我们在不知道它的加密算法的情况下要怎么换进去呢QwQ。没办法,反正包到手了,我也不管你原来是什么东西了,反编译原包的classes,在ProxyApplication里删掉解压解密包出去的代码,替换进去并重新打包签名安装。第一次因为没有加载成功data里的dex直接boom了,不过没关系,因为我们已经知道了它应该在的位置,用我们之前打包好的替换了onclic的load.dex push进data文件夹里,再启动程序。呼,还好没问题,正常启动起来了,如果按照我们的预想的话,点击按钮的时候就会直接显示Success了,尝试了一下,果然如此。但是既然不是拿flag或者破解内购,用这样的方法作弊也太没意思了叭,一不做二不休,直接把它的密码也逆出来吧。

0x004 核心内部(已经不会起名了x_x)

首先先看Activity,我们可以看到首先在加密之前判断了一下条件,输入必须是24位byte,也就是24位字符了,并且以每个字符为一组分为三组,每组中字符的ascii必须满足递增且第一组中的范围在24-121之间。然后对于每一组进行加密,它的加密算法用到了其他两个类,Square和Point。大概思路就是对于每一组的八个数生成一个Square,每个数对应一个Point,在Square里会使用这些数据进行初始化并且进过换位操作,最终判定条件是对每个字符的Point进行check,如果有check失败的就标志输入错误。在这里我们看到这个加密算法其实我们无法直接从它上面看到使用的密码,但是因为这个输入集是在byte的正数范围,每一位只有127个,而且貌似除了递增限制之外,点之间的判定并无关联。所以我们通过分析smali(或者修补一下反编译的代码)之后获得他的移位和check算法,对每一组输入0-127的数字并执行check,如果符合条件便输出,得到每一组里符合条件的字符。第一组得到了10个字符,只要从这些里面按升序挑选8个输入进去,第二第三组也是,这样得到一个24位的密码(从输出结果来看,答案是不唯一的)。输入进去并点击ok,跳进了成功的界面,说明这样逆出来的密码是正确的。

0x005 终章

总体来说算是一个比较简单但是全面的Crackme吧,前面半段比较考验对android加载过程等的了解,伙伴段就是对加密算法和反编译逆向思路的考验,如果有兴趣的话也可以自己试试逆一逆,对于提升经验还是很有帮助的QwQ

终わり


1 条评论

Molla Chun · 2018年6月27日 下午4:45

过程写的很清楚 先马了 +1

发表评论

电子邮件地址不会被公开。