前言
计算MD5是进行apk分析的最基本操作之一,在MobSF中,由于python的第三方库十分丰富,要计算md5只需要导入hashlib这个库就可以了,但是在C++中,这个东西还得自己实现。
本文对github上的一个md5计算的项目进行扩展,使得其可以进行字符串md5计算的update操作和对文件的md5计算。
项目地址
原项目:https://github.com/JieweiWei/md5
我的项目地址:https://github.com/LeeHDsniper/md5
参考文章:http://www.cnblogs.com/flying_bat/archive/2007/09/25/905133.html
环境
- Ubuntu16.04LTS
- g++ 5.3.1
Note
网上有很多关于md5计算的资料,但是几乎都差不了多少,甚至代码都一样,例如github上的这个项目和那篇参考文章中项目,其实代码都一样,最多换了函数名称或者删掉了一些功能。
那篇参考文章中最后给出了源码,但是我编译后得出的md5竟然是错的……于是在github上找到了一个md5项目,尽管只能计算字符串的md5,而且不能追加,但是至少算出来是正确的。
接下来就是死磕源码…….这个过程是很痛苦的,但是不得不承认,这些代码写的很漂亮,逻辑清楚,复用性高(所以我才能进行扩展)。
Some skill
#define BIT_SET(a,b) ((a) |= (1<<(b)))
#define BIT_GET(a,b) (((a) & (1<<(b)))>0?1:0)
#define BIT_RST(a,b) ((a) &= ~(1<<(b)));