陕西省网络空间安全技术大赛安卓破解试题分析(二)
本帖最后由 挥汗如雨 于 2017-12-17 12:50 编辑陕西省网络空间安全技术大赛安卓破解试题分析(一) 入口:http://www.52pojie.cn/thread-602744-1-1.html
陕西省网络空间安全技术大赛安卓破解试题分析(三) 入口:http://www.52pojie.cn/thread-604320-1-1.html (作者:@Enigma_G,感谢ing)
陕西省网络空间安全技术大赛安卓破解试题分析(四) 入口:http://www.52pojie.cn/thread-604822-1-1.html (作者:@Enigma_G ,感谢ing)
陕西省网络空间安全技术大赛安卓破解试题分析(五) 入口:http://www.52pojie.cn/thread-605059-1-1.html (作者:@lumou ,感谢ing)
=================================================================================
大家的支持是我最大的动力!!!
第二道题下载,百度云链接爱挂,所以用的腾讯云
链接:链接: https://pan.baidu.com/s/1eSNGePW 密码: f3he
看到第一个帖子这么受欢迎,楼主抓紧时间打完第二个题目的思路:
这段英文看不懂也没关系,装上软件一看界面就知道是让求出密码。
老套路,Android kill 打开,反编译进入入口函数:
挨个查看这几个函数:
base64网上解密的很多,百度一个解密一下:
这几个字符解密后好像是:testuser2 什么的,读者可以自己试一下
代入上面的函数,大概意思是打开test数据库的user表,读取第二行的 birthday
test 文件在 AndroidKiller_v1.3.1\projects\icontest1\Project\assets 目录下类型为sqllite楼主用 SQLite Database Browser 2.0 打开
也就是这个:9838e888496bfda98afdbb98a9b9a9d9cdfa29
再看ReadSe方法:
调用了底层 readbin 方法。
IDA F5后:
直接点开第一个函数:
这一串代码,看着就头疼,没办法,再挨个点进去:
看不懂吗?嘿嘿,我也看不懂。IDA对Android提供的底层java类型不支持,需要把a1装换成JNIEnv* 类型
鼠标移到变量a1上面,右键点 Set .....type,改一下
就变成了这个:
是JNi函数,看不懂的推荐下这个Bog,Jni 常用函数:http://blog.csdn.net/qinjuning/article/details/7595104 和 @Enigma_G 的帖子 http://www.52pojie.cn/thread-603120-1-1.html
剩下的几个函数也用这种方法边查边看,哎,头大。
最后大概看懂了,sub_10F4方法是把a1的 jstring 类型转换成char* 类型。
返回上一个函数,你会惊讶的发现:
readbin 函数多出来了两个参数,里面的方法也有少数变化,去和上面找不同吧。。。。。
这个细节曾经很困扰我,因为java代码里,readbin 函数只有一个参数,但是在.so里面却多出来了两个。
@lumou 感谢他的提醒:
大概是这样,经过Jni 底层调用什么的(我也不太懂JNI,如果有大神懂的话请留言教一下我,谢谢)感谢 @Enigma_G在评论区的回复。
点开第二个函数:
明显的算法,再看sub_1078函数:
一目了然,又是一个加密过程,先不管这个,返回去看第三个函数。
将v5重新转为 jstring类型并返回。PS(如果第一个函数实在看不下去的话,可以通过这个函数猜想之前的是把 jstring 类型转为 char,最后再转回来)
所以,重点关照加密的函数,敲黑板!!!问:已知加密函数和加密后的字符串,求加密前的函数?
正常情况都会往逆推方向想(比如第一题),但是,由于这里使用了二重加密(我先加密一次,然后有用函数再进行一次加密),所以逆推的话会非常复杂。
再看一下代码会发现加密后的字符串,每两个是由一个字符经过 sub_1078 函数后获得的,ASCII编码范围也就0~255,所以从ASCII字符推出来 加密过后的字符比较方便。
上python 代码:
里面的ord()和chr()函数是将ASCII编码十进制数与字符之间转换的函数,读者可以自行百度,限于篇幅不讲了。
还有!!!语言只是一个工具,其实C语言,JAVA也可以实现,不过对我来说python比较方便,所以才选择了python。
跑出结果:
这个结果输入到应用中,应用会直接退出(其实输入什么都会退出的),也就是安装了这个软件根本没法运行,猜想大赛主办方测试的就是在软件有问题的情况下解出密码。。。。。。
===========================================================================================================
陕西省网络空间安全技术大赛安卓破解试题分析(一) 入口:http://www.52pojie.cn/thread-602744-1-1.html
陕西省网络空间安全技术大赛安卓破解试题分析(三) 入口:http://www.52pojie.cn/thread-604320-1-1.html (作者:@Enigma_G,感谢ing)
陕西省网络空间安全技术大赛安卓破解试题分析(四) 入口:http://www.52pojie.cn/thread-604822-1-1.html (作者:@Enigma_G ,感谢ing)
陕西省网络空间安全技术大赛安卓破解试题分析(五) 入口:http://www.52pojie.cn/thread-605059-1-1.html (作者:@lumou ,感谢ing) 挥汗如雨 发表于 2017-4-27 14:48
恩,你的那篇我看过了,写的不错,但是还是搞不懂那个变量为啥多出来两个。。。。
因为你在JNI层的时候需要调用JNINativeInterface结构体的方法,那么首先就需要获得这个结构体,那么第一个参数*env是一个指针,它就指向这个结构体,第二个参数是和java层相对应的,如果java层是一个静态方法,那么你就需要传入jclass类型,如果java层不是静态方法,那么你在java层调用非静态方法是不是要通过对象来调用,那么对应的,JNI也需要传入一个对象,对应的就是一个jobject类型的参数:lol 。。。感谢分享。。 。。 。。 感谢分享,来看一看 真是,来这个网站知道了不少新东西 等楼主更新 谢谢分享!加油!!! 这分享。。。。 感谢分享,ctf比赛这两年是越来越多了。我的战队今天打完比赛,明天又有一场》。。。 瞧一瞧,看一看 学习了,谢谢分享