HNHuangJingYU 发表于 2021-10-24 18:53

《2021bilibili 1024程序节》CTF破解逆向题

本帖最后由 HNHuangJingYU 于 2021-10-25 09:37 编辑

2021哔哩哔哩程序节日破解逆向第5,6题思路如下:
第五题和第六题的附件是一样的,第五题很好解题,直接将对比的byte数组进行Base64转换再逐个异或3 运算就ok了,太简单不多说,flag = 516834cc-50e448af-bcf9ed53-9ae4328e
直接来到第6题 因为看到了首页加载了一个so层方法,但是没有用到,先不管直接进入so层分析,来到JNO_Onload函数如图:可以看到就动态注册了一个i函数

但是没有下文了,这里我配合搜索函数表和shift+f12查看字符表找到关键字bili_2233_3322通过字符交叉引用,最终锁定了all函数,如图:


嗯有了目标剩下就只剩分析了
1. _system_property_get函数就是验证以下abi型号,和apk的发行版本,ro.build.version.release这里应该就是判断是否加了debuggble关键字去调试程序了
2. 然后来到J_F_E函数这里就是读取手机/data目录下面的的文件了,但是这个app没有去申请读写文件权限就一直进不去判断,当然/data目录也不是一般用户可以读取的,这里有个root权限问题,当完成这里所有的判断后就可以进入字符加密逻辑层了

最重要的核心层在ZL7sprintfPcU17pass_object_size1PKcz函数通过传入dest和v10指针(正因为是指针操作地址才会改变它们的值变量)

嗯,思路清楚了,就剩执行了,这里因为对手机文件读取一直有问题,所以我就直接改了apk对它进行动态调试,首先在AndroidManifest.xml文件里加入android:debuggable="true"权限,因为是JNO_Oload层所以需要对其进行挂起调试,但是调试的时候再去改逻辑判断就很不舒服,而且多次挂起调试每次都要去改的话,很费时间,索性我就直接在so层就改了so文件如图:

将这里的判断进行取反就ok了,但是这里会涉及到file流指针也就是代码中的v6,当用到v6的时候程序就会报空指针

索性就再改一次吧,反正v6就只用来存放数据,我直接截取数据就行了,ok!改后图如下:

对应的代码我都nop掉了,用idaPython脚本去nop就很快,所以不用担心费时间,脚本如下,如需自取:
ea = idc.here()
addres_start = 0x147C
addres_end = 0x148C
for i in range(addres_start,addres_end):
ida_bytes.patch_byte(i,0x90)
这里选中进行nop也是可以的
start = idc.read_selection_start()
end = idc.read_selection_end()
item = idc.next_head(start - 1, end)
while item != BADADDR:
   next = idc.next_head(item, end)
   ida_bytes.patch_byte(item,0x90)
   item = next

因为省去了/data目录下文件的读取所以在动调调试的时候就累点,断点在48、49行也就是加密函数那里,然后按2次F9再进去数据段记下来就好,也就记录8次吧也不是特累 ,因为for循环8次,哈哈哈哈哈,最后整合记下来的数据就是b13981f45ae996d4bc04be5b34662a78因为要按flag格式提交所以最后的答案就是b13981f4-5ae996d4-bc04be5b-34662a78

lanke 发表于 2021-10-24 19:46

seems diffcult

int3-cc 发表于 2021-10-25 11:40

无闻无问 发表于 2021-10-24 22:07
java层MainActivity调用so的i方法,没返回仅仅是告诉你到so中的i方法的all中找密钥?

按钮事件中,就干了 ...

java层加载了so,so被加载就会调用初始化的一些方法。
这样demo中,so中通过反射调用了java层的方法。

HNHuangJingYU 发表于 2021-10-24 19:12


改后的apk已经放到蓝奏了https://www.lanzouw.com/ifIM2vpvoja密码:21u9

漁滒 发表于 2021-10-24 20:03

不知道这题能不能用unidbg做出来

bing90740 发表于 2021-10-24 20:17

厉害了了,,,,,{:1_913:}

52jcool 发表于 2021-10-24 20:20

厉害了,收藏学习

DC君 发表于 2021-10-24 20:21

原来是没有读写权限 我说怎么写出不了:sleepy:

cv14 发表于 2021-10-24 20:36

大佬牛逼啊

HNHuangJingYU 发表于 2021-10-24 20:45

DC君 发表于 2021-10-24 20:21
原来是没有读写权限 我说怎么写出不了

可以看看apk信息中,它并没有申请存储的权限

HNHuangJingYU 发表于 2021-10-24 20:48

漁滒 发表于 2021-10-24 20:03
不知道这题能不能用unidbg做出来
确实我在ida调试Android上面花了不少时间,有好的工具当然可以
页: [1] 2 3
查看完整版本: 《2021bilibili 1024程序节》CTF破解逆向题