病毒分析教程第八话--idapython使用

IDAPython是IDA的一款强大的插件,通过它可以对病毒代码做一些自动化的操作,常用于汇编码反混淆和解密。接下来我们尝试使用该工具来解密病毒代码。

本次实验的样本为:F834F898969CD65DA702F4B4E3D83DD0,先使用IDA打开它,目光聚焦到上面的导航栏,有一大段绿色的数据,位于0x40C030,直觉告诉我,这是段加密后的可执行文件。
病毒分析教程第八话--idapython使用

在unk_40C030处按下Ctrl+X,即可交叉引用到代码处,发现它是函数sub_404520的一个参数,通过代码我们大致可以猜出,sub_404520的作用主要是解密出一个dll,然后LoadLibraryA调用它,下面就来主要分析这个解密函数sub_404520。
病毒分析教程第八话--idapython使用
解密的核心逻辑就是红框里这个循环,主要工作是读取数据里的每一字节,然后进行减操作,可以说是很简单的加密方式了。同时我们可以注意到一个有趣的地方,在位置0x2F0和0x2FF之间,病毒是产生随机字节,这样做的目的是免杀,使每次生成的dll的哈希不一样。
病毒分析教程第八话--idapython使用
解密循环中用到了a4的值,这个变量是作为参数传进来的。
病毒分析教程第八话--idapython使用

回到解密函数sub_404520调用的地方,我们发现第4个参数就是’r’。
病毒分析教程第八话--idapython使用

OK,分析完后我们就可以写出解密代码了。点击File->Script command即可调出python调试板,首先使用GetManyBytes函数获取初始地址为0x40c030的0x11000大小的字节,然后依次做减法运算,最后将运算后的字节码写入新文件。
病毒分析教程第八话--idapython使用

解密后的文件我保存为dump,使用DIE看果然是个dll文件,成功解密。
病毒分析教程第八话--idapython使用

为了方便调用,我们可以将上述脚本保存为decrypt.py,然后将解密代码封装到decrypt_data函数中,后续使用时调用decrypt_data函数就行。
病毒分析教程第八话--idapython使用

然后我们使用交叉引用查看还有哪些地方调用了这个解密函数。很好,在WinMain+2949处还有个加密,看来这个病毒会解密生成两个文件,我们下面就用脚本直接加密unk_41D038。
病毒分析教程第八话--idapython使用

点击File->Script file,选中decrypt.py即可成功加载。
病毒分析教程第八话--idapython使用

然后在命令行输入decrypt_data(0x41D038, 0x50000, ’d:\Temp\dump2’),即可成功解密文件。
病毒分析教程第八话--idapython使用

解密出来的文件是个exe。
病毒分析教程第八话--idapython使用