过陌陌APK签名校验

    想分析下陌陌的一些功能,想不到陌陌还做了蛮多保护。分析使用的是5.2版本,这个版本进行了加壳,先要把壳脱掉,脱壳因为有万能的脱壳机,这里过程就略过了,主要讲下过签名校验吧。

    过签名校验看雪上有同学之前有讲过,不过是2012年的,陌陌的文件名已经完全不一样了,不过他的签名获取代码还是跟以前类似,可以借用来定位一下代码位置。   

    apk改之理对脱完壳的APK进行分析,然后在工程里搜索collectCertificates字符串,找到签名校验的相关代码的位置。

wKiom1RjWcPS9IAXAADZUQR-yoc393.jpg

   经过netbeans下断点确认,校验签名是LINE 6016的位置

   JEB分析该APK,并找到该函数位置,得到该函数比较清晰的JAVA伪码

wKiom1RjWcSTf9_WAAHMJ5L6lUE421.jpg

   还是继续用netbeans来分析吧,netbeans查看调用堆栈非常方便(netbeans的调试功能结合JEB的交叉引用识别功能,实在是一大利器)

wKiom1RjWcTy9IsKAACGIN0db0A129.jpg

    利用JEB的引用跳转功能,把堆栈途经的几个函数看一下

   wKioL1RjWjGjJ4eMAADgUHYm1C8385.jpg

   cp.d函数如下图:

   wKioL1RjWjPzNw8nAACoOqqTRAg336.jpg

   这个函数是计算签名MD5

   wKiom1RjWcbTpljBAAE8ODPKIeU395.jpg

    到这里已经很清楚了,它就是把APK签名的signature计算下MD5,然后发送到服务端,由服务端来判断签名是不是正确,不正确就不让登录了。

 

   那么我们这里只要能够给服务端发送一个正确签名的MD5就万事大吉了。

   怎么得到正确签名的MD5呢,从h.d()函数,可以看到,它是从一个APK文件来获取签名计算的,那就给他喂个正常签名的APK好了。

   把原始apk拷贝到/sdcard/目录下,路径名设为/sdcard/momo.apk,然后在netbeansh.d()函数里,创建文件后的位置下断

wKiom1RkDH_wUJXhAAROMKdoX9c233.jpg

    然后直接把这里的v4变量里的path改成/sdcard/momo.apknetbeans修改变量的功能还是蛮爽的。    wKioL1RkDO3gUUIpAAKqLqLlQyM987.jpg



   到这里,签名MD5就跑出来了。直接在这里把v0设为这里跑出来的MD5,然后重新打包,签名就OK

 

   小结:陌陌的签名校验是跟登录结合起来的,其实这个时候服务端可以发挥更大的反分析反调试功能,一旦发现POST上来的是特定非正常签名的MD5,直接把这个陌陌号禁用一段时间或者通过一定规则过滤后直接禁用这个陌陌号,不让它登录,会给分析者带来不小麻烦。


你可能感兴趣的:(apk,签名校验,陌陌)