需要帮助理解 strtonum 的不同输出
Need help understanding different outputs of strtonum
所以我正在尝试进入 CTF,我正在做的第一个是 picoCTF 2019。我使用 gawk
和 strtonum()
来解决其中一个问题。基本上,我必须查看此输出:
49734 231 160
49735 235 151
49736 230 143
49737 310 157
87663 12 103
162650 364 124
175231 153 106
175232 261 173
211986 230 164
211987 222 150
211988 15 63
211989 330 171
284427 122 162
292340 174 63
292341 371 137
331830 216 141
331831 365 65
426632 346 137
439903 360 144
515770 112 61
515771 252 146
583608 341 146
640996 310 63
688795 77 162
688796 107 63
702943 23 156
751424 243 164
754731 61 137
754732 113 64
754733 274 163
754734 304 137
796226 43 142
871159 256 165
871160 6 67
871161 316 67
871162 346 63
927506 347 162
927507 212 137
927508 122 64
994666 376 156
994667 43 144
994668 377 137
1068577 234 152
1068578 344 63
1068579 203 61
1068580 222 61
1068581 162 171
1101444 5 137
1101445 173 141
1101446 7 163
1101447 300 154
1171017 53 153
1171018 147 152
1171019 356 146
1241182 51 144
1241183 224 163
1241184 200 141
1241185 106 154
1272572 217 153
1272573 156 146
1337150 4 163
1410459 345 154
1410460 340 153
1460208 5 146
1510914 237 154
1567157 322 153
1567158 100 152
1567159 42 144
1567160 220 163
1567161 205 146
1581925 315 144
1581926 244 163
1581927 215 172
1581928 147 155
1581929 257 172
1677065 176 61
1677066 341 60
1764510 357 65
1764511 210 64
1764512 31 70
1766742 13 175
来自命令cmp -l kitters.jpg cattos.jpg
,并解码第三列字符串的八进制ASCII编码。
为了完成任务,我使用了这个命令:
cmp -l kitters.jpg cattos.jpg | gawk '{printf "%c", strtonum(0)}' && echo
给出了所需的输出,标志:
picoCTF{th3yr3_a5_d1ff3r3nt_4s_bu773r_4nd_j311y_aslkjfdsalkfslkflkjdsfdszmz10548}
但是,在找到这个解决方案之前,我尝试了这个命令:
cmp -l kitters.jpg cattos.jpg | gawk '{printf "%c", strtonum()}' && echo
除了在</code>之前没有<code>0
外,其他命令完全相同。它给出了这个输出:
g|j¤?«¢?A=?¢?¤@£¥CC?¢@?==«£££££¬=<A@F¯
我很好奇为什么这两个命令给出了截然不同的输出,以及 strtonum()
中的 0
的意义是什么。我认为它与八进制有关,但我无法在任何地方找到证实。
手册是这样描述strtonum
的:
strtonum(str)
Examine str
, and return its numeric value. If str
begins with a leading 0
, treat it
as an octal number. If str
begins with a leading 0x
or 0X
, treat it as a hexadecimal
number. Otherwise, assume it is a decimal number.
因此,正如您在下面看到的,160
和 0160
是不同的数字;都记录在案了。
$ gawk 'BEGIN { print strtonum("160"), strtonum("0160") }'
160 112
所以我正在尝试进入 CTF,我正在做的第一个是 picoCTF 2019。我使用 gawk
和 strtonum()
来解决其中一个问题。基本上,我必须查看此输出:
49734 231 160
49735 235 151
49736 230 143
49737 310 157
87663 12 103
162650 364 124
175231 153 106
175232 261 173
211986 230 164
211987 222 150
211988 15 63
211989 330 171
284427 122 162
292340 174 63
292341 371 137
331830 216 141
331831 365 65
426632 346 137
439903 360 144
515770 112 61
515771 252 146
583608 341 146
640996 310 63
688795 77 162
688796 107 63
702943 23 156
751424 243 164
754731 61 137
754732 113 64
754733 274 163
754734 304 137
796226 43 142
871159 256 165
871160 6 67
871161 316 67
871162 346 63
927506 347 162
927507 212 137
927508 122 64
994666 376 156
994667 43 144
994668 377 137
1068577 234 152
1068578 344 63
1068579 203 61
1068580 222 61
1068581 162 171
1101444 5 137
1101445 173 141
1101446 7 163
1101447 300 154
1171017 53 153
1171018 147 152
1171019 356 146
1241182 51 144
1241183 224 163
1241184 200 141
1241185 106 154
1272572 217 153
1272573 156 146
1337150 4 163
1410459 345 154
1410460 340 153
1460208 5 146
1510914 237 154
1567157 322 153
1567158 100 152
1567159 42 144
1567160 220 163
1567161 205 146
1581925 315 144
1581926 244 163
1581927 215 172
1581928 147 155
1581929 257 172
1677065 176 61
1677066 341 60
1764510 357 65
1764511 210 64
1764512 31 70
1766742 13 175
来自命令cmp -l kitters.jpg cattos.jpg
,并解码第三列字符串的八进制ASCII编码。
为了完成任务,我使用了这个命令:
cmp -l kitters.jpg cattos.jpg | gawk '{printf "%c", strtonum(0)}' && echo
给出了所需的输出,标志:
picoCTF{th3yr3_a5_d1ff3r3nt_4s_bu773r_4nd_j311y_aslkjfdsalkfslkflkjdsfdszmz10548}
但是,在找到这个解决方案之前,我尝试了这个命令:
cmp -l kitters.jpg cattos.jpg | gawk '{printf "%c", strtonum()}' && echo
除了在</code>之前没有<code>0
外,其他命令完全相同。它给出了这个输出:
g|j¤?«¢?A=?¢?¤@£¥CC?¢@?==«£££££¬=<A@F¯
我很好奇为什么这两个命令给出了截然不同的输出,以及 strtonum()
中的 0
的意义是什么。我认为它与八进制有关,但我无法在任何地方找到证实。
手册是这样描述strtonum
的:
strtonum(str)
Examine
str
, and return its numeric value. Ifstr
begins with a leading0
, treat it as an octal number. Ifstr
begins with a leading0x
or0X
, treat it as a hexadecimal number. Otherwise, assume it is a decimal number.
因此,正如您在下面看到的,160
和 0160
是不同的数字;都记录在案了。
$ gawk 'BEGIN { print strtonum("160"), strtonum("0160") }'
160 112