之前看安全客的时候,发现有大佬逆向了一个流氓app,觉得反看一手app很有意思,趁着下午空闲,自己也试着研究了一下如何逆向Andriod的App,好不容易挑了个流氓软件,挑去过程请省略。。。
首先介绍一下下面要用到的三款工具
apktool :作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看dex2jar :作用:将apk反编译成java源码(classes.dex转化成jar文件)jd-gui : 作用:查看APK中classes.dex转化成出的jar文件,即源码文件命令中test.apk指的是要反编译的APK文件全名,test为反编译后资源文件存放的目录名称,即为:apktool.bat d -f [apk文件 ] [输出文件夹])
这是得到的整个资源文件。
把apk文件重命名为zip文件后,再提取出来,能够得到classes.dex文件,如图:
接下里就是使用dex2jar将其转化为jar文件,用法如下:
这里参数直接是classes.dex文件即可,这样直接得到了jar文件
最后用jd-gui反编译.jar文件就能看到其源码:
接下来就是对这个流氓软件进行分析了:
先从主类MainActivity入手:
服务器地址是少不了的,要不然怎么发数据给服务器呢?知道了这个服务器地址,但是挂了。。无语,反查了一波是国内杭州的服务器,并且还有注册公司,端口开了3306和ssh,这里就不爆破端口了,还有宝塔
既然是流氓软件,那就看实现了哪些功能,不过有一说一,这个实现的功能比起其他流氓软件确实少很多。。。
在tools这个package下看到了以下功能,看了一看,最重要的功能就是获取手机通讯录,然后将手机通讯录的信息发送给指定服务器,其他什么获取地理位置啥的api我都没找到。。。
还有就是获取文件安装的绝对路径:
在Mainactivity中我们可以看到这一段:
也就是说,设置了webview使用了函数setAllowFileAccess(),通过这个函数使其可以使用file协议,那么就可以通过file协议来读取任意文件,可以说是十分危险,如果此时将Load_URL设置为file:///etc/hosts是可以读取文件的,不过这里加载了如上的地址。
并且我们在这里可以看到:
该文件是使用javascript代码编写而成。在该文件中实现了获取用户隐私数据主要代码调用。通过@ReactMethod方式在js文件中调用android原生API代码。实现js与java的交互,这有助于避免被杀毒软件查杀,这点也可以在上图WebView控件之WebSettings中setJavaScriptEnabled(True)得到印证。并且当打开程序时,程序会自动跳转到系统管理应用设置页面:
private void openSetting() { Intent intent = new Intent("android.settings.APPLICATION_DETAILS_SETTINGS"); intent.setData(Uri.fromParts("package", this.main.getPackageName(), null)); this.main.startActivity(intent); } @JavascriptInterface public boolean checkContactPermission() { return (ContextCompat.checkSelfPermission(this.main, "android.permission.READ_CONTACTS") == 0); } @JavascriptInterface public String getContactList() { if (ContextCompat.checkSelfPermission(this.main, "android.permission.READ_CONTACTS") != 0) { ActivityCompat.requestPermissions(this.main, new String[] { "android.permission.READ_CONTACTS" }, 1); return ""; } ArrayList arrayList = rapid.getBuild().getAllContacts(this.main); return (new Gson()).toJson(arrayList); }并且判断是否具有获取通讯录的权限,如果这个时候你手误点允许的话,那么恭喜你,你的通讯录成功被发到了对方服务器上了,最后放一张服务器的后台登录页面,看了下是shiro的框架,指不定反序列化的payload能打通哦~
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UoJSMqq9-1593683489290)(C:\Users\86189\AppData\Roaming\Typora\typora-user-images\image-20200702173634575.png)]
,最后放一张服务器的后台登录页面,看了下是shiro的框架,指不定反序列化的payload能打通哦~