首先看看第一道题目:[网鼎杯 2020 青龙组]singal无壳32位: 直接拖ida中分析:先进入main函数看看: 下面这个vm_operad函数应该跟进去看: 这一大长串.....那么只能动态分析了:在main函数中下个断点,然后单步进入vm_operad函数:发现这个read是输入函数: 跟进去一看,flag的长度必须是15位: 然后程序首先进入case10分支,还有接下来的分支 我看着这么多case分支,想直接用递归调用的脚本来解题:就是直接让程序从case10分支利用函数递归调用输出flaga1就是前面的那个复制过来的字符串: 跑一下出来了:
在看第二道:[网鼎杯 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
[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。