图文精华

易锦教育»学术中心 学术交流社区 作业中心 Android逆向精英班(第一期) 2021-09-18 精英班学员
分享

2021-09-18 精英班学员

迁羽 发表于 2021-9-18 20:20:10 [显示全部楼层] 回帖奖励 倒序浏览 阅读模式 关闭右栏 15 261

本帖最后由 迁羽 于 2021-9-18 22:21 编辑

分析附件中的程序,绕过相应的反调试,获取正确密码(关键点是解密函数)。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
选择远比努力更重要!
回复

使用道具 举报

已有(16)人评论

跳转到指定楼层
枯燥的小飞机 发表于 2021-9-18 21:42:49
本帖最后由 枯燥的小飞机 于 2021-9-20 15:33 编辑

调试拿到正确的flag(主要是解密)
再次分析了一下这个应用的逻辑

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

点评

嗯 分析的很透彻 点个赞  发表于 2021-9-19 13:23
<
回复

使用道具 举报

听雨安卓逆向 发表于 2021-9-19 15:30:24
分析附件中的程序,绕过相应的反调试,获取正确密码(关键点是解密函数):上工具拖入jadx ida静态分析一波!

找到JNI_Onload函数下段

第一个函数就给我整奔溃了 果断nop掉 发现已经过了反调试

F5一下查看伪代码

进入函数查看调用位置

查看PC函数

分析正确flag位置在V7
直接找pc函数下断点

目标函数一路点过去

发现和静态分析的差不多找到反调试点和 v7



分析结束 flag=hello5.1

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
<
回复

使用道具 举报

pcsms_zNvuC3qEF 发表于 2021-9-20 00:07:28
下载试试
<
回复

使用道具 举报

pcsms_zNvuC3qEF 发表于 2021-9-20 00:09:03
好像没钱。。
<
回复

使用道具 举报

睡梦中的仙人 发表于 2021-9-20 17:20:43
本次作业由于提示太明显,直接拖so静态分析一波。发现采用的动态注册方式加载,所以直接分析jni_load,首先看jni_load中没有创建线程的操作,说明反调试的代码不在jni_load中,这里找了下发现有好几种反调试内容,我就静态分析了一会就找到两个。
1. 点击ad函数中发现有/proc/net/tcp的字符串,那肯定是检测ptrace的;
2. 字符串中有23946,说明有检测调试端口的。
然后我修改后动态调试还是要崩溃,说明还有点没找到,就需要分析native注册了哪些函数,可以通过
这个dword_55058这里进去分析,找到sub_13C4C函数下还有哪些点做了反调试,这里我发现有好几个点都有反调试的,所以没有继续分析,而是采用搜索kill函数调用点,把代码节区中的BLX kill全部nop掉就完事了
至此普通调试即可,无需动态调试。
下面开始找解密函数
加密不是我们关注的重点,直接看解密函数。
其中RC4是它的解密逻辑不需要管,代码逻辑上来看我们只需要知道v4v7的值就能找出正确的密码,转换成汇编代码就是MOVNE R5,R7,等下动态调试时,直接找到这个地方下断
找到函数
找到下断处,开始调试
一次过拿到密码
密码为hello5.1,结束

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
<
回复

使用道具 举报

恐龙先生 发表于 2021-9-21 21:46:53
20210918作业
关键逻辑在ds函数中,静态分析如果看到这个密文636D55B2AA8609CB,其实就是密码,依靠wolf_de函数解密

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
<
回复

使用道具 举报

NCK 发表于 2021-9-22 17:35:41
静态分析 没找到静态注册的函数 只能从jni_onload下手

F5查看伪代码  发现有一个ad的函数

进来之后发现有 3个检测点



把AD函数nop掉 就可跳过反检测

把这4个字节 改为00 00 00 00 改完之后发现安装不上 再仔细看了下不能直接nop掉这个函数的调用

再找发现有kill nopkill试试


成功附加 反调试已经去掉

找解密函数

点进去F5 发现有一个RC4的解密算法 最后结果肯定是v4和v7了

动态调试 直接找到最后位置下断点

最后flag=hello5.1
<
回复

使用道具 举报

心情落叶 发表于 2021-9-23 21:45:43
2021-09-23 落沙提交

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
<
回复

使用道具 举报

wx_小镇青年 发表于 2021-9-23 23:32:02
分析apk java层代码把apk拖进ajdx-gui中




可得知密码验证在so层


2、IDA以Debug模式动态调试apk
先打开DDMS,用于模拟器进程监听。
打开app主界面,使用adb shell dumpsys activity top命令获取当前界面信息
使用adb shell am start -D -n com.yaotong.crackme/.MainActivity命令以Debug模式启动app指定界面

然后打开IDA Debugger附加CrackMe01.apk app进程
附加、勾选三项
IDA Debug模式动态调试配置完成。

为什么不用直接动态调试?经发现,该apk运行时会自己附加一个子进程,IDA中直接动态调试会显示两个Pid的该进程(可以进入/proc/进程id/status进行信息查看,子进程的TracePid就是父进程的Pid),由于一个进程只能被附加一次
,因此不能再对子进程进行附加,对父进程调试也发生了错误,而Debug模式动态调试则没有问题。

破除反调试
F9然后执行jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=端口号,端口号是DDMS对应进程的端口,且执行后图标变成绿色。
加载libwolf.so进来(进程现在挂起状态),找到这个so的导出函数(Debugger-Module list)
在jni_onload函数下断点,然后F9
程序断在这里
经测试函数在下图中的函数执行后会使调试中断

怀疑是反调试相关函数,尝试不让这个函数执行,找到改指令对应的内存指令数据
并修改为00000000
取得明文密码(这里我不是很会借鉴的)
从导出函数列表中可以看到许多加解密相关,猜测是把密文解密成明文然后与输入作比较,直接在Decrypt函数中的CMP(compare)指令下断点。
按F9让相关so加载进来,之后回到apk随便输入然后点按钮验证以触发解密函数。
按F9程序在指定地方断下,密码明文很可能在某一个寄存器中,找到R7寄存器(指向堆)jump过去查看存放内容



红圈存放的hello5.1应该就是密码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
<
回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则