一周学习笔记3_两个小知识点

buuctf的题目写到瓶颈了,so,转战攻防世界看能不能学到什么
一周学习笔记3_两个小知识点_第1张图片

elrond32

题目思路本身其实相当易懂,但是学到了一些细节操作

  int v2[33]; // [esp+18h] [ebp-A0h]
  qmemcpy(v2, &unk_8048760, sizeof(v2));

第一是这个copy函数,把8048760处33个int型数据放到v2
我第一次的做法是从IDA把8048760处的数据全部提取再删去0x00的值,但发现只有32个数据,惑而不解,看了官方wp才知道:int是四字节,所以下方这个数据应该是0x1e, 0

rodata:080487A4                  db  1Eh
.rodata:080487A5                 db    0
.rodata:080487A6                 db    0
.rodata:080487A7                 db    0
.rodata:080487A8                 db    0
.rodata:080487A9                 db    0
.rodata:080487AA                 db    0
.rodata:080487AB                 db    0

hackme

这个题遇到的是一个python语言相关的问题,在我运行如下代码的时候(截取),系统报错

        v11 = 0x6D01788D * v11 + 12345
    flag += chr(a[i] ^ v11)

报错如下OverflowError: Python int too large to convert to C long
改为如下代码后问题解决

        v11 = 0x6D01788D * v11 + 12345
    flag += chr((a[i] ^ v11)&0xff)

这里多了一个和0xff的与操作,大概意思是取操作数的低八位,因为负数有符号补位,具体解释可以看这篇文章。

你可能感兴趣的:(一周学习笔记3_两个小知识点)