移动安全之修改加密带sig签名的APP数据包

现在越来越多的app应用都采取了加sig签名的方法来防止自身的数据包在传输中被修改所以有时要测一个APP是否有逻辑问题,有时可能会变得棘手.因为每个APP的实现的sig算法都不尽相同,要想成功的修改数据包再重新签名,你可能会要先反编译它,然后在找到sig算法,有时可能运气好sig的算法就写在java代码里,那就很容易的可以直接利用或还原成其他语言,但一般sig都会写到so文件,arm的汇编代码相信很多人都看不下去.先不谈app加固的情况,像一些安全性要求较高的app,一般都会有检查apk自身签名,并在运行时发送到服务器做校验,一旦签名不一致就直接退出,在这种情况下如果app采用随机key或者非对称加密来加密数据,就算知晓加密的过程,在不能修改app代码的情况下,是无法解密出加密的数据.那么有没有其他的方便便一些的方法来实现改包呢,先来说说我的一些思路. 
其实要想减少工作量,主要就是在于分析算法,那么有什么方法可以减少分析算法或者直接略过各种算法分析的过程了,想到的就是通过HOOK注入. 

我说一下简单流程: 
首先抓包分析下数据,然后反编译dex文件找到调用sig函数的函数hook之,在其被调用前将其参数(一般就是要修改的明文数据)通过socket转发出来,然后本地修改完之后再发送回去,最后hook程序将参数重新赋值. 
我这里以手机里某(han)某(ting)酒店APP来举个例子: 

1.首先通过抓包简单分析下数据包 

 

通过截获的数据来看数据包已经被加密而且加了签名 

 

 

2.接下来就是解压apk包,反编译里面dex文件,打开一看有两个,不管先反编译了先,然后通过数据包里的特征值快速定位到调用sig算法的函数文件,目测就是它了 


com.htinns.biz.HttpUtils.packParams

hook它应该就可以了 

 

3.既然找到了函数那接下就是hook了,这里就用比较出名的xposed神器来试试(具体用法可以自己网上搜索 ) 


其实原理很简单,简单说下,只要调用findAndHookMethod方法写入需要hook的函数名注意参数不要写错,然后在beforeHookedMethod中取得要参数(即要修改的明文数据包)将其传入新的子线程中,主线程会一直等待(主界面会暂时定住),子线程会将数据转发到pc机的指定端口,可以用nc监听,修改完再发送,主线程会一直等待到pc返回了数据,最后将参数重新赋值 

先安装写好的插件 
 
截获下登陆的数据包 

截获成功修改后直接发送就可以了 

这种改包方式有个好处就是可以不要考虑传输方式是什么,因为已经在传输前改完了包. 
还有个思路说下,就是hook目标程序然后向里面注入一个HttpServer,然后本机将通过代理截获的数据修改重新发送到目标程序利用反射的方式调用加解密函数,这样有个好处就是可以截获并重组完整的数据包.

你可能感兴趣的:(Android,TCP/IP,Security)