您的位置:首页 > 其它

安卓逆向之华山杯ctf第四题:神奇的zip

2017-06-17 18:10 423 查看
题目下载:http://download.csdn.net/detail/darmao/9873200

拿到这个题,apk无法安装,拖到jeb里也无法反编译,试了一下zip伪加密,将504B0102后边的第五第六个字节都改成偶数,两处需要修改:





然后安装就能打开了。

**首先打开有个闪屏:提示未获取权限 5秒之后就退出了

这里有三种解决方法:

第一种:最简单的方法**



**manifest文件中注册了两个activity,打开的闪屏的是主activity,我们的目的是打开MainActivity,所有直接打开adb shell,获得shell,提升到root权限,执行:

am start -n com.example.testndk4/com.example.testndk4.MainActivity 直接就来到了输入密码的界面。**



*第二种:*修改smali

我们来看看闪屏activity的逻辑:**



**调用了isExit方法,如果返回值为true就打开mainActivity,否则准备关闭

看看对应的smali:**



**将这里的if-eqz 改成if-nez即可

第三种:我们去看看native层的isExit方法:**



**这里返回值恒为0,所以只需要将对应处改成1,然后重新打包即可。

经过以上步骤,终于来到了mainActivity,直接需要输入一个密码:**



我们去看看这里的代码逻辑:



逻辑很简单,将输入的密码传递到native层的encodePassword进行了处理,我们去动态
a48c
调试一下吧


打开ida,断点下在这个函数的处:





**v2是从java层拿到的密码,v4是正确的密码,这两个进行比较

单步到v4=(encodePS)(&10)处**



**这里调用encodePS函数,返回值就是正确的password,

执行完看返回值,在R0寄存器:**



这里就是正确密码啦

**password:lxienietIeAehfyih
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: