{ "metadata": { "name": "", "signature": "sha256:32798cc93d482d240b34bba4f91b030a0f39714241cbd5fb3b4ea246670e7b38" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "#Function Entropy for \"notepad.exe\"\n", "The purpose of this example is to showcase how you can use the python scientifc computing tools with IDA Pro. In order to complete this demo you will need to have numpy, pandas, scipy and matplotlib installed. Once installed launch IDA with a notepad.exe database loaded (actually doesn't have to be notepad.exe but it's the one used in this example)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "import scipy.stats\n", "import idc\n", "import idaapi\n", "import idautils\n", "import numpy as np\n", "import pandas as pd\n", "import pylab\n", "#Better looking Graphs..\n", "pd.options.display.mpl_style = 'default' \n", "pylab.rcParams['figure.figsize'] = 12.0, 8.0\n", "#Binary Info\n", "print \"MD5: {} Binary: {}\".format(idc.GetInputMD5(), idc.GetInputFile())" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "-----------------------------------------------------------------------------------------------------\n", "Python 2.7.5 |Anaconda 2.1.0 (32-bit)| (default, May 31 2013, 10:43:53) [MSC v.1500 32 bit (Intel)] \n", "IDAPython v1.7.0 final (serial 0) (c) The IDAPython Team \n", "-----------------------------------------------------------------------------------------------------\n", "MD5: E30299799C4ECE3B53F4A7B8897A35B6 Binary: notepad.exe" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "def entropy(in_bytes):\n", " bytes = np.array(np.fromstring(in_bytes,dtype='uint8'), dtype='int32')\n", " return scipy.stats.entropy(bytes[np.nonzero(bytes)])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "def get_func_bytes(func_ea):\n", " bytes = \"\"\n", " for start, end in idautils.Chunks(func_ea):\n", " bytes += idaapi.get_many_bytes(start, end - start)\n", " return bytes\n", " \n", "func_start = idc.GetFunctionAttr(idc.ScreenEA(), idc.FUNCATTR_START)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "data = ((func_ea, entropy(get_func_bytes(func_ea))) for func_ea in idautils.Functions())\n", "func_df = pd.DataFrame(data, columns=[\"EA\", \"Entropy\"])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "func_df['Formatted_EA'] = func_df['EA'].map(lambda ea: \"{:X}\".format(ea))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "df_plt = func_df\n", "ax = df_plt.plot(kind='scatter', x='EA', y='Entropy')\n", "ax.set_xticklabels(['{:X}'.format(int(ea)) for ea in ax.get_xticks()])\n", "ax" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nuXPnqra21vH3W1pa3B4SAAAAkJRXy/v5uo725s2bde2116q+vt6vpwQAAAAC4VuhffLkSf3Lv/xL\nvMju7e3Vk08+6cdTAwAAAL7LyytDAgAAANZxwRoAAADAAxTayNnQ0JAGBweDHgYA5CX2kXaRnW35\nkN/4559//nm3H/T999/X9u3bFQ6HFY1GNXXqVL388svq7u7Wvn37FA6H1dbWpgULFqitrU1btmzR\n/v37tXv3bpWWlmr69Ok6dOiQWlpatHfvXk2ePFlTpkyRdPnqkq2trWpvb9fkyZM1efJkSdKJEyf0\n+uuvq6OjQ9dcc40qKirc/rOKxoULF/TjH/9YN9xwQ/x1dHp9161bp/Xr12vOnDlXvOadnZ3asGGD\nDh48qLq6Oo0fPz7jx0fmMn19M8nJ6f7k5450swuHw/r5z3+unp4effjhhzpz5kz8AmBO+0infSrZ\nuSdZfk77SKfX3en2tWvXas2aNTp37pzmzZuX8nGQmUyyS3b/xPdkOBzWW2+9pS984QuS5FjnkJ17\nMsmvp6dHb775pg4ePKgJEyZo2rRpkpLn9MknnzjmmnZ+MY+98847sVgsFtu4cWOsv78/fvu7774b\ni0ajsTfffDN+2759+2L79++PxWKx2Nq1a+O3v/322/GfN23alPT2119/Pf7zmjVrXPwLis9vfvOb\n2AcffBA7duxY/LaxXt/29vYR943FYrFTp07FWltbXXl8ZCaT1zfTnJzuT37uyCS7d999d8TvDXPa\nRzrtU8nOPcnyi8WS7yOdXvex8nj77bdH5Jjq/khfJtk53T/xPTn88/nz5x3rHLJzTyb5rVu3Lv7z\n5s2bY7HY2DklyzUWSz8/z1pHurq69JOf/GTEJ+9YLKZLly5Jkurq6tTe3q6lS5fG//3GG2+M339w\ncDA+5R9LOF/T6eqSoVAo/vOECRNc/VuKyalTpxQKhVReXj7i9kxf3127dmnSpElavXq1PvroI9cf\nH8ll+vpmmpPT/ckvd7m8N6LRaPxnp32k0z6V7NzhlJ8Tp9fd6faPP/5Y06dPV2VlpSKRSMr7I32Z\nZpfq/hcvXlRdXZ0kqaOjQ3feeWf83xLrHLJzR6b5TZw4URcuXNDg4KB27dqlS5cujZnTsMRcpfTz\n86zQrq2t1d/+7d/qj3/8Y/y2N998Uz/96U8lSfPmzdP58+fjX1+Odsstt+hHP/qRfvzjH+vzn//8\nFf8++uqSiQeOsrIyt/6MotPa2qrGxsYrbs/09e3p6dHp06f1yCOPaP/+/RoaGnL18ZFcpq9vpjk5\n3Z/8cpdpdseOHVNzc7N++tOfamBg4IrfG72PdNqnkp07nPJz4vS6O92+e/duNTQ0qKGhQbt27Up5\nf6Qv0+yc7j/8nly7dm28SDt//ny8fWs0snNHpvk1NjaqpaVFr7/+um688UadP39+zJyS5Sqln19p\n2iPLQnl5+YielQcffFC///3v49sVFRU6deqUqqqqrvjd3bt365lnntHQ0JDeeustPfTQQ/F/27Rp\nk+bPn6/p06fHb0tsdi8pKXH7TykaJ0+e1BtvvKGenh7V1tZq5syZkrJ7fYdn1mbNmqVIJKLp06e7\n+vi4UjavbyY5Od2f/HKXaXazZs3SfffdJ0nauXOnwuFw/DoFyfaRTvtUsnPHWO+ZZJxed6fbjxw5\nonXr1kmSTp8+nfL+SF+m2Tndf/g9uX379vh9x6pzyM4dmeZXWlqqr33ta5Kk5uZmTZo0acyckuUq\npZ+fJ4V2JBJRZWWlpJEVvzTya81bb71V77zzTvwPPn78uPr7+zV37tz4NPy4ceNGfFLYvHmzrrvu\nuisu4X7hwoX48w3/jMx9+9vflnT5666pU6fGb8/09b3xxhvV2dmpefPm6dSpU1qwYIGrj4/kMn19\nM83J6f7kl7tc3htz587VgQMHJDnvI532qWTnDqf8nDi97slu7+vrU21tre655x5J0saNG9XX16fy\n8nLyc0Gm2aW6/6JFi3T8+HGdPXt2zDqH7NyRaX7DTp8+rXPnzmnChAlj5jQsMdf6+vq08/Ok0N6y\nZYsuXrwYH1g0GtXOnTsViURUU1OjRYsWSbo81V5fX6/XXntNZWVlIz5l1NXVafXq1ZIUP5ifPHlS\nW7ZsUX19vcLh8IirSy5ZskSvvPKKYrGY7r33Xi/+rKIRiUTU2to64pOh0+u7YcMGdXZ2qry8XLW1\ntfEPUrfddpv+/d//XXv27NG111474sCeyeMjc5m8vpnm5HR/8nNHutmFw2Ht3r1b58+fl3S5EHv0\n0UfH3Ecm26c6PT6ykyw/p32k0+ue7PbVq1erv79ffX19GjdunI4ePapjx47piSeeID+XZJJdsvt/\n+OGHI96TZ8+e1aJFi8asc8jOPZnkt2fPHoXDYcViMT3++OOSnOtRp1yl9PPjypAAAACAB7hgDQAA\nAOABCm0AAADAAxTaAAAAgAcotAEAAAAPUGgDAAAAHqDQBgAAADzg6ZUhAQDuOnTokP7t3/5Nt956\na/y29vZ2/cM//IMOHDigvXv3avfu3Vq8eLEeeOCBAEcKAKDQBgBD6urqVF9fr6ampvhtQ0NDkqR5\n8+apoqJCU6ZM0YkTJ4IaIgDgM7SOAIBR/f39Ghwc1E033RS/7fe//72WLFmimpoaHTlyJMDRAQCY\n0QYAg5qbm9XT06PGxsYRl1Q/d+6cQqGQFi1apDfffFM1NTUBjhIAihuFNgAY1NTUpCNHjsTbRiTp\nwIEDOnXqlJqbmyVJnZ2dGhoa0rhxfHkJAEGg0AYAo4Znqz/66CMNDQ1p7969+u53v6vS0su79o6O\nDu3Zs0ef+9znghwmABQtCm0AMOTQoUMKh8PxWWtJ+uSTT7RkyRJ1dHRoxowZamxs1MDAgA4cOKDd\nu3drxowZuu666wIcNQAUp5JYLBYLehAAAABAoaFxDwAAAPAAhTYAAADgAQptAAAAwAMU2gAAAIAH\nKLQBAAAAD1BoAwAAAB6g0AYAAAA8QKENAAAAeOD/A1PtnhzPM0sxAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "func_df.sort(['Entropy'], ascending=False)" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EAEntropyFormatted_EA
50 4223618 10.309925 407282
9 4199506 9.205673 401452
114 4279164 7.074449 414B7C
11 4202542 6.874658 40202E
117 4281006 6.558433 4152AE
34 4220529 6.495139 406671
13 4204565 6.365993 402815
101 4275385 6.263491 413CB9
108 4277295 6.136212 41442F
93 4274148 6.068605 4137E4
31 4220082 5.946059 4064B2
109 4277951 5.812822 4146BF
1 4198624 5.805990 4010E0
107 4276843 5.769901 41426B
84 4272057 5.663713 412FB9
123 4282943 5.635076 415A3F
90 4273209 5.622370 413439
92 4273763 5.433877 413663
112 4278645 5.361000 414975
22 4219325 5.339757 4061BD
77 4270842 5.337793 412AFA
61 4269088 5.297247 412420
74 4270285 5.212553 4128CD
81 4271678 5.192738 412E3E
0 4198405 5.168159 401005
144 4283747 5.157894 415D63
120 4282474 5.152816 41586A
89 4272974 5.110607 41334E
119 4282243 5.108883 415783
113 4278944 5.052786 414AA0
............
128 4283454 2.196426 415C3E
138 4283610 2.190622 415CDA
133 4283528 2.184170 415C88
126 4283418 2.176904 415C1A
43 4222965 2.173053 406FF5
131 4283492 2.168547 415C64
127 4283436 2.158516 415C2C
137 4283594 2.143894 415CCA
2 4198750 2.060482 40115E
82 4271969 2.008445 412F61
12 4204543 1.496372 4027FF
8 4199495 1.433464 401447
153 4284699 1.433189 41611B
147 4284279 1.433088 415F77
148 4284290 1.432506 415F82
27 4219819 1.430097 4063AB
10 4202531 1.420613 402023
135 4283564 1.418097 415CAC
63 4269465 1.412329 412599
59 4269062 1.396386 412406
60 4269075 1.377923 412413
53 4268456 1.229824 4121A8
129 4283472 1.189524 415C50
130 4283482 1.126457 415C5A
140 4283638 1.090974 415CF6
139 4283628 1.069728 415CEC
58 4269052 1.045125 4123FC
54 4268460 1.039051 4121AC
25 4219744 0.972180 406360
154 4284712 -0.000000 416128
\n", "

155 rows \u00d7 3 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 7, "text": [ " EA Entropy Formatted_EA\n", "50 4223618 10.309925 407282\n", "9 4199506 9.205673 401452\n", "114 4279164 7.074449 414B7C\n", "11 4202542 6.874658 40202E\n", "117 4281006 6.558433 4152AE\n", "34 4220529 6.495139 406671\n", "13 4204565 6.365993 402815\n", "101 4275385 6.263491 413CB9\n", "108 4277295 6.136212 41442F\n", "93 4274148 6.068605 4137E4\n", "31 4220082 5.946059 4064B2\n", "109 4277951 5.812822 4146BF\n", "1 4198624 5.805990 4010E0\n", "107 4276843 5.769901 41426B\n", "84 4272057 5.663713 412FB9\n", "123 4282943 5.635076 415A3F\n", "90 4273209 5.622370 413439\n", "92 4273763 5.433877 413663\n", "112 4278645 5.361000 414975\n", "22 4219325 5.339757 4061BD\n", "77 4270842 5.337793 412AFA\n", "61 4269088 5.297247 412420\n", "74 4270285 5.212553 4128CD\n", "81 4271678 5.192738 412E3E\n", "0 4198405 5.168159 401005\n", "144 4283747 5.157894 415D63\n", "120 4282474 5.152816 41586A\n", "89 4272974 5.110607 41334E\n", "119 4282243 5.108883 415783\n", "113 4278944 5.052786 414AA0\n", ".. ... ... ...\n", "128 4283454 2.196426 415C3E\n", "138 4283610 2.190622 415CDA\n", "133 4283528 2.184170 415C88\n", "126 4283418 2.176904 415C1A\n", "43 4222965 2.173053 406FF5\n", "131 4283492 2.168547 415C64\n", "127 4283436 2.158516 415C2C\n", "137 4283594 2.143894 415CCA\n", "2 4198750 2.060482 40115E\n", "82 4271969 2.008445 412F61\n", "12 4204543 1.496372 4027FF\n", "8 4199495 1.433464 401447\n", "153 4284699 1.433189 41611B\n", "147 4284279 1.433088 415F77\n", "148 4284290 1.432506 415F82\n", "27 4219819 1.430097 4063AB\n", "10 4202531 1.420613 402023\n", "135 4283564 1.418097 415CAC\n", "63 4269465 1.412329 412599\n", "59 4269062 1.396386 412406\n", "60 4269075 1.377923 412413\n", "53 4268456 1.229824 4121A8\n", "129 4283472 1.189524 415C50\n", "130 4283482 1.126457 415C5A\n", "140 4283638 1.090974 415CF6\n", "139 4283628 1.069728 415CEC\n", "58 4269052 1.045125 4123FC\n", "54 4268460 1.039051 4121AC\n", "25 4219744 0.972180 406360\n", "154 4284712 -0.000000 416128\n", "\n", "[155 rows x 3 columns]" ] } ], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "idc.Message(str(func_df.sort(['Entropy'], ascending=False)))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 } ], "metadata": {} } ] }