记一次Andriod逆向
前言
之前看安全客的时候,发现有大佬逆向了一个流氓app,觉得反看一手app很有意思,趁着下午空闲,自己也试着研究了一下如何逆向Andriod的App,好不容易挑了个流氓软件,挑去过程请省略。。。
正文
首先介绍一下下面要用到的三款工具
- apktool :作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看
- dex2jar :作用:将apk反编译成java源码(classes.dex转化成jar文件)
- jd-gui : 作用:查看APK中classes.dex转化成出的jar文件,即源码文件
如何使用?
apktool.bat d -f test.apk test
命令中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能打通哦~