0% found this document useful (0 votes)
9 views

woop

Scrip

Uploaded by

slametmundianto7
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
9 views

woop

Scrip

Uploaded by

slametmundianto7
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 6

-a 0100

0AE4:0100 ;-----------------------------------------------

0AE4:0100 ; Hex to Binary 16-bit ASM in debug.com syntax.

0AE4:0100 ; v0.2

0AE4:0100 ;

0AE4:0100 ; Joshua J. Drake <jduck [at] metasploit.com>

0AE4:0100 ;

0AE4:0100 ; References:

0AE4:0100 ; http://kipirvine.com/asm/debug/Debug_Tutorial.pdf

0AE4:0100 ; http://jakash3.wordpress.com/2010/02/20/file-operations-in-assembly-
language/

0AE4:0100 ;-----------------------------------------------

0AE4:0100 ;

0AE4:0100 jmp 197 ;jmp main (jmp)

0AE4:0103 ;

0AE4:0103 ;exit_program:

0AE4:0103 ; close read file

0AE4:0103 mov bx,[1bd] ;read_handle=1bd

0AE4:0107 call 131 ;call close_file

0AE4:010A ; close write file

0AE4:010A mov bx,[1cc] ;write_handle=1cc

0AE4:010E call 131 ;call close_file

0AE4:0111 mov ax,4c00 ;Exit function (AL=Errorlevel to return)

0AE4:0114 int 21 ;Do it

0AE4:0116 ;

0AE4:0116 ;open_for_reading:

0AE4:0116 mov ah,3d ;Open file function

0AE4:0118 mov al,00 ;Read-Only file access

0AE4:011A mov dx,1bf ;read_filename=1bf

0AE4:011D int 21 ;Do it


0AE4:011F mov [1bd],ax ;read_handle=1bd

0AE4:0122 ret

0AE4:0123 ;

0AE4:0123 ;open_for_writing:

0AE4:0123 mov ah,3c ;Open file function

0AE4:0125 mov cx,4 ;Archive file attribute

0AE4:0128 mov dx,1ce ;write_filename=1ce

0AE4:012B int 21 ;Do it

0AE4:012D mov [1cc],ax ;write_handle=1cc

0AE4:0130 ret

0AE4:0131 ;

0AE4:0131 ;close_file:

0AE4:0131 mov ax,3e00 ;Close file function

0AE4:0134 int 21

0AE4:0136 ret

0AE4:0137 ;

0AE4:0137 ; read(*phR,0x200,0x100)

0AE4:0137 ;read_data:

0AE4:0137 mov bx,[1bd] ;read_handle=1bd

0AE4:013B mov ax,3f00 ;Read from file function

0AE4:013E mov cx,100 ;Read the first 256 bytes of file

0AE4:0141 mov dx,0200 ;Address of buffer to store bytes read

0AE4:0144 int 21 ;Do it

0AE4:0146 cmp ax,2 ;must have at least 2 bytes to continue

0AE4:0149 ja 151 ;ja have_enough (jmp)

0AE4:014B call 178 ;call write_data

0AE4:014E call 103 ;call exit_program

0AE4:0151 ;have_enough:

0AE4:0151 ret

0AE4:0152 ;
0AE4:0152 ;convert_to_nibble: (al)

0AE4:0152 mov ah,0 ;no error

0AE4:0154 or al,20 ;lowercase the byte

0AE4:0156 sub al,30 ;is it in the 0-9 range?

0AE4:0158 cmp al,9

0AE4:015A jbe 164 ;jbe convert_success (jmp)

0AE4:015C sub al,31 ;if not, is it in the 0x61-0x66 range?

0AE4:015E cmp al,5

0AE4:0160 ja 165 ;ja convert_error (jmp)

0AE4:0162 add al,a ;yep, converted -> add 10 and return it

0AE4:0164 ;convert_success:

0AE4:0164 ret

0AE4:0165 ;convert_error:

0AE4:0165 mov ah,ff ;return error

0AE4:0167 ret

0AE4:0168 ;

0AE4:0168 ;get_one_byte:

0AE4:0168 cmp bp,0 ;see if we have bytes left

0AE4:016B jne 175 ;jne return_byte (jmp)

0AE4:016D call 137 ;call read_data

0AE4:0170 mov bp,ax ;store bytes read in bp

0AE4:0172 mov si,200 ;reset src ptr

0AE4:0175 ;return_byte:

0AE4:0175 lodsb

0AE4:0176 dec bp

0AE4:0177 ret

0AE4:0178 ;

0AE4:0178 ; write(*phW,0x300,di-0x300)

0AE4:0178 ;write_data:
0AE4:0178 mov cx,di ;load dst ptr

0AE4:017A sub cx,300 ;convert to count

0AE4:017E mov bx,[1cc] ;write_handle=1cc

0AE4:0182 mov ax,4000 ;Write to File function

0AE4:0185 mov dx,0300 ;Points to data to write

0AE4:0188 int 21 ;Do it

0AE4:018A ret

0AE4:018B ;

0AE4:018B ;get_nibble_or_die_trying:

0AE4:018B call 168 ;call get_one_byte

0AE4:018E call 152 ;call convert_to_nibble

0AE4:0191 cmp ah,0 ;check for error

0AE4:0194 jne 18b ;jne get_nibble_or_die_trying (jmp)

0AE4:0196 ret

0AE4:0197 ;

0AE4:0197 ;

0AE4:0197 ;================================================================

0AE4:0197 ;

0AE4:0197 ;------

0AE4:0197 ;main:

0AE4:0197 ;------

0AE4:0197 ;

0AE4:0197 call 116 ;call open_for_reading

0AE4:019A call 123 ;call open_for_writing

0AE4:019D ;

0AE4:019D ;-----------------------------------------------

0AE4:019D ; loop, processing bytes, refilling when needed

0AE4:019D ;-----------------------------------------------

0AE4:019D ;

0AE4:019D ; init pre-loop


0AE4:019D mov bp,0 ;bytes left

0AE4:01A0 ;outer_loop:

0AE4:01A0 mov di,300 ;write buf

0AE4:01A3 ;inner_loop:

0AE4:01A3 ;

0AE4:01A3 ; load the first byte (high nibble)

0AE4:01A3 call 18b ;call get_nibble_or_die_trying

0AE4:01A6 ;

0AE4:01A6 ; save the nibble in ah -> stack

0AE4:01A6 mov cx,1000

0AE4:01A9 mul cx

0AE4:01AB push ax

0AE4:01AC ;

0AE4:01AC ; load the second byte (low nibble)

0AE4:01AC call 18b ;call get_nibble_or_die_trying

0AE4:01AF ;

0AE4:01AF ; combine the nibbles and save the result

0AE4:01AF pop dx

0AE4:01B0 or al,dh

0AE4:01B2 stosb

0AE4:01B3 ;

0AE4:01B3 ; if we're not done, process the next byte

0AE4:01B3 cmp bp, 0

0AE4:01B6 jne 1a3 ;jne inner_loop (jmp)

0AE4:01B8 ;

0AE4:01B8 ;

0AE4:01B8 ; flush output and try for more

0AE4:01B8 call 178 ;call write_data

0AE4:01BB jmp 1a0 ;jmp outer_loop (jmp)


0AE4:01BD ;

0AE4:01BD ; declare global data

0AE4:01BD ;read_handle:

0AE4:01BD db 00,00

0AE4:01BF ;read_filename:

0AE4:01BF db "testfile.dat",00

0AE4:01CC ;write_handle:

0AE4:01CC db 00,00

0AE4:01CE ;write_filename:

0AE4:01CE db "testfile.out",00

0AE4:01DB ;

0AE4:01DB ; remainder is buffer space

0AE4:01DB

-r cx

CX 0000
:0400

-n h2b.com

-w

Writing 00400 bytes


-q

You might also like