On Thu, Oct 30, 2008 at 11:25 AM, Vlad Tsyrklevich <[EMAIL PROTECTED]> wrote:
> On Thu, Oct 30, 2008 at 2:41 AM, spoonm <[EMAIL PROTECTED]> wrote:
>>
>> 2008/10/28 Vlad Tsyrklevich <[EMAIL PROTECTED]>:
>> > I have been looking at Opty2Nop recently and I made a couple of changes.
>> >
>> > 1) Fixed a minor bug, sometimes Opty2 would generate C1 /6 instructions
>> > which most processors will execute but which are not technically valid 
>> > (they
>> > would exist for SAL but SAL is an alias for SHL so it is defined as C1 /4).
>>
>> Did you find any processors that wouldn't execute it?  I remember this
>> case, and I realized it was technically invalid, although I couldn't
>> find a processor that cared (and when you think about it, there is no
>> reason to care).
>
> I didn't find any. The reason I even looked into it is because a
> ndisasm of my nops file ended up having bad instructions in it and I
> found this. I'd be happy to put it back, I took it out figuring it was
> better to err on safety and I didn't realize it was already
> considered.
>
>> > 2) I changed the 0x90 nop instruction so that it is no longer considered
>> > that 0x90 changes the eax register.
>>
>> Oh yeah, it's xchg eax, eax, I autogenerated those tables :\  Btw, has
>> anyone seen the original table generation code laying around?
>
> Yeah I plan to make mov reg, reg and xchg reg, reg also not change any
> registers if I ever get around to it.
>
>> > 3) Removed o16/0x66 prepend byte from 0x0f, this is currently unused 
>> > anyways
>> > but might prevent some poor person from debugging it in the future.
>>
>> Oh yeah, good catch
>>
>> > 4) Previously short jumps would only make positive jumps, I added the
>> > capability for them to make a "-1" jump which would basically just start
>> > executing at the offset byte. For example it could generate something like
>> > EB FF XX YY ... where EB FF jumps to FF XX YY ...
>>
>> Oh dang, smart.  And by positive I think you mean non-negative, since
>> it would generate for 0.
>>
>> > 5) I added support for the instructions mov reg, segreg (8C), mov reg,
>> > imm8/imm32 (C6/C7), and lea reg, mem (8D). I implemented LEA so that it 
>> > only
>> > allows memory references to be in ModR/M form and not be in SIB form (I
>> > don't think it's possible to allow SIB in the way Opty2 works at the
>> > moment).
>>
>> Yeah, I don't think so either, the pivot tables are all based on 1
>> byte of context, and you would need 2 bytes of context for the SIB
>> byte.
>
> Yeah realistically it wouldn't be a problem if we didn't have the
> context if there weren't SIB encodings that were "bad," but there are.
>
> While I still got you on the line, I was looking at one more thing to
> add to Opty2. Do you think RDSTC (0F 31) is safe to add? It's a
> two-byter, but 0x31 is a valid instruction prefix. The problem is that
> it was added in the 586, and is unsupported by some mid-90s Cyrix
> CPUs. I figure that's not a big concern since those CPUs masked
> themselves as being 486s anyway, but I was unsure if you knew of any
> other cases where RDTSC was not supported by the CPU. Would be nice to
> add since it would be the only two-byte instruction generated by Opty2
> and it would add one more number to the byte distribution.

Yeah, that's interesting.  Is rdtsc the only 2 byte instruction in the
0x0f escape group?  Have you added it and generated the before / after
byte distribution tables?  Would be interesting to see the difference,
it all depends on how often 0x31 is generated I guess.

As for CPU support, yeah, that's annoying.  I don't really think we
should care, but I guess it would be nice to have it documented or a
way of switching that instruction on or off.  But yeah, I mean, I
wonder what else would fail.  Do we have any old 486 machines to see
what happens?  Does it illegal instruction?

>
>> >
>> > I tested this just running about 50,000 bytes worth of nops with different
>> > save register settings and it ran as expected.I believe that this should be
>> > good to go though I haven't actually tested this with any exploit modules!
>> > The svn diff of the opty2_tables.rb file is attached.
>>
>> Word mannnn.  Nice work.  Thanks.
>>
>> >
>> >  - Vlad Tsyrklevich
>> >
>> > _______________________________________________
>> > Framework-Hackers mailing list
>> > Framework-Hackers@spool.metasploit.com
>> > http://spool.metasploit.com/mailman/listinfo/framework-hackers
>> >
>> >
>
_______________________________________________
Framework-Hackers mailing list
Framework-Hackers@spool.metasploit.com
http://spool.metasploit.com/mailman/listinfo/framework-hackers

Reply via email to