Skipper
75The given binary will give you the password... if you meet its criteria!
objdumpコマンドで逆アセンブルします。
$ objdump -s -D skipper-64まず、下記の部分でComputer nameの文字列が一致するかチェックしています。
次に下記の部分でOS versionの文字列が一致するかチェックしています。402711: bf 87 29 40 00 mov $0x402987,%edi #Computer name: %s402716: b8 00 00 00 00 mov $0x0,%eax40271b: e8 c0 e1 ff ff callq 4008e0 <printf@plt>402720: 48 8d 85 f0 fb ff ff lea -0x410(%rbp),%rax402727: be 9a 29 40 00 mov $0x40299a,%esi #hax0rz!~40272c: 48 89 c7 mov %rax,%rdi40272f: e8 fc e1 ff ff callq 400930 <strcmp@plt>402734: 85 c0 test %eax,%eax402736: 74 23 je 40275b <__ctype_b_loc@plt+0x1dab>
402774: bf dc 29 40 00 mov $0x4029dc,%edi #OS version: %s402779: b8 00 00 00 00 mov $0x0,%eax40277e: e8 5d e1 ff ff callq 4008e0 <printf@plt>402783: 48 8d 85 f0 fb ff ff lea -0x410(%rbp),%rax40278a: be ec 29 40 00 mov $0x4029ec,%esi #2.4.3140278f: 48 89 c7 mov %rax,%rdi402792: e8 99 e1 ff ff callq 400930 <strcmp@plt>402797: 85 c0 test %eax,%eax402799: 74 48 je 4027e3 <__ctype_b_loc@plt+0x1e33>
次に下記の部分でCPUIDがAMDisbetter!と一致するかチェックしています。
402808: be 29 2a 40 00 mov $0x402a29,%esi #AMDisbetter!40280d: 48 89 c7 mov %rax,%rdi402810: e8 1b e1 ff ff callq 400930 <strcmp@plt>402815: 85 c0 test %eax,%eax402817: 74 24 je 40283d <__ctype_b_loc@plt+0x1e8d>
コンピュータ名、OSバージョン、CPUIDすべて一致しませんので、バイナリエディタで下記の74(je)の命令コードを75(jne)に書き換えることで、処理が流れるようにします。
命令コードを書き換えた実行ファイルを実行すると、下記のとおりフラグが表示されました。402736: 74 23 je 40275b <__ctype_b_loc@plt+0x1dab>
(略)
402799: 74 48 je 4027e3 <__ctype_b_loc@plt+0x1e33>
(略)
402817: 74 24 je 40283d <__ctype_b_loc@plt+0x1e8d>
$ ./skipper-64-2Computer name: ubuntu14-VirtualBoxOS version: 3.13.0GenuineIntelResult: FLAG:f51579e9ca38ba87d71539a9992887ff
フラグは、
FLAG:f51579e9ca38ba87d71539a9992887ff
です。