安卓逆向

关于一道CTF题目的逆向分析(二)

2020-04-03  本文已影响0人  约你一起偷西瓜

老规矩,我们拿到一个apk依旧是先分析它的java代码

再来看一下so库

先看一下getFlag()

动态调试一波flag

qekfz@q2^x/t^fn0mF^6/^rbqanqntfg^E`hq|

再回头看下java代码会发现就是让输入的文本使用Native方法Encrypt加密后等于上面哪个字符串

那我现在再来看一下Encrypt函数是什么东西

光是看这个伪代码,其实这里已经很明显了的,但是我打算跑起来试试,这样更加直观嘛

第一次调用在 public String getSecret(String string)
str = ((env)->GetStringUTFChars)();
传值:KE3TLNE6M43EK4GM34LKMLETG
返回:JD2SKMD5L32DJ3FL23KJLKDSF
这就明白了,--
i str取地址--,就是对应的ASCII码值的上一位

encrypt("KE3TLNE6M43EK4GM34LKMLETG").substring(5, 8) = MD5
(再说咯,java层的getSecret函数调用了MessageDigest.getInstance(),这里里面的算法就那么两个个md5,sha,不是就会报错NoSuchAlgorithmException,其实猜也很好猜)

那现在我们也就清楚了encrypt做了什么事了,本着简单的重复操作都应该交给代码的思想,剩下的也就交给idea写段小代码解决

于是乎我们得到了:rflag{Ar3_y0u_go1nG_70_scarborough_Fair}

看样子像是flag,但是试了一下居然给我失败。。。无语了
只要祭出frida大法来看看参数为什么不对

emmm 多了一个q导致算出来的md5不一样。。。

回头检查了 一下,发现在分析native的时候查看寄存器的时候多看了上一位并没什么卵用,地址也不对的q,肯爹东西,为什么让两个字符串靠的如此之近。。。,还偏偏手贱 a 错了。。。

所以flag应该是:flag{Ar3_y0u_go1nG_70_scarborough_Fair}

还是附上apk下载地址,喜欢的小伙伴点个赞,或者自己去尝试一下
https://www.lanzous.com/iay0oud

上一篇下一篇

猜你喜欢

热点阅读