确定了是Lzma的压缩算法了,后面跟着的四位估计是解压完之后的大小。然后写程序,后面那一坨数据并不是常规的 Lzma 压缩后的数据,基本断定是加密过的,然后我就感觉这丫的肯定找了其他人搞了外包了,防 hack 水平跟上次的比简直是质的飞跃,不过,从前期搜集的资料来看,这东西存在有一定年头了,结果还是没有 Linux 版本,唉,看来是这个任务本来是要交给Linuxer完成的吗(大雾。
从libDyKey.so下手,没什么好说的了,就这几个慢慢找吧,
loadZsoMoudle 里面有个代码块是这样的,老司机们一眼估计就能看出是字节异或了吧(当时我拿ida动调锁定到了这里,我还是太菜),数据经过异或之后再拿来解压就没问题,然后坑点就紧随其后的来了,在我拿到样本的当天,电信就更新了新的加密方法(原因是因为一哥们早很多天改了smali:GDOU-Lily,电信针对此情况更新算法TAT)。拿ida脱壳的时候确实脱下来了,但是只是没更新之前的,这就很尴尬很尴尬了,而且当时没有完成静态脱壳,没办法,就拿这个老样本分析了,然后就造成了一个天大的误区,我分析完样本,发现完全没有任何获取 ip 地址的函数,动调,也没有发现有任何加密函数,没办法,我连续几天反复测试 smali 传送给 so 库的数据是不是有问题,TAT。至此,国庆假期也就过完了,中间一段时间由于有其他事就搁浅了一段时间。分析出来如何静态脱壳之后,脱掉新的样本的壳,我才意识到自己犯二了。
关于脱壳程序,嗯,就这样写,继续分析dump出来的样本,
当我看见这几个函数的时候,真觉得自己 SB,犯了那么时间的错误,浪费了那么多时间,
找到这个几个函数的调用位置,当 socket () 和 bind () 函数没有返回成功值的时候,执行0x1952,将加密后的需要加密的ip地址替换为127.0.0.1,自此,就没什么好疑惑的了,将blt和bne换成nop就可以了,然后把刚才改好的 so 库压缩异或回去就可以了,再次之后已经可以成功登陆了。