2022 美团MTCTF初赛 small
2022 美团MTCTF初赛 small分析首先查壳,知道是64为无壳
然后放入相对应的IDA,但是这里要注意一下要以Binary的方式打开,我之前用7.7版本尝试直接打开文件,发现解析不出来,这里建议用二进制方式打开
然后就会看到一堆数据
这里我有直接全选然后按C转换为汇编代码过,但是发现会出错,并且找不到我想要的,然后去观察
这个0C3代表的是ret也就是一个结束,然后就从6A开始选中去按C
发现这个unk_64函数有点点不对,然后就选中68,69这两行然后强行转换为汇编代码就成了一个对的函数
然后进行分析一下这个函数在干嘛
这里的shl的移位和4,5的出现,能联想到这是一个tea的魔改,然后这里循环是23次,我写脚本发现不对,然后就声明了一下函数才知道是循环了35次(可能前面按C变成汇编代码的时候弄错了才导致循环次数不对,但也不怎么影响)
接着就是去找密文
这里找密文其实挺艰难的(对我来说),首先在魔改tea函数的后面还有几个函数
这个sub_C0函数有一个跳转与loc_EA函数有关,这两个函数好像没什么多大用,然后F1行这里有一个endp代表结束了。这里F3行开 ...
攻防世界Windows_Reverse1
攻防世界Windows_Reverse1分析首先去查壳,32位的UPX壳
然后脱壳
接着放入IDA中分析
这里的if语句是与v4进行比较,并且发现只有14行是函数,进去看看v6在函数中会与v4有什么关系
看到12行能知道v4的地址是由a1和v1的地址相减得到的,15行这里的v1[v4]相当于是v1+v4也就是a1,对byte_402FF8进行索引,然后去看看byte_402FF8里的东西
发现是?,里头的东西没有出现
然后去看了别人的WP知道了ASCII编码表里的可视字符就得是32往后的,所以32以前的都不会被索引到,往下数32的地址
这里就是内容了,然后写脚本
脚本a = [ 0x7E, 0x7D, 0x7C, 0x7B, 0x7A, 0x79, 0x78, 0x77, 0x76, 0x75, 0x74, 0x73, 0x72, 0x71, 0x70, 0x6F, 0x6E, 0x6D, 0x6C, 0x6B, 0x6A, 0x69, 0x68, 0x67, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x60, 0x5F, 0x ...
攻防世界BABYRE
攻防世界BABYRE分析
首先查壳,64位无壳
然后放入IDA分析
这里的逻辑很简单,大概就是一个简单的异或再去if语句进行判断得出是否正确,但是我发现第12行这里的(*(unsigned int (__fastcall **)(char *))judge)(s)很奇怪,但我也没多去管了就去直接写脚本了
发现不对,再回去看看那个奇怪的地方所以这里(*(unsigned int (__fastcall **)(char *))judge)(s)应该这样分析,unsigned int 是judge函数的返回类型(无符号整型),(fastcall )是函数的调用约定,(char *)这个是提取judge的数组头的一连串字符串做函数名。也就是说这不是真正的judge,judge应该是个函数而不是数组,那么我们要去把真正的judge弄出来
函数调用约定具体可以去看这个:(46条消息) __fastcall具体含义_阿齐兹的博客-CSDN博客__fastcall
这里就直接用ida python弄(这也是我初次使用这个东西)
已经改好了,发现还是数组然后就按c转换成数据再按p声明一下
...
2022长城杯 rabbit_hole
2022长城杯 rabbit_hole分析
首先查壳
32位无壳,放入IDA中看
一开始里头好多花指令,直接手动patch掉然后去看主函数(这里去花就不演示了,真的很多,后序有空会发去花的教程)
首先可以看到四个函数,前面两个点进去都很复杂然后就直接去看它的汇编代码
发现没什么用,然后看到v6和v7是进行长度约束的,得到长度后方便后面动调,接着来算一下长度为多少
a = BitVec("a", 32)v6 = ZeroExt(24, Extract(23, 16, a)) ^ ( 0x1000193 * (ZeroExt(24, Extract(15, 8, a)) ^ (0x1000193 * (a ^ 0x50C5D1F))))v7 = ZeroExt(24, Extract(31, 24, a)) ^ (0x1000193 * v6)s = Solver()s.add(v7 == 0x458766D3)s.add(a != 3255316991)print(s.check(), s.model())#这里浅用了一下别人的脚本,最近pytho ...
网鼎杯2022青龙组 re694
网鼎杯2022青龙组 re694分析首先查壳
这里提示不能直接去upx的壳,先放入winhex中看看
发现这里是FUK,这里将特征码给改了,所以要将FUK改为UPX然后保存
然后常规UPX的脱壳
然后放入IDA分析,找到关键语句进行交叉引用
发现关键的函数只有这两个
然后跟进这个函数
然后去外面sub_1400111E5函数中看看
这一部分是加密,然后进去sub_140011276函数中看一下
这里是进行判断的,可以从这里提取到关键字符
脚本#include<stdio.h>#include<string.h>int main(){ char d[] = { 0x4B,0x48,0x79,0x13,0x45,0x30,0x5C,0x49,0x5A,0x79, 0x13,0x70,0x6D,0x78,0x13,0x6F,0x48,0x5D,0x64,0x64}; for(int i=0;i<20;i++) { d[i] = (d[i] ^ 0x50) - 10; } for(int ...