Usage

iarybo, interactive IPython shell

iarybo is a IPython shell that allows to quickly use arybo inside an interactive shell.

You can launch arybo without any command line argument and get a shell without any variable specified. You need to use the set_mba(N) function to declare: * an mba object which will be instanciated as MBA(N) (todo link with the library) * a bunch of N-bits variables: a,b,c,d,x,y

You can also directly specify a bit number as a command line argument, and set_mba(N) will be called for you. In some version of IPython, calling back set_mba(N) does not change the mba object and associated variables that have already been declared (it seems to be related to this bug in IPython https://github.com/ipython/ipython/issues/62, if someone has a workaround for this, any help is welcome :)).

Example session

Here’s a tiny example session:

$ iarybo 4
Welcome to Arybo (c) Quarkslab 2014-2016!
=========================================

                         `..----.`
                       `.------------.
                     `--.-.```````````.`
                     `  ``  ```````    .+yy-
                        ::oydmNNNNNmdysmMMMd`
                       /mNMNdyooymmMMMMMMNNd`
                    `/omMMNh/`.dhyNMMMMMMNm:
              .-.   -hddmMNh.-.+sdMMMMMMd+:
        `.:+sdmNmd/  `-omMMNdyymNMMMMNd+``-`
    .:+hmNNMMMMMMMm.  :yNNNNNNMMMMNhs:..`-:`
    `/shMMMMMMNNNMMy/ymmNNNMMMMNd+.```..-:-
     `+yNNMNNddNMMMMhyssyysyhdds-  `...--.
   .+yhhhdddhhhdNMMMMNNdosoososyyhyo---.``  ```
 `:osyhhhhhy:-:+oysdmNNhssssydNNhssyhds.`   ``....`
  `.-/syhho.     ``-+ssssshmMMMN+y+ohhMs        `.--`
      `...`         `.:/+dNMMMMMMNmNmNNo``..       -.
                         `-+hdMMMMMMMMh` ``      `..
                             .yNMMMMMd-`      ``..
                              `+mMMMMo.``    `--:.
                                .sNMMMNs`  `.:::::-
                                 .+mMMMMo   -::::--
                                 `-+NMMMN-  .::--`
                                  `:mMMMMh  .::.
                               ..--+NMMMMm`.o/..`
                               `.-+mMMMMMNoyy+
                                 :ydmMMMMN+`
                                 `.-:/oos+.



These variables have been set for you:

  mba = MBA(4)
  x, y, a, b, c, d = 4-bit vars

You can use set_mba(N) to change the bit count of these variables.
WARNING: on some IPython version, this might not work!

Other exposed functions are:
  - simplify, simplify_inplace, expand_esf, expand_esf_inplace
  - symbol, imm, esf
  - Vector/Matrix

Other exposed modules are:
  - analyses

Report any issues to qbobf@quarkslab.com.

In [1]: x+1
Out[1]:
Vec([
(x0 + 1),
(x0 + x1),
((x0 * x1) + x2),
((x0 * x1 * x2) + x3)
])

In [2]: (x+y) - (x&y)*2
Out[2]:
Vec([
(x0 + y0),
(x1 + y1),
(x2 + y2),
(x3 + y3)
])

Using the arybo library

Another way to use Arybo is to directly use the provided library.

A classical way to start is to import the arybo.lib.MBA() object, and instantiate one with the number of bits we want to work with:

from arybo.lib import MBA
mba = MBA(8)

From here, we can declare various symbolic variable to work with:

from arybo.lib import MBA
mba = MBA(4)
x = mba.var('x')
y = mba.var('y')

And play with them:

print(x^y)
>>> Vec([
(x0 + y0),
(x1 + y1),
(x2 + y2),
(x3 + y3)
])
print((x+y)-((x&y)<<1))
>>> Vec([
(x0 + y0),
(x1 + y1),
(x2 + y2),
(x3 + y3)
])

Much more can be done! Have a look at the Tutorials page and the ̀`examples` directory for more advanced examples, and the Arybo reference page for the documentation of the Arybo API.