结合官方wp和自己的做题情况,想写点东西 记录下。通过week1 的题目,以题代学,什么不会什么不懂就去学啥,也学到了不少东西
week1 re做了四题 官方wp里有些操作写的轻轻松松而自己却要花很多时间去学再去实践,可以 将里面的一些东西记下来
easyasm
从ida⾥直接复制出来的汇编,嫌看着丑可以⽤vscode打开,然后装个assembly插件就可以有代码⾼
亮(以后都可以这么干)
首先这里将str值入栈,计算了str的长度 ,而后
获取了str的地址
并且读取了str[i] 所以可以看出其核心是将str数组全部异或0x33
a=[0x5b,0x54,0x52,0x5e,0x56,0x48,0x44,0x56,0x5f,0x50,0x3,0x5e,0x56,0x6c,0x47,0x3
a=[0x5b,0x54,0x52,0x5e,0x56,0x48,0x44,0x56,0x5f,0x50,0x3,0x5e,0x56,0x6c,0x47,0x3,0x6c,0x41,0x56,0x6c,0x44,0x5c,0x41,0x2,0x57,0x12,0x4e]
for i in a:
print(chr(i^0x33,end="")
收获:
- 对python 中集合与列表的用法更了解
- 对chr ord hex的操作更了解
- 对汇编的操作和栈空间更加理解
easyenc
在ida中打开 能够分析出将读入的v10与0x32异或后-86与v5对比,其中有一些tips在官方wp中提到
如果看不出来scanf将flag读到了哪里,可以双击进入函数,再返回main(快捷键esc),再按一次F5,就能自动分析了,这种情况是因为ida的分析策略比较懒
然后可以通过更改数据类型简化分析
对其中的变量修改类型,对着要修改的变量按快捷键y,输入要改的变量类型;按n改变变量名。
然后是解密代码时候可以直接复制数组,在c语言里,可以不用管这些数据是如何转成char的
int main(){
int v8[11];
v8[0] = 167640836;
v8[1] = 11596545;
v8[2] = -1376779008;
v8[3] = 85394951;
v8[4] = 402462699;
v8[5] = 32375274;
v8[6] = -100290070;
v8[7] = -1407778552;
v8[8] = -34995732;
v8[9] = 101123568;
v8[10] = -7;
char* p = v8;
for (int i = 0; i < 41; i++){
putchar((p[i] + 86) ^ 0x32);
}
}
收获:
- 熟悉ida操作
- 了解了高地址与低地址,大端序与小端序,数据存储
- c语言指针运用
encode
该题中能分析出对一个char拆成两个bit比较(后来看了官方wp得知为base16)。其中dword_403000里的密文是用int存储的,不懂的我直接一个一个的复制出来的。。。
在官方wp中通过快捷键y设置成int数组,然后再shift + E导出数据
收获:
- base16原理
- ida操作
a_cup_of_tea
这题自己能够读懂思路,但是没有做出来
是一题把delta改了的TEA算法 但说实话这题没弄明白,同样在xmmword的数据里没弄好
收获:
- ida中常用宏定义认识了不少(之后会总结)
- ida操作熟悉