挥汗如雨 发表于 2017-4-26 23:05

陕西省网络空间安全技术大赛安卓破解试题分析(二)

本帖最后由 挥汗如雨 于 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)

Enigma_G 发表于 2017-4-27 15:10

挥汗如雨 发表于 2017-4-27 14:48
恩,你的那篇我看过了,写的不错,但是还是搞不懂那个变量为啥多出来两个。。。。

因为你在JNI层的时候需要调用JNINativeInterface结构体的方法,那么首先就需要获得这个结构体,那么第一个参数*env是一个指针,它就指向这个结构体,第二个参数是和java层相对应的,如果java层是一个静态方法,那么你就需要传入jclass类型,如果java层不是静态方法,那么你在java层调用非静态方法是不是要通过对象来调用,那么对应的,JNI也需要传入一个对象,对应的就是一个jobject类型的参数:lol

seemanglee 发表于 2017-4-26 23:52

。。。感谢分享。。 。。 。。

wsqqzmjfjq123 发表于 2017-4-27 01:24

感谢分享,来看一看

dlyanxiaomei 发表于 2017-4-27 06:11

真是,来这个网站知道了不少新东西

SN1t2lO 发表于 2017-4-27 08:04

等楼主更新

jiexia 发表于 2017-4-27 08:17

谢谢分享!加油!!!

KKL 发表于 2017-4-27 08:45

这分享。。。。

While_Shark 发表于 2017-4-27 08:51

感谢分享,ctf比赛这两年是越来越多了。我的战队今天打完比赛,明天又有一场》。。。

寒山远 发表于 2017-4-27 09:32

瞧一瞧,看一看

Suliaoguan 发表于 2017-4-27 09:43

学习了,谢谢分享
页: [1] 2 3 4 5 6 7 8
查看完整版本: 陕西省网络空间安全技术大赛安卓破解试题分析(二)