66 lines
1.6 KiB
Ruby
66 lines
1.6 KiB
Ruby
shared_examples_for 'Rex::Encoder::Alpha2::Generic' do
|
|
|
|
describe ".encode_byte" do
|
|
subject(:encoded_byte) { described_class.encode_byte(block, badchars) }
|
|
|
|
context "when too many badchars" do
|
|
let(:block) { 0x41 }
|
|
let(:badchars) { (0x00..0xff).to_a.pack("C*") }
|
|
|
|
it "raises an error" do
|
|
expect { encoded_byte }.to raise_error(RuntimeError)
|
|
end
|
|
end
|
|
|
|
context "when encoding is possible" do
|
|
let(:block) { 0x41 }
|
|
let(:badchars) { 'B' }
|
|
|
|
it "returns two-bytes encoding" do
|
|
expect(encoded_byte.length).to eq(2)
|
|
end
|
|
|
|
it "returns encoding without badchars" do
|
|
badchars.each_char do |b|
|
|
is_expected.to_not include(b)
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
describe ".encode" do
|
|
subject(:encoded_result) { described_class.encode(buf, reg, offset, badchars) }
|
|
let(:buf) { 'ABCD' }
|
|
let(:reg) { 'ECX' }
|
|
let(:offset) { 0 }
|
|
|
|
context "when too many badchars" do
|
|
let(:badchars) { (0x00..0xff).to_a.pack("C*") }
|
|
|
|
it "raises an error" do
|
|
expect { encoded_result }.to raise_error(RuntimeError)
|
|
end
|
|
end
|
|
|
|
context "when encoding is possible" do
|
|
let(:badchars) { '\n' }
|
|
|
|
it "returns encoding starting with the decoder stub" do
|
|
is_expected.to start_with(described_class.gen_decoder(reg, offset))
|
|
end
|
|
|
|
it "returns encoding ending with terminator" do
|
|
is_expected.to end_with(described_class.add_terminator)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe ".add_terminator" do
|
|
subject(:terminator) { described_class.add_terminator }
|
|
|
|
it { is_expected.to eq('AA') }
|
|
end
|
|
|
|
end
|