2018ddctf安卓RSA-ida动态调试so(180423-每日破解)
本帖最后由 小白670 于 2018-4-24 09:04 编辑虽然这个题目叫RSA,但是跟RSA关系并不大,出题人很皮。题目的代码不容易静态分析,需要使用动态调试的方法。
Ida动态调试详细教程https://blog.csdn.net/feibabeibei_beibei/article/details/52740212
反编译分析可知,程序加载了so库,并且用so库里的stringFromJNI()函数来判断输入
在lib目录下,找到libhello-libs.so文件,拖进ida分析,在exports中找到关键函数
双击进去分析,然后一键F5,得到代码如下:
进入上图的关键函数,静态分析,只能得出输入的字符串长度要等于36,后面的循环有点乱,是出题人故意扰乱的,不过大概可以知道是将输入的数据和程序中的数据异或,程序中的数据如下:
到这一步,就不得不使用动态调试了,不过在动态调试前还得做一些准备工作,首先用andriodkiller打开apk,如图加上debugger条件,然后编译,把编译后的apk放到手机或者模拟器上,然后用ida打开这个新的apk的libhello-libs.so
先运行android_server文件,出现下面的提示既成功了,上面有教程具体怎么做
然后端口转发,启动程序
接着打开ddms,没有的要自己百度了,我弄了挺久的,有点麻烦
可以看到我们要调试的程序,然后
Port是调试程序的jdwp进程号,一般8700都是用来调试的,其他的不变照着输就好了
接着就是设置ida了
Process option里设置这个
Debugger option里设置这个
在attach to process 前,先下断点
然后attach to process
随便输入一些数据,程序停在断点,进入关键函数,看到这里在比较字符串长度是否等于0x24
跳过这里,为了分析具体的变化,我们在ida里面加上watch,
然后在watch里面右键选择add,加上要查看的的寄存器
加上一些常用的寄存器后,效果如下:R0里是我输入的字符串
接着往下分析,下图是异或的过程
异或完后来到了一个很复杂的循环里,动态分析很容易得出是在判断arr是否等于arr,i从0到26,程序里加了多个循环,但其实效果跟我说的是一样的,如果是这样的话,那其实有效字符串变成了10个
可以看到,这里如果不等于的话就跳转到失败,但是每次手动改寄存器的值有比较麻烦,所以我这里修改了函数代码,反正已经知道它到底是干嘛的。
因为ida不支持直接修改代码,所以我们只能走弯路
设置如上后我们可以看到指令的机器码了,我这里是已经改好的,把原来的D0改成D1了
然后需要找到代码在so文件中的偏移,首先找到so文件的base,然后用那条指令的地址一减就得到了偏移0x9CF6,接着在010editor里面编辑,先跳到偏移量,
修改后如下,但是还没结束,还需要用andriodkiller重新编译,然后换新的apk和so文件调试········
以上步骤有点繁琐,但是修改代码后就可以直接跳过那烦人的判断了,总的来说还是值得的,我在比赛后看大佬博客才知道还可以set ip跳过·······
取前十个字符,进行下一步操作
下面是将前10个字符传进atoll函数,将字符转换为long long 整数,非常关键
分析得知结果存储在R0和R1,低位存在R0,高位存在R1
第二个j_j_j__ZNSt3mapIciSt4lessIcESaISt4pairIKciEEEixERS3函数有用,它把字符jlocpnmbmbhikcjgrla转换为新的数字字符串,
接着把这串字符串转化数字
然后用这个数字除以我们之前那十个字符转化的数字,
最后就是判断条件了
后面还有我就不贴了,分析可以得知只有当10个字符转化的数字为5889412424631952987的因数,且是较小的那个时,才返回正确,否则错误。分解大数倒是跟RSA有点关系,用数学工具可以得到结果
脚本如下:
byte_4DECB=
##key=1499419583
key=
j=0
str=''
for i in range(len(byte_4DECB)):
byte_4DECB^=key
j=(j+1)%10
str+=chr(byte_4DECB)
print byte_4DECB
print str
最后那个分析,我手推的,最后得出结论,要求5889412424631952987除以我们的数余数为0且要小于商。这次学到很多东西,基本上每一步都是从0开始学的,最后做出来非常开心,虽然还是个菜鸡,但是已经在慢慢成长了。最后附上一张我推最后过程的草稿:
xushuwei1204 发表于 2018-4-24 08:53
棒棒的,支持一下
谢谢支持{:301_975:} mayl8822 发表于 2018-4-23 23:50
看不到图啦
不好意思,昨天晚上发的,因为网站突然维护不能重新编辑了,我今天把图片发上来 Hmily 发表于 2018-4-23 23:47
发错版块了,都乱码了,给你编辑下,图片上传看这个:https://www.52pojie.cn/misc.php?mod=faq&action=faq ...
图片我待会弄,这个安卓破解不是发到这个版块么 pghuanghui 发表于 2018-4-24 19:54
我想问问楼主,jdb未找到怎么回事?DDMS和手机也都ROOT了,也将Android_server打开了 就是没有jdb这个命令.
如果没有jdb的话,下一个就好了,可能你的adb工具包里面没有带jdb,如果有jdb还有问题的话可以再问我 发错版块了,都乱码了,给你编辑下,图片上传看这个:https://www.52pojie.cn/misc.php?mod=faq&action=faq&id=29&messageid=36 看不到图啦 棒棒的,支持一下 谢谢楼主,我最近在做这一道题 没有头绪,看了你的的帖子,有很多收获! kpa 发表于 2018-4-24 09:09
谢谢楼主,我最近在做这一道题 没有头绪,看了你的的帖子,有很多收获!
能帮上忙太好了,不过这题有很多混淆代码,还有最后的判断条件我都没有细讲,时间精力有限{:301_1008:} 现在还看不懂,慢慢向大神学习,谢谢分享