首页
社区
课程
招聘
[讨论]安卓CTF-爬楼梯-动态调试-反调试分析
2022-6-13 09:07 9626

[讨论]安卓CTF-爬楼梯-动态调试-反调试分析

2022-6-13 09:07
9626

【1】关于逆向破解简述

程序界面,点击按钮"爬一层楼"则已爬的楼层+1
按钮"爬到了,看FLAG"无法点击
图片描述
1.分析清单文件,获取包名,以及入口类
图片描述
2.分析入口类
图片描述
3.AndroidKill修改并重新编译
图片描述
图片描述
此时,重新安卓编译后的APK,点击一次已爬楼层按钮后,则能够点击出现FLAG了
虽然此时已经告破,但是想研究一下so层的反调试和so层的方法具体做了什么

【2】静态分析so文件

1.发现不是静态加载方法,那么应该是JNI_onLoad动态注册;发现在JNI_onLoad前还有_init函数,所以分析顺序:_init->初始化数组->JNI_onLoad->注册方法
图片描述
2.分析_init
图片描述
2.1但是奇怪了,动态调试了好几次,都在fork()后就出错了,提示:got SIGCHLD signal (Child status has changed)

2.2只能将fork()nop掉,才能跑起来(这里是为什么呢?求指教

图片描述
3.接下来就能够断在JNI_onLoad函数
图片描述
3.1通过动态调试JNI_onLoad的注册方法的参数,获得注册方法位置是0xF90
图片描述
分析传入参数,通过算法便能计算除FLAG

【3】求助疑问

3.1但是很奇怪,找到注册方法后,并且下了断点,放开程序运行,结果加载失败,程序并不会运行起来,而是就卡在那,但是IDA动态调试页面却又是运行状态
3.2是否是在_init的时候nop那句fork出现了问题?导致无法加载成功?
3.3分析_init具体是如何反调试的呢?
图片描述

 

上传示例apk,以上几个问题还望有大神能够解惑!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
点赞4
打赏
分享
最新回复 (6)
雪    币: 1688
活跃值: (2619)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
Forgo7ten 2022-6-13 11:17
2
0
ida动调 我使用的时候也会出现奇奇怪怪的问题。。。可以使用frida将init反调试函数置空

请问楼楼哪里还有这样的安卓CTF题目呢?
雪    币: 2081
活跃值: (3119)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
shmilyaxy 2022-6-13 13:46
3
0
我试试看frida Hook掉init试试看,现在奇怪就是找到了native层的方法,没办法调试,程序压根黑屏,点击不了按钮下不了触发不了断点。
关于安卓CTF的题目,目前没有好的途径,都是网上看到有资源就拿下来练手
雪    币: 713
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
安小白MCY 2022-7-6 01:41
4
0
有没有系统的Android 反调试教程呢?
雪    币: 94
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
suminglan 2023-5-2 20:46
5
0

可以用frida hook (需要设置frida为spawn模式启动,可以绕过ptrace反调)

android.widget.Button.setClickable()

修改参数为true即可

启动参数:frida -U -f com.ctf.test.ctf_100 -l palouti.js

脚本如下

function hookSetVisibility() {
    Java.perform(function () {
        let Button = Java.use("android.widget.Button");
        Button.setClickable.implementation = function (arg) {
            console.log("button clicked");
            return this.setClickable(true);
        }
    })
}
setImmediate(hookSetVisibility)


雪    币: 10503
活跃值: (6599)
能力值: ( LV12,RANK:214 )
在线值:
发帖
回帖
粉丝
neilwu 1 2023-5-8 14:03
6
0
init_array里把0x00003E64 nop掉就可以调试
雪    币: 16150
活跃值: (5921)
能力值: ( LV13,RANK:861 )
在线值:
发帖
回帖
粉丝
大帅锅 4 2023-5-8 14:35
7
0
fork的时候因为是拷贝了进程的内容,你下了断点在那个地方,因此子进程会把你的断点的指令会拷贝过去,并且还与arm的三级流水有关
游客
登录 | 注册 方可回帖
返回