Assembly 如何使输入值成为eax并等于给定的十六进制值?
我有编译的c文件来运行这个程序,但它只显示了主程序。我已经转储了汇编代码,需要一些帮助才能通过8048daf的cmp。我已经找到前导零的数量,以使eax等于一个值,但我无法使其等于0x338。 由于它将我的输入作为字符串,我的理解是eax将2、4等数字作为其值,因为字符总是2个值作为其十六进制Assembly 如何使输入值成为eax并等于给定的十六进制值?,assembly,Assembly,我有编译的c文件来运行这个程序,但它只显示了主程序。我已经转储了汇编代码,需要一些帮助才能通过8048daf的cmp。我已经找到前导零的数量,以使eax等于一个值,但我无法使其等于0x338。 由于它将我的输入作为字符串,我的理解是eax将2、4等数字作为其值,因为字符总是2个值作为其十六进制 0000000000000000000000000000000000008 这是我用来作为输入使eax等于0x38的值 08048d7d <phase_5>: 8048d7d: 5
0000000000000000000000000000000000008
这是我用来作为输入使eax等于0x38的值
08048d7d <phase_5>:
8048d7d: 55 push %ebp
8048d7e: 89 e5 mov %esp,%ebp
8048d80: 83 ec 48 sub $0x48,%esp
8048d83: c6 45 f1 00 movb $0x0,-0xf(%ebp)
8048d87: c6 45 e2 00 movb $0x0,-0x1e(%ebp)
8048d8b: c6 45 e1 e5 movb $0xe5,-0x1f(%ebp)
8048d8f: c6 45 e0 e9 movb $0xe9,-0x20(%ebp)
8048d93: c7 45 ec 38 03 00 00 movl $0x338,-0x14(%ebp)
8048d9a: 8b 45 08 mov 0x8(%ebp),%eax
8048d9d: 89 44 24 04 mov %eax,0x4(%esp)
8048da1: 8d 45 c8 lea -0x38(%ebp),%eax
8048da4: 89 04 24 mov %eax,(%esp)
8048da7: e8 4c fb ff ff call 80488f8 <strcpy@plt>
8048dac: 8b 45 ec mov -0x14(%ebp),%eax
8048db4:74 05 je 8048dbb
8048db6:e8 d8 02 00 00呼叫8049093
8048dbb:0f b6 45 e0 movzbl-0x20(%ebp),%eax
8048dbf:3c 66 cmp$0x66,%al
8048dc1:75 10 jne 8048dd3
8048dc3:0f b6 45 e1 movzbl-0x1f(%ebp),%eax
8048dc7:3c 69 cmp$0x69,%al
8048dc9:75 08 jne 8048dd3
8048dcb:0f b6 45 e2 movzbl-0x1e(%ebp),%eax
8048dcf:84 c0测试%al,%al
8048dd1:74 05 je 8048dd8
8048dd3:e8 bb 02 00 00拨打8049093
8048dd8:c9离开
8048dd9:c3 ret
据我所知,您需要获取没有可打印表示形式的字节作为输入。在您的情况下,是0x03
和0x38
。很容易获得0x38
,因为字符'8'
具有该ascii值。但是0x3
呢。下面播放perl
或其他解释语言:
/a.out$(perl-e'print“0”x20.\x38\x03“)
这将获得一个字符串作为程序的输入,该字符串由20个字节组成,其中字符'0'
与两个字节0x03和0x38
连接在一起(
用于连接)
另一个问题是持久性。希望你知道,当我们有小的endian时,内存中的字节是颠倒的。例如,值
0x12345678
作为0x78 0x56 0x34 0x12
驻留在内存中。这就是为什么在输入中我们有“\x38\x03”
,而不是“\x03\x38”
您的编程问题是什么?看起来这段代码有一个缓冲区溢出错误。你应该通过切换到strcpy\u s
或strlcpy
来修复它,无论哪一个对你可用。我想我必须利用这个缓冲区来通过这个阶段@Raymondchen你能解释一下我如何利用这个缓冲区溢出返回到另一个地点@Raymondchen你应该向程序作者报告这个漏洞,这样他们就可以修复它了。那将是我的老师。他们知道它在那里@雷蒙德琴
8048daf: 3d 38 03 00 00 cmp $0x338,%eax
8048db4: 74 05 je 8048dbb <phase_5+0x3e>
8048db6: e8 d8 02 00 00 call 8049093 <trigger_bomb>
8048dbb: 0f b6 45 e0 movzbl -0x20(%ebp),%eax
8048dbf: 3c 66 cmp $0x66,%al
8048dc1: 75 10 jne 8048dd3 <phase_5+0x56>
8048dc3: 0f b6 45 e1 movzbl -0x1f(%ebp),%eax
8048dc7: 3c 69 cmp $0x69,%al
8048dc9: 75 08 jne 8048dd3 <phase_5+0x56>
8048dcb: 0f b6 45 e2 movzbl -0x1e(%ebp),%eax
8048dcf: 84 c0 test %al,%al
8048dd1: 74 05 je 8048dd8 <phase_5+0x5b>
8048dd3: e8 bb 02 00 00 call 8049093 <trigger_bomb>
8048dd8: c9 leave
8048dd9: c3 ret