吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 16949|回复: 47
收起左侧

[Android CTF] 2018ddctf安卓RSA-ida动态调试so(180423-每日破解)

  [复制链接]
小白670 发表于 2018-4-23 23:10
本帖最后由 小白670 于 2018-4-24 09:04 编辑

虽然这个题目叫RSA,但是跟RSA关系并不大,出题人很皮。题目的代码不容易静态分析,需要使用动态调试的方法。
IDA动态调试详细教程https://blog.csdn.net/feibabeibei_beibei/article/details/52740212

反编译分析可知,程序加载了so库,并且用so库里的stringFromJNI()函数来判断输入
图片1.png


在lib目录下,找到libhello-libs.so文件,拖进ida分析,在exports中找到关键函数
图片2.png

双击进去分析,然后一键F5,得到代码如下:
图片3.png

进入上图的关键函数,静态分析,只能得出输入的字符串长度要等于36,后面的循环有点乱,是出题人故意扰乱的,不过大概可以知道是将输入的数据和程序中的数据异或,程序中的数据如下:

图片4.png

图片5.png


到这一步,就不得不使用动态调试了,不过在动态调试前还得做一些准备工作,首先用andriodkiller打开apk,如图加上debugger条件,然后编译,把编译后的apk放到手机或者模拟器上,然后用ida打开这个新的apk的libhello-libs.so

图片6.png

先运行android_server文件,出现下面的提示既成功了,上面有教程具体怎么做
图片7.png


然后端口转发,启动程序
图片8.png

接着打开ddms,没有的要自己百度了,我弄了挺久的,有点麻烦
图片9.png

可以看到我们要调试的程序,然后
图片10.png

Port是调试程序的jdwp进程号,一般8700都是用来调试的,其他的不变照着输就好了

接着就是设置ida了

图片11.png

Process option里设置这个
图片12.png

Debugger option里设置这个

图片13.png




在attach to process 前,先下断点
图片14.png
然后attach to process

图片15.png

随便输入一些数据,程序停在断点,进入关键函数,看到这里在比较字符串长度是否等于0x24

图片16.png

跳过这里,为了分析具体的变化,我们在ida里面加上watch,


图片17.png

然后在watch里面右键选择add,加上要查看的的寄存器

图片18.png

加上一些常用的寄存器后,效果如下:R0里是我输入的字符串
图片19.png


接着往下分析,下图是异或的过程
图片20.png

异或完后来到了一个很复杂的循环里,动态分析很容易得出是在判断arr是否等于arr[i+10],i从0到26,程序里加了多个循环,但其实效果跟我说的是一样的,如果是这样的话,那其实有效字符串变成了10个

图片21.png

可以看到,这里如果不等于的话就跳转到失败,但是每次手动改寄存器的值有比较麻烦,所以我这里修改了函数代码,反正已经知道它到底是干嘛的。
因为ida不支持直接修改代码,所以我们只能走弯路
图片22.png

设置如上后我们可以看到指令的机器码了,我这里是已经改好的,把原来的D0改成D1了


图片23.png



然后需要找到代码在so文件中的偏移,首先找到so文件的base,然后用那条指令的地址一减就得到了偏移0x9CF6,接着在010editor里面编辑,先跳到偏移量,

图片24.png

图片25.png
修改后如下,但是还没结束,还需要用andriodkiller重新编译,然后换新的apk和so文件调试········

图片26.png


以上步骤有点繁琐,但是修改代码后就可以直接跳过那烦人的判断了,总的来说还是值得的,我在比赛后看大佬博客才知道还可以set ip跳过·······







取前十个字符,进行下一步操作
图片27.png


下面是将前10个字符传进atoll函数,将字符转换为long long 整数,非常关键
图片28.png

分析得知结果存储在R0和R1,低位存在R0,高位存在R1

图片29.png

第二个j_j_j__ZNSt3mapIciSt4lessIcESaISt4pairIKciEEEixERS3函数有用,它把字符jlocpnmbmbhikcjgrla转换为新的数字字符串,
图片38.png


接着把这串字符串转化数字
图片31.png


然后用这个数字除以我们之前那十个字符转化的数字,
图片32.png

图片33.png
最后就是判断条件了

图片34.png
图片35.png



后面还有我就不贴了,分析可以得知只有当10个字符转化的数字为5889412424631952987的因数,且是较小的那个时,才返回正确,否则错误。分解大数倒是跟RSA有点关系,用数学工具可以得到结果
图片36.png

脚本如下:
[C++] 纯文本查看 复制代码
byte_4DECB=[0x55, 0x1, 0x58, 0x41, 0x5D, 0x47, 0x5A, 0x42, 0xE, 0x54,0x56, 0x52, 0x4A, 0x4E, 0x44, 0x49, 0x5E, 0xD, 0x8, 0x56,0x42, 0x40, 0x5E, 0x5A, 0x1, 0x9, 0x51, 0x2, 0x41, 0x54,0x59, 0x45, 0x56, 0x5E, 0x56, 0x5C]
##key=1499419583
key=[0x31,0x34,0x39,0x39,0x34,0x31,0x39,0x35,0x38,0x33]
j=0
str=''
for i in range(len(byte_4DECB)):
    byte_4DECB[i]^=key[j]
    j=(j+1)%10
    str+=chr(byte_4DECB[i])
    print byte_4DECB[i]

print str



最后那个分析,我手推的,最后得出结论,要求5889412424631952987除以我们的数余数为0且要小于商。这次学到很多东西,基本上每一步都是从0开始学的,最后做出来非常开心,虽然还是个菜鸡,但是已经在慢慢成长了。最后附上一张我推最后过程的草稿:


图片37.png

免费评分

参与人数 17吾爱币 +18 热心值 +16 收起 理由
一不小心就丶 + 1 + 1 谢谢@Thanks!
好人家02 + 1 + 1 我很赞同!
化身千万 + 1 + 1 我很赞同!
AnswerW3I + 1 + 1 用心讨论,共获提升!
但愿人長久 + 1 + 1 我很赞同!
dryzh + 2 就冲这个手推的算纸
jnez112358 + 1 + 1 谢谢@Thanks!
zzzlucas + 1 + 1 谢谢@Thanks!学习大佬操作
zt471402521 + 1 + 1 用心讨论,共获提升!
lumou + 1 + 1 用心讨论,共获提升!
Ine + 1 + 1 谢谢@Thanks!
fr33m4n + 1 + 1 用心讨论,共获提升!
wushaominkk + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
dibh10 + 1 + 1 用心讨论,共获提升!
oxxo119 + 1 + 1 热心回复!
kpa + 1 + 1 谢谢@Thanks!
FHY456 + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 小白670 发表于 2018-4-24 09:01

谢谢支持
 楼主| 小白670 发表于 2018-4-24 08:31

不好意思,昨天晚上发的,因为网站突然维护不能重新编辑了,我今天把图片发上来
 楼主| 小白670 发表于 2018-4-24 08:30
Hmily 发表于 2018-4-23 23:47
发错版块了,都乱码了,给你编辑下,图片上传看这个:https://www.52pojie.cn/misc.php?mod=faq&action=faq ...

图片我待会弄,这个安卓破解不是发到这个版块么
 楼主| 小白670 发表于 2018-4-25 08:31
pghuanghui 发表于 2018-4-24 19:54
我想问问楼主,jdb未找到怎么回事?DDMS和手机也都ROOT了,也将Android_server打开了 就是没有jdb这个命令.

如果没有jdb的话,下一个就好了,可能你的adb工具包里面没有带jdb,如果有jdb还有问题的话可以再问我
Hmily 发表于 2018-4-23 23:47
发错版块了,都乱码了,给你编辑下,图片上传看这个:https://www.52pojie.cn/misc.php? ... 29&messageid=36
mayl8822 发表于 2018-4-23 23:50
看不到图啦
xushuwei1204 发表于 2018-4-24 08:53
棒棒的,支持一下
kpa 发表于 2018-4-24 09:09
谢谢楼主,我最近在做这一道题 没有头绪,看了你的的帖子,有很多收获!
 楼主| 小白670 发表于 2018-4-24 09:20
kpa 发表于 2018-4-24 09:09
谢谢楼主,我最近在做这一道题 没有头绪,看了你的的帖子,有很多收获!

能帮上忙太好了,不过这题有很多混淆代码,还有最后的判断条件我都没有细讲,时间精力有限
头像被屏蔽
mylin 发表于 2018-4-24 09:29
现在还看不懂,慢慢向大神学习,谢谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-3-28 19:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表