首页
社区
课程
招聘
[分享][分享]解封了做了几道网鼎杯的题目庆祝庆祝,学到的方法不少,需要总结一下
发表于: 2022-6-9 08:56 14592

[分享][分享]解封了做了几道网鼎杯的题目庆祝庆祝,学到的方法不少,需要总结一下

2022-6-9 08:56
14592

首先看看第一道题目:
[网鼎杯 2020 青龙组]singal
无壳32位:
图片描述
直接拖ida中分析:
先进入main函数看看:
图片描述
下面这个vm_operad函数应该跟进去看:
图片描述
这一大长串.....
那么只能动态分析了:
在main函数中下个断点,然后单步进入vm_operad函数:
发现这个read是输入函数:
图片描述
跟进去一看,flag的长度必须是15位:
图片描述
然后程序首先进入case10分支,还有接下来的分支
图片描述
我看着这么多case分支,想直接用递归调用的脚本来解题:
就是直接让程序从case10分支利用函数递归调用输出flag
a1就是前面的那个复制过来的字符串:
图片描述
图片描述
图片描述
图片描述
跑一下出来了:
图片描述

在看第二道:
[网鼎杯 2020 青龙组]jocker:(玩笑,感觉这个题目肯定有点坑)
图片描述
无壳32位,直接拖ida
进入main函数之后,ida说堆栈有错误:
图片描述
这好办啊,修改堆栈就行了:
在main函数中仔细找找:
图片描述
发现了这里虽然调用的同一个函数 call __Z7finallyPc,但是堆栈指针不一样,那你肯定有问题:直接按套路来修改指针,函数的位置按下alt+k,修改新旧sp指针的差值,改为0:
图片描述
图片描述
这样看着就舒服多了:
图片描述
好了可以分析了:
简单的修改一下参数名称,加一些注释,便于之后的分析:
图片描述
接下来就要分析这个wrong和omg函数了:
先看wrong函数:
图片描述
非常清晰,对输入的字符串进行了减法和异或操作
再看omg函数:
图片描述
也非常清晰,就是将输入的input字符串与str_t字符串相比,要让程序正常运行,就必须相等
这是str_t里面的数据
图片描述
直接上脚本跑一下:
图片描述
发现flag不对.....动态挂起来看看吧(这个jocker真让我猜对了有问题)
图片描述
发现在最后的这个循环里面,对copy后的flag进行了操作,就是那个encrypt(名字都是加密)的加密函数进行操作的,
而且这个函数打开这是个啥啊:
图片描述
这么长的for循环,直接上od下断点dump这个函数出来看看吧,
先大致定位到那个大的for循环的地方
图片描述
然后你看ida中 那个for循环之后的if分支也调用了encrypt函数
图片描述
在for循环结束的地方下个断点,然后单步进入 call 00401500
图片描述
直接给他dump出来就是了encrypt函数了:
图片描述
这个就是那个encrypt函数了:
图片描述
直接拖入ida32中:
这个start函数就是之前的encrypt函数了:
图片描述
然后修改一下参数的类型和名称,便于写脚本分析:
图片描述
然后看看str_a和aHahahahaDoYouF[i]中的数据:
图片描述
图片描述
直接上脚本:
图片描述
发现并没有完全输出flag,这个jocker还没完呢,回ida中继续看看:
图片描述
看看字符串:
图片描述
这里应该就是程序的最后了:
是这样的一个函数
图片描述
上脚本跑一下就出来了:
图片描述

第三道是个Android题目[网鼎杯 2020 青龙组]bang
安装到我的nexus5线刷的 android6.0上:
图片描述
是这样的
然后看看有没有壳子:
图片描述
有壳,我选择用frida——tools脱壳:
先挂起frida:
图片描述
端口转发:
图片描述
挂起:
图片描述
图片描述
在输出的目录中找到dex文件 拖入jax中看看
图片描述
发现flag


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 3
支持
分享
最新回复 (1)
雪    币: 117
活跃值: (892)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
2
学习了
2022-6-9 17:26
0
游客
登录 | 注册 方可回帖
返回
//