Fork me on GitHub

LOLI

LOLI

chr() 在 python2 python3 中的区别

  • python2中:

    • chr(…)
      chr(i) -> character

      ​ Return a string of one character with ordinal i; 0 <= i < 256.

  • python3中:

    • chr(i, /)

      Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.

第一个是i的范围变了,还有返回的类型从string–>Unicode string(想知道区别自行百度- -),试了一下i从161开始,返回的就不同了

(左python3 右python2)

loli.png

讲完这个看看巅峰极客–Loli

看了大佬的wp,菜的不想说话,用python3.6打了一遍大佬的代码各种报错,猜想大佬是2.7,网上查了资料解决报错后,得到一个png,winhex看到最后black and white,iend标识,本以为美滋滋应该藏着一个png,放到kali中foremost什么都没,最后用2.7重新大佬的脚本才行,想知道为什么,这才有了上面chr()在python2,3中的区别,所以只能用2.7,有大佬知道怎么用3.6实现的可以call我!

抠出来一个新的png

loli_2.png

发现有11列,仔细观察!被分成100行(偶数行都是一样的),猜测奇数行藏着数据

利用matplotlib的image模块,对奇数行的每一块提取数据(每行被分成11块,因为黑色的rbg(0, 0, 0),白色是(1, 1, 1),所以一小块就是一个数据,等等具体说明)

(关键代码)

1
2
3
if y % 2 == 0:
for x in range(1, xx-1, 9):
_str = "0b" + str(int(png[y][x][0])) + str(int(png[y][x+1][0])) + str(int(png[y][x+2][0])) + str(int(png[y][x+3][0])) + str(int(png[y][x+4][0])) + str(int(png[y][x+5][0])) + str(int(png[y][x+6][0])) + str(int(png[y][x+7][0]))

png[y][x][0] 指的是图片第y行第x个像素的r(0代表r,1代表g,2代表b),(第三个参数0,1,2都可以,因为要么是[0,0,0],要么是[1,1,1],希望你们可以看懂,还不清楚可以自己查下资料)

最后记得提示,将每个小数据块都转10进制后与0xff异或写入创建的文件里

膜大佬,大佬的wp

CTF 菜是原罪